完成一个良好的成本估算是很困难的,有几种可用的工具和技术能帮助我们进行成本估算。通常使用的工具和技术有类比估算、由下到上估算、参数化建模、代码行估算法、功能点估算、3点估算和使用项目管理软件来估算成本。
1.类比估算
成本类比估算是指以过去类似项目的参数值(如范围、成本、预算和持续时间等)或规模指标(如尺寸、重量和复杂性等)为基础,来估算当前项目的同类参数或指标。在估算成本时,这项技术以过去类似项目的实际成本为依据,来估算当前项目的成本。这是一种粗略的估算方法,有时需要根据项目复杂性方面的已知差异进行调整。
这种技术需要大量的专家判断,并且一般情况下成本比其他估算方法要少,也不够精确。可以针对整个项目或项目中的某个部分进行类比估算,也可以与其他估算方法联合使用。
2.由下到上估算法
自下到上估算是对工作组成部分进行估算的一种方法。先对单个工作包或活动的成本进行最具体、细致的估算;然后把这些细节性成本向上汇总或“滚动”到更高层次,用于后续报告和跟踪。自下而上估算的准确性及其本身所需的成本,通常取决于单个活动或工作包的规模和复杂程度。例如,表7-3所示是采用由下到上估算法计算的过程结果,先根据任务分解的结果,评估每个子任务的成本,然后逐步累加,最后得到项目的总成本。
表7-3 由下到上估算法估算项目的成本
续表
3.参数化建模
参数化建模(Parametric Modeling)是在一个数学模型中通过利用项目特征(参数)来估计项目成本。基于软件开发项目使用的编程语言、编程人员的专业水平、涉及数据的大小和复杂程度,一个参数化模型估计每行代码要花费50美元。当构建模型的历史信息准确、参数可数量化、模型相对项目大小适度时,参数模型是最可靠的。
4.代码行估算法
代码行(Line Of Code,LOC)估算是传统的估算方法,尤其适合于过程化语言。这种方法依据以往开发类似产品的经验和历史数据,估计实现一个功能所需要的源程序行数。在项目早期可能会有功能点、组件或任何早期可利用的数据,能转换成代码行数,在缺乏历史数据时,可用专家意见估算出可能的、不可能的、最可能的代码行数。
源代码行一般不包括不需要交付的支持软件,如测试驱动程序。如果这些不交付支持软件的开发与交付软件的开发一样仔细,需要自己的评审、测试、文档等,那么也应该计算在内,目的是度量投入程序开发中的智力工作量。
定义一行代码是有困难的,这涉及不同语言之间可执行语句和数据声明概念上的差异。为跨越不同编程语言,定义一致的度量标准,采用逻辑源语句,并根据计算源语句定义检查表进行判断。计算源语句定义检查表如表7-4所示。
表7-4 计算源语句定义检查表
代码行技术的主要优点体现在代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数,但是代码行也存在许多问题:
(1)代码行数量依赖于所用的编程语言和个人编程风格,因此,计算的差异也会影响用多种语言编写的程序规模,进而也很难对不同语言开发的项目的生产率进行直接比较。
(2)项目早期,在需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量。
(3)代码行估算法强调编码的工作量,只是项目实现阶段的一部分。
5.功能点估算法
功能点估算法用系统的功能数量来测量其规模,以一个标准的单位来度量软件产品的功能,与实现产品所使用的语言和技术没有关系。功能点是从功能的角度来度量系统,与所使用的技术无关,不用考虑开发语言、开发方法以及所使用的硬件平台。目前,功能点估算法是最重要、最有效的软件规模估算方法之一,在软件规模估算中起着重要作用。功能点估算法分为以下3个步骤。
1)未调整功能点数估算
未调整功能点数的估算通过以下几步进行:
(1)定义计算边界。即标识要度量的应用程序与外部应用程序和用户区域的边界。对于计算机系统交互非常普遍,必须从用户角度划分边界,确定计算范围,如图7-2所示,用户功能点类型如表7-5所示。
图7-2 边界度量
(2)按类型确定功能点数。根据软件需求和设计文档,明确划分表7-5中的5种用户功能类型,对每种类型功能点数分别统计。
表7-5 用户功能点介绍
(3)PERT每类功能点数量估算。对每类功能点要产生3个估算量。
最乐观功能点数ai──在最有利的情况下,第i类功能点的最低规模。
最可能功能点数mi──在正常情况下,第i类功能点的最可能规模。
悲观功能点数bi──在最不利的情况下,第i类功能点的最高规模。
每类功能点的期望值为Ei:
(4)确定复杂等级。每个功能点赋予一个功能点复杂性等级。功能点复杂性等级由数据元素类型(Data Element Type,DET)、记录元素类型(Record Element Type,RET)和参考文件类型(Reference File Type,RFT)的数目决定。
数据元素类型(DET):一个DET就是一个唯一的用户可辨认的、不可递归的域。例如,一个通信地址由省、市、县、镇、村、组、邮政编码等7个域组成,可以计算为7个DET。
记录元素类型(RET):一个RET就是一个用户可辨认的ILF或EIF中的数据元素组成的子组。例如,人员信息(雇员、顾客)可以计算为两个RET。
参考文件类型(RFT):指可维护、读取、参考的ILF和可读、参考的EIF的数目。例如,一个EQ基本处理需要两个来自EIF的数据,可作为两个RFT计算。
每个功能的复杂性等级,具体确定为“低”“一般”“高”3个等级。各种类型功能点的复杂性等级如表7-6、表7-7和表7-8所示。
(5)计算未调整功能点。对于表7-6、表7-7和表7-8中的每个UFP复杂性等级有一个对应的复杂性权重,如表7-9所示。
表7-6 EI的复杂性等级(www.daowen.com)
表7-7 EO和EQ的复杂性等级
表7-8 ILF和EIF的复杂性等级
表7-9 复杂性权重
未调整的功能点数是通过表7-10计算出来的。未调整功能点数栏的计算公式为低、中、高功能点的数量分别乘以其权重之和。即
表7-10 未调整功能点数量估算表
未调整功能点数=数量(低)×权重(低)+数量(中)×权重(中)+
数量(高)×权重(高)
2)调整后功能点数估算
UFP是通过建立一个标准来确定某个特定的测量参数进行计算,复杂性权重的确定带有一定的主观性。UFP域功能点调整系数(Function Point Adjust Factor,FPAF)相乘得到调整后的功能点数作为软件规模估算的功能点数。
FPAF通过技术复杂因子(Technical Complexity Factor,TCF)进行计算。
TCF共由3大类14个因子组成,如表7-11所示。每个因子按照其对系统的重要程度分为6个级别,如表7-12所示。
表7-11 技术复杂因子组成
表7-12 权重表(Fi的取值)
FPAF用下式计算:
调整后的功能点数FP用下式计算:
FP=UFP×FPAF
3)成本估算
软件开发包括需求、设计、编码、测试、评审以及项目管理等所需要的时间。软件生产率的影响因素很多,每个软件组织需要根据自身的具体情况进行分析,这需要大量的历史数据作为基础,对于缺乏类似数据的组织来说,找出生产率因素并不容易。
根据软件的功能点数和生产率,可估算出软件的开发周期和成本。估算软件成本的计算公式为
式中,一个月的实际工作天数按19天计算。
公式结果以人/月作为计量单位。如果改为货币单位,可用人/月×劳动力月成本。
6.3点估算
通过考虑估算中的不确定性与风险,使用3种估算值来界定活动成本的近似区间,可以提高活动成本估算的准确性:
最可能成本(Cm):对所需进行的工作和相关费用进行比较现实的估算,所得到的活动成本。
最乐观成本(Co):基于活动的最好情况,所得到的活动成本。
最悲观成本(Cp):基于活动的最差情况,所得到的活动成本。
基于活动成本在3种估算值区间内的假定分布情况,使用公式来计算预期成本(Ce)。基于三角分布和贝塔分布的两个常用公式如下:
(1)三角分布:Ce=(Co+Cm+Cp)/3;
(2)贝塔分布:Ce=(Co+4Cm+Cp)/6。
基于3点的假定分布计算出期望成本,并说明期望成本的不确定区间。
7.使用项目管理软件来估算成本
项目管理通过应用软件、电子表单、模拟和统计工具等来辅助成本估算。这些工具能简化某些成本估算技术的使用,使人们能快速考虑多种成本估算方案。许多组织也使用更高级的和集成化的财务应用软件,为会计和财务部门提供重要的成本相关信息。本节特别强调如何在成本管理中使用项目管理软件。
在每一个项目成本管理过程中,项目成本管理软件都是十分有用的工具,能够帮助用户研究整个项目的信息或关注有成本限制的任务。用户可以使用软件为资源和任务分配成本、准备成本估算、制订成本预算、监督成本绩效。Project 2013有几个标准的成本报告:现金流、预算、超支任务、超预算资源和挣值报告。对于这几个报告,其中有一些必须输入百分比格式的完成信息和实际费用,就像当手工计算挣值或做其他分析时需要的那些信息一样。
有些人喜欢使用电子表格软件,以便享受更大的灵活性。使用其他软件的项目经理也经常会这样做,这是因为在组织中,这些软件有更普遍的使用性,并且有更多的人知道如何使用它们。
许多组织在项目组合和整个企业中正使用企业项目管理软件来汇总和分析各种类型的项目数据。企业项目管理工具从多个项目中整合信息来显示项目的地位状况或执行的好坏。但是,就使用任何软件来说,经理们都必须确保数据是精确的、最新的,并且在做出任何一个重大决定之前都要问一些相关的问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。