第4章 编写验收标准的标准句式结构与模板
验收标准要具备可衡量性,首先必须使用统一的句式结构。本章给出两种经过工业验证的标准句式模板——Given-When-Then(GWT)与条件-行为-结果(CBR),并围绕适用场景、前置条件、操作步骤、输入输出物、责任边界、记录材料、异常处理展开SOP固化。
核心原则:两种句式均要求主语明确、动词可观测、结果数值化。GWT更擅长描述用户交互场景;CBR更适合描述系统条件分支。二者在实战中可按功能类型自由切换使用。
适用场景
- Given-When-Then:用户故事、功能验收、端到端测试场景。例如:“Given 订单已支付,When 用户点击退款,Then 退款金额立即释放至账户余额。”
- 条件-行为-结果:服务响应、接口契约、定时任务、异常降级。例如:“条件:线程池队列超过80%,行为:触发熔断窗口,结果:返回503状态码并在日志中记录fallback条目。”
- 混合场景(如复杂业务规则):将GWT中的Then扩展为条件-行为-结果分支链条。
前置条件
- 验收需求已结构化:功能点、入口、预期输出、边界值均已确定。
- 指标定义已对齐:关键绩效指标(KPI)、服务等级目标(SLO)、精度阈值已被产品、开发、测试三方签字确认。
- 术语表已锁定:团队内使用完全一致的术语(如“结算金额”不可混用“支付金额”)。
- 模板版本号已确定:本次编写遵循的句式模板版本应记录在《验收标准样式文档》中。
操作步骤
- 确定验收粒度:每个验收标准只描述一个独立的行为路径。若某功能有3条不同路径则写出3条标准。
-
选择句式模板:
- 用户操作场景 → GWT
- 系统自动/条件驱动场景 → CBR -
填充主语与参数:主语必须是具体对象(“用户”“订单系统”“网关”),参数必须使用实际数值或变量名。
反例:“When 查询超时” → 缺少主语、超时值未定义。
正例:“When 订单查询耗时超过3000ms” → 主语+具体值。 - 动词替换为可测量动作:避免“确保”“应能”“应该支持”等模糊词。替换为“返回状态码”“弹出按钮”“减少库存”“写入日志”。
- 结果绑定阈值或断言:每个Then/结果必须有确切的可通过/不通过判断方式。例如:“订单状态变更为‘已退款’,且退款金额精确到分,精度不得超过0.01元偏差”。
- 同态复核:由另一个人按照输入输出物清单逐字段核验句式的完整性。
输入输出物
| 输入物 | 来源 | 输出物 | 接收方 |
|---|---|---|---|
| 功能需求文档(FRD) | 产品经理 | GWT/CBR句式验收标准清单 | 测试工程师 |
| 术语定义表 | 技术架构师 | 每项验收标准对应的指标断言 | 开发工程师 |
| 边界值分析表 | 测试 | 异常处理分支的CBR模板 | 质量保证负责人 |
| 验收标准样式模板(第3版) | 项目管理办公室(PMO) | 可衡量性自检表 | 评审委员会 |
责任边界
- 产品经理:提供业务上下文,确保GWT中的Given反映真实用户前置条件。
- 开发工程师:检查CBR中的条件是否在代码中已有精确的if/else对应。
- 测试工程师:为每条验收标准编写可执行的断言,并将结果写入测试用例管理系统。
- 质量保证负责人:最终签字前使用“可衡量性扫描矩阵”检查每条标准是否满足主语+动词+阈值三要素。
记录材料
| 记录名称 | 文件格式(推荐) | 保留期限 | 责任人 |
|---|---|---|---|
| 验收标准库(GWT&CBR句式) | YAML 清单 / 电子表格 | 产品全生命周期 | 测试负责人 |
| 可衡量性自检记录 | PDF 扫描件 | 至版本下架 | 质量保证负责人 |
| 评审签字表 | 纸质或电子签名 | 项目结束+3年 | 项目经理 |
异常处理
- 条件之间存在交叉:当单个CBR中的条件分支超过3个时,必须拆分成多行独立标准;否则评审不通过。
- 数值边界未定义:如果验收标准中出现“大量”“较快”“合理”等定性词,立即退回至产品经理处,补充精确数值后重新提交。
- GWT中Given缺失上下文:When动作所需的前置状态必须在Given中完整声明;若无法声明则切换到CBR句式。
- 责任边界冲突:当两条标准对同一指标有不同断言(例如“订单超时2s返回错误” vs “订单超时3s返回错误”),质量保证负责人介入优先级裁定。
常见陷阱:团队成员有时会把GWT写成顺序场景,例如“Given A, When B, Then C, When D, Then E”——一个验收标准只能含一个When/行为。多个When必须分裂为多条独立标准。
验收标准组织正文(两种句式实操模板)
以下为实际项目中使用的标准填充模板与示例对比:
| 句式 | 通用模板 | 合格示例 | 不合格示例(不可衡量) |
|---|---|---|---|
| Given-When-Then | |
|
|
| 条件-行为-结果 | |
|
|
实战检查清单(使用前自问):
- 句子的主语是否可指代唯一模块/用户?(不要写“系统”这种宽泛主语)
- 动作能否通过日志、返回值、UI截图或数据库记录直接验证?
- 门槛值/阈值是否包含单位、精度、时间范围?(例如“ms”“分”“0.01” “5秒内”)
- 是否一条标准只描述一个行为路径?(不要用“并且”“同时”连接两个行为)