1
 软件工程
1.11.2.5 9.2.5 能力成熟度模型

9.2.5 能力成熟度模型

能力成熟度模型(Capability Maturity Model,CMM)并不是一个软件生存周期模型,而是改进软件过程的一种策略,它与实际使用的过程模型无关。1986年,美国卡内基梅隆大学软件工程研究所首次提出了能力成熟度模型,不过在当时它被称为过程成熟度模型。多年来,软件开发项目不能按期完成,软件产品的质量不能令用户满意,再加上软件开发成本超出预算,这些是许多软件开发组织都遇到过的难题。近20年中,不少人试图通过采用新的软件开发技术来解决在软件生产率和软件质量等方面存在的问题,但效果并不令人十分满意。上述事实促使人们进一步考察软件过程,从而发现关键问题在于对软件过程的管理不尽如人意。事实表明,在无规则和混乱的管理之下,先进的技术和工具并不能发挥应有的作用。人们认识到,改进对软件过程的管理是解决上述难题的突破口,再也不能忽视软件过程中管理的关键作用了。

能力成熟度模型的基本思想是,因为问题是由管理软件过程的方法不当而引起的,所以新软件技术的运用并不会自动提高生产率和软件质量。能力成熟度模型有助于软件开发组织建立一个有规律的、成熟的软件过程。改进后的过程将开发出质量更好的软件,使更多的软件项目免受时间和费用超支之苦。

软件过程包括各种活动、技术和工具,因此,它实际上既包括了软件生产的技术方面,又包括了管理方面。CMM策略力图改进软件过程的管理,而在技术方面的改进是其必然的结果。

必须记住,对软件过程的改进不可能在一夜之间完成,CMM是以增量方式逐步引入变化的。CMM明确地定义了5个不同的成熟度等级,一个软件开发组织可用一系列小的改良性步骤向更高的成熟度等级迈进。

1.能力成熟度模型的结构

能力成熟度模型包括以下组成成分。

1)成熟度等级

一个成熟度等级(Maturity Levels)是在朝着实现成熟软件过程进化途中的一个妥善定义的平台,5个成熟度等级构成了CMM的顶层结构。

2)过程能力

软件过程能力(Process Capability),描述通过遵循软件过程能实现预期结果的程度。一个组织的软件过程能力提供一种“预测该组织承担下一个软件项目时,预期最可能得到的结果”的方法。

3)关键过程域

每个成熟度等级由若干关键过程域(Key Process Areas,KPA)组成。每个关键过程域都标识出一串相关的活动,当完成这些活动时,所达到的一组目标对建立该过程成熟度等级是至关重要的。关键过程域分别定义在各个成熟度等级之中,并与之关联在一起,例如,等级2的一个关键过程域是软件项目计划。

4)目标

目标(Goals)概括了关键过程域中的关键实践,并可用于确定一个组织或项目是否已有效地实施了该关键过程域。目标表示每个关键过程域的范围、边界和意图,例如,关键过程域“软件项目计划”的一个目标是“软件估算已经文档化,供计划和跟踪软件项目使用”。

5)公共特性

CMM把关键实践分别归入下列五个公共特性(Common Features)之中,即执行约定、执行能力、实施活动、度量和验证。公共特性是一种属性,它能指示一个关键过程域的实施和规范化是否是有效的、可重复的和持久的。

6)关键实践

每个关键过程域都用若干关键实践(Key Practices)来描述,实施关键实践有助于实现相应的关键过程域的目标。关键实践描述是对关键过程域的有效实施和规范化贡献最大的基础设施和活动的描述。例如,在关键过程域“软件项目计划”,一个关键实践是“按照已文档化的规程制订项目的软件开发计划”。

图9-2描绘了CMM的结构。

2.能力成熟度等级

对软件过程的改进是在完成一个一个小的改进步骤的基础之上不断进行的渐进过程,而不是一蹴而就的彻底革命。在CMM中把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用于测量软件组织的软件过程成熟度和评价其软件过程能力,这些等级还帮助软件组织把应做的改进工作排出优先次序。成熟度等级是妥善定义的向成熟软件组织前进途中的平台,每一个成熟度等级都为过程的继续改进提供一个台阶。CMM通过定义能力成熟度的5个等级,引导软件开发组织不断识别出其软件过程的缺陷,并指出应该做哪些改进,但是它并不提供做这些改进的具体措施。

能力成熟度的5个等级从低到高依次是:初始级、可重复级、已定义级、已管理级和优化级。下面介绍能力成熟度的这5个等级。

1)初始级

在这一级,软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的,项目能否成功完全取决于个人能力。

img175

图9-2 CMM结构

处于这个最低成熟度等级的组织,基本上没有健全的软件工程管理制度。每件事情都以特殊的方法来做。如果一个项目碰巧由一个有能力的管理员和一个优秀的软件开发组承担,则这个项目可能是成功的。但是,通常的情况是,由于缺乏健全的总体管理和详细计划,延期交付和费用超支的情况经常发生。结果,大多数行动只是应付危机,而不是执行事先计划好的任务。处于初始级的组织,由于软件过程完全取决于当前的人员配备,所以具有不可预测性,人员变了,过程也随之改变。因此,不可能准确地预测产品的开发时间和成本。目前,世界上大多数软件开发公司都处于初始级。

2)可重复级

在这一级,建立了基本的项目管理过程,以追踪成本、进度和功能性。已经建立起来了必要的过程规范,使得可以重复以前类似项目所取得的成功。

在这一级,有些基本的软件项目管理行为、设计和管理技术是基于相似产品开发的经验确定的,因此称为可重复级。在这一级采取了一些措施,以实现一个完备过程必不可少的第一步。典型的措施包括仔细地跟踪费用和进度。不像初始级那样处于危机状态才采取行动,管理人员在问题出现时可及时发现并立即采取补救行动,以防止问题变成危机。关键是如果没有采取这些措施,要在问题变得无法收拾前发现它们是不可能的。在一个项目中采取的措施,也可用于为未来的项目制订实现期限和费用的计划。

3)已定义级

在这一级,用于管理和工程活动的软件过程已经文档化和标准化,并且已经集成到整个组织的软件过程中。所有项目都使用文档化的、组织批准的过程来开发和维护软件。这一级包含了可重复级的所有特征。

在这一级中,已经有了为软件过程编写完整的文档,对软件过程的管理方面和技术方面都做了明确定义,并按需要不断地改进软件过程,已经采用评审的办法来保证软件的质量。在这一级,可采用诸如CASE环境之类的软件工具或开发环境来进一步提高软件质量和生产率。而在初始级中,采用“高技术”只会使这一危机驱动的软件过程更加混乱。

4)已管理级

在这一级,已收集了软件过程和产品质量的详细度量数据,使用这些详细的度量数据,能够定量地理解和控制软件过程和产品。这一级包含了已定义级的所有特征。

处于已管理级的公司为每个项目设定并不断地测量质量和生产目标,当偏离目标太多时,就应采取行动来修正。

5)优化级

在这一级,通过定量的反馈能够实现持续的过程改进,这些反馈是从过程及对新想法和技术的测试中获得的。这一级包含了已管理级的所有特征。

处于优化级的组织的目标是持续地改进软件过程。这样的组织使用统计质量和过程控制技术,从各个方面获得的知识将运用在未来的项目中,从而使软件过程进入良性循环,使生产率和质量稳步提高。

经验表明,提高一个完整的成熟度等级通常需要花费18个月到3年的时间,但是从初始级上升到可重复级有时要花费3年甚至5年的时间。这表明要向一个迄今仍处于特殊的和被动的行动方式的企业灌输系统的方式将多么困难。

尽管有些组织已经达到了可重复级和已定义级成熟度,但是,迄今为止还没有一个组织达到已管理级和优化级(个别项目或小组达到了这两级)。因此,这两个最高级还是未来的目标。

3.关键过程域

能力成熟度模型并不详细描述所有与软件开发和维护有关的过程,但是,有一些过程是决定过程能力的关键因素,这就是CMM所指的关键过程域。关键过程域是达到一个成熟度等级的必要条件。

除初始级之外,每个成熟度等级都包含几个关键过程域,指明了为改进其软件过程,软件开发组织应该重视的区域,同时也指明了为达到某个成熟度等级所必须解决的问题。

下面给出在每个成熟度等级应该实现的关键过程域。注意,下面列出的关键过程域是累加的,例如,已定义级中包含了可重复级的所有关键过程域再加上已定义级特有的关键过程域。

可重复级包含了软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪和监督、软件项目计划及需求管理;已定义级包含了同事复审、组间协作、软件产品工程、集成的软件管理、培训计划、组织过程定义及组织过程焦点;已管理级包含了软件质量管理及定量的过程管理;优化级包含了过程变化管理、技术变化管理及错误预防。

4.应用CMM

美国国防部(DoD)投资研究CMM的最初目标之一是评价投标为DoD生产软件的承包商的软件过程,将合同给那些过程较成熟的承包商,以此来提高国防软件的质量。现在,CMM的应用已经远远超出了改进DoD软件过程这个目标,正在被众多希望提高软件质量和生产率的软件开发组织所应用。

CMM的用途主要有两个:软件开发组织用它来改进开发和维护软件的过程;政府或商业企业用它来评价与一个特定的软件公司签订软件项目合同的风险。

为了帮助各个软件组织达到更高成熟度等级,美国卡内基梅隆大学软件工程研究所已经设计了一系列成熟度提问单,作为成熟度等级评估的基础。评估的目标是,明确一个组织当前使用的软件过程的缺点,并指出该组织改进其软件过程的方法。