目录
|
等价分类法是指一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据划分为若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例。测试用例由有效等价类和无效等价类的代表数据组成,从而保证测试用例具有完整性和代表性。
换句话说,如果从某一等价类中任意选出一个测试用例未能发现程序的错误,就可以合理地认为在该类中的其他测试用例也不会发现程序的错误。这样,就把漫无边际的随机测试变成有针对性的等价类测试,有可能用少量有代表性的例子来代替大量内容相似的测试,借以实现测试的经济性。
一个程序结构的所有输入中,总可以找到一些有代表性的数据。这些有代表性的测试数据应包括对程序有效的输入,以及极端的、正常的和特殊的数据元素。
如果能把程序输入数据的可能值划分成若干“等价类”,在每一类中选定一组有代表性的数据,等价于其他数据,使这组数据能发现的错误,该类中的其他数据也可以发现;该组数据发现不了的错误,该类中其他数据也发现不了(除非该类例子中的某些数据也属于其他类)。这种测试用例设计方法就称为等价分类法。
用等价分类法设计测试用例可分两步进行:划分等价类和选定测试用例。
1、划分等价类
划分等价类的基本方法是:从程序的功能说明中找出各个输入条件,然后为每个输入条件划分等价类。
等价类分为两种:有效等价类和无效等价类。有效等价类是指属于程序的合理输入范围的那些数据,无效等价类是指非法的输入数据。等价类的划分取决于程序的功能要求和定义域,也取决于测试人员对问题的理解力和创造力,带有很大的试探性。下面几条可以作为划分等价类的参考准则:
(1)如果某个输入条件规定了值的范围,即可为它确定一个有效等价类和两个无效等价类;
(2)如果一个输入条件规定了输入的一组可能值,而且认为程序是用不同的方式处理每一种值的,则可为每一种值确定一个有效等价类,同时可以为它划分一个无效等价类;
(3)如果一个输入条件说明了一个“必须”的情况,则可为它确定一个有效等价类和一个无效等价类;
(4)如果某一等价类别中的元素有不同的处理方式,就应该把这个等价类划分成更小的等价类。
划分等价类在很大程度上是试探性的,下面几点可供参考:
(1)如果某个输入条件说明了输入值的范围 (如“数据值”是从 1到 999 ),则可划分一个合理等价类(大于等于 1而小于等于 999的数)和两个不合理等价类(小于 1的数,以及大于999的数)。
(2)如果某个输入条件说明了输入数据的个数(如每个学生可以选修 1至 3门课程),则可划分一个合理等价类(选修 1—3门课程)和两个不合理等价类(没选修课程,以及超过3门课程)。
(3)如果一个输入条件说明了一个“必须成立”的情况(如标识符的第一个字符必须是字母),则可划分一个合理等价类(第一字符是字母),和一个不合理等价类(第一字符不是字母)。
(4)如果某个输入条件说明了输入数据的一组可能的值,而且认为程序是用不同的方式处理每一种值的(如职称的输入值可以是助教、讲师、副教授和教授 4种),则可为每一种值划分一个合理等价类(如助教、讲师、副教授和教授 4种),并划分一个不合理等价类(上述 4种职称之外的任意值)。
(5)如果认为程序将按不同的方式来处理某个等价类中的各种测试用例,则应将这个等价类再分成几个更小的等价类。如上面第 4)点就是将一个合理等价类又分成助教、讲师等 4个等价类。
2、选定测试用例
(1)为每个等价类编号。
(2)设计一个新的测试用例,使它能包括尽可能多的尚未被包括的合理等价类;重复做这一步,直至这些测试用例已包括所有的合理等价类。
(3)设计一个新的测试用例,使它包括一个(而且仅仅一个)尚未被包括的不合理等价类,重复做这一步,直至测试用例已包括所有的不合理等价类。
必须注意的是:这一步应使每个例子仅包括一个不合理等价类。这样做的原因是;程序中的某些错误检测往往会抑制其他的错误检测,例如某个程序的功能说明中指出,输入数据是书的“类型”(它可以是“精装”、“平装”和“线装)和书的“数量”(其允许值是 1~999),如果某个测试用例中,书的“类型”是“活页”,书的“数量”是0,他包括了两个不合理的条件(“类型”和“数量”都不合理),程序在发现“类型”不合理之后,可能不会再去检查“数量”是否合理,因此这一部分程序实际上并没有测试到。
1、划分等价类不仅要考虑代表“有效”输入值的有效等价类,还须考虑代表“无效”输入值得无效等价类;
2、每一个无效等价类至少要用一个测试用例,不然就可能漏掉某一类错误,但允许若干有效等价类合用同一个测试用例,以便进一步减少测试的次数。