毕业论文软件测试论文.docx
《毕业论文软件测试论文.docx》由会员分享,可在线阅读,更多相关《毕业论文软件测试论文.docx(18页珍藏版)》请在冰豆网上搜索。
毕业论文软件测试论文
软件测试毕业论文
2021年8月
姓名:
专业:
计算机科学与技术
指导老师:
1。
2相关背景2
1.3参考资料2
2软件测试概念3
2。
1软件测试定义3
2.2软件测试概述3
3软件测试的原则
3。
1测试的基本原则
(一)4
3.2测试的基本原则
(二)4
4软件测试的内容
4。
1验证(verification)5
4。
1确认(validation)5
5软件测试的分类
5.2黑盒测试和白盒测试6
5.3静态测试11
5。
4动态测试12
6感想与致谢………………………………………………………………………………………。
。
16
1引言
1.1编写目的
本学期学习了软件测试这门计算机专业的专业课,作为计算机专业的一门很重要的课程,在计算机领域占据着不可替代的角色,随着人类社会的进步,各种领域计算机的普及,计算机软件也越来越多的出现在各个场合,为人们的办公,生活,学习,休闲等提供了前所未有的方便.因此,当一个软件从雏形到真正的在一台计算机上运行的时候,谁也不能保证计算机软件能一步到位的满足人们的需求。
所以就有了软件测试,其目的是:
第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Dotherightthing),另一方面是确认软件以正确的方式来做了这个事件(Doitright).作为计算机专业的学生,我想以我自己的观点来阐述一下我对软件测试的理解。
1.2参考资料
参考书籍:
1、RonPatton《软件测试》机械工业出版社2002
2、张克东等《软件工程与软件测试自动化教程》电子工业出版社2002
3、Dustin,E。
《软件自动化测试:
引入、管理与实施》电子工业出版社2003
4、JamesA.Whittaker《实用软件测试指南》电子工业出版社2003
5、Zadrozny《J2EE性能测试》电子工业出版社2003
6、Jones,C。
《软件评估、基准测试与最佳实践》机械工业出版社2003
7、EdwardKit《软件测试过程改进》机械工业出版社2003
8、HungQ.Nguyen《Web应用测试》电子工业出版社2003
9、RobertV。
Binder《面向对象系统测试模型视图与工具(影印版)》
10、Rakitin,S.K。
《软件验证与确认的最佳管理办法》电子工业出版社2002
11、麦格雷戈《面向对象的软件测试》机械工业出版社2002
参考网络资料
1.3相关背景
前段时间,就是在我没有认真了解测试行业之前,可能由于测试在中国的重视程度的问题,我也一直认为测试应该是不重要的,甚至认为有必要有专门的测试职业吗?
认为软件主要是开发人员的事,软件的成果也是由开发人员决定的,当我在参加工作后,真正从学校的学习环境中走上实际运用开发的时候,事实上真的不是那么一回事哦。
软件无处不在,软而,软件是人编的——所以不完美。
臭名昭著的软件测试案例:
1、迪士尼的狮子王(1994~1995)软件在少数系统中能正常工作,但在大众使用的常见系统中不行.后来证实,迪士尼公司没有对市场上投入实用的各种pc机型进行正确的测试。
2、英特尔奔腾浮点除法软件缺陷(1994)英特尔为自己处理软件缺陷拿出4亿美元支付更换坏芯片的费用。
导致付出如此昂贵的代价,其主要原因是发现了软件缺陷没有正确的处理。
3、美国航天局火星极地登陆(1999)该项目使用前有经过测试,两个测试小组双方独立工作都很好,但从未走在一起。
4、爱国者导弹防御系统(1991)一枚导弹在多哈击毙28名美国士兵,症结在于一个软件缺陷:
一个很小的系统时钟错误累积起来就可能拖延14小时,造成跟踪系统失去准确度。
在多哈袭击战中系统被拖延100小时。
5、千年虫(大约1974)估计世界各地更换或升级该系统程序解决原有2000年错误的费用已经超过数亿美元。
2软件测试概念
2.1件测试定义
软件测试使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness)完全度(completeness)和质量(quality)的软件过程;是SQA(softwarequalityassurance)的重要子域。
(1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;
(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
2。
2软件测试概述
测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。
软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Dotherightthing),另一方面是确认软件以正确的方式来做了这个事件(Doitright);第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息;第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。
如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。
3软件测试的原则
3。
1测试基本原则
(一)
在设计有效测试用例之前,测试工程师必需理解软件测试的基本原则。
这里有一组测试原则:
1所有的测试都应追溯到用户需求。
正如我们所知:
软件测试的目标在于揭示错误。
而最严重的错误(从用户角度来看)是那些导致程序无法满足需求的错误。
2应该在测试工作真正开始前的较长时间内就进行测试计划。
测试计划可以在需求模型一完成就开始,详细的测试用例定义可以在设计模型被确定后立即开始。
因此,所有测试应该在任何代码被产生前就进行计划和设计.
3Pareto原则应用于软件测试。
简单地讲,Pareto原则暗示着测试发现的错误中的80%很可能起源于程序模块中的20%。
当然,问题在于如何孤立这些有疑点的模块并进行彻底的测试.
4测试应从”小规模”开始,逐步转向”大规模”.最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误.
5穷举测试是不可能的。
即使是一个大小适度的程序,其路径排列的数量也非常大。
因此,在测试中不可能运行路径的每一种组合。
然而,充分覆盖程序逻辑,并确保程序设计中使用的所有条件是有可能的。
6为了达到最佳效果,应该由独立的第三方来构造测试."最佳效果"指最有可能发现错误的测试(测试的主要目标),所以创建系统的软件工程师并不是构造软件测试的最佳人选。
7、不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现。
。
3。
2测试基本原则
(二)
1.应当把”尽早和不断的测试"作为开发者的座右铭。
2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成.
3.设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
5.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析.
6.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。
8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档
4软件测试的内容
4。
1验证(verification)
验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。
(Dotherightthing)
1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;
2。
程序正确性的形式证明,即采用形式理论证明程序符号设计规约规定的过程;
3。
评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告.
4。
2确认(validation)
确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。
即保证软件以正确的方式来做了这个事件(Doitright)
1。
静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;
2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
5软件测试的分类
5.1常用分类
从是否需要执行被测软件的角度,可分为:
-静态测试
-动态测试
从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为:
-白盒测试
-黑盒测试
5.2黑盒测试和白盒测试
1、黑盒测试和白盒测试
黑盒测试
指的是把被测软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子,只关心软件的输入数据和输出结果。
黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:
•是否有不正确或遗漏了的功能?
•在接口上,输入能否正确地接受?
能否输出正确的结果?
•是否有数据结构错误或外部信息(例如数据文件)访问错误?
•性能上是否能够满足要求?
•是否有初始化或终止性错误?
用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。
但这是不可能的。
n假设一个程序P有输入量X和Y及输出量Z。
在字长为32位的计算机上运行。
若X、Y取整数,按黑盒方法进行穷举测试:
n可能采用的测试数据组:
232×232=264n如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年.
黑盒测试的测试用例设计
•等价划分法
•边界值法
•错误推测法
•因果图法
1.等价类划分
1>等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。
2〉等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例。
3〉使用这一方法设计测试用例要经历划分等价类(列出等价类表)和选取测试用例两步。
4〉划分等价类
等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。
测试某等价类的代表值就等价于对这一类其它值的测试。
等价类的划分有两种不同的情况:
①有效等价类:
是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。
②无效等价类:
是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合.
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。
划分等价类的原则
(1)如果输入条件规定了取值范围,或值的个数,则可以确立一个有效等价类和两个无效等价类。
n例如,在程序的规格说明中,对输入条件有一句话:
“……项数可以从1到999……”则有效等价类是“1≤项数≤999”
两个无效等价类是“项数<1”或“项数>999”。
(2)如果输入条件规定了输入值的集合,或者是规定了“必须如何”的条件,这时可确立一个有效等价类和一个无效等价类.
例如,在Pascal语言中对变量标识符规定为“以字母打头的……串"。
那么所有以字母打头的构成有效等价类,而不在此集合内(不以字母打头)的归于无效等价类.
(3)如果输入条件是一个布尔量,则可以确定一个有效等价类和一个无效等价类。
(4)如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理.这时可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合.
2。
边界值分析
•边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。
•人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
比如,在做三角形计算时,要输入三角形的三个边长:
A、B和C。
我们应注意到这三个数值应当满足
A>0、B>0、C>0、
A+B>C、A+C>B、B+C>A,才能构成三角形。
但如果把六个不等式中的任何一个大于号“>”错写成大于等于号“≥”,那就不能构成三角形。
问题恰出现在容易被疏忽的边界附近。
这里所说的边界是指,相当于输入等价类和输出等价类而言,稍高于其边界值及稍低于其边界值的一些特定情况。
使用边界值分析方法设计测试用例,首先应确定边界情况。
应当选取正好等于,刚刚大于,或刚刚小于边界的值做为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。
3。
错误推测法
•人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子.这就是错误推测法。
•错误推测法的基本想法是:
列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例.
4.因果图
因果图的适用范围
如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。
因果图方法最终生成的就是判定表.它适合于检查程序输入条件的各种组合情况。
(1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
(2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系?
根据这些关系,画出因果图。
(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。
为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件.(4)把因果图转换成判定表.
(5)把判定表的每一列拿出来作为依据,设计测试用例。
白盒测试
指的是把盒子盖打开,去研究里面的源代码和程序结构。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。
使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试.基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。
白盒测试的主要方法:
•逻辑驱动测试
•基本路径测试
主要用于软件验证。
使用程序设计的控制结构导出测试用例.
逻辑驱动测试:
主要是测试覆盖率,以程序内在逻辑结构为基础的测试。
包括以下6种类型:
•语句覆盖
•判断覆盖
•条件覆盖
•判定—条件覆盖
•条件组合覆盖
•路径覆盖
白盒测试的主要目的
•保证一个模块中的所有独立路径至少被执行一次;
•对所有的逻辑值均需要测试真、假两个分支;
•在上下边界及可操作范围内运行所有循环;
•检查内部数据结构以确保其有效性
白盒测试的实施方案
在开发阶段
要保证产品的质量,产品的生产过程应该遵循一定的行业标准.软件产品也是同样,没有标准可依自然谈不上质量的好坏。
所有关心软件开发质量的组织、单位,都要定义或了解软件的质量标准、模型.其好处是保证公司实践的均匀性,产品的可维护性、可靠性以及可移植性等.
在测试阶段
与软件产品的开发过程一样,测试过程也需要有一定的准则,来指导、度量、评价软件测试过程的质量.
定义测试准则
为控制测试的有效性以及完成程度,必须定义准则和策略,以判断何时结束测试阶段.准则必须是客观的,可量化的元素,而不能是经验或感觉.
根据应用的准则和项目相关的约束,项目领导可以定义使用的度量方法,和要达到的覆盖率。
度量测试的有效性、完整性
对每个测试的测试覆盖信息和累计信息,用图形方式显示覆盖比率,并根据测试运行情况实时更新,随时显示新的测试所反映的测试覆盖情况。
允许所有的测试运行依据其有效性进行管理,用户可以减少不适用于非回归测试的测试的过程。
概念:
1。
语句覆盖:
语句覆盖就是设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次;
2。
判定覆盖(也称为分支覆盖):
设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次;
3.条件覆盖:
设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次;
4.判定—条件覆盖:
设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次,换句话说,即是要求各个判断的所有可能的条件取值组合至少执行一次;
5.条件组合测试:
设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能的条件取值组合至少执行一次;
6。
路径测试:
设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径
5.3静态测试
是指不实际运行被测软件,而只是静态的检查程序代码、界面或文档中可能存在的错误的过程.
其中包括代码测试、界面测试和文档测试3个方面。
对于代码测试,主要测试代码是否符合相应的标准和规范.对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
对于文档测试,主要测试用户手册和需求说明是否符合用户的实际要求。
5.3动态测试
是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
所以,我们判断一个测试属于动态还是静态测试,唯一的标准就是看是否运行程序.
单元测试
是指对软件中的最小可测试单元进行检测和验证.
1、什么时候进行单元测试?
通常在程序员编码以后,代码已经通过编译后进行单元测试,而且在前期就应该做一些准备工作,比如撰写单元测试计划、编写单元测试用例等。
千万不要等到项目后期再进行单元测试,那样就失去了检查代码、预防缺陷的意义了。
2、由谁来进行单元测试?
单元测试一般由白盒测试工程师或开发人员来测试。
如果由开发人员来测试,最好做到交叉测试,避免1个人只测试自己的代码.
3、单元测试的依据是什么?
单元测试依据主要有两个,一个事源程序本身,包括代码和注释;还有一个是项目的《详细设计》文档。
4、如何进行单元测试?
主要用白盒测试方法,一般先静态检查代码是否符合规范,然后动态地运行代码,检查其实际运行结果。
当然检查运行结果是否正确是一个最基本的要求,我们还要检查很多项,比如程序的容错处理,程序的边界值处理等。
集成测试
集成测试(也叫组装测试或联合测试)是在单元测试的基础上,将所有模块按照设计要求集成为系统或子系统,并进行测试。
如果是集成为子系统,也可以叫做部件测试。
目的
当单个模块集成为系统的过程中,软件仍然可能出现问题。
比如:
•穿越模块接口的数据是否丢失;
•一个模块功能的实现可能破坏了另一个模块的功能;
•子功能组合之后不一定可以达到预期的功能;
•全局数据可能被异常修改;
•单个模块的误差被放大到了不能接受的地步。
因此,需要在模块集成的时候进行整体测试以发现上面可能出现的问题.
必要性
单元测试仅仅保证了模块的局部正确性。
而系统测试一般在整个系统完成之后进行,错误难以定位.
集成测试具有以下不可替代性:
•单元测试不彻底,对于模块间接口信息内容的正确性,相互调用关系是否符合设计无能为力。
必须依靠集成测试来保证。
•和系统测试相比较,集成测试从程序结构出发,目的性,针对性更强。
发现问题的效率高。
•较容易测试特殊的处理流程。
•定位也比较准确,迅速.集成测试的可重复性强,错误发生后容易定位.
联调和集成测试的区别
(1)
集成和联调都是对系统的装配过程,不过属于不同的级别.
集成测试
•测试人员在开发人员的协助下,制定集成测试计划;
•集成测试主要关注的是接口上消息覆盖,异常流程,性能指标等深入测试。
•集成测试是分层次的,一个模块集成测试后,可以按照计划进行下一个模块的集成或者更高级别的集成.
•当集成测试完成之后就可以开始联调了.
联调:
一般是指软件系统和硬件平台之间的联调。
可以认为是最高级别的集成测试。
•开发经理在开发测试人员的协助下,制定系统联调计划。
•相关人员将已通过集成测试的软件系统和硬件平台集成在一起,构成将交付的系统,并调通系统的基本功能.使用系统预测试项来确定基本功能是否都已经实现.
•通过系统联调调通后的版本提交系统预测试组进行系统预测试。
•在系统的规模比较小比较简单的时候,可以考虑忽略集成测试而直接进行联调。
但是当系统的规模较大的时候,跳过集成测试会带来问题难以发现,难以定位的问题。
完整的测试流程:
单元测试—〉集成测试-〉联调—>系统预测试—〉系统测试
集成测试的层次和阶段
集成测试需要分层次,分阶段完成.
一般情况下,分层次阶段可以按照以下规律:
•第一个层次是组件测试。
为后继测试提供更加好的原料。
如果系统的一些组件已经充分被测试过,可以跳过这些组件。
•第二个层次是做好集成测试规划:
考虑人力,物力,时间,测试的重点等。
找出关键的部分,以此作为主线进行计划和资源安排。
•按照计划,把集成测试划分成为不同的阶段,明确各个阶段的主要任务,确定任务完成的标记.
集成,单元和系统测试的关联
(1)
•单元测试是针对模块内部功能的白盒测试。
需要辅助测试代码才可以进行测试.
•集成测试也叫:
组装测试,子系统测试,部件测试等.比如对于模块A进行集成的时候,需要把相关模块一起结合起来才可以进行。
集成测试是注重功能和性能测试的黑盒测试。
•系统测试是将提交的完整软件版本作为一个系统的元素,和硬件、支持软件、人员等结合起来,尽可能地模拟实际运行环境进行测试。
测试用例通过系统的需求说明书得到,需要在实际的运行环境下测试。
集成测试的基本方案
可以根据集成测试时组装模块的方式把集成测试方案分成两大类:
一次性集成测试方式
增殖式集成测试方式
•自顶向下方式
•自底向上方式
•混合增殖方式