项目来了,总要叫来几个人,讨论一下成本是多少,能不能接,作为研发经理,能够较为合理的评估成本是一项必备技能,如何科学合理的评估,达到对内对外都满意,我想这是每个研发经理的必修课。
通常我们评估项目成本会找几个有类似产品开发经验的工程师去评估开发成本,为了更加精确,我们会分成若干类和若干小项去评估,当然这种评估比较简单高效,经验丰富的工程师能较为准确的评估出来项目成本,我们称这种方法为经验法。
当然,经验法对内完全没问题,知根知底,但是对外就有很多问题,你把凭经验评估出来让领导进行预算审批,领导签字时心里发慌,审计能通过吗。因此在立项时就应该考虑工程造价合理科学有依据,那么有没有以审计的视角基于客观、科学、量化的造价依据对成本进行评估呢,另一个方法就应运而生了,我们称这种方法为国标法。
经验法和国标法很难说谁优谁劣,甚至在项目前期需求不明朗的情况下没法用国标法进行评估,只能凭经验法估出成本转化为国标法的计量规范。因此,两种方法都应该掌握,接下来聊聊这两种方法。
经验法
经验法根据项目需求,招标要求,以及软件工程中涉及到的方方面面,进行成本估算,步骤如下:
- 召集商务人员、项目管理人员、相关项目或产品开发经理、核心研发人员进行招标文件或合同文件分析。
- 进行功能差分,补齐工作量估算表
- 分别进行工作量估算,分别估算出最小值、最可能值、最大值,估算结果取平均
- 相互比较,就差距大的工作项展开讨论,达成一致,得出最终估算工时。
- 查阅公司财务上给出的人才队伍高、中、低配比对应的工时单价,计算出成本费用。
经验法工作量估算表: | ||||||
---|---|---|---|---|---|---|
类别 | 工作描述 | 工作量估算 | 备注 | |||
最小 | 最可能 | 最大 | 估算结果 | |||
售前支持 | 包括投标相关工时开支 | |||||
项目管理 | 人员管理 | |||||
项目管控 | ||||||
项目管理 | 团队建设 | |||||
需求调研 | 需求对接 | |||||
需求分析与报告 | ||||||
产品设计 | 产品设计 | |||||
UI设计 | ||||||
技术设计 | 架构设计 | |||||
系统模块设计 | ||||||
功能开发 | 按照实际模块、功能点进行拆分评估 | 根据具体项目进行详细拆分 | ||||
测试 | 测试用例、测试执行、集成测试 | |||||
测试报告 | ||||||
上线维保 | 安装部署、试运行 | |||||
维保期维护 | ||||||
质量保障 | 审计、评审、第三方评测费用 | |||||
培训 | 培训人员成本、场地租赁 | |||||
其他 | 包括采购、差旅费、招待费等等 |
国标法
2016年12月工业和信息化部发布《软件和信息技术服务业发展规划(2016-2020年)》,《规划》中明确提出软件市场定价与软件价值不匹配问题是我国软件和信息技术服务业发展依然面临迫切需要解决的突出问题,一句话总结就是定价不合理,需要科学方法和机制去解决。于是,各级政府纷纷发布相关政策和指南,比如北京发布《信息化项目软件运维费用测算规范》,河北发布《信息系统集成服务资费评估指南》,山东省财政厅发布发《山东省省级部门委托第三方机构参与预算绩效管理工作暂行办法》等等,国家发布GB/T36964-2018《软件工程 软件开发成本度量规范》,目的就是让软件市场定价科学,机制保障健全。国标法如何评定呢,我们从规范出发。
下图为软件成本构成,很好理解,软件开发成本包括直接成本和间接成本,直接成本又包括直接人力成本和直接非人力成本;间接成本包括间接人力成本和间接非人力成本。
- 直接人力成本:开发方项目组的工资、五险一金、奖金、福利等人力资质费用总和;项目组人员:项目经理、需求分析人员、设计人员、编码人员、测试人员、部署人员、文档编辑人员、质量保障人员等。
- 直人非人力成本:开发方为达成软件开发项目目标,所需要支付的人力成本之外的其他成本;如:办公费、差旅费、培训费、业务费、采购费、专利费用、专用软件费用、技术协作费用等。
- 间接人力成本:服务于软件研发管理整体需求的非项目组人员的人力成本;费项目组人员:部门经理、办公室人员、产品规划人员、过程管理、组织级其他相关人员。
- 间接非人力成本:开发方不为开发某个特定项目,但是服务于整体研发活动产生的非人力成本;如:房租、水电、物业、开发人员日常办公费及各种设备的租赁、维修、折旧等。
其中直接非人力成本通常按办公费、差旅费、培训费、业务费采购费等分项估算;间接成本可按比例分摊计算也可依据与直接人力成本的固定占比计算。那么直接人力成本估算是软件研发成本估算中的难点。一般采用NESMA功能点法编报直接人力成本预算。
NESMA功能点法
未调整功能点数量(UFP) 可采用指示功能点计数法和估算功能点计数法两种方法进行计算。
- 指示(预估)功能点计数法(多用于项目立项阶段):
U F P = 35 ∗ I L F + 15 ∗ E I F UFP= 35*ILF+15*EIF UFP=35∗ILF+15∗EIF
- 估算功能点计数法(多用于项目审计和验收阶段):
U F P = 7 ∗ I L F + 5 ∗ E I F + 4 ∗ E I + 5 ∗ E O + 4 ∗ E Q UFP=7*ILF+5*EIF+4*EI+5*EO+4*EQ UFP=7∗ILF+5∗EIF+4∗EI+5∗EO+4∗EQ
在项目建议书、概算结算,如果事务功能尚不明确的情况下可采用指示(预估)功能点计数法计算。在预算、招标、验收阶段,如需求较为明确,数据功能(ILF、EIF)和事务功能(EI、EO、EQ)可识别的情况下,使用估算功能点计数法计算功能点数,得到的功能点数值更加准确。
类型 | 描述 | UFP |
---|---|---|
ILF | 内部逻辑文件(Internal Logical File,ILF),软件内部需要维护(如增删改查)的数据,以用户角度识别的,在应用程序内部的、可维护的内部逻辑数据和控制信息。 | 7 |
EIF | 外部接口文件(External Interface File,EIF),在其他系统中维护,但本系统需要调用的数据。 | 5 |
EI | 外部输入(External Input,EI),向软件输入数据或发送命令。EI是处理来自应用程序边界外部的一组数据输入。它的主要目的是维护一个或多个ILF,或者更改系统的行为。 | 4 |
EO | 外部输出(External Output,EO),EO是输出数据到应用程序边界外部的过程。它的主要目的是向用户呈现经过处理的信息。该处理过程必须包含至少一个数学公式或计算方法,或生成派生数据。一个EO也可以维护一个或多个ILF,或者改变了系统行为。 | 5 |
EQ | 外部查询(External Query,EQ),EQ是向应用程序边界外发送数据的基本处理的过程。其主要目的是从ILF或EIF中通过恢复数据信息来向用户呈现。该处理逻辑不包括任何数学公式或计算方法,也不会生成任何派生数据。EQ不会维护任何一个ILF,也不会改变应用程序的系统行为。 | 4 |
根据定义比较难判断某个功能点是什么类型,我们可以按照如下功能点类型判定模型进行判断,可以简单理解为,ILF为实体开发,包含数据库创建、DAO层和Service层设计、开发、测试等后台工作,EI、EO、EQ为Controller接口层和前端交互显示设计、开发、测试工作。
UFP需要通过VAF(调整因子)调整成FP,VAF取值[0.65~1.35],为了计算简便,一般会把不同类型的项目设置不同的VAF,比如OA办公项目,VAF=1.1。
F
P
=
V
A
F
∗
U
F
P
FP = VAF * UFP
FP=VAF∗UFP
例如:一个FP多长时间呢,1FP=7.16人时,当VAF=1.1,1UFP=7.876人时,我们按每天8小时计算,那么1UPF相当于1人天的工作量。如此,可以计算出项目开发的总工时。
经典的功能点类型判定示例
功能点名称 | 类型 | UFP |
---|---|---|
员工 | ILF | 7 |
部门 | ILF | 7 |
工资信息 | EIF | 5 |
添加员工信息 | EI | 4 |
修改员工信息 | EI | 4 |
删除员工信息 | EI | 4 |
员工信息导出 | EO | 5 |
员工人数统计 | EO | 5 |
部门信息导出 | EO | 5 |
查询员工信息 | EQ | 4 |
查询部门信息 | EQ | 4 |
UFP = 54,FP=1.1*54,1FP=7.16,计算出总工时,根据当地的人工费用,就能计算出直接人力成本了,然后再加上直接非人力成本,以及按比例算出间接成本,最终得到项目的开发成本。
参考文章
- 软件研发成本计算模型
- SJ/T 11619-2016 软件工程 功能规模测量NESMA方法
- 软件造价知识普及5:我国软件成本度量涉及有哪些相关标准?
- NESMA功能点估计方法 软件规模估计
- 软件功能点拆分 — 软件工程报价功能点区分模型