需求
日期问题
测试以下程序:该程序有三个输入变量 month、day、year (month、day 和 year 均为整数值,并且满足:1 ≤ months ≤ 12、1 ≤ days ≤ 31 和 1900 ≤ year ≤ 2050),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔天的日期。例如,输入为 2004 年 11 月 30 日,则该程序的输出为 2004 年 12 月 1 日。
(1) 边界值分析法设计测试用例;
(2) 判定表驱动法设计测试用例。
实现
一、边界值分析法
1、等价类
输入数据 |
有效等价类 |
年 |
(1) 1900到2050内的闰年整数 |
|
(2) 1900到2050内的平年整数 |
|
|
|
|
月 |
(3) 1,3,5,7,8,10内的整数 |
|
(4) 4,6,9,11内的整数 |
|
(5) 2 |
|
(6) 12 |
日 |
(7) 1~28 |
|
(8) 29 |
|
(9) 30 |
|
(10) 31 |
2、设计测试用例
测试用例 |
month |
day |
Year |
针对的有效类 |
期望输出 |
1 |
7 |
10 |
1889 |
(1)(2) |
年的值不在指定范围之内 |
2 |
7 |
10 |
1900 |
(1)(2) |
下一天是1900年7月11日! |
3 |
7 |
10 |
1901 |
(1)(2) |
下一天是1901年7月11日! |
4 |
7 |
10 |
2049 |
(1)(2) |
下一天是2049年7月11日! |
5 |
7 |
10 |
2050 |
(1)(2) |
下一天是2050年7月11日! |
6 |
7 |
10 |
2051 |
(1)(2) |
年的值不在指定范围之内 |
7 |
0 |
10 |
2019 |
(3)~(6) |
月的值不在指定范围之内 |
8 |
1 |
10 |
2019 |
(3)~(6) |
下一天是2019年1月11日! |
9 |
2 |
10 |
2019 |
(3)~(6) |
下一天是2019年2月11日! |
10 |
11 |
10 |
2019 |
(3)~(6) |
下一天是2019年11月11日! |
11 |
12 |
10 |
2019 |
(3)~(6) |
下一天是2019年12月11日! |
12 |
13 |
10 |
2019 |
(3)~(6) |
月的值不在指定范围之内 |
13 |
2 |
27 |
2019 |
(5)(7)~(9) |
下一天是2019年2月28日! |
14 |
2 |
28 |
2019 |
(5)(7)~(9) |
下一天是2019年3月1日! |
15 |
2 |
29 |
2019 |
(5)(7)~(9) |
日的值不在指定范围之内 |
16 |
2 |
28 |
2020 |
(5)(7)~(9) |
下一天是2020年2月29日! |
17 |
2 |
29 |
2020 |
(5)(7)~(9) |
下一天是2020年3月1日! |
18 |
2 |
30 |
2020 |
(5)(7)~(9) |
日的值不在指定范围之内 |
19 |
1 |
30 |
2019 |
(3)(9)(10) |
下一天是2019年1月31日! |
20 |
1 |
31 |
2019 |
(3)(9)(10) |
下一天是2019年2月1日! |
21 |
1 |
32 |
2019 |
(3)(9)(10) |
日的值不在指定范围之内 |
22 |
4 |
30 |
2019 |
(4)(9)(10) |
下一天是2019年5月1日! |
23 |
4 |
31 |
2019 |
(4)(9)(10) |
日的值不在指定范围之内 |
24 |
4 |
32 |
2019 |
(4)(9)(10) |
日的值不在指定范围之内 |
3、测试类
代码文件地址

4、运行结果

二、判定表驱动法
1、条件桩
M1={month:这个月有30天}
M2={month:这个月有31天,除了12月}
M3={month:这个月是12月}
M4={month:这个月是2月}
D1={day:1≤day≤27}
D2={day:day=28}
D3={day:day=29}
D4={day:day=30}
D5={day:day=31}
Y1={year:year是闰年}
Y2={year:year不是闰年}
2、动作桩
A0=不可能
A1:day+1
A2:day复位
A3:month+1
A4:month复位
A5:year+1
3、判定表
规则 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
条件: |
|
|
|
|
|
|
|
|
|
|
|
C1:month是 |
M1 |
M1 |
M1 |
M1 |
M1 |
M2 |
M2 |
M2 |
M2 |
M2 |
M3 |
C2:day是 |
D1 |
D2 |
D3 |
D4 |
D5 |
D1 |
D2 |
D3 |
D4 |
D5 |
D1 |
C3:year是 |
− |
− |
− |
− |
− |
− |
− |
− |
− |
− |
− |
动作: |
|
|
|
|
|
|
|
|
|
|
|
A0=不可能 |
|
|
|
|
√ |
|
|
|
|
|
|
A1:day+1 |
√ |
√ |
√ |
|
|
√ |
√ |
√ |
√ |
|
√ |
A2:day复位 |
|
|
|
√ |
|
|
|
|
|
√ |
|
A3:month+1 |
|
|
|
√ |
|
|
|
|
|
√ |
|
A4:month复位 |
|
|
|
|
|
|
|
|
|
|
|
A5:year+1 |
|
|
|
|
|
|
|
|
|
|
|
规则 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
条件: |
|
|
|
|
|
|
|
|
|
|
|
C1:month是 |
M3 |
M3 |
M3 |
M3 |
M4 |
M4 |
M4 |
M4 |
M4 |
M4 |
M4 |
C2:day是 |
D2 |
D3 |
D4 |
D5 |
D1 |
D2 |
D2 |
D3 |
D3 |
D4 |
D5 |
C3:year是 |
− |
− |
− |
− |
− |
Y1 |
Y2 |
Y1 |
Y2 |
− |
− |
动作: |
|
|
|
|
|
|
|
|
|
|
|
A0=不可能 |
|
|
|
|
|
|
|
|
√ |
√ |
√ |
A1:day+1 |
√ |
√ |
√ |
|
√ |
√ |
|
|
|
|
|
A2:day复位 |
|
|
|
√ |
|
|
√ |
√ |
|
|
|
A3:month+1 |
|
|
|
|
|
|
√ |
√ |
|
|
|
A4:month复位 |
|
|
|
√ |
|
|
|
|
|
|
|
A5:year+1 |
|
|
|
√ |
|
|
|
|
|
|
|
4、经过简化的判定表
规则 |
1 2 3 |
4 |
5 |
6 7 8 9 |
10 |
11 12 13 14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 22 |
条件: |
|
|
|
|
|
|
|
|
|
|
|
|
|
C1:month是 |
M1 |
M1 |
M1 |
M2 |
M2 |
M3 |
M3 |
M4 |
M4 |
M4 |
M4 |
M4 |
M4 |
C2:day是 |
D1 D2 D3
|
D4 |
D5 |
D1 D2 D3 D4
|
D5 |
D1 D2 D3 D4
|
D5 |
D1 |
D2 |
D2 |
D3 |
D4 |
D4 D5
|
C3:year是 |
− |
− |
− |
− |
− |
− |
− |
− |
Y1 |
Y2 |
Y1 |
Y2 |
− |
动作: |
|
|
|
|
|
|
|
|
|
|
|
|
|
A0=不可能 |
|
|
√ |
|
|
|
|
|
|
|
|
√ |
√ |
A1:day+1 |
√ |
|
|
√ |
|
√ |
|
√ |
√ |
|
|
|
|
A2:day复位 |
|
√ |
|
|
√ |
|
√ |
|
|
√ |
√ |
|
|
A3:month+1 |
|
√ |
|
|
√ |
|
|
|
|
√ |
√ |
|
|
A4:month复位 |
|
|
|
|
|
|
√ |
|
|
|
|
|
|
A5:year+1 |
|
|
|
|
|
|
√ |
|
|
|
|
|
|
5、根据简化的判定表设计测试用例
测试用例 |
month |
day |
year |
期望输出 |
1~3 |
9 |
16 |
2019 |
下一天是2019年9月17日! |
4 |
9 |
30 |
2019 |
下一天是2019年10月1日! |
5 |
9 |
31 |
2019 |
日的值不在指定范围之内 |
6~9 |
1 |
16 |
2019 |
下一天是2019年1月17日! |
10 |
1 |
31 |
2019 |
下一天是2019年2月1日! |
11~14 |
12 |
16 |
2019 |
下一天是2019年12月17日! |
15 |
12 |
31 |
2019 |
下一天是2020年1月1日! |
16 |
2 |
16 |
2019 |
下一天是2019年2月17日! |
17 |
2 |
28 |
2019 |
下一天是2019年3月1日! |
18 |
2 |
28 |
2020 |
下一天是2020年2月29日! |
19 |
2 |
29 |
2020 |
下一天是2020年3月1日! |
20 |
2 |
29 |
2019 |
日的值不在指定范围之内 |
21,22 |
2 |
30 |
2019 |
日的值不在指定范围之内 |
5、测试类
代码文件地址

6、运行结果

nextDate
函数
