等价类划分法

概述

等价类划分法是黑盒测试用例设计中一种常用的设计方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完备性和代表性。

等价类划分法(ECP:Equivalence Class Partitioning) 是把所有可能的输入数据,即程序的输入域划分成若干子集,各个输入数据对于揭露程序中的错误都是等效的,它们具有等价特性,从每一个子集中选取少数具有代表性的数据作为测试用例。所有等价类的并集就是整个输入域。

也就是说,如果某一类中的一个例子发现了错误,这一等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则默认这一类中的其他例子也不会查出错误。当然这是有风险的,但是非穷举的测试都是基于风险的,而等价类与其他方法相比是最经济的。

基本概念

有效等价类

是指对软件规格说明来说,合理、有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足测试需求的功能和性能。

无效等价类

则和有效等价类相反,即不满足程序输入要求或者无效的输入数据所构成的集合。利用无效等价类可以检验程序异常情况的处理,才能确保软件具有更高的可靠性。

例如,检测软件输入条件是是否备份数据,那么有效等价类就是”备份数据”,无效等价类就是”不备份数据”。

等价类的意义

等价类有两个重要意义:

  1. 完备性:为整个输入域提供一种形式的完备性
  2. 无冗余性:所划分的子集之间互不相交则可保证某种程度上的无冗余性

等价类划分法的步骤

使用等价类划分法设计测试用例工作主要分成两个步骤完成。

第一步:设计等价类表

在分析需求规格说明的基础上划分等价类,然后列出等价类表。

输入条件有效等价类无效等价类

第二步:生成测试用例

  1. 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这个过程,直至所有的有效等价类均被测试用例所覆盖
  2. 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这个过程,直至所有的无效等价类均被测试用例所覆盖

注意:为什么不能只设计一个测试用例覆盖所有的无效等价类呢?

如果用单个测试用例覆盖无效等价类,会因为同时输入多个无效的测试可能屏蔽某些部分输入错误的检查。例如,如果设计密码测试用例输入”323#a”,包含有3个错误,系统可能只提示”密码位数少于6位”,那么我们无法确认系统是否约束了类型不相符的问题,而造成漏测。

再比如,如果规格说明规定了”请输入商品编号及数量(1~10)“,代表两个错误(商品编号错误和数量错误)的测试用例”ABC 12”,系统有可能只提示”商品编号不正确,请重新输入”,而屏蔽了对数量的约束的测试。

等价类划分的原则

等价类的划分是一个启发式的过程,遵循以下原则:

1. 按照区间划分

如果在输入条件规定了取值范围或值的个数的情况下,可以确定一个有效等价类和两个无效等价类。

例如:学生的成绩范围是0~100分,那么可以划分为1个有效等价类和2个无效等价类。

再比如,若规定一房产最多只能有5个业主,那么就应有1个有效等价类和2个无效等价类(没有业主和业主多于5个)。

如果输入是两个参数X1和X2的多个区间,则可以建立二维数轴的多空间划分,形成等价类,然后每个等价类空间中选取典型数据作为测试用例。

2. 按有限数划分

在规定了一组输入数据(假设包括有限n个输入值),并且程序要对每一个输入值分别进行处理的情况下,可确定n个有效等价类(每个值确定一个有效等价类)和一个无效等价类(所有不允许的输入值的集合)。

例如:输入值是学历,允许值:专科、本科、硕士、博士和博士后。那么就有5个有效等价类和1个无效等价类。

3. 按集合划分

在输入条件规定了输入值的集合或规定了”必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。

例如,规定”x是整数”,那么就一个有效等价类和一个无效等价类(x是非整数的实数)。

4. 按照限制条件或规则划分

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

例如,程序输入条件为以字符a开头、长度为8的字符串,并且字符串不包含’a’~‘z’之外的其它字符,则:

  • 有效等价类:满足了上述所有条件的字符串
  • 无效等价类:不以’a’开头的字符串、长度不为8的字符串、包含了’a’~‘z’之外其它字符的字符串

5. 细分等价类

在确知已划分的等价类中各元素在程序中的处理方式不同的情况下,则应再将该等价类进一步划分为更小的等价类,并建立等价类表。

等价类划分法的分类

1. 标准等价类测试

标准等价类测试不考虑无效数据值,测试用例使用每个等价类中的一个值。通常,标准等价类测试用例的数量和最大等价类中元素的数目相等。

2. 健壮等价类测试

(详细内容见课件)

3. 对等区间的划分

(详细内容见课件)

示例:三角形问题

利用输出域来定义等价类:

  • R1:{〈a,b,c〉:边为a,b,c的等边三角形}
  • R2:{〈a,b,c〉:边为a,b,c的等腰三角形}
  • R3:{〈a,b,c〉:边为a,b,c的一般三角形}
  • R4:{〈a,b,c〉:边为a,b,c不构成三角形}

总结

等价类划分法的步骤只有两步,其中最关键的是设计等价类的技巧,需要根据实际情况,依据等价类划分的原则进行划分,如果遇到难以划分的情况,至少可以划分成有效等价类和无效等价类两类,然后再进一步尝试细分子类。

大题总结

等价类表

输入条件有效等价类无效等价类
根据题目中的条件竖向列出来符合当前条件的叙述不符合当前条件的等价类
(且需要为每个有效等价类、无效等价类编写编号,类似于(1))

通过等价类划分法而画出来的测试用例表

输入数据期望输出覆盖范围(填写上面说的等价类编号)

尽可能用最少的用例来覆盖最多的有效等价类 但无效等价类至少一个编号一个用例

但例如三角形问题,输入条件很多或者无法清晰的列出来,可以从其值域入手,跳过等价类表,直接写出测试用例

具体大题,可以参考 https://mooc1.chaoxing.com/mycourse/studentstudy?chapterId=1027575762&courseId=254818175&clazzid=126352355&cpi=344751155&enc=7a4d40f10774d3ce0e43fb1887ef9232&mooc2=1&hidetype=0&openc=baaeb5a0e8b45a91e400c73aad900678


练习题

某在线课程的”成绩录入”系统要求教师输入学生的百分制成绩,有效范围为0到100之间的整数(包含0和100)。系统应能正确识别有效成绩并存入数据库,对于无效输入应给出明确的错误提示。

请使用等价类划分法为该系统的成绩输入功能设计测试用例,要求:

  1. 列出所有划分出的有效等价类和无效等价类,并为每个等价类编号
  2. 根据等价类设计一组测试用例