




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件测试实训报告学 院 计算机学院 专 业 软件工程 班 级 2009级3班 学 号 姓 名 王敬哲 指导教师 刘敬勇 (2013年 1月6日)题目:已知公元1年1月1日是星期一,编程实现一个程序,使得只要输入年月日,程序就能自动回答当天是星期几。编程语言不限,要求分别采用黑盒测试(等价类划分、边界值分析)方法和白盒测试(条件组合覆盖)方法对程序进行测试,给出测试用例。编程实现:#include #include int k;/全局变量char data15;void disp(FILE *fq,int t,char *data);/* 检验该年是否为闰年 */int Leap(int year)if(year%4=0)&(year%100!=0)|(year%400=0)return 1;elsereturn 0;int Day(int y,int m,int d)/-1年份不合理,-2月份不合理,-3日期不合理 int day_tab12=31,28,31,30,31,30,31,31,30,31,30,31;int k = Leap(y);if(y9999) return -1;/添加每年日期上限判定-测试测试添加else if(m12|mday_tabm-1+k) return -3;else if(dday_tabm-1&m!=2)|d=0) return -3;int i = 0,n=1; /* 计算该年份(如2010年)1月1日是星期几 */for(i=1;iy;i+)if(Leap(i)n = (n+366)%7;elsen = (n+365)%7;/for/* 计算该月份1日是星期几 */for(i=1;im;i+)switch(i)case 2:if(k)n = (n+29)%7;elsen = (n+28)%7;break;case 4:case 6:case 9:case 11:n = (n+30)%7;break;default: n = (n+31)%7; /swtich(i)/for/* 最后,计算这一天是星期几 */n = (n+d-1)%7;return n;/Dayvoid data_r_w(FILE *fp,FILE *fq,char *data)int i=0,j = 0,t = 0;/k为用例数,t为年月日判定int count = 0;/计算位数使用char ch;int year,month,day;/无意思初始化k = 1;while(ch=fgetc(fp)!=EOF) year = 0; month = 0; day = 0; i = 0; j = 0; t = 0; count = 0;/读取一项数据数据项:年份1-4位,月份、日份则为1-2位。for(i = 0;(ch!=n)&(ch!=r)&(ch!=EOF)&i15;i+)if(ch9)&i=14&ch!=/)/出现非数字数据while(ch!=n)&(ch!=r)&(ch!=EOF)datai+ = ch;ch = fgetc(fp);t = -5;break;/ifelse if(ch=/&t2)/提取年月/提取年月if(t=0)while(j4-t)?j:count;t+;datai = ch;ch = fgetc(fp);/if_elseif_elseelse/其余情况直接存放datai = ch;/正常读取数据ch=fgetc(fp);if(ch =n)|(ch=r)|(ch=EOF)|(i=14)&(t=2)/提取日份for(j = 1,day = datai-48;datai-j!=/;j+)day = day+(datai-j-48)*10;count = (j2)?j:count;t=0;/for读取一项数据datai = 0;/字符串数组结束符if(t=-5)disp(fq,t,data);/else if(count0)t = -4;disp(fq,t,data);elset = Day(year,month,day);/计算日期为一个星期第几天disp(fq,t,data);/while/data_r_wvoid disp(FILE *fq,int t,char data)switch(t)case 0:fprintf(fq,用例%d、%s是星期日n,k,data);printf(用例%d、%s是星期日n,k+,data);break;case 1:fprintf(fq,用例%d、%s是星期一n,k,data);printf(用例%d、%s是星期一n,k+,data);break;case 2:fprintf(fq,用例%d、%s是星期二n,k,data);printf(用例%d、%s是星期二n,k+,data);break;case 3:fprintf(fq,用例%d、%s是星期三n,k,data);printf(用例%d、%s是星期三n,k+,data);break;case 4:fprintf(fq,用例%d、%s是星期四n,k,data);printf(用例%d、%s是星期四n,k+,data);break;case 5:fprintf(fq,用例%d、%s是星期五n,k,data);printf(用例%d、%s是星期五n,k+,data);break;case 6:fprintf(fq,用例%d、%s是星期六n,k,data);printf(用例%d、%s是星期六n,k+,data);break;case -1:fprintf(fq,用例%d、出错:(%s)年份不在合理范围n,k,data);printf(用例%d、出错:(%s)年份不在合理范围n,k+,data);break;case -2:fprintf(fq,用例%d、出错:(%s)月份不在合理范围n,k,data);printf(用例%d、出错:(%s)月份不在合理范围n,k+,data);break;case -3:fprintf(fq,用例%d、出错:(%s)日份不在合理范围n,k,data);printf(用例%d、出错:(%s)日份不在合理范围n,k+,data);break;case -4:fprintf(fq,用例%d、出错:(%s)年月日位数超出范围n,k,data);printf(用例%d、出错:(%s)年月日位数超出范围n,k+,data);break;case -5:fprintf(fq,用例%d、出错:(%s)含有非数字字符n,k,data);printf(用例%d、出错:(%s)含有非数字字符n,k+,data);break;/switch(t) /voidint main()void data_r_w(FILE *fp,FILE *f1,char *data);/数据读写模块,第一步处理数据FILE *fp,*fq;/*文件格式要求:1、行末结束符为回车符。2、最末行不用结束符,以默认结束符结束。 3、数据类型为X/XX/XX(年/月/日)*/if(fp=fopen(MultipleCondition.txt,r)=NULL)printf(cannot open the filen);return 0;if(fq=fopen(test.txt,w+)=NULL)printf(cannot open the filen);return 0;data_r_w(fp,fq,data);/调用数据读写模块,先处理非法数据fclose(fp);fclose(fq);return 0;/main()测试分为三大模块,黑盒等价类测试、黑盒边界类测试、白盒条件组合测试。黑盒测试主要测试功能是否能都实现,白盒测试主要是检测内部逻辑是否存在错误。一、等价划分法输入及外部条件有效等价类等价类编号无效等价类等价类编号日期类型3-8位数字字符,年月日之间以/符隔开1含有非/的非数字字符8缺少/9小于3位10大于8位11年1-4位数字字符,值范围1-99992数值大于999912数值小于113小于1位14大于4位15月份1-2位数字字符,值范围1123数值小于116数值大于1217小于1位18大于2位19非闰年2月1-2位数字字符,值范围1284数值小于120数值大于2821小于1位22大于2位23闰年2月1-2位数字字符,值范围1295数值小于124数值大于2925小于1位26大于2位271、3、5、7、8、10、12月1-2位数字字符,值范围1316数值小于128数值大于3129小于1位30大于2位314、6、9、11月1-2位数字字符,值范围1307数值小于132数值大于3033小于1位34大于2位35用例表:用例编号数据输入预期输出实际输出覆盖等价类12013/2/1星期五用例1、2013/2/1是星期五1、2、3、422012/2/29星期三用例2、2012/2/29是星期三1、2、3、532013/03/01星期五用例3、2013/03/01是星期五1、2、3、642014/04/1星期二用例4、2014/04/1是星期二1、2、3、752013/A/B含有非数字字符用例5、出错:数据项(2013/A/B)月份不在合理范围8620130101年份不在合理范围用例6、出错:(20130101)年份不在合理范围971/2/日份不在合理范围用例7、出错:(1/2/)日份不在合理范围1082003/001/01年月日位数超出范围用例8、出错:(2003/001/01)年月日位数超出范围11920000/01/01年月日位数超出范围用例9、出错:(20000/01/01)年月日位数超出范围12100/02/03年份不在合理范围用例10、出错:(0/02/03)年份不在合理范围13110/02/03年份不在合理范围用例11、出错:(0/02/03)年份不在合理范围141202013/01/01年月日位数超出范围用例12、出错:(02013/01/01)年月日位数超出范围15132013/0/01月份不在合理范围用例13、出错:(2013/0/01)月份不在合理范围16142013/13/01月份不在合理范围用例14、出错:(2013/13/01)月份不在合理范围17152013/01月份不在合理范围用例15、出错:(2013/01)月份不在合理范围18162013/002/01年月日位数超出范围用例16、出错:(2013/002/01)年月日位数超出范围19172013/02/00日份不在合理范围用例17、出错:(2013/02/00)日份不在合理范围20182013/02/29日份不在合理范围用例18、出错:(2013/02/29)日份不在合理范围21192013/02/日份不在合理范围用例19、出错:(2013/02/)日份不在合理范围22202013/02/001年月日位数超出范围用例20、出错:(2013/02/001)年月日位数超出范围23212012/02/00日份不在合理范围用例21、出错:(2012/02/00)日份不在合理范围24222012/02/30日份不在合理范围用例22、出错:(2012/02/30)日份不在合理范围25232012/02/日份不在合理范围用例23、出错:(2012/02/)日份不在合理范围26242012/02/001年月日位数超出范围用例24、出错:(2012/02/001)年月日位数超出范围27252013/01/00日份不在合理范围用例25、出错:(2013/01/00)日份不在合理范围28262013/01/32日份不在合理范围用例26、出错:(2013/01/32)日份不在合理范围29272013/01/日份不在合理范围用例27、出错:(2013/01/)日份不在合理范围30282013/01/001年月日位数超出范围用例28、出错:(2013/01/001)年月日位数超出范围31292013/04/00日份不在合理范围用例29、出错:(2013/04/00)日份不在合理范围32302013/04/31日份不在合理范围用例30、出错:(2013/04/31)日份不在合理范围33312013/08/日份不在合理范围用例31、出错:(2013/08/)日份不在合理范围34322013/11/030年月日位数超出范围用例32、出错:(2013/11/030)年月日位数超出范围35附测试截图:二、边界值分析法选定年的范围是1,9999,月的范围是1,12,日的范围1,31(输入格式仍为上面X/X/X) 测试用例编号输入数据预计输出实际输出年月日1000年份不在合理范围用例1、出错:(0/0/0)年份不在合理范围2111星期一用例2、1/1/1是星期一32232日份不在合理范围用例3、出错:(2/2/32)日份不在合理范围499981128星期六用例4、9998/11/28是星期六599991229星期三用例5、9999/12/29是星期三610000130年月日位数超出范围用例6、出错:(10000/13/0)年月日位数超出范围7011年份不在合理范围用例7、出错:(0/1/1)年份不在合理范围8122星期五用例8、1/2/2是星期五921130星期六用例9、2/11/30是星期六1099981231星期四用例10、9998/12/31是星期四1199991332月份不在合理范围用例11、出错:(9999/13/32)月份不在合理范围1210000028年月日位数超出范围用例12、出错:(10000/0/28)年月日位数超出范围130129年份不在合理范围用例13、出错:(0/1/29)年份不在合理范围14120日份不在合理范围用例14、出错:(1/2/0)日份不在合理范围152111星期五用例15、2/11/1是星期五169998122星期三用例16、9998/12/2是星期三1799991330月份不在合理范围用例17、出错:(9999/13/30)月份不在合理范围1810000031年月日位数超出范围用例18、出错:(10000/0/31)年月日位数超出范围190132年份不在合理范围用例19、出错:(0/1/32)年份不在合理范围201228星期三用例20、1/2/28是星期三2121129星期五用例21、2/11/29是星期五229998120日份不在合理范围用例22、出错:(9998/12/0)日份不在合理范围239999131月份不在合理范围用例23、出错:(9999/13/1)月份不在合理范围241000002年月日位数超出范围用例24、出错:(10000/0/2)年月日位数超出范围250130年份不在合理范围用例25、出错:(0/1/30)年份不在合理范围261231日份不在合理范围用例26、出错:(1/2/31)日份不在合理范围2721132日份不在合理范围用例27、出错:(2/11/32)日份不在合理范围2899981228星期一用例28、9998/12/28是星期一2999991329月份不在合理范围用例29、出错:(9999/13/29)月份不在合理范围301000000年月日位数超出范围用例30、出错:(10000/0/0)年月日位数超出范围31011年份不在合理范围用例31、出错:(0/1/1)年份不在合理范围32122星期五用例32、1/2/2是星期五3321130星期六用例33、2/11/30是星期六3499981231星期四用例34、9998/12/31是星期四3599991332月份不在合理范围用例35、出错:(9999/13/32)月份不在合理范围3610000028年月日位数超出范围用例36、出错:(10000/0/28)年月日位数超出范围370129年份不在合理范围用例37、出错:(0/1/29)年份不在合理范围38120日份不在合理范围用例38、出错:(1/2/0)日份不在合理范围392112星期六用例39、2/11/2是星期六4099981230星期三用例40、9998/12/30是星期三4199991331月份不在合理范围用例41、出错:(9999/13/31)月份不在合理范围4210000032年月日位数超出范围用例42、出错:(10000/0/32)年月日位数超出范围430128年份不在合理范围用例43、出错:(0/1/28)年份不在合理范围441229日份不在合理范围用例44、出错:(1/2/29)日份不在合理范围452111星期五用例45、2/11/1是星期五4699981230星期三用例46、9998/12/30是星期三4799991331月份不在合理范围用例47、出错:(9999/13/31)月份不在合理范围481000002年月日位数超出范围用例48、出错:(10000/0/2)年月日位数超出范围符边界分析法截图:三、逻辑覆盖法1)、判断闰年功能模块int Leap(int year)if(year%4=0)&(year%100!=0)|(year%400=0)return 1;elsereturn 0;流程图:逻辑覆盖方法:条件组合(剔除不可能用例):1.year%4=0,year%100!=0,year%400!=0;2.year%4=0,year%100=0,year%400=0;3.year%4=0,year%100=0,year%400!=0;4.year%4!=0,year%100!=0,year%400!=0;用例编号输入数据:年预期输出实际输出测试条件12012111220001123190000341999004驱动模块:void main()int year4=2012,2000,1900,1991;int i = 0,j;for(i = 0;i4;i+)if(j=Leap(yeari)printf(%d is a leap year.j = %dn,yeari,j);else printf(%d is not a leap year.j = %dn,yeari,j);截图:2) 、计算日期功能模块int Day(int y,int m,int d) /-1年份不合理,-2月份不合理,-3日期不合理 int day_tab12=31,28,31,30,31,30,31,31,30,31,30,31;int k = Leap(y);if(y9999) return -1;/添加每年日期上限判定-测试测试添加else if(m12|mday_tabm-1+k) return -3;else if(dday_tabm-1&m!=2)|d=0) return -3;int i = 0,n=1; /* 计算该年份(如2010年)1月1日是星期几 */for(i=1;iy;i+)if(Leap(i)n = (n+366)%7;elsen = (n+365)%7;/for/* 计算该月份1日是星期几 */for(i=1;im;i+)switch(i)case 2:if(k)n = (n+29)%7;elsen = (n+28)%7;break;case 4:case 6:case 9:case 11:n = (n+30)%7;break;default: n = (n+31)%7; /swtich(i)/for/* 最后,计算这一天是星期几 */n = (n+d-1)%7;return n;/Day流程图:逻辑覆盖方法:判定分析:a. 判定y9999:1. y99993. 0y12|m125. m=06. 0m=12c. 判定dday_tabm-1+k:7. d09. m=210. m!=211. dday_tabm-1+k;12. d=day_tabm-1+k;d. 判定k:13. k=114. k=0e. 判定i=y16. iyf. 判定i=m18. img. 判定switch(i):19. i=220. i=4/6/9/1121. i=default用例表:用例编号判定区输入数据:预期输出预期输出测试条件abcdefg年y月m日d1111100default000-1-11,5,7,13,15,17,212110111default10000131-1-12,4,8,10,13,16,183001011default1900229-3-33,6,9,11400001121999311112,14,1950001114/6/9/11201212300020驱动模块:int main()int array15 = 0,0,0,10000,13,1,1900,2,29,1999,3,1,2012,12,30; int i,k = 1;int temp3;for(i = 0;i5;i+)int j;for(j = 0;j3;j+)tempj = arrayi*3+j;j = Day(temp0,temp1,temp2);printf(用例%d(%dt%dt%dt)返回值:%dn,k+,temp0,temp1,temp2,j);return 0;截图:4)、数据读写功能模块void data_r_w(FILE *fp,FILE *fq,char *data)int i=0,j = 0,t = 0;/k为用例数,t为年月日判定int count = 0;/计算位数使用char ch;int year,month,day;/无意思初始化k = 1;while(ch=fgetc(fp)!=EOF) year = 0; month = 0; day = 0; i = 0; j = 0; t = 0; count = 0;/读取一项数据数据项:年份1-4位,月份、日份则为1-2位。for(i = 0;(ch!=n)&(ch!=r)&(ch!=EOF)&i15;i+)if(ch9)&i=14&ch!=/)/出现非数字数据while(ch!=n)&(ch!=r)&(ch!=EOF)datai+ = ch;ch = fgetc(fp);t = -5;break;/ifelse if(ch=/&t2)/提取年月/提取年月if(t=0)while(j4-t)?j:count;t+;datai = ch;ch = fgetc(fp);/if_elseif_elseelse/其余情况直接存放datai = ch;/正常读取数据ch=fgetc(fp); if(ch=n)|(ch=r)|(ch=EOF)|(i=14)&(t=2)/提取日份for(j = 1,day = datai-48;datai-j!=/;j+)day = day+(datai-j-48)*10;count = (j2)?j:count;t=0;/for读取一项数据datai = 0;/字符串数组结束符if(t=-5)disp(fq,t,data);/else if(count0)t = -4;disp(fq,t,data);elset = Day(year,month,day);/计算日期为一个星期第几天disp(fq,t,data);/while/data_r_w流程图:判定分析:a. 判定(ch=fgetc(fp)!=EOF1. ch=EOF2. ch!=EOFb. 判定(ch!=n)&(ch!=r)&(ch!=EOF)&i153. ch=n4. ch!=n5. ch=r6. ch!=EOF7. ch=EOF8. i=15c. 判定(ch9)&i=14&ch!=/10. ch=012. ch914. i=1415. i1416. ch=/17. ch!=/d. 判定(ch!=n)&(ch!=r)&(ch!=EOF)/每行结束时已自动覆盖该组,只需进入此用例判定区即可18. ch=n19. ch!=n20. ch=r21. ch!=EOF22. ch=EOFe. 判定ch=/&t223. ch=/24. ch!=/25. t=2f. 判定t=027. t=028. t!=0g. 判定ji29. j=ih. 判定datai-j!=/31. datai-j=/32. datai-j!=/i. 判定t=-533. t=-534. t!=-5j. 判定count035. count036. count=0用例表:用例abcdefghij输入数据预期输出实际输出覆盖条件110换行符年份不在合理范围用例1、出错:()年份不在合理范围2,3210回车符年份不在合理范围用例2、出错:()年份不在合理范围4,5,6,83102013/01/0712345年月日位数超出范围用例3、出错:(2013/01/0712345)年月日位数超出范围9,14,16,174110A/B/C含有非数字字符用例4、出错:(A/B/C)含有非数字字符11,13,1751110,11*1/1/1含有非数字字符(*1/1/1)含有非数字字符10,12,18,19,20,21,336110,10,10,10,1002013/01/07星期一用例6、2013/01/07是星期一15,23,24,25,26,27,28,29,30,31,32,3671120013/01/01年月日位数超出范围用例7、出错:(20013/01/01)年月日位数超出范围3580空文件无输出无输出1,7驱动模块:采用整个程序的其余部分共同成为庄模块,主函数为驱动模块,相当于集成测试,不过采用的是白盒测试模式。截图:(1)、(2) 、5)、显示功能模块:void disp(FILE *fq,int t,char data)switch(t)case 0:fprintf(fq,用例%d、%s是星期日n,k,data);printf(用例%d、%s是星期日n,k+,data);break;case 1:fprintf(fq,用例%d、%s是星期一n,k,data);printf(用例%d、%s是星期一n,k+,data);break;case 2:fprintf(fq,用例%d、%s是星期二n,k,data);printf(用例%d、%s是星期二n,k+,data);break;case 3:fprintf(fq,用例%d、%s是星期三n,k,data);printf(用例%d、%s是星期三n,k+,data);break;case 4:fprintf(fq,用例%d、%s是星期四n,k,data);printf(用例%d、%s是星期四n,k+,data);break;case 5:fprintf(fq,用例%d、%s是星期五n,k,data);printf(用例%d、%s是星期五n,k+,data);break;case 6:fprintf(fq,用例%d、%s是星期六n,k,data);printf(用例%d、%s是星期六n,k+,data);break;case -1:fprintf(fq,用例%d、出错:(%s)年份不在合理范围n,k,data);printf(用例%d、出错:(%
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年项目管理实战高级面试模拟题及应对策略
- 2025年安全生产知识题库及答案解析
- 2025年职业安全卫生培训选择题及答案
- 2025年旅游管理人员岗位能力测评试题及答案解析
- 2025年竞争情报分析师职业能力水平考核试题及答案解析
- 2025年计算机程序开发工程师专业技术考核试卷及答案解析
- 2025年消防安全考核重点实战题及答案
- 课件中单词处理
- 2025年国际会展服务师资格考试试题及答案解析
- 2025年广告设计师专业技能考核试题及答案解析
- 港口和码头基本知识培训课件
- 美容外科安全应急预案范文(3篇)
- 水利工程拦水坝建设方案实例
- 新学期+心动力+课件-2025-2026学年高二上学期开学第一课主题班会
- 6G多维度切片QoS保障-洞察及研究
- 老年人能力评估师考试题能力模拟题及答案
- 2025-2026学年外研版(三起)(2024)小学英语四年级上册教学计划及进度表
- 2025年安徽国控集团所属企业招聘7人笔试备考题库及答案解析
- 1.1认识社会生活(课件)- 2025-2026学年统编版道德与法治八年级上册
- 仓库盘盈盘亏处理方案(3篇)
- 胎盘早剥病例汇报
评论
0/150
提交评论