1、第七章第七章 软件项目管理软件项目管理o软件项目管理的概念、原则和技术软件项目管理的概念、原则和技术o项目管理计划、组织、监管和控制项目管理计划、组织、监管和控制o软件开发过程的度量和定量分析软件开发过程的度量和定量分析2022-10-101 软件项目管理软件项目管理目的目的 为了使软件项目能够在预定成本、进度、质为了使软件项目能够在预定成本、进度、质量的前提下顺利完成,必须对软件工程项目进量的前提下顺利完成,必须对软件工程项目进行计划、组织、监控和管理行计划、组织、监控和管理 第七章第七章 软件项目管理软件项目管理2022-10-102 软件项目管理软件项目管理 任务任务o制定软件项目的实施
2、计划和方案;制定软件项目的实施计划和方案;o对人员进行组织和分工;对人员进行组织和分工;o按照计划进度,以及成本管理、风险管理、按照计划进度,以及成本管理、风险管理、质量管理的要求进行软件开发,完成软件项质量管理的要求进行软件开发,完成软件项目的各项要求和任务。目的各项要求和任务。第七章第七章 软件项目管理软件项目管理2022-10-103软件项目管理软件项目管理内容内容o软件度量软件度量o软件项目估算软件项目估算o软件质量度量软件质量度量o软件复杂性度量软件复杂性度量o软件可靠性度量软件可靠性度量o软件开发过程的管理软件开发过程的管理o软件项目管理中的软件项目管理中的CASECASE工具工具
3、第七章第七章 软件项目管理软件项目管理2022-10-1047.1 软件度量软件度量第七章第七章 软件项目管理软件项目管理2022-10-1057.1.1 度量、测量和估算度量、测量和估算(1/3)度量度量 metricso度量具有数字特征,软件工程范围的度量是软度量具有数字特征,软件工程范围的度量是软件开发过程、软件资源或软件产品简单属性的件开发过程、软件资源或软件产品简单属性的定量描述。定量描述。如,程序规模、操作符个数、程序中错误的个数等。如,程序规模、操作符个数、程序中错误的个数等。2022-10-106 度量、测量和估算度量、测量和估算 (2/3)测量测量 measureo对软件开发
4、过程、产品和资源进行实时和事后的定对软件开发过程、产品和资源进行实时和事后的定量描述,涉及测量的要素、方法、过程、工具和数量描述,涉及测量的要素、方法、过程、工具和数值结果。值结果。o直接测量和间接测量直接测量和间接测量 直接测量用于不依赖于其它属性的简单属性;直接测量用于不依赖于其它属性的简单属性;间接测量用于依赖于若干其它属性的要素、准则和间接测量用于依赖于若干其它属性的要素、准则和属性。属性。2022-10-107 度量、测量和估算度量、测量和估算(3/3)估算估算 estimationo对软件产品、过程、资源进行预测对软件产品、过程、资源进行预测o估算可以采用经验公式、或参考历史资料估
5、算可以采用经验公式、或参考历史资料o估算用于事前签订合同、立项、制定工作计划等估算用于事前签订合同、立项、制定工作计划等2022-10-108 度量、测量和估算度量、测量和估算 软件的外部属性和内部属性软件的外部属性和内部属性o外部属性外部属性 软件产品、过程、资源与环境的关系软件产品、过程、资源与环境的关系如,成本、效益、劳动生产率、可靠性、可维护性如,成本、效益、劳动生产率、可靠性、可维护性o内部属性内部属性 软件产品、过程、资源、环境自身的属性软件产品、过程、资源、环境自身的属性如,产品结构、模块化程度、复杂性、程序长度等。如,产品结构、模块化程度、复杂性、程序长度等。2022-10-1
6、09 度量、测量和估算度量、测量和估算o用户和管理者关心外部属性,但在开发过程中无用户和管理者关心外部属性,但在开发过程中无法直接管理和控制。法直接管理和控制。o由于外部属性是由内部属性决定的,因此必须建由于外部属性是由内部属性决定的,因此必须建立外部属性与内部属性的关系,并通过内部属性立外部属性与内部属性的关系,并通过内部属性的度量去度量外部属性。的度量去度量外部属性。2022-10-1010 度量、测量和估算度量、测量和估算o产品的内部属性产品的内部属性程序代码长度程序代码长度 程序功能程序功能 模块化模块化 重用性重用性控制流控制流 数据流数据流 模块耦合度与内聚度模块耦合度与内聚度 o
7、产品的外部属性产品的外部属性程序的可靠性程序的可靠性 可用性可用性 可维护性可维护性软件的可理解性软件的可理解性 有效性有效性 可移植性可移植性 2022-10-1011 度量、测量和估算度量、测量和估算o过程的内部属性过程的内部属性 工作量工作量 计划和进度计划和进度 一段时间内某类事件发生的一段时间内某类事件发生的次数次数o过程的外部属性过程的外部属性 成本成本 可控制性可控制性 可观察性可观察性 稳定性稳定性2022-10-1012 度量、测量和估算度量、测量和估算o资源的内部属性资源的内部属性 人人 软硬件环境软硬件环境 方法方法 经验经验o资源的外部属性资源的外部属性 成本成本 时间
8、时间2022-10-10137.1.2 规模度量规模度量o代码行数代码行数 LOC或或KLOCo生产率生产率 Pl=L/E 其中其中 L 软件项目代码行数软件项目代码行数 E 软件项目工作量(人月软件项目工作量(人月 PM)Pl 软件项目生产率(软件项目生产率(LOC/PM)2022-10-1014 规模度量规模度量o代码出错率代码出错率 EQRl=Ne/L 其中其中 Ne 软件项目的代码错误数软件项目的代码错误数 EQRl 每千行代码的错误数每千行代码的错误数2022-10-1015 规模度量规模度量o每行代码平均成本每行代码平均成本 Cl=S/L 其中其中 S 软件项目总开销(元美元)软件
9、项目总开销(元美元)Cl软件项目每行代码的平均成本软件项目每行代码的平均成本o文档与代码比文档与代码比 Dl=Pd/L 其中其中 Pd 软件项目文档页数软件项目文档页数 Dl 每千行代码的平均文档数每千行代码的平均文档数2022-10-1016例例 软件项目记录软件项目记录项目项目工作量工作量 PM成本成本万美元万美元代码行代码行kLOC文档页数文档页数 Pd错误数错误数 Ne人数人数 MAaa-012416.817.1365293Ccc-046244.027.21224865Fff-034331.420.210506462022-10-1017生产率:生产率:Pl=L/E=17.1kLoc/
10、24PM=504Loc/PM出错率:出错率:EQRl=Ne/L=29个个/12.1kLoc=2.4个个/kLoc平均成本:平均成本:Cl=S/L=168 000美元美元/12.1kLoc=13.88美元美元/Loc每千行代码的平均文档页数:每千行代码的平均文档页数:Dl=Pd/L=365Pd/12.1kLoc=30.16Pd/kLoc2022-10-1018 规模度量规模度量用软件代码行数估算软件规模简单易行。用软件代码行数估算软件规模简单易行。缺点缺点o代码行数的估算依赖于程序设计语言的功能和表达代码行数的估算依赖于程序设计语言的功能和表达能力;能力;o采用代码行估算方法会对设计精巧的软件项
11、目产生采用代码行估算方法会对设计精巧的软件项目产生不利的影响;不利的影响;o在软件项目开发前或开发初期估算它的代码行数十在软件项目开发前或开发初期估算它的代码行数十分困难;分困难;o代码行估算代码行估算只适用于过程式程序设计语言只适用于过程式程序设计语言,对非过,对非过程式的程序设计语言不太适用等等。程式的程序设计语言不太适用等等。2022-10-1019 根据事务信息处理程序的基本功能定义的,在系统根据事务信息处理程序的基本功能定义的,在系统设计初期可以估算出软件项目的规模设计初期可以估算出软件项目的规模 FP=CT*0.65+0.01*Fi (2-5)其中:其中:CT按表按表2.3计算计算
12、 Fi 是复杂性调节值是复杂性调节值 Fi 取值取值 0,1,.,5 当当 Fi=0 时,表示时,表示 Fi 不起作用不起作用 Fi=5 时,表示时,表示 Fi 作用最大作用最大7.1.3 面向功能的度量面向功能的度量2022-10-1020 表表7.3 功能点度量功能点度量测量参数测量参数 值值 权值权值用户输入数用户输入数 *4 用户输出数用户输出数 *5 用户查询数用户查询数 *4 文件数文件数 *7 外部界面数外部界面数 *7 CT 2022-10-1021 面向功能的度量面向功能的度量 表表7.3中的五个信息量按下列方式取值中的五个信息量按下列方式取值用户输入数用户输入数 用户为软件
13、提供的输入参数个数用户为软件提供的输入参数个数用户输出数用户输出数 软件系统为用户提供的输出参数个数软件系统为用户提供的输出参数个数用户查询数用户查询数 一个联机输入确定一次查询,软件以一个联机输入确定一次查询,软件以 联机输出的形式联机输出的形式,实时地产生一个响应实时地产生一个响应文件数文件数 统计逻辑的主文件个数统计逻辑的主文件个数外部界面数外部界面数 统计所有机器可读的界面,利用这些统计所有机器可读的界面,利用这些 界面可以将信息从一个系统传送到另一个界面可以将信息从一个系统传送到另一个 系统系统 2022-10-1022 面向功能的度量面向功能的度量用功能点定义相应的概念用功能点定义
14、相应的概念生产率生产率 Pf=FP/E (2-6)其中其中 Pf表示每人月完成的功能点数表示每人月完成的功能点数平均成本平均成本CiCi=S/FP =S/FP (2-7)其中其中 CiCi表示每功能点的平均成本表示每功能点的平均成本2022-10-1023 面向功能的度量面向功能的度量文档与功能点比文档与功能点比DiDi=Pd/FP (2-8)=Pd/FP (2-8)其中其中 DiDi表示每个功能点平均具有的文档页数表示每个功能点平均具有的文档页数代码出错率代码出错率EORiEORi=NeNe/FP (2-9)/FP (2-9)其中其中 EORiEORi表示每个功能点的平均错误个数表示每个功能
15、点的平均错误个数2022-10-1024 面向功能的度量面向功能的度量o软件规模的功能点度量没有直接涉及软件系统本身软件规模的功能点度量没有直接涉及软件系统本身的算法复杂性。的算法复杂性。o1986年年Jones把软件项目中的算法复杂性因素引入把软件项目中的算法复杂性因素引入到功能点计算中来,为了避免混淆,我们把到功能点计算中来,为了避免混淆,我们把Albrecht定义的功能点称为定义的功能点称为简单功能点简单功能点,用,用FPs表表示,把示,把Jones推广的功能点称为推广的功能点称为功能点功能点,用,用FP表示。表示。o推广的功能点包括计算机程序中用于各类问题求解推广的功能点包括计算机程序
16、中用于各类问题求解的算法因素,如求解线性代数方程组、遍历二叉树的算法因素,如求解线性代数方程组、遍历二叉树的各个结点、处理中断等等。的各个结点、处理中断等等。o功能点计算仍用公式功能点计算仍用公式(25),其中其中CT按表按表2.5计算。计算。2022-10-1025 表表7.5 推广的推广的功能点度量功能点度量 测量参数测量参数 值值 权值权值用户输入数用户输入数 *4 用户输出数用户输出数 *5 用户查询数用户查询数 *4 文件数文件数 *7 外部界面数外部界面数 *7 算法算法 *3 CT 2022-10-1026 面向功能的度量面向功能的度量o对一般的工程计算或事务处理软件,用表对一般
17、的工程计算或事务处理软件,用表2.3和和表表2.5两种方法计算出来的两种方法计算出来的FP值应该基本上相同值应该基本上相同o对于比较复杂的软件系统对于比较复杂的软件系统 FP比比FPs的值高的值高20%35%2022-10-1027 面向功能的度量面向功能的度量优点优点与程序设计语言无关,与程序设计语言无关,它不仅适用于过程式语它不仅适用于过程式语言,也适用于非过程式的语言言,也适用于非过程式的语言;软件项目开发初期就能基本上确定系统的输入、软件项目开发初期就能基本上确定系统的输入、输出等参数,功能点度量能用于软件项目的输出等参数,功能点度量能用于软件项目的开发初期。开发初期。2022-10-
18、1028面向功能的度量面向功能的度量缺点缺点它涉及到的主观因素比较多,如各种权函数的取值;它涉及到的主观因素比较多,如各种权函数的取值;信息领域中的某些数据有时不容易采集;信息领域中的某些数据有时不容易采集;FP的值没有直观的物理意义。的值没有直观的物理意义。2022-10-10292.1.4 代码行度量与功能点度量的比较代码行度量与功能点度量的比较o代码行度量依赖于程序设计语言,而功能点度代码行度量依赖于程序设计语言,而功能点度量不依赖于程序设计语言。量不依赖于程序设计语言。oAlbrecht和和Jones等人对若干软件采用事后处理等人对若干软件采用事后处理的方式分别统计出不同程序设计语言每
19、个功能的方式分别统计出不同程序设计语言每个功能点与代码行数的关系,用点与代码行数的关系,用LOC/FP的平均值表示。的平均值表示。o表表7.6表明,表明,一行一行Ada语言代码的语言代码的“功能功能”平均平均是一行是一行FORTRAN语言代码语言代码“功能功能”的的1.4倍。倍。一行四代语言代码的一行四代语言代码的“功能功能”平均是一行传统平均是一行传统程序设计语言代码程序设计语言代码“功能功能”的的3至至5倍。倍。2022-10-1030 表表7.6 各种语言的各种语言的LOC/FP(平均值平均值)程序设计语言程序设计语言 LOC/FP(平均值平均值)汇编语言汇编语言 300COBOL 10
20、0FORTRAN 100Pascal 90Ada 70面向对象的语言面向对象的语言 30四代语言四代语言(4GL)20代码生成器代码生成器 15 2022-10-10317.2 软件项目估算软件项目估算o当前在基于计算机的系统中,软件开发成本占总当前在基于计算机的系统中,软件开发成本占总成本的比例很大。成本的比例很大。o在软件项目立项和软件项目管理工作中,客户和在软件项目立项和软件项目管理工作中,客户和项目管理人员都十分重视软件项目的成本估算。项目管理人员都十分重视软件项目的成本估算。o软件是逻辑产品,成本估算涉及人、技术、环境、软件是逻辑产品,成本估算涉及人、技术、环境、政策等多种因素,在项
21、目完成之前,很难精确地政策等多种因素,在项目完成之前,很难精确地估算出项目的开销。估算出项目的开销。2022-10-1032软件项目估算软件项目估算常用的估算方法常用的估算方法参照已经完成的类似项目估算待开发项目的成本和参照已经完成的类似项目估算待开发项目的成本和工作量。工作量。将大的项目分解成若干子项目,在估算出每个子项将大的项目分解成若干子项目,在估算出每个子项目成本和工作量之后,再估算整个项目。目成本和工作量之后,再估算整个项目。将软件项目按软件生存周期分解,分别估算出软件将软件项目按软件生存周期分解,分别估算出软件项目在软件开发各个阶段的工作量和成本,然后再项目在软件开发各个阶段的工作
22、量和成本,然后再把这些工作量和成本汇总估算整个项目。把这些工作量和成本汇总估算整个项目。根据实验或历史数据给出软件项目工作量或成本的根据实验或历史数据给出软件项目工作量或成本的经验估算公式。经验估算公式。7.2软件项目估算软件项目估算2022-10-1033软件项目估算软件项目估算o四种方法可以同时、单独或组合使用,以便取长四种方法可以同时、单独或组合使用,以便取长补短,提高项目估算的精度和可靠性。补短,提高项目估算的精度和可靠性。o采用分解技术估算软件项目应考虑系统集成时需采用分解技术估算软件项目应考虑系统集成时需要的工作量。要的工作量。o为了实现软件项目估算,实践中开发了大量的软为了实现软
23、件项目估算,实践中开发了大量的软件项目自动估算工具,用以支持软件工作量或成件项目自动估算工具,用以支持软件工作量或成本估算。本估算。7.2软件项目估算软件项目估算2022-10-10347.2.17.2.1代码行、功能点和工作量估算代码行、功能点和工作量估算o软件项目的规模是影响软件项目成本和工作量的重软件项目的规模是影响软件项目成本和工作量的重要因素。要因素。o软件项目软件项目代码行和功能点估算是成本和工作量估算代码行和功能点估算是成本和工作量估算的基础。的基础。o采用上述四种估算方法可以估算出采用上述四种估算方法可以估算出LOCLOC或或FPFP的乐观的乐观值值a a,悲观值悲观值b b和
24、一般值和一般值m m,然后根据下列加权公式然后根据下列加权公式计算出期望值计算出期望值 e=(ae=(a4m4mb)b)6 6 (2-10)(2-10)希望希望LOCLOC或或FPFP的值落在区间的值落在区间a,ba,b之外的概率极小之外的概率极小 7.2软件项目估算软件项目估算2022-10-1035代码行、功能点和工作量估算代码行、功能点和工作量估算o当当LOC或或FP的期望值估算出来之后,根据以前软的期望值估算出来之后,根据以前软件项目开发的平均生产率件项目开发的平均生产率LOC/PM或或FP/PM就可以就可以计算出工作量。计算出工作量。o如,软件项目的规模估算为如,软件项目的规模估算为
25、310FP,以前完成的软以前完成的软件项目的生产率为件项目的生产率为5.5FP/PM,于是工作量估算为于是工作量估算为E=310/5.5=56PM。o如果当前估算的软件子项目比以前完成的项目复杂,如果当前估算的软件子项目比以前完成的项目复杂,那么所用的生产率值可以低于平均生产率,反之也那么所用的生产率值可以低于平均生产率,反之也可以高于平均生产率。可以高于平均生产率。7.2软件项目估算软件项目估算2022-10-1036例例 7.2 估算计算机辅助设计软件项目估算计算机辅助设计软件项目将将CAD项目按功能分解为七个子项目项目按功能分解为七个子项目用户界面和控制;用户界面和控制;二维几何分析;二
26、维几何分析;三维几何分析;三维几何分析;数据库管理;数据库管理;计算机图形显示;计算机图形显示;外设控制;外设控制;设计分析。设计分析。表表7.8 给出七个子项目代码行的乐观估计、悲观给出七个子项目代码行的乐观估计、悲观计和一般估计值,然后计算出加权平均值。计和一般估计值,然后计算出加权平均值。7.2软件项目估算软件项目估算2022-10-1037估算计算机辅助设计软件项目估算计算机辅助设计软件项目 分析七个子项目的规模复杂性和难度,参照以前分析七个子项目的规模复杂性和难度,参照以前开发类似项目的经验给出开发每行代码的平均成本,开发类似项目的经验给出开发每行代码的平均成本,每月开发的代码行数。
27、每月开发的代码行数。用这两组数据计算出七个子项目的开发成本和工用这两组数据计算出七个子项目的开发成本和工作量。作量。最后汇总的最后汇总的CADCAD软件开发项目软件开发项目 规模为规模为 33360 33360 LOCLOC 成本为成本为 656680$656680$工作量为工作量为 144.5 144.5 PMPM。7.2软件项目估算软件项目估算2022-10-1038 估算计算机辅助设计软件项目估算计算机辅助设计软件项目o再用第二种方法和第三种方法分别估算软件开发子再用第二种方法和第三种方法分别估算软件开发子项目在软件工程各个阶段的工作量,估算结果列入项目在软件工程各个阶段的工作量,估算结
28、果列入表表7.8。o两种方法估算的工作量分别为两种方法估算的工作量分别为144.5PM和和152.5PM,相差相差5%左右。左右。o估算的成本分别为估算的成本分别为656680$和和708075$,相差,相差7%左左右。右。两种方法估算的工作量和成本基本一致。两种方法估算的工作量和成本基本一致。7.2软件项目估算软件项目估算2022-10-1039表表7.8 代码行和成本、工作量估算代码行和成本、工作量估算 功能功能 乐观乐观 一般一般 悲观悲观 加权加权$LOC 成本成本 工作量工作量 LOC LOC LOC 平均平均 /LOC /PM (人月人月)用户界面控制用户界面控制1790 2400
29、 2650 2340 14 315 32760 7.4 二维几何分析二维几何分析4080 5200 7400 5380 20 220 107600 24.4三维几何分析三维几何分析4600 6900 8600 6800 20 220 136000 30.9数据库管理数据库管理 2900 3400 3600 3350 18 240 60300 13.9图形显示图形显示 3900 4900 6200 4950 22 200 108900 24.7外设控制外设控制 1990 2100 2450 2140 28 140 59920 15.2设计分析设计分析 6600 8500 9800 8400 18
30、 300 151200 28.0总计总计 33360 656680 144.57.2软件项目估算软件项目估算2022-10-1040 表表7.8 工作量估算工作量估算 功能功能 需求分析需求分析 设计设计 编码编码 测试测试 总计总计 用户界面控制用户界面控制 1.0 2.0 0.5 3.5 7二维几何分析二维几何分析 2.0 10.0 4.5 9.5 26三维几何分析三维几何分析 2.5 12.0 6.0 11.0 31.5数据库管理数据库管理 2.0 6.0 3.0 4.0 15计算机图形显示计算机图形显示 1.5 11.0 4.0 10.5 27外设控制外设控制 1.5 6.0 3.5
31、5.0 16设计分析设计分析 4.0 14.0 5.0 7.0 30总计总计(人月人月)14.5 61 26.5 50.5 152.5 每人月成本每人月成本 5200 4800 4250 4500成本成本()75400 292800 112625 227250 708075 2.2软件项目估算软件项目估算2022-10-10417.2.2 经验估算模型之一经验估算模型之一 CoCoMo模型模型o计算机软件的估算模型是根据以前完成项目的实计算机软件的估算模型是根据以前完成项目的实际数据导出的,用于软件项目的计划阶段。际数据导出的,用于软件项目的计划阶段。o 模型是根据模型是根据“从前的从前的”,
32、“局部的局部的”数据得出的,数据得出的,估算模型不可能完全适用于当前所有的软件项目估算模型不可能完全适用于当前所有的软件项目和全部开发环境。这些模型的计算结果仅供参考。和全部开发环境。这些模型的计算结果仅供参考。o 两个常用的估算模型两个常用的估算模型 CoCoMo模型模型 Putnam模型模型7.2软件项目估算软件项目估算2022-10-1042 CoCoMo模型模型o1 9 8 1 年年 B o e h m 提 出提 出“构 造 性 成 本 模构 造 性 成 本 模型型”(Constructive Cost Model),简称简称CoCoMo模模型。它是在静态、单变量模型的基础上构造出来的
33、。型。它是在静态、单变量模型的基础上构造出来的。oCoCoMo模型分为基本、中间、详细三个层次,分模型分为基本、中间、详细三个层次,分别用于软件开发的三个不同阶段。别用于软件开发的三个不同阶段。7.2软件项目估算软件项目估算2022-10-1043 CoCoMo模型模型o 基本基本CoCoMo模型模型 用于系统开发的初期,估算整用于系统开发的初期,估算整个系统的工作量个系统的工作量(包括软件维护包括软件维护)和软件开发所需要和软件开发所需要的时间。的时间。o 中间中间CoCoMo模型模型 用于估算各个子系统的工作量用于估算各个子系统的工作量和开发时间。和开发时间。o详细详细CoCoMo模型模型
34、 用于估算独立的软部件,如子用于估算独立的软部件,如子系统内部的各个模块。系统内部的各个模块。7.2软件项目估算软件项目估算2022-10-1044 1 基本基本CoCoMo模型模型静态、单变量模型静态、单变量模型 E=aLb (2-11)D=D=cEcEd d (2-12)其中:其中:E表示工作量,单位是人月表示工作量,单位是人月(PM)。D表示开发时间,单位是月表示开发时间,单位是月(M)。L是项目的代码行估计值,单位是千行代码是项目的代码行估计值,单位是千行代码 a,b,c,d是常数,取值如表是常数,取值如表7.9所示。所示。Boehm把软件划分为组织型、半独立型和嵌入型三类,允许把软件
35、划分为组织型、半独立型和嵌入型三类,允许不同应用领域和复杂程度的软件按照三类软件的适用范围选不同应用领域和复杂程度的软件按照三类软件的适用范围选取相应的参数取相应的参数a,b,c,d。给出了代码行数与工作量、工作量与开发时间之间的给出了代码行数与工作量、工作量与开发时间之间的函数关系函数关系7.2软件项目估算软件项目估算2022-10-1045 表表7.9 简单简单CoCoMo模型参数模型参数软件类型软件类型 a b c d 适用范围适用范围组织型组织型 2.4 1.05 2.5 0.38 各类应用程序各类应用程序半独立型半独立型 3.0 1.12 2.5 0.35 各类实用程序、各类实用程序
36、、编译程序等编译程序等嵌入型嵌入型 3.6 1.20 2.5 0.32 实时处理、实时处理、控制程序、控制程序、操作系统操作系统2.2软件项目估算软件项目估算2022-10-1046 2 中间中间CoCoMo模型模型o中间中间CoCoMo模型模型 以基本以基本CoCoMo模型为基础,在工作量估计公式中乘以工模型为基础,在工作量估计公式中乘以工作量调节因子作量调节因子 EAF E=aLb*EAF (2-13)其中:其中:L是软件产品的目标代码行数是软件产品的目标代码行数 a,b是常数,取值如表是常数,取值如表7.10所示。所示。7.2软件项目估算软件项目估算2022-10-1047中间中间 Co
37、CoMo模型模型表表7.10 中间中间CoCoMo模型参数模型参数 软件类型软件类型 a b 组织型组织型 3.2 1.05 半独立型半独立型 3.0 1.12 嵌入型嵌入型 2.8 1.207.2软件项目估算软件项目估算2022-10-1048 CoCoMo模型模型 工作量调节因子工作量调节因子EAFEAF与软件产品属性、计算机属性、人员属与软件产品属性、计算机属性、人员属性、项目属性有关性、项目属性有关o软件产品属性软件产品属性 软件可靠性、软件复杂性、数据库的规模。软件可靠性、软件复杂性、数据库的规模。o计算机属性计算机属性 程序执行时间、程序占用内存的大小、软件开发环境的变程序执行时间
38、、程序占用内存的大小、软件开发环境的变化、软件开发环境的响应速度。化、软件开发环境的响应速度。o人员属性人员属性 分析员的能力、程序员的能力、有关应用领域的经验、开分析员的能力、程序员的能力、有关应用领域的经验、开发环境的经验、程序设计语言的经验发环境的经验、程序设计语言的经验o项目属性项目属性 软件开发方法的能力,软件工具的质量和数量、软件开发软件开发方法的能力,软件工具的质量和数量、软件开发的进度要求。的进度要求。7.2软件项目估算软件项目估算2022-10-1049 CoCoMo 模型模型o四种属性共四种属性共15个要素。个要素。o每个要素调节因子每个要素调节因子 Fi,i=1,2,.,
39、15,的值分为:的值分为:很低、低、正常、高、很高、极高,共六级。很低、低、正常、高、很高、极高,共六级。o正常情况下正常情况下 Fi=1。oBoehm推荐的推荐的Fi值范围值范围 (0.70,0.85,1.00,1.15,1.30,1.65)o当当15个个Fi的值选定后,的值选定后,EAF的计算如下的计算如下 EAFF F1 1*F F2 2*F F1515 7.2软件项目估算软件项目估算2022-10-1050 CoCoMo 模型模型 调节因子集的定义和调节因子定值是由统计结果调节因子集的定义和调节因子定值是由统计结果和经验决定的。不同的软件开发组织,在不同的历和经验决定的。不同的软件开发
40、组织,在不同的历史时期,随着环境的变化,这些数据可能改变。史时期,随着环境的变化,这些数据可能改变。使用中间使用中间CoCoMo模型可以估算开发软件产品的模型可以估算开发软件产品的工作量,比较各种开发方案的工作量。工作量,比较各种开发方案的工作量。7.2软件项目估算软件项目估算2022-10-1051 例例7.3 用基本用基本CoCoMo模型估算例模型估算例7.2工作量、开发时间和项目开发人数工作量、开发时间和项目开发人数在例在例7.2中,目标代码行数为中,目标代码行数为 33.3 KLOCCAD软件开发属于中等规模、半独立型软件开发属于中等规模、半独立型从表从表7.9中查到中查到a=3.0,
41、b=1.12。代入公式代入公式(2-11)E=3.03.0L L1.121.12 =3.033.333.31.121.12 =152 PM7.2软件项目估算软件项目估算2022-10-1052例例7.3 用基本用基本CoCoMo模型估算例模型估算例7.2 将将E的估算值代入公式的估算值代入公式 (2-12)取取 C=2.5 d=0.35 D=2.5E E0.350.35 =2.5*1521520.350.35 =14.5 M 建议参加项目开发的人数建议参加项目开发的人数 N=E/D=152/14.5117.2软件项目估算软件项目估算2022-10-1053 CoCoMo模型模型 o例中计算出来
42、的例中计算出来的11人是粗略估计人是粗略估计o在软件项目开发过程中,在软件项目开发过程中,11个人不可能都有相同的个人不可能都有相同的能力和个性,相同的经验和知识结构,并且在软件能力和个性,相同的经验和知识结构,并且在软件开发的各个阶段对人的要求也不同。开发的各个阶段对人的要求也不同。7.2软件项目估算软件项目估算2022-10-1054人员和工作量之间的关系人员和工作量之间的关系o十个人年工作量的项目不可能由一个人干十年,但十个人年工作量的项目不可能由一个人干十年,但十个人干一年也无法完成任务十个人干一年也无法完成任务,因为十个人的任务因为十个人的任务组需要交流的开销;组需要交流的开销;o项
43、目后期增加人员还需要增加培训的工作量,可能项目后期增加人员还需要增加培训的工作量,可能会使项目的交付日期一托再托;会使项目的交付日期一托再托;o项目工作人员的数量和项目整体生产率之间的关系项目工作人员的数量和项目整体生产率之间的关系不是线性的。不是线性的。7.2软件项目估算软件项目估算2022-10-1055 CoCoMo模型模型 若干人共同开发一个软件项目还应该增加他们之若干人共同开发一个软件项目还应该增加他们之间相互通信和交换意见的额外工作量。间相互通信和交换意见的额外工作量。设设 N个程序员组成小组,实现相同规模的程序,相个程序员组成小组,实现相同规模的程序,相互通信数为互通信数为 =N
44、(N-1)/2 每次通信和交换意见的平均工作量为每次通信和交换意见的平均工作量为 则则 增加的通信开销为增加的通信开销为 EcN(N-1)/2 (2-14)7.2软件项目估算软件项目估算2NC2022-10-1056例例7.4 计算一个程序的通信开销计算一个程序的通信开销 3人和人和5人开发一个程序人开发一个程序相互通信和交换意见的关相互通信和交换意见的关系如图系如图7.2所示所示 将将N=3和和N=5分别代入公分别代入公式式(2-14)Ec(3)3(3-1)/23 Ec(5)5(5-1)/2107.2软件项目估算软件项目估算2022-10-1057 CoCoMo模型模型 由由N个程序员组成的
45、小组共同开发一个程序总的工作量个程序员组成的小组共同开发一个程序总的工作量ET满足满足 ET=E+Ec (2-15)程序员小组的生产率是程序员小组的生产率是 PG=LOC/(E+Ec)(2-16)程序员小组生产率和单个程序员生产率的比为程序员小组生产率和单个程序员生产率的比为 Rp=E/(E+Ec)(2-17)随着程序员小组人数的增加随着程序员小组人数的增加,EcNN2 2/2,程序员小组的生产程序员小组的生产率将会下降。率将会下降。模型表明模型表明 盲目增加程序员人数会推迟软件完成的日期盲目增加程序员人数会推迟软件完成的日期7.2软件项目估算软件项目估算2022-10-1058 CoCoMo
46、模型模型 以静态单变量以静态单变量CoCoMo模型为基础,还可以模型为基础,还可以定义估算资源定义估算资源R的静态多变量模型的静态多变量模型 Rai*ei*bi 其中:其中:ei 表示软件第表示软件第i个特性个特性 ai,bi 是与软件第是与软件第i个特性有关的常数,通个特性有关的常数,通常由实验数据确定。常由实验数据确定。7.2软件项目估算软件项目估算2022-10-1059 7.2.3 经验估算模型之二:经验估算模型之二:Putnam模型模型o 1978年,年,Putnam提出了大型软件项目工作量提出了大型软件项目工作量(一般一般在在30人年以上人年以上)估算模型。估算模型。o它是一个动态
47、多变量模型,适用于软件开发的各个它是一个动态多变量模型,适用于软件开发的各个阶段,估算模型以大型软件项目的实测数据为基础,阶段,估算模型以大型软件项目的实测数据为基础,导出如图导出如图7.3所示的工作量分布曲线。所示的工作量分布曲线。o该曲线与著名的该曲线与著名的Rayleigh-Norden(R-N)曲线相似,曲线相似,它描述了开发工作量,开发时间和软件代码行数之它描述了开发工作量,开发时间和软件代码行数之间的关系。间的关系。7.2软件项目估算软件项目估算2022-10-1060 Putnam模型模型方程方程 L=CL=CK K E E1/3 1/3 t td4/3 4/3 (2-18)其中
48、:其中:L 表示源程序代码行数表示源程序代码行数 td 表示开发时间表示开发时间 Ck 表示技术状态常数表示技术状态常数 E 表示工作量表示工作量 (以人年记,包括维护以人年记,包括维护)7.2软件项目估算软件项目估算2022-10-1061Putnam模型模型o差的软件开发环境差的软件开发环境 软件开发没有方法学的支持,缺乏对文档的评审,采用批软件开发没有方法学的支持,缺乏对文档的评审,采用批处理方式。处理方式。o一般的软件开发环境一般的软件开发环境 应有软件开发方法学的支持,有适宜的文档和评审,采用应有软件开发方法学的支持,有适宜的文档和评审,采用交互处理方式。交互处理方式。o好的软件开发
49、环境好的软件开发环境 应采用应采用CASE工具和集成化工具和集成化CASE环境。环境。CK=2000 比较差的软件开发环境比较差的软件开发环境 8000 一般的软件开发环境一般的软件开发环境 11000 比较好的软件开发环比较好的软件开发环7.2软件项目估算软件项目估算2022-10-1062 Putnam模型模型 由由(2-18)3 3 3 4 3 4 E L/(CK*td)(2-19)otd对应于对应于Rayleigh-Norden曲线的最大值,表示软件交付时曲线的最大值,表示软件交付时工作量最大,参与软件项目的人最多。工作量最大,参与软件项目的人最多。o当工作量估算出来之后,利用每人年的
50、开销当工作量估算出来之后,利用每人年的开销($/PY)可以估算可以估算成本。成本。o公式公式(2-19)表明,开发软件项目的工作量与交货时间的表明,开发软件项目的工作量与交货时间的4次次方成反比,将方成反比,将0.9td代替代替(2-19)式的式的td计算计算E发现,提前发现,提前10%的时间要增加的时间要增加52%的工作量,降低了软件开发生产率。的工作量,降低了软件开发生产率。o软件开发过程中人员与时间的折衷是一个十分重要的问题。软件开发过程中人员与时间的折衷是一个十分重要的问题。7.2软件项目估算软件项目估算2022-10-1063Putnam模型模型7.2软件项目估算软件项目估算2022