黑盒测试方法
等价类划分法
1. 介绍
等价类划分是一种典型的黑盒测试方法。等价类划分是指分步骤把海量(无限)的测试用例集减得很小,但过程同样有效。也就是说,选取足够小测试用例,发现更多软件缺陷。
2. 划分等价类
等价类划分有两种不同情况:有效等价类和无效等价类。
有效等价类
是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明所规定的功能和性能。
无效等价类
是指对于程序的需求规格说明来说是不合理的,无意义的输入数据构成的集合。对于具体的问题,无效等价类至少应有一个,也可能多个。
利用无效等价类可检验程序对于无效数据的异常处理能力(检验过程)。
设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。
3. 测试用例完整性划分
根据测试用例的完整性可以划分:
弱一般等价类测试
强一般等价类测试
弱健壮等价类测试
强健壮等价类测试
下面使用二分法来说明测试用例的完整性:
健壮是指要考虑无效值。
强是指要考虑组合情况,使用笛卡尔积算出测试用例个数。
例题:电话划分
使用下面例子分别说明它们区别:
某城市电话号码由三部分组成。
地区码:空白或三位数字;
前缀:不能1和2开头的三位数字;
后缀:4位数字。
根据上面信息划分等价类:
弱一般等价类
使用最少测试用例覆盖每个有效等价类。在上面例子弱一般等价类的用例如下:
强一般等价类
强一般等价类是基于多缺陷假设,强一般等价类的测试用例是要覆盖每个有效等价类取值的笛卡尔积。即在有效等价类取值的所有组合。组合个数是2 * 1 *1=2。
弱健壮等价类
在弱一般等价类的基础上,增加取值为无效值的情况。对于无效输入,测试用例将拥有一个无效值,并保持其余的值是有效的。
强健壮等价类
在强一般等价类的基础上,增加取值为无效值的情况。也是运用笛卡尔积思路得出测试用例。
测试用例个数有:(2+3)*(1+5) * (1+3)=5 * 6 * 4 = 120(个),用例数量太多,就不意义列出来了。
每一项的(有效等价类个数+无效等价类个数)
上面从四个不同方面来思考怎样设计测试用例,我们需要选取如何测试用例,发现更多缺陷呢?正如我们在开头提到:
等价类划分是指分步骤把海量(无限)的测试用例集减得很小,但过程同样有效。
例题:三角形问题
某程序规定:“输入三个整数a、b、c分别作为三边的边长构成三角形。
通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形、等边三角形时,分别做计算。。。”
用等价类划分方法为该程序进行测试用例设计。
(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)
分析题目中给出和隐含的对输入条件的要求:
- 整数
- 三个数
- 非零数
- 正数
- 两边之和大于第三边
- 等腰
- 等边
如果 a,b,c
满足条件(1)~(4),则输出下列四种情况之一:
(1)如果不满足5,输出 非三角形
(2)如果三条边相等,则程序输出 等边三角形
(3)如果两条边相等,既满足条件(6),程序输出 等腰三角形
(4)如果三条边都不相等,则程序输出 一般三角形
列出等价类表并编号:
覆盖有效等价类的测试用例:
a | b | c | 覆盖等价类号码 |
---|---|---|---|
3 | 4 | 5 | (1),(7) |
4 | 5 | 5 | (1),(7),(8) |
5 | 4 | 5 | (1),(7),(10) |
4 | 4 | 4 | (1),(7),(11) |
覆盖无效等价类的测试用例:
a | b | c | 覆盖等价类号码 | a | b | c | 覆盖等价类号码 |
---|---|---|---|---|---|---|---|
2.5 | 4 | 5 | 12 | 0 | 0 | 5 | 29 |
3 | 4.5 | 5 | 13 | 3 | 0 | 0 | 30 |
3 | 4 | 5.5 | 14 | 0 | 4 | 0 | 31 |
3.5 | 4.5 | 5 | 15 | 0 | 0 | 0 | 32 |
3 | 4.5 | 5.5 | 16 | -3 | 4 | 5 | 33 |
3.5 | 4 | 5.5 | 17 | 3 | -4 | 5 | 34 |
4.5 | 4.5 | 5.5 | 18 | 3 | 4 | -5 | 35 |
3 | 19 | -3 | -4 | 5 | 36 | ||
4 | 20 | -3 | 4 | -5 | 37 | ||
5 | 21 | 3 | -4 | -5 | 38 | ||
3 | 4 | 22 | -3 | -4 | -5 | 39 | |
4 | 5 | 23 | 3 | 1 | 5 | 40 | |
3 | 5 | 24 | 3 | 2 | 5 | 31 | |
3 | 4 | 5,6 | 25 | 3 | 1 | 1 | 42 |
0 | 4 | 5 | 26 | 3 | 2 | 1 | 43 |
3 | 0 | 5 | 27 | 1 | 4 | 2 | 44 |
3 | 4 | 0 | 28 | 3 | 4 | 1 | 45W |
使用方法
等价类使用方法说明如下:
按照输入条件建立有效等价类和无效等价类,列出所有划分出的等价类。
为每一个等价类规定一个唯一的编号。
设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
根据以上说明,弱健壮等价类是符合以上要求。在使用等价类划分法设计测试用例的的重点在于划分有效等价类和无效等价类粗细的粒度。
粒度越粗,设计测试用例越少,粒度越细,设计测试用例越多。相对来说,粒度越细能发现更多问题。