本文已参与「新人创作礼」活动.一起开启掘金创作之路。
NextDate函数正交测试法
【题目描述】
NextDate函数包含三个变量: month (月份)、day(日期)和year(年),函数的输出为输入日期后一天的日期。例如输入为2007年9月9日,则函数的输出为2007年9月10日。要求输入变量 month 、day和year均为整数值,并且满足下列条件:
(1)1≤month≤12
(2)1≤day≤31
(3)1912≤year≤2050
【题目分析】
此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂性的来源有两个:一个是输入域的复杂性,另一个是指闰年的规则。例如变量year和变量month取不同的值,对应的变量day 会有不同的取值范围,day值的范围可能是1~30或1~31,也可能是1~28或1~29。
解:
1. 以输入域划分等价类
关于每个月份的天数问题,可以详细划分为以下等价类:
M1 = {month: month有30天 }(4,6,9,11)
M2={month: month有31天,除去12月 }(1,3,5,7,8,10)
M3 = {month: month是2月}
M4 ={month: month是12月}
M5 = {month:month,如不合法,不在M1~M4中}
D1={day: 1≤day≤27}
D2={day: day=28}
D3={day: day=29}
D4={day: day =30]
D5={day: day=31}
D6={day:day不合法,如day<1或day>31}
Y1 ={year: year是闰年}
Y2={year: year不是闰年}
Y3={year:year不合法,如year<1912或year>2050}
2. 根据划分的等价类划出因果状态表
| 状态 因素 | month | day | year |
|---|---|---|---|
| 0 | M1 | D1 | Y1 |
| 1 | M2 | D2 | Y2 |
| 2 | M3 | D3 | Y3 |
| 3 | M4 | D4 | |
| 4 | M5 | D5 | |
| 5 | D6 |
(1)被测项目中一共有三个被测对象,每个被测对象的状态都不一样。
(2)选择正交表
1.表中的因素>=3
2.表中至少有三个因素的水平数>=3
3.行数取最少的一个
4.最后选中的正交表公式:L36(2103162)
通过分析,使用自动化正交表生成工具Allpairs生成正交测试用例如下:
注:~X表示可以取任意值
测试用例1
| 测试用例编号 | M-D-Y-NextDay-001 |
|---|---|
| 测试项目 | 测试Nextday函数是否正常 |
| 测试标题 | Nextday函数 |
| 重要级别 | 高 |
| 预置条件 | 处理输入参数外,其他情况正常 |
| 输入 | 2月 28日 2008年 |
| 预期输入 | 2008年2月29日 |
测试用例2
| 测试用例编号 | M-D-Y-NextDay-002 |
|---|---|
| 测试项目 | 测试Nextday函数是否正常 |
| 测试标题 | Nextday函数 |
| 重要级别 | 高 |
| 预置条件 | 处理输入参数外,其他情况正常 |
| 输入 | 2月 28日 2022年 |
| 预期输入 | 2022年3月1日 |
测试用例3
| 测试用例编号 | M-D-Y-NextDay-002 |
|---|---|
| 测试项目 | 测试Nextday函数是否正常 |
| 测试标题 | Nextday函数 |
| 重要级别 | 高 |
| 预置条件 | 处理输入参数外,其他情况正常 |
| 输入 | 13月 1日 1900年 |
| 预期输入 | 输入日期无效 |