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 检查流程图

INVEST 用户故事质量检查流程 原始用户故事 I 独立? 能否单独开发/测试 N 可协商? 是否留有方案空间 V 有价值? 用户可感知 E 可估算? 团队能给出估值 S 大小适当? 一个Sprint内可完成 T 可测试? 有明确验收条件 六项全部通过 进入 Sprint Backlog 某项不通过 打回细化或拆分 ⚠ 注意:INVEST 是定性评估,非精确评分。不合格故事不意味着删除, 而是提示需要进一步需求拆解、用户访谈或拆分。

3.5 实战模板:INVEST 自检表

在交付物模板中,每一条用户故事应附带以下自检记录:

故事标题:[角色] + [行动] + [目标]
INVEST 自检:
- [ ] I(独立):该故事不依赖其他未完成故事?
- [ ] N(可协商):实现方案未预先锁定?
- [ ] V(有价值):用户(或业务)能直接感知价值?
- [ ] E(可估算):团队能给出 1-13 点的估算?
- [ ] S(大小适当):预计开发 < 3 天工作量?
- [ ] T(可测试):至少存在 2 个明确的验收条件?
结论:☐ 通过  ☐ 需打回优化
常见误区:不要为了通过 INVEST 而把故事写得太虚。例如“用户能看到订单列表”虽然独立、可测试,但如果缺少“排序”“筛选”等具体行为,往往在验收时才发现遗漏。INVEST 应与验收条件写作结合使用。

3.6 与验收条件的关系

INVEST 中的“T(可测试)”直接驱动验收条件的撰写。一个可测试的故事必须满足:

  1. 存在明确的前置条件(Given)
  2. 具备可执行的触发动作(When)
  3. 输出可量化的预期结果(Then)

如果故事无法用 Given-When-Then 模板写出至少一条验收条件,则违反了 T 原则。此时应返回用户访谈环节,向用户追问:“你如何知道这件事做完了?你会在界面上看到什么?数据有什么变化?”

3.7 案例分析:从坏故事到 INVEST 达标

阶段 故事原文 违反原则 改进后
原始 “优化商品搜索体验” 不可估算、不可测试 —
用户访谈 用户:搜索后结果太多,想按价格筛 — —
改进后 “作为买家,我能在搜索结果页按价格区间筛选,以便快速找到预算内的商品” 通过全部六项 验收条件示例:
Given 搜索“手机”获得200个结果
When 设置价格区间 1000-2000元
Then 结果数减少至 ≤50个

3.8 总结:每日反射

推荐团队在每日站会后花 2 分钟对照 INVEST 检查一条待办故事。如果发现“不可协商”(如 PO 已指定第三方 API)或“大小不当”(超过 5 个验收条件),立刻拆解或升级讨论。坚持两周,PRD 质量将显著提升。