Skip to content

估算 ​

核心问题:如何准确估算开发工期?故事点和理想人天有什么区别?

1. 估算方法 ​

方法说明适用场景
故事点相对估算,不直接对应时间Sprint 规划
理想人天假设没有打扰的工作天数项目规划
Planning Poker团队投票达成共识需求评审
T-Shirt SizeS/M/L/XL 粗略估算早期评估

估算方法解决的是不同层次的问题,选择取决于项目阶段与不确定性。

  • 早期需求信息不足时,用 T-Shirt Size 等粗粒度估算,避免过早制造精度。
  • 团队已有稳定的估算尺度和历史数据时,结合故事点与 Velocity 预测迭代交付能力。
  • 面向明确的项目工期、成本或外部承诺时,理想人天不能直接等同于日历工期,需要说明估算对象、工作范围、风险假设与不确定性。
  • 高不确定性任务优先识别未知因素,必要时安排 Spike 获取信息,再更新估算。

2. Planning Poker 实践 ​

java
// Planning Poker 流程
// 1. PO 讲解用户故事
// 2. 团队成员提问澄清
// 3. 每人选择一张牌(故事点)
// 4. 同时亮牌
// 5. 估算差异大时讨论,重新投票
// 6. 达成共识

// 故事点斐波那契数列:1, 2, 3, 5, 8, 13, 21
// 故事点是团队内部的相对估算尺度,综合考虑工作量、技术复杂度和不确定性,
// 不存在跨团队通用的「故事点—代码行数—功能规模」映射。
// 各分值的具体含义通过团队历史故事校准,且应保持同一统计口径,
// 不同估算体系下的 Velocity 不能直接比较。
// 某个故事估算到 13 点时,应检查需求边界、未知因素与拆分可能性,
// 而不是机械地按分值决定是否拆分。

估算的前提是需求足够清晰。参与投票前先检查用户故事是否符合可估算性要求,见需求分析。

3. 速率(Velocity)计算 ​

java
// 速率 = 团队每个 Sprint 完成的故事点数
// 用途:预测未来 Sprint 能完成多少工作

// 示例:
// Sprint 1: 完成 18 点
// Sprint 2: 完成 22 点
// Sprint 3: 完成 20 点
// 平均速率: 20 点/Sprint

// 假设总需求 100 点
// 预计需要: 100 / 20 = 5 个 Sprint

// 100 / 20 = 5 是简化预测,不是工期承诺。预测成立需要几个前提。
// 只统计按团队完成标准真正完成的工作,不把未完成工作按比例计入速率。
// 用多个近期 Sprint 观察波动,并结合团队容量、人员变化和工作类型判断。
// 历史速率稳定不代表未来速率稳定,人员、依赖、需求范围变化会降低预测价值。

速率如何用于 Sprint 容量评估,见敏捷开发中的 Sprint Planning 实践。

4. 估算偏差分析 ​

偏差原因解决方案
需求理解不充分评审时多提问,明确验收标准
技术方案不确定预研/Spike,先验证再估算
遗漏边界条件使用 Checklist 检查
依赖外部团队将依赖风险纳入估算
过于乐观参考历史数据,使用三点估算法
java
// 三点估算法(PERT)
// PERT 加权估算值 = (乐观 + 4 × 最可能 + 悲观) / 6
// 示例:
// 乐观: 2 天
// 最可能: 3 天
// 悲观: 8 天
// PERT 加权估算值 = (2 + 4×3 + 8) / 6 = 3.33 天

估算的核心:估算不是承诺,而是预测。估算的目的是帮助团队做计划,而不是考核个人。允许偏差存在,重要的是持续改进估算的准确性。

Released under the MIT License.