关于 project-sizing-guide
project-sizing-guide 是面向软件团队的项目工作量估算技能,提供 PERT、T 恤尺码和功能点分析方法,并通过风险区间与置信区间呈现估算结果。
主要功能
- 01PERT 三点估算与置信区间
- 02T 恤尺码评估与转换
- 03功能点分析与工作量换算
- 04按需求拆分工作分解结构
- 05Python 估算计算脚本
适用场景
- 01早期项目可行性与粗略预算
- 02迭代计划中的任务估算
- 03大型项目投标工作量评估
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ zebbern/ claude-code-guide --skill project-sizing-guide安装后在 Claude Code 中输入/project-sizing-guide确认已加载。
附带文件LICENSEscripts/estimate_calculator.py
详细介绍
项目规模评估指南 — 软件项目工作量估算
帮助团队基于三种主要方法——三点估算法(PERT)、T 恤尺码估算法和功能点分析法(FPA)——科学地估算软件项目工作量。输出乐观、最可能和悲观值,以及风险区间。
快速开始
- 用户提供需求描述 → Agent 识别功能模块,并将其分解为工作分解结构(WBS)
- 选择估算方法 → 根据项目阶段和可用信息选择最合适的方法
- 估算每个条目 → 为每个工作包指定 O/M/P(乐观/最可能/悲观)值
- 汇总并报告 → 生成包含风险分析和置信区间的估算报告
可使用计算辅助工具:
python3 scripts/estimate_calculator.py --method pert --tasks '[{"name":"User Login","O":2,"M":3,"P":8}]'
方法选择指南
| 场景 | 推荐方法 | 理由 |
|---|---|---|
| 早期可行性研究、粗略预算 | T 恤尺码估算法 | 可用信息较少;快速对齐工作量级 |
| Sprint 规划、迭代估算 | 三点估算法(PERT) | 粒度适中,并提供置信区间 |
| 合同投标、大型项目 RFP | 功能点分析法(FPA) | 最严谨,便于与行业数据比较 |
| 团队有历史数据 | PERT + 历史数据校准 | 将经验修正与数据相结合 |
方法 1:三点估算法(PERT)
核心公式
| 指标 | 公式 | 含义 |
|---|---|---|
| 期望值 E | (O + 4M + P) / 6 | 加权平均工作量 |
| 标准差 σ | (P − O) / 6 | 估算不确定性 |
| 方差 V | σ² | 用于汇总各项任务 |
| 项目总期望值 | ΣE | 各项期望值之和 |
| 项目总标准差 | √(ΣV) | 方差之和的平方根 |
其中:
- O(乐观):假设一切顺利时的最短工期
- M(最可能):正常情况下的工期
- P(悲观):出现重大困难时的最长工期
置信区间
| 置信水平 | 区间 | 使用场景 |
|---|---|---|
| 68.3% | E ± 1σ | 内部粗略估算 |
| 90% | E ± 1.645σ | 项目规划 |
| 95% | E ± 2σ | 对外报价 |
| 99.7% | E ± 3σ | 合同承诺 |
步骤
- 构建 WBS:将需求分解为可独立估算的最小单元(建议每项 ≤ 5 人天)
- 进行三点估算:为每个工作包提供 O / M / P 值(使用统一单位:人时或人天)
- 计算每项任务的期望值和标准差
- 汇总项目级指标:总期望值 = ΣE,总标准差 = √(Σσ²)
- 输出置信区间:根据风险偏好选择置信水平
O/M/P 估算经验法则
- O 不应低于 M 的 30%(过于乐观可能意味着忽略了必要步骤)
- P 不应超过 M 的 5 倍(过于悲观可能意味着需求不明确,应先澄清)
- 如果 O ≈ M ≈ P,说明任务要么极其明确,要么估算者没有认真考虑风险
- P/O 比率(离散比率)反映不确定性:< 2 = 低风险,2–4 = 中风险,> 4 = 高风险
方法 2:T 恤尺码估算法
规模参考表
| 规模 | 典型范围(人天) | 典型故事点 | 适用于 |
|---|---|---|---|
| XS | 0.25 – 0.5 | 1 | 配置更改、文案编辑、简单的错误修复 |
| S | 0.5 – 2 | 2 – 3 | 单组件开发、简单的 API、细微的 UI 调整 |
| M | 2 – 5 | 5 – 8 | 完整的功能模块、中等复杂度的 API |
| L | 5 – 15 | 13 – 21 | 需要集成的跨模块功能 |
| XL | 15 – 40 | 34 – 55 | 需要架构设计的子系统级开发 |
| XXL | 40+ | 89+ | 应拆分到多个迭代中;不建议作为单个估算单位 |
将 T 恤尺码转换为三点估算
需要更精确的数字时,可以将 T 恤尺码转换为三点估算:
| 规模 | O(人天) | M(人天) | P(人天) |
|---|---|---|---|
| XS | 0.25 | 0.5 | 1 |
| S | 0.5 | 1 | 2.5 |
| M | 2 | 3.5 | 7 |
| L | 5 | 10 | 20 |
| XL | 15 | 25 | 50 |
| XXL | 40 | 70 | 150 |
步骤
- 团队对齐:确认每种尺码的含义(上表仅供参考;团队可自行调整)
- 独立评估:每个人独立分配尺码,以避免锚定偏差
- 讨论差异:估算结果相差超过 2 个尺码时,必须进行讨论
- 达成共识:采用团队共识值
- 转换为数字(可选):使用上表推算 O/M/P 值
方法 3:功能点分析(FPA)
五种功能组件类型
| 组件类型 | 缩写 | 定义 | 示例 |
|---|---|---|---|
| 内部逻辑文件 | ILF | 由应用维护的逻辑数据组 | 用户表、订单表 |
| 外部接口文件 | EIF | 应用引用但不维护的数据组 | 第三方汇率数据 |
| 外部输入 | EI | 从外部进入系统的数据处理 | 表单提交、API POST |
| 外部输出 | EO | 生成并发送到系统外部的数据 | 报告生成、导出 |
| 外部查询 | EQ | 简单的数据检索 + 显示 | 列表查询、详情页 |
复杂度权重矩阵
| 组件类型 | 低 | 中 | 高 |
|---|---|---|---|
| ILF | 7 | 10 | 15 |
| EIF | 5 | 7 | 10 |
| EI | 3 | 4 | 6 |
| EO | 4 | 5 | 7 |
| EQ | 3 | 4 | 6 |
复杂度评估规则
ILF / EIF 复杂度(基于 DET – 数据元素类型和 RET – 记录元素类型):
| DET 1-19 | DET 20-50 | DET 51+ | |
|---|---|---|---|
| RET 1 | 低 | 低 | 中 |
| RET 2-5 | 低 | 中 | 高 |
| RET 6+ | 中 | 高 | 高 |
EI 复杂度(基于 DET 和 FTR – 引用的文件类型):
| DET 1-4 | DET 5-15 | DET 16+ | |
|---|---|---|---|
| FTR 0-1 | 低 | 低 | 中 |
| FTR 2 | 低 | 中 | 高 |
| FTR 3+ | 中 | 高 | 高 |
EO / EQ 复杂度(基于 DET 和 FTR):
| DET 1-5 | DET 6-19 | DET 20+ | |
|---|---|---|---|
| FTR 0-1 | 低 | 低 | 中 |
| FTR 2-3 | 低 | 中 | 高 |
| FTR 4+ | 中 | 高 | 高 |
将功能点转换为工作量
计算未调整功能点(UFP)后:
-
计算价值调整因子(VAF)(可选;自 IFPUG 4.3+ 起已弃用,但部分团队仍在使用)
- 14 项通用系统特征(GSC),每项评分为 0–5
- VAF = 0.65 + 0.01 × Σ(GSC)
- 调整后功能点 AFP = UFP × VAF
-
将功能点转换为人时
- 行业基准:每个功能点 8–15 人时(因语言和团队成熟度而异)
技术栈 人时 / FP 备注 低代码 / 成熟框架 4 – 8 有许多可复用组件 Python / JS / 现代 Web 8 – 12 主流开发生产力 Java / C# 企业级 10 – 15 包含架构和标准方面的开销 嵌入式 / C / C++ 15 – 25 调试和测试成本较高 遗留系统维护 20 – 30 理解代码和回归测试的成本
步骤
- 识别功能组件:列出所有 ILF、EIF、EI、EO 和 EQ
- 评估复杂度:将每个组件评为低 / 中 / 高
- 计算 UFP:对所有组件求和(数量 × 权重)
- 选择转换系数:根据技术栈选择每个 FP 对应的人时
- 计算总工作量:UFP × 转换系数
- 增加缓冲:建议预留 15–30% 的管理和风险缓冲
估算调整因素检查清单
完成估算后,请确认已考虑以下因素:
技术因素
- 对技术栈的熟悉程度(团队是否有经验?如果不熟悉,增加 30–50%)
- 技术债务(遗留代码质量差?增加 20–40%)
- 第三方依赖(API 不稳定?缺少文档?增加 10–30%)
- 性能 / 安全要求(是否有特殊的非功能性要求?增加 15–25%)
团队因素
- 团队规模(超过 5 人后,沟通开销会显著增加;每增加 1 人,增加约 5%)
- 人员流失风险(关键成员可能离职?增加 15–25%)
- 并行项目(团队需要在多个项目之间切换上下文?增加 20–30%)
- 新成员入职(有新员工?预计前 2 周效率降低约 50%)
流程因素
- 需求稳定性(需求可能变更?增加 20–50%)
- 审批流程(需要多层审批?增加 10–20%)
- 部署复杂度(需要部署到多个环境或区域?增加 10–15%)
- 合规要求(是否涉及审计或合规流程?增加 15–30%)
常被低估的工作
- 代码评审:+10–15%
- 编写单元测试:+15–25%
- 集成 / E2E 测试:+10–20%
- 文档:+5–15%
- 修复 Bug 和回归测试:+10–20%
- 环境搭建和 DevOps:+5–10%
- 会议和沟通:+10–15%
估算输出模板
Agent 完成估算后,应按以下格式输出:
## Estimation Report: [Project / Feature Name]
### Estimation Method: [PERT / T-shirt / FPA]
### Work Package Breakdown
| # | Work Package | O (person-days) | M (person-days) | P (person-days) | E (person-days) | σ |
|---|-------------|-----------------|-----------------|-----------------|-----------------|---|
| 1 | xxx | x | x | x | x.x | x.x |
| 2 | xxx | x | x | x | x.x | x.x |
### Summary
- Total expected effort: X person-days
- Total standard deviation: X person-days
- 68% confidence interval: X – X person-days
- 90% confidence interval: X – X person-days
- 95% confidence interval: X – X person-days
### Adjustment Factors
- [Factors considered and adjustments applied]
### Final Recommendation
- For internal planning: X person-days (90% confidence)
- For external quotes: X person-days (95% confidence)
### Risk Alerts
- [Key risk items and mitigation suggestions]
计算工具
scripts/estimate_calculator.py 脚本支持对全部三种估算方法进行数值计算:
# Three-Point Estimation (PERT)
python3 scripts/estimate_calculator.py --method pert \
--tasks '[{"name":"Login Module","O":2,"M":3,"P":8},{"name":"Payment Module","O":5,"M":10,"P":20}]'
# T-shirt Size Conversion
python3 scripts/estimate_calculator.py --method tshirt \
--tasks '[{"name":"Login Module","size":"M"},{"name":"Payment Module","size":"L"}]'
# Function Point Analysis
python3 scripts/estimate_calculator.py --method fpa \
--components '[{"type":"ILF","complexity":"medium","count":3},{"type":"EI","complexity":"low","count":5}]' \
--hours-per-fp 10
参考资料
- IFPUG(国际功能点用户组)CPM 4.3.1
- PMI《PMBOK 指南》第 6 版,第 6.4 节:估算活动持续时间
- Steve McConnell,《软件估算:揭开黑箱》
- Mike Cohn,《敏捷估算与规划》
评论
支持 Markdown