第7章-软件测试技术-普通高等院校计算机类专业系列教材-软件工程教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第7章-软件测试技术-普通高等院校计算机类专业系列教材-软件工程教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 技术 普通 高等院校 计算机 类专业 系列 教材 软件工程 教学 课件
- 资源描述:
-
1、第7章 软件测试技术 第7章 软件测试技术 7.1 软件测试基础软件测试基础 7.2 白盒测试技术白盒测试技术 7.3 黑盒测试技术黑盒测试技术 7.4 软件测试计划和测试分析报告软件测试计划和测试分析报告 7.5 软件测试策略软件测试策略 7.6 小结小结 第7章 软件测试技术 7.1 7.1 软件测试基础软件测试基础7.1.1 7.1.1 软件测试的概念、目的和原则软件测试的概念、目的和原则 1.1.软件测试的概念软件测试的概念 软件测试是在软件投入运行前对软件需求分析、软件设计规格说明和软件编码进行查错和纠错(包括代码执行活动与人工活动)。找错的活动称测试,纠错的活动称调试。可以说,软件
2、测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。第7章 软件测试技术 2.2.软件测试的目的软件测试的目的 Glen Myers在他的软件测试著作中就软件测试的目的提出下列观点:(1)测试是一个为了寻找错误而运行程序的过程。(2)一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例。(3)一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。第7章 软件测试技术 正确认识测试的目的是十分重要的,只有这样,才能设计出最能暴露错误的测试
3、方案。测试的目的应从用户角度出发,通过软件测试暴露软件中潜在的错误和缺陷,而不是从软件开发者的角度出发,希望测试成为表明软件产品不存在错误,验证软件已正确实现用户的要求的过程。否则,开发者测试时会选择不易测试出错误和缺陷的用例,这与上述测试目的相违背。一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。测试的目标是能够以耗费最少时间与最小工作量找出软件系统中潜在的各种错误与缺陷。另外,我们应该认识到:测试只能证明程序中错误的存在,但不能证明程序中没有错误。因为即使实施了最严格的测试,仍然可能还有尚未被发现的错误或缺陷存在于程序当中,因而测试不能证明程序没有错误,但可能查出程序中的错误。第7章
4、 软件测试技术 3.3.软件测试的基本原则软件测试的基本原则 人们为了提高测试的效率,在长期测试实验中积累了不少经验,下面列出了人们在实践中总结的主要基本原则:(1)尽早地并不断地进行软件测试。实际问题的复杂性、软件本身的复杂性与抽象性以及开发期各层人员工作的配合关系等各种错综复杂的因素使得软件开发的各个阶段都可能存在错误及潜在的缺陷。所以,软件开发的各阶段都应当进行测试。错误发现得越早,后阶段耗费的人力、财力就越少,软件质量相对就高一些。第7章 软件测试技术 (2)程序员或程序设计机构应避免测试自己设计的程序。测试是为了找错,而程序员大多对自己所编的程序存有偏见,总认为自己编的程序问题不大或
5、无错误存在,因此很难查出错误。此外,设计机构在测试自己程序时,由于开发周期和经费等问题的限制,要采用客观的态度是十分困难的。从工作效率来讲,最好由与原程序无关的程序员和程序设计机构进行测试。第7章 软件测试技术 (3)测试用例中不仅要有输入数据,还要有与之对应的预期结果。测试前应当设定合理的测试用例。测试用例不仅要有输入数据,而且还要有与之对应的预期结果。如果在程序执行前无法确定预期的测试结果,由于人们的心理作用,可能把实际上是错误的结果当成是正确的。第7章 软件测试技术 (4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据。在设计测试用例时,不仅要有合法的输入测试用例,还要有非法
6、的输入测试用例。在测试程序时,人们常忽视不合法的和预想不到的输入条件,倾向于考虑合法的和预期的输入条件。而在软件的实际使用过程中,由于各种因素的存在,用户可能会使用一些非法的输入,比如常会按错键或使用不合法的命令。对于一个功能较完善的软件来说,不仅当输入是合法的时候能正确运行,而且当有非法输入时,也应当能对非法的输入拒绝接受,同时给出对应的提示信息,使得软件便于使用。第7章 软件测试技术 (5)在对程序修改之后要进行回归测试。在修改程序的同时时常又会引进新的错误,因而在对程序修改完之后,还应用以前的测试用例进行回归测试,有助于发现因修改程序而引进的新的错误。第7章 软件测试技术 (6)程序中尚
7、未发现的错误的数量通常与该程序中已发现的错误的数量成正比。经验表明:一段程序中若发现错误的数目越多,则此段程序中残存的错误数目也较多。例如:在美国的IBM/370的一个操作系统中,47%的错误(由用户发现的错误)仅与该系统的4%的程序模块有关。据此规律,在实际测验时,为了提高测试效率,要花较多的时间和代价来测试那些容易出错即出错多的程序段。而不要以为找到了几个错误,就认为问题已解决,不再需要继续测试了。第7章 软件测试技术 (7)妥善保留测试计划、全部测试用例、出错统计和最终分析报告,并把它们作为软件的组成部分之一,为维护提供方便。设计测试用例要耗费相当大的工作量,若测试完随意丢弃,以后一旦程
8、序改错后需重新测试时,将重复设计测试用例,这会造成很大的浪费,因而妥善保留与测试有关的资料,能为后期的维护工作带来方便。(8)应当对每一个测试结果做全面检查。这条重要的原则时常被人们忽视。不仔细、全面地检查测试结果,就会使得有错误征兆的输出结果被漏掉。第7章 软件测试技术 (9)严格执行测试计划,排除测试的随意性。测试计划内容应包括:所测软件的功能、输入和输出、测试内容、各项测试的进度安排、资源要求、测试资料、测试工具、测试用例的选择、测试的控制方式和过程、系统组装方式、跟踪规程、调试规程、回归测试的规定以及评价标准等。第7章 软件测试技术 7.1.2 7.1.2 软件测试的过程软件测试的过程
9、图7.1 测试的过程1测试软件配置测试配置测试工具测试结果2评价3调试错误修正文件结果预测出错率4构造可靠性模型预测可靠性正确第7章 软件测试技术 测试过程有三类输入:软件配置、测试配置和测试工具。软件配置包括软件需求说明书、设计说明书、源程序清单等文档。测试配置包括测试方案、测试计划、测试用例、测试驱动程序等文档。测试工具包括支持测试的软件。输出信息有修正软件的文件和预测可靠性或得出纠错后可交付使用的正确软件。测试的信息流是不断递归的过程,也是相对有限的测试过程,而不是无限的过程。(1)软件配置:指被测试软件的文件,如软件需求规格说明书、软件设计说明书和源程序清单等文档。第7章 软件测试技术
10、 (2)测试配置:指测试方案、测试计划、测试用例、测试驱动程序等文档。实际上,在整个软件工程过程中,测试配置只是软件配置的一个子集。(3)测试工具:是为了提高测试效率而设计的支持软件测试的软件。例如,测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序以及驱动测试的测试数据库等。(4)测试评价:由测试出的错误迹象,分析、找出错误的原因和位置,以便纠正和积累软件设计的经验。第7章 软件测试技术 (5)纠错(调试):是指找到出错的原因与位置并纠错,包括修正文件直到软件正确为止。纠错过程是测试过程中最无法预料的部分。为了诊断和纠正一个错误,可能需要一小时、一天、甚至几个月的时间。正是因
11、为纠错本身所具有的不确定性,常常难以准确地安排测试日程表。第7章 软件测试技术 (6)可靠性模型:通过对测试出的软件出错率的分析,建立模型,得出可靠的数据,指导软件的设计与维护。对测试结果进行收集和评价后,软件可靠性能够达到的质量指标也就清楚了。若出现一些有规律的、严重的、要求修改设计的错误,软件的质量和可靠性值得怀疑,应作进一步测试。另外,若软件功能看来完成得很好且遇到错误也容易纠正,从而可以得到两种不同的结论:一种是软件质量和可靠性是可以接受的;另一种是所进行的测试尚不足以发现严重的错误。若没有发现任何错误,可能是由于测试配置不够周到,依然有潜在的错误存在。若将错误放过,在维护阶段被用户发
12、现时再纠正的话,所需费用将可能是开发阶段的4060倍。第7章 软件测试技术 7.1.3 7.1.3 软件测试的方法软件测试的方法 软件测试的目的是以最少的测试用例集合测试出更多的程序中潜在错误。如何测试的彻底,怎样设计测试用例是测试的关键技术。依据测试过程是否在实际应用环境中来分,软件测试技术分为静态分析技术与动态测试技术两种。测试方法有分析方法(包括静态分析法与白盒法)与非分析方法(称黑盒法)之分。有关白盒法与黑盒法的内容将在后两节中介绍,在此节中仅介绍静态分析技术与动态测试技术。第7章 软件测试技术 1.1.静态分析技术静态分析技术 静态分析技术不执行被测试软件,可对需求分析说明书、软件设
13、计说明书、源程序做结构检查、流图分析、符号执行等来找出软件错误。可以人工进行分析,也可以用测试工具静态分析程序来进行,被测试程序的正文作为输入,经静态分析程序分析得出分析结果。(1)结构检查是手工分析技术,由一组人员对程序设计、需求分析、编码测试工作进行评议,虚拟执行程序,并在评议中作错误检验。此方法能找出典型程序30%70%有关逻辑设计与编码的错误。第7章 软件测试技术 (2)流图分析是通过分析程序流程图的代码结构,来检查程序的语法错误信息、语句中标识符引用状况、子程序和函数调用状况及无法执行到的代码段。此方法便于分析编码实现与测试结果分析。(3)符号执行是一种符号化定义数据,并为程序每条路
14、径给出符号表达式,对特定路径输入符号,经处理输出符号,从而判断程序行为是否错误,达到分析错误目的的方法。这种方法比数值计算复杂得多,易出错,又不适于非数值计算,故使用较少。第7章 软件测试技术 2.2.动态测试技术动态测试技术 动态分析是执行被测程序,由执行结果分析程序可能出现的错误。可以人工设计程序测试用例,也可以由测试工具动态分析程序来做检查与分析。动态测试包括功能测试和结构测试。它把程序看作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。这样动态测试的算法可归纳为第7章 软件测试技术(1)选取定义域中的有效值,或定义域外无效值。
15、(2)对已选取值决定预期的结果。(3)用选取值执行程序。(4)观察程序行为,记录执行结果。(5)将(4)的结果与(2)的结果相比较,不吻合则程序有错。动态测试既可以采用白盒法对模块进行逻辑结构的测试,又可以用黑盒法做功能结构的测试。接口的测试,都是以执行程序并分析执行结果来查错的。第7章 软件测试技术 7.2 7.2 白盒测试技术白盒测试技术7.2.1 7.2.1 白盒测试概念白盒测试概念 如果已知产品的内部活动方式,就可以测试它的内部活动是否都符合设计要求。这种方法称白盒测试(White-box Testing),它是对软件的过程性细节做细致的检查。白盒测试又称为结构测试或逻辑驱动测试,此方
16、法是将测试对象比作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构和相关信息来设计或选择测试用例,对穿过软件的逻辑路径进行测试,可以在不同点检查程序的状态,以确定实际状态与预期状态是否一致。第7章 软件测试技术 软件人员使用白盒方法测试程序模块的检查点主要包括:对程序模块的所有独立的执行路径应至少测试一次;对所有的逻辑判定,取“真”与取“假”两种情况都能至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。表面看来,白盒测试是可以进行完全的测试的,从理论上讲也应该如此。只要能确定测试模块的所有逻辑路径,并为每一条逻辑路径设计测试用例,并评价所得到的结果,就可得到10
17、0%正确的程序。但实际测试中,这种穷举法是无法实现的,因为即使是很小的程序,也可能会出现数目惊人的逻辑路径。如图7-2所示是一个小程序的流程图。第7章 软件测试技术 图中,一个圆圈代表一行源程序代码(或一个语句块)。其中有五条通路,左边曲线箭头表示执行次数不超过20次循环。这样的执行路径就有520个,近似为1014个可能的路径。如果1 ms完成一个测试,由此测试程序需3170年。由此看出,即使精确地实现了白盒测试,也不能断言测试过的程序全正确,因为实行穷举测试,由于工作量过大,需用时间过长,实施起来是不现实的。这就是程序测试的经济学问题。既然在测试阶段穷举法测试是不可行的,那么为了节省时间和资
18、源,提高测试效率,就必须精心设计测试用例。需从大量的可用测试用例中精选出少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,即能高效地、尽可能多地发现隐藏的错误。测试只能发现错误,并不能保证程序没有错误。第7章 软件测试技术 循环小于等于20次图7.2 白盒测试中的穷举测试 第7章 软件测试技术 7.2.2 7.2.2 白盒测试的测试用例设计白盒测试的测试用例设计 测试用例设计的基本目的是确定一组最有可能发现某个错误或某类错误的测试数据。无论是黑盒测试(下节内容介绍),还是白盒测试都不可能进行穷举测试,所以测试用例的设计只能在周期和经费允许的条件下,使用最少数目的测试用例,发现最大数目
19、可能的错误。实际工作中,采用黑盒与白盒相结合的技术是较为合理的做法,可以选取并测试数量有限的重要逻辑路径,对一些重要数据结构的正确性进行完全的检查。这样不仅能证实软件接口的正确性,同时在某种程度上能保证软件内部工作也是正确的。第7章 软件测试技术 现在已经提出了许多测试用例的设计技术。下面只对白盒测试的重要测试方法进行介绍,黑盒测试的方法将在下节内容中介绍。逻辑覆盖是以程序内部逻辑为基础的测试技术,属白盒测试。这一测试考虑测试用例对程序内部逻辑覆盖的程度。当然,最彻底的覆盖是覆盖程序中的每一条路径,但是由于程序中可能会含有循环,路径的数目将极大,要执行每一条路径是不可能的,所以只希望覆盖的程度
20、尽可能高些。目前常用的一些覆盖技术有以下八种。第7章 软件测试技术 1.1.语句覆盖语句覆盖 语句覆盖的含义是选择足够多的测试用例,使得被测程序中的每条语句至少执行一次。图7.3是测试的一段程序的流程图对应的C源程序(用C语言书写)。float A,B,X;if(A1&B=0)X=X/A;if(A=2|X1)X=X+1;第7章 软件测试技术 为了使每条语句都执行一次,程序应该按sacbed路径执行,为实现此路径而选取下面的一组输入数据(实际上X可以是任意实数):A=2,B=0,X=2第7章 软件测试技术 通过上例可以看出,这组数据只测试了条件为真的情况,若实际输入的条件为假时有错误显然测试不出
21、来。事实上,语句覆盖对程序的逻辑覆盖很少,语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值的情况。在上例中,为了执行sacbed路径以测试每个语句,只需两个判定表达(A1)AND(B=0)和(A=2)OR(X1)都取真值,上例中测试数据足够满足要求。但是,若程序中第一个判断表达式中的逻辑运算符“AND”错写成“OR”,或把第二个判定表达式中的条件“X1”误写成“X1”,上组测试数据则不符要求,不能查出这些错误。与后面所介绍的其他覆盖相比,语句覆盖是最弱的逻辑覆盖准则。第7章 软件测试技术 2.2.判定覆盖判定覆盖 判定覆盖就是设计若干个测试用例,运行所测程序,使得程序中
22、每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。判定覆盖的每个语句至少经历一次。例如对于图7.3来说,能够分别覆盖路径sacbed和sabd的一组测试数据,或者覆盖路径sacbd和sabed的两组测试数据均可满足判定覆盖标准。例如,以两组测试数据就可做到判定覆盖:(1)A=4,B=0,X=1(覆盖sacbd);(2)A=2,B=1,X=3(覆盖sabed)。判定覆盖的缺点仍然是覆盖的不全,只覆盖了路径的一半,如将X1误写成X1,上组(1)数据仍覆盖sacbd,可见判定覆盖仍然很弱,但比语句覆盖强。第7章 软件测试技术 入口A1AND B0XX/A12saA2OR X1bcXX
23、13e4567FF返回dTT图7.3 语句覆盖 第7章 软件测试技术 3.3.条件覆盖条件覆盖 条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。条件覆盖使得每个语句至少执行一次。例如对于图7.3来说,共有两个判定表达式,每个表达式中有两个条件。为满足条件覆盖,在a点有以下几种情况出现:A1,A1,B0,B0;在b点有以下几种情况出现:A=2,A2,X1,X1。因而,只需要使用下面两组测试数据就可达到上述覆盖标准。第7章 软件测试技术 (1)A=2,B=0,X=3(满足A1,B0,A=2和X1的条件,执行路径sacbed);(2)A=0,B=1,
24、X=0(满足A1,B0,A2和X1的条件执行路径sabd)。第7章 软件测试技术 条件覆盖一般比判定覆盖强,因为条件覆盖使判定表达式中每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。上例两组测试数据也同时满足判定覆盖标准。但是,也可能有相反情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个值。例如,若使用以下两组测试数据,则只满足条件覆盖标准并不满足判定覆盖标准。(1)A=2,B=0,X=1(满足A1,B0,A=2和X1的条件,执行路径sacbed);(2)A=1,B=1,X=2(满足A1,B0,A2和X1的条件,执行路径sabed)。上述例子的第二个判定表
25、达式的值总为真,不满足判定覆盖的要求,为解决这一矛盾,需要对条件和分支兼顾。第7章 软件测试技术 4.4.判定判定/条件覆盖条件覆盖 判定/条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能判断结果至少执行一次。即要求各个判断的所有可能的条件取值组合至少执行一次。对于图7.3的例子而言,下述两组测试数据满足判定/条件覆盖标准。(1)A=2,B=0,X=4;(2)A=1,B=1,X=1。第7章 软件测试技术 判定/条件覆盖也有缺陷。从表面来看,它测试了所有条件的取值。但实际并不是这样。因为一些条件往往掩盖了另一些条件。对于条件表达式(A1)AND
展开阅读全文