12.2.4 软件开发成本估算
项目成本估算,是对完成项目工作所需要的费用进行估计和计划,是项目计划中的一个重要组成部分。要实行成本控制,必须先估算费用。费用估算过程实际上是确定完成项目全部工作活动所需要的资源的一个费用估计值,这是一个近似值,既可以用货币单位表示,也可用工时、人月、人天等其他单位表示。为了使开发项目能够在规定的时间内完成,而且不超过预算,成本预算和管理控制是关键。对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单的事,要进行一系列的估算处理。一个项目是否开发,从经济上来说是否可行,归根结底是取决于对成本的估算。
(1)成本估算方法。成本估算方法有自顶向下、自底向上和差别估算方法。
1)自顶向下估算方法。估算人员参照以前完成的项目所耗费的总成本(或总工作量),来推算将要开发的软件的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配,这种方法称为自顶向下的估算方法。
自顶向下估算方法的主要优点是对系统级工作的重视,所以估算中不会遗漏系统级的诸如集成、用户手册和配置管理之类的事务的成本估算,且估算工作量小、速度快。它的缺点是往往不清楚低层次上的技术性困难问题,而往往这些困难将会使成本上升。
2)自底向上估算方法。这种方法的优点是对每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确。其缺点是其估算往往缺少与软件开发有关的系统级工作量,如集成、配置管理、质量管理和项目管理等,所以估算往往偏低。
3)差别估算方法。差别估算是将开发项目与一个或多个已完成的类似项目进行比较,找出与某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出开发项目的总成本。该方法的优点是可以提高估算的准确度,缺点是不容易明确“差别”的界限。除以上方法外,还有许多方法,大致分为专家、类推和算式估算法。
①专家估算法。依靠一个或多个专家对要求的项目做出估算,其精确性取决于专家对估算项目的定性参数的了解和他们的经验。
②类推估算法。自顶向下的方法中,它是将估算项目的总体参数与类似项目进行直接比较相比得到结果。自底向上方法中,类推是在两个具有相似条件的工作单元之间进行。
③算式估算法。专家估算法和类推估算法的缺点在于,它们依靠带有一定盲目和主观的猜测对项目进行估算。算式估算法则是企图避免主观因素的影响。用于估算的方法有两种基本类型,由理论导出和由经验得出。
(2)成本估算模型。
1)COCOMO估算模型。结构性成本模型COCOMO(Constructive Cost Mode)是最精确、最易于使用的成本估算方法之一。该模型分为:
基本COCOMO模型,它是一个静态单变量模型,对整个软件系统进行估算。
中级COCOMO模型,它是一个静态多变量模型,将软件系统模型分为系统和部件两个层次,系统是由部件构成的,它把软件开发所需人力(成本)看作是程序大小和一系列“成本驱动属性”的函数,用于部件级的估算,更精确些;详细COCOMO模型,将软件系统模型分为系统、子系统和模块3个层次,它除包括中级模型中所考虑的因素外,还考虑了在需求分析、软件设计等每一步的成本驱动属性的影响。
2)基本COCOMO模型估算公式:
(https://www.daowen.com)
式中,E为开发所需的人力(人-月),D为所需的开发时间(月),KLOC为估计提交的代码行。ab,bb,cb和db是指不同软件开发方式的值,如图12.1所示。

图12.1 基本COCOMO模型的参数取值
有机方式意指在本机内部的开发环境中的小规模产品。嵌入式计算机开发环境往往受到严格限制,例如时间与空间的限制,因此对同样的软件规模,其开发难度要大些,估算工作量要大得多,生产率将低得多。半有机方式介于有机方式与嵌入方式之间。
3)中级COCOMO模型。
中级COCOMO模型先产生一个与基本COCOMO模型一样形式的估算公式,然后对15个“成本驱动属性”进行打分,定出“乘法因子”,对公式进行修正。15个成本驱动属性分成如下四组。
①产品属性。指所需软件可靠性、数据基大小及产品复杂性。
②计算机属性。即执行时间方面的限制、主存限制、虚拟机的易变性及计算机周转时间。
③人员属性。即分析员能力、应用领域中实践经验、程序员能力、虚拟机使用经验及程序语言使用经验。
④项目属性。即现代程序设计方法、软件工具的使用及所需的开发进度。
其估算公式为
![]()
其中,ai,bi值如图12.2所示。

图12.2 中级COCOMO模型的参数取值