2.1.3 基于输出的等价类/边界值划分
等价类/边界值除了可以以输入进行分类,也可以以输出进行分类,如案例2-3所示。
案例2-3:公园门票规定:
- 身高1.2m以下的儿童免票;[J1]
- 身高1.2~1.4m的儿童半票(含1.2m);
- 年龄在60~69岁之间的老人半票(含60岁);
- 年龄在70岁以上的老人免票(含70岁);
- 在校学生半票(不含在职学生、电大学生);
- 革命烈士家属、现役军人免票。
我们可以划分等价类为全票、半票和免票,见表2-3。
表2-3 公园门票等价类/边界值
编号 |
输出 |
输入 |
边界值 |
1 |
免票 |
身高1.2m以下儿童 |
身高1.19m/1.2m儿童 |
年龄在70岁以上的老人 |
年龄69岁/70岁的老人 |
||
革命烈士家属 |
革命烈士家属 |
||
在职军人 |
在职军人 |
||
2 |
半票 |
身高1.2~1.4m的儿童 |
身高1.2m/1.21m儿童 |
年龄在60~69岁之间的老人 |
年龄59岁/60岁/69岁/70岁的老人 |
||
在校学生(不含在职学生,电大学生) |
在校学生 |
||
3 |
全票 |
身高1.2m以上儿童 |
身高1.21m的儿童 |
年龄在70岁以下的老人 |
年龄在49岁的老人 |
||
在职学生,电大学生 |
在职学生,电大学生 |
2.1.4 测试用例的设计
如果系统中有多处需要使用等价类设计的测试用例,对于有效等价数据类,可以在一个测试用例中使用;而对于无效等价类数据,在一个测试用例中只能出现一个。
案例2-4:等价类测试。
图2-1是用户信息输入的部分界面,针对这个界面设计测试用例。
图2-1 用户信息输入的部分界面
注:这里性别也需要输入,只允许输入“男”和“女”。
对于有效等价数据类,设计测试用例如下。
(1)姓名:小明,年龄:0岁,性别:男
(2)姓名:阿拉克拉姆,年龄:130岁,性别:女
而对于无效等价类,如果设计的测试用例为
姓名:明,年龄:200岁,性别:男
那么系统如果只报告了姓名有误,而没有报告年龄有误的信息,就无法知道年龄是否在程序中进行了有效性检验。也就是说,出现“缺陷屏蔽”,所以,对于无效等价类,测试用例应该细化如下。[J7]
(1)姓名:克,年龄:13,性别:男。
(2)姓名:阿拉克拉姆萨,年龄:13,性别:男。
(3)姓名:@ @,年龄:13,性别:男。
(4)姓名:小明,年龄:134,性别:男。
(5)姓名:小明,年龄:13,性别:中。
这样就可以看出:有效等价类的总个数为每个用例有效等价类个数的笛卡儿积(1×1×2=2);而无效等价类的总个数为每个用例有效等价类个数的和(1+1+3=5)。
另外,如果只要求测试等价类,而对边界值测试要求不高,在测试用例的设计中尽可能多地用到边界值。
案例2-5:由于边界值测试不完善带来的Bug。
这是我亲自遇到的一个案例。有一天我去上海某医院看病,由于手头现金没有带够,需要在医院的门口一台ATM机上取款,取款机上有一个提示,“一次取一款不得多于¥2000,每天最多取5次”,于是我用我的借记卡准备取¥2000,系统却告诉我“已经超过一次取款的最大金额”,我感到很纳闷,于是改为¥1900,取款成功;作为测试工程师,我马上就意识到该系统中的边界值测试没有做好或者根本没有进行边界值的测试。
2.1.5 案例
案例2-6:日历等价类/边界值测试。
最后以一个案例作为本节的结束,如图2-2所示。
图2-2 出生年月日的等价类/边界值测试用例设计
等价类/边界值测试法是最基本的测试用例设计方法,不管是函数级别的软件测试,还是系统级别的软件测试都可以使用。
顾翔凡言:
敏捷具有适用性,即使用了敏捷,也不要做成假敏捷,掌握敏捷的真谛。