6.3 NextDate函数的等价类测试用例
6.3.1 简单的等价类划分
有效等价类:
M1 = {1≤月份≤12}
D1={1≤日期≤31}
Y1={1812≤年≤2012}
无效等价类:
M2 = {月份<1}
M3 = {月份>12}
D2={日期<1}
D1={日期>31}
Y2={年<1812}
Y3={年>2012}
(1)WN、SN
由于有效等价类的数量等于独立变量的个数,因此只有弱一般等价类测试用例出现,且与强一般等价类测试用例相同
(2)WR
每个无效等价类生成1个测试用例
月份 | 日期 | 年 | 预期输出 | |
WR1 | 6 | 15 | 1912 | 1912年6月16日 |
WR2 | -1 | 15 | 1912 | 月份超出范围 |
WR3 | 13 | 15 | 1912 | 月份超出范围 |
WR4 | 6 | -1 | 1912 | 日期超出范围 |
WR5 | 6 | 32 | 1912 | 日期超出范围 |
WR6 | 6 | 15 | 1811 | 年超出范围 |
WR7 | 6 | 15 | 2013 | 年超出范围 |
(3)SR
无效等价类之间要进行组合,先是单个组合,之后是两个组合,再之后是3个组合,……
三维立方的一个"角"
用例标识 | 月份 | 日期 | 年 | 预期输出 |
SR1 | -1 | 15 | 1912 | 月份超出范围 |
SR2 | 6 | -1 | 1912 | 日期超出范围 |
SR3 | 6 | 15 | 1811 | 年超出范围 |
SR4 | -1 | -1 | 1912 | 月份、日期超出范围 |
SR5 | 6 | -1 | 1811 | 日期、年超出范围 |
SR6 | -1 | 15 | 1811 | 月份、年超出范围 |
SR7 | -1 | -1 | 1811 | 月份、日期、年超出范围 |
6.3.2 进一步分析等价类
有效等价类:
M2 = {每月有31天的月份:1、3、5、7、8、10、12},12月还可以单独的分出来
M3 = {每月有28天的月份:2}
D1={1≤日期≤28}
D2={日期=29}
D3={日期=30}
D4={日期=31}
Y1={一般的平年}
Y2={能被100除的平年:1900}
Y3={一般的闰年}
Y4={能被400除的闰年:2000}
无效等价类:
M4= {月份<1}
M5 = {月份>12}
D5={日期<1}
D6={日期>31}
Y5={年<1812}
Y6={年>2012}
用例标识 | 月份 | 日期 | 年 | 预期输出 |
WN1 | 6 | 14 | 1925 | 1925年6月16日 |
WN2 | 7 | 29 | 1900 | 1900年7月30日 |
WN3 | 2 | 30 | 2004 | 不正确的日期 |
WN4 | 6 | 31 | 2000 | 不正确的日期 |
此种等价类和测试用例的选择为机械的选择,不考虑领域知识,领域知识不能通过等价类获得。
(2)SN
用例个数:3×4×4 = 48
用例标识 | 月份 | 日期 | 年 | 预期输出 |
6 | 14 | 1925 | 1925年6月15日 | |
SN2 | 6 | 14 | 1900 | 1900年6月15日 |
SN3 | 6 | 14 | 2004 | 2004年6月15日 |
SN4 | 6 | 14 | 2000 | 2000年6月15日 |
SN5 | 6 | 29 | 1925 | 1925年6月30日 |
SN6 | 6 | 29 | 1900 | 1900年6月30日 |
SN7 | 6 | 29 | 2004 | 2004年6月30日 |
SN8 | 6 | 29 | 2000 | 2000年6月30日 |
SN9 | 6 | 30 | 1925 | 1925年7月1日 |
SN10 | 6 | 30 | 1900 | 1900年7月1日 |
SN11 | 6 | 30 | 2004 | 2004年7月1日 |
SN12 | 6 | 30 | 2000 | 2000年7月1日 |
SN13 | 6 | 31 | 1925 | 不正确的日期 |
SN14 | 6 | 31 | 1900 | 不正确的日期 |
SN15 | 6 | 31 | 2004 | 不正确的日期 |
SN16 | 6 | 31 | 2000 | 不正确的日期 |
SN17 | 14 | 1925 | 1925年7月15日 | |
SN18 | 7 | 14 | 1900 | 1900年7月15日 |
SN19 | 7 | 14 | 2004 | 2004年7月15日 |
SN20 | 7 | 14 | 2000 | 2000年7月15日 |
7 | 29 | 1925 | 1925年7月30日 | |
SN22 | 7 | 29 | 1900 | 1900年7月30日 |
SN23 | 7 | 29 | 2004 | 2004年7月30日 |
SN24 | 7 | 29 | 2000 | 2000年7月30日 |
SN25 | 7 | 30 | 1925 | 1925年7月31日 |
SN26 | 7 | 30 | 1900 | 1900年7月31日 |
SN27 | 7 | 30 | 2004 | 2004年7月31日 |
SN28 | 7 | 30 | 2000 | 2000年7月31日 |
SN29 | 7 | 31 | 1925 | 1925年8月1日 |
SN30 | 7 | 31 | 1900 | 1900年8月1日 |
SN31 | 7 | 31 | 2004 | 2004年8月1日 |
SN32 | 7 | 31 | 2000 | 2000年8月1日 |
2 | 14 | 1925 | 1925年2月15日 | |
SN34 | 2 | 14 | 1900 | 1900年2月15日 |
SN35 | 2 | 14 | 2004 | 2004年2月15日 |
SN36 | 2 | 14 | 2000 | 2000年2月15日 |
SN37 | 2 | 29 | 1925 | 不正确的日期 |
SN38 | 2 | 29 | 1900 | 不正确的日期 |
SN39 | 2 | 29 | 2004 | 2004年3月1日 |
SN40 | 2 | 29 | 2000 | |
SN42 | 2 | 30 | 1925 | 不正确的日期 |
SN42 | 2 | 30 | 1900 | 不正确的日期 |
SN43 | 2 | 30 | 2004 | 不正确的日期 |
SN44 | 2 | 30 | 2000 | 不正确的日期 |
SN45 | 2 | 31 | 1925 | 不正确的日期 |
SN46 | 2 | 31 | 1900 | 不正确的日期 |
SN47 | 2 | 31 | 2004 | 不正确的日期 |
SN48 | 2 | 31 | 2000 | 不正确的日期 |
(3)SR
用例数量=(3+2)×(4+2)×(4+2)=5×6×6=180;不再一一列出。
更进一步:通过更仔细地研究年类,还可以精简测试用例集合,如果合并Y1和Y2,Y3和Y4,则48个用例将降低到24个。这样可能会遗漏1900和2000年2个闰年的特殊问题。具体看问题的需要和把握。更仔细地研究月份类,还可以将12月份单独划分出来,因为其与其他的不一样的地方是涉及到转下一年的问题。