传统软件测试的必备技能与用例设计思路
AI 能帮你生成测试用例,但判断用例是否合理、覆盖是否充分,靠的是人的测试思维。传统软件测试的几项核心技能,在 AI 应用中同样适用——毕竟 AI 产品的最终输出也是软件行为的一部分。
本文梳理五项必备技能,每项配实际案例和用例设计思路。
1. 等价类划分 —— 用最少的用例覆盖最多的场景
核心思想:输入数据中,某些值在逻辑上是「等价的」——测一个就够了。
案例:邮箱注册验证
需求:邮箱格式必须为 xxx@yyy.zzz
xxx:1-64 位字母/数字/点/下划线/百分号/加号/减号
yyy:1-255 位字母/数字/点/减号
zzz:2-6 位字母
思路:
| 等价类 | 代表值 | 预期 |
|---|---|---|
| 有效邮箱(普通) | user@example.com | ✅ 通过 |
| 有效邮箱(含点号) | first.last@sub.domain.com | ✅ 通过 |
| 有效邮箱(含特殊符) | user+tag@domain.co | ✅ 通过 |
| 无效 — 缺少 @ | userexample.com | ❌ 拒绝 |
| 无效 — 缺少域名 | user@.com | ❌ 拒绝 |
| 无效 — TLD 过短 | user@domain.c | ❌ 拒绝 |
| 无效 — TLD 过长 | user@domain.sevenup | ❌ 拒绝 |
| 无效 — xxx 超长 | a...65chars...a@domain.com | ❌ 拒绝 |
| 无效 — 空字符串 | "" | ❌ 拒绝 |
💡 面试技巧:面试官问「你测一个输入框会怎么设计用例」,先从等价类切入(有效/无效各列出 3 个以上),再谈边界值,展示系统思维。
2. 边界值分析 —— Bug 总是藏在边界上
核心思想:程序员最容易在 > 还是 >= 上犯错。
案例:电商优惠券满减
需求:订单满 100 元减 10 元,满 200 元减 30 元,满 500 元减 100 元
优惠券每人限用 1 次,有效期到 2026-12-31 23:59:59
思路——针对金额边界的用例:
| 订单金额 | 预期优惠 | 测试点 |
|---|---|---|
| 99.99 | 0 | 刚好不满 100 |
| 100.00 | 10 | 刚好触发第一档 |
| 100.01 | 10 | 刚过第一档 |
| 199.99 | 10 | 紧贴第二档下限 |
| 200.00 | 30 | 刚好触发第二档 |
| 499.99 | 30 | 紧贴第三档下限 |
| 500.00 | 100 | 刚好触发第三档 |
还要测时间边界:
| 下单时间 | 预期 |
|---|---|
| 2026-12-31 23:59:59 | ✅ 优惠券有效 |
| 2027-01-01 00:00:00 | ❌ 优惠券过期 |
💡 面试官问「你怎么保证测试覆盖充分」,回答思路:先划分等价类避免冗余,再用边界值捕捉边缘 bug,最后用场景串联验证真实流程。
3. 判定表与因果图 —— 当多个条件相互纠缠时
核心思想:条件之间有 AND/OR 关系时,画判定表避免遗漏组合。
案例:信贷审批规则引擎
条件:
A: 年收入 ≥ 20 万
B: 社保连续缴纳 ≥ 24 个月
C: 当前无其他贷款
D: 信用卡无逾期记录
规则:
- A && B && C && D → 通过
- A && B && C && !D → 人工审核
- A && B && !C && D → 降额通过
- 其余情况 → 拒绝
判定表:
| # | A | B | C | D | 结果 |
|---|---|---|---|---|---|
| 1 | Y | Y | Y | Y | ✅ 通过 |
| 2 | Y | Y | Y | N | 🔍 人工审核 |
| 3 | Y | Y | N | Y | ⚠️ 降额通过 |
| 4 | Y | Y | N | N | ❌ 拒绝 |
| 5 | Y | N | Y | Y | ❌ 拒绝 |
| … | … | … | … | … | |
| 16 | N | N | N | N | ❌ 拒绝 |
四条条件 → 2⁴ = 16 种组合。判定表能帮你不遗漏任何一种。
💡 适合在面试中展示逻辑分析能力:遇到多个条件组合的需求时,画一张判定表就能快速让面试官看到你的思维结构化程度。
4. 正交实验法 —— 当组合爆炸时挑最有代表性的
核心思想:全面组合太多(如 3⁵ = 243 条),用正交表挑出两两覆盖的最小集合。
案例:报表筛选条件
条件及取值:
时间粒度:日 / 周 / 月
指标类型:销售额 / 订单数 / 利润率
地区:华北 / 华东 / 华南
渠道:线上 / 线下
对比:同比 / 环比
全组合 = 3×3×3×2×2 = 108 种,太多了。用正交表(L9)只需 9 条用例即可保证任意两个条件的取值组合都被覆盖。
| # | 时间粒度 | 指标 | 地区 | 渠道 | 对比 |
|---|---|---|---|---|---|
| 1 | 日 | 销售额 | 华北 | 线上 | 同比 |
| 2 | 日 | 订单数 | 华东 | 线下 | 环比 |
| 3 | 日 | 利润率 | 华南 | 线上 | 环比 |
| 4 | 周 | 销售额 | 华东 | 线上 | 环比 |
| 5 | 周 | 订单数 | 华南 | 线上 | 同比 |
| 6 | 周 | 利润率 | 华北 | 线下 | 同比 |
| 7 | 月 | 销售额 | 华南 | 线下 | 同比 |
| 8 | 月 | 订单数 | 华北 | 线上 | 环比 |
| 9 | 月 | 利润率 | 华东 | 线下 | 环比 |
💡 面试中的加分项:能说出正交实验法,并解释「两两覆盖」的含义——说明你不仅有工程思维,还有数学思维。
5. 状态迁移 —— 测的不是输入,是「状态流转」
核心思想:很多 bug 不在某个功能本身,而在于先做了什么再做了什么。
案例:订单状态机
状态:待支付 → 已支付 → 已发货 → 已签收 → 已完成
↘ 已取消(待支付状态下可取消)
↘ 已退款(已支付/已发货状态下可申请)
思路:画状态图,覆盖每一个合法和非法迁移:
| # | 当前状态 | 操作 | 预期 |
|---|---|---|---|
| 1 | 待支付 | 支付成功 | ✅ → 已支付 |
| 2 | 待支付 | 取消订单 | ✅ → 已取消 |
| 3 | 待支付 | 申请退款 | ❌ 不允许 |
| 4 | 已支付 | 申请退款 | ✅ → 退款中 |
| 5 | 已支付 | 取消订单 | ❌ 不允许 |
| 6 | 已发货 | 确认签收 | ✅ → 已签收 |
| 7 | 已签收 | 申请退款 | ❌ 不允许 |
| 8 | 已取消 | 支付 | ❌ 不允许 |
💡 面试时如果遇到电商、支付、工单等业务题,直接画状态机图——面试官眼中这是「高级测试思维」的信号。
小结:一张技能地图
| 技能 | 对付什么问题 | 一句话 |
|---|---|---|
| 等价类划分 | 输入空间过大 | 用最少用例覆盖代表性取值 |
| 边界值分析 | 阈值 bug 高发 | 边界两侧各取一点 |
| 判定表 / 因果图 | 多条件逻辑组合 | 画表,防遗漏 |
| 正交实验法 | 组合爆炸 | 两两覆盖,9 条顶 108 条 |
| 状态迁移 | 业务流程流转 | 合法迁移 + 非法迁移都要测 |
这些技能不会因为 AI 时代的到来而过时——相反,当 AI 帮你生成 100 条用例时,你能从中挑出真正有价值的 20 条,这才是你的价值所在。
下一篇预告:《软件测试面试的解题框架——如何把一道题拆出 10 个测试点》