1图9.1软件工程层次图9.2软件过程第九章软件管理一、复习要求1.了解软件过程的概念、软件过程框架和软件过程模型。2.了解软件项目管理的过程。3.了解软件度量的种类,面向规模和面向功能的度量以及质量度量的种类。4.掌握LOC估算和FP估算的方法,分解技术和工作量估算方法。5.了解软件成本估算的概念,掌握COCOMO成本估算方法。6.了解软件成本―效益估计方法。7.了解风险分析的步骤,风险的种类、风险项目和风险构成。8.了解软件进度安排方法及图形工具。9.了解软件项目划分的方式,项目组织的模式,人员配备的原则和条件。二、内容提要1.软件过程(1)软件过程的概念软件工程是一种层次化的技术,如图9.1所示。软件工程的过程层是将结合在一起的凝聚力量,使得计算机软件能够及时、合理地被开发出来。软件过程定义了一组关键过程域(KPAs),它们构成软件项目管理的基础,并规定了技术方法的采用、工程产品(模型、文档、数据、报告、表格等)的产生、里程碑的建立、质量的管理以及适当的变更控制。软件过程是软件生存期中的一系列相关软件工程活动的集合。每一个软件过程又是由一组工作任务、项目里程碑、软件工程产品和交付物以及质量保证(SQA)点等组成。一个软件过程可以用图9.2的形式来表示。首先建立一个公共过程框架,其中定义了少量可适用于所有软件项目的框架活动,而不考虑它们的规模和复杂性。再给出各个框架活动的任务集合,使得框架活动能够适合于项目的特点和项目组的需求。最后是保护伞活动,如软件质量保证、软件配置管理以及测量等,它们独立于任何一个框架活动并将贯穿于整个过程。(2)软件过程模型软件工程过程模型的选择基于项目和应用的特点、采用的方法和工具、要求的控制和需质量关注点过程方法工具公共过程框架保护伞活动框架活动任务集合工作任务里程碑、交付物SQA点2问题定义技术开发方案综合状态捕获图9.3问题解决循环的各个阶段交付的产品。L.B.S.Raccoon使用了分级几何表示,用以讨论软件工程过程的本质。所有的软件开发都可以看成是一个问题循环解决过程,如图9.3所示。其中包括4个截然不同的阶段:状态捕获、问题定义、技术开发和方案综合。状态捕获表示了事物的当前状态;问题定义标识了需要解决的特定问题;技术开发利用某些技术来解决问题;方案综合导出最终的结果(如文档、程序、数据、新的事务功能、新的产品)。以上的问题循环解决过程可以用于软件工程的不同开发级别上。它可用于考虑整个应用系统的宏观级,也可用于建造程序构件的中间级,甚至还可用于源代码行级。因此,可以用分级几何表示来给出过程的理想化的视图。首先定义一个分级几何表示的模式,然后相继地在更小的规模上递归地应用分级几何表示:模式中嵌套模式。在图9.4中,问题循环解决过程的每一个阶段又包含一个同样的问题循环解决过程,该循环中每一个步骤中还可以再包含另一个问题循环解决过程。这样一直继续下去,直到某个合理的边界为止。对于软件来说,就是源代码行。图9.4问题循环解决过程中阶段嵌套阶段实际上,想要如图9.4那样清楚地划分这些活动是很困难的,因为在阶段内部常常会出现一些交叉的任务,它们还可能会跨越阶段。不过,这种简化的视图表达了一个重要的思想:不管软件项目选择了什么样的过程模型,但所有阶段,包括状态捕获、问题定义、技术开发、方案综合,在某个细节级别上都同时存在。由于给出了如图9.4所示的递归的性质,上述的4阶段论不但可用于整个应用的分析,而且同样地可用于某一代码段的生成。(3)过程建造技术为使得软件过程模型适合于软件项目组的使用,需要开发一些过程技术工具,以帮助软件开发组织分析它们当前的过程,组织工作任务,控制和监控进度,管理技术质量。使用过程技术工具,可以建造一个自动模型,模型包含前面提到的公共过程框架、任务集合及保护伞活动。该模型一般表示成一个网络,对其加以分析,就能够确定典型的工作流程,考察可能导致减少开发时间、降低开发成本的可选的过程结构。问题定义技术开发方案综合状态捕获问题定义技术开发方案综合状态捕获问题定义技术开发方案综合状态捕获状态捕获3一旦创建了一个可接受的过程,就可以使用其它过程技术工具来分配、监视、甚至控制在软件过程模型中定义的所有软件工程任务。软件项目组的每一个成员都可以使用这样的工具来开发检查表,列出所有将要执行的工作任务、将要产生的工作产品和将要实施的软件质量保证活动。过程技术工具还可用于协调适合某一特定工作任务的其它CASE工具的使用。2、软件项目管理过程软件项目管理包括进度管理、成本管理、质量管理、人员管理、资源管理、标准化管理。管理的对象是进度、系统规模及工作量估算、经费、组织机构和人员、风险、质量、作业和环境配置等。软件项目管理所涉及的范围覆盖了整个软件生存期。为使软件项目开发获得成功,一个关键问题是必须对软件开发项目的工作范围、可能遇到的风险、需要的资源(人、硬/软件)、要实现的任务、经历的里程碑、花费工作量(成本),以及进度的安排等等做到心中有数。而软件项目管理可以提供这些信息。通常,这种管理在技术工作开始之前就应开始,而在软件从概念到实现的过程中继续进行,并且只有当软件开发工作最后结束时才终止。(1)启动一个软件项目在制定软件项目计划之前,必须先明确项目的目标和范围、考虑候选的解决方案、标明技术和管理上的要求。有了这些信息,才能确定合理、精确的成本估算,实际可行的任务分解以及可管理的进度安排。项目的目标标明了软件项目的目的但不涉及如何去达到这些目的。范围标明了软件要实现的基本功能,并尽量以定量的方式界定这些功能。候选的解决方案虽然涉及方案细节不多,但有了方案,管理人员和技术人员就能够据此选择一种“好的”方法,给出诸如交付期限、预算、个人能力、技术界面及其它许多因素所构成的限制。(2)制定项目计划制定计划的任务包括:估算所需要的人力(通常以人月为单位)、项目持续时间(以年份或月份为单位)、成本(以元为单位)。作出进度安排,分配资源,建立项目组织及任用人员(包括人员的地位、作用、职责、规章制度等),根据规模和工作量估算分配任务。进行风险分析,包括风险识别、风险估计、风险优化、风险驾驭策略、风险解决和风险监督。这些步骤贯穿在软件工程过程中。制定质量管理指标:如何识别定义好的任务?管理人员对结束时间如何掌握,并如何识别和监控关键路径以确保结束?对进展如何度量?以及如何建立分隔任务的里程碑。编制预算和成本。准备环境和基础设施等。(3)计划的追踪和控制一旦建立了进度安排,就可以开始着手追踪和控制活动。由项目管理人员负责在过程执行时监督过程的实施,提供过程进展的内部报告,并按合同规定向需方提供外部报告。对于在进度安排中标明的每一个任务,如果任务实际完成日期滞后于进度安排,则管理人员可以使用一种自动的项目进度安排工具来确定在项目的中间里程碑上进度误期所造成的影响。可对资源重新定向,对任务重新安排,或者(做为最坏的结果)可以修改交付日期以调整已经暴露的问题。用这种方式可以较好地控制软件的开发。(4)评审和评价计划的完成程度项目管理人员应对计划完成程度进行评审,对项目进行评价。并对计划和项目进行检查,使之在变更或完成后保持完整性和一致性。4(5)编写管理文档项目管理人员根据合同确定软件开发过程是否完成。如果完成,应从完整性方面检查项目完成的结果和记录,并把这些结果和记录编写成文档并存档。3、软件生产率和质量的度量(1)软件度量对软件进行度量,是为了表明软件产品的质量,弄清软件开发人员的生产率,给出使用了新的软件工程方法和工具所得到的(在生产率和质量两方面)的效益,建立项目估算的“基线,帮助调整对新的工具和附加培训的要求。软件度量分为两类:直接度量:软件工程过程的直接度量包括所投入的成本和工作量。软件产品的直接度量包括产生的代码行数(LOC)、执行速度、存储量大小、在某种时间周期中所报告的差错数。间接度量:产品的间接度量则包括功能性、复杂性、效率、可靠性、可维护性和许多其它的质量特性。只要事先建立特定的度量规程,很容易做到直接度量开发软件所需要的成本和工作量、产生的代码行数等。但是,软件的功能性、效率、可维护性等质量特性却很难用直接度量判明,只有通过间接度量才能推断。我们可进一步将软件度量如图9.5所示那样分类。软件生产率度量主要关注软件工程过程的结果;软件质量度量则指明了软件适应明确和不明确的用户要求(软件使用合理性)到什么程度;技术度量主要关注软件的一些特性(如逻辑复杂性、模块化程度)而不是软件开发的全过程。从图9.5中还可以看到另一种分类方法:面向规模的度量用于收集与直接度量有关的软件工程输出的信息和质量信息。面向功能的度量提供直接度量的尺度。面向人的度量则收集有关人们开发软件所用方式的信息和人们理解有关工具和方法的效率的信息。(2)面向规模的度量面向规模的度量是对软件和软件开发过程的直接度量。首先需要建立一个如表9.1所示的面向规模的数据表格,记录过去几年完成的每一个软件项目和关于这些项目的相应面向规模的数据。表9.1面向规模的度量项目工作量(人月)元(千)规模(KLOC)文档页数错误数开发人数aaa-012416812.1365293ccc-046244027.21224865fff-034331417.51050646…………………对于每一个项目,可以根据表格中列出的基本数据进行一些简单的面向规模的生产率和质量的度量。例如,可以根据表9.1对所有的项目计算出平均值:生产率=KLOC/PM(人月)成本=元/LOC质量=错误数/KLOC文档=文档页数/KLOC图9.5软件度量5(3)面向功能的度量面向功能的软件度量是对软件和软件开发过程的间接度量。面向功能度量的关注点在于程序的“功能性”和“实用性”,而不是对LOC计数。一种典型的生产率度量法叫做功能点度量,该方法利用软件信息域中的一些计数度量和软件复杂性估计的经验关系式而导出功能点FPs(FunctionPoints)。功能点通过填写表9.2所示的表格来计算。首先确定五个信息域的特征,并在表格中相应位置给出计数。信息域的值以如下方式定义:用户输入数:各个用户输入是面向不同应用的输入数据,对它们都要进行计数。输入数据应有别于查询数据,它们应分别计数。用户输出数:各个用户输出是为用户提供的面向应用的输出信息,它们均应计数。这里的输出是指报告,屏幕信息,错误信息等,在报告中的各数据项不应再分别计数。用户查询数:查询是一种联机输入,它导致软件以联机输出的方式生成某种即时的响应。每一个不同的查询都要计数。文件数:每一个逻辑主文件都应计数。这里的逻辑主文件,是指逻辑上的一组数据,它们可以是一个大的数据库的一部分,也可以是一个单独的文件外部接口数:对所有被用来将信息传送到另一个系统中的机器可读写的接口(即磁带或磁盘上的数据文件)均应计数。表9.2功能点度量的计算加权因数简单中间复杂用户输入数□□□346=□□□用户输出数□□□457=□□□用户查询数□□□346=□□□文件数□□□71015=□□□外部接口数□□□5710=□□□总计数□□□一旦收集到上述数据,就可以计算出与每一个计数相关的复杂性值。使用功能点方法的机构要自行拟定一些准则以确定一个特定项是简单的、平均的还是复杂的。计算功能点,使用如下的关系式:FP=总计数×〔0.65+0.01×SUM(Fi)〕(9.1)其中,总计数是由表9.2所得到的所有加权计数项的和;Fi(i=1到14)是复杂性校正值,它们应通过逐一回答表9.3所提问题来确定。SUM(Fi)是求和函数。上述等式中的常数和应用于信息域计数的加权因数可经验地确定。一旦计算出功能点,就可以仿照LOC的方式度量软件的生产率、质量和其它属性:生产率=FP/PM(人月)成本=元/FP质量=错误数/FP文档=文档页数/FP表9.3计算功能点的校正值评定每个校正因素的尺度是0―5012345没有影响偶然的适中的普通的重要的极重要的计数加权计数信息域参数6Fi1系统是否需要可靠的备份和恢复?2是否需要数据通信?3是否有分