基本路径测试法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本路径测试法

第一步:画出控制流图

流程图用来描述程序控制结构。可将流程图映射到一个相应的流图(假设流程图的菱形决定框中不包含复合条件)。在流图中,每一个圆,称为流图的结点,代表一个或多个语句。一个处理方框序列和一个菱形决测框可被映射为一个结点,流图中的箭头,称为边或连接,代表控制流,类似于流程图中的箭头。一条边必须终止于一个结点,即使该结点并不代表任何语句(例如:if-else-then结构)。由边和结点限定的范围称为区域。计算区域时应包括图外部的范围。

程序代码:

1)#include

2)main()

3){

4) int A,B,C;

5) printf("请输入三角形的三条边:");

6) scanf("%d %d %d",&A,&B,&C);

7) if((A>0&&B>0&&C>0)&&((A+B)>C&&(A+C)>B&&(B+C)>A))

8) {

9)if(A==B&&A==C)

10)printf("该三角形是等边三角形!\n");

11)else

12)if((A==B&&B!=C)||(B==C&&B!=A)||(A==C&&A!=B))

13)printf("该三角形是等腰三角形!\n");

14)else

15)printf("该三角形是普通三角形!\n");

16)}

17)else

18){

19)printf("ERROR!\n");

20)return main();

21)}

22)}

程序流程图:

控制流图:

第二步:计算圈复杂度

圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的上界。独立路径必须包含一条在定义之前不曾用到的边。

有以下三种方法计算圈复杂度:

流图中区域的数量对应于环型的复杂性;

给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;

给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。

根据以上三种方法得出:

1)图中域的个数为4;

2)V(G)=E-N+2=11-9+2=4;

3)V(G)=P+1=3+1=4。

第三步:导出测试用例

根据上面的计算方法,可得出四个独立的路径。(一条独立路径是指,和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。V(G)值正好等于该程序的独立路径的条数。)

◆路径1:7-17-20-7-9-10-22

◆路径2:7-9-10-22

◆路径3:7-9-12-13-22

◆路径4:7-9-12-15-22

根据上面的独立路径,去设计输入数据,使程序分别执行到上面四条路径。

第四步:准备测试用例

为了确保基本路径集中的每一条路径的执行,根据判断结点给出的条件,选择适当的数据以保证某一条路径可以被测试到,满足上面例子基本路径集的测试用例是:

路径1:7-17-20-7-9-10-22

输入数据:A<=0或者B<=0或者C<=0的任意一组取值

预期结果:ERROR!

请输入三角形的三条边:

路径2:7-9-10-22

输入数据:A>0且B>0且C>0;A=B=C的任意一组取值

预期结果:该三角形是等边三角形!

路径3:7-9-12-13-22

输入数据:A>0且B>0且C>0;A=B或者A=C或者B=C的任意一组取值

预期结果:该三角形是等腰三角形!

路径4:7-9-12-15-22

输入数据:A>0且B>0且C>0的任意一组取值

预期结果:该三角形是普通三角形!

方法工具:图形矩阵

导出控制流图和决定基本测试路径的过程均需要机械化,为了开发辅助基本路径测试的软件工具,称为图形矩阵(graph matrix)的数据结构很有用。

利用图形矩阵可以实现自动地确定一个基本路径集。一个图形矩阵是一个方阵,其行/列数控制流图中的结点数,每行和每列依次对应到一个被标识的结点,矩阵元素对应到结点间的连接(即边)。在图中,控制流图的每一个结点都用数字加以标识,每一条边都用字母加以标识。如果在控制流图中第i个结点到第j个结点有一个名为x的边相连接,则在对应的图形矩阵中第i行/第j列有一个非空的元素x。

对每个矩阵项加入连接权值(link weight),图矩阵就可以用于在测试中评估程序的控制结构,连接权值为控制流提供了另外的信息。最简单情况下,连接权值是1(存在连接)或0(不存在连接),但是,连接权值可以赋予更有趣的属性:执行连接(边)的概率。

穿越连接的处理时间。

穿越连接时所需的内存。

穿越连接时所需的资源。

根据上面的方法对例4画出图形矩阵如下:

连接权为“1”表示存在一个连接,在图中如果一行有两个或更多的元素“1”,则这行所代表的结点一定是一个判定结点,通过连接矩阵中有两个以上(包括两个)元素为“1”的个数,就可以得到确定该图圈复杂度的另一种算法。

相关文档
最新文档