软件测试 决策表测试

             实验二 决策表测试

1.实验目的
掌握决策表测试方法
2.实验内容
前一日函数 PreDate 是 NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。
年的取值在1812年到2017年。
日的取值在 1日到 31 日之间。
月的取值在 1到 12 月之间
3.实验步骤
第一步:根据实验内容编写程序。
第二步:根据实验内容设计测试用例,要求是用决策表测试生成测试用例。
第三步:执行测试用例,并记录测试结果。
第四步:编写实验报告,实验报告的内容包括测试用例的测试结果、程序中存在的 bug、以及这种测试用例生成方法对于揭露程序的错误有什么异同点。
4.测试结果
决策表法
分析;
(1)条件桩,动作桩
输入
Month
Day
Year
preDate的操作
day 变量值减1
day 变量值复位
month 变量值减1
month变量值复位
year 变量值减1
(2)考虑规则个数

(3)决策表

(4)化简,决策表如下:

(5)设计测试用例:

部分测试结果截图:

5.实验结果分析
经过多次测试,所有的测试结果都符合预期要求,即初步判断代码无误。

6.实验总结
(1)在编程过程前,我首先完成了等价类划分的工作,因为划分的情况较多,所以化简决策表的工作必不可少,然而当分的情况比较多时,化简决策表也比较麻烦。
(2)通过这次实验,我发现了决策表的优势:就是更能比较出变量之间的相互制约关系,比如月份和日期的对应关系。然而并没有体现出边界附近的值的测量,所以应该综合上一次实验的两个测试方法,进行一起测试。
(3)写这次代码时,输入格式时八位的字符串,通过对于C++ String内部的函数substr 和 atoi ,完成对于日期字符串的切分和转换。
(4)通过这次实验,更加理解了上课所学习决策表的相关内容。

7.附录代码

#include
#include
int year,month,day;
int year1,month1,day1;
using namespace std;
bool Year(int y)
{
if (y % 4 == 0)
{
if (y % 100 == 0)
{
/// 这里如果被 400 整数是闰年
if (y % 400 == 0)
return true;
else
return false;
}
else
return true;
}
else
return false;

}
void GET (string s)
{
string a,b,c;
a=s.substr(0,4);
b=s.substr(4,2);
c=s.substr(6,2);
year=atoi(a.c_str());
month=atoi(b.c_str());
day=atoi(c.c_str());

}
void Show()
{
cout<<year1;
if(month1<10)
{
cout<<“0”<<month1;
}
else
cout<<month1;
if(day1<10)
cout<<“0”<<day1;
else
cout<<day1;
cout<<endl;
}
int main()
{
cout<<" 请输入测试日期"<<endl;
string s;
cin>>s;
GET(s);
if(year<1812||year>2017)
{
cout<<“错误”<<endl;
return 0;
}
if(month<1||month>12)
{
cout<<“错误”<<endl;
return 0;
}
if(day<1||day>31)
{
cout<<“错误”<<endl;
return 0;
}
if(month4||month6||month9||month11)
{
if(day>=2&&day<=30)
{
year1=year;
month1=month;
day1=day-1;
}
else if(day1)
{
year1=year;
month1=month-1;///3 5 8 10
day1=31;
}
else
{
cout<<“错误日期”<<endl;
return 0;
}
Show();
return 0;
}
if(month
5||month7||month8||month10||month12)
{
if(day>=2)
{
year1=year;
month1=month;
day1=day-1;
}
else
{
if(month!=8)
{
year1=year;
month1=month-1;///4 6 9 11
day1=30;
}
else
{
year1=year;
month1=month-1;
day1=31;
}

    }
    Show();
    return 0;
}
if(month==1)
{
    if(day==1)
    {
        year1=year-1;
        month1=12;
        day1=31;
    }
    else
    {
        year1=year;
        month1=month;
        day1=day-1;
    }
    Show();
    return 0;
}
if(month==2)
{
    if(day==1)
    {
        year1=year;
        month1=month-1;
        day1=31;
    }
    else if(day>=2&&day<=28)
    {
        year1=year;
        month1=month;
        day1=day-1;
    }
    else if(day==29)
    {
        if(Year(year))
        {
            year1=year;
            month1=month;
            day1=day-1;
        }
        else
        {
            cout<<"错误日期"<<endl;
            return 0;
        }
    }
    else
    {
        cout<<"错误日期"<<endl;
            return 0;
    }
    Show();
    return 0;

}
if(month==3)
{
    if(day==1)
    {
        if(Year(year))
        {
            year1=year;
            month1=month-1;
            day1=29;
        }
        else
        {
            year1=year;
            month1=month-1;
            day1=28;
        }
    }
    else
    {
        year1=year;
        month1=month;
        day1=day-1;
    }
    Show();
    return 0;

}

return 0;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值