素数判断程序测试范例文档格式.docx

上传人:b****5 文档编号:21414040 上传时间:2023-01-30 格式:DOCX 页数:14 大小:108.91KB
下载 相关 举报
素数判断程序测试范例文档格式.docx_第1页
第1页 / 共14页
素数判断程序测试范例文档格式.docx_第2页
第2页 / 共14页
素数判断程序测试范例文档格式.docx_第3页
第3页 / 共14页
素数判断程序测试范例文档格式.docx_第4页
第4页 / 共14页
素数判断程序测试范例文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

素数判断程序测试范例文档格式.docx

《素数判断程序测试范例文档格式.docx》由会员分享,可在线阅读,更多相关《素数判断程序测试范例文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

素数判断程序测试范例文档格式.docx

=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中的变异分数,说明可以不再设计新的测试用例。

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

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1