第二篇第四章软件项目成本计划0软件开发项目管理与CMM第二篇第四章软件项目成本计划主讲教师:李晋第二篇第四章软件项目成本计划1承上启下配置管理计划合同计划风险计划沟通计划质量计划成本计划时间计划集成计划范围计划项目结束项目执行控制项目计划项目初始人力计划第二篇第四章软件项目成本计划2成本计划配置管理计划合同计划风险计划沟通计划质量计划成本计划时间计划集成计划范围计划项目结束项目执行控制项目计划项目初始人力计划第二篇第四章软件项目成本计划3本章要点一、软件项目规模成本的概念二、估算的过程三、估算的方法四、成本预算五、项目核心(进度)计划—续六、案例分析第二篇第四章软件项目成本计划4关于成本估算估算不是很准确的,有误差的经验(历史)数据非常重要,可以提高估算的精度不要太迷信数学模型第二篇第四章软件项目成本计划5软件项目规模软件项目规模即工作量,是从软件项目范围中抽出的软件功能,然后确定每个软件功能所必须执行的一系列软件工程任务;包括:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。第二篇第四章软件项目成本计划6规模的单位LOC(LinesofCode)源代码程序长度的测量FP(FunctionPoint)用系统的功能数量来测量人月人天人年第二篇第四章软件项目成本计划7软件项目成本软件开发成本是指软件开发过程中所花费的工作量及相应的代价;不包括原材料和能源的消耗;主要是人的劳动的消耗人力成本,材料成本,设备资金,咨询费用,日常费用软件项目不存在重复制造的过程,所以软件开发成本是以一次性开发过程所花费的代价来计算。依据:软件计划-需求分析-设计-编码-测试第二篇第四章软件项目成本计划8成本的单位货币单位人民币元美元……..第二篇第四章软件项目成本计划9成本估算和定价的关系成本估算对可能数量结果的估计,即乙方为提供产品或服务的花费是多少;定价一个商业决策,即乙方为它提供的产品或服务索取多少费用;成本估算是定价要考虑的因素之一。第二篇第四章软件项目成本计划10本章要点一、软件项目规模成本的概念二、估算的过程三、估算的方法四、成本预算五、项目核心(进度)计划—续六、案例分析第二篇第四章软件项目成本计划11成本估算过程估算输入估算结果成本估算方法第二篇第四章软件项目成本计划12成本估算输入①项目需求、WBS①根据估算的不同阶段,有不同的输入可用于成本估算;②资源要求(资源编制计划)①让项目组掌握资源需要和分配的情况;③资源消耗率:每种资源单价以计算项目成本;④进度规划:项目活动时间的估计⑤历史项目数据:以往项目的数据;⑥学习曲线:项目组学习某项技术或工作的时间。第二篇第四章软件项目成本计划13规模成本估算项目成本估算是项目各活动所需资源消耗的定量估算,包括人力资源、设备、资料等;成本估算包括:直接成本:与开发的具体项目直接相关的成本例如人员的工资、资料费、外包外购成本等;开发成本、管理成本、质量成本等;间接成本:不归属于一个具体的项目,是企业的运营成本,可以分摊到各个项目中包括房租、水电、保安、员工福利、税收等。第二篇第四章软件项目成本计划14项目估算结果估算文件资源,资源的数量,质量标准,估算成本等信息单位:一般是货币单位BAC(BudgetAtcompletion)估算说明工作范围估算的基础和依据估算的假设估算的误差变动等第二篇第四章软件项目成本计划15估算说明预测所需要的总工作量的过程。是一种量化的结果可以有一些误差成本估算不同于项目定价贯穿于软件的生存周期。第二篇第四章软件项目成本计划16本章要点一、软件项目规模成本的概念二、估算的过程三、估算的方法四、成本预算五、项目核心(进度)计划—续六、案例分析第二篇第四章软件项目成本计划17估算的基本方法1.代码行、功能点2.类比(自顶向下)估算法3.自下而上估算法4.参数法估算法5.专家估算法第二篇第四章软件项目成本计划18代码行(LOC)从软件程序量的角度定义项目规模。要求功能分解足够详细的有一定的经验数据(类比和经验方法)与具体的编程语言有关第二篇第四章软件项目成本计划19代码行技术的主要优点代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。第二篇第四章软件项目成本计划20代码行(LOC)缺点1.对代码行没有公认的可接受的标准定义2.代码行数量依赖于所用的编程语言和个人的编程风格.3.在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量.4.代码行强调编码的工作量,只是项目实现阶段的一部分第二篇第四章软件项目成本计划21功能点(FP:Functionpoint)用系统的功能数量来测量其规模与实现产品所使用的语言和技术没有关系的两个评估内部基本功能外部基本功能加权和量化第二篇第四章软件项目成本计划22功能点的公式FP=UFC*TCFUFC:未调整功能点计数TCF:技术复杂度因子第二篇第四章软件项目成本计划23UFC-未调整功能点计数功能计数项:1.外部输入:给软件提供面向应用的数据项,例如屏幕、表单、对话框、文件等;2.外部输出:向用户提供面向应用的信息,如报表和出错信息等;3.外部查询:使软件以联机输出方式产生某种即时响应;4.外部接口文件:是用户可以识别的一组逻辑相关数据,如磁盘或磁盘上的数据文件;5.内部逻辑文件:存在应用的边界之内,如大型数据库的一部分或一个独立文件等。第二篇第四章软件项目成本计划24UFC-未调整功能点计数功能计数项的复杂度等级复杂度权重因素项简单一般复杂外部输入346外部输出457外部查询346外部接口文件5710内部逻辑文件71015第二篇第四章软件项目成本计划25功能点计算实例-UFC功能点项简单一般复杂外部输入6*32*43*6外部输出7*47*50*7外部查询0*32*44*6外部接口文件5*52*73*10内部逻辑文件9*70*102*15总计UFC301第二篇第四章软件项目成本计划26TCF-技术复杂度因子TCF=0.65+0.01(sum(Fi)):Fi:0-5,TCF:0.65-1.35技术复杂度因子F1可靠的备份和恢复F2数据通信F3分布式函数F4性能F5大量使用的配置F6联机数据输入F7操作简单性F8在线升级F9复杂界面F10复杂数据处理F11重复使用性F12安装简易性F13多重站点F14易于修改第二篇第四章软件项目成本计划27技术复杂度因子的取值范围调整系数描述0不存在或者没有影响1不显著的影响2相当的影响3平均的影响4显著的影响5强大的影响第二篇第四章软件项目成本计划28功能点计算实例FP=UFC*TCFUFC=301这个项目所有的技术复杂度因子的值都是3,则TCF=0.65+0.01(14*3)=1.07FP=301*1.07=322注意:功能点计算方法是结构化的,但权重是主观的;区分外部和内部行为,避免双重计算。第二篇第四章软件项目成本计划29功能点与代码行的转换-经验值语言代码行/FPAssembly320C150COBOL105FORTRAN105PASCAL91ADA71PL/165PROLOG/LISP64SMALLTALK21SPREADSHEET6第二篇第四章软件项目成本计划30估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数法估算法专家估算法第二篇第四章软件项目成本计划31类比-定义估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量),然后按比例将它分配到各个开发任务单元中是一种自上而下的估算形式第二篇第四章软件项目成本计划32类比—使用情况有类似的历史项目数据信息不足(要求不是非常精确)的时候在合同期和市场招标时第二篇第四章软件项目成本计划33类比—特点简单易行,花费少具有一定的局限性,应用于已有经验的狭窄领域,不便于跨领域应用准确性差,可能导致项目出现困难第二篇第四章软件项目成本计划34类比—举例第二篇第四章软件项目成本计划35类比—举例证券交易网站需求类似历史数据:10万第二篇第四章软件项目成本计划36估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数法估算法专家估算法第二篇第四章软件项目成本计划37自下而上—定义利用任务分解结构图,对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。第二篇第四章软件项目成本计划38自下而上—使用情况项目开始以后,WBS的开发阶段需要进行准确估算的时候第二篇第四章软件项目成本计划39自下而上—特点这种方法相对比较准确,它的准确度来源于每个任务的估算情况非常费时,估算本身也需要成本支持可能发生虚报现象第二篇第四章软件项目成本计划40自下而上—举例银行综合业务系统估算结果3万/人月第二篇第四章软件项目成本计划41估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数法估算法专家估算法第二篇第四章软件项目成本计划42参数估算法—定义一种使用项目特性参数建立数据模型来估算成本的方法,是一种统计技术,如回归分析和学习曲线。第二篇第四章软件项目成本计划43参数估算法—使用情况存在成熟的项目估算模型应该具有良好的数据库数据为基础第二篇第四章软件项目成本计划44参数估算法-特点比较简单,而且也比较准确如果模型选择不当或者数据不准,也会导致偏差第二篇第四章软件项目成本计划45参数成本估算实例(适合单价合同)项目经理(30美元/小时)15,000美元分析家(20美元/小时)20,000美元技术员(13美元/小时)2,6000美元总劳动开支61,000美元一般管理费(35%)21,350美元总劳动费加管理费82,350美元额外费用(25%)16,470美元小计98,820美元交通费(四次旅行,1000/次)4000美元微机计算机费(2台,3500/台)7000美元打印与复制费2000美元总辅助费13,000美元总项目费用开支111,820美元第二篇第四章软件项目成本计划46经验导出成本模型提供工作量(规模)的直接估计通过过去项目数据,进行回归分析,得出的回归模型第二篇第四章软件项目成本计划47经验导出成本模型整体公式:E=A+B*SCE:以人月表示的工作量A,B,C:经验导出的系数S:估算变量,主要的输入参数(通常是LOC,FP等)Walstion-Felix(IBM)模型:E=5.2*(KLOC)^0.91Balley-Basili模型:E=5.5+0.73*(KLOC)^1.16Boehm(COCOMO)模型:E=3.2*(KLOC)^1.05第二篇第四章软件项目成本计划48举例Walston-Felix(IBM)模型:E=5.2*(KLOC)^0.91采用java完成项目,366功能点,则L=366×46=16386行=16.386KLOCE=5.2×L^0.91=5.2×16.386^0.91=66人月第二篇第四章软件项目成本计划49估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数法估算法专家估算法第二篇第四章软件项目成本计划50专家估算法由多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值,最后得出综合的估算值。第二篇第四章软件项目成本计划51专家估算法-Deiphi组织者发给每位专家一份软件系统的规格说明和一张记录估算值的表格,请他们估算专家详细研究软件规格说明后,对该软件提出3个规模的估算值最小ai最可能的mi最大bi组织者对专家的表格中的答复进行整理计算每位专家的Ei=(ai+4mi+bi)/6,第二篇第四章软件项目成本计划52专家估算法-Deiphi(续)综合结果后:E=E1+E2+…En/n(N:表示N个专家)再组织专家无记名填表格,比较估算差,并查找原因如果各个专家的估算差异超