软件测试实验-决策表

关于决策表

决策表决策表又称判断表,是一种呈表格状的图形工具,适用于描述处理判断条件较多,各条件又相互组合、有多种决策方案的情况。精确而简洁描述复杂逻辑的方式,将多个条件与这些条件满足后要执行动作相对应。但不同于传统程序语言中的控制语句,决策表能将多个独立的条件和多个动作直接的联系清晰的表示出来。
  决策表最突出的优点是,能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。利用决策表能够设计出完整的测试用例集合。
  决策表能罗列出所有的情况,并清晰的指出相应的处理方式,用户不需要考虑其中的逻辑关系就能一眼看出其中什么样的动作对应什么样的情况,这比程序语言中层层嵌套的逻辑语句要强多了。而所有可能情况的平面罗列,也能避免在程序语言编写中,因为逻辑的层层嵌套而产生遗漏,尤其在if-then-else结构中else部分是可选的情况下。
  决策表法是黑盒测试方法中最为严格、最具有逻辑性的测试方法。

实验内容
在这里插入图片描述
分析
输入:year month day
操作:

day变量值减1

day复位为30

day复位为31

day复位为30

day复位为29

day复位为28

month变量值减1

month复位为12

year变量值减1

(2)规则

M1={ month有30天 }

M2={ month有31天,1月、3月、8月除外 }

M3={ month是1月 }

M4={ month是2月 }

M5={ month是3月 }

M6={ month是8月 }

D1={ day=1 }

D2={ 2≤day≤27 }

D3={ day=28 }

D4={ day=29 }

D5={ day=30 }

D6={ day=31 }

Y1={ year是闰年 }

Y2={ year不是闰年 }

绘制决策表
在这里插入图片描述
在这里插入图片描述
根据决策表设计测试用例
在这里插入图片描述
在这里插入图片描述
测试结果为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验代码

#include<iostream>
using namespace std;
int valid(int y,int m,int d)
{
    if(1812>y || y>2017) return 0;
    if(m<1 || m>12) return 0;
    if(d<1) return 0;
    switch(m)
      {
        case 1: {if (d >31) return 0;break;}
        case 2:
            {
                if (y%400==0 || y%4==0)
                {
                    if (d>29) return 0;
                }
                else
                {
                    if (d>28) return 0;
                }
                break;
            }
        case 3: {if (d >31) return 0;break;}
        case 4: {if (d >30) return 0;break;}
        case 5: {if (d >31) return 0;break;}
        case 6: {if (d >30) return 0;break;}
        case 7: {if (d >31) return 0;break;}
        case 8: {if (d >31) return 0;break;}
        case 9: {if (d >30) return 0;break;}
        case 10: {if (d >31) return 0;break;}
        case 11: {if (d >30) return 0;break;}
        case 12: {if (d >31) return 0;break;}
    }
    return 1;
}
void predate(int y,int m,int d)
{
    if (d>1)
    {
        cout<<"前一天的日期为: "<<y<<" "<<m<<" "<<d-1<<endl;
    }
    else
    {
     switch(m-1)
    {
        case 0:{cout<<"前一天的日期为: "<<y-1<<" "<<12<<" "<<31<<endl;break;}
        case 1:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 2:
            {
                if (y%100==0 || y%4==0)
                {
                    cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<29<<endl;break;
                }
                else cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<28<<endl;break;

            }
        case 3:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 4:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<30<<endl;break;}
        case 5:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 6:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<30<<endl;break;}
        case 7:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 8:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 9:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<30<<endl;break;}
        case 10:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<31<<endl;break;}
        case 11:{cout<<"前一天的日期为: "<<y<<" "<<m-1<<" "<<30<<endl;break;}
    }
    }
}
int main()
{
    int year,month,day;
    int t;
    while(1)
    {
        cout<<"请输入日期 \n";
        cin>>year>>month>>day;
        if (valid(year,month,day)==0)
        {
            cout<<"输入日期有误,请重新输入"<<endl;
            continue;
        }
        predate(year,month,day);
        cout<<"请输入 1继续  0退出"<<endl;
        cin>>t;
        if(t==1) continue;
        else break;
    }
    return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值