软件项目估算(三)

上一篇给大家讲了,NESMA标准绝对会让你眼前一亮的,不信你就往下看吧。


3.1.4.2 NESMA

IFPUG存在的不足之处(显而易见啊):

  • 比较复杂,对使用者要求较高。在IFPUG CPM中包含了数百页的详细规则和实例,使用者必须经过培训才能掌握,并且在经验不足时,使用时仍然很困难。
  • 花费时间较长。使用者首先需要详细了解功能需求,然后分析识别出所有功能组件,再确定复杂度,最后还要确定调整因子。对于一个普通的软件项目,通常都需要几天的时间。
  • 需要较高的需求完整性和准确性。

3.1.4.2.1 NESMA——Estimated方法

  • 全部ILF、EIF的复杂度默认为“低”;
  • 全部EI、EO、EQ的复杂度默认为“中”;
  • 其它的步骤与IFPUG方法完全一样。整个软件的功能点数仍是这五类基本功能组件的功能点数之和。

也就是说,你可以当上一篇的Step2 确定功能点的复杂度完全不存在,DET、RET、FTR之类全部是幻觉,是不是觉得这个功能点估算方法好像能用了,别急,再往下看。

3.1.4.2.2 NESMA——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的复杂度默认为“中”,再考虑系统整体的功能性得出的。

也就是说,你可以当上一篇的Step1的一半、Step2、 Step3、 Step4 、Step5 、Step6 完全不存在,DET、RET、FTR、EI、EQ、EO、DI、TDI、VAF之类全部是幻觉,是不是感觉被忽悠了,hoho~~。(但请注意看Indicative方法的假设,只有针对某一类功能性能接近的系统,才能定出这样统一的假设,例如基于某一个产品平台/产品线的产品)

3.2 工作量估算

还记得第一篇里的这张图吗?

我们已经讲了宽带Delphi、三点估算法、类比法、功能点法,它们都可以用于估算规模,当然前面三个方法也可以估算工作量、工期和成本,原理是类似的。所以工作量估算我们只重点讲一下方程法。

工作量 = 规模 / 生产率

这就是方程!

3.2.1 基于平均生产率的工作量估算

估算流程

  1. Step1 确定平均生产率
  2. Step2 计算工作量初始估计值
  3. Step3 计算项目总工作量
  4. Step4 确定生命周期中各阶段工作量

(又要开始了~~~~)

====================Step1 确定平均生产率

  • 在质量体系运行初期,平均生产率可由项目组参照一定的历史数据,采用三点估算法确定。
  • 随着质量管理体系的持续改进,组织应该给出在不同开发环境下,不同类型的项目的平均生产率。
  • 也可参考基准数据。(基准数据最后再给大家介绍)

===================Step2 计算工作量初始估计值

项目初始工作量=项目功能点/平均生产率

注:此处如采用基准数据,可参考《SJT 11463-2013 软件研发成本度量规范》中方式,取p25、p50、p75的生产率,计算区间范围和最可能值。

===================Step3 计算项目总工作量

项目总工作量=项目初始工作量*120%

注:增加项目管理等方面工作量,系数由组织确定

项目成本=项目总工作量*常数C

注:常数C是人力成本费率,由组织给出

===================Step4 确定生命周期中各阶段工作量

各阶段工作量=项目总工作量*各阶段分配比例

具体阶段由项目组根据《生命周期选用指南》确定。

阶段分配比例

  • 在质量体系运行初期,各阶段分配比例可以由项目组参照一定历史数据讨论确定;
  • 随着质量体系的持续改进,各阶段分配比例可以由组织过程资产给出;
  • 可参考基准数据
瀑布模型
V模型

3.2.2 基于编码生产率的工作量估算

估算流程

  1. Step1 确定编码生产率
  2. Step2 计算编码工作量
  3. Step3 计算工作量初始估计值
  4. Step4 计算项目总工作量
  5. Step5 确定生命周期中各阶段工作量

====================Step1 确定编码生产率

  • 在质量体系运行初期,编码生产率可由项目组参照一定的历史数据,采用三点估算法确定。
  • 随着质量管理体系的持续改进,组织应该给出在不同开发环境下,不同类型的项目的编码生产率。
  • 也可参考基准数据

====================Step2 计算编码工作量

编码工作量=代码行数/代码生产率

====================Step3 计算工作量初始估计值

项目工作量初始估计值=编码工作量*R

  • R表示在项目生命周期中,所有阶段的总工作量与编码阶段的工作量的比值。
  • 在质量体系运行初期,R值可以由项目组根据所选生命周期,参照一定历史数据,采用WideBand Delphi、三点估算、类比等方法确定;随着质量体系的持续改进,不同生命周期的R值可以由组织过程资产给出;也可参考基准数据
  • 该处的比例关系应该和最后确定各阶段工作量使用的比例一致

====================Step4 计算项目总工作量

====================Step5 确定生命周期中各阶段工作量

与基于平均生产率的工作量估算方法是一致的。


附录:基准数据

前面提了很多次基准数据,那基准数据从哪里来?简单说就是行业发布。

《2014年软件行业基准数据发布》

以下功能点平均生产率、工作量分布等基准数据来自2014年,第十八届中国国际软件博览会软件工程与质量论坛,由中国系统与软件度量用户组发布的2014年软件行业基准数据发布》

功能点平均生产率
缺陷密度(缺陷数/功能点)
阶段工作量分布比例

《中国软件行业生产力报告》(2007)

以下的代码生产率基准数据来自,2007年由中国软件行业协会系统和过程改进分会、中国软件过程基准用户组联合发布的《中国软件行业生产力报告》(2007年 第一期)

  • 代码生产率单位为LOC/人月。LOC为程序中非空非注释的代码行,已折算为标准C语言;人月为1*22日*8时=176人时
  • 关于代码行的定义可以参考SEI定义的逻辑源语言检查表,或者COCOMOII中定义的逻辑源语言检查表。
代码行平均生产率




最后用一张图描述一下项目估算的整体流程吧。



贴了两个小时,终于把以前整理的材料都放上来了,希望对大家学习项目估算有帮助。