资源描述
第第5 5章章 软件工作量估计软件工作量估计避免不现实估计的危险避免不现实估计的危险了解可以使用的估计方法的适用范围了解可以使用的估计方法的适用范围使用由底向上的方法估计项目使用由底向上的方法估计项目计算系统的功能点和对象点计算系统的功能点和对象点估计使用过程编程语言实现软件所需要的估计使用过程编程语言实现软件所需要的工作量工作量了解开发工作量模型了解开发工作量模型COCOMO方法方法本章目的本章目的u成功项目的一个定义是系统能够按时和在成功项目的一个定义是系统能够按时和在预算内交付,并能满足要求的质量。预算内交付,并能满足要求的质量。u估计过程的困难:估计过程的困难:软件的新颖应用软件的新颖应用变更技术变更技术缺乏同类项目的经验缺乏同类项目的经验估计的主观特性估计的主观特性角色因素角色因素5.1 5.1 引言引言战略策划战略策划可行性研究可行性研究系统规格说明系统规格说明评价供应商建议书评价供应商建议书项目策划项目策划5.2 5.2 在何处进行估计在何处进行估计u帕金森定律:工作总是用完所有可以利用帕金森定律:工作总是用完所有可以利用的时间。的时间。u布鲁克斯定律:在一项延迟的工作上投入布鲁克斯定律:在一项延迟的工作上投入更多的人,可能导致该项工作更加延迟。更多的人,可能导致该项工作更加延迟。u估计实际上不是预测,而是一个管理目标。估计实际上不是预测,而是一个管理目标。5.3 5.3 估计过高和估计过低的问题估计过高和估计过低的问题u需要历史数据需要历史数据u工作的度量:工作的度量:SLOC/KLOCu复杂性:取决于估计人员的主观判复杂性:取决于估计人员的主观判断断5.4 5.4 软件估计基础软件估计基础算法模型算法模型专家判断专家判断类比类比帕金森法帕金森法嬴的价格嬴的价格自顶向下自顶向下自底向上自底向上5.5 5.5 软件工作量估计技术软件工作量估计技术估计人员将项目分解成构件任务,然后估估计人员将项目分解成构件任务,然后估计执行每个任务需要多少工作量。计执行每个任务需要多少工作量。由底向上法最适合于后期的更详细项目策由底向上法最适合于后期的更详细项目策划阶段。划阶段。如果一个项目完全是新颖的或者没有可用如果一个项目完全是新颖的或者没有可用的历史数据,那么建议估计人员最好使用的历史数据,那么建议估计人员最好使用由底向上方法。由底向上方法。5.5.1 5.5.1 由底向上估计由底向上估计u自顶向下法通常和参数模型相关。参数模型自顶向下法通常和参数模型相关。参数模型公式如下:工作量公式如下:工作量=系统规模系统规模生产率生产率u预测软件开发工作量的模型有两个关键构件:预测软件开发工作量的模型有两个关键构件:第一个是评估要承担的软件开发任务的规模第一个是评估要承担的软件开发任务的规模的方法;第二个是评估做每项任务的效率。的方法;第二个是评估做每项任务的效率。5.5.2 5.5.2 自顶向下法和参数模型自顶向下法和参数模型u专家评判往往是使用已标识的来自过去类专家评判往往是使用已标识的来自过去类似项目的非正式的类比法和由底向上估计似项目的非正式的类比法和由底向上估计法相结合的方法。法相结合的方法。5.6 5.6 专家评判专家评判Deiphi方法n组织者发给每位专家一份规格说明和记录表格,请专家估算。n每位专家提出3个规模的估计值。n最小值ain最可能值min最大值bin组织者整理,计算每位专家的平均值Ei=(ai+4 mi+bi)/6计算期望值:E=(E1+En)/nn综合结果后,再次填写表格,比较估算偏差,找出原因。n重复多次,最终获得一个多数认可的软件规模。即基于案例的推理。估计人员从已经完成的项即基于案例的推理。估计人员从已经完成的项目中找出与新项目有类似特征的项目,然后将目中找出与新项目有类似特征的项目,然后将匹配的源案例已经记录的工作量作为目标案例匹配的源案例已经记录的工作量作为目标案例的估计基础。然后对新项目进行估计。的估计基础。然后对新项目进行估计。项目间的接近程度计算方法:项目间的接近程度计算方法:欧几里得距离:欧几里得距离:(目标参数目标参数1-源参数源参数1)2+(目标参数目标参数n-源参数源参数n)21/25.7 5.7 类比估计类比估计类比估算要解决的问题:n如何描述实例特征。n通过选取合适的相似度、相异度的表达式,评价相似程度。n如何用相似的项目数据得到最终估算值。例子:n假定比较的案例基于两个参数。即构建系统的输入数和输出数。已知新项目有7个输入和15个输出。过去有一个项目A有8个输入和17个输出。项目B有5个输入和10个输出。求欧几里得距离,判断项目A和B那个更接近新项目。类比估算的优缺点n不能使用于早期规模不确定的情况。n一般在已经有经验的狭窄领域。n难于适应新项目中约束条件、技术、人员等发生重大变化的情况。5.8 Albrecht5.8 Albrecht功能点分析功能点分析n功能点发进行估算的时候具体过程是:1.对估算功能单元的类型进行识别2.计算每种类型的复杂度3.计算总体的调整前的功能点数4.根据调整因子对功能点数进行调整外部输入类型:通过界面等的输入,插入更新等外部输入类型:通过界面等的输入,插入更新等操作都是典型外部输入操作都是典型外部输入外部输出类型:仅仅输出,入导出,报表,打印外部输出类型:仅仅输出,入导出,报表,打印等输出等输出 内部逻辑文件类型:可以理解为业务对象,可能内部逻辑文件类型:可以理解为业务对象,可能对应多个数据表对应多个数据表 外部接口文件类型:其它应用提供的接口数据外部接口文件类型:其它应用提供的接口数据外部查询类型:先要输入数据,在根据输入数据外部查询类型:先要输入数据,在根据输入数据计算输出,如查询计算输出,如查询功能单元的类型n功能点计算公式 FP=UFC*TCF其中,UFC表示未调整的功能点计数;TCF表示技术复杂度因子。AlbrechtAlbrecht复杂度因子(主观)复杂度因子(主观)5.8 Albrecht5.8 Albrecht功能点分析功能点分析技术复杂度因子技术复杂度因子5.8 Albrecht5.8 Albrecht功能点分析功能点分析TCF=0.65+0.01(sum(Fi)TCF范围:范围:0.651.35例子:假设技术复杂度为平均水平例子:假设技术复杂度为平均水平简单一般复杂外部输入623外部输出770外部查询024外部文件523内部文件9021.1.计算计算UFCUFC简单一般复杂外部输入6*32*43*6外部输出7*47*50*7外部查询0*32*44*6外部文件5*52*73*10内部文件9*70*102*15UFC=3011341651022.2.计算计算TCFTCFnTCF=0.65+0.01*(14*3)=1.073.3.计算功能点计算功能点FPFPnFP=UFC*TCF =301*1.07=322 5.9 Mark5.9 Mark功能点功能点对于每个事务,为调整的功能点的计算方对于每个事务,为调整的功能点的计算方法:法:Wi (输入数据元素类型数输入数据元素类型数)+We (引用的实体类型数引用的实体类型数)+Wo (输出数据元素类型数输出数据元素类型数)5.9 Mark5.9 Mark功能点功能点 5.10 5.10 对象点对象点设想在最终系统中程序的数据和类型设想在最终系统中程序的数据和类型估计每个已标识程序的估计每个已标识程序的SLOC估计工作内容、考虑复杂度和技术难度估计工作内容、考虑复杂度和技术难度计算工作量(工作天数)计算工作量(工作天数)5.11 5.11 面向过程代码的方法面向过程代码的方法COCOMO:Constructive Cost Mode 分为基本分为基本COCOMO模型,和中级模型,和中级COCOMO模型两种,前者是一个静态单变模型两种,前者是一个静态单变量模型,对整个软件系统进行估算;后者量模型,对整个软件系统进行估算;后者是一个静态多变量模型,将软件系统模型是一个静态多变量模型,将软件系统模型分为系统和部件两个层次,系统是有部件分为系统和部件两个层次,系统是有部件组成的。组成的。5.12 COCOMO5.12 COCOMO模型模型E=ab(KLOC)exp(bb)D=cb(E)exp(db)式中式中E为开发所需的人月,为开发所需的人月,D为所需的开发时为所需的开发时间(月),间(月),KLOC为估计提交的代码行。为估计提交的代码行。ab、bb、cb、db是指不同软件开发方式是指不同软件开发方式的值。具体见下表:的值。具体见下表:5.12.1 5.12.1 基本基本COCOMOCOCOMO模型模型5.12.1 5.12.1 基本基本COCOMOCOCOMO模型模型生产率生产率=(KLOC)/E(代码行(代码行/人月)人月)人员数人员数=E/D方式方式a ab bb bb bc cb bd db b有机有机2.42.41.051.052.52.50.380.38半有机半有机3.03.01.121.122.52.50.350.35嵌入嵌入3.63.61.21.22.52.50.320.32n对于工作量对于工作量E E的公式的公式,当项目复杂性从有机向嵌入方式当项目复杂性从有机向嵌入方式转变时转变时,参数参数a ab b、b bb b 的取值逐步增加的取值逐步增加,这反映了人力这反映了人力的增长的增长,说明项目越复杂就需要越多的开发工作量。说明项目越复杂就需要越多的开发工作量。n而开发工期而开发工期D D的公式则不存在这种相应递增的关系的公式则不存在这种相应递增的关系,即即随着项目复杂性的增加随着项目复杂性的增加,参数参数c cb b、d db b 并不相应增大并不相应增大,这是由于开发部门对于复杂的大项目往往投入较强的这是由于开发部门对于复杂的大项目往往投入较强的技术力量技术力量,因此实际工期并不一定延长因此实际工期并不一定延长n这里需要指出的是上述参数取值仅仅是在这里需要指出的是上述参数取值仅仅是在63 63 个开发项个开发项目的基础上用曲线拟合方法得到的目的基础上用曲线拟合方法得到的,因而只能作为一因而只能作为一种大致的测算公式。种大致的测算公式。基本模型考虑了软件开发方式和软件规模基本模型考虑了软件开发方式和软件规模这两个重要因素这两个重要因素,为了提高测算精度,采为了提高测算精度,采用中级用中级COMOCO模型。模型。先产生一个与基本先产生一个与基本COCOMO模型一样形式模型一样形式的估算公式,然后对的估算公式,然后对15个个“成本驱动属性成本驱动属性”进行打分,定出进行打分,定出“乘法因子乘法因子”,对公式,对公式进行休整。进行休整。产品属性产品属性 计算机属性计算机属性 人员属性人员属性 项目属性项目属性5.12.2 5.12.2 中级中级COCOMOCOCOMO模型模型软件生产率是指每个人一个月所能生产的软件生产率是指每个人一个月所能生产的有效源代码行数。有效源代码行数。对软件生产率影响的因素很多,要得到准对软件生产率影响的因素很多,要得到准确结果并不容易。其影响因素为:确结果并不容易。其影响因素为:人的因素、问题因素、过程因素、生人的因素、问题因素、过程因素、生产因素、资源因素。产因素、资源因素。5.13 5.13 软件生产率软件生产率u确定功能确定功能首先将功能反复分解,直到可以对为实现该功首先将功能反复分解,直到可以对为实现该功能所要求的源代码行数做出可靠的估算为止。能所要求的源代码行数做出可靠的估算为止。然后可以给出极好、正常和较差三种情况下的然后可以给出极好、正常和较差三种情况下的源代码估算行数的期望值,分别用源代码估算行数的期望值,分别用a、m、b表示。表示。5.13 5.13 代码行的成本估算方法代码行的成本估算方法5.13 5.13 代码行的成本估算方法代码行的成本估算方法u求期望值求期望值Le和偏差和偏差Ld 式中式中n表示软件功能数量表示软件功能数量根据经验数据,确定各子功能的代码根据经验数据,确定各子功能的代码成本行成本行计算各子功能的成本和工作量计算各子功能的成本和工作量计算开发时间计算开发时间对结果进行分析比较对结果进行分析比较5.13 5.13 代码行的成本估算方法代码行的成本估算方法估算的误差度估算的误差度类型准确度说明量级估计:合同前-25%-+75%概念和启动阶段预算估计:合同期-10%-+25%初步计划确定性估计:WBS之后-5%-+10%详细计划估算不准的主要原因估算不准的主要原因n基础数据不足n对需求理解的程度n软件项目的不确定n缺乏经验的估计人员n签约前后不连贯和低劣的推测技术对付误差的方法对付误差的方法n避免低劣估算n表达方式技巧n加减限定表示n范围表示n风险量化n分情况阐述n处理低劣估算带来的结果
展开阅读全文