接着上一篇,这一篇来讨论黑盒测试,黑盒测试是基于功能说明的测试,它的目的是为了找出程序不符合功能说明的地方。上篇提到,由于产品逻辑的组合数量非常之大,无法通过穷举所有情况来构建测试用例,所以需要通过合理的策略来选取出一个测试用例的子集,通过这个子集来尽量多的发现程序中所隐含的错误。
一个比较经典的策略是基于等价类划分的黑盒测试方法。该方法通过合理的选取测试用例的子集来代表整体的用例集,所以基于等价类划分的黑盒测试包含如下两个特性
- 严格控制测试用例数量,减少测试用例数量
- 某分类下的测试用例需要反应的是某一类问题,也就是说使用该分类下的用例,哪些问题会被发现,哪些问题会被遗漏是明确的。
我们以三角形有效边定义来对黑盒测试方法进行说明:三角形的边为正数,并且两边之和大于第三边。
首先来说等价类划分,基于等价方法划分测试用例的步骤分为两步:1. 确定等价类;2. 生成测试用例。
等价类有可以分为两种:
- 有效等价类:程序的有效输入
- 无效等价类:程序的无效输入
根据三角形的定义和等价类划分的方法,分别确定有效等价类和无效等价类,并生成测试用例。
输入条件 | 有效等价类 | 无效等价类 | 测试用例 | 说明 |
三角形的边为正整数 |
|
| 有效输入:
1) A: 2; B: 3; C: 3
无效输入:
1) A: 0; B: 3; C: 3
2) A: 3; B: 0; C: 3
3) A: 3; B: 3; C: 0
| 假设三条边分别为:A, B, C |
两边之和大于第三边 |
|
| 有效输入
1) A: 2; B: 3; C: 3
无效输入
1) A: 3; B: 1; C: 4
2) A: 4; B: 2; C: 2
3) A: 2; B: 4; C: 2
| 假设三条边分别为:A, B, C
|
确定等价类的过程基本上会依赖于一个人过去的经验,对人的素质及经验依赖会比较大。利用集合的概念来讲述这些概念的话,那么假设输入的全集为 X, 那么有效输入为 Y, 那么无效输入就是在集合X里求Y的补集。
但是在利用等价划分的方法进行构建测试用例的话,会漏掉一些高效的测试用例。大量的实践经验证明在输入和输出等价类中,那些恰好在边界和边界附近的输入是经常出错的地方。所以需要在等价划分的基础上,再增加边界值分析。需要注意的是,边界值分析不仅仅需要关注输入空间,也需要关注结果空间。所以对于上述的输入,可以做出如下的测试用例作为补充:
输入条件 | 边界 | 分析 | 测试用例 | 说明 |
三角形的边为正整数
| 正数 | 正数的上下边界可以为-0.01,0,0.01 | 1) A:0.01; B:0.01;C:0.01
2) A:0; B:0; C:0
3) A:-0.01; B: -0.01; C:-0.01
| 假设三条边分别为:A, B, C
|
两边之和大于第三边
| 大于第三边 | 可以是等于,小于0.01;大于0.01 | 1)A:1; B: 1; C: 2
2)A:1; B: 0.09; C: 2
3)A:1; B:1.01; C: 2
| 假设三条边分别为:A, B, C
|
通过等价类划分和边界值分析法,通常能构建出对于简单问题的测试用例集合。但是如果遇到多输入条件的组合的情况下,如果利用上述方法则会产生大量的测试用例,而且很容易漏掉一些情况,这时候则需要利用其它的策略(因果图分析法)。由于作为程序员,在工程实践中较少对组合条件进行完全的测试,所以省略这部分讨论。
综上,在黑盒测试中,需要对输入和输出划分等价类,然后对边界值进行补充,当然可以基于个人经验对程序中可能产生的错误进行猜测,补充一部分测试用例。由此应该可以在程序员(非QA)的角度构建出一套较为可靠的测试用例。