软件测试与软件测试工程师.docx
《软件测试与软件测试工程师.docx》由会员分享,可在线阅读,更多相关《软件测试与软件测试工程师.docx(12页珍藏版)》请在冰豆网上搜索。
![软件测试与软件测试工程师.docx](https://file1.bdocx.com/fileroot1/2023-1/31/7b31362d-dfee-462b-a07b-e92e2409cc47/7b31362d-dfee-462b-a07b-e92e2409cc471.gif)
软件测试与软件测试工程师
本科学年论文(设计)
论文题目:
软件测试与软件测试工师
学生姓名:
学号:
专业:
班级:
指导教师:
完成日期:
2013年11月09日
目录
序言1
一、软件测试1
(一)软件测试的目的、原则和内容1
(二)测试方法2
(三)现状前景4
二、软件测试工程师5
(一)就业优势5
(二)工作职责6
(三)职业素质7
(四)个人素养8
参考文献10
软件测试与软件测试工程师
内容摘要
本文详细描述了软件测试的定义,软件测试的原则、目标、具体内容和测试的具体方法。
并对软件测试工程师这一职业的就业前景,基本工作内容,专业优势作了具体介绍。
软件测试的主要内容就是验证和确认。
其目的就是为了减小风险、确定项目完成时间。
所以软件测试应遵循一定的原则来进行规范化的测试。
本文主要介绍了两种软件测试的方法:
等价类和边界值。
软件测试工程师目前作为一个IT行业的热门职业,拥有良好的职业优势和前景。
具有入行门槛较低、就业竞争小、就业质量高、无性别歧视等特点。
软件测试工程师需要掌握测试专业技能、软件编程技能和网络、操作系统、数据库、中间件等知识等基本技能。
关键词:
软件软件测试软件测试工程师就业
Softwaretestingandsoftwaretestengineer
Abstract
Thispaperdescribesthedefinitionofsoftwaretesting,softwaretestingprinciples,objectives,specificcontentandspecifictestmethods.SoftwareTestEngineeroftheprofessionandemploymentprospects,thebasicworkcontent,professionaladvantagesmadespecificintroduction.
Themaincontentofsoftwaretestingistoverifyandconfirm.Itspurposeistoreducetherisk,determinetheprojectcompletiontime.Therefore,softwaretestingshouldfollowcertainprinciplesforstandardizedtesting.Thispaperdescribestwomethodsofsoftwaretesting,equivalenceclassesandboundaryvalues.
SoftwareTestEngineerCurrentlytheITindustryasapopularcareer,hasagoodcareeradvantagesandprospects.Withlowbarrierstoentry,competitionforjobsissmall,theemploymentofhighquality,non-sexistandsoon.Softwaretestingtestengineersneedtomasterprofessionalskills,softwareprogrammingskillsandnetworks,operatingsystems,databases,middleware,andotherknowledgeofbasicskills.
Keywords:
SoftwareSoftwaretestingSoftwaretestingengineer
Obtainemployment
序言
软件测试(英语:
softwaretesting),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
软件测试的经典定义是:
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)、完全度(completeness)和质量(quality)的软件过程;是SQA(softwarequalityassurance)的重要子域。
一、软件测试
(一)软件测试的目的、原则和内容
软件测试是为了发现程序中的错误而执行程序的过程。
好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。
并且一个成功的测试是发现了至今为止尚未发现的错误的测试。
软件测试并不仅仅是为了找出错误。
通过分析错误产生的原因和错误的发生趋势,可以帮助项目管者者发现当前软件开发过程中的缺陷,以便及时改进。
这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性。
没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
另外,根据测试目的的不同,还有回归测试、压力测试、性能测试等,分别为了检验修改或优化过程是否引发新的问题、软件所能达到处理能力和是否达到预期的处理能力等。
1.测试原则
(1)测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的错误不外乎是系统不能满足用户的需求。
(2)程序员应该避免检查自己的程序,软件测试应该由第三方来负责。
(3)设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,如网络异常中断、电源断电等。
(4)应该充分注意测试中的群集现象。
(5)对错误结果要进行一个确认过程。
一般由A测试出来的错误,一定要由B来确认。
严重的错误可以召开评审会议进行讨论和分析,对测试结果要进行严格地确认,是否真的存在这个问题以及严重程度等。
(6)制定严格的测试计划。
一定要制定测试计划,并且要有指导性。
测试时间安排尽量宽松,不要希望在极短的时间内完成也有一个高水平的测试。
(7)妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
2.测试目标
(1)发现一些可以通过测试避免的开发风险。
(2)实施测试来降低所发现的风险。
(3)确定测试何时可以结束。
(4)在开发项目的过程中将测试看作是一个标准项目。
3.测试内容
软件测试主要工作内容是验证(verification)和确认(validation),下面分别给出其概念:
验证(verification):
是保证软件正确地实现了一些特定功能的一系列活动,即保证软件以正确的方式来做了这个事件(Doitright)
(1)确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程。
(2)程序正确性的形式证明,即采用形式理论证明程序符合设计规约规定的过程。
(3)评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。
确认(validation):
是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。
即保证软件做了你所期望的事情。
(Dotherightthing)
(1)静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性。
(2)动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期间各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
(二)测试方法
1.等价类
(1)定义
是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
该方法是一种重要的,常用的黑盒测试用例设计方法。
(2)划分等价类
等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:
测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。
等价类划分可有两种不同的情况:
有效等价类和无效等价类。
有效等价类是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。
利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类是指与有效等价类的定义恰巧相反。
无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。
对于具体的问题,无效等价类至少应有一个,也可能有多个。
设计测试用例时,要同时考虑这两种等价类。
因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。
(3)划分等价类的标准
1)完备测试、避免冗余;
2)划分等价类重要的是:
集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
3)并是整个集合:
完备性;
4)子集互不相交:
保证一种形式的无冗余性;
5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。
(4)划分等价类的方法
1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
如:
输入值是学生成绩,范围是0~100。
2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类。
2.边界值
(1)定义
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。
通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
(2)与等价划分的区别
1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
(3)边界值分析方法的考虑:
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。
因此针对各种边界情况设计测试用例,可以查出更多的错误。
使用边界值分析方法设计测试用例,首先应确定边界情况。
通常输入和输出等价类的边界,就是应着重测试的边界情况。
应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
(4)常见的边界值
1)对16-bit的整数而言32767和-32768是边界
2)屏幕上光标在最左上、最右下位置
3)报表的第一行和最后一行
4)数组元素的第一个和最后一个
5)循环的第0次、第1次和倒数第2次、最后一次
(5)边界值分析
1)边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
例:
测试计算平方根的函数
--输入:
实数
--输出:
实数
--规格说明:
当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。
(三)现状前景
软件开发中出现错误或缺陷的机会越来越多,市场对软件质量重要性的认识逐渐增强。
所以,软件测试在软件项目实施过程中的重要性日益突出。
但是,现实情况是,与软件编程比较,软件测试的地位和作用,还没有真正受到重视,对于很多人(甚至是软件项目组的技术人员)还存在对软件测试的认识误区,这进一步影响了软件测试活动开展和真正提高软件测试质量。
1.误区一:
软件测试要求不高,随便找个人做都行
很多人都认为软件测试就是安装和运行程序,点点鼠标,按按键盘的工作。
这是由于不了解软件测试的具体技术和方法造成的。
随之软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业。
软件测试技术不断更新和完善,新工具,新流程,新测试设计方法都在不断更新,需要掌握和学习很多测试知识。
所以,具有编程经验的程序员不一定是一名优秀的测试工程师。
软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和不断学习精神。
2.误区之二:
软件测试是测试人员的事情,与程序员无关
开发和测试是相辅相成的过程,需要软件测试人员、程序员和系统分析师等保持密切的联系,需要更多的交流和协调,以便提高测试效率。
另外,对于单元测试主要应该由程序员完成,必要时测试人员可以帮助设计测试样例。
对于测试中发现的软件错误,很多需要程序员通过修改编码才能修复。
程序员可以通过有目的的分析软件错误的类型、数量,找出产生错误的位置和原因,以便在今后的编程中避免同样的错误,积累编程经验,提高编程能力。
随着软件产业的发展,软件产品的质量控制与质量管理正逐渐成为软件企业生存与发展的核心。
几乎每个大中型IT企业的软件产品在发布前都需要大量的质量控制、测试和文档工作,而这些工作必须依靠拥有娴熟技术的专业软件人才来完成。
软件测试工程师就是这样的一个企业重头角色。
二、软件测试工程师
软件测试工程师(SoftwareTestingEngineer)指理解产品的功能要求,并对其进行测试,检查软件有没有错误(Bug),决定软件是否具有稳定性(Robustness),写出相应的测试规范和测试用例的专门工作人员。
简而言之,软件测试工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的正常运作。
按其级别和职位的不同,分为三类。
高级软件测试工程师,熟练掌握软件测试与开发技术,且对所测试软件对口行业非常了解,能够对可能出现的问题进行分析评估;中级软件测试工程师,编写软件测试方案、测试文档,与项目组一起制定软件测试阶段的工作计划,能够在项目运行中合理利用测试工具完成测试任务;初级软件测试工程师,其工作通常都是按照软件测试方案和流程对产品进行功能测验,检察产品是否有缺陷。
(一)就业优势
1.就业竞争小
人才供不应求让软件测试人员的就业竞争压力明显小于同类其它职业,有利于从业者的身心健康。
另外,由于软件测试在我国起步较晚,独立设置测试部门、对测试人员有强烈需求的多为独具慧眼的大中型IT企业。
软件测试人才不需要在小企业积累经验就能获得知名企业的入门通行证,工作起点高于同类其它职业。
2.入门门槛低
大中专学历即可,是不是计算机专业都可以。
如果是其他有业务背景的专业更有优势,例如:
会计、金融、办公自动化、酒店管理、网站设计等。
对于有行业背景的人来说入门更快,因为对于测试工作来说,有时懂业务比懂技术还重要,你会了技术,去各行各业做测试都是要学习业务知识的,这是很正常的事。
3.高薪
刚入行的软件测试人员,起步的月薪就在3000-5000元左右,远高于同龄人2000元的薪资水平,随着工作经验的丰富以及能力的提升,这份薪水将一路看涨。
4.初级技术要求低
目前大部分测试技术还属于手工测试,手工测试要求入门门槛很低。
你只要会写用例,会提缺陷就可以了。
测试人员需要简单了解业务知识,学习所开发系统的使用,也就是会使用系统就可以了。
照着用例执行测试,发现缺陷直接提交缺陷就可以了。
5.就业质量高
与其他IT职位相比,软件测试人员最大的优势就是发展方向太多了。
由于工作的特殊性,测试人员不但需要对软件的质量进行检测,而且对于软件项目的立项、管理、售前、售后等领域都要涉及。
在此过程中,测试人员不仅提升了专业的软件测试技能,还能接触到各行各业,从而为自己的多元化发展奠定了基础。
6.无性别歧视
如果把软件开发领域比作“男子单打”,那么,软件测试领域就是“混合双打”。
由于工作的特殊性,软件测试人员更要具有认真、耐心、细致、敏感等个性元素,而这在一定程度上与女性的个性气质相吻合。
据了解,很多IT企业中软件测试人员的比例更趋向男女平衡,甚至出现女性员工成主流的情况。
7.就业好
国外开发与测试的比例是1:
2。
目前国内开发与测试的比例是6:
1。
所以测试行业人才缺口很大,就业前景很好。
基本属于供不应求。
8.发展大
测试分为三个阶段:
手工测试、自动化测试、性能测试。
这是一个逐步提升的过程。
最初工作可能做手工测试,也是目前绝大部分测试人员所从事的工作。
自动化测试是测试的发展趋势,而且现在自动化测试人员急缺,且薪资很高。
现在最稀缺的是性能测试人员,目前性能测试人员的待遇比同等经历的开发可能还要高,因为现在性能测试人员属于稀缺状态。
(1)手工测试:
现在比较普及,大多数测试都还停留在手工测试阶段。
(2)自动化测试:
是趋势,但目前用自动化测试的还比较少,需要适当的代码编写工作。
做一段手工测试后,积累一定经验,可以慢慢步入自动化测试阶段,如果自动化测试比较熟练,月薪1万没问题,和开发工资差不多。
(3)性能测试:
性能测试人员现在稀缺人群,一般能做性能测试,且做得和可以的一般月薪都在1.6万以上,比开发要高。
(二)工作职责
软件测试就是使用人工或自动手段,来运行或测试某个系统的过程。
其目的在于检验它是否满足规定的需求或弄清
预期结果与实际结果之间的差别。
开发工作的根本是尽量实现软件用户的需求,测试工作的根本是检验软件系统是否满足软件用户的需求。
软件测试工程师简单的说是软件开发过程中的质量检测者和保障者,负责软件质量的把关工作。
软件测试工程师具体工作有:
1.使用各种测试技术和方法来测试和发现软件中存在的软件缺陷
测试技术主要分为黑盒测试和白盒测试两大类。
其中黑盒测试技术主要有等价类划分法、边界值法、因果图法、状态图法、测试大纲法以及各类典型的软件故障模型等;白盒测试的主要技术有语句覆盖、分支覆盖、判定覆盖、基本路径覆盖等;
2.测试工作需要贯穿整个软件开发生命周期
完整的软件测试工作包括单元测试、集成测试、确认测试和系统测试工作。
单元测试工作主要在编码阶段完成,由开发人员和软件测试工程师共同完成,其主要依据是详细测试。
集成测试的主要工作测试软件模块之间的接口是否正确实现,基本依据是软件体系结构设计。
确认测试和系统测试是在软件开发完成后,验证软件的功能与需求的一致性、验证软件在相应的硬件条件下的系统功能是否满足用户需求,其主要依据是用户需求。
3.测试人员将发现的缺陷编写成正式的缺陷报告,提交给开发人员进行缺陷的确认和修复
缺陷报告编写最主要的要求是保证缺陷的重现。
要求测试人员具有很好的文字的能力和语言组织能力。
4.测试人员需要分析软件质量
在测试完成后,测试人员需要根据测试结果来分析软件质量,包括缺陷率、缺陷分布、缺陷修复趋势等。
给出软件各种质量特性包括有功能性、可靠性、易用性、安全性、时间与资源特性等的具体度量。
最后给出一个软件是否可以发布或提交用户使用的结论。
5.测试过程中要制定计划
为了更好地组织与实施测试工作,测试负责人需要制定测试计划,包括有测试资源、测试进度、测试策略、测试方法、测试工具、测试风险等。
6.测试人员需要设计测试用例
为了更好更有效地进行测试,保证测试工作质量,需要在执行测试工作之前首先需要设计测试用例,形成测试用例报告。
设计测试用例是保证测试质量的核心工作,很多测试技术都可以用来指导设计用例。
为了提高测试用例的设计效率,BTEST培训课程专门开设了高效设计测试用例一门课来讲授各种设计用例的技术与方法。
7.测试需引进自动化测试工具
为了提高工作效率或提高测试水平,测试工作需要引进自动化测试工具,测试人员需要学会使用自动化测试工具,编写测试脚本,进行性能测试等。
8.测试要不断改进
测试负责人在测试工作中,还需要根据实际情况不断改进测试过程,提高测试水平,进行测试队伍的建设等。
(三)职业素质
1.计算机专业技能
计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。
尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,则计算机专业技能是必不可少的。
计算机专业技能主要包含三个方面:
(1)测试专业技能
专业知识很多,本书内容主要以测试人员应该掌握的基础专业技能为主。
测试专业技能涉及的范围很广:
既包括黑盒测试、白盒测试、测试用例设计等基础测试技术,也包括单元测试、功能测试、集成测试、系统测试、性能测试等测试方法,还包括基础的测试流程管理、缺陷管理、自动化测试技术等知识。
(2)软件编程技能
软件编程技能实际应该是测试人员的必备技能之一,在微软,很多测试人员都拥有多年的开发经验。
因此,测试人员要想得到较好的职业发展,必须能够编写程序。
只有能够编写程序,才可以胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。
此外,对软件测试人员的编程技能要求也有别于开发人员:
测试人员编写的程序应着眼于运行正确,同时兼顾高效率,尤其体现在与性能测试相关的测试代码编写上。
因此测试人员要具备一定的算法设计能力。
依据资深测试工程师的经验,测试工程师至少应该掌握Java、C#、C++之类的一门语言以及相应的开发工具。
(3)网络、操作系统、数据库、中间件等知识
与开发人员相比,测试人员掌握的知识具有“博而不精”的特点,“艺多不压身”是个非常形象的比喻。
由于测试中经常需要配置、调试各种测试环境,而且在性能测试中还要对各种系统平台进行分析与调优,因此测试人员需要掌握更多网络、操作系统、数据库等知识。
在网络方面,测试人员应该掌握基本的网络协议以及网络工作原理,尤其要掌握一些网络环境的配置,这些都是测试工作中经常遇到的知识。
操作系统和中间件方面,应该掌握基本的使用以及安装、配置等。
例如很多应用系统都是基于Unix、linux来运行的,这就要求测试人员掌握基本的操作命令以及相关的工具软件。
而WebLogic、Websphere等中间件的安装、配置很多时候也需要掌握一些。
数据库知识则是更应该掌握技能,现在的应用系统几乎离不开数据库。
因此不但要掌握基本的安装、配置,还要掌握SQL。
测试人员至少应该掌握Mysql、MSSqlserver、Oracle等常见数据库的使用。
(四)个人素养
作为一名优秀的测试工程师,首先要对测试工作有兴趣:
测试工作很多时候都是显得有些枯燥的,因此热爱测试工作,才更容易做好测试工作。
因此,除了具有前面的专业技能和行业知识外,测试人员应该具有一些基本的个人素养,即下面的“五心”。
1.专心
主要指测试人员在执行测试任务的时候要专心,不可一心二用。
经验表明,高度集中精神不但能够提高效率,还能发现更多的软件缺陷,业绩最棒的往往是团队中做事精力最集中的那些成员。
2.细心
主要指执行测试工作时候要细心,认真执行测试,不可以忽略一些细节。
某些缺陷如果不细心很难发现,例如一些界面的样式、文字等。
3.耐心
很多测试工作有时候显得非常枯燥,需要很大的耐心才可以做好。
如果比较浮躁,就不会做到“专心”和“细心”,这将让很多软件缺陷从你眼前逃过。
4.责任心
责任心是做好工作必备的素质之一,测试工程师更应该将其发扬光大。
如果测试中没有尽到责任,甚至敷衍了事,这将会把测试工作交给用户来完成,很可能引起非常严重的后果。
5.自信心
自信心是现在多数测试工程师都缺少的一项素质,尤其在面对需要编写测试代