路径分析测试

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2.4.2路径分析测试对于比较简单的小程序来说,实现路径覆盖是可能的,但如果程序比较复杂,存在多个判断和多个循环,可能的路径数目将会急剧增长,以致路径覆盖难以实现。实际上可以做到的只是有选择地测试程序中某些有代表性的路径。独立路径选择和Z路径覆盖是两种常见的路径覆盖方法。2.4.2控制流图控制流图是由节点和控制边组成的,具有以下几个特点:具有唯一入口节点,即源节点,表示程序段的开始语句;具有唯一出口节点,即汇节点,表示程度段的结束语句;节点由带有标号的圆圈表示,表示一个或多个无分支的源程序语句;控制边由带箭头的直线或弧表示,代表控制流的方向。2.4.2控制流图(a)顺序语句(b)For/While循环语句(c)Until循环语句(d)If条件语句(e)Case条件语句2.4.2控制流图程序的环路复杂性是一种描述程序内部逻辑复杂度的标准。给定一个控制流图G,设其环形复杂度为V(G),在这里介绍三种常见的计算方法来求解V(G):V(G)=E-N+2,其中E是控制流图G中边的数量,N是控制流图中节点的数目;V(G)=P+1,其中P是控制流图G中判断节点(即包含条件的节点)的数目;节点由带有标号的圆圈表示,表示一个或多个无分支的源程序语句;V(G)=A,其中A是控制流图G中区域的数目。由边和节点围成的部分叫做区域,当在控制流图中计算区域的数目时,控制流图外的部分也应记为一个区域。2.4.2独立路径测试62.4.2独立路径测试测试用例设计测试难点独立路径集合规模确定独立路径的抽取不可行路径的处理测试用例的设计72.4.2独立路径测试测试难点如何确定独立路径集合的规模如何从整个路径集合中抽取独立路径的集合,以确保路径的独立性和独立路径集合的完备性如何保证每条独立路径的可行性如何从独立路径设计测试用例82.4.2独立路径测试测试用例设计测试难点独立路径集合规模确定独立路径的抽取不可行路径的处理测试用例的设计92.4.2独立路径测试按照McCabe的环复杂度概念,对于指定的程序图,对路径的测试中所需独立路径集合的大小就等于其程序图的环复杂度102.4.2独立路径测试测试用例设计测试难点独立路径集合规模确定独立路径的抽取不可行路径的处理测试用例的设计112.4.2独立路径测试独立路径抽取1、确定主路径该路径应包含尽可能多的判定节点应包含尽可能复杂的判定表达式应对应尽可能高的执行概率应包含尽可能多的语句2、根据基础路径抽取其他独立路径132.4.2独立路径测试独立路径Path1:A,B,C,G(经过判定节点A、B、C);Path2:A,D,E,F,G(在判定节点A处执行e2分支);Path3:A,B,E,F,G(在判定节点B处执行e5分支);Path4:A,B,C,B,C,G(在判定节点C处执行e3分支);Path5:A,D,F,G(在判定节点D处执行e7分支)142.4.2独立路径测试测试用例设计测试难点独立路径集合规模确定独立路径的抽取不可行路径的处理测试用例的设计152.4.2独立路径测试不可行路径的处理程序的设计缺陷导致不可行路径原因在于:构成判定表达式的多个简单判定条件之间存在一定关联,体现在多个简单判定条件的取值相互约束,从而导致部分路径不可行。若完全根据程序图来设计测试用例,往往无法发现这些不可行路径,最终导致测试失败162.4.2独立路径测试测试用例设计测试难点独立路径集合规模确定独立路径的抽取不可行路径的处理测试用例的设计172.4.2独立路径测试测试用例设计步骤根据程序源代码生成程序图计算程序图的环复杂度,确定独立路径集合的大小以最复杂的路径为基础路径,通过覆盖所有判定分支确定其他路径,抽取独立路径集合注意剔除不可行路径,必要时补充其他重要的路径根据得到的路径集合对应设计测试用例2.4.2独立路径测试独立路径测试是在程序控制流图的基础上,通过分析控制流图的环路复杂性,导出可执行的独立路径集合,从而设计相应的测试用例。以下图所示程序流程为例:13628745910112.4.2独立路径测试从控制流图看,一条独立路径是至少包含有一条在其它独立路径中从未有过的边的路径。上图所示的控制流图中一组独立的路径是:Path1:111Path2:1234510111Path3:12368910111Path4:12367910111路径Path1、Path2、Path3、Path4组成了控制流图的一个独立路径集。通常,独立路径集并不唯一确定。独立路径测试包括3个步骤:1)导出程序控制流图;2)求出程序环形复杂度;3)基于独立路径集设计测试用例。2.4.2独立路径测试例2-6:下面是一个Java语言程序,用于统计一行字符中有多少个单词,单词之间用空格分隔开2.4.2独立路径测试程序2-2(续):12{13score=score-10;14num2++;15}16i++;17}18System.out.println(“num1=”+num1+“,num2=”+num2+“,score=”+score);19}程序2-2:1publicstaticvoidmain(Stringargs[])2{3intnum1=0,num2=0,score=100;4Scannerscan=newScanner(System.in);5inti=scan.nextInt();6Stringstr=scan.next();7while(i5)8{9if(str.equals(“T”))10num1++;11elseif(str.equals(“F”))2.4.2独立路径测试第一步:画出控制流图(每个圆圈代表控制流图的节点,可以表示一个或多个语句。圆圈中的数字对应程序中某一行的编码,箭头代表边的方向,即控制流方向)97101113,1416182.4.2独立路径测试第二步:求出程序环形复杂度公式1:V(G)=9-7+2,其中10是控制流图G中边的数量,8是控制流图中节点的数目。公式2:V(G)=3+1,其中3是控制流图G中判断节点的数目(注:循环条件节点也属于判断节点)。公式3:V(G)=4,其中4是控制流图G中区域的数目。因此,控制流图G的环形复杂度是4,就是说至少需要4条独立路径组成独立路径集合,并由此得到能够覆盖所有程序语句的测试用例。2.4.2独立路径测试第三步:设计测试用例根据上面环形复杂度的计算结果,源程序的独立路径集合中有4条独立路径:Path1:718Path2:791016718Path3:791116718Path4:79111314167182.4.2独立路径测试测试用例输入预期输出执行路径istrnum1num2scoreTestCase15“T”00100路径1TestCase24“T”10100路径2TestCase34“A”00100路径3TestCase44“F”0190路径4环复杂度:6282.4.2独立路径测试独立路径Path1:A,6,8,12,13,16,18,20,21,B,34,35Path2:A,6,7,16,18,20,21,B,34,35Path3:A,6,8,9,16,18,20,21,B,34,35Path4:A,6,8,12,15,16,18,20,21,B,34,35Path5:A,6,8,12,13,16,18,33,34,35Path6:A,6,8,12,13,16,18,20,21,28,34,35292.4.2独立路径测试不可行路径分析Path1、Path3、Path4都是不可行路径原因:多个判定表达式中涉及的简单判定条件存在一定的约束关系302.4.2独立路径测试路径改进Path1:A,6,8,12,13,16,18,20,21,28,34,35Path2:A,6,7,16,18,20,21,B,34,35Path3:A,6,8,9,16,18,20,21,28,34,35Path4:A,6,8,12,15,16,18,20,21,28,34,35Path5:A,6,8,12,13,16,18,33,34,35312.4.2独立路径测试测试用例设计322.4.2独立路径测试测试分析独立路径测试的理论基础保证了测试的完备性和无冗余性基于独立路径的测试适用于多个判定节点串联和存在循环的情况避免引入不可行路径是程序优化的思想基于程序图和环复杂度的独立路径测试仅关注结构的测试覆盖2.4.2Z路径测试为解决实际操作中路径覆盖难以实现问题,必须舍弃一些次要因素,简化循环结构,从而极大地减少路径的数量,使得覆盖这些有限的路径成为可能。采用简化循环方法的路径覆盖就是Z路径覆盖。所谓简化循环就是减少循环的次数,不考虑循环体的形式和复杂度如何,也不考虑循环体实际上需要执行多少次,只考虑通过循环体零次和一次这两种情况。零次循环是指跳过循环体,从循环体的入口直接到循环体的出口。通过一次循环体是指检查循环初始值。根据简化循环的思路,循环要么执行,要么跳过,这和判定分支的效果是一样的。可见,简化循环就是将循环结构变成选择结构。

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功