1第8章软件工程管理与质量保证学习目标掌握软件工程管理的目的和内容学习软件规模估算方法及进度安排技术掌握软件项目开发的人员组织形式掌握软件质量的概念及质量保证措施学习软件可靠性的概念及了解软件的容错技术了解软件配置的内容及配置管理过程2第8章软件工程管理与质量保证教学内容8.1软件工程管理概述8.2软件规模估算8.3进度计划8.4人员组织8.5质量保证8.6软件可靠性8.7软件容错技术8.8软件配置管理本章小结38.1软件工程管理概述所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。软件工程管理的对象是软件工程项目,它所涉及的范围覆盖了整个软件工作过程。它先于任何技术活动之前开始,并且贯穿于软件的整个生存周期之中。软件工程管理是一组有计划的活动,而制定计划的基础是对项目的工作量、完成时间、资源的需求、成本费用、实现的目标及工作进度等要有一个量化的概念,而其中软件规模是最基础的数据。返回目录48.2软件规模估算8.2.1代码行度量技术软件开发规模是度量的重要内容,以LOC(LinesofCode,代码行)表示的软件规模是最基本的度量,它直接关系到软件的成本、开发工作量和完成时间。为了使得对程序规模的估计值更接近实际值,可以由多名有经验的软件工程师分别做出估计。每个人都估计程序的最小规模(a)、最大规模(b)和最可能的规模(m),分别算出这3种规模的平均值,和之后,再用下式计算程序规模的估计值:L=(8.1)64bma返回目录58.2软件规模估算例:项目A01工作量:13(人月)代码规模(KLOC):9成本(元/LOC):12文档页数:240错误数:20人数:4可以根据上面列出的基本数据进行一些简单的面向代码行的生产率和质量的度量。例如:软件成本(元)=LOC(行)×每行代码的成本(元/行)开发工作量(人)=LOC(行)/每人月开发的代码行(行/人月)有些项目可计算出平均值:生产率=KLOC/(人月)质量=错误数/KLOC返回目录68.2软件规模估算8.2.2功能点度量面向功能度量方式是在1979年Albrecht首先提出来的。该方法针对程序的“功能性”,其依据在于,任何软件是由若干功能组成的,每种功能可划分为复杂程度不同的若干功能点,利用功能的一些计算度量和功能复杂性估计的经验关系式,得出功能点度量数据,以代替原来常用的LOC度量法。根据软件功能的类型和特征,可把功能划分为五种类型:用户输入,用户输出,用户查询,主文件数,外部处理。用户输入:面向不同应用的数据输入。用户输出:面向不同应用的数据输出。用户查询:一个查询定义为引发软件以联机方式产生某种即时响应的动作,每一个不同的查询单独计数。主文件数:指每一个逻辑主文件均要计数。外部处理:区别于用户输出,这里指不同系统或资源间的信息传送。返回目录78.2软件规模估算五类功能点按其复杂程度可划分为简单、中等、复杂3种,表8-1是Albrecht给出的功能点加权计算表。表8-1功能点加权计算表软件功能点数加权计算方法如下:以类型“用户输入”为例,设功能点按等级分类计数分别为:简单为Inp1个,中等为Inp2个,复杂为Inp3个,则:返回目录88.2软件规模估算功能点计数Inp=Inp1+Inp2+Inp3分类加权计算合计数Inp_FP=Inp1×3+Inp2×4+Inp3×6(8.2)软件加权功能点数量为:FP=Inp_FP+Out_FP+Inq_FP+Fil_FP+Int_FP(8.3)在上表中,首先要确定五类功能类型,并在功能点计数列响应位置给出数值,就可以计算功能点分类加权计算值,相加即得软件加权功能点总计数。功能点复杂等级划分由使用单位根据本单位实际情况自行拟定一些准则。返回目录98.2软件规模估算但上述方法得出的FP仍不能适应软件各种情况,复杂性等级的确定往往带有主观因素。Albrecht提出用TCF(技术复杂性因子)来修正、调节功能点的计算方法。FP(调节后)=FP(调节前,见公式8.3)×TCF(8.4)其中:TCF=0.65+0.01×∑Fi(i=1~14)Fi取值见表8-2。由公式(8.4)可看出,复杂性校正是对整个功能,不对某一功能点。确定校正系数仍与经验和主观因素有很大关系,影响度量准确性。当由公式(8.4)计算出FP修正值后,就可像LOC方式一样,计算出项目软件的其他属性,例:生产率、功能点成本、质量等。返回目录108.2软件规模估算表8-2功能点计算校正值返回目录iF技术因素1.系统是否需要可靠的备份和恢复?F12.是否需要数据通信?F23.是否有分布处理的功能?F34.性能是否关键?F45.系统是否运行在既存的高度实用化的操作环境中?F56.系统是否需要联机数据项?F67.联机数据项是否需要输入处理建立多窗口显示或操作?F78.主文件是否联机更新?F89.输入、输出、文件、查询是否复杂?F910.内部处理过程是否复杂?F1011.程序代码是否涉及成可复用的?F1112.设计中是否包括转换和安装?F1213.系统是否被设计成可重复安装在不同机构中?F1314.应用是否被设计成便于修改和易于用户使用?F14iF118.2软件规模估算8.2.3静态单变量模型软件项目的估算能够通过一系列化的步骤,根据过去的经验,通过对大量历史数据的统计和分析,建立资源估算模型,提供在一定精确度范围内的估算结果。工作量是软件规模(KLOC或FP)的函数,工作量的单位通常是人月(pm)。静态单变量模型的估算公式如下:E(人月)=A+B×(KLOC)c或E(人月)=A+B×(FP)c其中:A、B和C是由经验数据导出的常数。返回目录128.2软件规模估算以下给出几个典型的基于KLOC和FP的工作量静态单变量估算模型。(1)IBM模型Walston与Felix总结了IBM联合系统部实施的60个软件项目(源代码长度4~467千行,工作量12~11758人月,使用9种语言和66种计算机),于1977年提出IBM模型的估算公式:E(人月)=5.2×(KLOC)0.91(2)Bailey-Basili模型E(人月)=5.5+0.73×(KLOC)1.16(3)Boehm模型E(人月)=3.2+0.73×(KLOC)1.05(4)Albrecht模型E(人月)=-13.39+0.0545FP(5)Maston,Barnett和Mellichamp模型E(人月)=585.7+15.12FP返回目录138.2软件规模估算8.2.4动态多变量模型1978年由Putnam提出,其中心思想是:在整个软件开发周期,根据工作量和开发计划目录的不同分布,划分时间段,在每一时间段内定义资源需求,建立一条连续的“资源需求曲线”(又称Rayleigh-Norden曲线),确定资源与时间的函数关系,导出如下含源代码行数、工作量和开发时间三者关系的函数关系式:E=(LOC/CK)3×B×(1/TD)4其中:LOC是源代码行数,E是整个生存周期(含开发与维护)所花费的工作量(以人月或人年计),TD是开发时间(以月或年计),CK是技术状态常数,它反映了以下因素对工作量的影响:返回目录148.2软件规模估算总体过程成熟度及管理水平。使用良好的软件工程时间的程度。使用的程序设计语言的级别。软件环境的状态。软件项目组的技术及经验。应用系统的复杂程度。CK的典型取值为:CK=2000(开发实时嵌入式软件);CK=10000(开发系统软件或电信系统);CK=28000(开发商业应用系统)。B的一般取值为:B=0.16(KLOC在5~15之间);B=0.39(KLOC在70以上)。返回目录158.2软件规模估算8.2.5COCOMO2模型COCOMO2给出了3个层次的估算模型,随着估算层次的提高,对软件细节考虑的详尽程度逐级增加。COCOMO2模型既可以用于不同类型的项目,也可用于同一项目的不同开发阶段。3个层次的估算模型分别是:(1)应用系统组成模型。用于估算构建原型的工作量。(2)早期设计模型。适用于体系结构设计阶段。(3)后体系结构模型。适用于完成体系结构设计之后的软件开发阶段。返回目录168.2软件规模估算下面以后体系结构模型为例,介绍COCOMO2模型。该模型把软件开发工作量表示成代码行数(KLOC)的非线性函数:E=其中:E是开发工作量(以人月为单位),a是模型系数,KLOC是估计的源代码行数(以千行为单位),b是模型指数,fi(i=1~17)是成本因素。171iibfKLOCa返回目录178.2软件规模估算Boehm把影响软件工作量的因素划分成产品因素、平台因素、人员因素和项目因素4类。表8-3列出了COCOMO2模型使用的及与之对应的工作量系数。COCOMO2模型与基本COCOMO模型相比,使用的影响软件工作量的因素有了一些变化。(1)增加了可重用性、需要的文档量、人员连续性和多地点开发4个因素。表明这些因素对开发成本的影响日益增加。(2)减少了计算机切换时间和使用现代程序设计技术2个影响较小的因素。(3)某些因素的影响程度提高了,如分析员能力、平台经验、语言和工具经验。而有些因素的影响程度减少了,如程序员能力。返回目录188.2软件规模估算为了确定工作量方程中模型指数b的值,原始的COCOMO模型把软件开发项目划分成组织式、半独立式和嵌入式这样3种类型,并指定每种项目类型所对应的b值(分别是1.05,1.12和1.20)。COCOMO2采用了更加精细得多的b分级模型,这个模型使用5个分级因素Wi(1≤i≤5),其中每个因素都划分成从甚低(Wi=5)到特高(Wi=0)的6个级别,然后用下式计算b的数值:返回目录198.2软件规模估算b=因此,b的取值范围为1.01~1.26。显然,这种分级模式比原始COCOMO模型的分级模式更精细、更灵活。COCOMO2使用的5个分级因素如下所述:(1)项目先例性(2)开发灵活性(3)风险排除度(4)项目组凝聚力(5)过程成熟度5101.101.1iiW返回目录208.3进度计划8.3.1估算开发时间常用的开发时间估算模型有:(1)Walston_Felix模型T=2.5E0.35(2)原始的COCOMO模型T=2.5E0.38(3)COCOMO2模型T=3.0E0.33+0.2×(b-1.01)(4)Putnam模型T=2.4E1/3其中:E是开发时间工作量(人月),T为开发时间(月)。返回目录218.3进度计划8.3.2Gantt图Gantt(甘特)图历史悠久,它是安排软件进度计划的一个有用工具。图8-1给出一个具有8个任务的Gantt图,在图的左方列出项目的开发任务,上方列出了日历时间,在每一任务的开始时间与结束时间各画一个小三角形,当任务已经开始或结束时,就把小三角形涂黑,各个任务的工作阶段用”→”表示。例如在图8-1中,分析任务已经完成,测试计划与设计两项任务也已开始,但尚未完成。阶段完成以交付对应文档并通过评审为标准。从Gantt图可清楚反映各子任务的开始时间、完成时间、当前进度及时间上的对比关系。Gantt图简单、直观,能动态反映软件开发进展情况,不足之处是,不能反映各任务之间的依赖关系。返回目录228.3进度计划任务2004123456789101112200512分析▲→→▲测试计划▲→△设计▲→→→△编码△→→→△测试软件△→→→→→△测试数据△→△产品测试△→△文档△→→→△图8-1具有8个任务的Gantt图返回目录238.3进度计划8.3.3工程网络技术工程网络技术采用PERT技术和CPM方法,它不仅能直观地描述各子任务的分解情况、开始时间和完成时间,而且还可以显式地描绘各个任务彼此间的依赖关系。PERT技术叫做计划评审技术(ProgramEvaluation&ReviewTechnique),CPM方法叫做关键路径法(CriticalPathMethod),它们都是安排开发进度、制定软件开发计划的最常用的方法。它们都采用网络图来描述一个项目的任务网络,也