程序员小明接了个外包项目,报价3万,做完才发现要亏2万… 产品经理小红提了需求,开发说要做3个月,其实1个月就能搞定…
软件项目的报价,为什么总是”公说公有理,婆说婆有理”?
今天给大家介绍一套国标认可、行业通用的估价方法——功能点估算法(FPA)。学会它,不管是甲方预算编制,还是乙方项目报价,都有据可依!👇
一、🤔 什么是功能点估算法?
一句话解释
从用户视角,按”功能数量”来度量软件规模,进而估算开发成本。
三大特点
| 特点 | 说明 | |:–:|:–| | 👤 用户视角 | 看”提供什么功能”,不看”代码写多少行” | | 🔧 技术无关 | Java还是Python,同样功能点数相同 | | ⏰ 早期估算 | 需求阶段就能估,不用等设计完成 |
📌 这套方法1979年由IBM提出,现已被《中国软件行业基准数据》采纳,是政府信息化项目造价的标准方法。
二、🧩 五大功能类型:怎么识别?
功能点计算的核心是识别两大类五种功能。很多人第一次学都会问:“数据表”和”操作”为什么要分开算? 先搞清楚这个,后面就顺了。
💡 核心概念:数据 vs 操作
| 类比 | 数据功能(ILF/EIF) | 事务功能(EI/EO/EQ) |
|---|---|---|
| 图书馆 | 书架上的书 | 借书、还书、查书这些动作 |
| 冰箱 | 冰箱本体(存储空间) | 放菜、拿菜、看菜这些操作 |
| 数据库 | 表结构(字段、关系) | 增删改查这些SQL操作 |
为什么要分开算?
- 建书架/买冰箱 → 这是硬件成本(数据功能的开发工作量)
- 借书/放菜 → 这是使用成本(事务功能的开发工作量)
两者缺一不可,所以要分别计算!
🔸 第一类:数据功能(存储类)
这是”装数据的容器”,先判断是”我的”还是”别人的”:
| 类型 | 全称 | 判定口诀 | 举个例子 |
|---|---|---|---|
| ILF | 内部逻辑文件 | “我的数据我维护” | 订单表、用户表(本系统增删改查) |
| EIF | 外部接口文件 | “别人的数据我只读” | 字典表、第三方接口数据 |
💡 注意:这里的”文件”不是指电脑里的文件,而是一组用户可识别的逻辑数据,比如数据库表、接口返回的数据集等。
🔸 第二类:事务功能(操作类)
这是”对数据的动作”,判断是”增删改”还是”查”:
| 类型 | 全称 | 判定口诀 | 举个例子 |
|---|---|---|---|
| EI | 外部输入 | “增删改” | 新增订单、修改用户信息 |
| EO | 外部输出 | “带计算的报表” | 统计报表、数据分析(含汇总/公式) |
| EQ | 外部查询 | “纯查询无计算” | 查看详情、列表筛选 |
🎯 它们如何配合?看个完整例子
以外卖小程序为例:
┌─────────────────────────────────────────┐
│ 数据功能(底座) │
├─────────────────────────────────────────┤
│ 订单表(ILF) ← 存所有订单信息 │
│ 用户表(ILF) ← 存用户信息 │
│ 商家信息(EIF) ← 从第三方平台读取 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 事务功能(应用) │
├─────────────────────────────────────────┤
│ 下单(EI) → 往订单表写数据 │
│ 取消订单(EI) → 修改订单表状态 │
│ 查看订单(EQ) → 从订单表读数据 │
│ 销售报表(EO) → 计算营业额/订单量 │
└─────────────────────────────────────────┘
算钱的时候(假设都是低复杂度):
- 建3张表(ILF+ILF+EIF)= 7+7+5 = 19功能点
- 做4个操作(EI+EI+EQ+EO)= 3+3+3+4 = 13功能点
- 合计:32功能点,都要算钱!
三、⚖️ 复杂度判定:功能点怎么算?
不是简单数个数!每个功能要判定复杂度(低/中/高),不同复杂度权重不同。
判定三要素
| 参数 | 含义 | 怎么数 |
|---|---|---|
| DET | 数据元素(字段数) | 表单里有多少个输入项 |
| RET | 记录元素(子表数) | 主表+从表各算1个 |
| FTR | 引用文件数 | 涉及几个ILF/EIF |
权重速查表
| 功能类型 | 低(L) | 中(A) | 高(H) |
|---|---|---|---|
| ILF | 7 | 10 | 15 |
| EIF | 5 | 7 | 10 |
| EI | 3 | 4 | 6 |
| EO | 4 | 5 | 7 |
| EQ | 3 | 4 | 6 |
四、💰 价格估算:从功能点到人民币
这是最实用的部分!计算出功能点后,如何得到最终报价?
计算流程
功能点(UFP) → 规模调整 → 工作量(人时) → 成本(元)
关键公式
1️⃣ 调整后规模
S = UFP × CF
| 项目阶段 | 规模变更因子(CF) | 说明 |
|---|---|---|
| 预算/概算 | 1.39 | 需求模糊,预留缓冲 |
| 投标/计划 | 1.21 | 需求基本明确 |
| 需求分析 | 1.10 | 需求较明确 |
| 交付阶段 | 1.00 | 需求完全明确 |
2️⃣ 工作量计算
AE = S × PDR
- PDR(生产率):2025年行业基准 6.72人时/功能点(P50中位数)
- 简单项目可低至 3.11,复杂项目可能达 11.29
3️⃣ 成本计算(人月法)
SDC = (AE ÷ 174) × F + DNC
- 174:人月折算系数(21.75天×8小时)
- F:人月费率(见下表)
- DNC:直接非人力成本(差旅、办公等,通常5%-15%)
2025年人月费率参考
| 城市 | 人月费率 | 功能点单价 |
|---|---|---|
| 北京 | ~2.8万 | ~1,244元 |
| 上海 | ~2.7万 | ~1,200元 |
| 深圳 | ~2.6万 | ~1,150元 |
| 广州 | ~2.4万 | ~1,060元 |
| 成都/西安 | ~1.8-2万 | ~800-900元 |
数据来源:《2025年中国软件行业基准数据CSBMK®-202510》
五、🌰 实战案例:学生成绩管理系统
需求:老师可录入/修改/删除成绩;学生可查询;可生成统计报表;需调用学校学生库。
Step 1:功能点计算
先拆分成数据层和操作层:
📁 数据层(装数据的地方)
| 功能 | 类型 | 为什么算它? | 权重 | 点数 |
|---|---|---|---|---|
| 成绩表 | ILF | 系统要维护成绩数据,得有地方存 | 7 | 7 |
| 学生基本信息 | EIF | 从学校系统读取,不是本系统的 | 5 | 5 |
| 小计 | 12 FP |
⚙️ 操作层(对数据的动作)
| 功能 | 类型 | 操作说明 | 权重 | 点数 |
|---|---|---|---|---|
| 录入成绩 | EI | 往成绩表写数据 | 3 | 3 |
| 修改成绩 | EI | 修改成绩表数据 | 3 | 3 |
| 删除成绩 | EI | 删除成绩表数据 | 3 | 3 |
| 学生查成绩 | EQ | 从成绩表读数据 | 3 | 3 |
| 生成统计报表 | EO | 计算平均分等 | 4 | 4 |
| 小计 | 16 FP |
📊 合计
┌────────────────────────────────────┐
│ 数据层:12 FP(建表的工作量) │
│ 操作层:16 FP(做接口页面工作量) │
├────────────────────────────────────┤
│ 总计:28 FP │
└────────────────────────────────────┘
Step 2:工作量估算(预算阶段)
- 调整后规模:28 × 1.39 = 38.92 FP
- 工作量:38.92 × 6.72 = 261.5人时(约33人天/1.5人月)
Step 3:成本计算(以成都为例)
- 人力成本:(261.5÷174) × 20,000 = 30,057元
- 非人力成本(10%):3,006元
- 总成本:约3.3万元
💡 报价区间建议
| 场景 | 生产率 | 总成本 |
|---|---|---|
| 乐观(P25) | 3.11 | ~1.5万 |
| 最可能(P50) | 6.72 | ~3.3万 |
| 保守(P75) | 11.29 | ~5.5万 |
建议报价:3.0万 - 3.5万元
六、📝 总结速记卡
🧠 核心理解
软件 = 数据(ILF/EIF) + 操作(EI/EO/EQ)
↓ ↓
建数据库/表 做接口/页面
(存储的代价) (使用的代价)
🔍 识别三步走
- 画边界:哪些是系统内的,哪些是外部的
- 找数据:ILF(我维护)vs EIF(我引用)→ 这是”装数据的容器”
- 看操作:EI(增删改)/ EO(复杂报表)/ EQ(简单查询)→ 这是”用数据的动作”
💰 估算四步走
- 算功能点:数据功能点 + 事务功能点,按复杂度查表累加
- 调规模:乘以阶段因子(1.39/1.21/1.10/1.00)
- 算工作量:乘以生产率(6.72人时/FP)
- 转成本:除以174,乘以人月费率
❗ 常见误区
- ❌ “我只要做查询功能,为什么算我数据表的钱?”
✅ 没有表,查什么?建表本身就要工作量! - ❌ “数据表不是我开发的,为什么算功能点?”
✅ EIF就是算”引用外部数据”的工作量,集成对接也要成本!
七、❓ 常见问题
Q:功能点法和”人天估算法”有什么区别? A:人天估算是”拍脑袋”凭经验,功能点法是”数功能”更客观,适合甲乙双方对账。
Q:小项目用功能点法是不是太麻烦? A:可以用简化版:NESMA快速法 = 35×ILF + 15×EIF,5分钟出结果。
Q:甲方预算和乙方报价差距大怎么办? A:建议以《中国软件行业基准数据》为参照,生产率取P50(中位数),人月费率取当地统计值。
觉得有用?收藏转发给需要的朋友! 📤
你在项目估算中遇到过什么坑?欢迎在评论区交流~👇
本文数据来源:
- 《2025年中国软件行业基准数据 CSBMK®-202510》
- 《软件工程 软件开发成本度量规范》(GB/T 36943-2018)
- 《信息技术应用创新软件适配改造成本评估规范》(DB32/T 4935-2024)