3. INVEST 原则详解:独立性、可协商、有价值、可估算、大小适当、可测试
3.1 为什么需要 INVEST 原则?
在用户故事与验收条件的实战中,团队常遇到四种“坏故事”:
- 耦合故事:“用户登录后看到仪表盘” – 登录与仪表盘强绑定,无法独立开发。
- 黑洞故事:“系统要更快” – 无法协商、无法估算、无法测试。
- 伪价值故事:“把数据库从 MySQL 迁到 PostgreSQL” – 用户完全不感知,除非关联性能指标。
- 巨无霸故事:“实现完整订单生命周期” – 太大,一个 Sprint 无法完成。
INVEST 原则由 Bill Wake 提出,是针对单个用户故事的质量检查清单。它不指导需求拆解的流程,而是为“写好的故事”提供可执行的评价标准。
实战提示:在需求评审会前,PO 应先用 INVEST 六项对每条故事自检。哪怕只发现“不可测试”一条,就应立即打回补充验收场景。
3.2 六大原则详解
| 字母 | 原则 | 核心含义 | 典型反例 |
|---|---|---|---|
| I | Independent(独立) | 故事之间不强制依赖,可单独开发、测试、交付 | “先完成A才能做B” – 把两部电梯串成一部电梯 |
| N | Negotiable(可协商) | 故事是对话邀请,不是签死的合同 | “必须使用OAuth2.0” – 没有给技术方案留协商空间 |
| V | Valuable(有价值) | 对用户或业务有直接可感知的价值 | “增加日志级别配置” – 用户看不见,价值需解释 |
| E | Estimable(可估算) | 团队能基于足够信息给出合理估值 | “优化系统性能” – 无基线、无目标,无法估算工作量 |
| S | Small(大小适当) | 一个 Sprint 内可完成的粒度 | “实现完整支付网关” – 通常需要拆为3~5个故事 |
| T | Testable(可测试) | 存在明确的验收条件,可以客观验证通过/失败 | “界面更好看” – 主观审美,无法写自动化测试 |
3.3 实战中的权衡与常见陷阱
独立性 vs. 顺序依赖
完全独立很难。当故事间确实存在时序依赖时,可在故事标题加 [依赖#S4] 标记,并在验收条件中注明前置条件。但不应超过2层。
可协商 ≠ 不提方案
在用户访谈中,我们常听到用户直接给出解决方案:“加一个筛选按钮”。正确做法是把方案转化为用户目标:“让用户能快速找到已完成的订单”。留给技术团队协商具体交互形式。
有价值必须可量化
在验收条件中嵌入度量指标:
- “完成此功能后,客服工单量预计降低 20%” – 指标验证
- “用户完成首次下单的时间缩短至 3 分钟以内” – UX 指标
关键动作:每写一条故事,问自己“如果我今天只交付这一条故事,用户能获得什么可测量的收益?” 如果答案模糊,则该故事可能缺乏真实价值。
3.4 INVEST 检查流程图
3.5 实战模板:INVEST 自检表
在交付物模板中,每一条用户故事应附带以下自检记录:
故事标题:[角色] + [行动] + [目标]
INVEST 自检:
- [ ] I(独立):该故事不依赖其他未完成故事?
- [ ] N(可协商):实现方案未预先锁定?
- [ ] V(有价值):用户(或业务)能直接感知价值?
- [ ] E(可估算):团队能给出 1-13 点的估算?
- [ ] S(大小适当):预计开发 < 3 天工作量?
- [ ] T(可测试):至少存在 2 个明确的验收条件?
结论:☐ 通过 ☐ 需打回优化
常见误区:不要为了通过 INVEST 而把故事写得太虚。例如“用户能看到订单列表”虽然独立、可测试,但如果缺少“排序”“筛选”等具体行为,往往在验收时才发现遗漏。INVEST 应与验收条件写作结合使用。
3.6 与验收条件的关系
INVEST 中的“T(可测试)”直接驱动验收条件的撰写。一个可测试的故事必须满足:
- 存在明确的前置条件(Given)
- 具备可执行的触发动作(When)
- 输出可量化的预期结果(Then)
如果故事无法用 Given-When-Then 模板写出至少一条验收条件,则违反了 T 原则。此时应返回用户访谈环节,向用户追问:“你如何知道这件事做完了?你会在界面上看到什么?数据有什么变化?”
3.7 案例分析:从坏故事到 INVEST 达标
| 阶段 | 故事原文 | 违反原则 | 改进后 |
|---|---|---|---|
| 原始 | “优化商品搜索体验” | 不可估算、不可测试 | — |
| 用户访谈 | 用户:搜索后结果太多,想按价格筛 | — | — |
| 改进后 | “作为买家,我能在搜索结果页按价格区间筛选,以便快速找到预算内的商品” | 通过全部六项 | 验收条件示例: Given 搜索“手机”获得200个结果 When 设置价格区间 1000-2000元 Then 结果数减少至 ≤50个 |
3.8 总结:每日反射
推荐团队在每日站会后花 2 分钟对照 INVEST 检查一条待办故事。如果发现“不可协商”(如 PO 已指定第三方 API)或“大小不当”(超过 5 个验收条件),立刻拆解或升级讨论。坚持两周,PRD 质量将显著提升。