测试用例设计方法与理论基
一、测试理论基础(为什么要这样设计)
1.1 测试的目的与边界
| 概念 | 含义 | 对用例设计的启示 |
|---|---|---|
| 验证(Verification) | 产品是否“按规格做对” | 用例要可追溯到需求/设计条目 |
| 确认(Validation) | 产品是否“做对的事” | 需场景化、用户视角的补充用例 |
| 测试只能证明缺陷存在 | 穷举通常不可行 | 用等价类、边界等方法在风险与成本间折中 |
| 缺陷集群性 | 少数模块集中大量缺陷 | 高风险模块提高用例密度与回归频率 |
小结:用例不是“写得越多越好”,而是在有限资源下最大化发现重要问题的概率。
1.2 测试层级(测试金字塔思想)
常见分层:单元测试 → 接口/服务测试 → UI/端到端测试。
- 底层(单元):快、稳、定位准,适合覆盖分支与算法。
- 中层(接口):验证业务规则与集成,性价比常最高。
- 顶层(UI/E2E):慢、脆弱,适合关键用户路径与冒烟。
对用例文档的启示:同一需求可在不同层各写一部分用例,避免全部堆在 UI 手工用例里。
1.3 质量属性(非功能也要进用例)
除功能正确外,常见维度:性能、安全、兼容性、可用性、可维护性、可靠性等。
设计时自问:本需求是否影响其中某几项?若有,单列用例或检查项。
1.4 测试左移与右移(简要)
- 左移:需求/设计阶段参与评审,提前写验收标准与可测性检查。
- 右移:生产可观测、灰度、监控告警与用户反馈闭环。
用例设计可与左移结合:验收标准即用例骨架。
二、测试用例的基本结构(怎么写才规范)
推荐字段(可按团队模板裁剪):
| 字段 | 说明 |
|---|---|
| 用例编号 | 唯一标识,便于追溯与自动化关联 |
| 标题 | 一句话说清“测什么” |
| 前置条件 | 账号、数据、环境、开关状态 |
| 步骤 | 可执行、可复现的操作序列 |
| 预期结果 | 明确、可判定(界面/接口/DB/日志) |
| 优先级 | P0 冒烟 / P1 核心 / P2 一般 / P3 边缘 |
| 关联需求 | 需求 ID 或文档章节 |
好预期 vs 坏预期:
- 坏:
登录成功(模糊) - 好:
跳转至首页 URL 包含/home,顶部显示用户昵称“张三”,本地存储写入 token 字段且长度大于 20
三、黑盒设计方法(功能测试最常用)
以下方法可组合使用:先等价类划范围,再边界取值,再用判定表处理多条件组合,用场景法串用户路径。
3.1 等价类划分(Equivalence Partitioning)
思想:把输入域划分为若干类,每类选取少量代表值,假设同类行为等价。
步骤:
- 划分有效等价类(合法输入)与无效等价类(非法输入)。
- 每个等价类至少 1 条用例覆盖。
- 无效类每次只违反一条规则(便于定位根因)。
示例:用户名注册(规则:3~20 位字母数字)
| 等价类 | 代表值 | 预期 |
|---|---|---|
| 有效-最短 | abc | 注册成功 |
| 有效-最长 | 20 位字母数字 | 注册成功 |
| 有效-中间 | user01 | 注册成功 |
| 无效-过短 | ab | 提示长度错误 |
| 无效-过长 | 21 位 | 提示长度错误 |
| 无效-含特殊字符 | user@1 | 提示格式错误 |
| 无效-空 | (空) | 提示必填 |
3.2 边界值分析(Boundary Value Analysis)
思想:缺陷常出现在边界附近。在等价类基础上,重点测边界上、刚越界的值。
示例:分页接口pageSize,约束 1~100
| 用例 | 输入 | 预期 |
|---|---|---|
| 下边界内 | pageSize=1 | 返回 1 条 |
| 下边界 | pageSize=1(与上等价可合并时选其一) | 正常 |
| 越下界 | pageSize=0 | 400 或业务错误码,明确文案 |
| 上边界内 | pageSize=100 | 正常 |
| 越上界 | pageSize=101 | 错误 |
| 非整数/负数 | pageSize=-1、1.5 | 按接口约定校验 |
三点法(常用习惯):若边界为[min, max],可测min-1, min, min+1, max-1, max, max+1中合法存在的组合。
3.3 判定表(Decision Table)
思想:多个条件组合、每种组合对应不同结果时,用表避免遗漏。
示例:电商优惠券使用(简化)
| 规则编号 | R1 | R2 | R3 | R4 |
|---|---|---|---|---|
| 条件:满 100 元 | Y | Y | N | N |
| 条件:券在有效期内 | Y | N | Y | N |
| 预期:可用券 | ✓ | ✗ | ✗ | ✗ |
每条列对应一条用例,保证组合覆盖完整。
3.4 因果图 / 判定表前置(简述)
条件多且有约束(某条件成立则另一条件无意义)时,可先画因果再收敛为判定表,避免无效组合爆炸。团队若不用正式因果图,思维上理清依赖即可。
3.5 状态迁移(State Transition)
思想:系统处于有限状态,事件触发迁移;测合法路径与非法事件在当前状态下是否被拒绝。
示例:订单状态
状态:待支付 → 已支付 → 已发货 → 已完成;取消:待支付 → 已取消。
| 用例 | 当前状态 | 操作 | 预期 |
|---|---|---|---|
| ST-01 | 待支付 | 支付成功 | 已支付 |
| ST-02 | 待支付 | 取消订单 | 已取消 |
| ST-03 | 已发货 | 支付成功 | 拒绝或幂等无变化 |
| ST-04 | 已完成 | 取消订单 | 不允许 |
3.6 场景法 / 用户故事测试(Use Case / Journey)
思想:按真实用户目标串联步骤,覆盖主成功路径与重要异常分支。
示例:找回密码
- 主路径:输入注册手机 → 收验证码 → 输入新密码 → 用新密码登录成功。
- 分支:验证码错误 3 次锁定、链接过期、手机号未注册提示等。
场景用例标题建议采用:“作为…,我要…,以便…”或“Given-When-Then”,与敏捷验收对齐。
3.7 错误推测(Error Guessing)
思想:依赖经验猜测易错点:空值、并发、重复提交、权限切换、时区、精度、缓存不一致等。
示例:提交订单连点两次 → 预期只生成一单(幂等或前端防抖)。
3.8 正交试验(Orthogonal Arrays,可选)
思想:因素与水平很多时,用正交表抽取有代表性的组合,以较少用例获得较好覆盖。适合配置类、兼容性矩阵(浏览器 × OS × 分辨率)的抽样。
四、白盒与基于结构的补充(与开发协作时)
4.1 语句 / 分支 / 条件覆盖(概念)
- 语句覆盖:每条语句至少执行一次(弱)。
- 分支/判定覆盖:每个分支的真假都走到(强于语句)。
- 条件组合(更强):复杂条件中子条件组合。
黑盒用例设计完成后,可对核心模块让开发给出分支说明或覆盖率报告,查漏补关键分支用例(尤其安全与资金相关)。
4.2 基本路径测试
对控制流图求圈复杂度,导出线性无关路径集,作为最少路径覆盖参考。多用于算法密集或规则引擎类代码。
五、专项测试的设计要点(简例)
5.1 性能
明确场景、指标、数据量、环境。
示例:首页接口在 1 万条帖子数据量下,P95 延迟 ≤ 200 ms,错误率 0。
5.2 安全
示例:未登录访问需鉴权接口 → 401;水平越权:用户 A 的 ID 改用户 B → 403 或无数据。
5.3 兼容性
示例:同一登录流程在 Chrome / Safari / 微信内置浏览器各跑一遍主路径。
六、从需求到用例:推荐工作流
- 拆解:功能点、接口、界面、数据规则、状态机。
- 建模:等价类 + 边界;多条件用判定表;流程用状态图/场景。
- 标注风险:资金、权限、合规、高并发、历史缺陷多模块 → 提高优先级与条数。
- 分层落地:能接口不测 UI;能单不测集。
- 可判定预期:每条用例都能回答“怎样算过/不过”。
- 评审:产品、开发、测试对齐歧义与边界。
- 维护:需求变更同步更新用例编号与关联字段。
七、完整小例子:需求片段 → 用例表(登录)
需求摘要:支持手机号+密码登录;手机号 11 位国内号;密码 8~20 位;错误 5 次锁定 15 分钟;勾选“记住我”时 token 有效期 30 天,否则会话级。
| 编号 | 标题 | 前置条件 | 步骤摘要 | 预期结果 | 优先级 |
|---|---|---|---|---|---|
| LOGIN-001 | 合法账号密码登录主路径 | 已注册手机号 13800138000 | 输入正确密码,不勾选记住我,登录 | 进入首页,token 为会话级(按产品定义校验) | P0 |
| LOGIN-002 | 记住我延长有效期 | 同上 | 勾选记住我后登录 | token/过期时间符合 30 天策略 | P1 |
| LOGIN-003 | 密码错误累计锁定 | 新会话 | 连续输错密码 5 次 | 第 6 次提示锁定 15 分钟,期间正确密码也不可登录(按需求) | P0 |
| LOGIN-004 | 手机号格式-边界无效 | 无 | 输入 10 位、12 位、含字母 | 前端或接口返回明确校验错误 | P1 |
| LOGIN-005 | 手机号未注册 | 库里无该号 | 输入未注册手机号+任意密码 | 提示账号不存在或统一“账号或密码错误”(按安全策略) | P1 |
八、附录:方法速查表
| 方法 | 典型适用 | 核心价值 |
|---|---|---|
| 等价类 | 输入域大、规则清晰 | 降维抽样 |
| 边界值 | 数值/长度/分页/日期范围 | 高频缺陷区 |
| 判定表 | 多条件组合 | 防遗漏 |
| 状态迁移 | 订单、工单、审批 | 防非法跃迁 |
| 场景法 | 端到端、发布验收 | 对齐用户价值 |
| 错误推测 | 幂等、并发、安全 | 补黑盒盲区 |
| 正交试验 | 多因素配置 | 控制用例规模 |
