测试术语与设计思维全解析(全)

42 阅读13分钟

你是不是也遇到:需求一长就漏测、AI 一生成就幻觉、用例一多就根本评不动?
Treeify 专注把测试设计变成可建模、可评审、可持续迭代的过程——用结构化方法把问题空间拆开,再生成更少但更有覆盖的用例。
欢迎来共创/内测。
微信公众号回复【内测】,添加微信进内测共创群,获得 Treeify 内测资格 / 免费 credits / MCP Server 试用

  • 微信公众号:Treeify - AI测试用例生成
  • 联系微信:TreeifyAI

扫码_搜索联合传播样式-标准色版.png

测试活动必须建立在统一语言之上,团队才能在需求讨论、测试设计、评审中保持一致。本节列出最常用、最实用的术语,并给出“怎么用”和“容易踩坑点”。

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)

覆盖思维用于回答两个问题:

  1. 我是否覆盖了所有关键行为?
  2. 我是否测试了最有代表性的输入/状态/路径?

它不是数量竞争,而是结构竞争:如何把问题空间拆清楚,并确保每类情况都有测试。

覆盖的常见维度(建议当作“必扫清单”)

  • 功能覆盖:功能点是否都被验证(含隐藏规则:默认值、自动补全、灰度逻辑)
  • 路径覆盖:主/支/异常路径是否齐全(MAE)
  • 数据覆盖:等价类、边界值、特殊字符、精度、空值、超长
  • 状态覆盖:状态机的合法/非法跳转、并发状态、重入
  • 权限覆盖:角色 × 资源 × 操作(最容易“线上事故”)
  • 异常覆盖:超时、重试、幂等、降级、熔断、重复请求
  • 兼容覆盖:浏览器/系统/分辨率/语言/时区(面向多端产品尤其关键)
  • 可观测覆盖:日志、埋点、告警是否能支撑问题定位(很多团队会忽略)

2.2 风险思维(Risk-based Thinking)

当时间不够时,测试不是“少写点”,而是“更聪明地写”。

优先级常用判断因子:

  • 影响面:用户量/业务金额/合规风险
  • 变更强度:改动范围大、链路长、跨团队
  • 历史缺陷:以前经常出问题的模块(回归重点)
  • 复杂度:规则多、状态多、配置多
  • 不可逆:一旦出错难以补救(扣款、发券、删数据)

实操建议:每个场景给一个 “风险标签”,例如:金额/安全/权限/并发/数据一致性,评审时更容易对齐重点。

2.3 可验证性思维(Testability)

优秀测试设计离不开“如何判定结果”。

  • 可观测性:是否有明确断言点(DB 字段、接口返回、日志 traceId、消息消费结果)

  • 可重复性:用例能否稳定复现(时间依赖、随机数、异步任务要控制)

  • 可隔离性:依赖第三方/外部环境是否可 Mock / Stub


三、经典测试方法(概念 + 思路 + 可直接用在需求上的示例)

下面每个方法都按:用途 → 何时用 → 怎么做 → 示例 → 检查清单 来写,保证你能直接搬到真实需求里。

3.1 等价类划分(Equivalence Partitioning)

用途:把输入按“应表现相同的行为”分组,每组只需要测试 1~2 个代表值。
核心目标:用最少用例覆盖最多输入空间。

何时用

  • 金额、数量、日期、长度等输入
  • 请求参数校验
  • 表单输入、搜索条件、过滤条件

怎么做(步骤)

  1. 找出输入域(类型、范围、格式、是否必填)
  2. 划分有效等价类(应通过)
  3. 划分无效等价类(应拒绝/报错)
  4. 每类挑代表值(再叠加边界值方法效果更好)

示例:优惠金额输入(范围 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)12192021

检查清单

  • 边界是“包含”还是“不包含”(<= / <)
  • 前端与后端的边界口径一致吗(很常见的不一致来源)
  • 数字精度/四舍五入是否形成“隐形边界”(如 0.01)

3.3 决策表(Decision Table)

用途:用于多条件、多规则组合的业务,确保没有冲突或缺失。
尤其适合:条件多、分支多、规则容易被“口头描述”淹没的需求。

何时用

  • 折扣适用条件、叠加规则
  • 权限判断(角色 + 开关 + 资源属性)
  • 路由与分支逻辑(地区、渠道、版本、灰度、用户标签)

怎么做(步骤)

  1. 列出条件(输入/状态/开关)
  2. 列出动作/结果(系统行为)
  3. 组合条件形成规则列(可以用 MECE 把组合收敛)
  4. 每条规则对应 1~N 测试

示例:优惠券是否可用(简化)

条件:

  • C1:用户是否新客(是/否)
  • C2:订单金额是否 ≥ 100(是/否)
  • C3:券是否在有效期内(是/否)

动作:

  • A1:允许使用
  • A2:禁止使用 + 提示原因

规则新客金额≥100 有效期内结果 R1 是是是 A1 允许 R2 否是是 A2 非新客不可用 R3 是否是 A2 金额不足 R4 是是否 A2 已过期 R5 否否是

规则新客金额≥100有效期内结果
R1A1 允许
R2A2 非新客不可用
R3A2 金额不足
R4A2 已过期
R5A2 多条件不满足(优先提示口径要定义)

A2 多条件不满足(优先提示口径要定义)

关键点:当多个条件不满足时,“提示优先级/错误码”必须定义,否则测试无法判定正确性。

检查清单

  • 条件是否互相独立?(强相关条件可合并)
  • “多条件同时不满足”时的系统行为是否明确?
  • 是否存在默认规则/兜底规则(否则线上会出现未定义行为)

3.4 状态模型(State Model / State Transition)

用途:描述状态、状态间跳转、跳转前置条件与副作用。
常用于流程性系统:订单、审批、工单、订阅、账户、支付。

何时用

  • 任何“状态会变化”的对象
  • 异步流程(创建后异步处理)
  • 允许重试/撤销/回滚的流程

怎么做(步骤)

  1. 列出所有状态(含终态)
  2. 列出合法跳转(事件触发)
  3. 标注每个跳转的前置条件、权限、校验、幂等要求
  4. 补齐非法跳转(必须阻止)
  5. 补齐副作用(库存、余额、消息、通知、日志)

示例:订单状态(简化)

  • 状态:Created → Paid → Shipped → Completed
  • 异常/取消:Created/Paid → Canceled(是否允许 Paid 后取消取决于业务)

测试重点:

  • 合法跳转是否成功
  • 非法跳转是否被阻止(如 Shipped 后再支付)
  • 跳转后的副作用是否正确(库存扣减、发票状态、通知消息)

检查清单

  • 是否存在“中间态”(Processing、Refunding)被遗漏
  • 幂等:重复触发同一事件会怎样(尤其支付回调)
  • 并发:两个事件同时到达(取消 vs 支付)谁赢?
  • 终态是否不可逆(Completed 是否允许回滚)

3.5 配对测试(Pairwise Testing / All-Pairs)

用途:输入多维度时,覆盖所有“两两组合”,大幅减少用例数量,同时保留较高缺陷发现能力。

适用场景

  • 多浏览器 × 多设备 × 多语言
  • 参数枚举值较多,但维度之间无强关联
  • 兼容性测试矩阵

怎么做(步骤)

  1. 列出维度与取值(浏览器、OS、语言、分辨率…)
  2. 生成 pairwise 组合集(工具或脚本)
  3. 对高风险组合做“加测”(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 覆盖、数据生命周期覆盖

怎么做(步骤)

  1. 定义资源(Resource):例如“优惠券、订单、用户地址”
  2. 定义操作(CRUD)
  3. 定义角色/权限维度(admin / operator / viewer)
  4. 定义约束(只能操作自己的资源?是否可批量?是否软删?)
  5. 形成网格,逐格设计测试

示例:资源=地址(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 有明确的覆盖入口(不是口头带过)