版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、白盒测试白盒测试白盒测试白盒测试 白盒测试概念 测试覆盖规范 逻辑驱动测试 根本途径测试白盒测试概念 白盒测试也称构造测试或逻辑驱动测试,是一种测试用例设计方法,它从程序的控制构造导出测试用例。测试用例由测试输入数据以及与之对应的输出结果组成。 测试用例设计的好坏直接决议了测试的效果和结果。所以说在软件测试活动中最关键的步骤就是设计有效的测试用例。 白盒测试运用被测单元内部如何任务的信息,允许测试人员对程序内部逻辑构造及有关信息来设计和选择测试用例,对程序的逻辑途径进展测试。基于一个运用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、途径、条件。 白盒测试的主要目的: 保证一个模块中的一切独
2、立途径至少被执行一次; 对一切的逻辑值均需求测试真、假两个分支; 在上下边境及可操作范围内运转一切循环; 检查内部数据构造以确保其有效性。测试覆盖规范 白盒法特点:以程序的内部逻辑为根底设计测试用例,所以又称为逻辑覆盖法。运用白盒法时,手头必需有程序的规格阐明以及程序清单。 白盒法思索的是测试用例对程序内部逻辑的覆盖程度。最彻底的白盒法是覆盖程序中的每一条途径,但是由于程序中普通含有循环,所以途径的数目极大,要执行每一条途径是不能够的,只能希望覆盖的程度尽能够高些。 测试覆盖规范测试覆盖规范 上页小程序的流程图,其中包括了一个执行达20次的循环。那么它所包含的不同执行途径数高达5201013条
3、,假设要对它进展穷举测试,覆盖一切的途径。假使测试程序对每一条途径进展测试需求1毫秒,同样假定一天任务24小时,一年任务365 天, 那么要想把如下图的小程序的一切途径测试完,那么需求3170年。测试覆盖规范为了衡量测试的覆盖程度,需求建立一些规范,目前常用的一些覆盖规范从低到高分别是: 语句覆盖:是一个比较弱的测试规范,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。 它是最弱的逻辑覆盖,效果有限,必需与其它方法交互运用。 测试覆盖规范断定覆盖也称为分支覆盖:执行足够的测试用例,使得程序中的每一个分支至少都经过一次。 断定覆盖只比语句覆盖稍强一些,但实践效果阐明,只是断
4、定覆盖,还不能保证一定能查出在判别的条件中存在的错误。因此,还需求更强的逻辑覆盖准那么去检验判别内部条件。条件覆盖:执行足够的测试用例,使程序中每个判别的每个条件的每个能够取值至少执行一次; 条件覆盖深化到断定中的每个条件,但能够不能满足断定覆盖的要求。 测试覆盖规范断定/条件覆盖:执行足够的测试用例,使得断定中每个条件取到各种能够的值,并使每个断定取到各种能够的结果。 断定/条件覆盖有缺陷。从外表上来看,它测试了一切条件的取值。但是现实并非如此。往往某些条件掩盖了另一些条件。会脱漏某些条件取值错误的情况。为彻底地检查一切条件的取值,需求将断定语句中给出的复合条件表达式进展分解,构成由多个根本
5、断定嵌套的流程图。这样就可以有效地检查一切的条件能否正确了。测试覆盖规范条件组合覆盖:执行足够的例子,使得每个断定中条件的各种能够组合都至少出现一次。 这是一种相当强的覆盖准那么,可以有效地检查各种能够的条件取值的组合能否正确。它不但可覆盖一切条件的能够取值的组合,还可覆盖一切判别的可取分支,但能够有的途径会脱漏掉。测试还不完全。白盒测试的主要方法: 逻辑驱动测试 语句覆盖:语句覆盖就是设计假设干个测试用例,运转被测试程序,使得每一条可执行语句至少执行一次; 断定覆盖也称为分支覆盖:设计假设干个测试用例,运转所测程序,使程序中每个判别的取真分支和取假分支至少执行一次; 条件覆盖:设计足够多的测
6、试用例,运转所测程序,使程序中每个判别的每个条件的每个能够取值至少执行一次; 断定/条件覆盖:设计足够多的测试用例,运转所测程序,使程序中每个判别的每个条件的一切能够取值至少执行一次,并且每个能够的判别结果也至少执行一次,换句话说,即是要求各个判别的一切能够的条件取值组合至少执行一次;白盒测试的主要方法: 条件组合覆盖:设计足够多的测试用例,运转所测程序,使程序中每个判别的一切能够的条件取值组合至少执行一次; 根本途径测试 设计足够多的测试用例,运转所测程序,要覆盖程序中一切能够的途径。这是最强的覆盖准那么。但在途径数目很大时,真正做到完全覆盖是很困难的,必需把覆盖途径数目紧缩到一定限制。 语
7、句覆盖 语句覆盖是一个比较弱的测试规范,它的含义是:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。 如,例1: PROCEDURE M(VAR A,B,X:REAL); BEGIN IF (A1) AND (B=0) THEN X:=X/A; IF (A=2) OR (X1) THEN X:=X+1; END.语句覆盖 为使程序中每个语句至少执行一次,只需设计一个能经过途径ace的例子就可以了,例如选择输入数据为: A=2,B=0,X=3 就可到达“语句覆盖规范。 语句覆盖 语句覆盖 从上例可看出,语句覆盖实践上是很弱的,假设第一个条件语句中的AND错误地编写成OR,上面的测试用例
8、是不能发现这个错误的;又如第三个条件语句中X1误写成X0,这个测试用例也不能暴露它,此外,沿着途径abd执行时,X的值应该坚持不变,假设这一方面有错误,上述测试数据也不能发现它们。 分支覆盖 比“语句覆盖稍强的覆盖规范是“分支覆盖(或称分支覆盖)规范。含义是:执行足够的测试用例,使得程序中的每一个分支至少都经过一次。 分支覆盖 对例1的程序,假设设计两个例子,使它们能经过途径ace和abd,或者经过途径acd和abe,就可到达“断定覆盖规范,为此,可以选择输入数据为: A=3,B=0,X=1 (沿途径acd执行); A=2,B=1,X=3(沿途径abe执行) 分支覆盖断定覆盖 断定覆盖 A=3
9、,B=0,X=1 (沿途径acd执行) A=2,B=1,X=3 (沿途径abe执行)分支覆盖 程序中含有断定的语句包括IF-THEN-ELSE、DO-WHILE、REPEAT-UNTIL等,除了双值的断定语句外,还有多值的断定语句,如PASCAL中的CASE语句、FORTRAN中带有三个分支的IF语句等。所以“分支覆盖更普通的含义是:使得每一个分支获得每一种能够的结果。 “分支覆盖比“语句覆盖严厉,由于假设每个分支都执行过了,那么每个语句也就执行过了。但是,“分支覆盖还是很不够的,例如例1两个测试用例未能检查沿着途径abd执行时,X的值能否坚持不变。 条件覆盖 一个断定中往往包含了假设干个条件
10、,如例1的程序中,断定 (A1) AND (B=0)包含了两个条件: A1以及 B=0,所以可引进一个更强的覆盖规范“条件覆盖。“条件覆盖的含义是:执行足够的测试用例,使得断定中的每个条件获得各种能够的结果。 条件覆盖例1的程序有四个条件: A1、 B=0、A=2、X1 为了到达“条件覆盖规范,需求执行足够的测试用例使得在a点有: A1、A1、B=0、B0 等各种结果出现,以及在b点有: A=2、A2、X1、X1 等各种结果出现。如今只需设计以下两个测试用例就可满足这一规范: A=2,B=0,X=4 (沿途径ace执行); A=1,B=1,X=1 (沿途径abd执行)。 条件覆盖条件覆盖条件覆
11、盖A=2,B=0,X=4 (沿途径ace执行)A=1,B=1,X=1 (沿途径abd执行)条件覆盖 “条件覆盖通常比“分支覆盖强,由于它使一个断定中的每一个条件都取到了两个不同的结果,而断定覆盖那么不保证这一点。 “条件覆盖并不包含“分支覆盖,如对语句IF(A AND B)THEN S 设计测试用例使其满足条件覆盖,即使A为真并使B为假,以及使A为假而且B为真,但是它们都未能使语句S得以执行。 分支/条件覆盖 针对上面的问题引出了另一种覆盖规范“分支 条件覆盖,它的含义是:执行足够的测试用例,使得分支中每个条件取到各种能够的值,并使每个分支取到各种能够的结果。 对例1的程序,前面的两个例子 A
12、=2,B=0,X=4 (沿ace路) A=1,B=1,X=1 (沿abd途径) 是满足这一规范的。条件组合覆盖 针对上述问题又提出了另一种规范“条件组合覆盖。它的含义是:执行足够的例子,使得每个断定中条件的各种能够组合都至少出现一次。显然,满足“条件组合覆盖的测试用例是一定满足“分支覆盖、“条件覆盖和“分支/条件覆盖的。 条件组合覆盖再看例1的程序,我们需求选择适当的例子,使得下面 8种条件组合都可以出现:1A1, B=0 2) A1, B03) A1, B=0 4) A1, B05) A=2, X1 6) A=2,X1 7) A2, X1 8) A2, X1 5)、 6)、 7)、8四种情况
13、是第二个 IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必需根据程序的逻辑推算出在程序的入口点X的输入值应是什么。 条件组合覆盖 下面设计的四个例子可以使上述 8种条件组合至少出现一次: A=2,B=0,X=4 使 1)、5)两种情况出现; A=2,B=1,X=1 使 2)、6)两种情况出现; A=1,B=0,X=2 使 3)、7)两种情况出现; A=1,B=1,X=1 使 4)、8)两种情况出现。条件组合覆盖 上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条途径,例如途径acd就没有执行,因此,条件组合覆盖规范依然是不彻底。 途径测试 途径测试就是设计足够多的测试
14、用例,覆盖被测试对象中的一切能够途径。 对于例1,下面的测试用例那么可对程序进展全部的途径覆盖。测试用例 通过路径 A=2、B=0、X=3 aceA=1、B=0、X=1abdA=2、B=1、X=1abeA=3、B=0、X=1acd根本途径测试 例1、例2都是很简单的程序函数,只需四条途径。但在实际中,一个不太复杂的程序,其途径都是一个庞大的数字,要在测试中覆盖一切的途径是不现实的。为理处理这一难题,只得把覆盖的途径数紧缩到一定限制内,例如,程序中的循环体只执行一次。 下面引见的根本途径测试就是这样一种测试方法,它在程序控制图的根底上,经过分析控制构造的环行复杂性,导出根本可执行途径集合,从而设
15、计测试用例的方法。设计出的测试用例要保证在测试中程序的每一个可执行语句至少执行一次。 根本途径测试 前提条件 测试进入的前提条件是在测试人员曾经对被测试对象有了一定的了解,根本上明确了被测试软件的逻辑构造。 测试过程 过程是经过针对程序逻辑构造设计和加载测试用例,驱动程序执行,以对程序途径进展测试。测试结果是分析实践的测试结果与预期的结果能否一致。 根本途径测试在程序控制流图的根底上,经过分析控制构造的环路复杂性,导出根本可执行途径集合,从而设计测试用例。包括以下4个步骤和一个工具方法:程序的控制流图:描画程序控制流的一种图示方法。程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出
16、程序根本途径集合中的独立途径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。导出测试用例:根据圈复杂度和程序构造设计用例数据输入和预期结果。预备测试用例:确保根本途径集中的每一条途径的执行。 根本途径测试工具方法: 图形矩阵:是在根本途径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个根本途径集。控制流图的符号 在引见根本途径方法之前,必需先引见一种简单的控制流表示方法,即流图。流图是对待测试程序过程处置的一种表示。流图运用下面的符号描画逻辑控制流,每一种构造化构成元素有一个相应的流图符号。顺序构造if 构造Case 构造while 构造until 构造控制流
17、图 流图只需二种图形符号 图中的每一个圆称为流图的结点,代表一条或多条语句。 流图中的箭头称为边或衔接,代表控制流。 任何过程设计都要被翻译成控制流图。 控制流图 在将程序流程图简化成控制流图时,应留意: 在选择或多分支构造中,分支的会聚处应有一个会聚结点。 边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。 如下页图所示控制流图1762,38910114,5 76 231 8 4 511 910节点边区域区域:由边和节点封锁起来的区域计算区域:不要忘记区域外的部分待测试程序用流图表示的待测试程序控制流图假设判别中的条件表达式是由一个或多个逻辑运算符 (OR, AND,
18、 NAND, NOR) 衔接的复合条件表达式,那么需求改为一系列只需单条件的嵌套的判别。例如: 1 if a or b 2 x 3 else 4 y对应的逻辑为:独立途径独立途径:至少沿一条新的边挪动的途径1762,38910114,5途径1:1-11途径2:1-2-3-4-5-10-1-11途径3:1-2-3-6-8-9-10-1-11途径4:1-2-3-6-7-9-10-1-11对以上途径的遍历,就是至少一次地执行了程序中的一切语句。根本途径测试 第一步:画出控制流图 流程图用来描画程序控制构造。可将流程图映射到一个相应的流图(假设流程图的菱形决议框中不包含复合条件)。在流图中,每一个圆,
19、称为流图的结点,代表一个或多个语句。一个处置方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或衔接,代表控制流,类似于流程图中的箭头。一条边必需终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then构造)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。根本途径测试 画出其程序流程图和对应的控制流图如下467810111314467148101113程序流程图 控制流图根本途径测试 - 计算圈复杂度第二步:计算圈复杂度圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的根本的独立途径数目,为确保一切语句至少执行一次的测试数
20、量的上界。独立途径必需包含一条在定义之前不曾用到的边。有以下三种方法计算圈复杂度:流图中区域的数量对应于环型的复杂性;给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中断定结点的数量。 根本途径测试 - 计算圈复杂度 对应上面图中的圈复杂度,计算如下:流图中有四个区域;V(G)=10条边-8结点+2=4;V(G)=3个断定结点+1=4。4671481011132134根本途径测试 - 导出测试用例 第三步:导出测试用例 根据上面的计算方法,可得出四个独立的途径。(一条独立途径是指
21、,和其他的独立途径相比,至少引入一个新处置语句或一个新判别的程序通路。V(G)值正好等于该程序的独立途径的条数。) 途径1:4-14 途径2:4-6-7-14 途径3:4-6-8-10-13-4-14 途径4:4-6-8-11-13-4-14根据上面的独立途径,去设计输入数据,使程序分别执行到上面四条途径。4671481011132134根本途径测试 - 预备测试用例 第四步:预备测试用例 为了确保根本途径集中的每一条途径的执行,根据判别结点给出的条件,选择适当的数据以保证某一条途径可以被测试到,满足上面例子根本途径集的测试用例是:根本途径测试再举例 例5:下例程序流程图描画了最多输入50个值
22、以1作为输入终了标志,计算其中有效的学生分数的个数、总分数和平均值。开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112步骤1:导出过程的流图。步骤2:确定环形复杂性度量V(G):1V(G)=
23、6 个区域2V(G)=EN+2=1612+2=6 其中E为流图中的边数,N为结点数;3V(G)=P+1=5+1=6 其中P为谓词结点的个数。在流图中,结点2、3、5、6、9是谓词结点。根本途径测试再举例123456789111012R1R2R3R4R5R6根本途径测试再举例步骤3:确定根本途径集合即独立途径集合。于是可确定6条独立的途径:途径1:1-2-9-10-12途径2:1-2-9-11-12途径3:1-2-3-9-10-12途径4:1-2-3-4-5-8-2途径5:1-2-3-4-5-6-8-2途径6:1-2-3-4-5-6-7-8-2123456789111012R1R2R3R4R5R
24、6根本途径测试再举例步骤4:为每一条独立途径各设计一组测试用例,以便强迫程序沿着该途径至少执行一次。1途径1(1-2-9-10-12)的测试用例: scorek=有效分数值,当k i ; scorei=1, 2i50; 期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途径测试再举例2途径2(1-2-9-11-12)的测试用例: score 1 = 1 ;
25、 期望的结果:average = 1 ,其他量坚持初值。3途径3(1-2-3-9-10-12)的测试用例: 输入多于50个有效分数,即试图处置51个分数,要求前51个为有效分数;期望结果:n1=50、且算出正确的总分和平均分。开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途径测试再举例4途径4(1-2-3-4-5-8-2)的测试用例: scorei=有效分数,当i50; scorek0,k i ;期望结果:根据输入的有效分数算出正确的分
26、数个数n1、总分sum和平均分average。5途径5的测试用例: scorei=有效分数,当i100,k i ;期望结果:根据输入的有效分数算出正确的分数个数n1、总分sum和平均分average。开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112根本途径测试再举例6途径6(1-2-3-4-5-6-7-8-2)的测试用例: scorei=有效分数, 当i50; 期望结果:根据输入的有效分数算出正确的分数个数n1、总 分 s u m 和 平 均
27、 分average。开场 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 前往FFFTTT12和345和6789101112第4章 白盒测试及其用例的设计4.1 白盒测试方法4.2 白盒测试的根本概念4.3 覆盖测试4.4 途径测试4.5 最少测试用例数计算本章教学目的实际环节实际环节学习了解白盒测试方法的根本概念学习了解白盒测试方法的根本概念学习了解白盒测试的覆盖实际学习了解白盒测试的覆盖实际学习掌握白盒测试的途径表达学习掌握白盒测试的途径表达学习掌握白盒测试的根本途径测试法学习掌握白盒测试的根
28、本途径测试法实际环节实际环节经过案例运用学习掌握覆盖问题的处理方法经过案例运用学习掌握覆盖问题的处理方法运用根本途径测试方法进展实践程序测试运用根本途径测试方法进展实践程序测试4.1 白盒测试方法 为什么要进展白盒测试? 假设一切软件错误的根源都可以追溯到某个独一缘由,那么问题就简单了。然而,现实上一个bug 经常是由多个要素共同导致的,如以下图所示。白盒测试方法续 白盒测试也称构造测试或逻辑驱动测试,是针对被测单元内部是如何进展任务的测试。它根据程序的控制构造设计测试用例,主要用于软件或程序验证。 白盒测试法检查程序内部逻辑构造,对一切逻辑途径进展测试,是一种穷举途径的测试方法。但即使每条途
29、径都测试过了,依然能够存在错误。由于: 穷举途径测试无法检查出程序本身能否违反了设计规范,即程序能否是一个错误的程序。 穷举途径测试不能够查出程序由于脱漏途径而出错。 穷举途径测试发现不了一些与数据相关的错误。白盒测试方法续 采用白盒测试方法必需遵照以下几条原那么,才干到达测试的目的: 保证一个模块中的一切独立途径至少被测试一次。 一切逻辑值均需测试真 (true) 和假 (false) 两种情况。 检查程序的内部数据构造,保证其构造的有效性。 在上下边境及可操作范围内运转一切循环。 白盒测试主要是检查程序的内部构造、逻辑、循环和途径。常用测试用例设计方法有: 逻辑覆盖法逻辑驱动测试 根本途径
30、测试方法4.2 白盒测试的根本概念4.2.1 控制流图4.2.2 环形复杂度4.2.3 图矩阵4.2.1 控制流图 控制流图可简称流图是对程序流程图进展简化后得到的,它可以更加突出的表示程序控制流的构造。 控制流图中包括两种图形符号:节点和控制流线。 节点由带标号的圆圈表示,可代表一个或多个语句、一个处置框序列和一个条件断定框假设不包含复合条件。 控制流线由带箭头的弧或线表示,可称为边。它代表程序中的控制流。 对于复合条件,那么可将其分解为多个单个条件,并映射成控制流图。常见构造的控制流图顺序结构IF选择结构WHILE重复结构UNTIL重复结构CASE多分支结构其中,包含条件的节点被称为断定节
31、点也叫谓词节点,由断定节点发出的边必需终止于某一个节点,由边和节点所限定的范围被称为区域。4.2.2 环形复杂度 环形复杂度也称为圈复杂度,它是一种为程序逻辑复杂度提供定量尺度的软件度量。 环形复杂度的运用可以将环形复杂度用于根本途径方法,它可以提供:程序根本集的独立途径数量;确保一切语句至少执行一次的测试数量的上界。 独立途径是指程序中至少引入了一个新的处置语句集合或一个新条件的程序通路。采用流图的术语,即独立途径必需至少包含一条在本次定义途径之前不曾用过的边。 测试可以被设计为根本途径集的执行过程,但根本途径集通常并不独一。 计算环形复杂度的方法 环形复杂度以图论为根底,为我们提供了非常有
32、用的软件度量。可用如下三种方法之一来计算环形复杂度: 控制流图中区域的数量对应于环形复杂度。 给定控制流图G的环形复杂度V(G),定义为 V(G) = E-N+2 其中,E是控制流图中边的数量,N是控制流图中的节点数量。 给定控制流图G的环形复杂度V(G),也可定义为 V(G) = P+1 其中,P是控制流图G中断定节点的数量。4.2.3 图矩阵 图矩阵是控制流图的矩阵表示方式。 图矩阵是一个方形矩阵,其维数等于控制流图的节点数。矩阵中的每列和每行都对应于标识的节点,矩阵元素对应于节点间的边。 通常,控制流图中的结点用数字标识,边那么用字母标识。假设在控制流图中从第 i 个结点到第 j 个结点
33、有一个标识为 x 的边相衔接,那么在对应图矩阵的第 i 行第 j 列有一个非空的元素 x 。习题 根据左图给出的程序流程图,完成以下要求: 1画出相应的控制流图。 2计算环形复杂度。 3给出相应的图矩阵。 4找出程序的独立途径集合。4.3 覆盖测试4.3.1 测试覆盖率4.3.2 逻辑覆盖法4.3.3 面向对象的覆盖4.3.4 测试覆盖准那么4.3.1 测试覆盖率 测试覆盖率:用于确定测试所执行到的覆盖项的百分比。其中的覆盖项是指作为测试根底的一个入口或属性,比如语句、分支、条件等。 测试覆盖率可以表示出测试的充分性,在测试分析报告中可以作为量化目的的根据,测试覆盖率越高效果越好。但覆盖率不是
34、目的,只是一种手段。 测试覆盖率包括功能点覆盖率和构造覆盖率: 功能点覆盖率大致用于表示软件曾经实现的功能与软件需求实现的功能之间的比例关系。 构造覆盖率包括语句覆盖率、分支覆盖率、循环覆盖率、途径覆盖率等等。4.3.2 逻辑覆盖法 根据覆盖目的的不同,逻辑覆盖又可分为语句覆盖、断定覆盖、条件覆盖、断定/条件覆盖、组合覆盖和途径覆盖。 语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。 断定覆盖:经过执行足够的测试用例,使得程序中的每个断定至少都获得一次“真值和“假值, 也就是使程序中的每个取“真分支和取“假分支至少均阅历一次,也称为“分支覆盖。 条件覆盖:设计足够多的测
35、试用例,使得程序中每个断定包含的每个条件的能够取值真/假都至少满足一次。逻辑覆盖法续 断定/条件覆盖:设计足够多的测试用例,使得程序中每个断定包含的每个条件的一切情况真/假至少出现一次,并且每个断定本身的断定结果真/假也至少出现一次。 满足断定/条件覆盖的测试用例一定同时满足断定覆盖和条件覆盖。 组合覆盖:经过执行足够的测试用例,使得程序中每个断定的一切能够的条件取值组合都至少出现一次。 满足组合覆盖的测试用例一定满足断定覆盖、条件覆盖和断定/条件覆盖。 途径覆盖:设计足够多的测试用例,要求覆盖程序中一切能够的途径。 逻辑覆盖法续组合覆盖判别/条件覆盖判别覆盖条件覆盖语句覆盖逻辑覆盖法续voi
36、d DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)&(z5) ) j=x*y+10; /语句块2 j=j%3; /语句块3逻辑覆盖法续X3 & z5执行语句块执行语句块3FFTTabdce语句覆盖 要实现DoWork函数的语句覆盖,只需设计一个测试用例就可以覆盖程序中的一切可执行语句。 测试用例输入为: x=4、y=5、z=5 程序执行的途径是:abd 分析: 语句覆盖可以保证程序中的每个语句都得到执行,但发现不了断定中逻辑运算的错误,即它并不是一种充分的检验方法。例如在第一个断定(x3)&(z5错误写为y3)&
37、;(z3 取真值记为T1,取假值记为-T1 条件z5) ): 条件x=4 取真值记为T3,取假值记为-T3 条件y5 取真值记为T4,取假值记为-T4条件覆盖续 根据条件覆盖的根本思想,要使上述4个条件能够产生的8种情况至少满足一次,设计测试用例如下: 测试用例 执行路径 覆盖条件 覆盖分支 x=4、y=6、z=5 abd T1、T2、T3、T4 bd x=2、y=5、 z=15 ace -T1、-T2、 -T3、-T4 ce 分析:上面这组测试用例不但覆盖了4个条件的全部8种情况,而且将两个断定的4个分支b、c、d、e也同时覆盖了,即同时到达了条件覆盖和断定覆盖。条件覆盖续 阐明:虽然前面的
38、一组测试用例同时到达了条件覆盖和断定覆盖,但是,并不是说满足条件覆盖就一定能满足断定覆盖。假设设计了下表中的这组测试用例,那么虽然满足了条件覆盖,但只是覆盖了程序中第一个断定的取假分支c 和第二个断定的取真分支d,不满足断定覆盖的要求。 测试用例 执行路径 覆盖条件覆盖分支x=2、y=6、z=5 acd-T1、T2、 -T3、T4 cdx=4、y=5、z=15 acdT1、-T2、 T3、-T4 cd断定/条件覆盖 断定/条件覆盖实践上是将断定覆盖和条件覆盖结合起来的一种方法,即:设计足够的测试用例,使得断定中每个条件的一切能够取值至少满足一次,同时每个断定的能够结果也至少出现一次。 根据断定
39、/条件覆盖的根本思想,只需设计以下两个测试用例便可以覆盖4个条件的8种取值以及4个断定分支。 测试用例 执行路径 覆盖条件覆盖分支x=4、y=6、z=5 abdT1、T2、 T3、T4 bdx=2、y=5、z=15ace-T1、-T2、 -T3、-T4 ce断定/条件覆盖续 分析:从外表上看,断定/条件覆盖测试了各个断定中的一切条件的取值,但实践上,编译器在检查含有多个条件的逻辑表达式时,某些情况下的某些条件将会被其它条件所掩盖。因此,断定/条件覆盖也不一定可以完全检查出逻辑表达式中的错误。 例如:对于第一个断定(x3)&(z3和z3为假,那么编译器将不再检查z5)来说,假设条件x=4
40、满足,就以为该断定为真,这时将不会再检查y5,那么同样也无法发现这个条件中的错误。组合覆盖 组合覆盖的目的是要使设计的测试用例能覆盖每一个断定的一切能够的条件取值组合。 对DoWork函数中的各个断定的条件取值组合加以标志: 1、x3, z3, z=10 记做T1 -T2,第一个断定的取假分支 3、x=3, z10 记做-T1 T2,第一个断定的取假分支 4、x=10 记做-T1 -T2,第一个断定的取假分支 5、x=4, y5 记做T3 T4,第二个断定的取真分支 6、x=4, y5 记做-T3 T4,第二个断定的取真分支 8、x!=4, y8 AND Y5X0 OR Y0援用语句1援用语句
41、2NYNYX16 OR Y10援用语句3NY4.3.3 面向对象的覆盖 承继上下文覆盖承继上下文覆盖 由于传统的构造化度量没有思索面向对象的一些特性如由于传统的构造化度量没有思索面向对象的一些特性如多态、承继和封装等,所以在面向对象领域,传统的构多态、承继和封装等,所以在面向对象领域,传统的构造化覆盖必需被加强,以满足面向对象特性。造化覆盖必需被加强,以满足面向对象特性。 承继上下文覆盖思索在每个类的上下文内获得的覆盖率级承继上下文覆盖思索在每个类的上下文内获得的覆盖率级别。它是扩展到面向对象领域里的一种覆盖率度量方法,别。它是扩展到面向对象领域里的一种覆盖率度量方法,用于度量在系统中的多态调
42、用被测试得多好。用于度量在系统中的多态调用被测试得多好。 承继上下文定义将基类上下文内例行程序的执行作为独立承继上下文定义将基类上下文内例行程序的执行作为独立于承继类上下文内例行程序的执行。同样,它们在思索承于承继类上下文内例行程序的执行。同样,它们在思索承继类上下文内例行程序的执行也独立于基类上下文内例行继类上下文内例行程序的执行也独立于基类上下文内例行程序的执行。为了获得程序的执行。为了获得100承继上下文覆盖,代码必需承继上下文覆盖,代码必需在每个适当的上下文内被完全执行。在每个适当的上下文内被完全执行。 面向对象的覆盖续 基于形状的上下文覆盖基于形状的上下文覆盖 在绝大多数面向对象的系
43、统中存在这样的一些类:这些类在绝大多数面向对象的系统中存在这样的一些类:这些类的对象可以存在于众多不同形状中的任何一种,并且由于的对象可以存在于众多不同形状中的任何一种,并且由于类的行为依赖于形状,每个类的行为在每个能够的形状中类的行为依赖于形状,每个类的行为在每个能够的形状中其性质是不同的。其性质是不同的。 基于形状的上下文覆盖对应于被测类对象的潜在形状。基于形状的上下文覆盖对应于被测类对象的潜在形状。 这样基于形状的上下文覆盖把一个形状上下文内的一个例这样基于形状的上下文覆盖把一个形状上下文内的一个例行程序的执行以为是独立于另一个形状内一样例行程序的行程序的执行以为是独立于另一个形状内一样
44、例行程序的执行。为了到达执行。为了到达100的基于形状的上下文覆盖,例行程的基于形状的上下文覆盖,例行程序必需在每个适当的上下文形状内被执行。序必需在每个适当的上下文形状内被执行。4.3.4 测试覆盖准那么 逻辑覆盖的出发点是合理的、完善的。所谓“覆盖,就是想要做到全面而无脱漏,但逻辑覆盖并不能真正做到无脱漏。 例如:我们不小心将前面提到的程序段中的 if (x3 & Z=3 & Z10) 按照我们前面设计的测试用例x的值取2或4来看,逻辑覆盖对这样的小问题都无能为力。分析出现这一情况的缘由在于:错误区域仅仅在x=3这个点上,即仅当x的值取3时,测试才干发现错误。面对这类情况,
45、我们应该从中汲取的教训是测试任务要有重点,要多针对容易发生问题的地方设计测试用例。测试覆盖准那么续 ESTCA覆盖准那么:在容易发生问题的地方设计测试用例,即注重程序中谓词条件判别的取值。 ESTCA覆盖准那么是一套错误敏感用例分析规那么。这一规那么虽然并不完备,但在普通程序中却是有效的。缘由在于这是一种阅历型的覆盖准那么,规那么本身针对了程序编写人员容易发生的错误,或是围绕着发生错误的频繁区域,从而提高了发现错误的命中率。详细规那么如下: 规那么1 对于A rel B型 (rel可以是) 的分支谓词,应适当的选择A与B的值,使得测试执行到该分支语句时,AB的情况分别出现一次。 这是为了检测逻
46、辑符号写错的情况,如将“AB。测试覆盖准那么续 规那么2 对于A rel C型 (rel可以是或, A是变量,C是常量)的分支谓词:当rel为时,应适当的选择A的值,使A=C+M。 这是为了检测“差1之类的错误,如“A1错写成“A0。 规那么3 对外部输入变量赋值,使其在每一个测试用例中均有不同的值与符号,并与同一组测试用例中其他变量的值与符号不同。 这是为了检测程序语句中的错误,如应该援用某一变量而错成援用另一个常量。测试覆盖准那么续 关于LCSAJ LCSAJ (Linear Code Sequence and Jump) 的字面含义是线性代码序列与跳转。在程序中,一个LCSAJ是一组顺序
47、执行的代码,以控制跳转为其终了点。 LCSAJ的起点是根据程序本身决议的。它的起点可以是程序第一行或转移语句的入口点,或是控制流可跳达的点。 假设有几个LCSAJ首尾相接,且第一个LCSAJ起点为程序起点,最后一个LCSAJ终点为程序终点,这样的LCSAJ串就组成了程序的一条途径LCSAJ途径。一条LCSAJ程序途径能够是由2个、3个或多个LCSAJ组成的。测试覆盖准那么续 基于LCSAJ与途径的关系,提出了层次LCSAJ覆盖准那么。它是一个分层的覆盖准那么,可以概括的描画为: 第一层 语句覆盖。 第二层 分支覆盖。 第三层 LCSAJ覆盖,即程序中的每一个LCSAJ都至少在测试中阅历过一次。
48、 第四层 两两LCSAJ覆盖,即程序中的每两个相连的LCSAJ组合起来在测试中都要阅历一次。 第n+2层 每n个首尾相连的LCSAJ组合在测试中都要阅历一次。 在实施测试时,假设要实现上述的层次LCSAJ覆盖,需求产生被测程序的一切LCSAJ。测试覆盖准那么续 例:找出前面DoWork函数的一切LCSAJ和LCSAJ途径。 LCSAJ5个: 1int k=0,j=0; if ( (x3)&(z5) ) 3if ( (x=4)|(y5) ) 4j=x*y+10; j=j%3 5j=j%3 LCSAJ途径4条: 1-2-4 1-2-5 1-3-4 1-3-54.4 途径测试4.4.1 途径表达式4.4.2 根本途径测试方法4.4.3 循环测试方法4.4.4 产生测试用例4.4.1 途径表达式 为了满足途径覆盖
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年创新药专利组合价值评估与交易谈判
- 护理伦理与职业精神培养
- 2026年城市绿廊 林带降噪除尘效应量化评估方法
- 2026年政府储备粮承储企业资格认定与监管要求
- 电信行业物联网技术在智能制造中的应用方案
- 梳齿板伸缩缝监理实施细则
- 敏感指标:护理敏感质量提升策略
- 2026年“自然光”显示标准在护眼显示产品中的落地应用
- 2026年高强高模型碳纤维热处理工艺路线设计与优化
- 2026年检查检验结果跨机构互认平台建设指南
- 2026湖北宏泰集团纪检人员招聘8人笔试备考题库及答案解析
- 雨课堂学堂在线学堂云《护理理论(郑州)》单元测试考核答案
- 2025年福建省中考物理真题含解析
- 2026年学雷锋精神主题宣讲课件-传承榜样力量争做时代新人
- 2025年融媒体中心编导笔试及答案
- 2025安徽合肥市口腔医院公开引进高层次人才10人笔试历年典型考题及考点剖析附带答案详解试卷2套
- 退役军人事务
- 2025-2026学年湘艺版小学音乐四年级下册教学计划及进度表
- 一汽集团招聘网络测评试题
- DB37-T 4267-2020 电力施工企业安全生产风险分级管控体系实施指南
- 东北地区的地理位置与自然环境教学设计(湘教版)
评论
0/150
提交评论