素数判断程序测试范例文档格式.docx
《素数判断程序测试范例文档格式.docx》由会员分享,可在线阅读,更多相关《素数判断程序测试范例文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
=n;
i++)
intx=(int)sqrt((double)i);
for(intj=2;
j<
=x;
j++)
{
if(i%j==0)
{
break;
}
elseif(j==x)
cout<
;
k++;
if(k%2==0)
}
else
continue;
}
return0;
}
一.控制流测试
1、控制流图如下:
2、根据以上控制流图:
因为控制流的1-2-3-2部分为用户输入的m,n的重复赋值过程,与输入数据密切相关且每次取值不同,关系到控制流测试,所以将此独立出来:
以为节点“2”的复合谓词为或的关系,全为false时只有一种情况,而为true时有7种情况,对“2”的复合谓词(m<
2000)为真假时其表1如下:
设A:
=10;
B:
C:
n>
2000
情况
A
B
C
节点2
1
T
2
F
3
4
5
6
7
8
但是对于节点“2”的情况,并非所有可能都会取到,因为当A为真时,就不会执行B,依此,生成下表2:
-
根据表2,得出此部分的取值及路径为:
M
N
路径
备注
1-2(T)-3-2---
A=T,B=T,C=F
12
3000
A=F,B=F,C=T
11
13
1-2(F)-4---
A=F,B=F,C=F
1-2(T)-3-2
Z=F,B=T.C=F
3、当节点“2”取F时,对整体取路径达到谓词覆盖标准有:
1-2(F)-4-5(T)-6-7-8(T)-9(F)-10(F)-13-16-8(T)-9(F)-10(T)-12-14(F)-16-8(F)-17-5(T)-6-7-8(T)-9(T)-11-17-5(T)-6-7-8(T)-9(F)-10(F)-13-16-8(T)-9(F)-10(T)-12-14(T)-15-16-8(F)-17-5(F)-18-19
以上路径可以看出,对于单一谓词---节点5,8,9,10,14均取到T,F,加之节点2之前的取值,所有谓词均达到覆盖标准,所以此控制流测试达到谓词覆盖标准。
对于其他区间内的m,n,路径内循环次数增加,但内部循环路径相同。
二.数据流测试
1、数据流图:
2、根据数据流图,得出节点的def()和c-use()集合:
节点
Ded(i)
C-use(i)
{m,n,i,k}
{}
{m,n}
{i}
{m}
{x}
9
{j}
10
14
15
{k}
16
17
18
19
3、找出边的谓词和p-use集合
边(i,j)
Predicate(i,j)
p-use(i)
(1,2)
true
(2,3)
{m<
2000}
(3,2)
(2,4)
~{m<
(4,5)
(5,6)
(i<
n)
{i,n}
(5,7)
~(i<
(7,8)
(6,9)
(9,10)
(10,11)
(j<
=x)
{i,j}
(10,12)
~(j<
{i.j}
(12,5)
(11,14)
~(i%j==0)
{j,x}
(11,13)
(i%j==0)
(13,12)
(14,16)
~(j==x)
(14,15)
(j==x)
(15,17)
(16,19)
(17,19)
~(k%2)==0
(17,18)
(k%2)==0
(19,10)
4.根据代码,可知共有变量i,j,k,不列举其all-c-use和all-p-use.直接写出其all-uses,其循环次数不一定只有一次,因为循环时内部路径相同,都写出来路径太长太繁琐,所以以一次为基准,循环不定,可以是任意次。
对于变量i:
节点1,4,12有其定义,节点6,12有其c-use,边(5,6),(5,7),(11,13),(11,14)有其p-use,所以包含其all-p-use和其all-c-use的即为其all-uses:
1-2-4-5-6-9-10-12-5-7-8;
1-2-4-5-6-9-10-11-13-12-5-7-8;
1-2-4-5-6-9-10-11-14-15-17-19-10-12-5-7-8;
1-2-4-5-6-9-10-11-14-15-17-18-19-10-12-5-7-8;
1-2-4-5-6-9-10-11-14-15-17-16-19-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-11-13-12-5-7-8;
1-2-3-2-4-5-6-9-10-11-14-15-17-19-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-11-14-15-17-18-19-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-11-14-15-17-16-19-10-12-5-7-8;
对于变量j:
节点9,19有其定义,节点19有其c-use,边(10,11),(10,12),(11,13),(11,14)(14,16),(14,15)有其p-use,所以包含其all-p-use和其all-c-use的即为其all-uses:
1-2-4-5-6-9-10-11-14-16-19-10-12-5-7-8;
1-2-4-5-6-9-10-00-14-15-17-19-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-11-14-16-19-10-12-5-7-8;
1-2-3-2-4-5-6-9-10-00-14-15-17-19-10-12-5-7-8;
对于变量k:
节点1,15有其定义,节点15有其c-use,边(17,18),(17,19)有其p-use,所以包含其all-p-use和其all-c-use的即为其all-uses:
综上:
综上,变量k,i,j均包含的路径,即最后确定的数据流路径只有两条:
其中的循环次数根据需要而定。
路径1:
路径2:
其对应的控制流路径为(其中的路径编号均为控制流图编号依此生成谓词解释):
1-2(F)-4-5(T)-6-7-8(T)-9(F)-10(T)-12-14(T)-15-16-8(F)-17-5(F)-18-19;
1-2(T)-3-2(F)-4-5(T)-6-7-8(T)-9(F)-10(T)-12-14(T)-15-16-8(F)-17-5(F)-18-19
5、路径谓词解释为(以路径1为例):
节点描述
解释描述
初始化m,n,i,k=0;
2(F)
M<
2000;
?
10<
=2000;
i=m;
5(T)
n?
n
Intx=(int)sqrt(double(i))
Intx=(int)sqrt(double(m))
Intj=2;
J=2
8(T)
J<
=x?
=(int)sqrt(double(m))
9(F)
I%j==0?
M%2!
=0
10(T)
J==x?
2==(int)sqrt(double(m))
Cout<
””<
k++
end;
k=1;
14(T)
k%2==0?
1%2!
J++
J=3
8(F)
J>
(int)sqrt(double(m))
I++
I=m+1
5(F)
I<
I>
=n
Return0;
6、推导出路径谓词表达式为:
.........False
......True
=(int)sqrt(double(m)).....true
=0......false
2==(int)sqrt(double(m))......true
=0.....true
(int)sqrt(double(m))......false
根据路径谓词表达式,第6行可知,k%2不能恒等于0,而k又是根据输入的数据中素数的个数来累加起来的数据,只有当m----n之间有大于两个素数时才会有此条件,所以判定,目前路径不合理,应至少有两次循环才能使上述谓词表达式成立。
7、求解表达式得到测试输入数据:
对于路径1:
根据第6步的推理,可知m----n之间有大于两个素数必须成立,所以选择输入数据为:
M=11,n=13
M=11,n=1000;
M=20,n=40;
M=100,n=1800;
........
得到可测试数据较多,不一一列举,只要在范围内均可。
对于路径2:
根据推理,可知第一次输入,m,n的值不符合要求,1次或多次循环之后才能达到要求,达到要求后m,n之间有大于两个素数必须成立,所以选择输入数据为:
M=2,n=1(不成立)--------------------(接着输入)m=12,n=33
M=13,n=3000(不成立)--------------------(接着输入)m=50,n=66
M=8,n=15(不成立)--------------------(接着输入)m=66,n=99
.........
3.域测试
本题的输入为m,n,所以域主要是针对m,n的域,根据复合谓词m<
2000,当次复合谓词取false时,得到路径的正确输入域,即:
1、依次,画出其大致域为:
(虚线,开放区域;
实线,封闭区域)
N<
=2000
M>
N>
2、根据给出的域,看到和输入参数有关的边界线共有三条:
N<
M>
10;
M<
3、考虑到以下几种错误:
①、封闭不等式边界:
A、边界移动导致域减少
B、边界移动导致域增加
C、边界倾斜
D、封闭错误
②、开放不等式边界:
③、等式边界
考虑到以上错误,针对域的边界,按照ON-OFF-ON的次序依次选取3个点A,B,C如下:
边界
选取ON-OFF-ON点
A(11,2000);
B(10,2000);
C(2000,2000);
A(11,11);
B(1000,1001);
C(1999,1998)
A(10,11);
B(11,12);
C(9,11)
4.对控制流测试和数据流测试的变异分析
1、数据流和测试流中的用例均能正确执行程序,没有测试失败案例。
2、对程序生成变异体如下表:
变异体序号
原语句
变异体
测试用例
是否被杀死
For(i=m,i<
=n,i++)
n,i++)
11,13
T(结果不同)
Intk=0;
Intk=1;
Intj=1;
For(j=2;
x;
If(i%j==0)
If(i%j>
=0)
Elseif(j==x)
Elseif(j>
If(k%2==0)
If(k%3==0)
20,40
while(m<
n||n>
11,11
10||m>
10,13
=2000)
10,2000
以上变异,根据控制流和数据流测试中的测试用例进行测试,均会发现与原结果不同,所以也就是说变异是不正确的,并且他被测试用例杀死。
3、计算测试用例的变异分数:
变异分数=100*(10/(10-0))=100
4、根据3中的变异分数,说明可以不再设计新的测试用例。