对企业软件开发能力衡量的理解(CMM)

个人理解:CMM 1级是无序状态;CMM 2级是有知识沉淀(文档话、模板化),达到可重用;CMM3级是标准化,有标准指导;CMM4 是管理级,是定量化的管理;CMM5 是进化级,能够反思。

大型软件的开发需要很好的管理与组织能力,来保证软件开发的质量。从软件工程的角度来说,不存在没有Bug的软件,但尽量减少致命性的Bug是所有软件开发组织者所追求的。那么如何衡量一个组织具备了大型软件的开发能力呢?CMM提供了一种衡量的方法,尤其是CMM的认证已经成为国际上认可的软件能力标签,所以很多大的企业都组织通过该认证,提供自己的知名度,提升自己在客户心目重点形象。

一、组织能力在于团队的“战斗力”

CMM模型注重的是软件开发组织对软件开发过程的管理,是从团队的角度,对软件最终质量的保障。软件的质量就是在完成客户需求的同时,尽量少的留下Bug,减少业务服务的中断与故障。既然是团队能力的衡量,就不是个人天才的展现,所以CMM对一个软件组织的意义远不只认证这么简单。
1、团队开发能力的保障,就象工厂的流水线一样,每个环节都有严格的输入与输出,并且配置有效的测试检验,软件的开发就象流水线上的汽车,走下流水线的就应该是成品。所以制度、操作流程定义、成套的检测手段都是流水线上必备的。
2、个人的能力强,往往体现在经验而不是文档,而团队的能力就很大程度地体现了文档的管理,因为在一个“加工”过程中,较为头痛的首先就是人员的流动,组织的能力就是在任何职位的人员调动,都不影响整个项目的进行,能很好地衔接开发的继续,一般只有两种方法:言传身教的师傅带徒弟,完整的文档让新人可以彻底了解过去的经过。
所以CMM模型注重的是组织的内部协调,组织执行力对软件开发过程的控制,确保开发过程中的每个环节都得到测试与规划。
软件开发组织目前使用最多的是瀑布开发模型与极限编程管理,无论采用那种方式,其目标都是保证开发的软件高质量。CMM衡量的是整个组织的开发能力,用什么管理方式并不重要。

二、瀑布模式与极限编程对组织的影响

瀑布模型非常适合流水线的管理,把软件设计变成软件工厂。瀑布模型管理方式:注重开发过程的文档,保证规划的功能的高质量实现,但忽视了客户应用的经常变化,瀑布模型的缺点是开发周期长,要实现迭代非常困难。但瀑布模型能很好地保证设计的功能的实现,尤其是初期设计非常充分,程序重用、类提取都非常精练,所以都年来,瀑布模型一直是主要的开发方式。
极限编程更加注重客户需求的变化,采取快速看到结果的开发方式,有些象早期的快速模型开发方式,能看到结果,客户就可以尽早感觉系统,提出最切合的改革建议,避免开发后期的更改。极限编程还有一个程序员喜欢的地方,就是以编码为主,文档次之。极限编程关注程序员的感觉,把编程变成一种乐趣,与瀑布模型的大量烦琐文档相比更有吸引力,大大提供了开发人员的积极性。但是,极限编程设计部分相对较弱,先测试再编程的思想是否可以消除这些缺陷还有待于进一步实践。
采用那种开发模式,是组织根据自己团队的侧重与开发产品的特点选择的,对于方式的选择有下面的建议:
1、软件产品比较程式化,也就是说客户需求比较明确,开发重复性强,好比流水线的生产,每个汽车的工序与工艺要求一致。建议采用瀑布模型方式,文档的完备特别适合重复性的开发。
2、软件产品创新性强,客户需求不明确,甚至要在开发的过程中不断重新确认,同时要求开发人员有足够的敏捷思维,发挥开发者的想象思维,建议采用极限编程。极限编程中的结对编程非常适合能力差不多的开发人员发挥创造性思维。
开发模式的选择,直接影响团队的组织与管理,对CMM的评定也息息相关。CMM更关心软件产品的质量,对组织来说,还要注意对团队人员工作积极性的调动,人在心情舒畅的情况下往往能发挥的能力是通常状态下的数倍。很多团队领导都强调队员的无障碍沟通,但要实现无障碍沟通不是靠领导的命令,而是发自队员的内心。团队的能力与个人天才的本质不同应该是:1+1>2。也许这才是CMM评价的真实意图吧。

三、CMM等级

下面介绍一下CMM的衡量标准。
能力成熟度模型(Capability Maturity Model, CMM)是美国卡内基.梅隆大学的软件工程研究所(Software Engineering Institute, SEI)提出的一套软件开发过程管理、评估的模型,并很快成为公认的标准,建立了CMM认证体系,用来衡量软件组织或企业的成熟度或软件过程能力。
CMM把软件开发能力分为五个等级,主要是从对开发活动的组织、管理、技术等方面评估。

  • 第一级:初始级。组织对软件开发过程没有进行清楚的计划,开发中的一些问题依靠开发者自己处理,内部也缺乏沟通。软件开发主要依靠主管的个人才干或几个有经验的骨干,开发过程没有系统的规划,过程是无序的,进度、预算、质量都不可以客观地评估,项目的结果是不预测的。初始级能力更象个人的开发,积累项目的经验,而不是团队,CMM是对团队的开发能力成熟度的度量,个人能力强可以影响最终的软件质量,但团队开发能力为初级。
  • 第二级:可重复级。可重复就是对开发成功的案例可以重复操作,也就是开发的过程与质量可以复制。可重复级一般采用项目管理方式,建立管理软件项目方针,制定实施这些方针的规程。组织通过项目管理有效控制成本,把经验应用到类似的项目开发中;同时通过项目管理使软件开发过程制度化、开发过程文档化。重复级中,项目规划与跟踪是参照以往类似项目的成功经验,不在单纯依靠管理者的特殊才能,团队的开发能力依托成功经验的管理。

  • 第三级:定义级。对开发和维护的标准过程定义并文档化,包括软件过程的工程和管理,即软件过程的标准化,使得组织中的每个成员都清楚并执行同一个标准。定义级让软件过程是可预测的,软件的质量是可控的,让管理者对整个过程是可以提前预测并合理安排的。在可重复级中有了项目管理和跟踪的经验,定义级明确定义了规范与过程,形成标准软件过程,使软件开发可视、可控。当然标准化不意味就是不变的,根据测试和效益的分析,修改规范、调整计划,但修改要经过规范的修改程序,并使所有项目参与者一致执行。

  • 第四级:管理级。管理级的关键是开始量化软件质量的指标,不仅能管理,而且能管理好。组织衡量软件过程和产品而拟定质量和改进的目标,要量化,就要用具体的数据来衡量软件过程的生产率和质量。管理级建立在定义级之上,若不把过程标准化,也没有办法对整个软件过程进行量化,也不可能提炼衡量的技术指标。管理级的组织的软件能力是可预测的,整个过程在可测量的范围之内,软件产品是可预测的,是高质量的。

  • 第五级:优化级。人的发展是在不断学习中进步,组织也同样要不断地更新自己,不断优化,吸取新的技术,吐故纳新,螺旋式上升。CMM4前是管理技术的完善提高组织的软件过程能力,CMM5是组织有能力识别自己的弱点,并不断更新自己,适应组织自身的变化与竞争的需求。

软件开发过程可以划分成不同的关键过程域(Key Process Area, KPA),每个KPA定义了要改进的内容范围。CMM的五个等级中分别关注不同的KPA。

本文出自 “Jack zhai” 博客,请务必保留此出处http://zhaisj.blog.51cto.com/219066/45487