黑盒测试之等价类测试详解

思路

将所有可能输入的数据(输入域)划分为多个部分(子集),从每个子集里面选取少量有代表性的数据作为测试用例,例如从 0~100 的整数集合中选取最小值0、最大值100、中间值50。

有效等价类 VS 无效等价类

有效等价类是指符合程序功能设计“初衷”的输入数据集合,无效等价类正相反,例如我写了个判断整数是否属于 0~100 范围的程序,那10、20、33这些数的集合就属于有效等价类,反之0.5(小数)、“二十”(字符串)、200(超出范围)这些数的集合就属于无效等价类。

划分等价类的方法

首先分析程序所有可能的输入与输入特征,然后选取以下某个划分方法

等价类划分时需要特殊注意默认值、空值、Null等特殊情况

当输入为取值范围时

采用按区间划分,划分出一个有效等价类和两个无效等价类。

例如输入月份,合理的输入范围是 1~12,那么有效等价类就是 1 <= 月份 <= 12,无效等价类就是 月份 < 1 和 月份 > 12。

当输入为一组固定值且不同值之间需要分别处理

采用按数值划分,划分出 n 个(固定值的数量)有效等价类和一个无效等价类。

例如输入交通方式,值被限定为 {火车、高铁、飞机、汽车} (4 个固定值)中的某一个,有效等价类就是交通方式 = 火车、交通方式 = 高铁、交通方式 = 飞机、交通方式 = 汽车(四个有效等价类),无效等价类就是交通方式 = 除火车、高铁、飞机、汽车以外的所有值构成的集合

当输入被要求为“必须如何如何”时

采用按数值集合划分,划分出一个有效等价类和一个无效等价类。

例如输入被要求必须是以 1 开头的数字,那就可以划分出一个有效等价类:所有以1开头的数字和一个无效等价类:所有不以1开头的数字。

当输入是布尔值时

直接得到有效等价类:True 和无效等价类:False。

建立等价类表

案例:输入生日,将其分为年月日三部分划分等价类并建表

输入有效等价类编号无效等价类编号
年份1900 ~ 2024(今年)的数字1小于 1900 的数字4
大于 2024(今年)的数字5
非数字输入6
月份1~12 之间的数2小于 1 的数字7
大于 12 的数8
非数字输入9
日数1~31 之间的数字3小于 1 的数字10
大于 31 的数字11
非数字输入12

编写测试用例

排列组合有效等价类全部覆盖,然后每个无效等价类各来一遍,总数 = 有效等价类数量 / 输入条件数量的商向上取整后 + 无效等价类数量

测试用例编号年份月份日数预期结果覆盖等价类
12001103接受1,2,3
21800615拒绝4
32050615拒绝5
4二零零一615拒绝6
52001015拒绝7
620011315拒绝8
7200115拒绝9
8200160拒绝10
92001632拒绝11
1020016十五拒绝12
0%