《万年历软件测试实训报告.doc》由会员分享,可在线阅读,更多相关《万年历软件测试实训报告.doc(35页珍藏版)》请在金锄头文库上搜索。
1、软件测试实训报告学 院 计算机学院 专 业 软件工程 班 级 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 yea
2、r)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
3、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)
4、%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!
5、=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
6、(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
7、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:fp
8、rintf(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);
9、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:fprin
10、tf(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 ope
11、n 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-9999