CMMI模型是由美国的SEI开发的、基本成为评价软件开发组织过程能力的事实上的标准,自2002年左右引入我国,经过近7年的实施,目前已成为软件企业构建质量管理体系的首选。截止到2009年上半年,国内已有40余家软件企业达到CMMI 5级,70余家软件企业达到CMMI 4级,达到CMMI 3级的软件企业已经超过700家。通过实施基于CMMI的过程改进,我国的软件产业得到了长足的进步。在实施CMMI的过程改进咨询服务中,也遇到一些问题,特别是有关中小型企业如何有效实施CMMI的问题。近年来,随着敏捷软件开发(Agile Software Development,ASD)在国外/外企的大行其道,CMMI模型是否适合小团队开发,ASD是否满足CMMI实施/评估要求等问题,在业界一直是争论不休,备受人们关注。据统计,我国目前绝大多数软件企业属于中小型企业(50人以下,90%以上),绝大部分开发团队是小规模的(10人以下),因此,解决好ASD与CMMI有效融合/实施的问题,具有重大意义。
本文结合笔者对CMMI和ASD的认知和理解,以及当前众多对ASD与CMMI的关系的误解,阐述了CMMI与ASDM的关系,以及采用ASDM实施CMMI的相关问题。
1. 正确理解CMMI
1.1 CMMI是一个过程参考模型/过程框架,而不是过程方法
首先,CMMI是一个开发过程参考模型。从我们对模型的一般理解,模型是对现实世界的抽象和刻画,是对现实世界的“裁剪”,它告诉我们,现实世界中,好的开发过程具有怎样的特点/特征,具有哪些要素;它是对现行最佳开发管理实践的抽象,它描绘了良好开发过程所具有的行为特征。因此,在CMMI模型中,我们看到的是“应该做什么?”(What to do),而见不到“如何做到?”(How to do),即没有关于实施的方法论。既然CMMI并不限定采用哪种具体的过程方法,所以从根本上讲,实施CMMI采用何种方法论都应该是可以考虑的,当然,ASD方法也应在候选之列。
1.2 CMMI是适用于整个开发组织的、全范围的参考模型,不仅仅包含开发过程
其次,CMMI模型的作用范围,除了覆盖到开发组织的软件开发过程意外,还作用于开发组织的其它相关过程,比如采购,培训和过程改进等。因此,要想真正在全组织范围实施CMMI模型(成熟度3级以上),除了考虑要采用适当的软件开发过程方法外,还必须覆盖到组织的其他业务单元。而对于以开发为主的组织而言,软件开发过程是最主要的过程,但不是全部。
1.3 实施CMMI是需要编写文档的,但不仅仅是编写文档
一种对实施CMMI的普遍误解是:实施CMMI就是编写一大堆的文档!
应该说,一个软件企业实施CMMI项目,最直接的一个现象确实是产生了一些文档。这是由于过程规范化/抑制风险/提高质量等因素导致的。但是,需要说明的是,编制一定的文档只是一种手段,不是目的;不在于编制了多少文档,更重要的是产生文档的过程,以及文档所起到的作用和价值。可以这样讲,如果只是产生了文档,而没有有效的使用,那么这样的文档是没有多少价值的。
另外,从文档的数量和质量看,并不意味着文档越多越好,越复杂越好。“恰好够用”可能是最佳的标准。如何编写文档,编写什么样的文档,简单说是一个文档规范问题,实质上,体现了组织的智慧和知识积累。
1.4 实施基于CMMI过程改进的评估
2. 正确理解ASD
有关ASD的基础知识,请参考本系列文章的其它部分
2.1 ASD是一种/若干种轻量级的软件开发方法学
ASD是一种轻量级的软件开发方法学。它有多种不同的形式,如XP、Scrum、Crystal Methods、FDD等,每种方法有其特点,但有些基本点是相同的,比如,它的基本特征是迭代的、增量式的开发;强调自主性和积极主动的团队精神;强调效率、质量和沟通。下面一段“敏捷宣言”就表达了这样的价值取向。
注重个人和交互 胜于 过程和工具
Individuals and interactions over processes and tools
注重正常工作的软件胜于全面的文档
Working software over comprehensive documentation
注重客户协同胜于合同谈判
Customer collaboration over contract negotiation
注重响应变更 胜于 遵循计划
Responding to change over following a plan
虽然右项也有价值,但我们更看重左项的价值
2.2 ASD主要关注软件项目管理
目前,大量的ASD方法主要关注于软件项目级的开发和管理,还没有注意到组织管理和运营层面的实践。因此,有关组织级的管理实践,特别是关于组织战略层面的,比如软件复用、知识管理,还没有有效的方法和实践支持。所以,对于想依托ASD方法建立组织级管理能力的企业,还必须借助于其它的管理方法,比如敏捷测试,软件生产线,知识管理等方法,才能够达成目的。
2.3 ASD更关注于软件开发文化建设
ASD方法的本质是建立良好的、主人翁团队文化,并以此为支撑点,建立高效和谐的组织文化。所以,如何进行组织级/团队级文化建设,如何改变团队文化/促进团队文化的形成,就成为了ASD实施成功的关键。我们将在后续的文章中给出我们的建议。
3.CMMI与ASD融合
3.1 ASD适合于CMMI吗?
在前面的讨论中,我们从宏观上已经可以得出ASD方法确实适合于CMMI模型,即ASD作为众多的软件开发方法学的一类,确实可以作为实施CMMI的方法论的一个候选。也就是说,CMMI并不排斥ASD方法,尽管看起来CMMI与ASD方法好像是水火不相容的。
和这个问题有关的一个话题是:SEI和LA如何看待软件企业实施基于ASD的CMMI过程改进,即如何看待基于ASD的评估(CMMI 3级级以上)。应该承认,在2004年之前,很少有LA认同ASD方法,因而通过评估的企业也很少。近年来,从SEI的有关工作看,已经有很多许多这方面的一些成果得到认可,也出现了不少有关的评估案例。应该说,对于ASD方法的认可已经成为LA的比较一致的观点。
3.2 如何让ASD与CMMI有效融合?
有效实施基于ASD的CMMI过程改进,是一个非常大而且复杂的课题,会涉及到许多方面。在这里,只给出几个关键点:
a) 建立基于CMMI的过程框架;
b) ASD作为一种/几种适用方法,加入到过程体系中;
c) 制定有针对性地团队文化建设/开发实施方案;
d) 提升现有团队成员能力;