谈谈CMMI(一)

      项目过程 2007-4-24 17:21

                                                   CMM的若干概念                                       

1.什么是CMM

CMM是能力成熟度模型(Capability Maturity Model)的缩写词。在软件业中实质上就是指Software Capability Maturity ModelSW-CMM),即软件能力成熟度模型,通常简化描述成CMM。所以,CMM就是指软件能力成熟度模型,它是美国国防部对软件承包商软件能力评估的一种模型,也是承包商改进其软件过程的一种途径。CMM在一些文献中也描述成Capability Maturity Model for Software

CMM的本质是软件管理工程的一个部分,它是对于软件组织在定义,实现,度量,控制和改善其软件过程的进程中各个发展阶段的描述。简单地说,CMM是一种用于评价软件承包能力并帮助其改善软件质量的方法,也就是评估企业软件能力与成熟度的一套标准。它通过5个不断进化的层次来描述和评定软件企业软件生产的历史和现状。CMM1987年由美国研制成功,是目前国际上最为流行最为实用的软件生产过程标准和软件企业成熟度等级认证标准。

2.CMM产生的背景与其发展

1)软件生产的特殊性与复杂性

软件产品的开发与其他任何工业产品的生产有着很大的不同。软件产品基本上纯粹是人们逻辑思维过程的产物。一个软件,在写出程序并拿到计算机上成功运行之前,软件开发的进展情况是难以衡量和控制的,质量也难以评价和保证,工作量很难估计。而且随着软件复杂性的提高,软件基本上不再是仅靠个人单打独斗就能完成的产品,软件基本上是群体智慧的结晶。但是,软件基本上是靠手工作坊式生产的,一个群体作坊,给复杂的软件生产带来很多问题,使得软件开发的复杂性和工作量都极大的增加,开发的进程难以衡量与控制,软件质量难以评价与保证。数十年来,虽然软件开发技术获得了巨大的进展(见P51-1),但是软件项目的失败还是屡见不鲜。

2)软件流产层出不穷

随着现代信息产业的蓬勃发展,软件开发已经成为一项浩大繁复的工程。就像是建造一座宏伟的宫殿,从计划、设计到施工,每一个环节都必须严格把关,稍有不慎,整个工程就会失败。据资料显示,仅美国,每年大约有18万个以上的信息技术项目,耗资累及$ 2500亿美元,其中25-30%的项目会流产。由此可见,由于管理不善和设计上的失误所造成的损失是巨大的。现代软件开发的管理和方法论显得比以往任何时候都更为重要。

3)软件开发的首要问题

软件工程概念的引入和实施虽然在一定程度上对这一问题能有所缓解,但并未从根本上解决软件大生产的诸多问题,软件开发仍有许多不确定性和随意性,不可控性随处可见。人们通过专门的研究发现,软件开发的首要问题并不是技术问题,而是管理问题。换句话更确切地说,从根本上它是软件开发过程的如何制定、操作、管理与控制的问题。

所谓软件开发过程,是指包括项目的开发阶段、开发方法、技术等方面的决策和与软件及其相关工件(如项目计划、文档、系统模型、源码、测试用例和使用手册等)相关的一系列活动。软件开发机构不仅需要一个软件开发过程,更需要一个适合自己需求的软件开发过程。不同的应用软件需要不同的开发方法,因此为客户项目定制合适的软件开发方法或过程不仅是软件开发商的需要也是与客户勾通和掌控项目开发获得成功的关键。

CMM就是在这种情况下提出来的,其目的主要着眼于使一个软件组织对于软件过程管理能有章可循,有法可依,并根据现状不断改进自己的软件过程,使之逐步达到在软件大生产中呈现高效率、低成本和高质量的状态。同时,也为软件发包商提供评估软件开发承包者的软件过程能力的依据。

4CMM的诞生与演变

CMM最早于1987年由美国卡内基梅隆大学(Carnegie Mellon UniversityCMU)软件工程研究所Software Engineering InstituteSEI)受美国国防部委托研究提出来的,是以W.S.Humphrey为首的研究小组发表的一个研究成果承制方软件工程能力的评估方法为开端。

1990SEI公布CMM0.0版。1991SEI公布了包含第二级KPA方案的CMM0.4版及包含第三级方案的CMM0.5版,同年,又发布了包含第四级和第五级KPA方案的0.7版。

1991年底发布CMM1.0版,1993SEI公布CMM1.1版。目前通行的版本是1.1版,改进版2.0版于199711月完成,但应美国国防部的要求未予发布,改而致力于CMMI的研究。

CMMICapability Maturity Model Integration)能力成熟度模型集成,将把现有的和将来发展出来的各种能力成熟度模型集成到一个框架中去。这个框架用于解决两个问题:第一,软件获取办法的改革;第二,从集成产品与过程发展的角度出发,建立一种包含健全的系统开发原则的过程改进。因此,CMMI整合了Software CMMSystems Eng-CMMPeople CMMAcquisition CMM等,由此建立起包括软件工程、系统工程和软件采购等在内的诸模型集成,以解决除软件开发以外的软件系统工程和软件采购工作中的迫切需求。

目前,CMMI框架包括了软件能力成熟度模型CMM 2.0草案,即软件工程能力成熟度模型(SW-CMM)、系统工程能力成熟度模型(SE-CMM)、集成的产品和过程开发能力成熟度模型(IPPD-CMM)、软件采购能力成熟度模型(SS-CMM)四大模型。

SEI推出的CMMI模型并不是对原来CMM模型的简单升级,而是更广更深层次的系统集成,其中关键过程域CMM18个上升到CMMI25个,目标CMM52个上升到CMMI105个,关键实践CMM316条上升到CMMI485条。CMMI融入了最新的软件管理实践,同时弥补了SW-CMM中的缺陷。

199710SEI停止了对CMM的研究,转而致力于CMMI的开发。2000811SEI发布了CMMI1.0200112月颁布CMMI1.1版,20068SEI又推出了CMMI1.2版本。

当前,学术界和工业界公认CMU-SEICMMCMMI是目前最好的软件过程,已成为业界事实上的软件过程的工业标准。

5)背景因素和历史与CMM

信息时代,软件质量的重要性越来越为人们所认识。软件是产品、是装备、是工具,其质量使得顾客满意,是产品市场开拓、事业得以发展的关键。而软件工程领域在1992年至1997年取得了前所未有的进展,其成果超过软件工程领域过去15年来的成就总和。

软件管理工程引起广泛注意源于20世纪70年代中期。当时美国国防部曾立题专门研究软件项目做不好的原因,发现70%的项目是因为管理不善而引起,而并不是因为技术实力不够,进而得出一个结论,即管理是影响软件研发项目全局的因素,而技术只影响局部。到了20世纪90年代中期,软件管理工程不善的问题仍然存在,大约只有10%的项目能够在预定的费用和进度下交付。软件项目失败的主要原因有:需求定义不明确;缺乏一个好的软件开发过程;没有一个统一领导的产品研发小组;子合同管理不严格;没有经常注意改善软件过程;对软件构架很不重视;软件界面定义不善且缺乏合适的控制;软件升级暴露了硬件的缺点;关心创新而不关心费用和风险;军用标准太少且不够完善等等。在关系到软件项目成功与否的众多因素中,软件度量、工作量估计、项目规划、进展控制、需求变化和风险管理等都是与工程管理直接相关的因素。由此可见,软件管理工程的意义至关重要。

软件管理工程和其它工程管理相比有其特殊性。首先,软件是知识产品,进度和质量都难以度量,生产效率也难以保证。其次,软件系统复杂程度也是超乎想象的。因为软件复杂和难以度量,软件管理工程的发展还很不成熟。

软件管理工程的发展,在经历了从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试为特征的结构化生产时代,到90年代中期,以CMM模型的成熟模型和日益为市场接受为标志,已经进入以软件过程成熟度模型CMM、个体软件过程PSP和群组软件过程TSP为标志的以软件过程为中心的时代,而软件发展第三个时代,及软件工业化生产时代,从90年代中期软件过程技术的成熟和面向对象技术、构件技术的发展为基础,已经渐露端倪,估计到2005年,可以实现真正的软件工业化生产,这个趋势应该引起软件企业界和有关部门的高度重视,及早采取措施,跟上世界软件发展的脚步。软件生产转向以改善软件过程为中心,是世界各国软件产业或迟或早都要走的道路。

软件过程改善是当前软件管理工程的核心问题。50多年来计算事业的发展使人们认识到要高效率、高质量和低成本地开发软件,必须改善软件生产过程。软件管理工程经历了一条从70年代开始以结构化分析与设计、结构化评审、结构化程序设计以及结构化测试到90年代中期以过程成熟模型CMM、个体软件过程PSP Personal Software Process和群组软件过程TSPTeam Software Process为标志的以软件过程为中心的时代,走向以软件过程技术的成熟、面向对象技术和构件技术的发展为基础的真正软件工业化生产的道路。软件生产转向以改善软件过程为中心,是世界各国软件产业或迟或早都要走的道路。软件工业已经或正在经历着"软件过程的成熟化",并向"软件的工业化"渐进过渡。规范的软件过程是软件工业化的必要条件。

6CMM与软件过程的其他流派

软件过程研究的是如何将人员、技术和工具等组织起来,通过有效的管理手段,提高软件生产的效率,保证软件产品的质量。由此诞生了软件过程的三个流派:CMU-SEICMM/PSP/TSPISO 9000质量标准体系;ISO/IEC 15504SPICE)。

CMM/PSP/TSP即软件能力成熟度模型 / 个体软件过程 / 群组软件过程,是由1987年美国卡内基梅隆大学软件工程研究所(CMU-SEI)发表的研究成果"承制方软件工程能力的评估方法"发展起来的;ISO 9000质量标准体系是在70年代由欧洲首先采用的,其后在美国和世界其他地区也迅速地发展起来。目前,欧洲联合会积极促进软件质量的制度化,提出了如下ISO9000软件标准系列:ISO9001ISO9000-3ISO9004-2ISO9004-4ISO9002ISO/IEC 15504SPICE)是1991年国际标准化组织采纳了一项动议,开展调查研究,按照CMU-SEI的基本思路,产生的技术报告ISO/IEC 15504--信息技术软件过程评估。

目前,学术界和工业界公认美国 Carnegie Mellon 大学软件工程研究所(CMU-SEI)开发的软件能力成熟度模型CMM是当前最好的软件过程,已成为业界事实上的软件过程的工业标准。

3CMM所展示的内容

1CMM的主要用途

用于软件过程评估:评估软件企业软件过程的现状,找出最紧迫的问题,指出改进方向。CMM主要是描述一个软件企业如何获得生存、发展,获得较高效率所必需遵循的规则和方法,它也是评判一个软件企业的能力和级别的度量。

用于软件过程的改进:帮助企业对其软件过程制定改进计划、标准和措施,引导企业向更好的方向前进。

软件能力评价:为软件发包商提供对承包者的软件过程能力评判的方法和依据。

2)把软件企业划分等级与等级进化

CMM依据企业软件过程的成熟程度把软件企业分类为五种级别,其中第2级称为可重复级,属于成熟度入门级;第5级,即为优化级,属软件企业中的顶级企业,是一种成熟度最高级别的软件企业;至于第1级(初始级),其软件过程是未加定义的随意过程,项目的执行是无序的甚至是混乱的,没有为软件开发、维护工作提供一个稳定的环境。严格说来它不属于成熟度等级,或说是成熟度为零的等级。每一种级别的软件企业都要逐次过度到更高一级中去,使企业逐步走向成熟。

具体来说,CMM是基于以往软件工程的经验和教训,为软件的过程能力提供了一个阶梯式的改进框架,指明一个软件组织在软件开发方面需要做好哪些主要管理工作,明确这些工作之间的关系,以及以怎样的先后次序,一步一步地做好工作,实现这些目标,从而使企业走向成熟。

CMM框架进化阶梯共有五级。第一级实际上是一个起点,任何准备按CMM 框架进化的企业一般都处于这个起点上,并通过这个起点向第二级迈进。除第一级外,每一级都设定了一组目标,如果达到了这组目标,则表明达到了这个成熟级别,可以向下一个级别迈进。CMM 不主张跨越级别的进化,因为从第二级起,每一个低的级别实现均是更高级别实现的基础。

二、软件开发的特殊性与实施CMM的必要性

1.软件开发的特殊性与管理过程规范的必要性

软件产品的开发与其他工业产品的开发有着很大的差别,前者主要是逻辑思维的过程,软件开发工作量很难估计,开发进展难以衡量,开发质量难以控制和评价,软件规模随复杂性呈指数增长,软件维护极为困难。

根据多年的经验和教训,人们通过研究总结出软件开发的首要问题并不是技术问题,而是管理问题。因此,如何从管理层面入手使企业过程建立某种规范,逐步使企业变得高效率就成为关键问题。建立管理软件项目的策略和执行这些策略的过程是企业软件开发成功的关键。

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

2.改进软件质量控制的必要性和有效性

软件质量是一模糊的、捉摸不定的概念。我们常常听说:某某软件好用, 某某软件不好用;某某某软件功能全、结构合理, 某某某软件功能单一、操作困难……这些模模糊糊的语言不能算作是软件质量评价,更不能算作是软件质量科学的定量的评价。软件质量,乃至于任何产品质量,都是一个很复杂的事物性质和行为。产品质量,包括软件质量,是人们实践产物的属性和行为,是可以认识,可以科学地描述的。可以通过一些方法和人类活动,来改进质量。

实施CMM是改进软件质量的有效方法。控制软件生产过程、提高软件生产者组织性和软件生产者个人能力的有效合理的方法,与软件工程和很多研究领域及实际问题有关。主要相关领域和因素有:需求工程(REREQUIREMENTS ENGINEERING)和软件复用(SRSOFTWARE REUSE)。理论上,需求工程是应用已被证明的原理、技术和工具,帮助系统分析人员理解问题或描述产品的外在行为。软件复用是指定义为利用工程知识或方法,由一个已存在的系统,来建造一个新系统。这种技术,可改进软件产品质量和生产率。此外,还有软件检查、软件计量、软件可靠性、软件可维修性、软件工具评估和选择等。

3.实施CMM的效果实例与统计

20026月的一个报道称,据通过了CMM五级的摩托罗拉中国软件中心统计,从1997年至所报道的时刻,软件中心的人均生产率提高了6倍,错误率降低了24倍,客户满意度上升了95%。实践证明,CMM能够较为准确地反映软件企业质量管理水平,并为企业进一步的改进提供指导。

根据SEI的统计,软件企业在引入CMM管理后,劳动生产率平均增长35%,错误比率平均减少39%,平均成本回报率为5∶1

三、软件工程和软件过程管理与CMM

1.软件工程与CMM

把软件开发的整个过程当作一项工程项目来看待和实施,即软件开发工程化,这是一项不少的进步。软件工程是把软件开发技术和开发的管理技术柔合进来,使得软件开发较好地走上有章可循有法可依的境地。软件工程强调软件开发规范化和开发信息文档化,这就使得对开发计划、开发进度、开发质量、资源使用等得到较好的控制。软件工程是一种求解软件的过程。

软件工程还不足以从根本上解决软件危机,这就是产生出软件CMM的原因。CMM的核心就是要帮助你优化管理、提高质量、降低成本、提高市场效益。CMM是在软件工程的基础上的再进步,它是使一个软件企业如何更好地实施软件工程。

2.软件过程能力改善

CMM着眼于一个软件组织、着眼于软件过程的能力。它提供了一个软件过程的改进框架,这个框架与软件生命周期和所使用的开发技术都无关。

所谓软件过程能力,是指企业从事软件开发和生产的过程本身透明化、规范化和运行强制化。

3CMM的根本内涵

简单地说,CMM模型是一个描述和分析软件企业的软件过能能力的发展程度,指明企业改善软件过程能力的前进方向。

CMM框架用5个不断进化的层次来评定企业软件生产的历史与现状,其中初始层是混沌的过程,可重复层是经过训练的软件过程,定义层是标准一致的软件过程,管理层是可预测的软件过程,优化层是能持续改善的软件过程。

任何单位所实施的软件过程,都可能是在某一方面比较成熟,在另一方面不够成熟,但总体上必然属于这5个层次中的某一个层次。而在某个层次内部,也有成熟程度的区别。在CMM框架的不同层次中,需要解决带有不同层次特征的软件过程问题。因此,一个软件开发单位首先需要了解自己正处于哪一个层次,然后才能够对症下药地针对该层次的特殊要求解决相关问题,这样才能收到事半功倍的软件过程改善效果。任何软件开发单位在致力于软件过程改善时,只能由所处的层次向紧邻的上一层次进化,而且在由某一成熟层次向上一更成熟层次进化时,在原有层次中的那些已经具备的能力还必须得到保持与发扬。

软件产品质量在很大程度上取决于构筑软件时所使用的软件开发和维护过程的质量。软件过程是人员密集和设计密集的作业过程。若缺乏有素训练,就难以建立起支持成功实现软件过程的基础,改进工作亦将难以取得成效。CMM描述的这个框架正是勾勒出从无定规的混沌过程向训练有素的成熟过程演进的途径。

四、CMMPSPTSP

CMM是过程改善的第一步,它提供了评价组织的能力、识别优先改善需求和追踪改善进展的管理方式。企业只有着手CMM改善后,才能接受需要规划的事实,认识到质量的重要性,才能注重对员工经常进行培训,合理分配项目人员,并且建立起有效的项目小组。然而,它实现的成功与否与组织内部有关人员的积极参与和创造性活动密不可分。

PSP能够指导软件工程师如何保证自己的工作质量,估计和规划自身的工作,度量和追踪个人的表现,管理自身的软件过程和产品质量。经过PSP学习和实践的正规训练,软件工程师们能够在他们参与的项目工作之中充分运用PSP,从而有助于CMM目标的实现。

TSP结合了CMM的管理方法和PSP的工程技能,通过告诉软件工程师如何将个体过程结合进小组软件过程,并将后者与组织进而整个管理系统相联系;通过告诉管理层如何支持和授权项目小组,坚持高质量的工作,并且依据数据进行项目的管理,向组织展示如何应用CMM的原则和PSP的技能去生产高质量的产品。

可以粗略地说,CMMCMMI偏重管理方面,而PSPTSP则较侧重技术方面,因此两者的结合是必不可少的。可以这样地说,PSPTSP是有效实施CMM的保证,反之,CMM能使PSPTSP发挥出最大的效能。

总之,单纯实施CMM,永远不能真正做到能力成熟度的升级,只有将实施CMM与实施PSPTSP有机地结合起来,才能发挥最大的效力。因此,软件过程框架应该是CMM/PSP/TSP的有机集成。

五、我国CMM的现状

国外:CMM认证国外起步较早。1990年,经过软件工程协会的评估,美国休斯公司成为第一个被认定为已达到软件成熟能力3级的企业。在1997年,该公司获得了由电子工程协会(IEEE)授予的计算机软件过程成就奖。

据统计,到1999年,全球已有近万家软件企业通过了CMM各级认证,其中大多是CMM2。通过CMM5认证有13家,通过四级和五级的有71家。其中,印度通过CMM4CMM5的有29家,通过ISO 9000CMM2的有近100家。据SEI统计,目前有大约300家印度软件公司通过了CMM认证,其中通过最高质量等级CMM5的有50余家,占全球的60%以上。高品质的管理决定了高品质的产品,从而也确立了印度在美国外包市场的垄断地位。难怪比尔·盖茨惊呼:“除美国外,下一个软件大国既不是欧洲国家,也不是日本,而是印度

我国:199976日鼎新信息技术开发公司(清华同方与IBM合资)是我国首家通过了CMM二级认证的企业。

200010月东大阿尔派软件股份有限公司(东软前身)通过了二级1997年通过ISO9001-2000认证),2001626日,东软通过了我国首家CMM三级评估,东软在2002年底又拿下了CMM 五级认证,2004123日又通过了由印度QAI India公司组织的CMMI5评估。东软是我国第一家获得CMM5CMMI5认证的软件企业(未计外资企业)。

20011213日四川托普直接申请并通过了CMM三级评估。

1995年底才成立的摩托罗拉中国公司的网络研发中心,在实施CMM上三年内完成了三级跳:1998年内部评审,取得了等同CMM3级的水准;1999年底达到了第四级20009月通过了五级(全球第39个)。广州奔步电脑有限公司(美资)于20031219日通过了CMMI 5认证。

2001121日联想软件通过CMM二级认证,20014月西安交大博通资讯通过CMM二级评审,200212月博通资讯又通过了CMM三级的评审。200161日用友通过CMM二级,为此北京市奖励30万元。2001年底山东浪潮、北京北佳、广州新太科技、北大方正等相继通过了CMM二级评估(新太科技于20033月又通过了三级)。20041月,联想软件通过了CMM三级的评估。

2001年,华为研发系统开始实施CMM管理,20011210日华为印度研究所通过CMM四级20038月又正式通过CMM五级国际认证。2004年华为北京研究所、南京研究所也先后取得CMM四级认证。

目前我国软件业界实施CMM认证的浪潮风起云涌,截至到20043月,国内已经有157家企业通过了CMM 2,有48家企业通过了CMM 310家企业通过了CMM 4,有6家企业通过的CMM 5。因此,在我国1400多家的软件企业中,已经通过了CMMCMMI的各级认证的软件企业已经不下200多家。

 

说明:

1.有关PSPTSP的简介见所附资料《PSPTSP介绍》一文。

2.本章教案内容相对课文有所增补,内容顺序也不完全按课文安排,有些内容也从后续章节拿到前面来说了,例如第8章的某些内容。第2章也是大体如此。除第123章外其他章节增补较少。

3. CMM1.1是针对大型软件企业(500人以上)的,对小型的软件企业(50人以下)需要有所裁减。

 

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}