人们经常认为'敏捷开发方法'和'CMMI最佳实践'是互相抵触的。本报告首先阐明了两者之间的这些“不和谐”实际上是不存在的,并且建议CMMI和敏捷的拥护者们利用好对方和优点,共同开拓,并从中受益 ,充分发挥二者的潜在优势,显著提升业务性能。
1. 问题说明
敏捷开发方法和CMMI最佳实践经常被人们认为是互相抵触的。如果这种观念以及引起这些观念的原因不能解释清楚,我们将在具体实施这些方法的过程中遇到更多的困惑和冲突。此外,CMMI和敏捷两种方法都蕴含了很多良好的软件开发的基本原则,然而这些原则却经常被另一方所忽视。实际上,无论CMMI还是敏捷,所有这些知识和方法本身对软件项目的成功都很重要。从长远的眼光来看,这些“不和谐”的存在,对软件工程行业的健康发展造成不利影响。
为什么在敏捷和CMMI阵营之间存在这些争议?本文的目的,就是对争议的原因进行解释,并说明为什么这些争议实际上是不存在的,并且请求在您(和大家)的帮助下,使整个软件开发社区意识到,如果能够适当地,混合使用CMMI和敏捷的原则和方法,可以大大提升软件开发的质量和效率。
我们相信敏捷和CMMI阵营存在争议的最主要原因是以下两点:
(1)早期采用CMMI和敏捷方法的案例分别代表了各自比较极端的情况。早期的CMMI面向的是大型的、不愿承担任何风险的、肩负重要使命的项目。项目经常直接在高等级管理者的分层监督和管理下进行。相反,早期敏捷方法通常关注小型、需求不稳定、单一团队开发的“纯”软件项目。这样的两个极端情况为本文探讨的所有问题提供了基调。
(2)关于CMMI和敏捷的不准确(甚至是错误)的信息和对两种方法的一些“误用”,导致了两大阵营对彼此做法产生了错误认识。这种负面的理解使CMMI和敏捷之间不断争吵,究其原因,这些问题中的大多数是由以下因素引起的:
a. 误用——从CMM到CMMI,20多年的经验,然而一些实践却经常被错误使用,或者被应用(也就是“覆盖”应用,在原本已经有效的活动上叠加运用)到那些已经对开发活动有深入理解,且已经富有成效的开发团队上。
b. 缺乏准确的信息——在敏捷社区和CMMI社区里都缺乏彼此正确理解对方的准确信息。
c. 术语困难——CMMI术语(如纪律、质量保证和可预测性等),敏捷方法中的术语(如持续集成、测试驱动开发和共有代码所有权等),经常具有上下文关联的含义,很容易被错误的理解和滥用;
d. “自顶向下”相对“自底向上”的改进方法——新方法的引入的过程中, “一个声音”的支持程度往往超过“另一个声音”(例如,管理者的声音和参与/执行者的声音),然而,无论哪个声音,都经常忽略了另一个“更重要的声音”,那就是“怎样能使业务运行的更有效?
在本报告中,针对CMMI和敏捷两种方法/范式,我们确定了一些我们认为危害性极大的错误观念,并进行了讨论,之后,我们针对如何改进和提升认识、正确地理解两种范式给出了建议。作为后见之明,我们承认,在某种程度上,是CMMI在发展和引进过程中的一些方法,引起了一些用户对CMMI本质的某些错误认识(我不能这样来说敏捷社区;但是我们觉得敏捷方法也存在着某种意义的类似情况)。这种错误的认识/观念,可能导致在不适当和没有效果地使用CMMI。
更进一步讲,我们确定了CMMI和敏捷之间存在的常见误解。很多情况下,这些误解与对CMMI和敏捷的误用有关系,但是有时这些误解也是由于缺少准确的信息造成的。另外,对观念和经验上的长期固有信条的坚持,也是造成误解的原因之一,这种情况和CMMI、敏捷两种方法都没有关系。
敏捷社区对CMMI的一些误解来源于CMM的一些特征,目前这些特征已经不属于CMMI了。CMMI包含了许多改进并由此和CMM之间存在着区别,CMM中的内容自1993年以来就没有更新过了(实际上,包含了一些改进方法的未完成的CMM稿件版本2,是在1997年被创建的,但是这些内容从来没有被正式发布过,而是作为了CMMI初始文档的一部分加以利用),例如CMMI中,更加关注风险管理、集成化团队和工作环境,而减少了项目启动所需要的固定必备条件和做事情要“依据文档化的程序”等方面的关注。敏捷社区的部分人使用CMM的概念来评判CMMI是不公平的。比如把成熟度等级2的目标说成是产生“可重复使用的过程”,这种不正确的观点一直沿用到今天。近来在CMMI相关的网络坛中,一些参与者已经承认并不像他们了解CMM一样了解CMMI。
更麻烦的问题是,有一些CMM的用户从来没有更新到CMMI,并且坚持使用那些相对于更新后的CMMI模型来说,在软件和系统开发过程中缺少灵活性的观点;某些早期的CMM用户,虽然更新到CMMI,但是还在固守CMM中一些过时的观点。
另一个重要的因素是,实施者们经常把那些实际上没有遵循CMMI或敏捷原则的活动贴上CMMI或敏捷的“标签”,出现这种情况都源自于对CMMI和敏捷的负面理解。
现在,我们已经认识到CMMI和敏捷能够在一起成功使用。在本文的末尾引用了一些综合使用两种方法的成功案例;SEI一直以来对敏捷开发方法感兴趣,持续关注着CMMI和敏捷社区的经验。
(本资讯于2015-01-16首次发布)