收藏 分享(赏)

4-1结构性测试-控制流测试.ppt

上传人:cjc2202537 文档编号:1066398 上传时间:2018-06-09 格式:PPT 页数:92 大小:1.64MB
下载 相关 举报
4-1结构性测试-控制流测试.ppt_第1页
第1页 / 共92页
4-1结构性测试-控制流测试.ppt_第2页
第2页 / 共92页
4-1结构性测试-控制流测试.ppt_第3页
第3页 / 共92页
4-1结构性测试-控制流测试.ppt_第4页
第4页 / 共92页
4-1结构性测试-控制流测试.ppt_第5页
第5页 / 共92页
点击查看更多>>
资源描述

1、结构性测试(1)控制流测试,结构性测试,结构性测试方法的突出特点,是它们都基于被测程序的源代码,而不是基于定义由于这种绝对化的基础,结构性测试方法支持严格定义、数据分析和精确度量结构性测试方法大致包括两类:基于控制流(或基于路径)的测试:以程序图为基础(结点表示语句片断,边表示控制流),通过图论的一些知识完全从程序的结构来定义结构性的测试,而不考虑代码本身的内在关系基于数据流的测试:从代码本身的内在关系出发进行的一种结构性的测试,内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,例:实现一个简单的数学运算,int a,b; double c

2、 ; scanf(“%d,%d,%f”, c=b+c,语句覆盖,基本思想是:设计若干测试用例,运行被测程序,使程序中每个可执行语句至少执行一次。,1,只需设计一个测试用例:a=2,b=1,c=6,即达到了语句覆盖。,语句覆盖(续),语句覆盖(续),优点:可以很直观地从源代码得到测试用例,无须细分每条判定表达式。缺点:语句覆盖是最弱的逻辑覆盖。对程序的逻辑覆盖很少,只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。(这种方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。比如在if结构中若源代码没有给出else后面的执行分支,那么语句覆盖测试就不会考虑这种

3、情况。 ),内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,判定覆盖,基本思想是:设计若干测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。,判定覆盖(续),a=2,b=1 ,c=6可覆盖判断M的Y分支和判断Q的Y分支a=-2,b=-1 ,c=-3可覆盖判断M的N分支和判断Q的N分支这两组测试用例可覆盖所有判定的真假分支,判断M,判断Q,判定覆盖(续),a=1,b=1 ,c=-3 可覆盖判断M的Y分支和判断Q的N分支a=1,b=-2 ,c=3可覆盖判断M的N分支和判断Q的Y分支同样的这两组

4、测试用例也可覆盖所有判定的真假分支,判断M,判断Q,判定覆盖(续),优点:判定覆盖具有比语句覆盖更强的测试能力。同样判定覆盖也具有和语句覆盖一样的简单性,无须细分每个判定就可以得到测试用例。缺点:往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。判定覆盖仍是弱的逻辑覆盖。,内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,条件覆盖,基本思想是:设计若干测试用例,执行被测程序以后要使每个判断中每个条件的可能取值至少满足一次。,1,条件覆盖(续),判断M表达式:设条件 a0

5、 取真 记为 T1 假 F1 条件 b0 取真 记为 T2 假 F2判断Q表达式:设条件 a1 取真 记为 T3 假 F3 条件 c1 取真 记为 T4 假 F4,判断M,判断Q,条件覆盖(续),它们覆盖了判定M的N分支和判断Q的Y分支,我们用条件覆盖设计的思想就是让测试用例能覆盖T1、T2、T3、T4、F1、F2、F3、F4,判断M,判断Q,条件覆盖(续),优点:增加了对条件判定情况的测试,增加了测试路径。缺点:条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。,内容,逻辑覆盖语句覆盖

6、判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,判定-条件覆盖,基本思想是:设计足够的测试用例,使得判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。,1,判定-条件覆盖(续),按照判定-条件覆盖的要求,我们设计的测试用例要满足如下条件:所有条件可能取值至少执行一次;所有判断的可能结果至少执行一次。,要满足T1、T2、 T3 、T4F1、 F2 、F3、F4,判定-条件覆盖(续),要满足T1、T2、 T3 、T4F1、 F2 、F3、F4,判定-条件覆盖(续),优点 :能同时满足判定、条件两种覆盖标准。缺点 :判定/条件覆盖准则的

7、缺点是未考虑条件的组合情况。,内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,条件组合覆盖,基本思想是:设计足够的测试用例,使得所有可能的条件取值组合至少执行一次,1,条件组合覆盖(续),按照条件组合覆盖的基本思想,对于前面的例子,我们把每个判断中的所有条件进行组合,设计组合条件如表所示,而我们设计的测试用例就要包括所有的组合条件。,条件组合覆盖(续),要满足1、2、3、4、5、6、7、8条件组合,条件组合覆盖(续),优点 :条件组合覆盖准则满足判定覆盖、条件覆盖和判定-条件覆盖准则。缺点 :线性地增加了测试用例的数量。,内容,逻辑覆盖语

8、句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,路径覆盖,基本思想是:设计所有的测试用例,来覆盖程序中的所有可能的执行路径 。,1,路径覆盖(续),路径覆盖(续),优点 :这种测试方法可以对程序进行彻底的测试,比前面五种的覆盖面都广。缺点 :需要设计大量、复杂的测试用例,使得工作量呈指数级增长,不见得把所有的条件组合都覆盖。 在实际的测试用例设计过程中,可以根据需要将不同的覆盖方法组合起来使用,以实现最佳的测试用例设计。,条件组合覆盖结合路径覆盖,路径覆盖的困难,右边的控制流图大致对应一个100行长的Pascal程序若其中唯一的循环至多执行20次,则最多

9、有520个逻辑路径假设每运行一组测试用例平均花费1毫秒,总共需要3170年才能穷尽测试这些逻辑路径,内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,程序图/控制流图,程序图是一种有向图,图中的节点表示语句片断,边表示控制流。如果 i 和 j 是程序图中的节点,从节点 i 到节点 j 存在一条边,当且仅当对应节点 j 的语句片断可以在对应节点 i 的语句片断之后立即执行。,程序图/控制流图(续),程序图(控制流图)中只有两种图形符号:结点:以标有编号的圆圈表示。它代表了程序流程图中矩形框表示的处理、菱形表示的两个到多个出口判断以及两条到多条

10、流线相交的汇合点。边(弧):以箭头表示。它与程序流程图中的流线是一致的,表明了控制的顺序。为了方便讨论,控制流线通常标有名字,如图中所标的a、b、c等。,除了用程序流程图可以转化成控制流图以外,还可以把伪代码表示的处理过程转化成控制流图。根据程序建构控制流图很容易 。例如:三角形伪代码实现过程转化成了控制流图,程序图/控制流图(续),有的时候,我们可以把几个节点合并成一个,合并的原则是:若在一个节点序列中没有分支,则我们可以把这个序列的节点都合并成一个节点,DD路径测试,Decision-Decision(决策-决策)路径Page126,路径,路径是一系列边,使得对于该序列中的所有相邻边对偶e

11、i、ej来说,第一条边的终止节点是第二条边的初始节点。环路是一个在同一个节点上开始和结束的(有向)路径。,半路径,半路径是一系列边,使得对于该序列中至少有一个相邻边对偶ei、ej来说,第一条边的初始节点是第二条边的初始节点,或第一条边的终止节点是第二条边的终止节点。,路径与半路径举例,从n1到n6的一条路径e2,e5:e2终止结点是e5的初始结点从n1到n5的一条路径从n3到n6的一条路径n1和n3之间的一条半路径e2,e3:e2和e3有相同的终止结点n2和n4之间的一条半路径e1,e2:e1和e2有相同的初始结点n5和n6之间的一条半路径,(路径)链,链是一条起始和终止结点不同的路径,并 且

12、每个结点都满足入度1、出度1 链的长度:边的数量长度为0的退化链,即链有一个节点和0条边组成初始结点与链中的所有其他结点2-连接,不会存在1-连接或3-连接,n-连接性,有向图中的两个结点ni和nj0-连接,当且仅当ni和nj之间没有路径1-连接,当且仅当ni和nj之间有一条半路径,但没有路径2-连接,当且仅当ni和nj之间有一条路径3-连接,当且仅当ni和nj之间有一条路径,并且从nj到ni有一条路径,举例,n1 和n7是0-连接n2 和n6是1-连接n1 和n6是2-连接n3 和n6是3-连接,DD-路径的定义,DD-路径是程序图中的一条链,使得:情况1:由一个结点组成,indeg0;情况

13、2:由一个结点组成,outdeg0;情况3:由一个结点组成,indeg2 或 outdeg2;情况4:由一个结点组成,indeg1 并且outdeg1;情况5:长度1的最大链,图9-1三角形程序的程序图,程序:page124,程序的DD-路径图,给定采用命令式语言编写的一段程序,其DD-路径图是有向图,其中结点表示其程序图的DD-路径,边表示连续DD-路径之间的控制流DD-路径图实际上是一种压缩图,在这种压缩图中,2-连接极大连通子图被压缩为对应情况5 DD-路径的单个结点,三角形程序的程序图,三角形程序的DD路径图,情况3,情况4,情况2,情况1,情况5,表9-1 图9-1中的DD-路径类型

14、,图9-4 三角形程序的DD-路径图,结点4是情况1 DD-路径,叫它“第一”结点23是情况2 DD-路径,叫它“最后”结点5到8是情况5 DD-路径结点8是DD-路径中的最后结点,因为它是遵循链的2-连接性质的最后结点如果超过结点8包含结点9,就会违反链的入度出度1准则如果在结点7处停止,就会违反“最大”准则结点10、11、15、17、18和21是情况4 DD-路径结点9、12、13、14、16、19、20和22是情况3 DD-路径,程序的DD-路径图(续),在实践中,手工为最多大约100行源代码的程序生成DD-路径图是可行的。若超过这种规模,大多数测试人员会借助工具完成。,测试覆盖指标,测

15、试覆盖是对测试完全程度的评测。测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的覆盖指标提供了“测试的完全程度如何?”这一问题的答案。最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖,结构性测试覆盖指标,DD路径覆盖,提出DD-路径的目的很多质量机构都把DD-路径覆盖(C1指标)作为测试覆盖的最低可接受级别E. F. Miller发现,当通过一组测试用例满足DD-路径覆盖要求时,可以发现全部缺陷中的大约85%(Miller,1991)DD路径覆盖= 判定/分支覆盖如果每一条DD-路径都被遍历,则我们知道每个判断分支都被执行,其实就是遍历DD-路径图中每条边。对于if类的 语句

16、,这意味着真、假分支都要覆盖。对于CASE语句,则每个子句都要覆盖,循环覆盖,循环是源代码中非常容易出错的部分。循环测试注重于循环构造的有效性 循环可分为四种:简单循环、串联循环、嵌套循环、不规则循环(棘手循环)循环测试的简单观点是认为每个循环都包含一个判断,并且需要测试判断的两个分支:遍历循环退出(或不进入)循环简化循环的假设不进入循环只进入一次循环,串联、嵌套与棘手的循环,小结,无论哪种测试覆盖,即使其覆盖率达到百分之百,都不能保证把所有隐藏的程序欠缺都揭露出来。提高结构的测试覆盖率只能增强我们对被测软件的信心,但它绝不是万无一失的。,内容,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定

17、-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,基路径测试,向量空间的基是相互独立的一组向量,基“覆盖”整个向量空间,使得该空间中的任何其他向量都可以用基向量来表示。因此,一组基向量在一定程度上可表示整个向量空间的本质:空间中的一切都可以用基表示,并且如果一个基元素被删除了,则这种覆盖特性也会丢失。基对测试的潜在意义是:如果可以把程序看做是一种向量空间,则这种空间的基就是要测试的非常有意义的元素集合。如果基没有问题,则可以希望能够用基表达的一切都是没有问题的。,基路径测试,基本路径测试法是在程序控制流图的基础上,通过分析控制构造的圈复杂度,导出基本可执行路径集合,从而设计测试用例的方法。设计

18、出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。 包含语句覆盖和判定/分支覆盖,在选择或多分支结构中,分支的汇聚处应有一个汇聚结点。边和结点圈定的区域叫做区域,当对区域计数时,图形外的区域也应记为一个区域。如果判断中的条件表达式是由一个或多个逻辑运算符 (OR, AND, .) 连接的复合条件表达式,则需改为 一系列只有单个条件的嵌套的判断。,McCabe的基路径方法,图9-6是一张有向图,可以认为是某个程序的程序图,或DD-路径图。,图9-6 McCabe的控制图,McCabe圈复杂度,T. J. McCabe圈复杂度,1976基本思想程序的复杂性很大程度上取决于程序控制流的复杂

19、性单一的顺序程序结构最简单,循环和选择所构成的环路越多,程序就越复杂圈复杂度:是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目独立路径:必须包含一条在定义之前不曾用到的边(即至少经过一条以前未走过的边),圈复杂度的计算,V(G) = e n + 2e:控制流图的边数n:控制流图的结点数V(G) = 判定结点数+1V(G) = 控制流图中有界或无界的封闭区域个数,例子,V(G) = e n + 2 =10-7+2 =5V(G) = 判定结点数 + 1 =4+1 =5 V(G) = 图中区域数 =5,圈复杂度对应着独立路径数目,图中的独立路径:p1:A,B,C

20、,Gp2:A,B,C,B,C,Gp3:A,B,E,F,Gp4:A,D,E,F,Gp5:A,D,F,G p:A,B,C,B,E,F,G(错),McCabe的基路径方法,McCabe开发了一种算法过程(叫做基线方法),用于确定基路径集合。首先选择一个基线路径,应该对应某个“正常案例”程序的执行。这种方法有一定的随意性,McCabe建议选择包括尽可能多的判定结点的路径接下来重复回溯基线路径,依次“翻转”每个判定点,即当结点的出度2时,必须取不同的边。,三角形程序的DD-路径图,圈复杂度: V(G)=20-17+2 =判定节点数 +1 =区域数 =5因此,5是构成基本路径集的独立路径数的上界,也是设计

21、测试用例的数目,表9-4:图9-4的基路径,关于McCabe基路径方法的观察,McCabe的过程成功地标识了在拓扑结构上独立的基路径,但是如果存在矛盾的语义依赖关系,拓扑结构上可行的路径在逻辑上有可能不可行以上问题的一种解决方案是找出逻辑依赖性的原因。三角形问题中如果仔细考虑这个问题,可以找出两条规则:路径如果经过结点C,则必须经过结点H路径如果经过结点D,则必须经过结点G,关于McCabe基路径方法的观察(续),将上述两条规则与McCabe的基线方法结合在一起,可得到以下可行的基路径集合:,注意:如果基路径必须是可行的,则逻辑依赖关系会压缩基路径集合,基路径测试步骤,导出程序流程图的拓扑结构

22、控制流图(程序图)计算控制流图的McCabe圈复杂度(设为n)确定基本路径集,即构造n条独立路径1)任意构造一条从(唯一)入口结点到(唯一)出口结点的路径,将该路径加入基本路径集2)修改基本路径集中路径,至少经过一条以前未走过的边,将新路径加入基本路径集重复第2)步,直到基本路径集中包含n条路径设计测试用例,使基本路径集中的路径能走通,1、导出控制流图(程序图),2、计算控制流图的圈复杂度,有三种方法计算圈复杂度:V(G)= 区域个数=4V(G)=边的条数-节点个数+2=4 V(G)=判定节点个数+1=4,3、确定基本路径集(构造n条独立路径),path1: 1-11path2: 1-2-3-

23、4-5-10-1-11path3: 1-2-3-6-8-9-10-1-11path4: 1-2-3-6-7-9-10-1-11 这4条路径组成了一个基本路径集。4(图的环路复杂度)是构成这个基本路径集的独立路径数的上界,也是设计测试用例的数目。,4、设计测试用例,保证基本路径集中每条路径的执行,在过程求平均值中,有6条路经:路径1:1-2-10-11-13路径2:1-2-10-12-13路径3:1-2-3-10-11-13路径4:1-2-3-4-5-8-9-2-路径5:1-2-3-4-5-6-8-9-2-.路径6:1-2-3-4-5-6-7-8-9-2-路径4、5和6后面的省略号()表示可以加

24、上控制结构其余部分的任意路径。,路径1测试用例(1-2-10-11-13): value(k) = 有效输入,其中k i value(i) = -999, 其中2i100期望结果:基于k的正确平均值和总数。注意:路径1无法独立测试,必须作为路径4、5和6测试的一部分。路径2测试用例(1-2-10-12-13) :value(1) =-999期望结果:平均值=-999;其它按初值汇总。,路径3测试用例 (1-2-3-10-11-13):试图处理101或更大的值前100个数值应该有效期望结果:与测试用例1相同路径4测试用例 (1-2-3-4-5-8-9-2):value(k) 最大值value(i

25、) = 有效输入,其中I100期望结果:基于k的正确平均值和总数。路径6测试用例(1-2-3-4-5-6-7-8-9-2) :value(i) =有效输入,其中I100。期望结果:基于k的正确平均值和总数。,指导方针与观察,问题:功能性测试:使我们离代码过远漏洞和冗余,而且不能被发现结构性测试的路径测试方法:又在另一个方向上走得太远将代码采用有向图表示和程序路径公式化,掩盖了代码中的重要信息,即可行路径和不可行路径的区别其他方法:基于数据流的测试更接近代码,从路径分析这种极端方向上返回来,基路径测试给出了必须进行测试的下限。如果功能性测试没有达到DD路径覆盖,则功能性测试用例存在漏洞。如果要求

26、的覆盖没有达到,根据有意义的路径标识额外的测试用例。,回顾,逻辑覆盖语句覆盖判定覆盖(分支覆盖)条件覆盖判定-条件覆盖条件组合覆盖路径覆盖DD路径基路径测试,请分别选出用语句覆盖,条件覆盖,路径覆盖应用哪组测试用例(请写出设计过程)。,(1) x=0, y=3 (2)x=1,y=2 (3)x= -1,y=2 (4)x=3,y=1,1,2,3,4,5,(1) 路径12,(2) 路径134,(3) 路径135,(4) 路径135,用基路径测试测以下程序,环路复杂性=判断数1617路径1:(0)(13)(19) 路径2:(0)(14)(19) 路径3:(0)(15)(19) 路径4:(0)(16)(19) 路径5:(0)(17)(19) 路径6:(0)(18)(19) 路径7:(0)(12)(19),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报