|
<p><br/>第一章 CMM的简介<br/>1.1 CMM简述<br/>CMM(Capability Maturity Model for Software)是软件能力成就度模型,它是由软件工程研究所(SEI,Software Engineering Institute)提出的,目的是领导软件机构进行在成本和进度的要求下能提交高质量的软件,CMM为软件企业提供了一条从混乱、不成熟的软件过程向成熟的、有纪律的软件过程改进的方法。<br/>1986年11月,SEI在MITRE公司协助下,开始开发过程成熟度框架,以帮助软件机构进行软件过程改造;1987年SEI发布了软件过程成熟度问卷;1991年CMM最初版本通过评审,并开始在软件机构中应用。<br/>什么叫软件过程,软件过程是软件工程的基础,软件过程是指在相应的规范下组织和使用相应的资源(人财物等)生产出满足客户需要的软件产品。软件过程可以抽象成一系列的工作和工作产品的开发、维护的行为、方法、实践和控制过程,如项目计划、概要设计、详细设计、代码、测试计划等。<br/>软件过程成熟度指对于具体的软件过程进行明确定义、管理、测量和控制的程度,改进软件过程要求企业加强管理机制,并且长期有效地关注软件过程,建立软件过程的制度化,这样才能以越来越好的方式进行软件开发。<br/>CMM是全面质量管理(TQM, TQC total quality Management)中的过程管理部分在软件行业的应用,CMM比ISO9000更细致,更具有针对性,当然通过了ISO9000认证的软件企业基本上已经满足了CMM2至CMM3的要求。</p><p>CMMI</p><p>1.2 CMM的5个级别<br/>CMM一共有5个级别,分别是一级初始级、二级可重复级、三级已定义级、四级已管理级和五级优化级。<br/>级别1:初始级<br/>软件机构不能提供开发和维护软件的稳定环境,,经常做出不切合实际的承诺,危机发生时,项目一般都会脱离原有计划,回到仅有编码和调试的状态,项目经常超出预算和超期,软件项目的成功完全依赖于项目组中特别的人,当他们离开后他们对软件项目过程的影响随之消失,所以项目的开发能力的保证来自于个人能力而非组织能力.<br/>比较典型的特征是项目的需求不断变更,软件设计不断变更,经常会发生推倒重来的事情,项目后期加班严重,最终产品的客户满意度不高等等.<br/>在级别一中,软件过程是一个不定的过程(黑盒),由于没有很好地定义活动和实施,管理人员需要花大量时间确定项目的状态和活动的状态,需求在不被确定的情况下进入软件过程,软件产品的质量只有在发布后才能被评估出来.<br/>级别2:可重复级<br/>建立并实施了软件管理的规程,项目执行经过定义的、文档化的、有以往经验的、可测量的、强制的以及可改进的过程,管理级对软件项目制定了基本的软件管理和控制措施,项目负责人不断跟踪软件成本、进度,一旦出现问题能很快确定,对软件需求和开发过程中的工作产品进行基线(基线:)管理。软件项目的计划和跟踪是稳定的,并可以重复以前的成功,项目的过程处于一个项目管理系统的有效的控制之下,遵守并执行基于以前成功项目所制定的项目计划。<br/>在级别二,因为已经建立基本的项目管理,软件项目的开发过程可以看成是一系列黑盒的串连,在项目的里程碑处具有可视性(可以知道当然的状态和进度),客户可以在里程碑处对产品进行评审.<br/>级别3:已定义级<br/>将组织用于开发和维护的标准过程文档化,指定了一个负责机构过程活动小组(SEPG),在组织内部进行培训,保证全体人员和负责人具有所需的知识和技能。<br/>软件过程被严格定义,包括准备、输入、实施工作的标准和规程、验证机制、输出和完成准则的过程。<br/>无论是软件工程活动还是管理活动,其过程都是稳定的,可重复的,软件开发的成本、进度和功能均可受到良好的控制,软件质量被跟踪。<br/>在三级,软件过程中的任务具有可视性,管理人员和工程人员对自身的活动在一定程序进行相互交流,管理人员对可能发生的风险进行准备,客户可以随时得到关于项目准确的最新情况.<br/>级别4:已管理级<br/>组织对所有的项目的关键软件过程活动进行生产率和质量的测量,收集并分析这些数据,为评估项目的软件过程和产品建立定量的基础。<br/>该级别的软件机构可以对软件过程 因为软件过程是稳定的、可测量的,所限定的数量范围内预测软件的过程趋势和工作产品的质量,当意外发生时,可明确指出变化产生的原因,当超出预计边界时,能采取相应的措施进行纠正。<br/>在该级,管理人员可以测量项目的进度和存在的问题,而且在项目开始之前,客户就能对过程能力和风险有定量的认识.<br/>级别5:优化级<br/>组织强调渐进的过程改进,以预防缺陷为目的的过程中,能有效地确定软件的优势和弱势,并预先加强防范,使用描述软件过程有效性的数据完成新技术的成本和效益分析,并向该机构的软件过程提供相应的更改建议.<br/>软件小组通过分析缺陷产生的原因对软件过程进行评估以预防已知的缺陷再次发生,并在组织内部进行宣传以防止再次发生.<br/>级别5的特点是,过程可以不断得到改进,并且可以通过对已有软件过程进行不断改进来提高过程效率和能力,可以使用新技术和新方法进行革新,技术和过程改进可作为常规的业务活动来进行计划和管理.<br/>在该级对过程进行更改后造成的影响能够被准确的被评估,管理人员能估计和定量跟踪更改的效果和影响.</p><p>1.3 CMM级别的关系<br/>CMM的级别其实是将过程管理的改进活动由浅入深,每一个级别都是下一个级别的基础,如果企业要跳跃级别,往往会导致改进活动失败.一般来说较高等级的软件过程的潜力只有建立在相应的基础上才可以发挥出来.成熟度等级只描述一个等级上占主导地位的关键问题,即主要矛盾。<br/>在一级的企业中,在还没建立可重复级过程(二级)之前,试图去实施已定义级的过程,因为没有管理过程的规定,当项目陷入成本和进度的压力后,工程过程会在这些压力下被抛弃.<br/>在还没有对过程进行定义为基础的软件企业,试图进行定量管理过程(四级),因为没有对过程进行定义,就没有了采集和解释数据的共同基础,那么一个项目中采集到的数据,对其它项目来说是无用的,如果使用它,必然导致不良的结果,企业即使具有实施较高成熟度等级的软件过程的能力并不意味着它可以跳越成熟度等级。<br/>在CMM模型中,每个等级都有一个必要的基础,从此基础出发才能达到下一个等级,因此,跳越等级通常被认为是违反规律和不能允许的。<br/>当然,在CMM模型中,针对当前机构或项目的需要,也可以在较低级别实行较高级别的实践,例如:SEPG小组(软件工程过程组),SEPG小组是三级的属性,但是在企业从一级向二级改进的活动中,经常建立该组来指导企业从一级到二级的过程改进.另外就是部分活动,如分析、测试等,在二级中没有进行描述,但是一级的企业依然有这些活动,在三级,这些活动被定义为连贯和严谨的软件工程过程。当然本书所讲的一级企业进行二级改造的例子中没有SEPG小组。</p><p>1.4 国内企业实施CMM2过程改造<br/>中国注册的软件企业有八千余家,实际进行软件开发的约有五千多家,绝大多数的企业的研发人员规模小于50人,就软件开发来说,多是作坊式开发,项目的管理是基于黑箱的人的管理方式,项目的成功和精英的关系极大,如果项目组中有人离开,不要说精英,就是一个普通程序员的离开都有可能导致项目延期甚至失败,而就每个项目来说,经验(成功的和失败的)只能积累在个人的范围内,对于企业,对于其它的项目基本上没有帮助.<br/>中国软件企业的特点是规模小,年纪轻,没有积累的管理经验,很多企业对软件工程还知之甚少,就软件的开发管理很不成熟,而CMM模型为软件企业搭建了一个较好的管理框架,用于管理企业内部具体的软件过程,可以在短的时间内为企业建立一套完整的软件工程过程,从而极大程度地提高企业按计划的时间和成本提交有质量保证的软件产品的能力。<br/>中国和印度的软件产品起步是差不多的,但是如今印度已经成为名副其实的软件大国,这其中的差别不仅仅只是一个ISO9000或者是CMM认证的差异,仔细对比中国和印度的软件产业,中国自身拥有巨大的软件市场,在软件技术上具有优势,印度总体落后于中国,其软件产品依赖出口,但产业结构已经完成与国际接轨,如今,印度的计算机软件产品已远销世界75个国家,其中28个国家完全依靠印度的计算机软件和服务支撑。特别是中国加入WTO以后,软件产业与国际化接轨迫在眉睫,软件产品的质量\成本和进度将成为软件企业生存和发展的首要因素,说用CMM进行软件过程改进,利用别人已有的经验,取其对自己有用的部分,加以使用,并由此在实践中不断改进和创新。这应该是我们赶超世界水平的一种办法,另外用CMM进行软件过程评估,有助于提高我国软件产业的国际竞争力,获得规模效益是有很大帮助的。<br/>实施CMM2模型进行软件过程改进,必然会遇到很多阻力,下面就将简述一下主要阻力及其产生原因。<br/>首先是制度化的理念与原有管理模式的冲突,国外的软件企业有几十年的软件管理经验,其软件工程的推广程序远远超过我国,而过程改进将首先同企业文化冲突,原因很多,领导不重视,相关人员抵触,质量保证人员和软件工程组人员得不到应有的重视和权威。其实CMM2在推行过程中与在中国推行ISO9000所遇到的问题是一样的,推行制度化,制定规范、监督和执行三位一体,这就会与企业的特权行为相抵触,软件开发最常见的就是后期加班加点,不按计划,不管规范,而在这些时间,制度就往往成为压力的牺牲品。<br/>第二是管理层推动的问题,所有制度的推行,必须要有高层领导的推动,过程改造是一个长期的工作,而且并不是立竿见影的,而在真正受到压力的时候,高层领导是否还能够坚定的推动,中国企业在推行ISO9000的时候,很多企业是三把火,是问有多少企业领导是不断对制度和过程进行研究,并成为个中高手,如果自己对此还知之不多,又怎么能了解和体会制度给企业带来的好处呢?在CMM2过程改进中,我们要求高层领导不只是支持,而且还要亲者参与。进行CMM过程改造的目的不是为了”评级”,如果企业采用其它的手段通过了”评级”,但自身没有获得提高,这实际上是自欺欺人,在ISO9000的评审中出现过极少的例子,相信在CMM评审中也会出现.<br/>第三是软件企业人员的质量意识亟待提高,中国的软件企业,小规模非公有制企业占绝大多数,而在这些企业中,实施质量体系定向培训的是凤毛麟角,大多数的公司不愿意为此投入资金和人力,造成各级人员不了解质量体系的知识。另外,项目管理人员对质量体系的实施起着至关重要的作用,但实际上我国软件企业的项目管理人员基本上都是从技术出身,对软件工程的了解,对项目管理的了解都很欠缺,缺乏真正的项目管理意识,而在实际的推广过程中必须首先对他们强化管理意识,这样在真正的软件项目的过程中,项目管理人员就会主动维护质量保证的工作。<br/>第四是CMM咨询和认证的问题,详细的CMM资料都是只告诉你做什么,但是没告诉你怎么做,具体的实施和应用需要企业自己不断去领会并且由专人来进行培训和指导,由于中国的企业培训还没有建立起来,中国的主任评审员还属于稀缺资源,从CMM的评审认证具有垄断性,对中小型企业来说成本较高,在一定程度上也相应影响了CMM的发展,所以在我国,大力推行第三方评审就很有必要了。而且随着中国进入WTO,CMM评审的价格会相应下调,这对CMM在中国的推广也将是一件好事.<br/>提供高质量的产品和成功的产品是两个不同的概念,高质量的产品是成功产品的重要条件,但不是说高质量的产品就一定会成功,这也就是说CMM并不是企业的万灵丹, 它一种有步骤且一致地改进软件产品的管理过程和工程过程的方案,但是它并不能解决软件工程中的全部问题,它的目的是提高企业的当前软件过程的管理能力,而且也不涉及企业的战略能力,如企业的人才战略、新技术战略(在低级的企业中,采用新技术是有风险的)以及产品战略等,一个企业的成功必须是多个条件加在一起。关于人才的管理软件工程所专门开发了一套人员管理成熟度模型(PM-CMM),有兴趣的读者可以参考与之相关的文档.<br/>由于CMM产生的历史的特殊性,CMM1.1版本很适合与政府签约的大型软件开发组织部的大型项目,这也是很多中小型企业对表示CMM怀疑的地方,事实上对中小型组织或中小型项目来说,合理地对CMM进行剪裁是有效的,另外就CMM2级和3级来说,基本上与组织和项目的规模大小没有直接的关系。<br/>对于企业实施CMM笔有提出以下几个建议:<br/>软件企业应专注于软件工程过程改进,除非必要,不要搞软件能力评审,特别是不能将“认证”作为执行改进活动的目的。软件过程管理与改进的唯一目的是:开发制造高质量的软件产品。(质量的几个重要的要素是:产品要适应客户的需要,产品要保时,保成本。)<br/>领会CMM和其他的模型与标准,运用自己的专业判断力去使用它,决不能生搬硬套。按照企业自身的特点、要求与条件去制订软件过程和选择实行改进的部分。<br/>软件过程的建立与改进要有短、中、长期的目标,有轻重缓急之分。切忌一下子什么都想达到。摊子铺得越大,失败的概率也越大,一定要选择先做什么,什么是“最薄弱的环节”和“最易做到而又有显著收效”。就某一能力的成熟度来说,不必一下子去满足该级级的所有目标,可以试行某部分关键过程领域的中的部分关键实践活动,要逐步取得经验后再展开。在CMM过程改造中从等级1到等级2可能需用几年的时间,而在其它等级间的升迁通常花费约2年时间。<br/>企业上层领导要首先理解建立软件过程管理和改进的重要,并亲自领导这件工作。要保证过程管理的人员配备。企业上层领导的持之以恒的参与是成功的先决条件。除此之外,专业开发人员的全力支持与参与过程管理和改进也是成功的关键。<br/>企业在内部的“过程评估”中,坦诚地暴露软件过程中存在的各种问题。从而制定出真正对症下药的过程改进的对策。<br/>是否在企业中全面推行CMM过程改造是一个慎重的决定,它所涉及的范围相当广,而且要求投入人力、物力和财力资源,一个企业如果单凭一点点对CMM的认识就做出是否全面推行CMM的决定,那将是很遗憾的。企业应该在对CMM及有关的一切知识有彻底的理解之后,才去考虑是否全面引进的问题。<br/>////另外,在二级的企业,对项目时间及成本的估计会超过一级////</p> |
|