问题:输入年月日year、month、day,其中年份的有效取值范围为[1818,2018],请输出输入日期的前一天,例如输入2018年9月18日,输出为2018年9月17日。若输入日期非法,例如输入2013年2月30日,则输出“输入日期不存在”,若输入日期超出取值范围,例如输入2013年9月32日,则输出“输入日期超出范围”。
试采用决策表测试方法(弱健壮等价类测试)对上述问题设计等价类、决策表,并给出相应测试用例。
解:
采用弱健壮性等价类测试设计
弱健壮性等价类测试要求:对于有效输入,使用每一个有效类的一个值,对于无效输入,测试用例将拥有一个无效值,并保持其余的值都是有效的。根据确定等价类的原则:
- 输入条件规定了取值范围,或者值的个数,则可以确定一个有效等价类和两个无效等价类。
- 规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时要对每一个规定的输入值确立一个等价类,而对于这组值之外的所有值确立一个等价类
- 规定了输入数据必须遵守的规则,则可以确立一个有效等件类(即遵守规则的数据)和若干无效等价类
- 确知以划分的等价类中的各元素在程序中的处理方式不同,则应进一步划分成更小的等价类.
等价类划分:
有效等价类:基于输入域:
D1={day:1<=day<=28}; D2={day:day=29} ;
D3={day:day=30} ,D4={day:day=31}
Y1={year:1818<=year<=2018;且year是平年}
Y2={year:1818<=year<=2018;且year是闰年}
M1={month:month有30天};M2={month:month有31天,除去12月}
M3={month:month为12月};M4={month:mouth是2月}
基于输出域;
P1={“输入日期不存在”}
P2={“输入日期超出范围”}
P3={“输出正常前一天”}
无效等价类:
M8={mouth:mouth<1},M9={mouth:mouth>12};
D8={day:day<1},D9={day:day>31};
Y8={year:year<1818}、Y9={year;year>2018};
根据等价类:列出条件桩与动作桩
条件桩:
“日”在D1中、“日”在D2中、“日”在D3中、“日”在D4中、“日”在D8中、
“日”在D9中
“年”在Y1中、“年”在Y2中、“年”在Y8中、“年”在Y9中
“月”在M1中、“月”在M2中、“月”在M3中、“月”在M4中、“月”在M8中
“月”在M9中.
动作桩:
P1、P2、P3。
结合弱等价类健壮性测试以及决策表设计测试用例如下。
“-”代表取不到值,因为有些条件互斥。很容易看出这是带有互斥条件的决策表。
决策表:每一列代表一个测试用例。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
条件 | Y1 | 1 | 1 | - | - | 1 | - | - | - | - | - |
Y2 | - | - | 1 | 1 | - | 1 | - | - | 1 | 1 | |
Y8 | - | - | - | - | - | - | 1 | - | - | - | |
Y9 | - | - | - | - | - | - |
| 1 | - | - | |
M1 | - | 1 | - | 1 | - | - | 1 | 1 | 1 | 1 | |
M2 | - | - | 1 | - | - | - | - | - | - | - | |
M3 | 1 | - | - | - | - | - | - | - | - | - | |
M4 | - | - | - | - | - | - | - | - | - | - | |
M8 | - | - | - | - | 1 | - | - | - | - | - | |
M9 | - | - | - | - | - | 1 | - | - | - | - | |
D1 | - | - | 1 | - | - | - | - | - | - | - | |
D2 | - | - | - | - | - | - | - | - | - | - | |
D3 | - | 1 | - | 1 | 1 | 1 | 1 | 1 | - | - | |
D4 | 1 | - | - | - | - | - | - | - | - | - | |
D8 | - | - | - | - | - | - | - | - | 1 | - | |
D9 | - | - | - | - | - | - | - | - | - | 1 | |
动作 | P1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
P2 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | |
P3 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
具体的测试用例如下:
测试用例:
测试用例 | 输入 | 期望输出 | 覆盖等价类 | ||
Year | Mouth | Day | |||
1 | 2000 | 1 | 6 | 2000年1月5日 | Y2,M2,D1,P3 |
2 | 2000 | 2 | 30 | 输入日期不存在 | Y2,M1,D3,P1 |
3 | 2001 | 12 | 31 | 2001年12月30日 | Y1,M3,D4,P3 |
4 | 2001 | 4 | 30 | 2001年4月29日 | Y1,D3,M1,P3 |
5 | 2001 | 0 | 30 | 输入日期超出范围 | Y1,D3,M8,P2 |
6 | 2000 | 18 | 30 | 输入日期超出范围 | Y2,D3,M9,P2 |
7 | 1000 | 4 | 30 | 输入日期超出范围 | Y8,D3,M1,P2 |
8 | 3000 | 4 | 30 | 输入日期超出范围 | Y9,D3,M1,P2 |
9 | 2000 | 4 | 0 | 输入日期超出范围 | Y2,D8,M1,P2 |
10 | 2000 | 4 | 200 | 输入日期超出范围 | Y2,D9,M1,P2 |