文章

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

本文深度解析国标级功能点估算法(FPA),将模糊的需求拆解为可度量的五大功能类型。从规模调整到工作量折算,手把手教你构建科学的项目造价模型。

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

🔍 微信扫码或搜索「AI在学」关注公众号

在软件开发领域,报价混乱往往是供需双方矛盾的根源:甲方担心预算虚高、沦为“冤大头”;乙方则因需求模糊导致成本失控,甚至面临亏损风险。这种乱象的本质,在于双方都在用模糊的“体感”去衡量复杂的“逻辑”。

为了终结这种“拍脑门”定价的盲目性,今天我们要拆解一套国标认可、行业通用的估价利器——功能点估算法(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(未调整) → US(复用后) → S(调整后规模) → UE(基准工时) → AE(最终工时)
  • UFP:未调整功能点数
  • US:考虑复用后的功能规模(没有复用时可直接视作 US = UFP
  • S:规模调整后的功能点数
  • UE:按行业生产率折算出的未调整工作量
  • AE:再考虑软件因素、开发因素后的调整工作量

关键公式

1️⃣ 规模调整

S = US × CF

  • CF:规模变更因子,用来处理不同阶段需求清晰度的差异
  • 若暂不考虑复用,可直接按 S = UFP × CF
项目阶段规模变更因子(CF)说明
预算/概算1.39需求模糊,预留缓冲
投标/计划1.21需求基本明确
需求分析1.10需求较明确
交付阶段1.00需求完全明确

2️⃣ 基础工作量计算

UE = S × PDR

  • PDR(生产率):2025年行业基准 6.72人时/功能点(P50中位数)
  • 简单项目可低至 3.11,复杂项目可能达 11.29

3️⃣ 软件因素调整(SWF)

SWF = IF × AT × QR

在造价实践里,SWF 常用来反映“同样 1 个功能点,在不同软件场景下,开发难度并不一样”。

  • IF:完整性级别调整因子
    • 例如是否要求更高的安全性、稳定性、容错性
  • AT:应用类型调整因子
    • 例如业务处理系统、集成平台、算法分析、AI 类应用,开发难度不同
  • QR:质量特性调整因子
    • 常结合性能、分布式处理、可靠性、多站点部署等特征综合判断

💡 怎么理解? 两个系统都叫“30 功能点”,一个只是普通录入查询系统,另一个要求高并发、跨地区部署、强可靠,那后者就不应该按同样的人时去算。SWF 就是用来做这层修正的。

4️⃣ 开发因素调整(RDF)

RDF = DP × TB

  • DP:开发平台调整因子
    • 常见口径里,Java / C++ / C# 一类平台通常取 1.0
    • 更底层、实现难度更高的平台可能偏大;更高效的可视化/快速开发平台可能偏小
  • TB:开发团队背景调整因子
    • 团队做过同类行业、同类项目,效率通常更高
    • 缺少类似经验,则需要预留更多工作量

📌 这就是你提到的 “开发平台调整因子” 所在位置:它通常不是单独直接乘在功能点上,而是作为 RDF 的组成部分参与工作量修正。

5️⃣ 调整后工作量

AE = UE × SWF × RDF = (S × PDR) × SWF × RDF

在项目早期,如果拿不到足够信息,实践中也常先取:

  • SWF = 1.0
  • RDF = 1.0

6️⃣ 成本计算(人月法)

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人月)
  • 假设这是一个普通教学管理系统,软件因素调整因子 SWF = 1.00,开发因素调整因子 RDF = 1.00
  • 按标准公式:AE = 261.5 × 1.00 × 1.00 = 261.5人时

如果项目增加了这些要求:

  • 需要多校区部署
  • 对稳定性要求更高
  • 团队缺少教育行业经验

那么 SWFRDF 就可能大于 1,最终工作量会进一步上浮。

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万元

🎯 一句话记住几个因子的分工

因子解决什么问题常见取值思路
CF当前阶段需求还会不会变阶段越早,通常越大
PDR行业平均每个功能点要花多少人时用行业基准 P25/P50/P75
SWF软件本身是否更难做看应用类型、质量特性、完整性要求
RDF团队和平台会不会影响效率看开发平台、团队经验

六、📝 总结速记卡

🧠 核心理解

1
2
3
4
软件 = 数据(ILF/EIF) +  操作(EI/EO/EQ)
      ↓                    ↓
   建数据库/表          做接口/页面
   (存储的代价)       (使用的代价)

🔍 识别三步走

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

💰 估算四步走

  1. 算功能点:数据功能点 + 事务功能点,按复杂度查表累加,得到 UFP
  2. 调规模:结合复用度和阶段因子,得到 S
  3. 算基础工作量UE = S × PDR
  4. 做难度修正AE = UE × SWF × RDF
  5. 转成本:除以174,乘以人月费率,再加非人力成本

📌 最终公式

1
2
AE = (S × PDR) × SWF × RDF
SDC = (AE ÷ 174) × F + DNC

本文数据来源:

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