用户场景描述规范:模板化编写用户故事、场景卡片、前置后置条件
适用场景
本规范适用于以下场景:
- PRD 中需要以用户视角描述功能,且团队规模 ≥ 5 人的协作项目。
- 功能点较多,需要标准化格式以便评审和排期。
- 跨角色(产品、开发、测试、设计)对需求理解一致性的要求较高。
- 希望后续验收测试可直接复用场景卡片作为测试用例输入。
前置条件
- 已确认项目背景、目标用户和核心业务价值。
- 至少完成初步的“功能列表”或“需求点清单”。
- 团队已统一用户故事编写标准(如 INVEST 原则)。
- 产品经理已掌握“前置-后置条件”的概念。
操作步骤
本章节提供三段式模板:用户故事 → 场景卡片 → 前置/后置条件。每个步骤输出对应物。
步骤 1:编写用户故事(User Story)
使用标准 As‑a / I‑want / So‑that 句型,附上验收标准缩写。模板:
As a [用户角色]
I want [功能目标]
So that [业务价值]
[可选] Acceptance criteria:
1. ...
2. ...
示例:
As a 普通用户
I want 使用邮箱+验证码登录
So that 无需记忆密码即可快速进入系统
AC1: 输入正确邮箱后,60秒内收到6位验证码
AC2: 验证码错误3次锁定5分钟
步骤 2:编写场景卡片(Scenario Card)
每张卡片对应一个独立的正常流或异常流。卡片包含:标题、触发条件、步骤序列、期望结果。推荐结构:
| 字段 | 说明 | 示例 |
|---|---|---|
| 卡片 ID | 格式 [项目缩写]-SC-序号 | PROJ-SC-001 |
| 关联故事 | 对应的用户故事 ID | US-003 |
| 标题 | 简短描述场景 | 正常登录 – 验证码正确 |
| 触发条件 | 用户执行的动作 | 用户点击“获取验证码” |
| 步骤 | 1. … 2. … 3. … | 1. 输入邮箱 2. 点击验证 3. 输入正确码 |
| 预期结果 | 系统最终状态 | 登录成功,跳转首页 |
步骤 3:明确前置条件(Pre-condition)与后置条件(Post-condition)
前置条件:场景执行前必须为真的系统/环境状态。
后置条件:场景执行成功后保证的系统变更。
为每个场景卡片填写:
前置条件示例:用户已注册且邮箱可用;系统未处于维护模式;当前未达到每日验证码上限。
后置条件示例:用户会话 token 已生成;登录日志记录成功;验证码已标记为已使用。
步骤 4:关联与归档
将用户故事与场景卡片通过 ID 关联。使用矩阵表格或需求管理工具 Mapping。输出物为《用户故事‑场景卡片映射表》。
输入输出物
| 类型 | 输入物 | 输出物 |
|---|---|---|
| 输入 | 需求清单、目标用户画像、业务规则文档 | — |
| 输出 | — | 用户故事集(含 AC)、场景卡片矩阵(含前置/后置条件)、映射表 |
责任边界
- 产品经理:负责编写用户故事和场景卡片初稿,保证前置/后置条件完整。
- 技术负责人:审核前置条件中系统约束是否可行,后置条件是否有性能/数据影响。
- QA 负责人:验证场景卡片能否直接转化为测试用例,补充遗漏的异常流。
- 设计/UX:确保场景卡片中的用户步骤在交互上可达。
记录材料
- 用户故事模板(.md / .docx)
- 场景卡片模板(.xlsx 或 .csv,含前置/后置条件列)
- 评审意见记录表(附录在 PRD 末或独立 Wiki 页)
异常处理
| 异常情况 | 处理方式 |
|---|---|
| 用户故事未定义明确的用户角色 | 退回补充,要求使用 As a … 明确角色 |
| 场景卡片缺少后置条件 | 强制要求填写“至少一条后置条件”,异常流可为空但需注明 |
| 前置条件与实际系统状态冲突 | 技术负责人标记并协商调整条件或修改功能 |
| 同一故事下有超过 8 张场景卡片 | 考虑拆分为更小的用户故事,避免过重 |
| 评审时发现场景覆盖不全(如缺失权限异常) | QA 负责补充,经产品经理确认后入库 |
验收标准
- 每个用户故事拥有唯一 ID,格式
US-序号。 - 每个用户故事至少关联 ≥ 1 张场景卡片。
- 每张场景卡片必须包含前置条件与后置条件(可各为 1 条或以上)。
- 前置条件与后置条件可验证(不包含模糊描述)。
- 场景卡片步骤 ≤ 7 步,否则需拆分。
- 映射表中无未关联的孤立卡片或无卡片关联的孤故事。
- 评审时所有异常处理记录已更新到 PRD 附录。
流程关系图
常见错误:将前置条件写成用户操作(如“用户输入邮箱”),这是步骤不是条件。前置条件应描述系统/环境状态,例如“系统时间与 NTP 同步”、“用户账号状态为正常”。后置条件必须明确是否涉及数据持久化、状态变更或外部系统通知。