素数判断程序测试范例.docx
- 文档编号:8277760
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:14
- 大小:108.91KB
素数判断程序测试范例.docx
《素数判断程序测试范例.docx》由会员分享,可在线阅读,更多相关《素数判断程序测试范例.docx(14页珍藏版)》请在冰豆网上搜索。
素数判断程序测试范例
问题描述:
键盘输入m和n(10 相应代码: #include #include usingnamespacestd; intmain() { intm,n,i; staticintk=0; cout<<"输入m,m(其中10 cin>>m>>n; while(m<=10||m>=n||n>2000) { cout<<"输入数据有误,请再次输入: "< cout<<"输入m,m(其中10 cin>>m>>n; } for(i=m;i<=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) cout< } else continue; } } cout< return0; } 一.控制流测试 1、控制流图如下: 2、根据以上控制流图: 因为控制流的1-2-3-2部分为用户输入的m,n的重复赋值过程,与输入数据密切相关且每次取值不同,关系到控制流测试,所以将此独立出来: 以为节点“2”的复合谓词为或的关系,全为false时只有一种情况,而为true时有7种情况,对“2”的复合谓词(m<=10||m>=n||n>2000)为真假时其表1如下: 设A: m<=10;B: m>=n;C: n>2000 情况 A B C 节点2 1 T T T T 2 T T F T 3 T F F T 4 T F T T 5 F T T T 6 F T F T 7 F F T T 8 F F F F 但是对于节点“2”的情况,并非所有可能都会取到,因为当A为真时,就不会执行B,依此,生成下表2: 情况 A B C 节点2 1 T - - T 2 F T - T 3 F F T T 4 F F F F 根据表2,得出此部分的取值及路径为: M N 路径 备注 8 3 1-2(T)-3-2--- A=T,B=T,C=F 12 3000 1-2(T)-3-2--- A=F,B=F,C=T 11 13 1-2(F)-4--- A=F,B=F,C=F 12 3 1-2(T)-3-2 Z=F,B=T.C=F 3、当节点“2”取F时,对整体取路径达到谓词覆盖标准有: M N 路径 11 13 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) 1 {m,n,i,k} {} 2 {} {} 3 {m,n} {} 4 {i} {m} 5 {} {} 6 {x} {i} 7 {} {} 8 {} {} 9 {j} {} 10 {} {} 11 {} {} 12 {i} {i} 13 {} {} 14 {} {} 15 {k} {k} 16 {} {} 17 {} {} 18 {} {} 19 {j} {j} 3、找出边的谓词和p-use集合 边(i,j) Predicate(i,j) p-use(i) (1,2) true {} (2,3) {m<=10||m>=n||n>2000} {m,n} (3,2) true {} (2,4) ~{m<=10||m>=n||n>2000} {m,n} (4,5) true {} (5,6) (i {i,n} (5,7) ~(i {i,n} (7,8) true {} (6,9) true {} (9,10) true {} (10,11) (j<=x) {i,j} (10,12) ~(j<=x) {i.j} (12,5) true {} (11,14) ~(i%j==0) {j,x} (11,13) (i%j==0) {j,x} (13,12) true {} (14,16) ~(j==x) {j,x} (14,15) (j==x) {j,x} (15,17) true {} (16,19) true {} (17,19) ~(k%2)==0 {k} (17,18) (k%2)==0 {k} (19,10) true {} 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-11-14-15-17-18-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-11-14-15-17-18-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: 1-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-18-19-10-12-5-7-8; 综上: 综上,变量k,i,j均包含的路径,即最后确定的数据流路径只有两条: 其中的循环次数根据需要而定。 路径1: 1-2-4-5-6-9-10-11-14-15-17-18-19-10-12-5-7-8; 路径2: 1-2-3-2-4-5-6-9-10-11-14-15-17-18-19-10-12-5-7-8; 其对应的控制流路径为(其中的路径编号均为控制流图编号依此生成谓词解释): 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为例): 节点 节点描述 解释描述 1 初始化m,n,i,k=0; 2(F) M<=10||m>=n||n>2000;? 10 4 i=m; i=m; 5(T) i i 6 Intx=(int)sqrt(double(i)) Intx=(int)sqrt(double(m)) 7 Intj=2; J=2 8(T) J<=x? J<=(int)sqrt(double(m)) 9(F) I%j==0? M%2! =0 10(T) J==x? 2==(int)sqrt(double(m)) 12 Cout< Cout< 14(T) k%2==0? 1%2! =0 15 Cout< 16 J++ J=3 8(F) J<=x? J>(int)sqrt(double(m)) 17 I++ I=m+1 5(F) I I>=n 18 Cout< 19 Return0; 6、推导出路径谓词表达式为: 1 10 2 i 3 J<=(int)sqrt(double(m)).....true 4 M%2! =0......false 5 2==(int)sqrt(double(m))......true 6 1%2! =0.....true 7 J>(int)sqrt(double(m))......false 8 I>=n 根据路径谓词表达式,第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<=10||m>=n||n>2000,当次复合谓词取false时,得到路径的正确输入域,即: 10 1、依次,画出其大致域为: (虚线,开放区域;实线,封闭区域) N<=2000 M>10 m<=2000 N>10 M 2、根据给出的域,看到和输入参数有关的边界线共有三条: N<=2000; M>10; M 3、考虑到以下几种错误: ①、封闭不等式边界: A、边界移动导致域减少 B、边界移动导致域增加 C、边界倾斜 D、封闭错误 ②、开放不等式边界: A、边界移动导致域减少 B、边界移动导致域增加 C、边界倾斜 D、封闭错误 ③、等式边界 考虑到以上错误,针对域的边界,按照ON-OFF-ON的次序依次选取3个点A,B,C如下: 边界 选取ON-OFF-ON点 N<=2000 A(11,2000); B(10,2000); C(2000,2000); M>10 A(11,11); B(1000,1001); C(1999,1998) M A(10,11); B(11,12); C(9,11) 4.对控制流测试和数据流测试的变异分析 1、数据流和测试流中的用例均能正确执行程序,没有测试失败案例。 2、对程序生成变异体如下表: 变异体序号 原语句 变异体 测试用例 是否被杀死 1 For(i=m,i<=n,i++) For(i=m,i 11,13 T(结果不同) 2 Intk=0; Intk=1; 11,13 T(结果不同) 3 Intj=2; Intj=1; 11,13 T(结果不同) 4 For(j=2;j<=x;j++) For(j=2;j 11,13 T(结果不同) 5 If(i%j==0) If(i%j>=0) 11,13 T(结果不同) 6 Elseif(j==x) Elseif(j>=x) 11,13 T(结果不同) 7 If(k%2==0) If(k%3==0) 20,40 T(结果不同) 8 while(m<=10||m>=n||n>2000) while(m<=10||m>n||n>2000) 11,11 T(结果不同) 9 while(m<=10||m>=n||n>2000) while(m<10||m>=n||n>2000) 10,13 T(结果不同) 10 while(m<=10||m>=n||n>2000) while(m<=10||m>=n||n>=2000) 10,2000 T(结果不同) 以上变异,根据控制流和数据流测试中的测试用例进行测试,均会发现与原结果不同,所以也就是说变异是不正确的,并且他被测试用例杀死。 3、计算测试用例的变异分数: 变异分数=100*(10/(10-0))=100 4、根据3中的变异分数,说明可以不再设计新的测试用例。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 素数 判断 程序 测试 范例
![提示](https://static.bdocx.com/images/bang_tan.gif)