当前位置:文档之家› nextdate函数的代码

nextdate函数的代码

nextdate函数的代码
nextdate函数的代码

#include

#include

void main()

{

int year,month,day;

void nextdate(int ,int ,int );

printf("请输入年份(范围在1912-2050之间):");scanf("%d",&year);

printf("请输入月份(范围在1-12之间):");scanf("%d",&month);

printf("请输入日期(范围在1-31之间):");scanf("%d",&day);

printf("%d年%d月%d日的下一天是:",year,month,day);

nextdate(year,month,day);

}

void nextdate(int year,int month,int day)

{

int leap( int );

switch(month)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

if(day>=1&&day<31)

day=day+1;

else if(day==31){

day=1;

month=month+1;

}

else

printf("输入数据错误!\n");

break;

case 12:

if(day>=1&&day<31)

day=day+1;

else if(day==31){

day=1;

month=1;

year=year+1;

}

else

{

printf("输入数据错误!\n");

exit(0);

}

break;

case 4:

case 6:

case 9:

case 11:

if(day>=1&&day<30)

day=day+1;

else if(day==30){

day=1;

month=month+1;

}

else

{

printf("输入数据错误!\n");

exit(0);

}

break;

case 2:

if(day>=1&&day<28)

day=day+1;

else if(!leap(year)&&day==28){

day=1;

month=month+1;

}

else if(leap(year)&&day==28)

day=day+1;

else if(leap(year)&&day==29){

day=1;

month=month+1;

}

else

{

printf("输入数据错误!\n");

exit(0);

}

}

printf("%d年%d月%d日\n",year,month,day); }

int leap(int yy)

{

return (yy%400==0||(yy%4==0&&yy%100!=0)); }

NextDate函数测试用例

1.测试程序源代码 #include"stdafx.h" #include using namespace std; void NextDate(int year,int month,int day); void main() { int year=0,month=0,day=0; NextDate(year,month,day); } void NextDate(int year,int month,int day) { cout<<"请输入年份:"<>year; while(!(year>=1911 && year<=2013)) { cout<<"年份超过界限,请重新输入"<>year; } cout<<"请输入月份:"<>month; while (month>12||month<1) { cout<<"月份输入有误,请重新输入"<>month; } cout<<"请输入日期:"<>day; while (day>31||day<1) { cout<<"日期输入有误,请重新输入"<>day; } while(month==4&&day==31||month==6&&day==31||month==9&&day==31||month==11&&da y==31) { cout<<"小月没有31号"<>day; } if((year%4==0 && year%100!=0) || (year%400==0)) //检查闰年; {

nextdate函数

#include int check(int y,int m,int d) { if (d<1||d>31) { return 0; } else if (m<1||m>12) { return 0; } else if (y<1900||y>2100) { return 0; } return 1; } int a(int y) { return(y%4||y%100&&!(y%400)); } //30天 int b(int m ) { return (m==4||m==6||m==9||m==11); } //31天 int c(int m) { return (m==1||m==3||m==5||m==7||m==8||m==10||m==12); } int nextdate() { int year,month,day; printf("Year="); scanf("%d",&year);

printf("Month="); scanf("%d",&month); printf("Day="); scanf("%d",&day); if (check(year,month,day)) { if ((day==28&&month==2&&!a(year))||(day==29&&month==2&&a(year))) { day=1; month=3; } else if (day==30&&b(month)||day==31&&c(month)) { day=1; month++; } else day++; if (month>12) { month=1; ++year; } printf("Next date:%d-%d-%d\n",year,month,day); } else printf("无T效?ì输o?入¨?日¨?期¨2\n"); return 0; } void main() { int i=1; while(i) {printf("开a始o?计?算?:\n"); if(i==1) { nextdate(); } }

Nextdate 函数的黑盒测试

实验四 Nextdate 函数的黑盒测试 一、实验目的: 掌握黑盒测试中的决策表测试法,并对被测程序设计测试用例。 二、实验环境 操作系统:Windows XP + SP2 /win7 三、实验内容 1、编写一个NextDate函数。 2、掌握黑盒测试中的决策表测试法的基本步骤。 3、使用决策表法设计测试用例,对编写的函数实施测试,总结分析测试结果。 四、实验步骤 1、编写一个NextDate函数,代码如下: #include int chk(int y,int m,int d) { if (d<1||d>31) { return 0; } else if (m<1||m>12) { return 0; } else if (y<1912||y>2500) { return 0; } return 1; } int isy(int y) { return (y%4==0&&y%100||y%400); } int ilm(int m )

{ return (m==4||m==6||m==9||m==11); } int ihm(int m) { return (m==1||m==3||m==5||m==7||m==8||m==10||m==12); } int main(int argc, char* argv[]) { int year,month,day; printf("Year="); scanf("%d",&year); printf("Month="); scanf("%d",&month); printf("Day="); scanf("%d",&day); if (chk(year,month,day)) { if ((day==28&&month==2&&!isy(year))||(day==29&&month==2&&isy(year))) { day=1; month=3; } e lse i f (day==30&&ilm(month)||day==31&&ihm(month)) { day=1; month++; } else day++; if (month>12) { month=1; ++year; } printf("Next date:%d-%d-%d\n",year,month,day); } else printf("日期不合法"); return 0;

使用等价类划分法为NextDate函数设计测试用例

1、使用等价类划分法为NextDate函数设计测试用例: NextDate函数包含三个输入变量month、day和year(要求month、day和year 均为整数值,并且满足:1≤month≤12; 1≤day≤31;1912≤year≤2050),函数的输出为输入日期后一天的日期。 (1)列出输入域等价类表(包括有效和无效等价类)。 (2)根据(1)中的等价类,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例所覆盖的等价类编号。 2、某城市电话号码由三部分组成,分别是: 地区码——空白或者三位数字; 前缀——非‘0’或‘1’开头的三位数字; 后缀——4位数字。 假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。 (1)列出输入域等价类表(包括有效和无效等价类)。 (2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例覆盖的等价类编号。 3、使用基本路径测试方法测试以下程序段: V oid sort(int irecordnum,int itype) 1{ 2Int x = 0; 3Int y = 0; 4While( irecordnum -- >0 ) 5{ 6If( itype == 0) 7Break; 8Else 9If(itype == 1) 10x = x+10; 11Else 12y = y+20; 13} 14} 说明:写在程序段某些行开头数字(1~14)是对每条语句的编号。 (1)画出程序的控制流程图(用题中给出的语句编号表示)。 (2)计算上述程序段的环形复杂度。 (3)导出基本路径集,列出程序的独立路径(用题中给出的语句编号表示)。 请根据(3)中的独立路径,设计测试用例的输入数据和预期输出。 4、使用基本路径测试方法测试以下程序段: Int IsGood( int grade ) { ① If (grade <= 100)

nextdate问题

#include using namespace std; int a,b,c,y,m,d; //判断是否为闰年 bool Feb(int y){ if((2060-y)%4==0) return 1; else return 0;} //年份的累加 int NextYear(int y){ a=y+1; if(a>2060) {cout<<"Next date is out of the record."<<"/n"; return 1;} else return a;} //月份的累加 int NextMonth(int m){ b=m+1; if(b==13){ b=1; NextYear(y);} return b;} //天数的累加 int NextDay(int d){ c=d+1; //大月满32天月份加1 if(c==32){ if(m==1|m==3|m==5|m==7|m==8|m==10|m==12) {c=1; NextMonth(m);}} //小月满31天月份加1 if(c==31){ if(m==4|m==6|m==9|m==11) {c=1; NextMonth(m);}} //若为闰年,2月满30天,月份加1 if(c==30){ if(Feb(y)&&m==2){ c=1; b=3;}} //若不是闰年,2月满29天,月份加1

if(c==29){ if(!Feb(y)&&m==2){ c=1; b=3;}} return c;} //NextDate函数 int NextDate ( int y, int m, int d){ if (y<1900|y>2060|m<1|m>12|d<1|d>31){ cout<<" This date is out of the record , please input the right date."<<"\n"; return 1;} if(m==4|m==6|m==9|m==11&&d==31) { cout<<" This date is out of the record , please input the right date."<<"\n"; return 1;} if(Feb(y)&&m==2&&d>29) { cout<<" This date is out of the record , please input the right date."<<"\n"; return 1;} if(!Feb(y)&&m==2&&d>28) {cout<<" This date is out of the record , please input the right date."<<"\n"; return 1;} else{ NextDay(d); cout<<"Next date is"<>y; cout<<"MONTH"<<"\n"; cin>>m; cout<<"DAY"<<"\n"; cin>>d; a=y; b=m; c=d; NextDate ( y, m, d);} return 0;}

NEXTDATE的决策表示例(软件测试技术实验报告)

NextDate函数测试用例 选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美例子,因为决策表可以突出这种依赖关系。从前面对等价类测试的分析我们知道,等价类分析假设所有的变量都是独立的。如果变量确实是独立的,则使用类的笛卡尔积是有意义的。如果变量之间在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。决策表格式通过使用“不可能动作”概念表示条件的不可能组合,使我们能够强调这种依赖关系。下面将对NextDate函数的决策表描述做三次尝试。 第一次尝试 标识合适的条件和动作,假设首先从分析等价类集合开始。 M1 = {月份:每月有30天};M2 = {月份:每月有31天};M3 = {月份:此月是2月} D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31} Y1 = {年:年是闰年};Y2 = {年:年不是闰年}

如果我们希望突出不可能的组合,则可以建立具有以下条件和动作的有限项决策表。(请注意,年变量对应的等价类收缩为下表的一个条件。) 这个决策表会有256条规则,其中很多是不可能的。如果要显示为什么这些规则是不可能的,可将动作修改为: a1:月份中的天数太多;a2:不能出现在非闰年中;a3:计算NextDate。 第二次尝试 如果我们将注意力集中到NextDate函数的闰年问题上,则可以修改已有的等价类集合。为了说明另一种决策表表示方法,这一次采用扩展项决策表开发,并更仔细地研究动作桩。在构建扩展项决策表时,必须保证等价类构成输入定义域的真划分。如果规则项之间存在“重叠”,则会存在冗余情况,使得多个规则都能够

软件测试NextDate函数决策表测试法实验报告

一、实验目的: 掌握黑盒测试中的决策表测试法,并对被测程序设计测试用例。 二、实验环境 操作系统:Windows XP + SP2 /win7 三、实验内容 1、编写一个NextDate函数。 2、掌握黑盒测试中的决策表测试法的基本步骤。 3、使用决策表法设计测试用例,对编写的函数实施测试,总结分析测试结果。 四、实验步骤 1、编写一个NextDate函数。(C语言、C++) 2、根据黑盒测试的决策表测试法设计测试用例。 3、根据测试用例实施测试,并记录测试结果。 五、实验代码 #include using namespace std; int a,b,c,y,m,d; //判断是否为闰年 bool Feb(int y){ if((2060-y)%4==0) return 1; else return 0;} //年份的累加 int NextYear(int y){ a=y+1; if(a>2060) {cout<<"下一个日期已经超出了范围."<<"/n"; return 1;} else return a;} //月份的累加 int NextMonth(int m){ b=m+1; if(b==13){ b=1;

NextYear(y);} return b;} //天数的累加 int NextDay(int d){ c=d+1; //大月满32天月份加1 if(c==32){ if(m==1|m==3|m==5|m==7|m==8|m==10|m==12) {c=1; NextMonth(m);}} //小月满31天月份加1 if(c==31){ if(m==4|m==6|m==9|m==11) {c=1; NextMonth(m);}} //若为闰年,2月满30天,月份加1 if(c==30){ if(Feb(y)&&m==2){ c=1; b=3;}} //若不是闰年,2月满29天,月份加1 if(c==29){ if(!Feb(y)&&m==2){ c=1; b=3;}} return c;} //NextDate函数 int NextDate ( int y, int m, int d){ if (y<1900|y>2060|m<1|m>12|d<1|d>31){ cout<<"输入不可能的日期, 请输入正确的日期"<<"\n"; return 1;} if(m==4|m==6|m==9|m==11&&d==31) { cout<<"输入不可能的日期, 请输入正确的日期"<<"\n"; return 1;} if(Feb(y)&&m==2&&d>29) { cout<<"输入不可能的日期, 请输入正确的日期"<<"\n"; return 1;} if(!Feb(y)&&m==2&&d>28) {cout<<"输入不可能的日期, 请输入正确的日期"<<"\n"; return 1;} else{ NextDay(d); cout<<"Next date is"<

判定表法-NextDate

为了获得下一个日期,NextDate函数执行如下操作: 如果输入日期不是当月最后一天,则把day变量的值加1; 如果输入日期是1~11月份中某月的最后一天,则把day变量的值复位为1,month变量的值加1; 如果输入日期是12月的最后一天,则day变量和month变量的值都复位为1,year变量的值加1。 关于最后一天的判断: 如果是有31天的月份(1,3,5,7,8,10,12),day变量值为31; 如果是有30天的月份(4,6,9,11),day变量值为30; 如果是有29天的月份(闰年的2月),day变量值为29; 如果是有28天的月份(非闰年的2月),day变量值为28。 根据所执行的操作,可列出NextDate函数的动作桩: a1: 不可能; a2: day加1; a3: day复位; a4: month加1; a5: month复位; a6: year加1 考虑到判断表的规模,条件使用month、day、year变量的等价类,在以下等价类集合上建立判定表: 对于month变量的取值 M1: {mouth: mouth有30天};M2: {mouth:mouth有31天,12月除外}; M3: {mouth:mouth有12月};M4: {mouth:mouth是2月}; 对于day变量的取值 D1:{day:1≤day≤27};D2: {day:day=28}; D3: {day:day=29};D4: {day:day=30};D5: {day:day=31}; 对于year变量的取值 Y1:{year:year是闰年};Y2: {year:year不是闰年} month变量的有效等价类: M1: {month=4,6,9,11} M2: {month=1,3,5,7,8,10} M3: {month=12} M4: {month=2} day变量的有效等价类: D1: {1≤day≤27} D2:{day=28} D3:{day=29} D4:{day=30} D5: {day=31} year变量的有效等价类: Y1: {year是闰年} Y2: {year不是闰年} 考虑各种有效的输入情况,程序中可能采取的操作有以下六种: a1: day+2 a2: day=2 a3: day=1 a4: month+1 a5: month=1 a6: year+1

NextDate函数黑盒测试

NextDate函数黑盒测试 1、简介 1.1编写目的 本测试报告为nextdate函数的测试报告,目的在于总结测试阶段的测试以及分析测试结果,通过测试来检测每个功能是否都能正常使用。预期参考人员包括测试人员、开发人员和需要阅读本报告的老师。 1.2项目背景 本项目为软件测试上机作业。 1.3术语 等价类划分:把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。 1.4参考资料 软件测试(第二版)(美)Ron Patton著张小松王钰曹跃译机械工业出版社 测试报告模板原创作者:jerry 2、测试概要 2.1测试程序源代码 #include using namespace std; void NextDate(int year,int month,int day); void main() { int year=0,month=0,day=0; NextDate(year,month,day); }

void NextDate(int year,int month,int day) { cout<<"请输入年份:"<>year; while(!(year>=1811 && year<=2013)) { cout<<"年份超过界限,请重新输入"<>year; } cout<<"请输入月份:"<>month; while (month>12||month<1) { cout<<"月份输入有误,请重新输入"<>month; } cout<<"请输入日期:"<>day; while (day>31||day<1) { cout<<"日期输入有误,请重新输入"<>day; } if((year%4==0 && year%100!=0) || (year%400==0)) //检查闰年; { int i=0; i=day-29; while(month==2&&i>0) { cout<<"本月是闰月,请在1-29之间从新输入日期"<>day; } if(month==2&&day==29) { month=3; day=1; } else day++; } else day++; //月底计算; switch(month)

项目:NextDate()函数-等价类、边界值法(student)

项目:NextDate( )函数测试 需求:NextDate 函数包含三个变量:month 、day 和year ,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日。要求输入变量month 、day 和year 均为整数值,并且满足下列条件:①1≤month≤12②1≤day≤31③1912≤year≤2050 要求:黑盒测试、等价类划分法、边界值分析法 分析:此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。 一、等价类划分法设计测试用例 1、简单等价类划分测试NextDate函数 分析: (1)有效等价类 知识点:有效等价类是指对软件规格说明而言,由有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。 简单等价类划分测试NextDate函数可以划分以下三种有效等价类: M1={month:1≤month≤12} D1={day:1≤day≤31} Y1={year:1912≤year≤2050} (2)无效等价类 知识点:无效等价类是指对软件规格说明而言,由无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。 若条件M1,D1,Y1中任何一个条件无效,那么NextDate 函数都会产生一个输出,指明相应的变量超出取值范围,例如month 的值不在1~12 范围当中。 显然还存在着大量的year 、month 、day 的无效组合,NextDate 函数将这些组合统一输出为:“无效输入日期”。“year不在1912~2050中,请重新输入”,“month不在1~12中,请重新输入”,“day不在1~31中,请重新输入”。 其无效等价类为: M2={month:month<1} M3={month:month>12} D2={day:day<1} D3={day:day>31} Y2={year:year<1912} Y3={year:year>2050} (3)等价类划分法的测试用例设计具体过程 知识点:(1) 首先为等价类表中的每一个等价类分别规定一个唯一的编号。(2) 设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。 (3) 设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。

NextDate函数的等价类测试用例

NextDate函数的等价类测试用例 NextDate是一个三变量函数,即月份、日期和年,这些变量的有效值区间定义如下: M1={月份:1≤月份≤12} D1={日期:1≤日期≤31} Y1={年:1812≤年≤2012} 无效等价类: M2={月份:月份<1} M3={月份:月份>12} D2={日期:日期<1} D3={日期:日期>31} Y2={年:年<1812} Y3={年:年>2012} 由于有效类的数量等于独立变量的个数,因此只有弱一般等价类测试用例出现,并且与强一般等价类测试用例相同: 用例ID 月份日期年预期输出 WN1,SN1 6 15 1912 1912年6月16日用例ID 月份日期年预期输出 WR1 6 15 1912 1912年6月16日 WR2 -1 15 1912 月份不在有效值域1..12中 WR3 13 15 1912 月份不在有效值域1..12中 WR4 6 -1 1912 日期不在有效值域1..31中 WR5 6 32 1912 日期不在有效值域1..31中 WR6 6 15 1811 年不在有效值域1812..2012中 WR7 6 15 2013 年不在有效值域1812..2012中强健壮等价类测试用例集合:

用例ID 月份日期年预期输出 SR1 -1 15 1912 月份不在有效值域1..12中 SR2 6 -1 1912 日期不在有效值域1..31中 SR3 6 15 1811 年不在有效值域1812..2012中SR4 -1 -1 1912 月份不在有效值域1..12中 日期不在有效值域1..31中 SR5 6 -1 1811 日期不在有效值域1..31中 年不在有效值域1812..2012中SR6 -1 15 1811 月份不在有效值域1..12中 年不在有效值域1812..2012中SR7 -1 -1 1811 月份不在有效值域1..12中 日期不在有效值域1..31中 年不在有效值域1812..2012中

nextdate函数的代码

#include #include void main() { int year,month,day; void nextdate(int ,int ,int ); printf("请输入年份(范围在1912-2050之间):");scanf("%d",&year); printf("请输入月份(范围在1-12之间):");scanf("%d",&month); printf("请输入日期(范围在1-31之间):");scanf("%d",&day); printf("%d年%d月%d日的下一天是:",year,month,day); nextdate(year,month,day); } void nextdate(int year,int month,int day) { int leap( int ); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: if(day>=1&&day<31) day=day+1; else if(day==31){ day=1; month=month+1; } else printf("输入数据错误!\n"); break; case 12: if(day>=1&&day<31) day=day+1; else if(day==31){ day=1; month=1; year=year+1; }

else { printf("输入数据错误!\n"); exit(0); } break; case 4: case 6: case 9: case 11: if(day>=1&&day<30) day=day+1; else if(day==30){ day=1; month=month+1; } else { printf("输入数据错误!\n"); exit(0); } break; case 2: if(day>=1&&day<28) day=day+1; else if(!leap(year)&&day==28){ day=1; month=month+1; } else if(leap(year)&&day==28) day=day+1; else if(leap(year)&&day==29){ day=1; month=month+1; } else { printf("输入数据错误!\n"); exit(0); } }

NextDate的第三次测试

第1部分 1.1寻找边界 对于 NextDate问题而言,边界可从两个大的方面来考虑: 1.2从整体考虑 NextDate 的有效输入日期是在 1800 年 1 月 1 日到 2050 年 12 月 31 日之间的所有日期,则从该角度来考虑,边界点只有两个:1800-1-1(最小值)和 2050-12-31(最大值),这样,基本的边界值分析将仅需考虑在这两个边界点附件的输入日期,即 1800-1-2 和2050-12-30。若考虑健壮性,则可将两边界点外侧的两个无效日期考虑进行,即 1799-12-31 和 2051-1-1。 (2)针对三个输入条件分别考虑 从整体来考虑问题的边界显然是不够全面的,NextDate 问题共有三个输入条件,即年份、月份和日期,每个输入条件都有各自独立的有效域,应分别针对它们确定边界点,进而确定其边界值测试的范围。 再次强调:基本的边界值分析要受到一个基本假设的制约,即有关边界的测试仅限于一个输入条件的边界,此时其他输入条件应取为典型的有效数据。另外要注意的是,应对测试用例进行评审,避免用例的重复。 1.3开始测试 对于 NextDate问题,针对以上分析,表 1.3 给出了健壮性边界值测试的测试用例的集合。为简单起见,下文中均不列出测试用例的实际执行结果。读者可以自行尝试执行这些测试用例,看看结果如何。 以自行尝试执行这些测试用例,看看结果如何。 表1.3 NextDate问题的边界值测试的测试用例

1.4测试分析 表 3.1 的 20个测试用例中, ND-BVT-001 到 ND-BVT-006 的 6 个测试用例是针对年份的边界值测试,ND-BVT-007 到 ND-BVT-012 的 6 个测试用例是针对月份的边界值测试,ND-BVT-013 到 ND-BVT-018 的 6 个测试用例是针对日期的边界值测试,而最后两个测试用例则是从整体上考虑的边界值测试。这些用例是否存在冗余,是否有漏洞呢。表 3.2针对不同测试重点的测试用例进行了统计。表中无效日期是指输入条件的取值无效,不存在日期指输入条件取值有效但该日期实际是不存在的。 表3.2 针对不同测试重点的测试用例分布情况

相关主题
文本预览
相关文档 最新文档