程序员小明接了个外包项目,报价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)
      ↓                    ↓
   建数据库/表          做接口/页面
   (存储的代价)       (使用的代价)

🔍 识别三步走

  1. 画边界:哪些是系统内的,哪些是外部的
  2. 找数据:ILF(我维护)vs EIF(我引用)→ 这是”装数据的容器”
  3. 看操作:EI(增删改)/ EO(复杂报表)/ EQ(简单查询)→ 这是”用数据的动作”

💰 估算四步走

  1. 算功能点:数据功能点 + 事务功能点,按复杂度查表累加
  2. 调规模:乘以阶段因子(1.39/1.21/1.10/1.00)
  3. 算工作量:乘以生产率(6.72人时/FP)
  4. 转成本:除以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)