软件开发成本估算的经验模.pptx
软件开发成本估算的经验模补充资料软件开发成本估算的经验模型软件开发成本估算是软件开发成本估算是依据开发依据开发成本估算模型进行估算成本估算模型进行估算的。的。开发成本估算模型通常开发成本估算模型通常采用经采用经验公式验公式来来预测软件项目计划所预测软件项目计划所需要的成本需要的成本、工作量和进度数工作量和进度数据据。用以支持大多数模型的经验数用以支持大多数模型的经验数据都是据都是从有限的一些项目样本从有限的一些项目样本中得到的。中得到的。IBM模型 E 5.2L0.91 D 4.1L0.36 14.47E0.35 S 0.54E0.6 DOC 49L1.01L 是是源代码行数源代码行数(KLOC),E 是是工作量工作量(PM),D 是是项目持续时项目持续时间间(月月),S 是是人员需要量人员需要量(人人),DOC是是文档数量文档数量(页页)。IBM模型是模型是静态单变量模型静态单变量模型。在此模型中,一般指在此模型中,一般指一条机器指一条机器指令为一行源代码令为一行源代码。一个软件的源代码行数一个软件的源代码行数不包括程不包括程序注释序注释、作业命令作业命令、调试程序在调试程序在内内。对于非机器指令编写的源程序,对于非机器指令编写的源程序,例如汇编语言或高级语言程序,例如汇编语言或高级语言程序,应应转换成机器指令源代码行数转换成机器指令源代码行数来来考虑。考虑。转换系数表定义定义:转换系数机器指令条数非机转换系数机器指令条数非机器语言执行步数。器语言执行步数。Putnam模型Putnam模型是一种模型是一种动态多变量动态多变量模型模型。适用于大型项目,但也。适用于大型项目,但也可以应用在一些较小的软件项可以应用在一些较小的软件项目中。目中。它是它是假定在软件开发的整个生假定在软件开发的整个生存期中工作量有特定的分布存期中工作量有特定的分布。大型软件项目的开发工作量分大型软件项目的开发工作量分布可以用布可以用Rayleigh-Norden曲线曲线表示。表示。用用Rayleigh-Norden曲线可以导曲线可以导出一个出一个“软件方程软件方程”td 是是开发持续时间开发持续时间(年年),K是是软件开发与维护在内的整个生软件开发与维护在内的整个生存期所花费的工作量存期所花费的工作量(人年人年),L是是源代码行数源代码行数(LOC),Ck是是技技术状态常数术状态常数,因开发环境而异因开发环境而异。技术状态常数Ck的取值COCOMO模型(COnstructive COst MOdel)结构型成本估算模型是一种结构型成本估算模型是一种精精确确、易于使用易于使用的成本估算方法。的成本估算方法。DSI(源指令条数源指令条数)定义为)定义为代码代码的的源程序行数源程序行数。若一行有两个。若一行有两个语句,则算做一条指令。它语句,则算做一条指令。它包包括作业控制语句括作业控制语句和和格式语句格式语句,但不包括注释语句。但不包括注释语句。KDSI1000DSI。MM(度量单位为(度量单位为人月人月)表示)表示开发工作量开发工作量。TDEV(度量单位为(度量单位为月月)表示)表示开发进度开发进度。它由工作量决定。它由工作量决定。软件开发项目的分类软件开发项目的分类软件开发项目的软件开发项目的总体类型总体类型:组织型组织型 嵌入型嵌入型 半独立型半独立型COCOMO模型的分类模型的分类COCOMO模型模型按其详细程度按其详细程度分分成三级:成三级:基本基本COCOMO模型模型 中间中间COCOMO模型模型 详细详细COCOMO模型模型基本基本COCOMO模型模型是是静态单变静态单变量模型量模型,用,用源代码行数源代码行数(LOC)为为自变量自变量的经验函数计算软件开发的经验函数计算软件开发工作量。工作量。中间中间COCOMO模型模型在用在用LOC为为自变量自变量的函数计算软件开发的函数计算软件开发工作量(称为名义工作量)的工作量(称为名义工作量)的基础上,基础上,用涉及产品用涉及产品、硬件硬件、人员人员、项目等方面的影响因素项目等方面的影响因素调整工作量估算调整工作量估算。详细详细COCOMO模型模型包括中间包括中间CO COMO模型的所有特性,模型的所有特性,但用上述各种影响因素调整工但用上述各种影响因素调整工作量估算时,还要考虑对软件作量估算时,还要考虑对软件工程过程中每一步骤(分析、工程过程中每一步骤(分析、设计等)的影响。设计等)的影响。基本COCOMO模型基本基本COCOMO模型的工作量模型的工作量和进度公式和进度公式中间COCOMO模型进一步考虑进一步考虑15种影响软件工作种影响软件工作量的因素量的因素,通过,通过定下乘法因子定下乘法因子,修正修正COCOMO工作量公式和进工作量公式和进度公式度公式,可以更合理地估算软,可以更合理地估算软件(各阶段)的工作量和进度。件(各阶段)的工作量和进度。中间中间COCOMO模型的名义工作模型的名义工作量与进度公式如下所示。量与进度公式如下所示。中间中间COCOMO模型的名义工作量模型的名义工作量与进度公式与进度公式15种影响软件工作量的因素 fi产品因素:产品因素:软件可靠性、数据软件可靠性、数据库规模、产品复杂性库规模、产品复杂性硬件因素:硬件因素:执行时间限制、存执行时间限制、存储限制、虚拟机易变性、环境储限制、虚拟机易变性、环境周转时间周转时间人的因素:人的因素:分析员能力、应用分析员能力、应用领域实际经验、程序员能力、领域实际经验、程序员能力、虚拟机使用经验、程序语言使虚拟机使用经验、程序语言使用经验用经验项目因素:项目因素:现代程序设计技术、现代程序设计技术、软件工具的使用、开发进度限软件工具的使用、开发进度限制制此时,工作量计算公式改成此时,工作量计算公式改成例例1.一个一个32KDSI的声音输入系的声音输入系统是一个输入原型,或是一个可统是一个输入原型,或是一个可行性表演模型。所需可靠性非常行性表演模型。所需可靠性非常低。把此模型看做半独立型软件。低。把此模型看做半独立型软件。则有则有 MM 3.0(32)1.12 146又查表知又查表知 f10.75,其它,其它 fi1.00,则最终有,则最终有MM 1460.75 110.例例14.一个规模为一个规模为10KDSI的商的商用微机远程通信的用微机远程通信的嵌入型软件嵌入型软件,使用中间使用中间COCOMO模型模型进行进行成本估算。成本估算。程序名义工作量程序名义工作量 MM 2.8(10)1.20 44.38(MM)程序实际工作量程序实际工作量 MM 44.38 44.381.17 51.5(MM)开发所用时间开发所用时间 TDEV 2.5(51.5)0.32 8.9(月月)如果分析员与程序员的工资都如果分析员与程序员的工资都按每月按每月6,000美元计算,则该项美元计算,则该项目的开发人员的工资总额为目的开发人员的工资总额为 51.56,000 309,000(美元美元)做为对比,现在用做为对比,现在用IBM模型模型计计算算:PM 5.2(10)0.91 42.27(人(人月)月)D 4.1(10)0.38 9.84(月)(月)S 0.54(42.27)0.60 5.1(人人)详细COCOMO模型详细详细COCOMO模型的名义工作模型的名义工作量公式和进度公式与中间量公式和进度公式与中间COCOMO模型相同模型相同。工作量因素分级表分层、分阶工作量因素分级表分层、分阶段给出。针对每一个影响因素,段给出。针对每一个影响因素,按按模块层模块层、子系统层子系统层、系统层系统层,有三张工作量因素分级表,供有三张工作量因素分级表,供不同层次的估算使用。不同层次的估算使用。每一张每一张表中工作量因素又按开发各个表中工作量因素又按开发各个不同阶段给出不同阶段给出。例如,关于软件可靠性(例如,关于软件可靠性(RELY)要求的工作量因素分级表(子要求的工作量因素分级表(子系统层),如表所示。系统层),如表所示。使用这些表格,可以比使用这些表格,可以比中间中间COCO MO模型模型更方便、更准更方便、更准确地估算软件开发工作量。确地估算软件开发工作量。软件可靠性工作量因素分级表(子系统层)进度安排软件开发项目的进度安排有两软件开发项目的进度安排有两种方式:种方式:(1)系统)系统最终交付日期已经最终交付日期已经确定确定,软件开发部门必须在规,软件开发部门必须在规定期限内完成;定期限内完成;(2)系统)系统最终交付日期只确最终交付日期只确定了大致的年限定了大致的年限,最後交付日,最後交付日期由软件开发部门确定。期由软件开发部门确定。进度安排落空,会导致市场机进度安排落空,会导致市场机会的丧失,使用户不满意,而会的丧失,使用户不满意,而且也会导致成本的增加。且也会导致成本的增加。因此,在考虑进度安排时,要因此,在考虑进度安排时,要把工作量与花费时间联系起来,把工作量与花费时间联系起来,合理分配工作量合理分配工作量,利用进度安利用进度安排的有效分析方法严密监控软排的有效分析方法严密监控软件开发的进展情况,使软件开件开发的进展情况,使软件开发进度不致拖延。发进度不致拖延。软件开发小组人数与软件生产率的关系当几个人共同承担软件开发项当几个人共同承担软件开发项目中的某一任务时,目中的某一任务时,人与人之人与人之间必须通过交流来解决各自承间必须通过交流来解决各自承担任务之间的接口问题担任务之间的接口问题,即所,即所谓谓通信问题通信问题。通信需花费时间。通信需花费时间和代价,会引起软件错误增加,和代价,会引起软件错误增加,降低软件生产率。降低软件生产率。若两个人之间需要通信,则称若两个人之间需要通信,则称在这两个人之间存在一条通信在这两个人之间存在一条通信路径。如果一个软件开发小组路径。如果一个软件开发小组有有 n 个人,每两人之间都需要个人,每两人之间都需要通信,则总的通信路径有通信,则总的通信路径有 n(n-1)/2(条条)。设一个人单独开发软件,生产设一个人单独开发软件,生产率是率是5000行人年行人年。若。若 4 个人个人组成一个小组共同开发这个软组成一个小组共同开发这个软件,则需要件,则需要 6条通信路径条通信路径。若。若在每条通信路径上耗费的工作在每条通信路径上耗费的工作量是量是 250 行人年行人年。则小组中。则小组中每个人的软件生产率降低为每个人的软件生产率降低为 500062504 =5000375 =4625 行人年。行人年。从上述分析可知,从上述分析可知,一个软件任一个软件任务由一个人单独开发,生产率务由一个人单独开发,生产率最高最高;而对于一个稍大型的软;而对于一个稍大型的软件项目,一个人单独开发,时件项目,一个人单独开发,时间太长。因此间太长。因此软件开发小组是软件开发小组是必要的必要的。但是,开发小组不宜太大,成但是,开发小组不宜太大,成员之间避免太多的通信路径。员之间避免太多的通信路径。在开发进程中,切忌中途加人,在开发进程中,切忌中途加人,避免太多的生产率损失。避免太多的生产率损失。任务的确定与并行性当参加同一软件工程项目的人当参加同一软件工程项目的人数不止一人的时候,开发工作数不止一人的时候,开发工作就会出现并行情形。就会出现并行情形。软件开发进程中设置许多里程软件开发进程中设置许多里程碑。里程碑为管理人员提供了碑。里程碑为管理人员提供了指示项目进度的可靠依据。指示项目进度的可靠依据。软件工程项目的并行性提出了软件工程项目的并行性提出了一系列的进度要求。一系列的进度要求。因为并行任务是同时发生的,因为并行任务是同时发生的,所以进度计划表必须决定任务所以进度计划表必须决定任务之间的从属关系,确定各个任之间的从属关系,确定各个任务的先后次序和衔接,确定各务的先后次序和衔接,确定各个任务完成的持续时间。个任务完成的持续时间。项目负责人应注意构成关键路项目负责人应注意构成关键路径的任务,即若要保证整个项径的任务,即若要保证整个项目能按进度要求完成,就必须目能按进度要求完成,就必须保证这些任务要按进度要求完保证这些任务要按进度要求完成。成。制定开发进度计划402040规则规则在整个软件开发过程中,编码工在整个软件开发过程中,编码工作量仅占作量仅占 20,编码前工作量,编码前工作量占占40,编码后工作量占,编码后工作量占 40。402040 规则只应用来做为规则只应用来做为 一个指南。实际的工作量分配比一个指南。实际的工作量分配比例必须按照各项目的特点来决定。例必须按照各项目的特点来决定。COCOMO模型模型开发进度开发进度TDEV与工作量与工作量MM的的关系:关系:TDEV a(MM)b 如果想要缩短开发时间,或想如果想要缩短开发时间,或想要保证开发进度,必须考虑影要保证开发进度,必须考虑影响工作量的那些因素。按可减响工作量的那些因素。按可减小工作量的因素取值。小工作量的因素取值。按此比例确定各个阶段工作量的按此比例确定各个阶段工作量的分配,从而进一步确定每一阶段所分配,从而进一步确定每一阶段所需的开发时间,然后在每个阶段,需的开发时间,然后在每个阶段,进行任务分解,对各个任务再进行进行任务分解,对各个任务再进行工作量和开发时间的分配。工作量和开发时间的分配。进度安排的方法可以把用于一般开发项目的进可以把用于一般开发项目的进度安排的技术和工具应用于软度安排的技术和工具应用于软件项目。件项目。为监控为监控软件项目的进度计划和软件项目的进度计划和工作的实际进展情况工作的实际进展情况,为表现,为表现各项任务之间进度的相互依赖各项任务之间进度的相互依赖关系关系,需要采用图示的方法。,需要采用图示的方法。在图示方法中,必须明确标明:在图示方法中,必须明确标明:各个任务的各个任务的计划开始时间计划开始时间,完完成时间成时间;各个任务各个任务完成标志完成标志(即(即文档编文档编写和写和评审);评审);各个任务与参与工作的人数,各个任务与参与工作的人数,各个各个任务与工作量之间的衔接情任务与工作量之间的衔接情况况;完成各个任务所需的物理资源完成各个任务所需的物理资源和数据资源。和数据资源。(1)甘特图(Gantt Chart)在甘特图中,每一任务完成的在甘特图中,每一任务完成的标准,不是以能否继续下一阶标准,不是以能否继续下一阶段任务为标准,而是段任务为标准,而是以必须交以必须交付应交付的文档与通过评审为付应交付的文档与通过评审为标准标准。因此在甘特图中,文档。因此在甘特图中,文档编制与评审是软件开发进度的编制与评审是软件开发进度的里程碑。里程碑。(2)PERT技术和CPM方法PERT技术叫做技术叫做计划评审技术计划评审技术,CPM方法叫做方法叫做关键路径法关键路径法,它,它们都是安排开发进度,制定软们都是安排开发进度,制定软件开发计划的最常用的方法。件开发计划的最常用的方法。它们都采用网络图来描述一个它们都采用网络图来描述一个项目的任务网络,也就是从一项目的任务网络,也就是从一个项目的开始到结束,把应当个项目的开始到结束,把应当完成的任务用图或表的形式表完成的任务用图或表的形式表示出来。示出来。三个模块开发的网络图三个模块开发的网络图通常用两张表来定义网络图。通常用两张表来定义网络图。一张表给出一张表给出与一特定软件项目与一特定软件项目有关的所有任务有关的所有任务(也称为任务(也称为任务分解结构分解结构WorkBreakdown Structure);另一张表给出另一张表给出应当按照什么样应当按照什么样的次序来完成这些任务的次序来完成这些任务(有时(有时称为限制表称为限制表RestrictionList)。)。PERT技术和技术和CPM方法都为项目方法都为项目计划人员提供了一些定量的工计划人员提供了一些定量的工具。具。确定关键路径确定关键路径,即决定项目开,即决定项目开发时间的任务链。在关键路径发时间的任务链。在关键路径上的各个任务都是时间余量为上的各个任务都是时间余量为零的关键任务,不能有任何时零的关键任务,不能有任何时间延误。间延误。应用统计模型应用统计模型,对每一个单独,对每一个单独的任务确定最可能的开发持续的任务确定最可能的开发持续时间的估算值。时间的估算值。计算边界时间计算边界时间,以便为具体的,以便为具体的任务定义时间窗口。任务定义时间窗口。