软件项目估算是一种解决问题的形式,在多数情况下,要解决的问题非常复杂,想一次性整体解决比较困难。因此,对问题进行分解,把其分解成一组较小的接近于最终解决的可控的子问题,再定义它们的特性。
估算技术一般有代码行(LOC)和功能点(FP)估算法,这是两种不同的估算技术,但有许多共同特性。项目计划人员首先给出一个有界的软件范围的叙述,再由此尝试着把软件分解成一些小的可分别独立进行估算的子功能。然后对每一个子功能估算其LOC或FP(即估算变量)。接着,把基线生产率度量用做特定的估算变量,导出子功能的成本或工作量。将子功能的估算进行综合后就能得到整个项目的总估算。
LOC或FP估算技术对于分解所需要的详细程度是不同的。当用LOC作为估算变量时,功能分解是绝对必要的且需要达到很详细的程度。而估算功能点所需要的数据是宏观的量,当把FP当做估算变量时所需要的分解程度可以不很详细。LOC是直接估算的,而FP是通过估计输入、输出、数据文件、查询和外部接口的数目,以及复杂性校正值间接地确定的。除去所用到的估算变量,项目计划人员必须对每一个分解的功能提出一个有代表性的估算值范围。利用历史数据或凭实际经验,计划人员对每个功能分别按乐观的、可能的、悲观的三种情况给出LOC或FP估计值。
为了反映开发特性的影响,应当随时修正平均生产率。
1 LOC(Lines of Code,代码行)估算代码尺寸
把项目划分为若干个功能,分别计算每个功能的代码长度,所有功能代码行之和即项目的代码长度。
LOC估算表包括:
每个功能的代码长度估算值=(乐观值+4*可能值+悲观值)/6
估算工作量=代码总估算长度/估算生产率
估算总成本=日薪*估算工作量
估算行成本=估算总成本/估算代码长度
估算生产率由经验获得
2 FP(功能点)估算代码尺寸
项目的功能点数是几个测量参数(用户输入数、用户输出数、用户查询数、文件数、外部接口数)的功能点之和。
用户输入数:计算每个用户输入,它们向软件提供面向应用的数据。输入应该与查询区分开来,分别计算。
用户输出数:计算每个用户输出,它们向软件提供面向应用的信息。这里,输出是指报表、屏幕、出错信息,等等。一个报表中的单个数据项不单独计算。
用户查询数:一个查询被定义为一次联机输入,它导致软件以联机输出的方式产生实时的响应。每一个不同的查询都要计算。
文件数:计算每个逻辑的主文件(如数据的一个逻辑组合,它可能是某个大型数据库的一部分或是一个独立的文件)。
外部接口数:计算所有机器可读的接口(如磁带或磁盘上的数据文件),利用这些接口可以将信息从一个系统传送到另一个系统。
FP估算表包括:
每个测量参数的估算FP计数=估算值*加权因子
项目估算FP=各参数FP计数之和*复杂度调整因子
估算生产率由经验获得
估算工作量=项目估算FP/估算生产率
估算总成本=日薪*估算工作量
单个FP估算成本=估算总成本/估算FP