Skip to content
难度基础(★)
建议时长45分钟

7.6.3 黑盒测试

黑盒测试不研究代码如何实现,而是站在“使用者和需求规格”的角度问:给定输入,系统应该输出什么;输入不合法时,系统应该如何拒绝;多个业务条件组合时,应该触发哪个动作。

黑盒测试的核心思想

程序内部可能很复杂,但对黑盒测试来说,它先被抽象为一个输入输出转换器。

mermaid
flowchart LR
  I["输入数据/操作"] --> B["被测系统<br/>内部实现不可见"]
  B --> O["实际输出/状态变化"]
  S["需求规格/业务规则"] --> E["预期输出"]
  O --> C{"实际 = 预期 ?"}
  E --> C
  C -->|是| P["该用例通过"]
  C -->|否| F["发现缺陷或需求歧义"]

所以黑盒测试最依赖需求规格。如果需求本身模糊,黑盒用例也会模糊。

等价类划分

等价类划分的目标是减少用例数量。它假设某一类输入对程序来说具有相同处理逻辑,因此从每个等价类中挑一个代表值即可。

以成绩等级为例:

成绩范围等价类性质预期等级代表值
90 到 100有效等价类95
80 到 89有效等价类85
70 到 79有效等价类75
60 到 69有效等价类合格65
0 到 59有效等价类不合格55
小于 0无效等价类拒绝输入-1
大于 100无效等价类拒绝输入101

等价类划分的关键不是“随便选几个数”,而是先把输入空间按处理规则切开。每个有效类和无效类至少选一个代表值,才能覆盖正常和异常场景。

边界值分析

边界值分析来自一个非常朴素但有效的经验:程序最容易在边界处出错。比如把 >= 60 写成 > 60,或者把数组下标最大值处理错,都会导致边界缺陷。

对上面的成绩等级,边界点应重点测试:

边界边界内边界外或邻近值目的
最小合法值0-1、1检查下界
不合格/合格59、6058、61检查等级切换
合格/中69、7068、71检查等级切换
中/良79、8078、81检查等级切换
良/优89、9088、91检查等级切换
最大合法值10099、101检查上界

实际做题时,边界值常和等价类一起出现:等价类保证每个类别有代表,边界值专门检查类别交界处。

错误推测

错误推测依赖测试人员经验。它不是乱猜,而是根据历史缺陷、业务常识和常见编程错误推断哪里容易错。

常见推测方向包括:

  1. 空值、空字符串、全空格。
  2. 最大长度、超长输入、特殊字符。
  3. 0、负数、小数、极大数。
  4. 日期闰年、月底、跨年、时区。
  5. 重复提交、网络中断、权限变化。

错误推测的优势是能快速捕获经验性高发错误;缺点是依赖人的经验,不如等价类和边界值那样系统。

因果图与判定表

当多个输入条件共同决定输出动作时,仅靠等价类容易漏掉组合。因果图先表示“原因”和“结果”的逻辑关系,再转换成判定表。

例如一个优惠规则:会员可享折扣;订单金额满 100 可包邮;但黑名单用户不能下单。

条件/动作规则1规则2规则3规则4
是否会员任意
金额是否满 100任意
是否黑名单
允许下单
享受折扣
包邮

判定表适合“多条件、多动作、条件组合影响结果”的题干。因果图强调条件之间的逻辑关系,判定表强调把组合列出来以免遗漏。

方法对比

方法最适合的题目特征优点局限
等价类划分输入范围能分成若干类别用少量代表值覆盖大范围输入容易漏掉边界错误
边界值分析有上下限、区间、临界点对高发边界缺陷敏感不能覆盖复杂条件组合
错误推测有经验可借鉴、缺陷模式明显快速、灵活依赖经验,不够系统
因果图/判定表多条件组合决定动作覆盖组合关系清楚条件太多时表会膨胀

例题

单选
测试输入范围的最小值、最大值及其附近取值,属于:
单选
等价类划分设计用例时,更合理的做法是:

本节小结

黑盒测试依据需求规格设计用例。等价类解决“输入空间太大”,边界值解决“临界点容易错”,错误推测利用经验补漏洞,因果图和判定表处理“多个条件共同决定结果”。考试看到等价类、边界值、因果图,优先归为黑盒测试。