SoftwareProjectManagement2009估算项目时间和成本刘强清华大学软件学院2案例:WinWord1.0提交报告预期交付预期到交付所需时间(天)实际到交付所用时间(天)估算偏差率84.985.9365188781%86.186.11304140078%86.687.6334124573%87.187.12334103568%87.688.224588472%88.188.615267077%88.688.1012251876%88.889.115345767%88.1089.212339669%89.189.512030461%89.689.99215340%89.789.109212325%89.889.1192920%85.686.7395161476%89.1189.11000%3案例:WinWord1.0项目初期制定的目标是不可实现的BillGates给项目组下达的指示是用昀快的速度开发迄今为止昀好的字处理软件,争取在12个月内完成。过紧的进度计划降低了计划的精确度在多次调整中,只有一次的预期周期多于1年,而事实有10次的开发周期超出1年。前4年中,预期进度估算误差率达到了60%至80%开发过程中频繁换人五年中更换了4个组长(2个因进度压力、1个因健康离职)迫于进度压力,开发人员匆匆写出一些低质量和不完整的代码,然后宣称已实现某些功能,造成用于提高稳定性的时间由预计的3个月增加到26个月。4内容提纲项目估算项目估算的概念影响估算质量的因素项目估算方法宏观估算方法微观估算方法项目成本预算项目成本时间分段的预算应急基金(应急储备金)项目估算的建议5项目估算项目估算是对完成项目交付物的时间和成本进行预算和估计的过程。估算既是科学也是艺术软件估算不可能是一门精确的科学项目估算方法:以往的经验是项目估算的根本出发点。自上而下(宏观)估算•源自类比或数学方法,通常是一种大致推测•一般发生在项目的概念阶段自下而上(微观)估算•通常是基于对工作分解结构中工作单元的估算•在项目详细定义后进行6影响估算质量的因素项目周期近期事件的估算比较准确,远期事件的估算具有不确定性人员因素曾经共事与否影响团队成员的磨合时间人员调换将增加交流所需的时间项目结构矩阵结构中人员在不同项目中分享,降低成本但增加时间组织文化一些组织允许填充估算;一些组织强调准确;一些组织不重视其他因素设备运行瘫痪、假期、法律限制等7内容提纲项目估算项目估算的概念影响估算质量的因素项目估算方法宏观估算方法微观估算方法项目成本预算项目成本时间分段的预算应急基金(应急储备金)项目估算的建议8项目估算方法项目估算过程首先做出粗略的宏观估算,建立WBS和OBS做出微观估计,建立进度计划和成本预算协调宏观预算与微观预算之间的差别条件宏观估算微观估算制定战略决策×时间与成本很重要×不确定性高×内部小项目×固定价格的合同×客户需要细节×范围不稳定×9宏观估算方法比例法使用比例或其他替代品,对项目时间和成本进行估算举例:网络布线工程•同一幢大楼每个节点的成本是500元•100个节点的成本是5万元分配法一种比例法的扩展当所估算项目与过去的项目在特性和成本上很类似时,经常使用此方法采用类似方法,对WBS中的交付物进行成本分配10宏观估算方法11宏观估算方法学习曲线当产品扩大产量时,单位劳动时间将以恒定的速度降低010203040506070809010011012013014090080070060050040030020010075%学习曲线12宏观估算方法举例:假设第一次编写某一段程序需要20个小时,第二次编写同一段程序需要18个小时,前后两次的时间差别说明学习率是0.90,那么应用这个数据估算下一个任务的时间是18×0.90=16.2小时。学习曲线的估算公式Yx=aXb其中Yx是生产第x单位产品所需的时间;a是生产第一单位产品所需的时间;X是被生产的产品数量;b是学习曲线的斜率,表示为log(十进制学习率)/log213宏观估算方法举例:假设程序员的编程学习率是0.90,编写某一段程序经过4次达到稳定,昀终稳定时间是40小时。那么,第一次编码的时间估算如下:b=log0.9/log2=-0.152140=a×4-0.1521a=49.39小时4次编程任务的总时间:49.39(1+2-0.1521+3-0.1521)+40=175.62小时如果使用4×40=160估算,显然有15.62小时的偏差。14宏观估算方法学习曲线的思想当一个人重复多次做一件事情之后,在下一次做这件事情时,他必然能够把它做得更好。•当一项任务被重复时,完成它所需的时间将缩短;•随着更多的产品生产出来,提高量将减少;•提高率有充分的连续性,可以用于预测。学习曲线的局限性学习曲线不会永远延续一种产品的学习曲线不能应用到另一个产品建立有意义的学习曲线,可能没有现成的成本数据可用学习曲线适用于长期项目,短期项目可能不起作用15宏观估算方法软件项目估算方法功能点方法:估算软件规模COCOMO模型:估算软件开发成本软件项目估算的步骤估算软件规模:一般通过计算LOC(源代码行数)或功能点(FP)等方法完成估算软件项目所需的工作量(以人月或人小时为单位)估算项目的进度(以自然月为单位)估算项目成本16宏观估算方法功能点方法功能点技术是依据软件信息域的基本特征和对软件复杂性的估计,估算出软件规模。这种方法适合于在软件开发初期进行估算,并以功能点为单位度量软件规模。计算公式:FP=UFC×[0.65+0.01×∑Fi]未调整的功能点计数17宏观估算方法功能点方法(续)复杂度调整值Fi:取值0..5(0:没有影响,1:偶然,2:适中,3:普通,4:重要,5:极重要)F1可靠的备份和恢复F8在线升级F2数据通信F9复杂的界面F3分布式处理F10复杂的数据处理F4性能F11代码复用性F5大量使用的配置F12安装简易性F6联机数据输入F13多重站点F7操作简单性F14易于修改18宏观估算方法COCOMO模型结构性成本模型COCOMO(COnstructiveCOstMOdel)是一种利用经验模型进行成本估算的方法基本COCOMO模型这是一个静态单变量模型,用一个以源代码行数为自变量的经验函数来计算软件开发工作量。计算公式:E=aLbD=cEd类型abcd说明组织型2.41.052.50.38各类应用软件半独立型3.01.122.50.35各类实用程序、编译程序等嵌入型3.61.22.50.32实时处理程序、控制程序、操作系统等19宏观估算方法中间COCOMO模型中间COCOMO模型以基本COCOMO模型为基础,通过对影响工作量的若干因素进行估计,确定出调节因子,再对工作量估算公式进行修正。计算公式E=aLbFF=Fi17∏i=1类型ab说明组织型3.21.05各类应用软件半独立型3.01.12各类实用程序、编译程序等嵌入型2.81.2实时处理程序、控制程序、操作系统等20宏观估算方法工作量因素Fi非常低低正常高非常高超高软件可靠性0.750.881.001.151.39数据库规模0.941.001.091.19产品复杂性0.750.881.001.151.301.66可重用性0.911.001.141.291.49要求文档量0.890.951.001.061.13执行时间限制1.001.111.311.67存储限制1.001.061.211.57平台变动0.871.001.151.30分析员能力1.501.221.000.830.67程序员能力1.371.161.000.870.74应用领域经验1.221.101.000.890.81平台经验1.241.101.000.920.84语言和工具经验1.251.121.000.880.81人员连续性1.241.101.000.920.84软件工具的使用1.241.121.000.860.72多地点开发1.251.101.000.920.840.78开发进度限制1.291.101.001.001.00项目因素人的因素计算机因素产品因素21举例:软件项目估算某公司大约有3000名员工,准备开发一个简单的工资系统系统生成员工的工资单,列出工资的所有收入项和纳税扣除额,并在屏幕上显示工资单,工资单的功能复杂度是“复杂”;另外,系统产生7个报表,每个报表的复杂度是“简单”。系统要求用户从屏幕上输入员工的基本信息(包括员工编号、基本工资、所在等级、所属部门等)和每月的考勤情况,这两个屏幕输入的复杂度为“复杂”;另外,还有一个所得税信息的输入,其复杂度为“中等”。系统提供20个查询,每个查询的复杂度是“简单”。系统内部维护一个员工信息文件,该文件的复杂度是“复杂”。系统引用了3个数据表,包括员工基本信息、部门信息和所在等级,其中员工基本信息的复杂度是“中等”,其他两个的复杂度是“简单”。22举例:软件项目估算外部输入员工定期信息和考勤情况(复杂度均为“高”)所得税信息(复杂度为“中等”)外部输出工资单(复杂度为“高”)和7个报表(复杂度为“低”)外部查询总共20个(复杂度均为“低”)内部逻辑文件系统内维护EmployeeMasterFile(复杂度为“高”)外部接口文件3个表:员工信息(复杂度“平均”)、部门和级别(“低”)23举例:软件项目估算计算未调整功能点24举例:软件项目估算计算调整因子调整后的功能点FP=150×[0.65+0.01×∑Fi]=13825举例:软件项目估算部分开发语言的功能点转换假设用VB开发,则源程序行数SLOC=24×138=3312开发语言LOC/FP开发语言LOC/FP汇编语言320C128COBOL106C++64FORTRAN77106VB624PASCAL90PB16Ada53Delphi518LISP64JAVA4826举例:软件项目估算采用中间COCOMO估算开发成本名义工作量E=3.0×3.3121.12=11.47实际工作量E=11.47×=11.47(为简化计算Fi均取1)开发时间D=2.5×MM0.35=5.9假设每个开发人员平均每月的人工成本为6000元,那么总人工成本=11.47×0.6=6.88(万元)问题:如何考虑开发人员的数量?17∏Fii=127微观估算方法模板法如果项目类似过去的项目,则以过去项目的成本作为新项目的一个出发点WBS工作包的详细估算使用WBS,并向相关责任人询问在时间不确定时,用PERT方法给出高、中、低的均衡估算数分段估算从宏观估算开始,在项目执行中对各阶段的估算进行细化适用于昀终产品不可知或不确定性很大的项目28微观估算方法分段估算(续)29内容提纲项目估算项目估算的概念影响估算质量的因素项目估算方法宏观估算方法微观估算方法项目成本预算项目成本时间分段的预算应急基金(应急储备金)项目估算的建议30案例:项目成本案例描述假设你是一个项目经理,负责为某小型企业实施ERP系统。该项目需要采购相应的系统硬件和软件。整个项目持续3个月时间,项目团队由1个项目经理、1个系统分析员、2个开发实施人员、1个QA人员组成。问题下面估算正确吗?为什么?项目成本=硬件成本+软件成本+人员工资如果你是项目经理,你认为项目成本应该包括哪些部分?31项目成本直接成本人工成本•全时为项目工作人员的成本•只有部分时间为项目工作人员的成本•人工成本=工时数×工时工资材料成本•包括直接用于制造和交付项目产品所消费的材料成本。•在系统集成项目中,材料主要是给用户的系统硬件和软件。•问题:软件项目的材料是什么?设备成本•用于交付项目产品但并没有消耗掉的物资,它们可以在接下来的项目中再次使用,这些设备可以是买来的或租来的。32项目成本直接成本