软件工程与项目管理SoftwareEngineeringandProjectManagementBeiHangCollegeofSoftwareOct.2010-Dec.2011康一梅kangyimei@buaa.edu.cn第六讲软件估算软件估算SoftwareEstimationInput:需求说明书系统设计对象设计变更请求Output:软件规模工作量进度TheSoftware-EstimationStoryEstimation-ProcessOverviewSizeEstimationEffortEstimationScheduleEstimationEstimateRefinementSoftwareEstimation软件估算定义估算的通常定义:对未来事实非零可能性的最乐观的预测。软件项目估算是指以准确的调查资料和项目信息(如人员和设备信息)为依据,从估算对象的历史,现状及其规律性出发,运用科学的方法,对估算对象的规模,所需工作量和成本进行的测定。SoftwareEstimation介绍有些估算做的很仔细,而有些却只是凭直觉的猜测。大多数项目超过估算进度25%到100%,但也有少数一些组织的进度估算准确到10%以内,能控制在5%之内的还没有听说(Jones,1994)。SoftwareEstimation介绍软件项目估算是项目计划的依据,但是大多数软件开发组织没有意识到软件估算的重要性。调查结果表明:35%的组织没有对软件开发的成本和时间作估算。50%的组织没有记录任何正在进行的项目的相关数据。57%的组织没有使用成本会计。80%的项目在成本或时间上超出预算。超出成本和时间的项目里仅有50%的是有意义的超出。进行了成本估算的组织里,62%的组织是基于感觉和经验,仅仅16%的组织使用了正式的估算方法,如成本估算模型。SoftwareEstimationCaseStudy案例Carl负责Gaga-safe公司库存控制系统1.0版本的开发(ICS),在参加项目监督委员会第一次会议的时候,他对期望的功能已经有了总体设想。Bill是监督委员会的领导,他问:“Carl,ICS1.0需要多长时间?”Carl回答:“大概要9个月,不过这只是粗略的估算。”“不行,”Bill说,“我真希望你说3或4个月,我们一定要在6个月内拿出系统,能完成吗?”“我不能肯定,”Carl坦白地说,“我还得仔细研究一下,不过我相信可以找到办法在6个月内完成。”“那么把6个月当成项目完成的目标,”Bill说,“无论如何我们都必须这样做。”委员会的其他人一致同意了这个决定。到第五周的时候,又增加了一些产品概要设计工作,这使Carl更确信项目的时间更接近9个月而非6个月,然而他还是认为运气好的话有可能在6个月内完成项目。他不想被看作惹麻烦的人,所以决定等等再说。——凭直觉的项目估算SoftwareEstimationCaseStudy案例(续)Carl的团队努力地工作着,进展稳定,但需求分析的时间比期望的要长。预定6个月要完成的项目已经过去4个月了。“2个月无论如何也做不完剩下的工作。”他只好告诉Bill,项目需要延长2个月,总共需要8个月时间。几个星期后Carl意识到设计进度也不像期望的那么快。“先做容易的部分,”他告诉项目组成员,“其余的部分遇到时再考虑。”Carl再次向监督委员会汇报:“8个月的项目已经过去7个月,详细设计基本完成,工作卓有成效,但是8个月内还是无法完成。”Carl通报了第2次进度拖延,并将完成时间定为10个月。Bill对拖延产生了抱怨,并要求Carl想办法仍将进度安排在8个月左右。第9个月,项目组完成了详细设计,但部分模块的编码还没有开始。Carl第3次要求要求延期——12个月。Bill?编码进行顺利,但一些地方需要重新设计和重新实现,而这些地方项目组没有把详细设计调整好,一些实现过程相互冲突。在第11个月的项目监督委员会上,Carl宣布了第4次项目延期——13个月。Bill?结果?……——凭直觉的项目估算SoftwareEstimationTheSoftware-EstimationStory软件估算与建筑预算一年的时间建这样一幢房子?没问题!太好了,那我们赶快开工吧!——软件与建筑SoftwareEstimationTheSoftware-EstimationStory软件估算——软件开发是一个改进的过程盖一幢房子要花多少钱呢?这取决于房子本身。一个新的计费系统要花多少钱呢?这也取决于计费系统本身!一些组织希望在需求定义投入前就把成本估算的误差控制在10%以内,尽管项目估算的精确程度越早达到越好,但理论上是不可能实现的。如果真能那么早实现,精确度可以控制在2%以内。软件开发是一个逐步细化的过程,在每个阶段,都可能做出影响最终项目成本与进度的决策。SoftwareEstimationTheSoftware-EstimationStory软件估算——可能细化的数量估算收敛图初始的产品定义批准的产品定义需求说明书产品设计说明书详细设计说明书产品完工项目成本(工作量和成本)项目进度1.0x1.0x4.0x2.0x1.5x1.25x0.8x0.67x0.5x0.25x1.6x1.25x1.15x1.1x0.9x0.85x0.8x0.6xSoftwareEstimationTheSoftware-EstimationStory软件估算——可能细化的数量基于项目阶段的估算误差系数工作量和规模进度阶段乐观悲观乐观悲观初始产品定义0.254.00.601.60批准的产品定义0.502.00.801.25需求说明书0.671.500.851.15产品设计说明书0.801.250.901.10详细设计说明书0.901.100.951.05SoftwareEstimationTheSoftware-EstimationStory软件估算——估算与控制功能资源功能资源项目的演变项目的演变产品规模产品规模功能趋于与可用的资源相匹配资源趋于与想得到的功能相匹配期望的功能与可用的资源大多数软件项目在开始时,期望的功能与可用的资源之间不匹配,但随着项目的进展,功能或资源(或两者)必定要互相匹配SoftwareEstimationTheSoftware-EstimationStory软件估算——合作表达你合作的意愿估算既不要过高也不要过低,应该正好与费用相符。估算的目标是寻找估算与实际情况的交汇点。精确与准确:航班时刻通常精确到分,但不准确。可能的最短软件开发进度是通过建立最可能的准确估算而不是最精确的估算达到的。如果想获得最快的开发速度,就要避免错误的精确。SoftwareEstimation软件估算步骤1.确定软件范围2.确定工作所需资源3.确定估算内容4.估算改进SoftwareEstimation确定软件范围确定软件估算范围,就是确定目标软件的数据和控制,功能,性能,约束,接口以及可靠性。软件估算步骤SoftwareEstimation确定工作所需资源功能资源功能资源项目的演变项目的演变产品规模产品规模功能趋于与可用的资源相匹配资源趋于与想得到的功能相匹配期望的功能与可用的资源大多数软件项目在开始时,期望的功能与可用的资源之间不匹配,但随着项目的进展,功能或资源(或两者)必定要互相匹配软件估算步骤SoftwareEstimation确定工作所需资源可重用软件资源可分为以下几种:可直接复用的构件具有完全经验的构件具有部分经验的构件能够从第三方厂商获得或已经在以前的项目中使用过的软件,这些构件已经经过验证及确认,且可以直接用在当前的项目中。、以前在类似项目中建立的规约,设计,代码或测试数据,在本项目中需做修改。、以前在类似项目中建立的规约,设计,代码或测试数据,在本项目中需做实质上的修改。软件估算步骤SoftwareEstimation确定估算内容规模估算工作量估算进度估算成本估算缺陷数估算软件估算步骤SoftwareEstimation规模估算软件规模指的是非常普通意义上的软件总的范围。它包括功能集的深度和广度以及软件的难度和复杂性。规模估算方法有以下几种:用估算算法,如功能点方法,特征点,对象点,模糊逻辑,标准构件法,Delphi方法,PERT方法等。用规模估算软件。如果参与过类似的项目,并知道它的规模,那么按百分比形式估算新系统每个主要部分与旧系统相似部分的规模。每部分的规模加起来是总规模。软件估算步骤SoftwareEstimation工作量估算对软件所需的工作时间的估算,通常以人时,人天,人月,人年等单位来衡量。工作量估算可以采用以下方法进行:使用估算软件直接从规模估算得出使用组织中的历史数据确定具有已估算规模的先前的项目花了多少工作量。使用COCOMO模型或其他模型将代码行估算转换成工作量估算。采用Delphi方法,PERT方法等直接进行工作量估算。软件估算步骤SoftwareEstimation进度估算进度估算是针对以阶段为单位的估算,进度以不同阶段的里程碑作为标志,而不是对每一个细小任务都加以估算,对任务的适当分解很重要,分解的越细反而会不准确。进度估算可以采用以下方法进行:采用经验法,或Delphi方法,PERT方法等直接进行工作量估算。使用组织中的历史数据。使用COCOMO算法或其他算法的进度估算步骤,提供一种更好的估算。基于承诺的进度表。即将任务分解后,由承担任务的项目组成员给出进度承诺,这种方法许多时候非常有效。软件估算步骤SoftwareEstimation进度估算方法经验估算方法月进度=3.0*人月(1/3)例:65人月的工作量,进度=3.0*65(1/3)1.12个月2.5-6人(65/12)3.0,4.0,2.5SoftwareEstimation由功能点计算进度的幂次软件类型最优级平均最差级系统软件0.430.450.48商业软件0.410.430.46封装商品软件0.390.420.45这个准则不能取代更仔细的进度估算,但它提供了一个获得粗略进度估算的最简单方法。Jones的一阶估算准则SoftwareEstimation进度估算方法成本估算包括人力,设备,有形的,无形的支出成本估算,其中以人力与软硬件设备成本为主要部分。容易被忽视的是学习成本,培训成本,风险成本,维护成本等。人力成本主要基于工作量,进度估算。软件估算步骤SoftwareEstimation缺陷数估算包括需求,设计,代码中的缺陷,缺陷数影响项目的工作量,进度估算。通常以千行代码缺陷数等表示。缺陷数估算往往需要使用组织中的历史数据。软件估算步骤SoftwareEstimation软件估算方法功能点估算(1984IBM方法)1.输入2.输出3.查询4.内部逻辑文件5.外部接口文件项目早期,需求说明书面向数据库SoftwareEstimation功能点估算(1984IBM方法)功能点程序功能一般复杂中等复杂很复杂输入数量X3X4X6输出数量X4X5X7查询X3X4X6内部逻辑文件X7X10X15外部接口文件X5X7X10按上表计算未调整的功能点总数然后根据14个对程序有影响的因素计算“影响系数”,这些因素包括数据通信、联机数据条目、处理复杂性和安装容易度等。影响系数在0.65到1.35之间。SoftwareEstimation软件估算方法功能点估算(1984IBM方法)功能点程序功能一般复杂中等复杂很复杂输入数量6X3=182X4=83X6=18输出数量7X4=287X5=350X7=0查询0X3=02X4=84X6=24内部逻辑文件5X7=352X10=203X15=45外部接口文件9X5=450X7=02X10=20未调整功能点总数304影响系数1.15调整后功能点总数350计算功能点数的例子SoftwareEstimation软件估算方法Delphi’sWideband方法•当许多专家基于相同假定独立地作出了相同估计,该估计多半是正确的•必须确保专家针对相同的正