用来估计功能的复杂度,从而为功能估算出合适的FP数
估算方法
IFPUG估算流程概览【ISO规范】
NESMA估算流程
估算流程概览【国内行业规范-NESMA】
规模估算
估算流程概览【国内行业规范-IFPUG】
调整因素
国内ifpug标准
国内NESMA方法
计算案例:
工作量估算
工期计算
软件开发价格计算
结论
FPA估算的项目规模,是指软件开发的项目规模,包含了需求分析、设计、编码、测试等活动,但不包含项目管理,软件维护等支持性且因项目要求的不同而差异加大的活动。
用户需求分为功能性用户需求和非功能性用户需求,IFPUG和NESMA用来估算功能性用户需求的规模;而SNAP用来估算非功能性用户需求的规模
国内的行业标准,有使用IFPUG方法的,也有是NESMA方法的;需要注意二者的差异和联系
估算软件开发成本的总体思路是:
1,先估算出规模,估算法方法可以选用其中一个
A,NESMA快速估算,项目早期,需求不明朗,文档不全
B,NESMA估算,项目中期,需求清晰,文档较全
C,NESMA详细估算,项目完全,需求完成,文档完备
D,IFPUG估算
2,然后使用方程工作量=规模/生产率,计算得出工作量
3,基于工作量计算开发成本
功能的度量单位,用于度量软件规模;不等同于功能,或者用户需求;一般场景下所说的功能点,是指功能【功能亮点、或者功能突出点】
AFunctionPoint(FP)isaunitofmeasurementtoexpresstheamountofbusinessfunctionality,aninformationsystem(asaproduct)providestoauser.FPsmeasuresoftwaresize.Theyarewidelyacceptedasanindustrystandardforfunctionalsizing.
国标/行业标准所描述的功能点估算规范,既有IFPUG,也有NESMA,2者在流程和规则上,大部分是相同的;主要差异是
被度量软件与用户或者其他系统之间的界限
ControlInformationisdatathatinfluencesanelementaryprocessbyspecifyingwhat,whenorhowdataistobeprocessed.
对用户来说是一个有意义的、最小的活动单元,是自包含的,并且使应用程序的业务处于一致状态
ElementaryProcessisthesmallestunitoffunctionaluserrequirementthat基本处理是用户功能需求的最小单元
Processinglogicisdefinedasanyoftherequirementsspecificallyrequestedbytheusertocompleteanelementaryprocesssuchasvalidations,algorithmsorcalculationsandreadingormaintainingadatafunction.
功能分为2大类,5种类型
识别交易功能时,要按基本处理elementaryprocess的原则进行识别
在进行计数实践的时候,按照估算的时机,或者文档的完备性,可以分为3种估算方法
Indicative方法和Estimated方法,均是是详细功能点估算方法的简化。
Estimated方法就是按中等复杂度进行估算
使用NESMAEstimated方法估算未调整的功能点数时,可以基于复用程度、修改类型进行对各功能的功能点数进行调整,调整系数为复用程度系数*修改类型系数
复用程度
系数
高
1/3
中
2/3
低
1
修改类型
新增
修改
0.8
删除
0.2
功能要素复杂度计算表
功能点数与复杂度之间的对应关系
功能点数
功能
复杂度
ILF
EIF
EI
EO
EQ
7
5
3
4
10
15
6
在规模估算时,根据项目阶段,使用不同的NESMA方法
按功能点计算出工作量后,再根据下面的14项系统基本特征评分得出调整系数,然后进行调整
14项系统基本特征
上面14项目每个项目的分值从0到5分
计算公式是:∑14项因子*0.01+0.65,即14项目加总后*0.01+0.65
在估算功能点后,根据计数时机,按规模调整系数进行规模调整,从而确定未调整的功能点
计数时机
早期
1.39
中期
1.22
完成
1.0
估算出未调整的功能点后,再根据软件因素,和开发因素,一共5项调整因素计算得出的调整系数,然后进行调整
计算公式是:∏5项因子,5项得分相乘
因素
得分范围
应用类型
1.0~2.0
质量特性
0.9~1.1
完整性级别
1.0~1.3
开发语言
0.6~1.5
开发团队背景
0.8~1.2
【质量特性有4个维度,总体上应该是8个调整因素】
描述
调整因子
业务处理
办公自动化系统、日常管理及业务处理用软件等
应用集成
企业服务总线、应用集成等
1.2
科技
科学计算、仿真、基于复杂算法的统计分析等
多媒体
多媒体数据处理;地理信息系统;教育和娱乐应用等
1.3
智能信息
自然语言处理、人工智能、专家系统等
1.7
系统
操作系统、数据库系统、集成开发环境、自动化开发/设计工具等
通信控制
通信协议、仿真、交换机软件、全球定位系统等
1.9
流程控制
生产管理、仪器控制、机器人控制、实时控制、嵌入式软件等
2.0
判断标准
分布式处理
没有明示对分布式处理的需求事项
-1
通过网络进行客户端/服务器及网络基础应用分布处理和传输
0
通过特别的设计保证在多个服务器及处理器上同时相互执行应用中的处理功能
性能
没有明示对性能的特别需求事项或仅需提供基本性能
为满足性能需求事项,要求设计阶段开始进行性能分析,或在设计、开发阶段使用分析工具
可靠性
没有明示对可靠性的特别需求事项或仅需提供基本的可靠性
发生故障时带来较多不便或经济损失
发生故障时造成重大经济损失或有生命危害
多重站点
在相同的硬件或软件环境下运行
在设计阶段需要考虑不同站点的相似硬件或软件环境下运行需求
在设计阶段需要考虑不同站点的不同硬件或软件环境下运行需求
质量因子计算公式
质量系数=1+0.025*以上调整因子之和
没有明确的完整性级别或等级为C/D
完整性级别为A/B同时为达成完整性级别要求采取了特殊的设计及实现方式
1.1
完整性级别为A同时为达成完整性级别要求在软件开发全生命周期均采取了特定、明确的措施
C及其他同级别语言/平台
1.5
JAVA、C++、C#及其他同级别语言/平台
PowerBuilder、ASP及其他同级别语言/平台
0.6
为本行业开发过类似的软件
例如,使用NESMA估算功能点法,估算出功能点为345.87,经规模调整后为480.75,基准生产率为7.10人时/功能点,那么工作量=480.75功能点*7.10人时/功能点=3,413.325人时【480.75*7.10=3,413.325人时】=3,413.325/8=426.6656人天
【规模调整因子是根据估算时机确定的,上例是以早期1.39取值的】
例如,调整因子得分如下
1.00
1.08
1.30
0.60
调整系数为1*1.08*1.3*.6*1=0.8424
所以调整后的工作量=426.6656人天*0.8424=359.4231人天
【基准生产率可以查行业数据,一般取中位数】
工期=1.277*(工作量/176)^0.404
【此公式中工作量的单位是人时,工期的单位是月】
例如,工作量为359.4231人天,转换为人时为3,413.325人时,计算得出工期为1.227*(3,413.325/176)^0.404=4.065即工期为4.065月
进一步估算团队规模:359.4231人天=359.4231/22=16.3374人月,16.3374人月/4.065月=【16.3374/4.065】4.019人
软件开发价格=开发工作量*开发费用/人月
其中:
开发工作量=估算工作量*风险系数*复用系数
开发费用/人月=【工资+国家规定的福利+奖金以及奖励+办公成本+人力资源成本+设备/基础设施+税金和利润】*管理系数*优质系数
国家规定的福利=工资*0.476
奖金以及奖励=工资*1/5
办公成本=工资*1/3
人力资源成本=工资*1/5
设备/基础设施=工资*0.15
税金和利润=工资*1/3
管理系数取值于1~1.2
优质系数按ISO9000质量或者CMMI认证确定,分别取值1.05,1.1,1.2,1.3
一般综合下来,按平均月薪*3.23作为开发费用/人月
人月开发费用,也可以采取行业基准数据,例如2019年软件开发行业基准人月单价2.8767万元/人月,不包含直接非人力成本
继续上例359.4231人天换算为人月,为359.4231/21.75=16.5252人月,软件开发价格为47.538万【16.5252*2.8767=47.538】
如果采用月平均工资*3.23,例如月平均工资为1.5W,则软件开发价格为80.0646万【16.5252*1.5*3.23=80.0646】
注意,FPA方法是按瀑布模式运作项目的,如果是采用敏捷模式,工作量上应该要少很多。。。
对于系统集成项目
前面部分所述的是软件开发部分,软件开发之后,还需要进行实施、运维支持,也存在相应的费用。