6.7.1 等价类划分
等价类划分法是一种重要的、典型的黑盒测试方法,用这一方法设计测试用例完全不考虑程序的内部结构,而是只根据程序规格说明书对输入范围进行划分。等价类划分法的原理是把所有可能的输入数据,即程序的输入域划分成若干互不相交的子集,称为等价类。所有子集的并集则构成整个输入域。然后,从每一个子集中选取少量具有代表性的数据作为测试用例。因此,等价类对于测试有完备性和无冗余性两个重要的意义。
(1)等价类分类。软件不能都只接收有效的、合理的数据,还要经受意外的考验,即接收无效的或不合理的数据,这样的软件可靠性较高。因此,等价类按照其有效性可以分为两种,有效等价类和无效等价类。
①有效等价类。对于程序规格说明而言,由合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中预先规定的功能和性能。
②无效等价类。对于程序规格说明而言,由不合理的、无意义的输入数据构成的集合。利用无效等价类可检验程序是否有不符合规格说明中预先规定的功能和性能。对于具体的问题,无效等价类至少应有一个,也可能有多个。
(2)等价类划分原则。等价类划分方法先从程序的需求规格说明书中找出各个输入条件,再为每个输入条件划分等价类,形成若干互不相交的子集。常见的划分原则如下。
①在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
②输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。
③在输入条件是一个布尔型变量的情况下,可确定一个有效等价类和一个无效等价类。
④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步划分为更小的等价类。
在确立了等价类后,可建立等价类表,列出所有划分出的等价类,如表6.5所示。同时,也可以根据输出条件,列出输出域值的等价类,如表6.6所示。
(3)等价类划分法设计测试用例步骤。等价类划分法设计测试用例的步骤如下。
1)分析并确定等价类。
2)建立等价类表,列出所有划分出的等价类。
表6.5 等价类表(输入条件)

表6.6 等价类表(输出条件)(https://www.daowen.com)

3)根据列出的等价类表,按照以下三个步骤设计测试用例。
①为每一个等价类规定一个唯一的编号。
②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类。重复这一步骤,直到所有的有效等价类都被覆盖为止。
③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类。重复这一步骤,直到所有的无效等价类都被覆盖为止。
例6.2 城市的电话号码由两部分组成。这两部分的名称和内容分别如下。
地区码:以0开头的3位或者4位数字(包括0)。
电话号码:以非O、非1开头的7位或者8位数字。
假定被调试的程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的号码,就可用等价分类法来设计它的测试用例。
(1)划分等价类并编号,如表6.7所示。
表6.7 电话号码的等价类设计

(2)为有效等价类设计测试用例,如表6.8所示。
表6.8 电话号码的有效等价类测试用例设计

(3)为每个无效等价类至少设计一个测试用例,如表6.9所示。
表6.9 电话号码的无效等价类测试用例设计
