实践表明,软件过程需要不断完善,首先从非工程化的软件开发方式改变为工程化的软件方式,按照软件工程的系统方法进行软件的工程活动,进而不断完善和改进各个软件过程,从而不断提高软件过程能力,特别是完成软件产品在预算、进度、产品的质量等方面的风险也逐步降低。而CMM机构正是这些思想和方法的体现,事实上,CMM给软件机构提供了量度软件过程的尺子,同时,CMM也是一个指南,起到指导软件机构的作用。

       

        人们早已公认:软件产品的质量取决于软件开发过程,具有良好软件过程的软件机构能够开发出高质量的软件产品,但切实地在软件过程方面开展工作也只是十多年前的事。本文试着从软件质量保证方向出发,详细阐述CMM(the Capability Maturity Model)的来源、内容、应用及意义,目的是让从事软件活动的全体同仁了解、认识CMM,从而达到通过CMM培训,建立一套既能解决当前我国软件产业存在的问题,又能同国际软件市场接轨的软件质量保证模式,进一步帮助软件企业形成更先进、更科学、更新兴的管理模式。

  CMM的产生

 

        软件能力成熟度(the Capability Maturity Model for Software, 简称CMM)是美国软件工程研究所(Software Engineering Institute, 缩写为SEI)首先提出的,而CMM的基本思想是基于已有60多年历史的产品质量原理。希袄特(Walter Shewart)在30年代发表了统计质量控制原理,戴明(W.Edwards)和朱兰(Joseph Juran)的关于质量的著作又进一步发展和论证了该原理。

    实际上,将质量原理变为成熟度框架的思想是克劳斯比(Philip Crosby),他在著作“Quality is Free”首先提出,他的质量管理成熟度网络描绘了采用质量实践时的5个进化阶段,而该框架后来又由IBM的拉迪斯(Rom Radice)和他的同事们在汉弗莱(Watts Humphrey)指导下进一步改进以适应软件过程的需要。1986年,汉弗苹将此成熟框架带到了SEI并增加了成熟度等级的概念,将这些原理应用于软件开发,发展成为软件过程成熟度框架,形成了当前软件产业界正在使用的框架

       汉弗苹的成熟度架早期版本发表在1987年的SEI技术报告。该报告中还发表了初步的成熟度提问单,这个提问单作为工具给软件组织提供了软件过程评估的一种方法。1987年又进一步研制了软件过程评估和软件能力评价两种方法,以便估计软件过程成熟度。自1990年以来,SEI基于几年来将架运用到软件过程改进方面的经验,进一步扩展和精炼了该模型,目前,软件能力成熟度模型2.0版已经修订问世。



   CMM内容简介

 

1、比较

      在介绍CMM内容之前,首先概述一下不成熟软件组织与成熟软件组织的差异。在不成熟的软件单位,软件过程一般由实践者及其管理者在项目进程中临时拼凑而成,因而推迟进度和超出预算已成为惯例,产品质量难以预测,有时为了满足进度要求,常在产品功能和质量上做出让步。

        然而,一个成熟软件组织具有在全组织范围内管理软件、开发过程和维护过程的能力,规定的软件过程被正确无误地通知到所有员工,工作活动均按照已规划的过程进行。并通过可控的先导性试验和费效分析使这些过程得到改进,对已定义过程中的所有岗位及其职责都有清楚的描述,和通过文档与培训使全组织有关人员对已定义的软件过程都有很好的理解,从而使其软件过程所导致的生产率和质量能随时间的推移得到改进。

   1给出了不成熟和成熟软件组织的比较,这种比较分析不仅是形成软件能力成熟模型的基础,也有利于理解该模型

1    不成熟软件组织与成熟软件组织的比较

             名称 

  内容

不成熟的软件组织

成熟的软件组织

软件过程

临时拼凑、不能贯彻

有统一标准,且切实可行,并不断改进;通过培训,全员理解,各司其职,纪律严明

管理方式

反应式(消防式)

主动式,监控产品质量和顾客满意程度

进度、经费估计

无实际根据,硬件限定时,常在质量上作让步

有历史数据和客观依据,比较准确

质量管理

问题判断无基础,难预;进度滞后时,常减少或取消评审、测试等保证质量的活动

产品质量有保证,软件过程有纪律,有必要的支持性基础设施

 

2、CMM的一些基本概念

   1)软件过程:人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。

   2)软件过程能力:描述(开发组织或项目组)遵循其软件过程能够实现预期结果的程度,它既可对整个软件开发组织而言,也可对一个软件项目而言。

   3)软件过程性能:表示(开发组织或项目组)遵循其软件过程所得到的实际结果,软件过程性能描述的是已得到的实际结果,而软件过程能力则描述的是最可能的预期结果,它既可对整个软件开发组织而言,也可对一个特定项目而言。

   4)软件过程成熟:一个特定软件过程被明确和有效地定义,管理测量和控制的程度。

    5)软件能力成熟度等级:软件开发组织在走向成熟的途中几个具有明确定义的表示软件过程能力成熟度的平台

   6)关键过程域:每个软件能力成熟度等级包含若干个对该成熟度等级至关重要的过程域,它们的实施对达到该成熟度等级的目标起到保证作用。这些过程域就称为该成熟度等级的关键过程域,反之有非关键过程域是指对达到相应软件成熟度等级的目标不起关键作用。归纳为:互相关联的若干软件实践活动和有关基础设施的一个集合。

   7)关键实践:对关键过程域的实践起关键作用的方针、规程、措施、活动以及相关基础设施的建立。关键实践一般只描述“做什么”而不强制规定“如何做”。整个软件过程的改进是基于许多小的、渐进的步骤,而不是通过一次革命性的创新来实现的,这些小的渐进步骤就是通过一些着关键实践来实现。

   8)软件能力成熟度模型:随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力也伴随着这些阶段逐步前进,完成对软件组织进化阶段的描述模型

 

3、CMM模型概要

         软件开发的风险之所以大,是由于软件过程能力低,其中最关键的问题在于软件开发组织不能很好地管理其软件过程,从而使一些好的开发方法和技术起不到预期的作用。而且项目的成功也是通过工作组的杰出努力,所以仅仅建立在可得到特定人员上的成功不能为全组织的生产和质量的长期提高打下基础,必须在建立有效的软件工程实践和管理实践的基础设施方面,坚持不懈地努力,才能不断改进,才能持续地成功。

         CMM提供了一个框架,将软件过程改进的进化步骤组织成5个成熟等级,为过程不断改进奠定了循序渐进的基础。这5个成熟度等级定义了一个有序的尺度,用来测量一个组织的软件过程成熟和评价其软件过程能力,这些等级还能帮助组织自己对其改进工作排出优生次序。成熟度等级是已得到确切定义的,也是在向成熟软件组织前进途中的平台。每一个成熟度等级为连续改进提供一个台基。每一等级包含一组过程目标,通过实施相应的一组关键过程域达到这一组过程目标,当目标满足时,能使软件过程一个重要成分稳定。每达到成熟框架的一个等级,就建立起软件过程的一个相应成分,导致组织能力一定程度的增大。

       下面表2给出了CMM模型概要,表中的5个等级各有其不同的行为特征。要通过描述不同等级组织的行为特征:即一个组织为建立或改进软件过程所进行的活动,对每个项目所进行的活动和所产生的横跨各项目的过程能力

 

2   CMM模型概要

 

过程能力等级

特点

关键过程域

1 初始级

软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式(消防式)

 

2 可重复级

建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得成功。

需求管理

软件项目计划

软件项目跟踪和监督

软件子合同管理

软件质量保证

软件配置管理

3 已定义级

已将软件管理和工程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件。

组织过程定义

组织过程焦点

培训大纲

集成软件管理

软件产品工程

组织协调

同行专家评审

4 已定量管理级

收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解与控制

定量的过程管理

软件质量管理

5 优化级

过程的量化反馈和先进的新思想、新技术促进过程不断改进

缺陷预防

技术变更管理

过程变更管理

 

    通过表2,我们知道每个成熟度级的关键过程域,每个关键过程域包括一系列相关活动,只有全部完成这些活动,才能达到过程能力目标。为了达到这些相关目标,必须实施相应的关键实践。

通过表2,我们知道,关键过程域总共18个,现将包含的过程分为三类:如表3所示,这样,关键过程区域是怎样实施的也就更明白了。

3   关键过程区域的过程分类

 

         过程分类 等级

管理

(软件项目策划等)

组织

(高级管理者评审)

工程(需求分析、设计、测试等)

 

5 优化级

 

技术变更管理

定量变更管理

缺陷预防

4 已定量管理级

定量过程管理

软件质量管理

3 已定义级

集成软件管理

组织协调

组织过程焦点

组织过程定义

培训大纲

软件产品工程

同行专家评审

2 可重复级

需求管理

软件项目策划

软件项目跟踪和监督

软件子合同管理

软件质量保证

软件配置管理

 

 

1 初始级

无序过程

 

4、CMM的结构

        如前面所述,关键过程域的目标概括了关键过程域的关键实践,每个关键过程域包含的关键实践涉及了5个方面。这5个方面是:执行约定、执行能力、执行的活动、测量和分析及 验证实施。称之为5个共同特征,关键过程域所包含的关键实践全部按这5个共同特征加以组织,形成了CMM的结构,如图所示

通过以上分析,我们基本明白了CMM的基本内容、基本原理,下面再理一理以上一些内容。关键实践,无论属于哪个共同特征,都描述对关键过程域的有效实施和规范化贡献最大的基础设施或活动。一般说来,每个关键实践又可能另有若干实践(或称下级实践)用来帮助确定关键实践是否满意的实践。例如,等级2的一个关键过程域:软件项目计划,它所包含的关键实践总共有25个,其中:

       执行约定有2个,如约定1是指定项目软件经理负责协商和制定项目软件开发计划。 

       执行能力有4个,如能力1是对软件项目有文档化的经过批准的工作说明。

       执行的活动有15个,如活动5是识别或确定具有可管理规模的预定阶段的软件生存周期

       模型。

        测量和分析有1个,即进行测量,并用测量结果来确定软件项目计划活动的状态。

        验证实施有3个,如验证1是高级管理者定期参与评审软件项目计划活动。

        通过实施这些关键实践,就能实现软件项目策划这个关键域的下列3个目标:

       目标1:对计划和跟踪软件项目所用的软件估计已建立文档。

        目标2:软件项目的活动和约定是有计划的并已建立文档。

        目标3:受影响的组和个人同意他们关于软件项目的约定。

        通过以上分析,软件机构的最终质量保证模式可以用下图3说明,图3给出软件质量计划、质量控制、质量改进一个简单循环,其实,它归纳出CMM的真正内核,所以,可以说CMM的模型是一种新兴管理思想:连续改进(Continuos Improvement)循环的体现。

   CMM的应用

 

       CMM有两个基本用途:软件过程评估和软件能力评价。软件过程评估,目的是确定一个组织的当前软件过程的状态,找出组织所面临的急需解决的与软件过程有关问题,进而有步骤地实施软件过程改进,使组织的软件过程能力不断提高。因此,软件过程评估关注一个组织的软件过程有哪些需改进之处及其轻重缓急。评估组采用CMM来指导他们进行调查、分析和排优先次序。组织可利用这些调查结果,参照CMM中的关键实践所提供的指导,规划本组织软件过程的改进策略。

       软件能力评价,目的是识别合格的能完成软件工程项目的承制方,或者监控承制方现有软件工作中软件过程的状态,进而提出承制方应改进之处。软件能力评价关注识别一个特定项目在进度要求和预算限制内构造出高质量软件所面临的风险。在采购过程中可以对投标者进行软件能力评价。评价的结果,可用于确定在挑选承制方的风险,也可对现存的合同进行评价以便监控方的过程实施。从而识别出承制方的软件过程中潜在的可改进之处。

      由于软件过程评估和软件能力评价是有关不同的两种应用,因此所用的具体方法有明显差异但是两者都以CMM模型及其衍生产品为基础,实施的基本步骤是一致的。通过分析图4给出概要地评估和评价中的共同步骤:

CMM的其他应用,主要是组织内负责软件过程改进的机构,例如,软件工程过程组(SEPG),评价过程的重点放在复审文档化的审计记录上,这些记录能揭示组织实际执行的软件过程。

  CMM的意义

 

         首先CMM是软件过程改进的需要,著名的软件过程原理就有一条是“不断改进开发过程”由此可见,不断改进软件开发过程是软件工程的基本原理之一。其次,软件过程是软件生存周期的基本过程之一,1995年正式发布了一项国际标准,即ISO/IEC 12207信息技术——软件生存周期过程,这是软件过程研究的一个重要成果,这项标准科学地完成了软件生存周期的过程,总共17个,其中一个就是改进过程。实践表明,软件过程需要不断完善。

         最后,也是降低软件风险的需要。软件采购者的需要,软件产品或软件服务的采购单位的软件过程能力进行评价,而这种评价的依据是对该单位的软件过程能力进行评价,而这种评价的依据是对该单位的软件过程的评比结果。也是软件承制者的需要,软件产品研制单位和软件服务单位在响应顾客的需要进行投标时,为降低风险,需要对自己的软件过程能力进行评价,避免承担力所不及的任务,而这种评价的依据,仍然是根据实际需要,对相应软件过程的评估结果

(来源:http://www.lcs.legend.com.cn/product/cmm2/cmm-theory/down.htm)