第一章、 CMMI能力成熟度模型简介
一.CMMI概述 CMMI将软件过程中的很多步骤都通过步骤规范起来,它给出了过程改进的模型和大框架如各过程域的特定目标及特定实践和共性目标及共性实践,并没有告诉我们具体应该怎么去做。因为软件过程中的每一步都需要经过思考、决策、有依据才能得出过程的结果,所以减少了每一步发生错误的可能性。 CMMI是Capacity Maturity Model Integrated的简称,即集成的软件能力成熟度模型,CMM是CMMI的早期版本,它主要用于软件工程,而CMMI是一种综合性模型,它是工程实施和管理方法,它在软件与系统集成以外的如科研、工程等领域都得到了广泛的应用。 CMMI是一个由理论和经验部分组成的模型。它有连续式和阶段式两种表述方式,其中连续式主要用于衡量一个企业的项目能力,而阶段式主要用来衡量一个企业的成熟度。在连续式表述下,企业在接受评估时可以选择自己希望评估的过程域和项目来进行评估,所以评估通过率相对比较大,但它反映的那个相对比较窄,因为它仅仅反映该企业的该过程域及项目或类似项目达到了对应的等级。而用阶段式来进行评估时,需由评估师自己来挑选内部的任何项目或其中的某一部分来进行评估。 阶段式的CMMI有5个等级,如下: 第一级(初始级):在该等级下,项目的目标虽然得以实现,但它的实现带有很多的偶然性和风险性,该级对人员的依赖性比较大,性能依赖个人的能力,且随个人固有的性能、知识和动机的不同而变化。 第二级(受管理级):在该等级下,意味着组织要确保策划、文档化、执行、监督和控制项目级的过程,并且需要为过程建立明确的目标,并能实现成本、进度和质量目标等。在这种情况下,组织已经营造了一个稳定的、受控的开发环境,项目已经在受控制的状态下运行。该级包括如下7个过程域:需求管理(RM)、项目策划(PP)、项目监督与控制(PMC)、供方协定管理(SAM)、测量与分析(MA)、过程和产品质量保证(PPQA)和配置管理(CM)。 第三级(已定义级):在等级三下,项目执行过程是通过裁剪组织的标准过程集合和组织过程财富库产生的“已定义过程”,并具备与该过程相适应的运行环境。该级有如下11个过程域:需求开发(RD)、技术解决(TS)、产品集成(PI)、验证(VAE)、确认(VAL)、组织过程聚焦(OPF)、组织过程定义(OPD)、组织培训(OT)、集成项目管理(IPM)、风险管理(RSKM)和决策分析和决定(DAR)。 第四级(定量管理级):在等级四下,组织建立了产品质量、服务质量以及过程性能的定量目标,运用统计技术和定量目标作为判断过程管理成功的标准。在过程的生命周期里,对产品质量、服务质量和过程性能做到统计意义上的了解和管理。同时过程波动的特殊原因采取措施,保持过程的稳定性,该级包括如下两个过程域:组织过程性能和定量项目管理。 第五级(持续优化级):该等级的突出特征是过程性能的持续改进。组织建立起整个组织的定量过程的定量过程改进目标,并且把它们作为过程改进的判断标准;这些目标将适时修改,以反映不断变化的本组织的商业目标。也就是对过程的普通原始采用系统的措施,提升过程本身的能力或性能;实际实施的过程和组织的标准过程集合都是改进活动的对象。该级包括如下两个过程域:组织革新和部署;原因分析和决定。 二.CMMI给我们带来了什么好处? 概括来说,CMMI给我们带来了如下好处:改进进度和预算的可预测性、改进开发周期、提高生产率、改进质量(质量缺陷)、增加客户的满意度、提高员工的士气、增加投资回报和低质量成本。 对于不同的人来说,CMMI给他们带来的好处各有不同,例如,对于企业的老板来说,CMMI不仅提高了企业整体的管理水平,而且为企业引进了科学高效的管理观念、创造了更好的利益。而对于项目经理来说,对CMMI技术的学习掌握能够提高自身的项目管理能力,因此能够更好的提高项目质量,低成本、按期限的完成既定的任务等等。 CMMI的实施包括如下几个步骤:差距分析、过程定义、过程部署和实施、预先评估和正式评估五步。它的实施能够提高我国企业的管理水平,使我国的企业在管理上能够尽快地引入国际上的先进技术。调整了我国企业的管理体制,使其从无序变成有序、主观变成客观、人治变为法制或制度化管理。CMMI应用将产生的直接效果是提高了工程项目的质量、降低了工程的成本,保证了工程的周期、提高我国企业的在国内与国际市场上的竞争能力。 越来越多的大型企业开始要求其工程承包商具有一定的CMMI级别。级别高的企业在赢得项目的竞标中具有一定的优势。因此,如果没有CMMI的等级评估,企业就会失去很多商机。另一方面,企业通过CMMI评估也是为了提升企业内部的管理水平,降低企业的工程成本,得到更加丰厚的回报,对企业来说受益不少。 就实践中的公司来说,CMMI的实施也会给公司项目管理者带来了福音。如从CMMI实施中进行差距分析来说,测量与分析、风险管理、组织培训等地方明显做得不够。因为没有测量与分析的数据的采集,导致过程中的很多地方无法进行估量。因为对风险管理得不够,使得风险散播到项目过程中的各个地方,无法从某处获得对风险的集中管理。因为上级的组织培训的不重视,导致很多技能不能被相关人员较快较好的掌握。除此以外,还存在很多的问题,CMMI的实施给公司项目管理者带来了福音。 三.对CMMI的推动和若干问题的思考 1. 实施CMMI最好采用什么方式来驱动? 答案是以公司的商业目标和实际需求来驱动,有些公司的经营战略上,质量是核心竞争力,质量关注会多一些是过程改进的重点,有些将价格低作为公司的核心竞争力,成本关注会多一些是过程改进的重点,真正遵循IDEAL(I-初始;D-诊断;E-建立;A-执行;L-学习)组织过程改进模型。 CMMI只是告诉我们需要做什么(目标和实践),给出了过程改进的模型和大框架,但具体如何做,以及采用什么工具、方法和技术等去做,这些答案需要我们自己去找。 我们不应该过分的追求一定要采用那一种方法或工具来做好某件事情,为达成目标应该来说方法或工具是很多的,公司应根据公司实际的情况来选择,例如设计图我们并不一定需要采用专门的Rose的工具来做;对需求等的跟踪并不一定要采用专门的需求跟踪工具来做,很多时候Excel就能够达到很好的跟踪效果。在以公司的商业目标和实际需求来驱动的过程中,可以灵活的采用适合的方法或工具,不应该太过拘泥,只要可以达成的公司的商业目标和实际需求,同时又很合适自己公司就是好的过程,从这点上看,还有一个表现,即使不同公司的商业目标和实际需求是一致,也许不同公司对过程有也不同的想法和做法,所谓条条大路通罗马就是这个意思。 2. CMMI与ISO9001存在哪些区别? ISO9001现在很多人理解为仅仅是认证,我个人认为ISO9001更重要的是一个质量方面的过程改进模型;ISO9001标准的4.1明确的提出,标准的目标有两个:(第一是需要证实其具有稳定地提供满足顾客要求和适用的法律法规要求的产品的能力;第二是通过体系的有效应用,包括体系持续改进(的)过程的有效应用,以及保证符合顾客要求和(与)适用的法律法规要求,旨在增强顾客满意。)其中第二条讲的就是过程改进,一个公司在刚开始实施过程改进时,公司的人员的由于能力不够或经验不丰富,你说策划的做法不是第一策划就一定好,一般一定有不足的地方,也就是过程本身不完美,过程能力或性能的不够,过程本身就会做出不良的产品和工作,所以需要不断根据公司的质量方针和目标不断改进,改进到过程本身具备满足目标的能力或性能,这时由于过程能力或性能够,过程本身做出的产品和工作就是符合要求的,这就是真正意义上的质量保证(本身不出错)。从过程改进的角度来说,CMMI与ISO9001的出发点和目标是一致的; 区别: 一是:ISO9001仅仅是质量过程改进模型;而CMMI是组织过程改进模型可以包括质量、进度、成本等方面的过程改进; 二是:取得ISO 9000认证不意味着完全满足CMMI的某等级要求。取得CMMI第二级或第三级也不能笼统地认为可以满足ISO 9000的要求。因为两个模型的内容有轻微的差异;如ISO9001说顾客财产管理,CMMI没有此方面的比较具体的要求。 3. CMMI过时了吗? 迭代开发技术、软件产业最佳实践、和经济动机推动组织采用基于结果的方法:开发业务案例、构想和原型方案;细化后纳入基线结构、可用发布,最后定为现场版本的发布。虽然CMMI保留了基于活动的方法,它的确集成了软件产业内很多现代的最好的实践,因此它很大程度上淡化了和瀑布思想的联系。 分析CMMI和迭代开发之间有什么联系,方法之一就是看CMMI模型的每个PA是否为这种开发方法激发了合理的软件管理原理。如项目策划过程域的三个目标(建立和维护项目计划因素的估计值、建立和维护项目计划、建立和维护对项目计划的承诺)对于迭代开发来说仍然是非常需要的,并不是多余,所以CMMI和迭代思想联系得很紧密,所以说CMMI并没有过时。 4.CMMI与ISO9001、敏捷开发的关系? 最近几年来,敏捷开发已经成为一项主流开发技术。很多成功的企业都在使用这个技术。那么CMMI与ISO9001、敏捷之间存在怎么样的关系呢?分析如下: CMMI回顾:在80年代早期,在SEI的资助下美国空军成立了一项研究来分析为什么许多软件合同都会超出工期和预算。他们的结论是:糟糕的过程。由此,产生了CMM&CMMI。能力成熟度模型CMMI是一个过程改进方法和模型,它为组织提供了实现高效的软件交付过程所必需的基本元素,关注通过切实改进过程域的成熟度,实现过程改进的目标。它可以用来指导一个项目、一个部门甚至整个组织的过程改进。CMMI能帮助我们整合以往各自为政的组织功能,建立过程改进的目标与优先级,指导我们进行质量改进,还提供了评价现有过程的参照点。 ISO9001回顾:近年来,国际上影响最为深远的质量管理标准当属国际标准化组织于1987年公布的ISO9000系列标准,这一国际标准发源于欧洲经济共同体,但很快就波及美国、日本及世界各国。到目前为止,已有70多个国家在它们的企业中采用和实施这一系列标准。 敏捷回顾:使用敏捷式方法要求IT和业务方面的参与者紧密沟通,更快的交付业务需求从而更快的获取效益。降低改变的成本、提高系统的灵活性,以及降低投资的风险。敏捷式开发能在质量上有很大的提高。大概在60年代的时候,软件开发是没有计划性的,基本是写出来,谁也不知道什么时候能交付,但也就是在那个时候,软件工程学的概念在美国召开的一次会议上头一次被提出来,传统工程学通常是把项目分成三步或者四步,先把需求确立起来,进行设计构建。应用到软件里是开始先由分析人员对需求进行分析,然后设计,架构师把整体的东西设计出来,再确定下来交给编程的团队,编程的团队按照需求规格,把东西给做出来,所有的这些东西都是由不同的人在不同的时间完成的。 这种模式的优点是:开发计划性非常强,因为你知道什么人在什么时候做什么事情。但也存在一些缺点,这些缺点主要由软件开发和传统的建筑工程学的不同引起。客户需求的不断变化,特别是商业软件,跟随市场的变化,客户需求也在不断变化。客户本身在脑子里并不是很清楚自身需要什么,在它看到了产品后,在使用的过程中,他对自己想要的东西才有了一些更加确定的想法,知道了怎样的东西才是自己所需要的。但在这个阶段的需求变化使得项目步履维艰、使得成本大幅度增加。所以工程学里一个核心的概念,变化是最可怕的一件事情,从设计角度也好、分析的角度也好,不管怎么,不要变化,这样就使成本增加。 敏捷式开发最核心的东西是它不排斥变化,对变化采取的是适应性的态度。敏捷式的开发针对一小部分进行设计测试,对每一个循环时间非常短,软件从小到大,从很小的一点到不断的增加扩大,而且增长的过程中是对软件不断修改的过程。 敏捷开发还有一个很大的特点就是它是以人为本,而不是以方法为本的。我们的软件开发是脑力劳动,而不是简单的工作。如果你设计出一套方法来,不管什么方法,让每个人去适应的方法,最后开发效应反而不如你组建一个具有进取心的团队,这个团队通常情况下是先选择一种方法,细节也一样,在开发过程中,不断对方法反思,直到达到这个团队的最高开发效应为止。 敏捷是一个高度协作的、演进的以及关注质量的软件开发方法,是一种允许快速业务变更的开发实践。敏捷的核心是敏捷的4个核心价值观和12条原则,外围则是满足不同团队需求的各种敏捷实践,敏捷的不同之处在于其更关注团队协作、关注质量、关注可工作的软件。敏捷来源于实践而不是理论。 在追求卓越的过程中,组织会尝试多种途经,采用不同的原则、方法及技术。一个对敏捷实践感兴趣的组织可能也会对PMI的OPM3、ISO或能力成熟度模型集成(CMMI)感兴趣,反之亦然,因为这些都是通向卓越的手段。CMMI与敏捷框架在很多方面能够和平共处,互相补充,甚至可能协同工作。 从本质上讲,CMMI、ISO和Agile都是人们为了解决在软件生产过程中出现的质量低下、进度延迟、预算超支等问题,而产生的标准或过程改进的模型或方法实践,只是它们的关注点有所不同而已。CMMI和ISO关注为了实现组织软件生产目标,我们应该做什么?但却不关注如何做。而敏捷开发作为一个实践性方法,更关注怎么做。因此,在具体操作过程中,可以通过有效结合,能够使组织更快、更好地实现过程改进目标。为了能够有效结合各种CMMI和敏捷开发,组织必须明确它们的区别和联系,以及每种方法的主要关注点。
如上表所示,CMMI和敏捷开发的主要冲突来自于双方产生的环境、目标客户和团队文化要素,例如CMMI早期客户,主要关注大型项目、复杂系统、使命关键(Mission Critical)系统,而敏捷开发主要关注小项目、简单应用和灵活多变的系统;CMMI的假想市场和用户主要面向成熟市场,面向那些关注流程创新的企业,而敏捷开发主要关注在新兴市场和多变的市场环境;文化方面,CMMI强调流程和管理,而敏捷更强调高度信任的氛围中,被激励起来的个人之间的协作创新。 但在整体上,CMMI和敏捷开发能够很好地相互补充、相互支持。首先在关注点上CMMI关注组织级或企业级改进,关注回答项目应该做什么,而不是具体怎么做的方法,而敏捷开发则更关注项目级改进,关注项目具体怎么做的方法和最佳实践,这使双方在定位方面形成很好的相互补充的态势,一方面CMMI为敏捷提供组织级扩展的能力和必须的组织治理框架,便于组织级对敏捷最佳实践的推广和重用;另一方面,敏捷为CMMI提供了项目级的具体实践方法,确保团队在CMMI框架下能够快速响应,不断创新,持续交付价值。两者的有效结合,能够有效实现个人绩效向团队绩效、向组织绩效的转变过程。同时,也可以通过敏捷实践,规避CMMI实施过程中重文档、重流程的不良倾向,使CMMI实施时更加关注组织的实际价值、关注客户、关注创新。 结论 至此已经讲明CMM与敏捷实践之间的关系和协作效果。为了取得最好的效果,学习CMMI的各个过程域、各个成熟度级别并掌握如何在敏捷与CMMI之间过渡的能力非常重要。 |