第7章--软件测试技术-普通高等院校计算机类专业系列教材-软件工程教学课件.ppt
《第7章--软件测试技术-普通高等院校计算机类专业系列教材-软件工程教学课件.ppt》由会员分享,可在线阅读,更多相关《第7章--软件测试技术-普通高等院校计算机类专业系列教材-软件工程教学课件.ppt(134页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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、 软件测试技术 第7章 软件测试技术 (2)程序员或程序设计机构应避免测试自己设计的程序。测试是为了找错,而程序员大多对自己所编的程序存有偏见,总认为自己编的程序问题不大或无错误存在,因此很难查出错误。此外,设计机构在测试自己程序时,由于开发周期和经费等问题的限制,要采用客观的态度是十分困难的。从工作效率来讲,最好由与原程序无关的程序员和程序设计机构进行测试。第7章 软件测试技术 (3)测试用例中不仅要有输入数据,还要有与之对应的预期结果。测试前应当设定合理的测试用例。测试用例不仅要有输入数据,而且还要有与之对应的预期结果。如果在程序执行前无法确定预期的测试结果,由于人们的心理作用,可能把实际
5、上是错误的结果当成是正确的。第7章 软件测试技术 (4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据。在设计测试用例时,不仅要有合法的输入测试用例,还要有非法的输入测试用例。在测试程序时,人们常忽视不合法的和预想不到的输入条件,倾向于考虑合法的和预期的输入条件。而在软件的实际使用过程中,由于各种因素的存在,用户可能会使用一些非法的输入,比如常会按错键或使用不合法的命令。对于一个功能较完善的软件来说,不仅当输入是合法的时候能正确运行,而且当有非法输入时,也应当能对非法的输入拒绝接受,同时给出对应的提示信息,使得软件便于使用。第7章 软件测试技术 第7章 软件测试技术 (6)程序中尚
6、未发现的错误的数量通常与该程序中已发现的错误的数量成正比。经验表明:一段程序中若发现错误的数目越多,则此段程序中残存的错误数目也较多。例如:在美国的IBM/370的一个操作系统中,47%的错误(由用户发现的错误)仅与该系统的4%的程序模块有关。据此规律,在实际测验时,为了提高测试效率,要花较多的时间和代价来测试那些容易出错即出错多的程序段。而不要以为找到了几个错误,就认为问题已解决,不再需要继续测试了。第7章 软件测试技术 (7)妥善保留测试计划、全部测试用例、出错统计和最终分析报告,并把它们作为软件的组成部分之一,为维护提供方便。设计测试用例要耗费相当大的工作量,若测试完随意丢弃,以后一旦程
7、序改错后需重新测试时,将重复设计测试用例,这会造成很大的浪费,因而妥善保留与测试有关的资料,能为后期的维护工作带来方便。(8)应当对每一个测试结果做全面检查。这条重要的原则时常被人们忽视。不仔细、全面地检查测试结果,就会使得有错误征兆的输出结果被漏掉。第7章 软件测试技术 第7章 软件测试技术 7.1.2 7.1.2 软件测试的过程软件测试的过程图7.1 测试的过程第7章 软件测试技术 第7章 软件测试技术 (2)测试配置:指测试方案、测试计划、测试用例、测试驱动程序等文档。实际上,在整个软件工程过程中,测试配置只是软件配置的一个子集。(3)测试工具:是为了提高测试效率而设计的支持软件测试的软
8、件。例如,测试数据自动生成程序、静态分析程序、动态分析程序、测试结果分析程序以及驱动测试的测试数据库等。(4)测试评价:由测试出的错误迹象,分析、找出错误的原因和位置,以便纠正和积累软件设计的经验。第7章 软件测试技术 (5)纠错(调试):是指找到出错的原因与位置并纠错,包括修正文件直到软件正确为止。纠错过程是测试过程中最无法预料的部分。为了诊断和纠正一个错误,可能需要一小时、一天、甚至几个月的时间。正是因为纠错本身所具有的不确定性,常常难以准确地安排测试日程表。第7章 软件测试技术 第7章 软件测试技术 7.1.3 7.1.3 软件测试的方法软件测试的方法 软件测试的目的是以最少的测试用例集
9、合测试出更多的程序中潜在错误。如何测试的彻底,怎样设计测试用例是测试的关键技术。依据测试过程是否在实际应用环境中来分,软件测试技术分为静态分析技术与动态测试技术两种。测试方法有分析方法(包括静态分析法与白盒法)与非分析方法(称黑盒法)之分。有关白盒法与黑盒法的内容将在后两节中介绍,在此节中仅介绍静态分析技术与动态测试技术。第7章 软件测试技术 1.1.静态分析技术静态分析技术 静态分析技术不执行被测试软件,可对需求分析说明书、软件设计说明书、源程序做结构检查、流图分析、符号执行等来找出软件错误。可以人工进行分析,也可以用测试工具静态分析程序来进行,被测试程序的正文作为输入,经静态分析程序分析得
10、出分析结果。(1)结构检查是手工分析技术,由一组人员对程序设计、需求分析、编码测试工作进行评议,虚拟执行程序,并在评议中作错误检验。此方法能找出典型程序30%70%有关逻辑设计与编码的错误。第7章 软件测试技术 (2)流图分析是通过分析程序流程图的代码结构,来检查程序的语法错误信息、语句中标识符引用状况、子程序和函数调用状况及无法执行到的代码段。此方法便于分析编码实现与测试结果分析。(3)符号执行是一种符号化定义数据,并为程序每条路径给出符号表达式,对特定路径输入符号,经处理输出符号,从而判断程序行为是否错误,达到分析错误目的的方法。这种方法比数值计算复杂得多,易出错,又不适于非数值计算,故使
11、用较少。第7章 软件测试技术 2.2.动态测试技术动态测试技术 动态分析是执行被测程序,由执行结果分析程序可能出现的错误。可以人工设计程序测试用例,也可以由测试工具动态分析程序来做检查与分析。动态测试包括功能测试和结构测试。它把程序看作为一个函数,输入的全体称为函数的定义域,输出的全体称为函数的值域,函数则描述了输入的定义域与输出值域的关系。这样动态测试的算法可归纳为第7章 软件测试技术(1)选取定义域中的有效值,或定义域外无效值。(2)对已选取值决定预期的结果。(3)用选取值执行程序。(4)观察程序行为,记录执行结果。(5)将(4)的结果与(2)的结果相比较,不吻合则程序有错。动态测试既可以
12、采用白盒法对模块进行逻辑结构的测试,又可以用黑盒法做功能结构的测试。接口的测试,都是以执行程序并分析执行结果来查错的。第7章 软件测试技术 第7章 软件测试技术 软件人员使用白盒方法测试程序模块的检查点主要包括:对程序模块的所有独立的执行路径应至少测试一次;对所有的逻辑判定,取“真”与取“假”两种情况都能至少测试一次;在循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。表面看来,白盒测试是可以进行完全的测试的,从理论上讲也应该如此。只要能确定测试模块的所有逻辑路径,并为每一条逻辑路径设计测试用例,并评价所得到的结果,就可得到100%正确的程序。但实际测试中,这种穷举法是无法实现的,
13、因为即使是很小的程序,也可能会出现数目惊人的逻辑路径。如图7-2所示是一个小程序的流程图。第7章 软件测试技术 图中,一个圆圈代表一行源程序代码(或一个语句块)。其中有五条通路,左边曲线箭头表示执行次数不超过20次循环。这样的执行路径就有520个,近似为1014个可能的路径。如果1 ms完成一个测试,由此测试程序需3170年。由此看出,即使精确地实现了白盒测试,也不能断言测试过的程序全正确,因为实行穷举测试,由于工作量过大,需用时间过长,实施起来是不现实的。这就是程序测试的经济学问题。既然在测试阶段穷举法测试是不可行的,那么为了节省时间和资源,提高测试效率,就必须精心设计测试用例。需从大量的可
14、用测试用例中精选出少量的测试数据,使得采用这些测试数据能够达到最佳的测试效果,即能高效地、尽可能多地发现隐藏的错误。测试只能发现错误,并不能保证程序没有错误。第7章 软件测试技术 图7.2白盒测试中的穷举测试第7章 软件测试技术 第7章 软件测试技术 现在已经提出了许多测试用例的设计技术。下面只对白盒测试的重要测试方法进行介绍,黑盒测试的方法将在下节内容中介绍。逻辑覆盖是以程序内部逻辑为基础的测试技术,属白盒测试。这一测试考虑测试用例对程序内部逻辑覆盖的程度。当然,最彻底的覆盖是覆盖程序中的每一条路径,但是由于程序中可能会含有循环,路径的数目将极大,要执行每一条路径是不可能的,所以只希望覆盖的
15、程度尽可能高些。目前常用的一些覆盖技术有以下八种。第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章 软件测试技术 第7章 软件测试技术 通过上例可以看出,这组数据只测试了条件为真的情况,若实际输入的条件为假时有错误显然测试不出来。事实上,语句覆盖对程序的逻辑覆盖很少,语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值的情况。在上例中,为了执行
16、sacbed路径以测试每个语句,只需两个判定表达(A1)AND(B=0)和(A=2)OR(X1)都取真值,上例中测试数据足够满足要求。但是,若程序中第一个判断表达式中的逻辑运算符“AND”错写成“OR”,或把第二个判定表达式中的条件“X1”误写成“X1”,上组测试数据则不符要求,不能查出这些错误。与后面所介绍的其他覆盖相比,语句覆盖是最弱的逻辑覆盖准则。第7章 软件测试技术 2.2.判定覆盖判定覆盖 判定覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。判定覆盖又称为分支覆盖。判定覆盖的每个语句至少经历一次。例如对于图7.3来说,能够分别覆盖路径sa
17、cbed和sabd的一组测试数据,或者覆盖路径sacbd和sabed的两组测试数据均可满足判定覆盖标准。例如,以两组测试数据就可做到判定覆盖:(1)A=4,B=0,X=1(覆盖sacbd);(2)A=2,B=1,X=3(覆盖sabed)。判定覆盖的缺点仍然是覆盖的不全,只覆盖了路径的一半,如将X1误写成X1,上组(1)数据仍覆盖sacbd,可见判定覆盖仍然很弱,但比语句覆盖强。第7章 软件测试技术 图7.3语句覆盖第7章 软件测试技术 3.3.条件覆盖条件覆盖 条件覆盖就是设计若干个测试用例,运行所测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。条件覆盖使得每个语句至少执行一次。例
18、如对于图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,X=0(满足A1,B0,A2和X1的条件执行路径sabd)。第7章 软件测试技术 条件覆盖一般比判定覆盖强,因为条件覆盖使判定表达式中每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。上例两组测试数据也同时满足判
19、定覆盖标准。但是,也可能有相反情况:虽然每个条件都取到了两个不同的结果,判定表达式却始终只取一个值。例如,若使用以下两组测试数据,则只满足条件覆盖标准并不满足判定覆盖标准。(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)。上述例子的第二个判定表达式的值总为真,不满足判定覆盖的要求,为解决这一矛盾,需要对条件和分支兼顾。第7章 软件测试技术 4.4.判定判定/条件覆盖条件覆盖 判定/条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断
20、的所有可能判断结果至少执行一次。即要求各个判断的所有可能的条件取值组合至少执行一次。对于图7.3的例子而言,下述两组测试数据满足判定/条件覆盖标准。(1)A=2,B=0,X=4;(2)A=1,B=1,X=1。第7章 软件测试技术 判定/条件覆盖也有缺陷。从表面来看,它测试了所有条件的取值。但实际并不是这样。因为一些条件往往掩盖了另一些条件。对于条件表达式(A1)AND(B=0)来说,只要(A1)的测试为真,才需测试(B=0)的值来确定此表达式的值,但是若(A1)的测试值为假时,不需再测(B=0)的值就可确定此表达式的值为假,因而B=0没有被检查。同理,对于(A=2)OR(X1)这个表达式来说,
21、只要(A=2)测试结果为真,不必测试(X1)的结果就可确定表达式的值为真。所以对于判定/条件覆盖来说,逻辑表达式中的错误不一定能够查得出来。第7章 软件测试技术 5.5.条件组合覆盖条件组合覆盖 条件组合覆盖就是设计足够的测试用例,运行所测程序,使得每个判断的所有可能的条件取值组合至少执行一次。对于图7.3的例子来说,共有以下八种可能的条件组合:(1)A1,B=0 属第一个判断的取真分支;(2)A1,B0 属第一个判断的取假分支;(3)A1,B=0 属第一个判断的取假分支;第7章 软件测试技术(4)A1,B0 属第一个判断的取假分支;(5)A2,X1 属第二个判断的取真分支;(6)A2,X1
22、属第二个判断的取真分支;(7)A2,X1 属第二个判断的取真分支;(8)A2,X1 属第二个判断的取假分支。第7章 软件测试技术 对于每个判断,要求所有可能的条件的取值组合都必须取到。在图7.3中,每个判断各有两个条件,所以各有四个条件取值的组合。下面的四组测试数据可以使上面列出的八种组合每种至少出现一次:(1)A=2,B=0,X=4 (针对(1),(5)两种组合,执行路径sacbed);(2)A=2,B=1,X=1 (针对(2),(6)两种组合,执行路径sabed);(3)A=1,B=0,X=2 (针对(3),(7)两种组合,执行路径sabed);(4)A=1,B=1,X=1 (针对(4),
23、(8)两种组合,执行路径sabd)。第7章 软件测试技术 必须明确:在此例中条件组合覆盖并未要求第一个判定的四个组合与第二个判定的四个组合再进行组合,要那样的话,就需42=16个测试用例了。显然,满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。因此,条件组合覆盖是前述几种覆盖标准中最强的。但是,满足条件覆盖标准的测试数据并不一定能使程序中的每条路径都执行到,如上述四组测试数据都没有测试到路径sacbd。以上简单介绍了几种逻辑覆盖标准。在上述过程中,实现了多次涉及到测试数据执行的路径测试。显然,测试数据可检测的程序路径的多少也反映了对程序测试的详尽程度。从对程序
24、路径的覆盖程度分析,下面提出一些主要的逻辑覆盖标准。第7章 软件测试技术 6.6.点覆盖点覆盖 点覆盖是设计足够的测试数据,使程序执行时至少经过程序图中每个节点一次。图论中,点覆盖的概念定义如下:如果连通图G的子图G是连通的,且包含G的所有节点,则称G是G的点覆盖。在正常情况下,程序图是连通的有向图,图中每个节点相当于程序流程图中的一框(一个或多个语句),所以点覆盖相当于语句覆盖。第7章 软件测试技术 7.7.边覆盖边覆盖 边覆盖是设计足够的测试数据,使得程序执行路径至少经过程序图中每一个边一次,相应的图论中的定义是:如果连通图G和子图G是连通的,而且G包含G的所有边,则称G是G的边覆盖。图7
25、.4是由图7.3得出的程序图。为了使程序执行路径经过程序图的边覆盖(1,2,3,4,5,6,7),至少需要两组测试数据(分别执行路径1-2-3和1-4-5-6-7,或分别执行路径1-4-5-3和1-2-6-7)。第7章 软件测试技术 一般情况下,边覆盖和判定覆盖是一致的。例如,上述中满足判定覆盖标准的测试数据同时满足边覆盖的标准。(1)A=4,B=0,X=1(执行路径1-4-5-3,即覆盖sacbd);(2)A=2,B=1,X=3(执行路径1-2-6-7,即覆盖sacbd)。第7章 软件测试技术 图7.4和图7.3对应的程序图第7章 软件测试技术 8.8.路径覆盖路径覆盖 路径覆盖是选取足够多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 技术 普通 高等院校 计算机 类专业 系列 教材 软件工程 教学 课件
限制150内