实验二 测试用例设计

实验内容及结果:

题目:某程序的功能规格说明如下:输入一个日期(*年*月*日),通过计算输出该日期的前一天日期(比如,输入1999-3-6,则输出1999-3-5)。设所接收的输入日期的有效范围为1900年到2050年之间的某个日期。当输入日期无效时,输出日期值规定为:年为0,月和日与输入日期值相同(比如,输入1990-5-32,则输出0-5-32)。

1、编程实现上述功能。程序代码如下:

#include <stdio.h>
#include <stdlib.h>
int a=0,b=0,c=0;
int isrun(int year){
if(year%4==0&&year%100!=0||year%400==0)
    return 1;
else return 0;
}
int isrightimport(int year,int month,int day){
    if(day<1)return 0;
    if(month<1||month>12)return 0;
    if(year>2050||year<1900)return 0;
    if(month==2&&day>28||month==2&&day>29)return 0;
    if((month==4||month==6||month==9||month==11)&&day>30)return 0;
    if((month==1||month==3||month==5||month==8|month==10||month==12)&&day>31)return 0;
    return 1;
}
void predate(int year,int month,int day){
    if(isrightimport(year,month,day)==0){
        printf("0-%d-%d\n",month,day);
    }
    else{
        if(day>=2){
            printf("%d-%d-%d\n",year,month,day-1);
        }
        else{
            if(month==5||month==7||month==10||month==12){
                printf("%d-%d-%d\n",year,month-1,30);
            }
            else if(month==2||month==4||month==6||month==8||month==9||month==11)
            {
                printf("%d-%d-%d\n",year,month-1,31);
            }
            else if(month==3){
                if(isrun(year)==1)
                    printf("%d-%d-%d\n",year,2,29);
                else
                    printf("%d-%d-%d\n",year,2,28);
            }
            else if(month==1){
                printf("%d-%d-%d\n",year-1,12,31);
            }
        }
    }
}
int main()
{
    int i=0;
    char str[12],c;
    while(scanf("%s",str)){
    int year=0,month=0,day=0;
    while(str[i]!='-')
    {
        year=year*10+(str[i]-'0');
        i++;
    }
    i++;
    while(str[i]!='-'){
        month=month*10+(str[i]-'0');
        i++;
    }
    i++;
    while(str[i]!='\0'){
        day=day*10+(str[i]-'0');
        i++;
    }
    predate(year,month,day);
    i=0;
    }
    return 0;
}

2、根据功能规格说明,综合使用等价类划分法和边界值分析法,进行黑盒测试用例设计。并使用所设计的测试用例测试你的程序,最后对测试结果进行分析总结。

   (1)分析程序的功能规格说明,列出有效等价类和无效等价类,同时列出可能的边界情况;

  • 有效等价类及边界情况如下:

D1={2<=day<=本月的最后一天}

D2={一个月的第一天}//day=1;

D3={1月1日}//day=1 month=1;

M1={1=<month<=12}

M2={前一个月是30天}//month=5,7,10,12

M3{前一个月是31的月份}//month=2,4,6,8,9,11

M4={前一个月是二月份}//month=3

Y1={1900<=year<=2050}

Y2={平年}//2月份28天

Y3={闰年}//2月份29天

  • 无效等价类及边界情况如下:

D4={day<1}

D5={day>30,month=4,6,9.11}

D6={day>31,month=1,3,5,8,10,12}

D7={day>28,month=2,平年}

D8={day>29,month=2,闰年}

M5={month<1}

M6={month>12}

Y4={year<1900}

Y5={year>2050}

(3)设计测试用例覆盖所有的等价类及边界情况,并执行测试用例。根据执行结果分析程序的功能是否符合要求,完成下表:

  • 测试用例编号

    输入数据

    覆盖情况

    预期输出结果

    实际输出结果

    1

    2018-4-27

    有效等价类D1,M1,Y1

    2018-4-26

    2018-4-26

    2

    2018-4-1

    有效等价类D2,M1,M3,Y1

    2018-3-31

    2018-3-31

    3

    2018-1-1

    有效等价类D3,M1,Y1

    2017-12-31

    2017-12-31

    4

    2018-5-1

    有效等价类D2,M2,Y1

    2018-4-30

    2018-4-30

    5

    2018-3-1

    有效等价类D2,M4,Y2

    2018-2-28

    2018-2-28

    6

    2020-3-1

    有效等价类D2,M4,Y3

    2020-2-29

    2020-2-29

    7

    2018-4-0

    无效等价类D4

    0-4-0

    0-4-0

    8

    2018-4-32

    无效等价类D5

    0-4-32

    0-4-32

    9

    2018-0-27

    无效等价类M5

    0-0-27

    0-0-27

    10

    2018-13-27

    无效等价类M6

    0-13-27

    0-13-27

    11

    0-4-27

    无效等价类Y4

    0-4-27

    0-4-27

    12

    20000-4-27

    无效等价类Y5

    0-4-27

    0-4-27

    13

    2018-4-35

    无效等价类D6

    0-4-35

    2018-4-35

    14

    2018-2-29

    无效等价类D7

    0-2-29

    0-2-29

    15

    2020-2-30

    无效等价类D8

    0-2-30

    0-2-30

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值