????????是一种白盒测试方法,它在程序控制流图的基础上,通过分析控制构造的环行复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
??????? 要保证在测试中程序的每一个可执行语句至少执行一次
??????? 【这和语句覆盖区别在哪里呢?】
??????? 语句覆盖:基本思想:设计用例,使程序中的每个可执行语句至少执行一次。
??????? Who can tell me, why?
??????? 1)画出控制流图
????????首先要画出控制流图【是用于描述程序控制流的一种图示方法,程序控制流图中只有两种图形符号一一圆圈和箭头线】。
??????? 圆圈:称为流图的一个节点代表一条或多条无分支的语句或源程序语句。
??????? 箭头线:称为边或连接代表控制流。
??????? 由边和节点所锁定的范围称为区域。
??????? 几个结构的控制流图
??????? 程序的控制流图突出了控制流结构,是流程图的简化。
??????? 2)计算程序圈复杂度
????????圈复杂度是环行复杂度,是一种为程序逻辑复杂度提供定量尺度的软件度量。它可以提供程序基本集的独立路径数量和确保所有语句至少执行一次的测试用例数量上界。
????????计算圈复杂度的方法
????????V(G) = 总的区域数 = 封闭区域数 + 开放区域数
??????? V(G)= E(Edge) - N(Node)+2 =? (边数-节点数+2)
????????V(G)= P + 1 (判定节点数+1)
??????? 3)导出独立路径
????????独立路径指和其他的独立路径相比,至少引入一个新处理语句或一个新判断的程序通路,它必须至少包含一条在本次定义路径之前不曾用过的边。
????????程序的圈复杂度V(G)值正好等于该程序基本路径集合中的独立路径的条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上限。
????????4)准备测试用例
????????确保基本路径集中的每一条路径的执行即一条独立路径对应产生一个测试用例
importjava.util.Scanner;
public class Test {
public static void main(Stringl] args) {
int a,b,c,max,min;
Scanner input=new Scanner(System.in);
System.outprintln("请输入三个整数:");
a=input.nextInt0;
b=input.nextInt0;
c=input.nextInt0;
System.out.println(a+"\t"+b+"\t"+c);
if(a>b){
max=a;
min=b;
}
else{
max=b;
min=a;
}
if(max<c){
max=c;
}
else if(min>c){
min=c;
}
System.out.println("max="+max+"nmin="+min);
}
}
?????? 1、 画出控制流程图
??????? 再转化为控制流图
??????? 2、计算程序圈复杂度
????????V(G)=总的区域数= 4
????????V(G)= E-N+2 = (边数-节点数+2) = 10-8+2 = 4
????????V(G)= (定节点数+1) = P+1 = 3+1 = 4
??????? 3、导出独立路径
????????由于圈复杂度是 4 ,所以独立路径也是4
??????? A、1 - 2 - 4 - 5 - 8
??????? B、1 - 3 - 4 - 5 - 8
??????? C、1 - 3 - 4 - 6 - 7 - 8
????????D、1 - 3 - 4 - 6 - 8
??????? 4、准备测试用例
??????? 终于又把自己强迫了一下!(我有点很困了)