第4章 When触发动作定义原则:用户操作、系统事件、接口调用

核心要点:When 子句必须描述一个可观察、可测的触发动作,该动作必须来源于三类合法来源之一——用户操作、系统事件或接口调用。任何模糊、不可重复或非确定性的事件描述均视为不合格。

4.1 适用场景

以下场景中必须严格使用三类触发动作之一定义 When 子句:

触发来源适用场景示例不可用描述
用户操作点击按钮、选择下拉项、提交表单、拖拽文件“用户希望…”“用户突然…”
系统事件定时任务触发、状态机跳转、日志达到阈值“系统自动…”“可能发生…”
接口调用HTTP POST 请求、MQ 消息、RPC 调用“某个服务调用…”“接口偶尔…”

4.2 前置条件

  • 已经完成 Given 上下文的状态描述(见第3章)。
  • 参与验收的各方(产品、开发、测试)已对齐触发动作的来源类型。
  • 被测系统(SUT)的边界已明确,外部接口和内部事件渠道已文档化。

4.3 触发动作定义流程

  1. 识别来源:判断该行为是用户主动发起、系统自身触发还是外部调用。
  2. 命名触发动作:使用动词+名词的精确短语,如 提交退款申请、收到支付回调。
  3. 补充参数(可选):如时间范围、金额、消息体等,用结构化方式表达。
  4. 标注预期响应:明确触发后系统应表现的 Observable 行为(此时不写 Then,仅确认触发可被观察)。
最佳实践:推荐在 When 子句后添加 (来源:用户操作) 或 (来源:系统事件) 注释,便于评审时快速归类。

4.4 输入/输出物

类别输入物输出物
需求文档用户故事、用例描述触发动作定义列表
接口规范API 文档、事件 schema触发动作与接口映射表
验收标准初稿未拆分的 GWT 草稿带有来源标签的 When 子句

4.5 责任边界

  • 业务分析师(BA):界定触发动作的业务含义,确保术语一致。
  • 开发人员:确认触发在技术层面可被唯一监听或捕获。
  • 测试人员:设计触发动作的模拟方案,例如通过 Selenium 模拟用户操作、Mock 接口调用。
  • 质量工程师:审核 When 子句是否符合三类来源规则,并排除歧义。

4.6 记录材料

每次验收标准定义后,需填写 触发动作登记表,模板如下:

# 触发动作登记表(示例)
- 验收标准 ID: AC-0047
- When 子句原文: When 用户点击“立即支付”按钮
- 来源: 用户操作
- 触发介质: 鼠标点击(DOM 事件)
- 可观察前置窗口: 按钮在 2 秒内变为可点击状态
- 备注: 需禁用重复点击

4.7 异常处理

异常场景处理方法
同一动作可从多个来源触发拆分为多个 When 子句,每个标注单一来源
动作非原子性(如“填写表单并提交”)拆分为“填写完成”和“提交”两个独立 When
系统事件无精确触发时钟使用 When 系统收到事件队列中的消息X 代替模糊时间
接口调用有重试或超时将重试/超时纳入 Given 上下文,When 只描述第一次触发
常见错误:将触发动作与预期结果混写。例如 “When 用户点击提交,系统显示成功” 是错误的,正确的写法是 When 子句只到“点击提交”为止,然后另起 Then 子句描述“系统显示成功”。

4.8 验收标准

  1. 每个 When 子句必须明确从三类来源(用户操作/系统事件/接口调用)中选择一个。
  2. 触发动作描述必须包含可观察或可模拟的具体事件,不允许用“如果”“可能”“打算”等模糊词。
  3. 当动作来源是接口调用时,必须指明协议(HTTP、MQ、gRPC 等)和端点标识。
  4. 当动作来源是系统事件时,需指明事件名称和触发频次(单次/周期/条件触发)。
  5. 验收标准评审通过前,When 子句必须附带来源标注。
When触发动作的三类来源结构图 When触发动作来源分类 用户操作 点击·输入·选择·拖拽 系统事件 定时·状态跳转·阈值 接口调用 HTTP·MQ·RPC·WebSocket When 触发动作 必须可观察·可模拟·确定唯一来源 动词 + 名词 精确描述 例如:提交退款申请 收到支付回调 定时生成对账单 Then 预期 结果