1. 课程导入与全流程认知

大家好,我是这次课程的主讲。在测试这个行当摸爬滚打了十几年,我见过太多「用例写了几百条,上线还是出问题」的案例。说白了,测试用例不是凑数量,而是用最少最精的用例,覆盖住最可能出问题的区域。

这一章,我们就把测试用例设计的几大核心方法掰开揉碎。你想想看,如果连用例都设计不好,后面的问题闭环根本无从谈起。

1.1 等价类划分:别在同一个坑里反复测试

等价类划分,是我个人习惯用的第一招。它的核心思想很简单:把输入数据分成若干「等价类」,每个类里挑一个代表测就行。

为什么能这么干? 因为同一类里的数据,程序处理逻辑是一样的。你测了 18 岁,就没必要再测 19 岁——除非边界上有特殊逻辑。

核心原则:
  • 有效等价类:符合需求、程序能正常处理的数据
  • 无效等价类:不符合需求、程序应该拒绝或报错的数据

举个例子,一个年龄输入框,要求 1-120 岁整数:

类型 等价类 代表值
有效 1-120 之间的整数 25、60、1、120
无效 小于 1 的整数 0、-5
无效 大于 120 的整数 121、200
无效 非整数 3.14、abc、空
我的经验: 无效等价类往往比有效等价类更容易发现 bug。我曾经测一个支付系统,有效金额测了十几条全过,结果输了个负数,系统直接给用户账户加钱了……嗯,从那以后我再也不敢轻视无效等价类。

1.2 边界值分析:bug 最爱藏在边界上

边界值分析,说白了就是等价类划分的「黄金搭档」。为什么?因为程序员写代码时,最容易在边界条件上犯错——比如 if (age >= 18) 写成了 if (age > 18),那 18 岁的人就被拒了。

边界值分析的核心: 取每个等价类的边界值及其相邻值。

还是年龄 1-120 的例子:

  • 上点:1、120(边界本身)
  • 离点:0、2、119、121(边界两侧最近的值)
  • 内点:60(边界内的任意值)
注意: 边界值分析不是只测边界,而是「边界 + 边界附近」。我见过有人只测了 1 和 120,结果 0 和 121 没测,上线第一天就崩了。

1.3 因果图法:当多个条件互相影响时

因果图法,适合处理「多个输入条件组合决定一个输出结果」的场景。比如登录功能:用户名正确、密码正确、验证码正确,三个条件同时满足才能登录成功。

我个人习惯先画因果图,再转成判定表。步骤很简单:

  1. 列出所有输入条件(因)
  2. 列出所有输出结果(果)
  3. 画出条件之间的逻辑关系(与、或、非)
  4. 转成判定表,覆盖所有组合

举个例子,一个简单的登录判定:

用户名正确 密码正确 验证码正确 登录结果
Y Y Y 成功
Y Y N 失败
Y N Y 失败
N Y Y 失败
……(其余组合均为失败)
避坑指南: 我曾经用因果图测一个审批流程,画了 8 个条件,理论上 256 种组合。但实际业务中很多组合不可能出现——比如「已审批」和「待审批」不会同时为真。所以一定要先排除无效组合,别傻乎乎全测。

1.4 正交实验法:用最少的组合覆盖最多的场景

正交实验法,说白了就是「用数学方法帮你偷懒」。当条件太多、组合爆炸时,正交表可以用最少的测试用例,覆盖两两组合之间的所有情况。

比如一个搜索功能,有 4 个条件,每个条件 3 个取值:

  • 关键词:有、无、空
  • 分类:全部、图书、电子
  • 排序:相关、销量、价格
  • 价格区间:0-50、50-100、100+

全组合要测 3⁴ = 81 种。用正交表 L9(3⁴),9 条用例就够了。

什么时候用正交法?
  • 条件数量 ≥ 3
  • 每个条件的取值数量 ≥ 2
  • 你不想测全组合(太费时间)
  • 你也不确定哪些组合更重要

1.5 场景法:从用户视角出发

场景法,是我最推荐新手优先掌握的方法。因为它最贴近真实用户的使用方式。

核心思路: 模拟用户从开始到结束的完整操作流程。比如网购:搜索商品 → 加入购物车 → 下单 → 支付 → 查看订单状态。

场景法通常分两种:

  • 基本流: 用户正常操作,一切顺利
  • 备选流: 用户操作出错、中断、异常退出

举个例子,支付场景:

场景类型 操作路径 预期结果
基本流 余额充足 → 输入密码 → 支付成功 订单状态变为「已支付」
备选流 1 余额不足 → 提示充值 → 取消支付 订单状态不变
备选流 2 密码错误 3 次 → 锁定账户 提示账户已锁定
备选流 3 支付中网络中断 → 重试 → 支付成功 最终状态一致
注意: 场景法容易遗漏「边界场景」。比如用户支付到一半,突然关掉 App——这种场景你写用例时可能想不到,但用户一定会做。我的建议是:场景法 + 边界值分析一起用,互补。

1.6 如何从需求文档提取测试点

这是很多新人的痛点。拿到一份几十页的需求文档,不知道从哪里下手。我分享一个自己用了多年的「四步法」:

  1. 通读需求,标记功能点 —— 先别想测试,只搞清楚「系统要做什么」
  2. 识别输入输出 —— 每个功能点,输入是什么?输出是什么?
  3. 找出约束条件 —— 有没有限制?比如金额不能为负、时间不能早于今天
  4. 画出业务流程图 —— 把功能点串起来,看看数据怎么流转

举个例子,一个注册功能的需求文档:

  • 功能点:用户注册
  • 输入:手机号、验证码、密码、确认密码
  • 输出:注册成功 / 失败提示
  • 约束:手机号 11 位、密码 6-16 位、验证码 6 位数字、密码与确认密码一致

从这些信息里,你就能提取出测试点:

  • 手机号:空、非 11 位、非数字、已注册、正确
  • 验证码:空、错误、过期、正确
  • 密码:空、小于 6 位、大于 16 位、特殊字符、正确
  • 确认密码:与密码不一致、一致
  • 组合场景:全部正确 → 成功;任一错误 → 失败
我的习惯: 拿到需求文档后,我会先画一张思维导图。把功能点、输入、输出、约束、异常场景全部列出来。画完之后,测试点基本就清晰了。比对着文档一条条列效率高得多。

1.7 本章知识体系总览

下面这张图,把本章的核心方法、适用场景和它们之间的关系串起来了。你可以把它当作一张「测试用例设计方法速查表」。

测试用例设计方法论 · 知识体系 测试用例设计方法 等价类划分 边界值分析 因果图法 正交实验法 场景法 适用场景:等价类 + 边界值用于单输入;因果图 + 正交法用于多条件组合;场景法用于业务流程 实战建议 1. 先用场景法梳理业务流程 → 2. 对每个输入用等价类 + 边界值 → 3. 多条件组合用因果图或正交法 4. 从需求文档提取测试点时,先画思维导图再转用例

1.8 本章小结

这一章我们讲了 5 种核心的测试用例设计方法,以及如何从需求文档提取测试点。你可能会问:「这么多方法,我到底该用哪个?」

我的建议是:别纠结,先用场景法把流程跑通,再用等价类 + 边界值把细节补全。 如果遇到多条件组合,再考虑因果图或正交法。方法是为目的服务的,不是用来炫技的。

记住一句话: 好的测试用例,不是数量多,而是每一条都有它的价值。能发现 bug 的用例,才是好用例。