等价类,作为最常用的测试方法之一,最难的地方可能就有两点:如何对每个输入元素进行合适的有效及无效等价类划分,太细,则冗余,太粗,则覆盖率降低;另外对于元素之间有关联和制约关系的情况来说,也需要进行合适的有效及无效等价类划分(如下面的“下一日期”软件中年、月、日之间就存在一定的制约关系)。
以C#语言编写的“下一日期”软件进行等价类设计分析。

第一步,对每个输入条件进行等价类拆分
|
输入 |
输入条件 |
有效等价类 |
无效等价类 |
|
年 |
正整数 |
正整数 (1) |
小数、字母、特殊字符(9) |
|
闰年/非闰年 |
非闰年 (2) |
| |
|
>0 |
>0 (6) |
<=0 (10) | |
|
必填 |
填写 (7) |
为空(11) | |
|
Int型有效性 |
-2147483648 ~ 2147483647 (8) |
<-2147483648 (12) | |
|
月 |
正整数 |
正整数 (14) |
小数、字母、特殊字符 (20) |
|
1~12 |
二月 (15) |
<1 (21) | |
|
必填 |
填写 (18) |
为空 (23) | |
|
Int型有效性 |
-2147483648 ~ 2147483647 (19) |
<-2147483648 (24) | |
|
日 |
正整数 |
正整数 (26) |
小数、字母、特殊字符 (33) |
|
1~31 |
1~28(非闰年2月)(27) |
<1 (34) | |
|
必填 |
填写 (31) |
为空 (36) | |
|
Int型有效性 |
-2147483648 ~ 2147483647 (32) |
<-2147483648 (37) | |
|
特殊值 |
BIOS重置日期 |
1/19/2038 (39) |
|
说明:
1. 正整数的无效等价类没有拆分为如非正整数的整数、小数、字母、特殊字符这几大类,而是统一为一类,原因在于对于C#而言,转换文本框中的String值转换int型值时,如果字符串为小数、字母、特殊字符等,均会以异常处理,另外0和负整数属于数值区间中无效等价类的子集,为了避免冗余重复,此处可以忽略。
2. Int型有效性是个非常隐藏的输入条件,如果出入值超出了Int型的定义范围,C#会报出异常,以此检测程序的异常处理。当然无效等价类中的这个年份非常之大,实际使用中用户填写该年份的概率很小,因此bug等级比较低。
注,上述表格中的int有效区间定义的C#中32位类型
3. 还有一个很隐蔽的异常测试就是BIOS时间的有效区间。该时间被统一定义为是从1970年1月1日的零时开始计算的(这也是为什么很多计算机或设备上日期设置的下限是该时间,再早就不能设置了)。目前大部分机器是32位机器,所以BIOS用32位数字表述时间的话,最大的时间值为2038年1月19日03:14:08,此时计算机将重置时间为1901年12月13日零时(那时候估计没有人会在用32位机器了O(∩_∩)O~)
4. 对于欧洲立法中的教皇阳历规定(9/3/1752~9/13/1752 这十一天在历史上是不存在的),上述表格没有表述。
第二步,创建测试用例
原则:创建一条测试用例尽可能多的覆盖有效等价类;创建一条测试用例覆盖单个无效等价类,其他参数均以有效值填写
|
|
年 |
月 |
日 |
期望值 |
用例编号 |
|
有效等价类 |
1,2,6,7,8 |
14,15,18,19 |
26,27,31,32 |
下一日期 |
1 |
|
1,3,6,7,8 |
14,15,18,19 |
26,28,31,32 |
下一日期 |
2 | |
|
1,4,6,7,8 |
14,15,18,19 |
26,27,31,32 |
下一日期 |
3 | |
|
1,5,6,7,8 |
14,15,18,19 |
26,28,31,32 |
下一日期 |
4 | |
|
1,2,6,7,8 |
14,16,18,19 |
26,29,31,32 |
下一日期 |
5 | |
|
1,3,6,7,8 |
14,17,18,19 |
26,30,31,32 |
下一日期 |
6 | |
|
39 |
下一日期 |
7 | |||
|
无效等价类 |
9 |
14,17,18,19 |
26,30,31,32 |
错误信息 |
8 |
|
10 |
14,17,18,19 |
26,30,31,32 |
错误信息 |
9 | |
|
11 |
14,17,18,19 |
26,30,31,32 |
错误信息 |
10 | |
|
12 |
14,17,18,19 |
26,30,31,32 |
错误信息 |
11 | |
|
13 |
14,17,18,19 |
26,30,31,32 |
错误信息 |
12 | |
|
1,2,6,7,8 |
20 |
26,30,31,32 |
错误信息 |
13 | |
|
1,2,6,7,8 |
21 |
26,30,31,32 |
错误信息 |
14 | |
|
1,2,6,7,8 |
22 |
26,30,31,32 |
错误信息 |
15 | |
|
1,2,6,7,8 |
23 |
26,30,31,32 |
错误信息 |
16 | |
|
1,2,6,7,8 |
24 |
26,30,31,32 |
错误信息 |
17 | |
|
1,2,6,7,8 |
25 |
26,30,31,32 |
错误信息 |
18 | |
|
1,2,6,7,8 |
14,17,18,19 |
33 |
错误信息 |
19 | |
|
1,2,6,7,8 |
14,17,18,19 |
34 |
错误信息 |
20 | |
|
1,2,6,7,8 |
14,17,18,19 |
35 |
错误信息 |
21 | |
|
1,2,6,7,8 |
14,17,18,19 |
36 |
错误信息 |
22 | |
|
1,2,6,7,8 |
14,17,18,19 |
37 |
错误信息 |
23 | |
|
1,2,6,7,8 |
14,17,18,19 |
38 |
错误信息 |
24 | |
说明:
1. 填充实际测试数据时,切忌都选择边界值进行测试;应选择区间数据的中间随机值;每次抽取的测试数据应选择不同的值,以提高测试覆盖率。
2. 对于年份、月份、日期之间的制约关系(如闰年2月有29天)在有效等价类中以三组进行了涵盖。
3. 上述表格中没有考虑边界值的取值。
本文详细介绍了在C#语言中对‘下一日期’软件进行等价类测试的设计与分析,包括输入条件的等价类拆分和测试用例创建。讨论了正整数的无效等价类划分,C#中Int类型的限制,以及BIOS时间的有效区间。测试用例设计遵循覆盖有效等价类和单个无效等价类的原则,并强调了避免边界值陷阱,提高测试覆盖率的重要性。

3585

被折叠的 条评论
为什么被折叠?



