《项目管理-3-软件成本估算.ppt》由会员分享,可在线阅读,更多相关《项目管理-3-软件成本估算.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程软件开发成本估算软件开发成本估算o软件开发成本主要是指软件开发过程中所花费的工作量及相应的代价。它不包括原材料和能源的消耗,主要是人的劳动的消耗。o人的劳动消耗所需代价就是软件产品的开发成本。o软件产品开发成本的计算方法不同于其它物理产品成本的计算。o软件的开发成本是以一次性开发过程所花费的代价来计算的。o软件开发成本的估算,应是从软件计划、需求分析、设计、编码、单元测试、组装测试到确认测试,整个软件开发全过程所花费的代价作为依据的。软件开发成本估算方法o对于一个大型的软件项目,由于项目的复杂性,开发成本的估算不是一件简单的事,要进行一系列的估算处理。主要靠分解和类推。o基本估算方法分
2、为三类。n 自顶向下的估算方法n 自底向上的估计法n 差别估计法自顶向下的估算方法o这种方法的主要思想是从项目的整体出发,进行类推。o估算人员根据以前已完成项目所消耗的总成本(或总工作量),推算将要开发的软件的总成本(或总工作量),然后按比例将它分配到各开发任务单元中去,再来检验它是否能满足要求。o这种方法的优点是估算工作量小,速度快。这种方法的优点是估算工作量小,速度快。o缺点是对项目中的特殊困难估计不足,估缺点是对项目中的特殊困难估计不足,估算出来的成本盲目性大,有时会遗漏被开算出来的成本盲目性大,有时会遗漏被开发软件的某些部分。发软件的某些部分。自底向上的估计法o这种方法的主要思想是把待
3、开发的软件细这种方法的主要思想是把待开发的软件细分,直到每一个子任务都已经明确所需要分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到的开发工作量,然后把它们加起来,得到软件开发的总工作量。软件开发的总工作量。o它的优点是估算各个部分的准确性高。缺它的优点是估算各个部分的准确性高。缺点是缺少各项子任务之间相互联系所需要点是缺少各项子任务之间相互联系所需要的工作量,还缺少许多与软件开发有关的的工作量,还缺少许多与软件开发有关的系统级工作量系统级工作量.差别估计法o这种方法综合了上述两种方法的优点,其主要思想是把待开发的软件项目与过去已完成的软件项目进行类比,从其开发的各个子
4、任务中区分出类似的部分和不同的部分。o类似的部分按实际量进行计算,不同的部分则采用相应方法进行估算。o这种的方法的优点是可以提高估算的准确程度,缺点是不容易明确“类似”的界限。专家判定技术o由多位专家进行成本估算o单独一位专家可能会有种种偏见,譬如有乐观的、悲观的、要求在竞争中取胜的、让大家都高兴的种种愿望及政治因素等。o最好由多位专家进行估算,取得多个估算值。o有多种方法把这些估算值合成一个估算值。o一种方法是简单地求各估算值的中值或平均值。其优点是简便。缺点是可能会由于受一、二个极端估算值的影响而产生严重的偏差。o一种方法是召开小组会,使各位专家们统一于或至少同意某一个估算值。优点是可以摈
5、弃蒙昧无知的估算值,缺点是一些组员可能会受权威或政治因素的影响。Deiphi技术o标准Deiphi技术 组织者发给每位专家一份软件系统规格说明书和一张记录估算值的表格,请他们进行估算。专家详细研究软件规格说明书的内容,对该软件提出三个规模的估算值,即:ai(最小)mi(可能)bi(最大)无记名地填写表格 在填表的过程中,专家互相不进行讨论但可以向组织者提问。组织者对专家们填在表格中的答复进行整理:a.计算各位专家估算的期望值 Ei;b.对专家的估算结果分类摘要。专家对此估算值另做一次估算。在综合专家估算结果的基础上,组织专家再次无记名地填写表格。比较两次估算的结果。若差异很大,则要通过查询找出
6、差异的原因。上述过程可重复多次。最终可获得一个得到多数专家共识的软件规模(源代码行数)。在此过程中不得进行小组讨论。o最后,通过与历史资料进行类比,根据过去完成软件项目的规模和成本等信息,推算出该软件每行源代码所需要的成本。然后再乘以该软件源代码行数的估算值,就可得到该软件的成本估算值。软件开发成本估算的经验模型o软件开发成本估算是依据开发成本估算模型进行估算的。o开发成本估算模型通常采用经验公式来预测软件项目计划所需要的成本、工作量和进度数据。o用以支持大多数模型的经验数据都是从有限的一些项目样本中得到的。还没有一种估算模型能够适用于所有的软件类型和开发环境。IBM模型 E 5.2L0.91
7、 D 4.1L0.36 14.47E0.35 S 0.54E0.6 DOC 49L1.01oL 是源代码行数(KLOC),E 是工作量(PM),D 是项目持续时间(月),S 是人员需要量(人),DOC是文档数量(页)。oIBM模型是静态单变量模型。o在此模型中,一般指一条机器指令为一行源代码。o一个软件的源代码行数不包括程序注释、作业命令、调试程序在内。o对于非机器指令编写的源程序,例如汇编语言或高级语言程序,应转换成机器指令源代码行数来考虑。o定义:转换系数机器指令条数非机器语言执行步数。转换系数表Putnam模型oPutnam模型是一种动态多变量模型。适用于大型项目,但也可以应用在一些较小
8、的软件项目中。o它是假定在软件开发的整个生存期中工作量有特定的分布。o大型软件项目的开发工作量分布可以用Rayleigh-Norden曲线表示。o这个曲线把已交付的源代码行数与工作量和开发时间联系起来。o用Rayleigh-Norden曲线可以导出一个“软件方程”otd 是开发持续时间(年),K是软件开发与维护在内的整个生存期所花费的工作量(人年),L是源代码行数(LOC),Ck是技术状态常数,因开发环境而异。技术状态常数Ck的取值COCOMO模型(COnstructive COst MOdel)o结构型成本估算模型是一种精确、易于使用的成本估算方法。在该模型中使用的基本量有以下几个:oDSI
9、(源指令条数)定义为代码的源程序行数。若一行有两个语句,则算做一条指令。它包括作业控制语句和格式语句,但不包括注释语句。KDSI1000DSI。oMM(度量单位为人月)表示开发工作量。oTDEV(度量单位为月)表示开发进度。它由工作量决定。o软件开发项目的分类软件开发项目的总体类型:n 组织型n 嵌入型n 半独立型oCOCOMO模型的分类COCOMO模型按其详细程度分成三级:n 基本COCOMO模型n 中间COCOMO模型n 详细COCOMO模型o基本COCOMO模型是一个静态单变量模型,它用源代码行数(LOC)为自变量的(经验)函数来计算软件开发工作量。o中间COCOMO模型则在用LOC为自
10、变量的函数计算软件开发工作量(此时称为名义工作量)的基础上,再用涉及产品、硬件、人员、项目等方面属性的影响因素来调整工作量的估算。o详细COCOMO模型包括中间CO COMO模型的所有特性,但用上述各种影响因素调整工作量估算时,还要考虑对软件工程过程中每一步骤(分析、设计等)的影响。基本COCOMO模型o基本基本COCOMO模型的工作量和进度公式模型的工作量和进度公式中间COCOMO模型o进一步考虑进一步考虑15种影响软件工作量的种影响软件工作量的因素,通过定下乘法因子,修正因素,通过定下乘法因子,修正COCOMO工作量公式和进度公式,工作量公式和进度公式,可以更合理地估算软件(各阶段)可以更
11、合理地估算软件(各阶段)的工作量和进度。的工作量和进度。o中间中间COCOMO模型的名义工作量与模型的名义工作量与进度公式如下所示。进度公式如下所示。中间COCOMO模型的名义工作量与进度公式1515种影响软件工作量的因素种影响软件工作量的因素 fi fio产品因素:软件可靠性、数据库规模、产品复杂性o硬件因素:执行时间限制、存储限制、虚拟机易变性、环境周转时间o人的因素:分析员能力、应用领域实际经验、程序员能力、虚拟机使用经验、程序语言使用经验o项目因素:现代程序设计技术、软件工具的使用、开发进度限制o此时,工作量计算公式改成此时,工作量计算公式改成o例1.一个32KDSI的声音输入系统是一
12、个输入原型,或是一个可行性表演模型。所需可靠性非常低。把此模型看做半独立型软件。则有 MM 3.0(32)1.12 146又查表知 f10.75,其它 fi1.00,则最终有MM 1460.75 110.o例14.一个规模为10KDSI的商用微机远程通信的嵌入型软件,使用中间COCOMO模型进行成本估算。o程序名义工作量 MM 14.8(10)1.20 44.38(MM)o程序实际工作量 MM 44.38 44.381.17 51.5(MM)o开发所用时间 TDEV 14.5(51.5)0.32 8.9(月)o如果分析员与程序员的工资都按每月6,000美元计算,则该项目的开发人员的工资总额为
13、51.56,000 309,000(美元)o做为对比,现在用IBM模型计算:PM 5.2(10)0.91 414.27(人月)D 4.1(10)0.38 9.16(月)S 0.54(414.27)0.60 5.1(人)详细COCOMO模型o详细COCOMO模型的名义工作量公式和进度公式与中间COCOMO模型相同。o工作量因素分级表分层、分阶段给出。针对每一个影响因素,按模块层、子系统层、系统层,有三张工作量因素分级表,供不同层次的估算使用。每一张表中工作量因素又按开发各个不同阶段给出。o例如,关于软件可靠性(RELY)要求的工作量因素分级表(子系统层),如表所示。o使用这些表格,可以比中间COCO MO模型更方便、更准确地估算软件开发工作量。软件可靠性工作量因素分级表(子系统层)