7.1 等价类划分

7.1.1 定义

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。

等价类划分法是根据需求,把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。

7.1.2 有效、无效等价类

等价类划分可有两种不同的情况:有效等价类和无效等价类。

有效等价类

是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

无效等价类

与有效等价类的定义相反,无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

7.1.3 划分方法

划分等价类最重要的是集合的划分,各个集合是互不相交的子集,而所有子集的并集是整个取值范围的集合。

常见的需求中有如下几种划分情况:

1.输入条件规定了取值范围或值的个数,则可以确定一个有效等价类和两个无效等价类。

案例 有效等价类 无效等价类 无效等价类
成年人每分钟的心跳60-100之间为正常 60-100 < 60 > 100
一个输入框只能输入5个字符的长度 5 < 5 > 5

2.输入条件规定了输入值的集合,或是规定了必须如何的条件,则可以确定一个有效等价类和一个无效等价类。

案例 有效等价类 无效等价类
用户连续输入错误密码的次数最多为3次 0-3 > 3
C语言必须以分号结尾 分号结尾 非分号结尾

3.在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。

案例 有效等价类 无效等价类
性别是某一性别 给定性别 另一性别
单选中的选中 选中 未选中

4.在规定了输入数据的一组值(n个),并且程序要对每一个输入值分别处理的情况下,可以确定n个有效等价类,和一个无效等价类。

案例 有效等价类 有效等价类 有效等价类 有效等价类 无效等价类
规定学历可为:专科、本科、硕士、博士四种之一 专科 本科 硕士 博士 其他学历

5.在规定了输入数据必须遵守的规则的情况下,可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)

案例 有效等价类 无效等价类 无效等价类 无效等价类
规定必须输入非0的正整数 非0的正整数 0 -1 2.4

7.1.4 等价类划分法设计测试用例的步骤

  • 为每个输入划分等价类,得到等价类表,为每个等价类规定一个唯一编号;
  • 设计一个测试用例,使其尽可能多的覆盖所有尚未覆盖的有效等价类。重复这一步骤,使得有效等价类均被测试用例所覆盖,此时侧重减少测试用例的数量,提高效率;

  • 设计一个测试用例,使其只覆盖一个无效等价类。重复这一步骤使得所有无效等价类均被覆盖(通常,一条测试用例覆盖一个无效等价类),此时侧重为了确定是哪个因素的错误,每一种错误都被正确处理。

举例:微信红包输入金额。
需求:[0.01 - 200]。
有效等价类:[0.01 - 200],数字,小数点后小于等于两位。
无效等价类:0,< 0.01,> 200,非数字(字母,特殊字符等),小数点后大于两位。

设计用例时,可以用一条用例覆盖所有有效等价类,五条用例覆盖所有无效等价类。

7.1.5 优缺点

等价类划分法的优点是考虑了单个输入域的各类情况,避免了盲目或随机选取输入数据的不完整性和覆盖的不稳定性。

等价类划分法虽然简单易用,但是没有对组合情况进行充分的考虑。需要结合其他测试用例设计的方法进行补充。

7.1.6 练习

使用等价类划分法设计测试用例:

1.注册新浪邮箱的邮箱名,密码。https://mail.sina.com.cn/register/regmail.php

需求:

邮箱名:4-16个字符,可使用英文小写、数字、下划线,下划线不能在首尾。

密码:6-16位字符(字母、数字、特殊符号),区分大小写。

2.输入三个正整数 a、b、c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,即:一般三角形、等腰三角形及等边三角形。

需求:

三条边:3个数,非零数,整数,正数。
一般三角形:任意两边之和大于第三边。
等腰三角形:一般三角形中,两条边相等。
等边三角形:三条边相等。