UML软件工程组织

商业软件企业如何借鉴CMM管理?
发表者 hhrain 来源:SEPP中心
虽然近年来,商业信息化推动了我国商业企业的管理进步,提高了全行业的科技素质,然而,由于种种原因,商业信息化的成功项目所占比例并不太高,一个突
出的问题是软件系统/产品的研发周期长、质量低、成本高、开发进度难以控制、系统修改与维护困难等。
实践表明:要低投入、高效率、高质量地开发软件,仅仅依靠运用新的软件开发方法与技术所达到的效果是十分有限的,必须以改进并加强管理软件的生产过程
为中心,实施科学的、规范的软件工程管理,才是解决问题的根本所在。关于软件过程的改进和管理,目前国际上以卡内基·梅隆大学软件工程研究所CMU/SEI主持研究开发的软件能力成熟度模型(CMM,the Capability Maturity Model forSoftware)研究得最为深入,虽然目前还不是软件过程改进的工业标准,但用得较广。它为软件工程管理开辟了一条新的途径,能帮助软件企业改进和优化自身
的管理,在提高软件开发水平和效率的同时提高产品的质量和可靠性,实现软件生产工程化。

CMM模型是什么
如同一个人在某个特定领域的能力是积累起来的一样,一个企业的软件能力也是逐步获得和增长的。如果在其发展过程中能得到一个很好的指南,那么就能不断
达到一个个设定的目标,变得越来越成熟;否则可能会盲目发展,离自己的目标越来越远,甚至南辕北辙。CMM正是这样一个指南,它以几十年产品质量概念和软件工业的经验及教训作为基础,为企业的软件能力不断走向成熟提供了有效的步骤和框架。
1、CMM框架
CMM侧重于各项管理过程,将质量管理原理应用于软件成熟度框架的建立,指明了改进的目标,提供了循序渐进的步骤。根据软件生产的历史和现状,CMM框架可用5个不断进化的层次来表达,每个层次的主要特征为:
(1)初始级是混沌的过程。软件生产过程的特点是杂乱无章,有时甚至混乱,几
乎没有明确定义的步骤,项目软件的成功完全依赖核心人物,而没有相关组织、标准、规程的保证。
(2)可重复级是经过训练的软件过程。建立了基本的项目管理过程来跟踪成本、进度和机能,有必要的过程准则来运用以前同类项目的成功经验。
(3)已定义级是标准一致的软件过程。管理和工程的软件过程已文件化、标准化,并综合成整个软件开发组织的标准软件过程。所有的项目都采用根据实际情况
修改后得到的标准软件过程来发展和维护软件。
(4)已管理级是可预测的软件过程。制定了软件过程和产品质量的详细的度量标准。软件过程和产品的质量都被开发组织的成员所理解和控制。
(5)优化级是能持续改善的软件过程。加强了定量分析,通过来自过程质量反馈和来自新观念、新科技的反馈使过程能持续不断地改进。
基于这种级别的划分,既可以标识软件企业的过程能力,又可以方便地、有所遵循地实现持续不断的软件过程改进。因为,每种级别都提供了一个软件过程改进
层次,每一个层次是通过实现软件过程中的一些关键过程区域来实现达到软件成熟度结构的。例如,软件企业达到CMM的第二级,则它要实现可重复级的全部关键过程区域,这包括6个关键过程区域:需求管理、软件项目计划、软件项目跟踪和监督、软件子合同管理、软件质量保证和软件配置管理。这样便可真正地推动软件企业的能力提高。
2、基于CMM的软件过程管理
CMM模型的成熟度理论主要涉及对软件组织和各类资源的管理,以及对软件工程过程的定义管理和如何度量、管理、改进这些过程,同时还包含对软件工程过程中使用的开发工具和技术的管理。因此,CMM模型实质上是一个管理标准,其软件过程成熟度级别的高低实质上就是管理水平的高低。
在工程实践中,可视化是实用化的一种形式,是管理人员和不同人员之间进行交流的最重要手段。在CMM模型中,不同层次表现了不同的过程可见度,层次越高,过程的可见度越强,对过程的控制能力也越强。图1描述了不同成熟度级别下软件项目的可视状况以及不同成熟度级别所能采用的不同管理方式。
(1)初始级的可见度最低,整个软件过程像一个黑箱,处于一种不可控状态。对管理者或用户而言,只能看到项目的需求和项目的结果,无法看到项目的软件过程,无法对软件开发进行监督。管理者和决策者不可能根据开发过程状态及时作出合理决策,项目组经常处于“救火”状态。
(2)可重复级具有阶段可见度,可对软件过程实施阶段控制。开发过程好像一系列的黑盒子,可以按阶段来进行软件开发的控制和管理。但黑盒的内部结构仍不可见。这时已经建立了基本的项目管理活动,并在过程的检查点上对产品进行检查,以考察过程是否正常进行,或对发生的问题作出反应。用户也可在检查点上了解项目的进展。
(3)已定义级具有了企业自己的标准软件过程。其软件过程中任意两个控制点之间的过程内部结构是可见的,每一个管理者和工程师都明确自己的位置和责任以及相互之间的关系,这些内部结构实际上是企业已定义好的标准软件过程在具体项目中的应用。同时,管理者能预见可能发生的风险,并为此做好准备。用户也能得到较为准确而快速的状况报告。
(4)已管理级在已定义的软件过程基础上进行过程量化管理。管理者可以根据客观的度量,预见过程中的经费支出和其他情况,并定量地、有目标地做出决定。用户也能定量地理解过程的能力及存在的风险。
(5)优化级的过程具有动态优化能力和自适应能力,可以很清楚地看到软件过程。为了提高生产率和质量,企业不断尝试新的软件开发方法和技术来优化过程。该层的软件过程不仅具有对存在过程的可见性,而且对过程潜在的改变、影响因素也具有预见性。管理者有能力估计及定量跟踪变化的影响和效果。用户和开发组织合作关系良性发展。
3、基于CMM的软件过程改进
任何软件过程必然属于这五个层次中的某一个层次。在不同层次中,需要实现带有不同层次特征的关键过程区域。在致力于软件过程改进时,只能由所处的层次
向其紧邻的上一个层次进化,而不能是跳跃式的。并且,改进过程本身也是一个规范的、循环的、永不停止的过程。一个软件企业首先要通过过程评估、能力评估等手段诊断自己处于哪一个层次、还存在什么问题,然后根据诊断结果列出改进计划,经过相关的培训、实施,最后作出总结。一个过程的改善结束紧跟着下一个更高层次过程的开始,从而进入“评估—诊断—计划—培训—实施—总结”的又一循环。CMM模型使过程的改进成为有序。

CMM的应用及其局限
CMM可以应用到许多方面,但CMM研究的初衷是实现:
·软件过程评估:用来评估一个软件组织在过程方面的优点和弱点。
·软件能力评估:用来评估软件开发承包商的开发及管理能力。
在CMM的广泛应用中,通过CMM认证的软件企业都不同程度地增强了竞争力,争取到了以前不能得到的合同。例如,Raytheon公司现有近400名软件开发人员,公司用了近五年的时间,将其成熟度从第一级提升到第三级,已经收到了明显的效果。在提升到较高级别的过程中,公司所花费的投资与五年来因成本降低所收到的
效益之比为1:8,直接生产效率提高了大约14倍。该公司所开发的产品在成熟度提升前每千条指令出错率约为0.31条,提升后仅为0.03条。
但CMM也不是万能的,并不一定对所有的软件企业都适合,实施CMM的企业有成功也有失败。这是因为,在运用CMM中还存在着一些局限性。主要包括:
1、CMM提供了一种有步骤且目标一致地改进软件产品的管理过程和工程过程的方案,但是它并不保证软件产品将成功地构造出来,或者保证恰当地解决全部软件
工程中的问题。
2、CMM最初是以承接政府大型软件合同的企业为对象而制订出来的。因此,中小型软件开发企业在采用CMM的时候,必须运用自己的专业知识和判断力去进行剪裁,按照企业本身的特点和需要去解释它的条文。
3、CMM的实现依赖于有关人员的积极参加和进行创造性活动。
4、正式推行CMM需要在人力和经费上增加投入,这对中小企业有一定困难。
5、实施CMM,通常要经过较长的一段时间之后(两年、三年或者更长)才能看到成效。据最新报告,CMU/SEI推荐了从CMM的一个层次提高到另一个层次所要花费
的时间,其中最短也需要14个月,可见是一个漫长的历程。

正确实施CMM的策略
从去年开始,CMM已受到我国软件业的广泛关注,国家有关部门已出台了相关政策。目前鼎新、东大阿尔派、联想软件已通过了CMM2级认证,摩托罗拉中国软件中心通过了CMM5级认证,还有不少软件企业正在尝试实施CMM,如富基旋风公司正在积极准备2003年通过CMM3级认证。然而针对我国软件企业的现状和CMM应用的局限性,为了使其得到很好的实施,我们必须注意以下几个关键问题:
1、在引进、消化、吸收的基础上需要自己创新,让CMM更实用化:我国的软件产业引进国外先进管理方法是势在必行的。但国情不同,文化背景不同,因此在引
进、消化、吸收CMM的基础上,需要自己创新,有些东西不能照搬照抄。例如,对于成熟度调查表等需要改进。因为管理是与文化有关的,中国文化与欧美文化是不完全相同的,甚至视角都不同,改进是必须的。最近,美国软件工程研究所对原来的CMM模型也作了改进。外国人自己也在改进,对于国人来讲,更应形成自己的管理模式,不断总结、改进、提高。
2、加强培训和咨询服务:目前我国推广CMM的工作重点应该是举办相关的技术培训、管理培训和咨询服务,让国内软件企业更深入地了解、掌握CMM,并指导和协助软件企业参照CMM模型,迅速地建立一个起始的软件过程,分步骤地改进自己的软件过程。对于其中有条件的、特别是出口型软件企业,应全面实施CMM,逐步通过CMM等级评估,以提高在国际市场上的竞争力。另外,我们还应重视培养自己的CMM主任评估师以及相关的高层次人才。
3、高层领导要重视并领导实施CMM:企业上层领导要首先理解建立软件过程管理和改进的重要性,并亲自领导这件工作,要保证过程管理的人员配备。
4、建立过程改进小组,明确责任:在实施CMM的过程中,成立过程改进小组是非常必要的。过程改进小组是过程改进的主要执行者,一方面要赋予成员相应的权
力,另一方面要明确规定成员的责任。
5、借助软件过程评估,专注于软件过程改进:对于我国的软件企业,最好先按照CMM严格的软件工程方法,致力于改进企业的管理,提高软件开发能力,而先不要搞软件能力评鉴以及追求认证、评级。等到能力成熟后,再进行认证。这样可以避免有些企业将追求的目标定为“能力等级评鉴”,取代了实际的产品质量改进,造成华而不实、甚至弄虚作假的现象。
6、明确软件过程管理与改进的唯一目的是:按时、按预算开发制造出高质量的软件产品。
7、针对企业自身的特点,对CMM进行适当裁剪:对于CMM和其他的模型与标准,我们不能生搬硬套,而应将其作为参考,必须运用自己的专业判断力,按照企业自身的特点、要求与现实条件,制订软件过程和选择实行改进的部分。
8、充分认识改进过程本身就是一个规范的过程,需要循序渐进、逐步改进:因为软件过程成熟度的升级本身就是一个有生命周期的过程,而且全面引进CMM所涉及的范围非常广,要求人力、财力与设备资源的投入跟得上。所以在实施CMM时,企业千万不要一开始就把目标定得过高,不必一下子去满足某一能力成熟度等级的所有目标,可以试行某些关键过程域的一部分关键实践活动。另一方面,企业还应该规划出软件过程建立与改进的短、中、长期目标,分清轻重缓急,逐步取得
经验,不要一下子动大手术,一下子什么都想得到,也不要作赌博式的全盘投入。企业应在对CMM有透彻的理解之后,才去考虑是否全面引进的问题。
9、专业开发人员要全力支持,并参与过程管理和改进:CMM的实现依赖于全体有关人员的积极参加和他们的创造性活动,否则不仅他们本人会失去从软件过程改
善中获得提高的机会,甚至还会成为过程改进的阻力。
无论对软件企业自身,还是对我国软件业整体,推行CMM是势在必行的。通过实施CMM,可以促进软件企业规范化管理、工程化生产,提高软件企业的能力成熟度,改进软件的开发、维护过程,按时、按预算为用户提供高质量的软件,提高产品和企业的竞争力。在商业信息化建设、电子商务建设以及商用软件产品与商业应
用系统的开发过程中,软件企业借鉴并应用CMM管理方法是非常必要的,对提高商
业软件的水平,将会起到很大的推动作用。

版权所有:UML软件工程组织