你是不是也遇到:需求一长就漏测、AI 一生成就幻觉、用例一多就根本评不动?
Treeify 专注把测试设计变成可建模、可评审、可持续迭代的过程——用结构化方法把问题空间拆开,再生成更少但更有覆盖的用例。
欢迎来共创/内测。
微信公众号回复【内测】,添加微信进内测共创群,获得 Treeify 内测资格 / 免费 credits / MCP Server 试用
- 微信公众号:Treeify - AI测试用例生成
- 联系微信:TreeifyAI
测试活动必须建立在统一语言之上,团队才能在需求讨论、测试设计、评审中保持一致。本节列出最常用、最实用的术语,并给出“怎么用”和“容易踩坑点”。
1.1 常见缩写与符号(含使用方式)
- MAE:主流程 / 替代流程 / 异常流程(Main / Alternative / Exception)
-
- 怎么用:写场景时先把主流程跑通,再补齐替代与异常。
- 典型坑:只写主流程,导致“高频异常”完全漏测(如超时、重复提交、权限不足)。
- MECE:互斥且穷尽(Mutually Exclusive, Collectively Exhaustive)
-
- 怎么用:做需求拆分、规则拆分、场景拆分时,确保不重叠也不遗漏。
- 典型坑:维度混用(例如把“用户类型”与“权限等级”混在一起拆分),导致重复/缺口。
- SUT:被测系统(System Under Test)
-
- 怎么用:明确“测试对象边界”:SUT 包含哪些服务/模块?不包含哪些依赖(第三方支付、短信等)?
- 典型坑:边界不清,缺陷归因困难(到底是我们系统错,还是第三方响应慢)。
- I/O:输入 / 输出(Input / Output)
-
- 怎么用:把每个功能点抽象成“输入与输出”的可验证关系,特别适合 API/规则类需求。
- 典型坑:只测输入合法性,不测输出完整性(字段缺失、状态码正确但业务码错误)。
- RACI:责任划分模型(负责 / 最终负责 / 咨询 / 告知)
-
- 怎么用:在测试设计评审阶段明确:谁写用例、谁最终拍板、谁提供业务规则、谁需要被同步。
- 典型坑:没有“最终负责”,评审意见来回扯皮,测试口径无法收敛。
- E2E:端到端(End-to-End)
-
- 怎么用:覆盖跨模块链路(例如“下单→支付→发货→完成”),重点验证集成点与关键数据流。
- 典型坑:E2E 用例过多导致维护地狱;建议只保留“关键链路 + 高风险变更点”。
- AC / FR / NFR:验收标准 / 功能需求 / 非功能需求
-
- 怎么用:测试设计必须同时覆盖 FR 与 NFR(性能、安全、兼容、可用性等),否则“能用但不好用”。
1.2 测试设计产物常见名词(你会在评审里反复看到)
- Test Object(测试对象) :要测的“东西”(模块/功能/规则/接口/数据结构/流程节点)
- Test Scenario(测试场景) :在某个上下文中验证某个目标(含前置、触发、预期)
- Test Case(测试用例) :执行级的步骤化描述(步骤、数据、断言、期望结果)
- Coverage(覆盖) :被验证的范围与深度(功能点、路径、状态、规则、异常、权限、兼容等)
- Oracle(判定准则) :如何判断“对/错”(UI 展示、日志、DB、消息队列、第三方回调等)
二、核心测试设计思想
测试设计并不是“穷举所有可能性”,而是通过系统化方法构建一个足够代表性且覆盖充分的测试集合,并能在时间/资源有限的前提下优先抓住风险。
2.1 覆盖思维(Coverage Thinking)
覆盖思维用于回答两个问题:
- 我是否覆盖了所有关键行为?
- 我是否测试了最有代表性的输入/状态/路径?
它不是数量竞争,而是结构竞争:如何把问题空间拆清楚,并确保每类情况都有测试。
覆盖的常见维度(建议当作“必扫清单”)
- 功能覆盖:功能点是否都被验证(含隐藏规则:默认值、自动补全、灰度逻辑)
- 路径覆盖:主/支/异常路径是否齐全(MAE)
- 数据覆盖:等价类、边界值、特殊字符、精度、空值、超长
- 状态覆盖:状态机的合法/非法跳转、并发状态、重入
- 权限覆盖:角色 × 资源 × 操作(最容易“线上事故”)
- 异常覆盖:超时、重试、幂等、降级、熔断、重复请求
- 兼容覆盖:浏览器/系统/分辨率/语言/时区(面向多端产品尤其关键)
- 可观测覆盖:日志、埋点、告警是否能支撑问题定位(很多团队会忽略)
2.2 风险思维(Risk-based Thinking)
当时间不够时,测试不是“少写点”,而是“更聪明地写”。
优先级常用判断因子:
- 影响面:用户量/业务金额/合规风险
- 变更强度:改动范围大、链路长、跨团队
- 历史缺陷:以前经常出问题的模块(回归重点)
- 复杂度:规则多、状态多、配置多
- 不可逆:一旦出错难以补救(扣款、发券、删数据)
实操建议:每个场景给一个 “风险标签”,例如:
金额/安全/权限/并发/数据一致性,评审时更容易对齐重点。
2.3 可验证性思维(Testability)
优秀测试设计离不开“如何判定结果”。
-
可观测性:是否有明确断言点(DB 字段、接口返回、日志 traceId、消息消费结果)
-
可重复性:用例能否稳定复现(时间依赖、随机数、异步任务要控制)
-
可隔离性:依赖第三方/外部环境是否可 Mock / Stub
三、经典测试方法(概念 + 思路 + 可直接用在需求上的示例)
下面每个方法都按:用途 → 何时用 → 怎么做 → 示例 → 检查清单 来写,保证你能直接搬到真实需求里。
3.1 等价类划分(Equivalence Partitioning)
用途:把输入按“应表现相同的行为”分组,每组只需要测试 1~2 个代表值。
核心目标:用最少用例覆盖最多输入空间。
何时用:
- 金额、数量、日期、长度等输入
- 请求参数校验
- 表单输入、搜索条件、过滤条件
怎么做(步骤) :
- 找出输入域(类型、范围、格式、是否必填)
- 划分有效等价类(应通过)
- 划分无效等价类(应拒绝/报错)
- 每类挑代表值(再叠加边界值方法效果更好)
示例:优惠金额输入(范围 0–100,整数)
- 有效等价类:
0~100 的整数 - 无效等价类:
-
<0(负数)>100非整数(小数)非数字(字母、符号)空值/缺失(若必填)
可直接落地的代表值选择:
- 有效:
50 - 无效:
-1, 101, 0.5, 「abc」, 「」
检查清单:
- 输入域是否明确(是否必填、是否允许小数、是否允许 0)
- 每个无效类是否有清晰期望(提示文案/错误码/接口状态码)
- 是否考虑“空值”和“缺字段”(前端校验 vs 后端校验)
3.2 边界值分析(Boundary Value Analysis)
用途:针对每个区间边界,测试“刚好在内 / 刚好在外”。
边界是最常出错的位置,因此几乎总是必测。
何时用:
- 范围约束(0-100、1-31、长度 1-20)
- 分页(pageSize 上限、page 范围)
- 时间窗口(有效期、截止时间)
- 计费阶梯(<=1000 免费,>1000 收费)
怎么做(经典取值) :
min-1, min, min+1, max-1, max, max+1
示例:范围 0–100(整数)
-1, 0, 1, 99, 100, 101
补充:字符串长度边界(长度 1–20)
「」(0)、1、2、19、20、21
检查清单:
- 边界是“包含”还是“不包含”(<= / <)
- 前端与后端的边界口径一致吗(很常见的不一致来源)
- 数字精度/四舍五入是否形成“隐形边界”(如 0.01)
3.3 决策表(Decision Table)
用途:用于多条件、多规则组合的业务,确保没有冲突或缺失。
尤其适合:条件多、分支多、规则容易被“口头描述”淹没的需求。
何时用:
- 折扣适用条件、叠加规则
- 权限判断(角色 + 开关 + 资源属性)
- 路由与分支逻辑(地区、渠道、版本、灰度、用户标签)
怎么做(步骤) :
- 列出条件(输入/状态/开关)
- 列出动作/结果(系统行为)
- 组合条件形成规则列(可以用 MECE 把组合收敛)
- 每条规则对应 1~N 测试
示例:优惠券是否可用(简化)
条件:
- C1:用户是否新客(是/否)
- C2:订单金额是否 ≥ 100(是/否)
- C3:券是否在有效期内(是/否)
动作:
- A1:允许使用
- A2:禁止使用 + 提示原因
规则新客金额≥100 有效期内结果 R1 是是是 A1 允许 R2 否是是 A2 非新客不可用 R3 是否是 A2 金额不足 R4 是是否 A2 已过期 R5 否否是
| 规则 | 新客 | 金额≥100 | 有效期内 | 结果 |
|---|---|---|---|---|
| R1 | 是 | 是 | 是 | A1 允许 |
| R2 | 否 | 是 | 是 | A2 非新客不可用 |
| R3 | 是 | 否 | 是 | A2 金额不足 |
| R4 | 是 | 是 | 否 | A2 已过期 |
| R5 | 否 | 否 | 是 | A2 多条件不满足(优先提示口径要定义) |
A2 多条件不满足(优先提示口径要定义)
关键点:当多个条件不满足时,“提示优先级/错误码”必须定义,否则测试无法判定正确性。
检查清单:
- 条件是否互相独立?(强相关条件可合并)
- “多条件同时不满足”时的系统行为是否明确?
- 是否存在默认规则/兜底规则(否则线上会出现未定义行为)
3.4 状态模型(State Model / State Transition)
用途:描述状态、状态间跳转、跳转前置条件与副作用。
常用于流程性系统:订单、审批、工单、订阅、账户、支付。
何时用:
- 任何“状态会变化”的对象
- 异步流程(创建后异步处理)
- 允许重试/撤销/回滚的流程
怎么做(步骤) :
- 列出所有状态(含终态)
- 列出合法跳转(事件触发)
- 标注每个跳转的前置条件、权限、校验、幂等要求
- 补齐非法跳转(必须阻止)
- 补齐副作用(库存、余额、消息、通知、日志)
示例:订单状态(简化)
- 状态:
Created → Paid → Shipped → Completed - 异常/取消:
Created/Paid → Canceled(是否允许 Paid 后取消取决于业务)
测试重点:
- 合法跳转是否成功
- 非法跳转是否被阻止(如 Shipped 后再支付)
- 跳转后的副作用是否正确(库存扣减、发票状态、通知消息)
检查清单:
- 是否存在“中间态”(Processing、Refunding)被遗漏
- 幂等:重复触发同一事件会怎样(尤其支付回调)
- 并发:两个事件同时到达(取消 vs 支付)谁赢?
- 终态是否不可逆(Completed 是否允许回滚)
3.5 配对测试(Pairwise Testing / All-Pairs)
用途:输入多维度时,覆盖所有“两两组合”,大幅减少用例数量,同时保留较高缺陷发现能力。
适用场景:
- 多浏览器 × 多设备 × 多语言
- 参数枚举值较多,但维度之间无强关联
- 兼容性测试矩阵
怎么做(步骤) :
- 列出维度与取值(浏览器、OS、语言、分辨率…)
- 生成 pairwise 组合集(工具或脚本)
- 对高风险组合做“加测”(pairwise 不等于万无一失)
示例:兼容矩阵
- 浏览器:Chrome / Safari / Edge
- 系统:Windows / macOS
- 语言:EN / ZH
全量是 3×2×2=12,pairwise 可能只需约 5~6 条即可覆盖所有两两组合。
检查清单:
- 是否存在强关联维度(例如 iOS 必然 Safari)需要约束
- 关键组合是否被强制包含(例如 Safari+macOS+ZH)
- 是否需要补充“三因素特定缺陷”场景(支付、输入法、字体渲染常见)
3.6 CRUD 网格(CRUD Grid)
用途:把“资源 × 操作(Create/Read/Update/Delete)× 角色/约束”系统化展开。
非常适合后台系统、REST API、权限与数据一致性相关测试。
何时用:
- 任何“资源管理”类系统(用户、项目、订单、配置)
- 权限模型复杂(管理员/普通用户/只读)
- API 覆盖、数据生命周期覆盖
怎么做(步骤) :
- 定义资源(Resource):例如“优惠券、订单、用户地址”
- 定义操作(CRUD)
- 定义角色/权限维度(admin / operator / viewer)
- 定义约束(只能操作自己的资源?是否可批量?是否软删?)
- 形成网格,逐格设计测试
示例:资源=地址(Address),角色=本人/他人
- Create:新增地址(本人允许)
- Read:查看地址(本人允许,他人禁止/脱敏)
- Update:修改地址(本人允许,字段级权限)
- Delete:删除地址(软删/硬删、是否可恢复)
检查清单:
- CRUD 每个操作是否都有“成功 + 失败 + 权限不足”
- 更新是否支持部分更新(PATCH)与字段级校验
- 删除是软删还是硬删?关联数据如何处理?
- 列表读取是否有分页/排序/过滤边界(pageSize、空列表、越界页)
四、把方法串成流程:从需求到用例的“最小可落地路径”
很多人学会方法,却不知道什么时候该用哪个。下面是一条实战路径(默认你拿到的是 PRD / 需求描述)。
4.1 步骤 1:先写“测试对象清单”(Object List)
目标:把需求拆成可测试的对象集合(功能点/规则点/流程点/接口点/数据点)
输出示例(简化):
- 登录(账号密码、验证码、第三方登录)
- 账号状态(未激活/冻结/注销)
- 风控规则(错误次数、锁定时间)
- 会话与安全(token、过期、踢下线)
4.2 步骤 2:对每个对象选择最合适的方法组合
经验法则(很实用):
- 输入校验:等价类 + 边界值
- 多条件规则:决策表
- 流程状态:状态模型
- 多端兼容:Pairwise
- 资源管理/权限:CRUD 网格 + RBA(risk-based)
4.3 步骤 3:先做场景,再做用例(避免一上来写步骤)
- 先产出场景:围绕“目标 + 上下文 + 风险”
- 再补用例细节:步骤、数据、断言点、环境要求
五、评审与落地:能直接拿去用的检查清单
5.1 用例评审 Checklist(快速版)
- 每个关键需求点都有测试对象映射(可追溯)
- 主流程可跑通(E2E 至少一条)
- 异常流程覆盖高频/高损失异常(超时、重复、权限)
- 输入校验覆盖等价类 + 边界(特别是金额/日期/长度)
- 关键规则有决策表或等价拆分(避免口头描述)
- 状态机覆盖非法跳转与副作用
- 断言点明确(UI/接口/DB/日志/消息)
- 优先级合理(P0/P1 不被大量低价值用例淹没)
5.2 交付质量 Checklist(团队统一口径)
- 用例命名包含:对象 + 行为 + 期望(可搜索、可聚类)
- 前置条件可复现(数据构造方式明确)
- 期望结果“可判定”(避免“应该正常”这种模糊句)
- 标注风险标签(金额/权限/并发/一致性/安全)
- 可维护性:避免按钮级过细;关键路径足够细即可
- 兼容/性能/安全等 NFR 有明确的覆盖入口(不是口头带过)