文章

一文搞懂软件项目「功能点估算法」(附价格计算实例)

程序员小明接了个外包项目,报价3万,做完才发现要亏2万... 今天介绍一套国标认可、行业通用的估价方法——功能点估算法(FPA)

一文搞懂软件项目「功能点估算法」(附价格计算实例)

程序员小明接了个外包项目,报价3万,做完才发现要亏2万… 产品经理小红提了需求,开发说要做3个月,其实1个月就能搞定…

软件项目的报价,为什么总是”公说公有理,婆说婆有理”?

今天给大家介绍一套国标认可、行业通用的估价方法——功能点估算法(FPA)。学会它,不管是甲方预算编制,还是乙方项目报价,都有据可依!👇


一、🤔 什么是功能点估算法?

一句话解释

从用户视角,按”功能数量”来度量软件规模,进而估算开发成本。

三大特点

特点说明
👤 用户视角看”提供什么功能”,不看”代码写多少行”
🔧 技术无关Java还是Python,同样功能点数相同
早期估算需求阶段就能估,不用等设计完成

📌 这套方法1979年由IBM提出,现已被《中国软件行业基准数据》采纳,是政府信息化项目造价的标准方法。


二、🧩 五大功能类型:怎么识别?

功能点计算的核心是识别两大类五种功能。很多人第一次学都会问:“数据表”和”操作”为什么要分开算? 先搞清楚这个,后面就顺了。


💡 核心概念:数据 vs 操作

类比数据功能(ILF/EIF)事务功能(EI/EO/EQ)
图书馆书架上的借书、还书、查书这些动作
冰箱冰箱本体(存储空间)放菜、拿菜、看菜这些操作
数据库表结构(字段、关系)增删改查这些SQL操作

为什么要分开算?

  • 建书架/买冰箱 → 这是硬件成本(数据功能的开发工作量)
  • 借书/放菜 → 这是使用成本(事务功能的开发工作量)

两者缺一不可,所以要分别计算!


🔸 第一类:数据功能(存储类)

这是”装数据的容器”,先判断是”我的”还是”别人的”:

类型全称判定口诀举个例子
ILF内部逻辑文件“我的数据我维护”订单表、用户表(本系统增删改查)
EIF外部接口文件“别人的数据我只读”字典表、第三方接口数据

💡 注意:这里的”文件”不是指电脑里的文件,而是一组用户可识别的逻辑数据,比如数据库表、接口返回的数据集等。


🔸 第二类:事务功能(操作类)

这是”对数据的动作”,判断是”增删改”还是”查”:

类型全称判定口诀举个例子
EI外部输入“增删改”新增订单、修改用户信息
EO外部输出“带计算的报表”统计报表、数据分析(含汇总/公式)
EQ外部查询“纯查询无计算”查看详情、列表筛选

🎯 它们如何配合?看个完整例子

外卖小程序为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌─────────────────────────────────────────┐
│           数据功能(底座)                │
├─────────────────────────────────────────┤
│  订单表(ILF)    ← 存所有订单信息        │
│  用户表(ILF)    ← 存用户信息           │
│  商家信息(EIF)  ← 从第三方平台读取      │
└─────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────┐
│           事务功能(应用)                │
├─────────────────────────────────────────┤
│  下单(EI)       → 往订单表写数据        │
│  取消订单(EI)   → 修改订单表状态        │
│  查看订单(EQ)   → 从订单表读数据        │
│  销售报表(EO)   → 计算营业额/订单量      │
└─────────────────────────────────────────┘

算钱的时候

每个功能点根据复杂度(低/中/高)有不同的权重。假设外卖小程序的功能都是低复杂度,计算如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
📁 数据功能(建表)
├── 订单表(ILF)     → 低复杂度 = 7 FP(ILF低复杂度权重为7)
├── 用户表(ILF)     → 低复杂度 = 7 FP
└── 商家信息(EIF)   → 低复杂度 = 5 FP(EIF低复杂度权重为5)
    小计:7 + 7 + 5 = 19 功能点

⚙️ 事务功能(做接口/页面)
├── 下单(EI)        → 低复杂度 = 3 FP(EI低复杂度权重为3)
├── 取消订单(EI)    → 低复杂度 = 3 FP
├── 查看订单(EQ)    → 低复杂度 = 3 FP(EQ低复杂度权重为3)
└── 销售报表(EO)    → 低复杂度 = 4 FP(EO低复杂度权重为4)
    小计:3 + 3 + 3 + 4 = 13 功能点

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💰 合计:19 + 13 = 32 功能点,都要算钱!

💡 权重哪来的? 上面用到的 7/5/3/4 是国标规定的复杂度权重(详见下一节的权重速查表)。简单理解复杂度:字段少、逻辑简单 = 低复杂度;字段多、关联表多、计算复杂 = 高复杂度。


三、⚖️ 复杂度判定:功能点怎么算?

不是简单数个数!每个功能要判定复杂度(低/中/高),不同复杂度权重不同。

判定三要素

参数含义怎么数
DET数据元素(字段数)表单里有多少个输入项
RET记录元素(子表数)主表+从表各算1个
FTR引用文件数涉及几个ILF/EIF

复杂度判定矩阵

数据功能(ILF/EIF)DET × RET 判定:

 1个 RET2-5个 RET6个以上 RET
1-19个 DET
20-50个 DET
51个以上 DET

事务功能(EI/EO/EQ)DET × FTR 判定:

 0-1个 FTR2-3个 FTR4个以上 FTR
1-4个 DET
5-15个 DET
16个以上 DET

🌰 举个例子:订单表有 25 个字段(DET=25),包含主表+1个子表(RET=2),查表得 中复杂度 → ILF 权重取 10

权重速查表

功能类型低(L)中(A)高(H)
ILF71015
EIF5710
EI346
EO457
EQ346

四、💰 价格估算:从功能点到人民币

这是最实用的部分!计算出功能点后,如何得到最终报价?

计算流程

1
功能点(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%)

五、🌰 实战案例:学生成绩管理系统

需求:老师可录入/修改/删除成绩;学生可查询;可生成统计报表;需调用学校学生库。

Step 1:功能点计算

先拆分成数据层操作层

📁 数据层(装数据的地方)

功能类型为什么算它?权重点数
成绩表ILF系统要维护成绩数据,得有地方存77
学生基本信息EIF从学校系统读取,不是本系统的55
小计   12 FP

⚙️ 操作层(对数据的动作)

功能类型操作说明权重点数
录入成绩EI往成绩表写数据33
修改成绩EI修改成绩表数据33
删除成绩EI删除成绩表数据33
学生查成绩EQ从成绩表读数据33
生成统计报表EO计算平均分等44
小计   16 FP

📊 合计

1
2
3
4
5
6
┌────────────────────────────────────┐
│  数据层: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万元


六、📝 总结速记卡

🧠 核心理解

1
2
3
4
软件 = 数据(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,乘以人月费率

本文数据来源:

  • 《2025年中国软件行业基准数据 CSBMK®-202510》
  • 《软件工程 软件开发成本度量规范》(GB/T 36943-2018)
  • 《信息技术应用创新软件适配改造成本评估规范》(DB32/T 4935-2024)
本文由作者按照 CC BY 4.0 进行授权