第4章软件项目成本计划规模成本的概念成本估算过程估算方法估算准确度成本预算项目核心(进度)计划—续核心计划小结估算不是很准确的,有误差的经验(历史)数据对估算非常重要不要太迷信数学模型软件项目的变化因素太多—人员、技术、环境和行政。数据的有效性、可靠性对估算的风险和效果有很大影响。估算不是估计,是一种科学行为,存在估算模型。但模型多数不稳定。软件项目规模即工作量,是从软件项目范围中抽出的软件功能,然后确定每个软件功能所必须执行的一系列软件工程任务。规模的单位有:代码行(LOC)、功能点(FP)、人天、人月和人年等。软件规模是指软件项目的可量化的结果。规模是成本的主要因素,是成本估算的基础。软件项目成本是指完成软件规模相应付出的代价、待开发的软件项目需要的资金。软件项目成本的关键成本:成本一般采用货币单位:RMB元、美元等①直接材料(项目外购的、直接用于项目、并将最终交付给用户的软硬件、服务等)成本;②直接人力资源成本;③实施费用(差旅、交通、通讯等)成本;④其他直接成本(设备租用、设备折旧、税费、广告等);⑤间接成本(场地租用、水电费等)。直接成本估算输入估算结果成本估算方法项目需求与WBS:确保所有工作均被估算;历史项目度量:项目估算的主要参考;资源要求(资源编制计划):资源消耗情况;资源消耗率:资源单价;进度规划:项目总进度(一般是合同要求);学习曲线:风险控制程度。规模成本估算是项目各活动所需资源消耗的定量估算。包括需要的资源种类、数量等。直接成本:与项目活动(开发、管理)直接相关的成本;间接成本:不归属于一个具体项目,是企业的运营成本,可以分摊到各个项目中。预测所需要的总工作量的过程。是一种量化的结果可以有一些误差成本估算不同于项目定价贯穿于软件的生存周期。估算文件资源:资源的数量,质量标准,估算成本等信息单位:一般是货币单位竣工估算(BAC,BudgetAtCompletion):优化与修正估算说明工作范围:WBS估算的基础和依据:确认估算的合理估算的假设:确认假设的合理性估算的误差变动等1.代码行2.功能点3.类比(自顶向下)估算法4.自下而上估算法5.参数法估算法6.专家估算法从软件程序量的角度定义项目规模。能与其他项目中的度量进行比较。度量数据:错误数/KLOC缺陷数/KLOC成本/KLOC文档页数/KLOC生产率数据:LOC/pm错误数/pm将基线生产率度量应用于规模估算变量中,导出每个活动的成本或工作量,将所有活动的估算合并起来,即可产生整个项目的总体估算。1.对代码行没有公认的可接受的标准定义2.代码行数量依赖于所用的编程语言和个人的编程风格3.在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量4.代码行强调编码的工作量,只是项目实现阶段的一部分代码行缺点:用LOC当做估算变量时,需要进行活动定义(分解)根据软件信息域的特性及复杂性估算规模。与实现产品所使用的语言和技术没有关系。信息域的值以以下方式定义:外部输入(EI)数:源于外部系统或用户的输入;外部输出(EO)数:从系统中导出的信息(不对信息中的数据项分开计数);外部查询(EQ)数:一个输入与输出的响应;内部逻辑文件(ILF)数:驻留在系统边界之内的数据逻辑分组,通过EI维护;外部接口文件(EIF)数:驻留在应用系统外部的数据逻辑分组,为系统提供有用的数据。FP=UFC*TCF◦UFC:未调整功能点计数◦TCF:技术复杂度因子信息域值加权因子计数简单中等复杂EI346EO457EQ346ILF71015EIF5710TCF=0.65+0.01(∑(Fi))值调整因子(VAF)F1可靠的备份和恢复F2数据通信F3分布处理F4性能F5配置环境F6联机数据输入F7操作简单性F8ILF在线升级F9复杂操作F10复杂数据处理F11代码复用F12安装F13多点安装F14易于修改调整系数描述0不存在或者没有影响1不显著的影响2相当的影响3平均的影响4显著的影响5强大的影响对象点计算应用中屏幕、报表和3GL构件数量的最可能值。对象点也可分为3个不同级别。◦r:重用构件的百分比对象类型复杂度加权简单的中等的复杂的屏幕123报表2583GL构件10用例点UCP=UUCP×TCF×ECF◦UCP:用例点◦UUCP:未调整用例点◦TCF:技术复杂度因子◦ECF:环境复杂度因子最终工作量=UCP×生产率因子用例表现的是不同抽象级别上的软件的外部视图,没有标识出功能和特性的复杂性,因此,基于用例的估算方法建立还有困难。类比(analogy)-定义估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量),然后按比例将它分配到各个开发任务单元中类比-使用情况有类似的历史项目数据信息不足(要求不是非常精确)的时候在合同期和市场招标时简单易行,直观,花费少具有一定的局限性准确性差,可能导致项目出现困难类比-特点项目间相似度计算公式:类比-计算利用任务分解结构图,对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。项目开始以后,WBS的开发阶段需要进行准确估算的时候比较准确,来源于每个任务的估算情况非常费时,估算本身也需要成本支持可能发生虚报现象找到软件工作量的各种成本影响因子,并判定它对工作量所产生影响的程度是可加的、乘数的还是指数的,以期得到最佳的模型算法表达形式。存在成熟的项目估算模型应该具有良好的数据库数据为基础比较简单,而且也比较准确如果模型选择不当或者数据不准,也会导致偏差提供工作量(规模)的直接估计,通过过去项目数据,进行回归分析得出的回归模型。提供工作量(规模)的直接估计,通过过去项目数据,进行回归分析得出的回归模型。E=A+B×SC◦E:以人月表示的工作量◦A,B,C:经验导出的系数◦S:主要的输入参数(通常是LOC,FP等)Walston-Felix:E=5.2×(KLOC)0.91Balley-Basili:E=5.5+0.73×(KLOC)1.16COCOMO(Boehm基本):E=3.2×(KLOC)1.05Doty(KLOC9):E=5.288×(KLOC)1.047面向LOC驱动的面向FP驱动的AlbrechtandGaffney:E=-91.4+0.355FPMatson,Barnett:E=585.7+15.12FPKemerer:E=-37+0.96FP小型项目回归:E=-12.88+0.405FPE=5.2×L0.91,L是源代码行数(以KLOC计),E是工作量(以人月计)D=4.1×L0.36,D是项目持续时间(以月计)S=0.54×E0.6,S是人员需要量(以人计)DOC=49×L1.01。DOC是文档数量(以页计)1977年,IBM的Walston和Felix提出了如下的估算公式L=366×46=16386LOC=16.386KLOCE=5.2×L0.91=5.2×16.3860.91=66人月DOC=49×L1.01=49×16.3861.01=826页例,采用java完成项目,366功能点,则结构化成本模型(ConstructiveCostModel),是世界上应用最广泛的参数型软件成本估计模型◦PM:以人月表示的工作量◦A:校准因子◦size:对工作量呈可加性影响的软件模块功能尺寸◦B:对工作量呈指数或非线性影响的比例因子◦EM:工作量乘数a)COCOMO81基本模型:静态单变量模型;中等模型:基本模型基础上考虑影响因素,调整模型。需求确定后使用;高级模型:中等模型基础上考虑各个步骤的影响。设计完成后使用。◦E:所需的人力(人月),◦KLOC:交付的代码行◦a,b:系数,取决于模型等级和项目模式◦F:调整因子E=a×(KLOC)b×F有机:Organic,各类应用程序,例如数据处理、科学计算等,受硬件的约束比较小,程序的规模不是很大嵌入式:Embedded,系统程序,例如实时处理、控制程序等紧密联系的硬件、软件和操作的限制条件下运行,软件规模任意半嵌入式:Semidetached,各类实用程序,介于上述两种软件之间,例如编译器(程序),规模和复杂度都属于中等或者更高•基本COCOMO模型静态的单变量模型,不考虑任何成本驱动,适于起始阶段粗略迅速估算。F=1方式ab有机2.41.05半嵌入式3.01.12嵌入式3.61.2F是根据成本驱动属性打分的结果在用LOC为自变量的函数计算工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算方式ab有机2.81.05半嵌入式3.01.12嵌入式3.21.2乘法因子计算公式与中等COCOMO模型相同包括中间COCOMO模型的所有特性,还要考虑分析、设计等各步骤的影响,将项目分解成一系列子系统。1)将软件项目分解为模块、子系统、系统3个等级2)增加了与阶段相关的工作量乘数更细粒度的因子影响分析,考虑阶段的区别b)COCOMOIICOCOMOII给出3个层次的估算模型:1.应用组装模型:规划阶段使用,基于对象点;2.早期设计模型:体系结构设计阶段使用,基于功能点或者代码行;3.后体系结构模型:软件构造阶段使用,基于功能点或代码行◦E:所需的人力(人月),◦KLOC:交付的代码行◦a,b:系数,模型系数◦fi:成本因素一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值,最后得出综合的估算值。组织者发给每位专家一份软件系统的规格说明和一张记录估算值的表格,请他们估算专家提出3个规模的估算值:最小ai、最可能mi、最大bi组织者对专家的表格中的答复进行整理计算每位专家的Ei=(ai+4mi+bi)/6综合结果后:E=E1+E2+…En/n(n:表示n个专家)再组织专家无记名填表格,比较估算差,并查找原因如果各个专家的估算差异超出规定的范围(例如:15%),则需重复上述过程初期◦类比◦专家估算计划阶段◦自下而上◦参数模型实施阶段(包括变更发生)◦自下而上◦参数模型主要考虑三种模型:类比法,自下而上法,参数法自下而上法费时费力,参数法比较简单自下向上法与参数法的估计精度相似类比法通常用来验证参数法和自下而上法的结果各种方法不是孤立的,应该注意相互的结合使用1.对任务进行分解:1,2,…,i,…,n2.估算每个任务的规模(人月)3.估算直接成本4.估算间接成本5.项目总估算成本=直接成本+间接成本6.项目总报价=项目总估算成本+风险利润风险利润=利润+风险基金+税是一种自下而上和参数法的结合模型,步骤如下:PERT算法:Qi=(Max+4Avg+Min)/6最可能值:Qi=Avg直接估算任务成本Ei=Qi×人力成本参数直接成本=E1+E2+…+Ei+…+En直接成本=规模×人力成本参数直接成本组成◦开发成本◦管理成本◦质量成本间接成本:日常开销、行政管理费用、员工福利、培训、预防性维护费用、市场宣传等间接成本=直接成本×间接成本系数(1.5~3)估算成本=直接成本+间接成本估算成本=直接成本+直接成本×间接成本系数估算成本=直接成本(1+间接成本系数)估算成本=规模×人力成本参数(1+间接成本系数)成本系数=人力成本参数×(1+间接成本系数)简易算法:估算成本=规模×成本系数1.项目总报价=项目总估算成本+风险利润①项目利润=估算成本×a%②风险基金=估算成本×b%③税=估算成本×c%(例如:c为5.5左右)2.项目总报价=(a+b+c)%×项目总估算成本+项目总估算成本类型准确度说明量级估算:合同前,Orderofmagnitude-25~~+75%概念和启动阶段决策预算估算:合同期,Budget-10~~+25%编制初步计划确定性估算:WBS后,Definitive-5~~+10%工作分解后的详细计划基础数据不足缺乏经验的估算人员签约前后不连贯低劣的推测技