1. 首页 > 新闻动态 > 行业动态

软件成本估算流程详解及案例分享【国内行业规范-NESMA】

作者:小编 日期:2021-11-23 15:10:17 点击数:

术语

基本概念

  • 功能点 FP function point

  • 应用边界 application boundary

  • 控制信息 Control Information

  • 基本处理过程 elementary process

  • Processing Logic

  • 功能 function

  • 元素类型 element type

估算方法

  • IFPUG估算流程概览 【ISO规范】

  • NESMA估算流程

  • 估算流程概览【国内行业规范-NESMA】

  • 规模估算

  • 估算流程概览【国内行业规范-IFPUG】

调整因素

  • 国内ifpug标准

  • 国内NESMA方法

应用

  • 工作量估算

  • 工期计算

  • 软件开发成本估算

国标/行业标准所描述的功能点估算规范,既有IFPUG ,也有 NESMA,二者在流程和规则上,大部分是相同的,主要差异是:

  • NESMA具有2个简易化模式,可以用于快速估算;

  • IFPUG的处理过程比较复杂,没有简化模式;

  • IFPUG和NESMA在调整因数的计算方法是不同的。IFPUG是14项基本特征的影响值TDI, NESMA是5项调整因子;

  • 对于延续项目,NESMA可以在 FP计数时,就按复用程度和修改类型进行估算FP; 而 IFPUG 则需要按新增、转换、变更分别进行初估,分别计算调整因子。

功能 function

功能分为 2 大类, 5种类型:

  • 数据功能

  • 交易功能

数据功能:即满足内部或者外部数据需求的功能 :

ILF内部逻辑文件【容纳一组在本应用中由一个或者一组基本处理来维护的数据】
EIF外部接口文件【容纳一组在本应用中由一个或者一组基本处理引用到的数据】

交易功能: 即处理数据的功能:

EI 外部输入EO 外部输出EQ 外部查询

元素类型 element type

用来估计功能的复杂度,从而为功能估算出合适的FP数:

  • DET data element type / 数据元素类型:为唯一、用户可识别、不重复的属性,即字段;

Data Element Type (DET) is the data subgroup within an FTR. They are unique and user identifiable.

  • RET record element type / 记录元素类型:为用户可识别的 DET 的子集【部分】, 例如, 主从类型的数据模式, 订单,订单行, 要识别为 2个 RET, 订单自身是1个RET,订单行是1个RET;

A Record Element Type (RET) is the largest user identifiable subgroup of elements within an ILF or an EIF. It is best to look at logical groupings of data to help identify them.

  • FTR file type referenced / 引用文件类型,被交易功能读取或者维护的数据功能, 是被交易功能 读取或者维护的 ILF,或者是被交易功能 读取的 EIF, 例如, 订单业务中,创建确认订单并建立交货单,要识别为2个FTR,订单自身是1个FTR,还需要将 交货单识别为1个FTR;

File Type Referenced (FTR) is the largest user identifiable subgroup within the EI, EO, or EQ that is referenced to.


估算方法

一、IFPUG估算流程概览 【ISO规范】

  • 收集可用的文档;

  • 确定计数类型【开发?、增强?、应用系统?】;

  • 确定计数范围,边界,以及用户的功能性需求;

  • 度量数据功能;

识别数据功能

识别 ILF和EIF

分别识别 ILF、EIF 的数据元素DET数量,记录元素RET数量,使用《功能元素复杂度计算表》确定复杂度,基于复杂度确定功能点数

  • 度量交易功能

识别每一个基本处理

确定唯一的基本处理

将交易功能分类为 EI、EO、EQ识别 EI、EO、EQ的数据元素DET数量,引用文件类型RFT数量,使用《功能元素复杂度计算表》确定复杂度,基于复杂度确定 功能点数

  • 度量转换功能

  • 度量增强功能

  • 计算功能规模

开发类型公式: DFP = ADD + CFP // ADD 开发项目要交付给用户的功能规模, CFP = conversion function point 转换功能的规模

【 在开发完成后的应用系统的生命周期内,应用系统的 规模 计算为 AFP = ADD 】

增强类型公式: EFP = ADD + CHGA + CFP + DEL // CHGA 变更后的功能规模, DEL =deleted function point 删除的功能的规模【 在项目增强后,应用系统的 规模 计算为: AFPA = (AFPB +ADD + CHGA) - (CHGB +DEL) // CHGA 变更后的功能规模, CHGB 变更前的功能规模, AFPA 增强项目后的功能规模,AFPB 增强项目前的功能规模 】

  • 将功能点计数记录在案

  • 报告功能点计数结果, 至此 IFPUG 流程结束

  • 【依据SNAP】进行非功能性需求 的规模调整


二、NESMA估算流程

  • 识别功能点,确定复用程度和修改类型;

  • 根据所处的估算时机,进行规模调整,得出未调整的功能点;

  • 基于调整因子进行调整,得出调整后的 功能点;

在进行计数实践的时候,按照估算的时机,或者文档的完备性,可以分为 3 种估算方法

1.Indicative方法, 预估功能点【用于项目早期】

只用识别出数据功能,即 ILF 和 EIF 的数量然后 按 公式 35*ILF + 15* EIF 计算出 未调整的功能点数Indicative方法基于如下假设:平均情况下,每个ILF对应3个EI(对应添加、修改、删除这三个操作)、2个EO(对应两种统计报表操作)和1个EQ(对应查询操作);平均情况下,每个EIF对应1个EO和1个EQ;公式中的35和15这两个权重,则是全部ILF、EIF的复杂度默认为"低",EI、EO、EQ的复杂度默认为"中",再考虑系统整体的功能性得出的。

2.Estimated方法, 估算功能点【用于项目中期】

识别出数据功能,以及交易功能, 即 ILF 和 EIF 的数量 以及 EI、EO、EQ的数量然后按公式 10*ILF + 7* EIF + 4*EI + 5*EO + 4*EQ 计算出未调整的功能点数。

3.详细功能点【用于项目后期】

识别5类功能的功能个数识别各功能的功能要素,基于功能要素的数量,使用《功能元素复杂度计算表》确定各个功能的复杂程度,根据《功能点数与复杂度之间的对应关系》 查出相应功能的 功能点数汇总所有的功能点数为 未调整的功能点数

Indicative方法 和 Estimated方法,均是是详细功能点估算方法的简化。

Estimated方法就是按中等复杂度进行估算

使用NESMA Estimated方法 估算未调整的功能点数时,可以基于复用程度、修改类型进行对各功能的功能点数进行调整, 调整系数为复用程度系数* 修改类型系数

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图1)


软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图2)


功能点数与复杂度之间的对应关系

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图3)



调整因素

按功能点计算出工作量后,再 根据下面的14项系统基本特征 评分得出调整系数,然后进行调整:

  • 数据通讯

  • 分布式数据处理

  • 性能

  • 大业务量配置

  • 交易处理率

  • 在线数据输入

  • 最终用户效率(用户界面友好程度)

  • 在线更新

  • 复杂处理(算法)

  • 可复用性

  • 易安装性

  • 易操作性

  • 多场地(多点运行)

  • 支持变更(客户化程度)

上面每个项目的分值 从0 到 5分

计算公式是: ∑14项因子*0.01 + 0.65, 即14项目 加总后 * 0.01 + 0.65


估算流程概览【国内行业规范-NESMA】

1.规模估算

  • 收集可得文档

  • 确定计数范围和边界识别功能用户需求

  • 度量数据功能

  • 度量事务功能

  • 计算功能规模

2.功能规模调整

  • 依据行业数据,确定CF【规模变更调整因子】,使用公式 S = UFP * CF

3.工作量计算

AE = (PDR *S)*SWF * RDF

其中:PDR 为生产率,取行业数据, SWF软件因素调整因子【完整性级别调整因子* 应用类型调整因子 *质量及特性调整因子】,RDF 开发因素调整因子【开发语言,开发团队背景】

4.工期计算

D = 1.227 *( AE/176)^0.404

在规模估算时, 根据 项目阶段,使用不同的NESMA方法

  • 项目匡算,使用预估功能点,计算公式为UFP = 35 * ILF + 15* EIF

  • 项目概算,使用估算功能点,计算公式为UFP=10* ILF + 7 * EIF + 4 *EI + 5*EO + 4*EQ

在估算功能点时,要考虑复用程度,按低/中/高分类,各自取值为1 、2/3 、1/3各预设功能点值

  • 项目阶段,使用详细功能点,计算公式为 UFP = ∑ ILF + ∑ EIF + ∑EI + ∑EO + ∑EQ

详细功能点估算时,要计算数据功能和交易功能的复杂度,基于复杂度计算 功能点,即得出各项功能的功能点数


估算流程概览【国内行业规范-IFPUG】

  • 确定估算的类型

  • 开发项目、升级项目、应用系统

  • 识别分析范围和应用边界

  • 识别分析范围和应用边界中的定义

  • 定义应用边界

  • 计数数据功能

识别数据功能

识别ILF,EIF

确定复杂度,基于复杂度确定功能点

  • 计数交易功能

识别基本处理

识别EI、EO、EQ

确定复杂度,基于复杂度确定功能点

  • 确定调整系数

调整系数 VAF 基于 14个通用系统特性计算得出, 每个特性取值范围0~5

14 个值相加,然后加上 0.65

  • 计算调整功能点

开发项目: DFP = (UFP + CFP ) * VAF

UFP 为应用在安装以后向用户提的 未经调整的功能点

CFP 为额外的转换功能的未经调解的功能点

  • 升级项目: EFP = (ADD+CHGA+CFP)* VAFA +DEL*VAFB

ADD = 升级项目中增加的未经调整的功能点

CHGA = 升级项目中改变的功能在改变后所具有的未经调整的功能点

CFP = 额外的转换功能的未经调整的功能点

VAFA = 升级后的应用的调整系数DEL = 被删除的功能的未经调整的功能点

VAFB = 升级前的应用的调整系数

  • 应用系统

基线 AFP = ADD * VAF //

ADD = 安装的功能的

UFPC VAF = 调整系数

应用升级后 AFP = [(UFPB+ADD+CHGA) – (CHGB+DEL)]*VAFA //

UFPB = 应用升级前的未经调整功能点

ADD = 新增功能的 UFPC

CHGA = 升级后的修改功能的 UFPC

CHGB = 升级前的修改功能的 UFPC

VAFA = 升级后的调整系数 【注意该公式中不包含转换功能, 因为转换功能与应用直接提供的功能无关 】


国内NESMA方法调整因子及案例分享

1.评估阶段

在估算功能点后,根据计数时机,按规模调整系数进行规模调整,从而确定未调整的功能点

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图4)


2.软件因素

估算出未调整的 功能点后,再根据软件因素,和开发因素,一共5项调整因素计算得出的调整系数,然后进行调整

计算公式是: ∏ 5项因子, 5 项得分相乘

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图5)


【 质量特性有4个维度,总体上应该是 8 个调整因素】

  • 应用类型

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图6)


  • 质量特性

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图7)


质量因子 计算公式

质量系数 = 1 + 0.025* 以上调整因子之和

  • 完整性级别

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图8)


  • 开发语言

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图9)


  • 开发团队背景

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图10)


3.NESMA计算案例

  • 工作量估算

例如,使用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取值的】

例如,调整因子得分如下:

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图11)


调整系数 为 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】

注意,FPA 方法是按瀑布模式运作项目的,如果是采用敏捷模式,工作量上应该会少很多

  • 对于系统集成项目

软件成本估算流程详解及案例分享【国内行业规范-NESMA】(图12)