日期问题
测试以下程序:该程序有三个输入变量 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 |
测试用例 | 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) | 日的值不在指定范围之内 |
代码文件地址
4、运行结果 二、判定表驱动法 1、条件桩M1={month:这个月有30天}M_1 = \{month:这个月有30天\}M1={month:这个月有30天}
M2={month:这个月有31天,除了12月}M_2 = \{month:这个月有31天,除了12月\}M2={month:这个月有31天,除了12月}
M3={month:这个月是12月}M_3 = \{month:这个月是12月\}M3={month:这个月是12月}
M4={month:这个月是2月}M_4 = \{month:这个月是2月\}M4={month:这个月是2月}
D1={day:1≤day≤27}D_1 = \{day:1 \le day \le 27\}D1={day:1≤day≤27}
D2={day:day=28}D_2 = \{day:day=28\}D2={day:day=28}
D3={day:day=29}D_3 = \{day:day=29\}D3={day:day=29}
D4={day:day=30}D_4 = \{day:day=30\}D4={day:day=30}
D5={day:day=31}D_5 = \{day:day = 31\}D5={day:day=31}
Y1={year:year是闰年}Y_1 = \{year:year是闰年\}Y1={year:year是闰年}
Y2={year:year不是闰年}Y_2 = \{year:year不是闰年\}Y2={year:year不是闰年}
2、动作桩A0=不可能A_0=不可能A0=不可能
A1:day+1A_1:day+1A1:day+1
A2:day复位A_2:day复位A2:day复位
A3:month+1A_3:month+1A3:month+1
A4:month复位A_4:month复位A4:month复位
A5:year+1A_5:year+1A5:year+1
3、判定表规则 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
条件: | |||||||||||
C1:month是C_1:month是C1:month是 | M1M_1M1 | M1M_1M1 | M1M_1M1 | M1M_1M1 | M1M_1M1 | M2M_2M2 | M2M_2M2 | M2M_2M2 | M2M_2M2 | M2M_2M2 | M3M_3M3 |
C2:day是C_2:day是C2:day是 | D1D_1D1 | D2D_2D2 | D3D_3D3 | D4D_4D4 | D5D_5D5 | D1D_1D1 | D2D_2D2 | D3D_3D3 | D4D_4D4 | D5D_5D5 | D1D_1D1 |
C3:year是C_3:year是C3:year是 | −-− | −-− | −-− | −-− | −-− | −-− | −-− | −-− | −-− | −-− | −-− |
动作: | |||||||||||
A0=不可能A_0=不可能A0=不可能 | √\surd√ | ||||||||||
A1:day+1A_1:day+1A1:day+1 | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | |||
A2:day复位A_2:day复位A2:day复位 | √\surd√ | √\surd√ | |||||||||
A3:month+1A_3:month+1A3:month+1 | √\surd√ | √\surd√ | |||||||||
A4:month复位A_4:month复位A4:month复位 | |||||||||||
A5:year+1A_5:year+1A5:year+1 |
规则 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
---|---|---|---|---|---|---|---|---|---|---|---|
条件: | |||||||||||
C1:month是C_1:month是C1:month是 | M3M_3M3 | M3M_3M3 | M3M_3M3 | M3M_3M3 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 |
C2:day是C_2:day是C2:day是 | D2D_2D2 | D3D_3D3 | D4D_4D4 | D5D_5D5 | D1D_1D1 | D2D_2D2 | D2D_2D2 | D3D_3D3 | D3D_3D3 | D4D_4D4 | D5D_5D5 |
C3:year是C_3:year是C3:year是 | −-− | −-− | −-− | −-− | −-− | Y1Y_1Y1 | Y2Y_2Y2 | Y1Y_1Y1 | Y2Y_2Y2 | −-− | −-− |
动作: | |||||||||||
A0=不可能A_0=不可能A0=不可能 | √\surd√ | √\surd√ | √\surd√ | ||||||||
A1:day+1A_1:day+1A1:day+1 | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | ||||||
A2:day复位A_2:day复位A2:day复位 | √\surd√ | √\surd√ | √\surd√ | ||||||||
A3:month+1A_3:month+1A3:month+1 | √\surd√ | √\surd√ | |||||||||
A4:month复位A_4:month复位A4:month复位 | √\surd√ | ||||||||||
A5:year+1A_5:year+1A5:year+1 | √\surd√ |
规则 | 1 2 3 |
4 | 5 | 6 7 8 9 |
10 | 11 12 13 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 22 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
条件: | |||||||||||||
C1:month是C_1:month是C1:month是 | M1M_1M1 | M1M_1M1 | M1M_1M1 | M2M_2M2 | M2M_2M2 | M3M_3M3 | M3M_3M3 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 | M4M_4M4 |
C2:day是C_2:day是C2:day是 | D1D_1D1 D2D_2D2 D3D_3D3 |
D4D_4D4 | D5D_5D5 | D1D_1D1 D2D_2D2 D3D_3D3 D4D_4D4 |
D5D_5D5 | D1D_1D1 D2D_2D2 D3D_3D3 D4D_4D4 |
D5D_5D5 | D1D_1D1 | D2D_2D2 | D2D_2D2 | D3D_3D3 | D4D_4D4 | D4D_4D4 D5D_5D5 |
C3:year是C_3:year是C3:year是 | −-− | −-− | −-− | −-− | −-− | −-− | −-− | −-− | Y1Y_1Y1 | Y2Y_2Y2 | Y1Y_1Y1 | Y2Y_2Y2 | −-− |
动作: | |||||||||||||
A0=不可能A_0=不可能A0=不可能 | √\surd√ | √\surd√ | √\surd√ | ||||||||||
A1:day+1A_1:day+1A1:day+1 | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | ||||||||
A2:day复位A_2:day复位A2:day复位 | √\surd√ | √\surd√ | √\surd√ | √\surd√ | √\surd√ | ||||||||
A3:month+1A_3:month+1A3:month+1 | √\surd√ | √\surd√ | √\surd√ | √\surd√ | |||||||||
A4:month复位A_4:month复位A4:month复位 | √\surd√ | ||||||||||||
A5:year+1A_5:year+1A5:year+1 | √\surd√ |
测试用例 | 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 | 日的值不在指定范围之内 |
代码文件地址
6、运行结果nextDate
函数