实验3 路径覆盖测试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 路径覆盖测试
一、实验目的
熟悉Rational Purefy系列测试工具,理解和掌握路径覆盖测试,使用Rational Purecoverage进行路径覆盖测试。
二、实验任务
熟悉Rational Purefy测试环境,理解和掌握路径覆盖测试,使用Rational Purecoverage 进行路径覆盖测试。
三、实验要求
每人一台单独做,不得多人一起做。
四、实验内容
1)使用已经设计好的测试用例和事先准备的测试代码进行路径覆盖测试;
五、实验过程
将程序编译后使用Rational Purecoverage软件输入测试用例,进行测试:
1.自己的程序下一个日期(路径覆盖)
2.别人的程序下一个日期(路径覆盖)
环路复杂度:V(G)=7
基本路径:
(1) 1a-2-3a-4
(2) 1a-2-3a-3b-4
(3) 1a-2-3a-3b-5-7-8-12
(4) 1a-1b-3a-4
(5) 1a-1b-1c-3a-3b-4
(6) 1a-1b-3a-3b-5-6
(7) 1a-1b-3a-3b-5-7-8-9-10-11-12
2.别人的程序
程序流程图:
基本路径:
(1) 1,2,7,12,22
(2) 1,2,7,17,24
(3) 1,2,3,8,13,23
(4) 1,2,3,8,18,24
(5) 1,2,3,4,9,14,23
(6) 1,2,3,4,9,19,24
(7) 1,2,3,4,5,6,10,15,23
(8) 1,2,3,4,5,6,10,20,24
(9) 1,2,3,4,5,6,11,16,23
(10) 1,2,3,4,5,6,11,21,24
用例说明:
七、实验总结
(注意:实验总结不得少于200字)
本次实验主要是运用路径覆盖方法对自己写的程序和别人写的程序进行测试,路径覆盖也是白盒测试的一种方法,也是最为广泛的测试法,通过设计相应的测试用例,来覆盖程序中的所有可能的执行路径。基本步骤是根据对象的源代码得到控制流图,计算控制流图的环路复杂性,选择基本路径,然后为每条基本路径创建一个测试用例。
在对老师下发的别的同学的源程序进行测试时发现程序有bug,返回的值不是8个字节的字符串,不符合老师的要求,修改符合要求后再重新进行测试(下图)。
修改前:
修改后:
程序源代码:
1.自己的代码:
#include
#include
char * NextDate(int Y,int M,int D);
int main()
{
int Y,M,D;
char *p=(char *)malloc(sizeof(char)*8);
printf("请输入年:");
scanf("%d",&Y);
printf("请输入月:");
scanf("%d",&M);
printf("请输入日:");
scanf("%d",&D);
p=NextDate(Y,M,D);
printf("下一天的日期是:%s\n",p);
return 0;
}
char * NextDate(int Y,int M,int D)
{
char *q=(char *)malloc(sizeof(char)*8);
int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(Y%400==0||(Y%4==0&&Y%100!=0))
month[1]=29;
if(M>12||M<1)
return "错误:日期不合法!\n";
if(D>month[M-1])
return "错误:日期不合法!\n";
D++;
if(D>month[M-1])
{
D=1;M++;
if(M>12)
{
M=1;Y++;
}
}
sprintf(q,"%04d%02d%02d",Y,M,D);
return q;
}
2.别人的代码:(修改后)
#include
int main()
{int y,m,d;
scanf("%d%d%d",&y,&m,&d);
printf("data:%04d%02d%02d\n",y,m,d);
nextdata(y,m,d);}
int nextdata(int y,int m,int d)
{ if(m==12) //12
{if(1<=d&&d<=31)
{ if(d==31){ y=y+1;m=1;d=1;}
else {d=d+1;}}
else{ printf("error!\n");}}
else if(m==1||m==3||m==5||m==7||m==8||m==10) //1.3.5.7.8.10 {if(1<=d&&d<=31)
{ if(d==31){m=m+1;d=1;}
else {d=d+1;}}
else{ printf("error!\n");}}
else if(m==4||m==6||m==9||m==11) //4.6.9.11 {if(1<=d&&d<=30)
{ if(d==30){ m=m+1;d=1;}
else{d=d+1;}}
else{ printf("error!\n");}}
else if(m==2) //2
{if((y%4==0)&&(y%100!=0)||(y%400==0))
{ if(1<=d&&d<=29)
{if(d==29){m=3;d=1;}
else{d=d+1;}}
else {printf("error!\n");}}
else
{if(1<=d&&d<=28)
{ if(d==28){m=3;d=1; }else {d=d+1;}}
else{ printf("error!\n");}}
}printf("next:%04d%02d%02d\n",y,m,d);}