chapter__30软件项目管理课时:32上机:8实验:FF1073/5/9/12上课时间chapter__31情景引入:如何规划工作量chapter__32软件项目管理第5章软件项目成本计划chapter__33本章要点一、软件项目规模成本的概念二、估算过程三、估算方法四、成本预算五、案例分析chapter__34关于估算估算不是很准确,有误差经验(历史)数据非常重要不要太迷信数学模型chapter__35软件项目规模软件项目规模即工作量,是从软件项目范围中抽出的软件功能,然后确定每个软件功能所必须执行的一系列软件工程任务包括:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。chapter__36规模的单位LOC(LocofCode)源代码程序长度的测量FP(FunctionPoint)用系统的功能数量来测量人月人天人年chapter__37软件项目成本完成软件规模相应付出的代价。待开发的软件项目需要的资金。人的劳动的消耗所需要的代价是软件产品的主要成本chapter__38成本的单位货币单位人民币元美元……..chapter__39软件的规模和成本的关系规模是成本的主要因素,是成本估算的基础有了规模就确定了成本,chapter__310成本管理过程成本估算成本预算成本控制chapter__311本章要点一、软件项目规模成本的概念二、估算过程三、估算方法四、成本预算五、案例分析chapter__312成本估算过程估算输入估算结果成本估算方法chapter__313成本估算输入项目需求、WBS历史项目度量资源要求(资源编制计划)资源消耗率:如人员成本:100元/小时进度规划:项目总进度(一般是合同要求)学习曲线chapter__314成本估算结果直接成本间接成本chapter__315直接成本与具体项目相关的成本chapter__316间接成本不能具体到某个项目中的成本,可以分摊到各个具体项目中的成本,例如:培训房租水电员工福利市场费用管理费其他等等chapter__317本章要点一、软件项目规模成本的概念二、估算过程三、估算方法四、成本预算五、案例分析chapter__318估算的基本方法1.代码行、功能点2.类比(自顶向下)估算法3.自下而上估算法4.参数估算法5.专家估算法chapter__319代码行(LOC)从软件程序量的角度定义项目规模。与具体的编程语言有关要求功能分解足够详细的有一定的经验数据(类比和经验方法)chapter__320代码行技术的主要优点n代码是所有软件开发项目都有的“产品”,而且很容易计算代码行数。chapter__321代码行(LOC)缺点1.对代码行没有公认的可接受的标准定义2.代码行数量依赖于所用的编程语言和个人的编程风格.3.在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量.4.代码行强调编码的工作量,只是项目实现阶段的一部分chapter__322功能点(FP:Functionpoint)与实现产品所使用的语言和技术没有关系的用系统的功能数量来测量其规模两个评估内部基本功能外部基本功能加权和量化chapter__323功能点的公式FP=UFC*TCFUFC:未调整功能点计数TCF:技术复杂度因子chapter__324UFC-未调整功能点计数功能计数项:1.外部输入2.外部输出3.外部查询4.外部文件5.内部文件chapter__325外部输入(ExternalInputs:EI)给软件提供面向应用的数据的项(如屏幕、表单、对话框、控件,文件等);在这个过程中,数据穿越外部边界进入到系统内部。chapter__326外部输出(ExternalOutputsEO)向用户提供面向应用的信息,例如,报表和出错信息等。chapter__327外部查询(ExternalInquiryEQ)外部查询即是一次联机输入,它导致软件以联机输出方式产生某种即时响应。chapter__328外部接口文件(ExternalInterfaceFilesEIF’s)n外部接口文件是用户可以识别的一组逻辑相关数据,这组数据只能被引用。是机器可读的全部接口(例如,磁盘或磁带上的数据文件)的数量,用这些接口把信息传送给另一个系统。chapter__329内部逻辑文件(InternalLogicalFiles:ILF’S)用户可以识别的一组逻辑相关的数据,而且完全存在于应用的边界之内,并且通过外部输入维护,是逻辑主文件的数目。chapter__330FP估算方法举例chapter__331UFC-未调整功能点计数功能计数项的复杂度等级复杂度权重因素项简单(低)一般(中)复杂(高)外部输入346外部输出457外部查询346外部文件5710内部文件71015chapter__332功能点计算实例-UFC功能点项简单一般复杂外部输入6*32*43*6外部输出7*47*50*7外部查询0*32*44*6外部文件5*52*73*10内部文件9*70*102*15总计UFC301根据某项目的需求评估:外部输入:11项;外部输出:14项;外部查询:6项;外部文件:10项;内部文件:11项chapter__333TCF-技术复杂度因子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易于修改chapter__334技术复杂度因子的取值范围调整系数描述0不存在或者没有影响1不显著的影响2相当的影响3平均的影响4显著的影响5强大的影响chapter__335功能点计算实例FP=UFC*TCFUFC=301TCF=0.65+0.01(14*3)=1.07FP=301*1.07=322chapter__336功能点与代码行的转换语言代码行/FPAssembly320C150COBOL105FORTRAN105PASCAL91ADA71PL/165PROLOG/LISP64SMALLTALK21SPREADSHEET6chapter__337估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数估算法专家估算法chapter__338类比-定义估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量),然后按比例将它分配到各个开发任务单元中是一种自上而下的估算形式chapter__339类比—使用情况有类似的历史项目数据信息不足(要求不是非常精确)的时候市场招标和合同期chapter__340类比—特点简单易行,花费少具有一定的局限性准确性差,可能导致项目出现困难chapter__341类比—理论举例chapter__342类比—主观判断举例证券交易网站需求类似历史数据:10万类比估算:10万chapter__343估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数估算法专家估算法chapter__344自下而上---定义利用任务分解结构图,对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。“变化计数器”系统文件比较预处理增加代码结果处理统计总行标记修改记录修改版本比较找出增删行统计增删行删除代码增加行数删除行数估算结果chapter__345自下而上---使用情况项目详细规划,WBS开发阶段需要进行准确估算的时候chapter__346自下而上---特点相对比较准确,它的准确度来源于每个任务的估算情况非常费时,估算本身也需要成本支持chapter__347自下而上---举例chapter__348估算的基本方法代码行、功能点类比(自顶向下)估算法自下而上估算法参数估算法专家估算法chapter__349参数估算法—定义通过过去项目数据,进行回归分析,得出的回归模型使用项目特性参数建立数据模型来估算(规模)成本的方法,是一种统计技术。chapter__350参数估算法—使用情况具有良好的项目数据为基础存在成熟的项目估算模型chapter__351参数估算法-特点比较简单,而且也比较准确如果模型选择不当或者数据不准,也会导致偏差chapter__352参数模型:规模(成本)模型整体公式:E=a+b*SCE:以人月表示的工作量a,b,c:经验导出的系数S:主要的输入参数(通常是LOC,FP等)chapter__353参数模型:规模(成本)模型(续)面向LOC驱动的Walston-Felix(IBM)E=5.2*(KLOC)^0.91Balley-BasiliE=5.5+0.73*(KLOC)^1.16.COCOMOE=3.2*(KLOC)^1.05DotyE=5.288*(KLOC)^1.047chapter__354参数模型:规模(成本)模型(续)面向FP驱动的AlbrechtandGaffneyE=-12.39+0.0545FPMatson,BarnettE=585.7+15.12FPchapter__355建议掌握模型IBM模型-(Walston-Felix)COCOMO模型-(Boehm)chapter__356IBM模型1977年,IBM的Walston和Felix提出了如下的估算公式E=5.2×L^0.91,L是源代码行数(以KLOC计),E是工作量(以PM计)D=4.1×L^0.36,D是项目持续时间(以月计)S=0.54×E^0.6,S是人员需要量(以人计)DOC=49×L^1.01。DOC是文档数量(以页计)chapter__357举例采用java完成项目,366功能点,则L=366×46=16386行=16.386KLOCE=5.2×L^0.91=5.2×16.386^0.91=66人月DOC=49×L^1.01=49×16.386^1.01=826页chapter__358COCOMO(ConstructiveCostmodel)结构化成本模型是世界上应用最广泛的参数型软件成本估计模型由BarryBoehm开发的chapter__359COCOMO模型发展COCOMO81COCOMOII模型系列chapter__360COCOMO基本原理将开发所需要的工作量表示为软件规模和一系列成本因子的函数,基本估算公式:A:可以校准的常量;S为软件规模;E为规模的指数,说明不同规模软件具有的相对规模经济和不经济性;EM为工作量乘数,反映某个项目特征对完成项目开发所需工作量的影响程度;n为描述软件项目特征的成本驱动因子的个数chapter__361COCOMO81项目类型:•有机:Organic•嵌入式:Embedded•半有机:Semidetached模型类别:基本COCOMO中等COCOMO高级COCOMOchapter__362COCOMO81模型类别基本COCOMO静态单变量模型中等COCOMO基本模型基础上考虑影响因素,调整模型高级COCOMO中等COCOMO模型基础上考虑各个步骤的影响chapter__363COCOMO81项目类型•有机:Organic,•各类应用程序,例如数据处理、科学计算等•受硬件的约束比较小,程序的规模不是很大•嵌入式:Embedded•系统程序,例如实时处理、控制程序等•紧密联系的硬件、软件和操作的限制条件下运行,软件规模任意•半有机:Semidetached•各类实用程序,介于上述两种软件之间,例如编译器(程序)•规模和复杂度都属于中等或者更高chapter__364基本COCOMO-81E=aX(KLOC)b