从测试说起(二)

704 阅读4分钟
        接着上一篇,这一篇来讨论黑盒测试,黑盒测试是基于功能说明的测试,它的目的是为了找出程序不符合功能说明的地方。上篇提到,由于产品逻辑的组合数量非常之大,无法通过穷举所有情况来构建测试用例,所以需要通过合理的策略来选取出一个测试用例的子集,通过这个子集来尽量多的发现程序中所隐含的错误。
一个比较经典的策略是基于等价类划分的黑盒测试方法。该方法通过合理的选取测试用例的子集来代表整体的用例集,所以基于等价类划分的黑盒测试包含如下两个特性
  • 严格控制测试用例数量,减少测试用例数量
  • 某分类下的测试用例需要反应的是某一类问题,也就是说使用该分类下的用例,哪些问题会被发现,哪些问题会被遗漏是明确的。

我们以三角形有效边定义来对黑盒测试方法进行说明:三角形的边为正数,并且两边之和大于第三边。
首先来说等价类划分,基于等价方法划分测试用例的步骤分为两步:1. 确定等价类;2. 生成测试用例。
等价类有可以分为两种:
  1. 有效等价类:程序的有效输入
  2. 无效等价类:程序的无效输入

根据三角形的定义和等价类划分的方法,分别确定有效等价类和无效等价类,并生成测试用例。

输入条件 有效等价类 无效等价类 测试用例 说明
三角形的边为正整数
  1. A > 0 &&B > 0 && C > 0
  1. A < 0 || B < 0 ||C < 0
有效输入:
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 + B > C
  2. B + C > A
  3. A + C > B
  1. A + B <= C
  2. B + C <= A
  3. A + C <= B
有效输入
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)的角度构建出一套较为可靠的测试用例。