Skip to content

黑盒测试方法论-等价类

黑盒测试方法论-等价类

简介

等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格即可。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。

这种方法需要把用户所有可能输入的数据,划分成了若干份(或者也可以叫做若干个子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种测试用例称为“等价类划分法”。

等价类分类

  • 有效等价类:指符合《需求文档》,输入合理的数据集合。
  • 无效等价类:指不符合《需求文档》,输入不合理的数据集合。

使用场景

在有限的测试资源的情况下,使用等价类划分法可以用少量有代表性的数据得到比较好的测试效果。

等价类划分原则

  1. 规定输入的取值范围或个数时,划分一个有效和两个无效
  2. 规定了输入的集合或规则必须要遵循的条件,则划分一个有效和一个无效
  3. 输入条件是一个布尔值,则划分为一个有效和一个无效
  4. 输入条件时一组数据,并且每一个输入的值做不同的处理,则划分若干个有效和一个无效
  5. 输入条件规定了必须要遵循的某些规则下,则划分为一个有效和若干个无效
  6. 不是所有的等价类都有无效等价类

等价类设计步骤

  1. 先划分等价类:找出所有可能的分类
  2. 确定有效等价类:需求中的条件
  3. 确定无效等价类:与条件相反的情况,再找到特殊情况
  4. 从各个分类中挑选测试用例数据

等价类划分示例

计算器:到底输入几组数据才算测试完毕?

要求的是两位的整数。如果要一个一个测试,那数据量得非常大,这样效率太低了。那为了解决这个问题,可以采用等价类划分的方法。

下面以两位整数加法计算器中,第一个数的输入框为例,使用等价类划分法来分析。

  1. 确定这个输入框的所有可能的输入集合,在这里就应该是键盘上所有可能的输入。

  2. 把键盘上所有的输入分成若干子集:

  1. 在确立了等价类之后,可按下表的形式列出所有划分出的等价类表
输入条件 有效等价类 无效等价类
2 位整数 -99 ~ 99 的整数 其他整数
小数
字母
汉字
特殊字符
不输入
  1. 从各个分类中挑选测试用例数据:
测试对象 等价类 覆盖等价类 用例数据
输入框 -99 ~ 99 的整数 有效 50
输入框 其他整数 无效 120
输入框 小数 无效 30.12
输入框 字母 无效 ab
输入框 汉字 无效 十二
输入框 特殊字符 无效 $%
输入框 不输入 无效
  1. 设计测试用例

接下来就开始测试用例的编写。先写一个很简单的用例,只包含最关键的一些信息,比如用例编号,属于的等价类,两个输入框中的测试数据,还有预期结果。

因为这里想要得到最终结果的话涉及到了多个元素,这里就需要输入两个值。

所以在这种情况下要注意,如果是要覆盖无效等价类的话,设计测试用例的时候,当前元素覆盖无效等价类,用例中涉及到的其他元素要保持有效。

比如这里有两个输入框,一个框输入错误的值,另一个框就需要输入正确的值,并且要正确点击按钮,这样可以更容易确定出现的错误是哪里引起的。

用例编号 所属等价类 输入框1 输入框2 预期结果
1 有效 50 40 90
2 输入框1无效 120 30 给出错误提示信息
3 输入框1无效 -111 30 给出错误提示信息
4 输入框1无效 30.12 20 给出错误提示信息
5 输入框1无效 ab 10 给出错误提示信息
6 输入框1无效 十二 39 给出错误提示信息
7 输入框1无效 $% 87 给出错误提示信息
8 输入框1无效 为空 91 给出错误提示信息
9 输入框2无效 35 120 给出错误提示信息
10 输入框2无效 59 -123 给出错误提示信息
11 输入框2无效 24 30.12 给出错误提示信息
12 输入框2无效 12 ab 给出错误提示信息
13 输入框2无效 76 十二 给出错误提示信息
14 输入框2无效 83 $% 给出错误提示信息
15 输入框2无效 95 为空 给出错误提示信息

这就是第一个简单的测试用例,当然了里面包含的内容还不完善,后面还需要进行补充。

下面再对输入域等价类划分思路做个总结:

  • 长度
  • 类型
  • 组成规则
  • 是否为空
  • 是否重复
  • 是否去除空格

总结

等价类划分法非常简单,也很容易理解的,是测试用例设计中使用最广泛的一种测试用例设计方法。

它的优点是考虑了单个输入域,所有可能的取值情况,避免了我们在设计用例时盲目或随机选取输入测试不完整或不稳定的数据。

最大的缺点就是产生的测试用例比较多,而且在设计时,可能会产生一些无效的测试用例,也没有对特殊点进行考虑,所以在设计时需要结合其他的设计方法进行补充。