软件项目规模成本估算.ppt
关于软件项目规模成关于软件项目规模成本估算本估算现在学习的是第1页,共119页chapter_62成本管理过程成本管理过程q资源计划编制:q确定项目需要的资源种类和数量q成本估算:中心环节q编制一个为完成项目各活动所需要的资源成本的近似估算q成本预算:项目进度q将总成本估算分配到各单项工作活动上q成本控制:项目跟踪q控制项目预算的变更现在学习的是第2页,共119页资源和资源平衡资源和资源平衡 v资源的种类劳动力(Labour)设备(Equipment)原材料(Material)其他(Other):指不符合上述分类的资源,例如分包合同、租约等。v资源平衡技术可储备资源与不可储备资源平衡资源稀缺的资源现在学习的是第3页,共119页资源平衡的基本过程资源平衡的基本过程 n建立网络建立网络,将资源分配给各项活动。将资源分配给各项活动。n首先按尽快原则安排活动首先按尽快原则安排活动含有最迟原则或固定日期的活动除含有最迟原则或固定日期的活动除外外。n建立资源需求直方图。建立资源需求直方图。n决定资源上限决定资源上限(可使用最大量可使用最大量),找出资源冲突找出资源冲突,也就是说也就是说,指指出何时需要量超过可使用量出何时需要量超过可使用量。微软微软ProjectProject软件和其他项目管软件和其他项目管理出版物将这种情况称作资源过度配置理出版物将这种情况称作资源过度配置 (Resource Resource Overallocation)Overallocation)。n重新安排有松闲时间重新安排有松闲时间 (浮动时间浮动时间 )的活动以减少资源冲突的数的活动以减少资源冲突的数量。如果有可能量。如果有可能 ,可在它们的松闲时间限度内重新安排这些活动可在它们的松闲时间限度内重新安排这些活动 ,以避免更改项目的终止日期。以避免更改项目的终止日期。现在学习的是第4页,共119页A=2A=2A=2A=2天天天天 B=5 B=5 B=5 B=5天天天天C=3C=3C=3C=3天天天天 资源平衡示例资源平衡示例项目网络图中标出了活动项目网络图中标出了活动项目网络图中标出了活动项目网络图中标出了活动A A A A、B B B B、C C C C及其历时,活动及其历时,活动及其历时,活动及其历时,活动A A A A有有有有3 3 3 3天时差,活天时差,活天时差,活天时差,活动动动动C C C C有有有有2 2 2 2天时差,假设活动天时差,假设活动天时差,假设活动天时差,假设活动A A A A需要需要需要需要2 2 2 2个员工,活动个员工,活动个员工,活动个员工,活动B B B B需要需要需要需要4 4 4 4个员工,活个员工,活个员工,活个员工,活动动动动C C C C需要需要需要需要2 2 2 2个员工。个员工。个员工。个员工。1342AAAABBBBBBBBBBBBBBBBCCCBBCCCBBAACCCAACCCBBBBBBBBBBBBBBBBBBBB8765432187654321012345012345如果所有活动同一天开始的资源使用如果所有活动同一天开始的资源使用如果所有活动同一天开始的资源使用如果所有活动同一天开始的资源使用如果活动如果活动如果活动如果活动C C C C延迟延迟延迟延迟2 2 2 2天开始的资源使用天开始的资源使用天开始的资源使用天开始的资源使用现在学习的是第5页,共119页资源平衡的其他过程资源平衡的其他过程 n增员或延长加班时间以增加资源。n延长项目工期,这将增强所有活动的浮动时间(Float),以增加重新进行进度安排的选择。n削减活动以减少资源需求。n改变网络的逻辑(例如,活动的顺序)。n限制项目范围。n将大项目细分。现在学习的是第6页,共119页chapter_67关于估算关于估算q估算不是很准确的,有误差的q经验(历史)数据非常重要q不要太迷信数学模型现在学习的是第7页,共119页chapter_68软件项目规模软件项目规模q软件项目规模即工作量,是从软件项目范围中抽出的软件功能,然后确定每个软件功能所必须执行的一系列软件工程任务q包括:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。现在学习的是第8页,共119页chapter_69规模的单位规模的单位qLOC(Line of Code)q源代码程序长度的测量qFP(Function Point)q用系统的功能数量来测量q人月q人天q人年现在学习的是第9页,共119页chapter_610软件项目成本软件项目成本q完成软件规模相应付出的代价。q待开发的软件项目需要的资金。q人的劳动的消耗所需要的代价是软件产品的主要成本q开发成本是以一次性开发过程所花费的代价来计算的现在学习的是第10页,共119页chapter_611成本的单位成本的单位q货币单位q人民币元q美元q.现在学习的是第11页,共119页chapter_612软件的规模和成本的关系软件的规模和成本的关系q规模是成本的主要因素,是成本估算的基础q有了规模就确定了成本,现在学习的是第12页,共119页chapter_613成本估算定义成本估算定义q对完成项目所需费用的估计和计划q包括预测开发一个软件系统所需要的总工作量的过程。q是一种量化的结果q可以有一些误差q成本估算不同于项目定价q贯穿于软件的生存周期。现在学习的是第13页,共119页chapter_614本章要点本章要点q一、软件项目规模成本的概念q二、估算的过程q三、估算的方法q四、成本预算q五、项目核心(进度)计划续q六、案例分析现在学习的是第14页,共119页chapter_615成本估算过程成本估算过程估算输入估算结果成本估算方法现在学习的是第15页,共119页chapter_616成本估算输入成本估算输入q项目需求、WBSq历史项目度量q资源要求(资源编制计划)q资源消耗率:如人员成本:100元/小时q进度规划:项目总进度(一般是合同要求)q学习曲线现在学习的是第16页,共119页chapter_617成本估算成本估算q直接成本q间接成本现在学习的是第17页,共119页chapter_618直接成本直接成本q与具体项目相关的成本现在学习的是第18页,共119页chapter_619间接成本间接成本q不能具体到某个项目中的成本,q可以分摊到各个具体项目中的成本,例如:q培训q房租水电q员工福利q市场费用q管理费q其他等等现在学习的是第19页,共119页chapter_620项目估算结果项目估算结果q估算文件q包括资源,资源的数量,质量标准,估算成本等信息q单位:一般是货币单位qBAC(Budget At completion)q估算说明q工作范围q估算的基础和依据q估算的假设q估算的误差变动等现在学习的是第20页,共119页chapter_621本章要点本章要点q一、软件项目规模成本的概念q二、估算的过程q三、估算的方法q四、成本预算q五、项目核心(进度)计划续q六、案例分析现在学习的是第21页,共119页chapter_622估算的基本方法估算的基本方法1.代码行、功能点、对象点2.类比(自顶向下)估算法3.自下而上估算法4.参数法估算法5.专家估算法现在学习的是第22页,共119页chapter_623代码行(代码行(LOCLOC)q从软件程序量的角度定义项目规模。q要求功能分解足够详细的q有一定的经验数据(类比和经验方法)q与具体的编程语言有关现在学习的是第23页,共119页chapter_624代码行(代码行(LOCLOC)现在学习的是第24页,共119页chapter_625代码行(代码行(LOCLOC)优、)优、缺点缺点n优点优点l代码是所有软件开发项目都有的代码是所有软件开发项目都有的“产品产品”,而且很容易计算代码,而且很容易计算代码行数。行数。n缺点缺点1.对代码行没有公认的可接受的标准定义对代码行没有公认的可接受的标准定义2.代码行数量依赖于所用的编程语言和个人的编程风格代码行数量依赖于所用的编程语言和个人的编程风格.3.在项目早期在项目早期,需求不稳定、设计不成熟、实现不确定的情况下很难准需求不稳定、设计不成熟、实现不确定的情况下很难准确地估算代码量确地估算代码量.4.代码行强调编码的工作量代码行强调编码的工作量,只是项目实现阶段的一部分只是项目实现阶段的一部分 现在学习的是第25页,共119页第26某某软软件件公公司司统统计计发发现现该该公公司司每每一一万万行行C语语言言源源代代码码形形成成的的源源文文件件(.c和和.h文文件件)约约为为250K。某某项项目目的的源源文文件件大大小小为为3.75M,则则可可估估计计该该项项目目源源代代码码大大约约为为15万万行行,该该项项目目累累计计投投入入工工作作量量为为240人人月月,每每人人月费用为月费用为10000元(包括人均工资、福利、办公费用公滩等)。元(包括人均工资、福利、办公费用公滩等)。则该项目中则该项目中1LOC的价值为:(的价值为:(24010000)/15000016元元/L。代码行(代码行(LOCLOC)-举例举例现在学习的是第26页,共119页chapter_627功能点(功能点(FPFP)q标准功能点(Function Point)是一个被严格定义的概念,不会因为估算人员差异产生显著差别(10%)。q用系统的功能数量来测量其规模q与实现产品所使用的语言和技术没有关系的q两个评估q内部基本功能q外部基本功能q加权和量化 现在学习的是第27页,共119页chapter_628功能点(功能点(FPFP)的分析方法)的分析方法现在学习的是第28页,共119页第30功能点计算由下列步骤组成:功能点计算由下列步骤组成:1)对每一项功能,通过计算对每一项功能,通过计算4类系统外部行为或事务的数目,以及一类内类系统外部行为或事务的数目,以及一类内部逻辑文件的数目来估算由一组需求所表达的功能点数目。这部逻辑文件的数目来估算由一组需求所表达的功能点数目。这5类功能计数类功能计数项分别是:项分别是:n 外部输入外部输入:是指用户可以根据需要通过增、删、改来维护内部文件。:是指用户可以根据需要通过增、删、改来维护内部文件。只有那些对功能的影响方式与其他外部输入不同的输入才计算在内。只有那些对功能的影响方式与其他外部输入不同的输入才计算在内。n 外部输出外部输出:指那些向用户提供的用来生成面向应用的数据的项。:指那些向用户提供的用来生成面向应用的数据的项。只有单独算法或者特殊功能的输出才计算在内。只有单独算法或者特殊功能的输出才计算在内。n 外部查询外部查询:是指用户可以通过系统选择特定的数据并显示结果。:是指用户可以通过系统选择特定的数据并显示结果。为了获得这项结果,用户要输入选择信息抓取符合条件的数据。为了获得这项结果,用户要输入选择信息抓取符合条件的数据。此时没有对数据的处理,是直接从所在的文件抓取信息。每个外此时没有对数据的处理,是直接从所在的文件抓取信息。每个外部独立的查询计为部独立的查询计为1。n 外部文件外部文件:是在另一系统中驻留由其他用户进行维护。:是在另一系统中驻留由其他用户进行维护。n 内部文件内部文件:指客户可以使用他们负责维护的数据。:指客户可以使用他们负责维护的数据。现在学习的是第30页,共119页第313)在在估估算算中中对对5类类功功能能计计数数项项中中的的每每一一类类功功能能计计数数项项按按其其复复杂杂性性的的不不同同分分为为简简单单(低低)、一般(中)和复杂(高)一般(中)和复杂(高)3个级别。个级别。功功能能复复杂杂性性是是由由某某一一功功能能的的数数据据分分组组和和数数据据元元素素共共同同决决定定的的。计计算算数数据据元元素素和和无无重重复复的的数数据据分分组组个个数数后后,将将数数值值和和复复杂杂性性矩矩阵阵对对照照,就就可可以以确确定定该该功功能能的的复复杂杂性性属属于于高高、中中、低低。下下表表是是5类功能计数的复杂等级。类功能计数的复杂等级。产品中所有功能计数项加权的总和,就形成了该产品的未调整功能点计数(产品中所有功能计数项加权的总和,就形成了该产品的未调整功能点计数(UFC)。)。5类功能计数的复杂度权重类功能计数的复杂度权重 权重权重项项复杂度权重因素复杂度权重因素简单简单一般一般复杂复杂外部输入外部输入346外部输出外部输出457外部查询外部查询346外部文件外部文件5710内部文件内部文件71015现在学习的是第31页,共119页第324)这这一一步步是是要要计计算算项项目目中中14个个技技术术复复杂杂度度因因子子(TCF)。下下表表是是14个个技技术术复复杂杂度度因子,每个因子的取值范围是因子,每个因子的取值范围是05。技术复杂度因子技术复杂度因子F1可靠的备份和恢复可靠的备份和恢复F2数据通信数据通信F3分布式函数分布式函数F4性能性能F5大量使用的配置大量使用的配置F6联机数据输入联机数据输入F7操作简单性操作简单性F8在线升级在线升级F9复杂界面复杂界面F10复杂数据处理复杂数据处理F11重复使用性重复使用性F12安装简易性安装简易性F13多重站点多重站点F14易于修改易于修改现在学习的是第32页,共119页第335)最后根据功能点计算公式)最后根据功能点计算公式FP=UFCTCF计算出调整后的功能点总和。计算出调整后的功能点总和。其中:其中:UFC表示未调整功能点计数,表示未调整功能点计数,TCF表示技术复杂因子。表示技术复杂因子。功能点计算公式的含义是:如果对应用程序完全没有特殊的功能要求(即综合特征总功能点计算公式的含义是:如果对应用程序完全没有特殊的功能要求(即综合特征总值值=0),那么功能点数应该比未调整的(原有的)点数降低),那么功能点数应该比未调整的(原有的)点数降低35%(这也就是(这也就是“0.65”的的含义)。否则,除了降低含义)。否则,除了降低35%之外,功能点数还应该比未调整的点数增加之外,功能点数还应该比未调整的点数增加1%的综合特的综合特征总值。征总值。现在学习的是第33页,共119页chapter_634功能点与代码行的转换功能点与代码行的转换语言每个功能点的代码行数每个功能点的代码行数C130COBOL110Java55C+50Turbo Pascal50Packages10-40Visual Basic30Power Builder15HTML15SPREADSHEET6现在学习的是第34页,共119页chapter_635对象点(对象点(OPOP)q对象点是基于对象的软件产品规模估算。q著名的Probe方法qWatts Humphrey(软件质量之父,CMM创始人)现在学习的是第35页,共119页chapter_636对象规模表(对象规模表(C+C+)方法种类方法种类很小很小小小中中大大很大很大计算2.345.1311.2524.6654.04数据2.64.798.8416.3130.09I/O9.0112.0616.1521.6228.93逻辑7.5510.9815.9823.2533.83设置3.885.046.568.5311.09文本3.758.0017.0736.4177.66现在学习的是第36页,共119页chapter_637ProbeProbe方法的步骤方法的步骤1.基于产品需求构建体系结构和概要设计2.对设计中的每个类(面向对象方法中的Class)的输入和交互,标识所设计的对象属于表中哪类方法并估算其复杂性3.将上述标识的结果构造成一个如表形式的矩阵,然后将这个矩阵中的值与表中对应的值相乘4.将上述所有相乘结果相加求和,产生估算结果 现在学习的是第37页,共119页chapter_638对象点的估计对象点的估计-举例举例方法种类方法种类很小很小小小中中大大很大很大计算2.345.13*11.2524.6654.04数据2.64.798.8416.3130.09I/O9.0112.0616.15*21.6228.93逻辑7.5510.9815.9823.2533.83设置3.885.046.568.53*11.09文本3.758.0017.0736.4177.66规模估算5865.13*5+16.15*8+8.53*6=206.03现在学习的是第38页,共119页chapter_639估算的基本方法估算的基本方法q代码行、功能点、对象点q类比(自顶向下)估算法q自下而上估算法q参数法估算法q专家估算法现在学习的是第39页,共119页chapter_640类比类比-定义定义q从项目的整体出发,进行类推,即估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量),然后按比例将它分配到各个开发任务单元中q是一种自上而下的估算形式现在学习的是第40页,共119页chapter_641类比类比使用情况使用情况q有类似的历史项目数据q信息不足(要求不是非常精确)的时候q在合同期和市场招标时q在高层对任务的总的评估现在学习的是第41页,共119页chapter_642类比类比特点特点q简单易行,花费少q具有一定的局限性q准确性差,可能导致项目出现困难现在学习的是第42页,共119页chapter_643类比类比软件重用软件重用n将新项目与历史项目比较,估算出各功能的估计值。将新项目与历史项目比较,估算出各功能的估计值。等价代码行等价代码行=(重新设计(重新设计%+重新编码重新编码+重新测试)重新测试)/3*已有代码行已有代码行现在学习的是第43页,共119页chapter_645类比类比举例举例q证券交易网站q需求类似q历史数据:10万q学习曲线(在一定时间内获得的技能或知识的速率):5-8万现在学习的是第45页,共119页chapter_646估算的基本方法估算的基本方法q代码行、功能点、对象点q类比(自顶向下)估算法q自下而上估算法q参数法估算法q专家估算法现在学习的是第46页,共119页chapter_647自下而上自下而上定义定义q利用任务分解结构图,对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。现在学习的是第47页,共119页chapter_648自下而上自下而上使用情况使用情况q在进入项目开始以后,WBS以后的开发阶段q需要进行准确估算的时候现在学习的是第48页,共119页chapter_649自下而上自下而上特点特点q这种方法准确。它的准确度来源于每个任务的估算情况,即每个任务的规模和复杂程度q非常费时,估算本身也需要成本支持q可能发生虚报现象现在学习的是第49页,共119页chapter_650估算的基本方法估算的基本方法q代码行、功能点、对象点q类比(自顶向下)估算法q自下而上估算法q参数法估算法q专家估算法现在学习的是第50页,共119页chapter_651参数估算法参数估算法定义定义q一种使用项目特性参数建立数据模型来估算成本的方法,是一种统计技术,如回归分析和学习曲线。q参考历史信息q根据实际情况,对参数模型按适当比例调整q模型可以简单也可以复杂,很少有通用性现在学习的是第51页,共119页chapter_652参数估算法参数估算法使用情况使用情况q存在成熟的项目估算模型q应该具有良好的数据库数据为基础q目前软件企业估算很少使用通用的数学模型现在学习的是第52页,共119页chapter_653参数估算法估算单位参数估算法估算单位q每个任务必须至少有一个统一的规模单位,例如qKLOC,FPq人天,人月,人年q参数:xx元/KLOC.xx元/FP,xx元/人天现在学习的是第53页,共119页chapter_654参数估算法特点参数估算法特点q比较简单,而且也比较准确q如果模型选择不当或者数据不准,也会导致偏差现在学习的是第54页,共119页chapter_655参量成本估算实例参量成本估算实例(适合单价合同适合单价合同)项目经理(30美元/小时)15,000美元BA(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美元现在学习的是第55页,共119页chapter_656软件成本估算模型软件成本估算模型q理论导出:不成熟阶段q经验导出:软件估算常常采用现在学习的是第56页,共119页chapter_657经验导出成本模型经验导出成本模型q提供工作量(规模)的直接估计q通过过去项目数据,进行回归分析,得出的回归模型q依据不同的细化程度,通过参数的输入来进行成本估算。通常,输入包括q产品的预计规模q产品的自然属性q组织能力q项目性质现在学习的是第57页,共119页chapter_658经验导出成本模型经验导出成本模型q整体公式:E=A+B*SCqE:以人月表示的工作量qA,B,C:经验导出的常数qS:主要的输入参数(通常是LOC,FP等)现在学习的是第58页,共119页chapter_659经验导出成本模型经验导出成本模型(续续)面向LOC驱动的qWalston-Felix(IBM)qE=5.2*(KLOC)0.91qBalley-BasiliqE=5.5+0.73*(KLOC)1.16q.COCOMOqE=3.2*(KLOC)1.05qDotyqE=5.288*(KLOC)1.047现在学习的是第59页,共119页估算估算-经验模型经验模型-IBM模型模型n1977年,年,IBM的的Walston和和Felix提出。提出。n估算公式:估算公式:E 5.2L0.91 L是源代码行数。是源代码行数。以以KLOC计。计。E是工作量。是工作量。以以PM计。计。D 4.1L0.36,D是项目持续时间是项目持续时间(以月计以月计)。S 0.54E0.6,S是人员需要量是人员需要量(以人计以人计)。DOC 49L1.01 DOC是文档数量是文档数量(以页计以页计)。在此模型中,一般指一条机器指令为一行源代码。一个软件的源代码行数不包括程序注释、在此模型中,一般指一条机器指令为一行源代码。一个软件的源代码行数不包括程序注释、作业命令、调试程序在内。对于非机器指令编写的源程序,如汇编语言或高级语言程序,作业命令、调试程序在内。对于非机器指令编写的源程序,如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑。应转换成机器指令源代码行数来考虑。现在学习的是第60页,共119页chapter_661经验导出成本模型经验导出成本模型(续续)面向FP驱动的qAlbrecht and GaffneyqE=-12.39+0.0545FPqKemererqE=60.62*7.728*10-8FP3qMatson,BarnettqE=585.7+15.12FP现在学习的是第61页,共119页chapter_662COCOMOCOCOMO(Constructive Cost modelConstructive Cost model)由Barry Boehm开发的详见:www.usc.edu(南加州大学网站)n基本基本COCOMOCOCOMO:静态单变量模型,它用一个以已估算出来的源代码行数(LOC)为自变量的函数来计算软件开发工作量。q中等中等COCOMOCOCOMO:在用LOC为自变量的函数计算软件开发工作量的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。q高级高级COCOMOCOCOMO:包括中级COCOMO模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对项目过程中分析、设计等各步骤的影响。现在学习的是第62页,共119页第63COCOMOCOCOMO模型模型模型的核心是方程模型的核心是方程 ED=rSc 和和 TD=a(ED)b 其中其中:ED为总的开发工作量(到交付为止),单位为人月;为总的开发工作量(到交付为止),单位为人月;S为源指令数(不包括注释,为源指令数(不包括注释,但包括数据说明、公式或类似的语句),常数但包括数据说明、公式或类似的语句),常数r和和c为校正因子。为校正因子。S的单位为的单位为103,ED的单位为人月。的单位为人月。TD为开发时间,经验常数为开发时间,经验常数r、c、a和和b取决于项目的总体类型(结构型、半独立取决于项目的总体类型(结构型、半独立型或嵌入型)型或嵌入型).现在学习的是第63页,共119页第64项目总体类型项目总体类型 特性特性结构型结构型半独立型半独立型嵌入型嵌入型对开发产品目标的了解对开发产品目标的了解充分充分很多很多一般一般对软件系统有关的工作经验对软件系统有关的工作经验广泛广泛很多很多中等中等为软件一致性需要预先建立的需求为软件一致性需要预先建立的需求基本基本很多很多完全完全为软件一致性需要外部接口规格说明为软件一致性需要外部接口规格说明基本基本很多很多完全完全关联的新硬件和操作过程的并行开发关联的新硬件和操作过程的并行开发少量少量中等中等广泛广泛对改进数据处理体系结构算法的要求对改进数据处理体系结构算法的要求极少极少少量少量很多很多早期实施费用早期实施费用极少极少中等中等较高较高产品规模(交付的源指令数)产品规模(交付的源指令数)5万行万行30万行万行任意任意实例实例批数据处理批数据处理科学模块科学模块事务模块事务模块熟悉的操作系统,编熟悉的操作系统,编译程序译程序简单的编目生产控制简单的编目生产控制大型事务处理系统大型事务处理系统新的操作系统数据库新的操作系统数据库管理系统管理系统大型编目生产控制大型编目生产控制简单的指挥系统简单的指挥系统大而复杂的事务处理大而复杂的事务处理系统系统大型的操作系统大型的操作系统宇航控制系统宇航控制系统大型指挥系统大型指挥系统现在学习的是第64页,共119页第65工作量和进度的基本工作量和进度的基本COCOMOCOCOMO方程方程 开发类型开发类型工作量工作量进度进度结构型结构型ED=2.4S1.05TD=2.5(ED)0.38半独立型半独立型ED=3.0S1.12TD=2.5(ED)0.35嵌入型嵌入型ED=3.6S1.20TD=2.5(ED)0.32现在学习的是第65页,共119页第66影响经验常数影响经验常数r r值的值的1515个成本因素个成本因素 类型类型成本因素成本因素产品属性产品属性1.要求的软件可靠性要求的软件可靠性 2.数据库规模数据库规模 3.产品复杂性产品复杂性计算机属性计算机属性4.执行时间约束执行时间约束 5.主存限制主存限制 6.虚拟机变动性虚拟机变动性 7.计算机周转时间计算机周转时间人员属性人员属性8.分析人员能力分析人员能力 9.应用经验应用经验 10.程序设计人员能力程序设计人员能力11.虚拟机经验虚拟机经验 12.程序设计语言经验程序设计语言经验工程属性工程属性13.最新程序设计实践最新程序设计实践 14.软件开发工具的作用软件开发工具的作用 15.开发进度限制开发进度限制现在学习的是第66页,共119页chapter_667COCOMOCOCOMO举例举例一个33.3 KLOC的软件开发项目,属于中等规模、半独立型的项目,采用基本COCOMO:na=3.0,b=1.12。nE=3.0L 1.12=3.033.3 1.12=152 PM 现在学习的是第67页,共119页chapter_668估算的基本方法估算的基本方法q代码行、功能点、对象点q类比(自顶向下)估算法q自下而上估算法q参数法估算法q专家估算法现在学习的是第68页,共119页chapter_669专家估算法专家估算法q由多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值,最后得出综合的估算值。现在学习的是第69页,共119页chapter_670专家估算法专家估算法-Deiphi-Deiphiq组织者发给每位专家一份软件系统的规格说明和一张记录估算值的表格,请他们估算q专家详细研究软件规格说明后,对该软件提出3个规模的估算值q最小aiq最可能的miq最大biq组织者对专家的表格中的答复进行整理q计算每位专家的Ei=(ai+4mi+bi)/6,现在学习的是第70页,共119页chapter_671专家估算法专家估算法-Deiphi(-Deiphi(续续)q综合结果后:E=E1+E2+En/n(N:表示N 个专家)q再组织专家无记名填表格,比较估算差,并查找原因q如果各个专家的估算差异超出规定的范围(例如:15%),则需重复上述过程,最终可以获得一个多数专家共识的软件规模现在学习的是第71页,共119页chapter_672专家估算法专家估算法-举例举例q某多媒体信息查询系统专家估算q专家1:1,8,9=(1+9+4*8)/6=7(万元)q专家2:4,6,8=(4+8+4*6)/6=6(万元)q估算结果=(6+7)/2=6.5(万元)现在学习的是第72页,共119页chapter_673估算方法总结估算方法总结q初期q类比q专家估算q计划阶段q自下而上q参数模型q实施阶段(包括变更发生)q自下而上q参数模型现在学习的是第73页,共119页chapter_674成本估算方法综述成本估算方法综述q主要考虑三种模型:类比法,自下而上法,参数法.q自下而上法费时费力,参数法比较简单q自下向上法与参数法的估计精度相似q各种方法不是孤立的,应该注意相互的结合使用q类比法通常用来验证参数法和自下而上法的结果现在学习的是第74页,共119页chapter_676实用软件估算模型实用软件估算模型是一种自下而上和参数法的结合模型,步骤如下:1.对任务进行分解2.估算每个任务的成本Ei3.直接成本=E1+E2+Ei+En4.4.项目总估算成本项目总估算成本=直接成本+间接成本5.5.项目总报价项目总报价=项目总估算成本项目总估算成本+风险利润风险利润 1.1.风险利润风险利润=利润+风险基金+税现在学习的是第76页,共119页chapter_677估算每个任务的成本估算每个任务的成本q直接估算成本Eiq先估算规模Qi,然后估算成本Ei=Qi*人力成本参数q唯一估计值:Qi=AvgqPERT算法:Qi=(Max+4Avg+Min)/6退出退出现在学习的是第77页,共119页chapter_678直接成本估算直接成本估算q直接成本组成q开发成本q管理成本q质量成本q直接成本=规模*人力成本参数简易估算:开发(工作量)规模:Scale(Dev)(单位:人月)管理、质量(工作量)规模:Scale(Mgn)=a*Scale(Dev)a:比例系数:例如:20%-25%现在学习的是第78页,共119页chapter_679直接成本估算直接成本估算q直接成本=规模*人力成本参数q例如:人力成本参数=2万/人月,30人月的项目的直接成本是 60万退出退出现在学习的是第79页,共119页chapter_680项目总估算成本项目总估算成本估算成本=直接成本+间接成本间接成本估算:1.按照企业模型直接估算:2.简易算法:l间接成本=直接成本*间接成本系数l间接成本=规模*人力成本参数*间接成本系数例如:间接成本系数=1.5-3现在学习的是第80页,共119页chapter_681项目总估算成本项目总估算成本q估算成本=直接成本+间接成本q估算成本=规模*人力成本参数(1+间接成本系数)q成本系数=人力成本参数*(1+间接成本系数)q简易算法:q估算成本=规模*成本系数q例如:成本系数=3万/人月退出退出现在学习的是第81页,共119页chapter_6项目总报价项目总报价1.1.项目总报价项目总报价=项目总估算成本项目总估算成本+风险利润风险利润1.项目利润=估算成本*a%2.风险基金=估算成本*b%3.税=估算成本*c%(例如:c为5.5左右)2.2.项目总报价项目总报价=(a+b+c)%*项目总估算成本项目总估算成本+项目项目总估算成本总估算成本现在学习的是第82页,共119页chapter_683总估算成本(总估算成本(BACBAC)费用BAC时间现在学习的是第83页,共119页chapter_684本章要点本章要点q一、软件项目规模成本的概念q二、估算的过程q三、估算的方法q四、成本预算q五、项目核心(进度)计划续q六、案例分析现在学习的是第84页,共119页chapter_685成本预算成本预算成本预算是将项目的总成本按照项目的进度分摊到各个工作单元中去。成本预算将总的成本安排到各个任务中成本预算的目的是产生成本基线 成本估算的输出结果是成本预算的基础与依据,成本预算则是将已批准的估算进行分摊。现在学习的是第85页,共119页chapter_686项目成本预算分配项目成本预算包括三种情况:分配项目成本预算包括三种情况:1.分配资源成本2.给任务分配固定资源成本3.给任务分配固定成本现在学习的是第86页,共119页chapter_687分配资源成本分配资源成本q资源成本与资源的基本费率紧密相连q设置资源费率q标准费率q加班费率q每次使用费率q。现在学习的是第87页,共119页chapter_688分配固定资源成本分配固定资源成本q当一个项目的资源需要固定数量的资金时,用户可以向任务分配固定资源成本。q例如:需要的硬件设备 现在学习的是第88页,共119页chapter_689分配固定成本分配固定成本q有些任务是固定成本的类型的任务,也就是说,用户知道某项任务的成本不变,不管任务的工期有多长,或不管任务使用了那些资源。在这种情况下,用户向任务直接分配成本。q例如:培训任务 现在学习的是第89页,共119页chapter_690成本基线成本基线现在学习的是第90页,共119页chapter_691估算准确度估算准确度类型准确度说明量级估算:合同前Order of magnitude-25+75%概念和启动阶段决策预算估算:合同期Budget-10+25%编制初步计划确定性估算:WBS后Definitive-5+10%工作分解后的详细计划现在学习的是第91页,共119页chapter_692估算不准的原因估算不准的原因q基础数据不足q缺乏经验的估算人员q签约前后不连贯q低劣的推测技术q估算对需求的敏感性现在学习的是第92页,共119页chapter_693避免低劣估算避免低劣估算1.避免无准备的估算2.留出估算的时间,并做好计划3.使用以前的项目数据4.使用开发人员提供的数据为基础估算5.分类法估算6.较低层次上的估算要详细7.使用软件估算工具8.使用几种不同估算技术,并比较它们的结果现在学习的是第93页,共119页chapter_694估算的表达方式技巧估算的表达方式技巧1.加减限定1.6个人月,+3人月,-1人月2.范围l5-9人月现在学习的是第94页,共119页chapter_695估算的表达方式技巧估算的表达方式技巧3.风险量化:见下例估算:6个人月,+3,-2+1人月:延迟交付转换子系统-1人月:新成员的工作效率高+1人月:采用的新工具没有预计的好-1人月:采用的新工具比预计的好+0.5人月:员工病事假+0.5人月:低估规模现在学习的是第95页,共119页chapter_696估算的表达方式技巧估算的表达方式技巧n4.情况:见下:案例估算的例子情况情况估算估算最佳情况100人月计划情况110人月最差情况150人月现在学习的是第96页,共119页chapter_697软件工程中的真相与假象软件工程中的真相与假象 真相真相1:造成软件项目失控最普遍的两个原因之一就是造成软件项目失控最普遍的两个原因之一就是软件软件估算不足估算不足(另外的原因是另外的原因是需求不稳定需求不稳定).真相真相2:往往在错误的时间往往在错误的时间,甚至在没有定义需求也即没有理解问甚至在没有定义需求也即没有理解问题之前题之前,就进行软件估算就进行软件估算.真相真相3:往往由错误的人员往往由错误的人员,即不是由软件开发人员或者项目经即不是由软件开发人员或者项目经理