Saturday, January 24, 2009

CMMI与Agile的交集

最近有人在中国开展了有关将Agile与CMMI相结合的讨论,其中一个令人困惑的问题,是CMMI是一系列硬性的过程定义,与Agile的实践格格不入,很难有一个交集。

我倒不这样认为。其实,在看清楚之后,人们很容易判断象SCRUM之类的Agile实践其实并不是过程本身,它们都只是一个框架,以方便在其之下展开过程。而CMMI则真的是一系列过程的实践,也可以说是开发过程的最佳实践,而CMMI本身好象并没有要求这些实践一定要在什么框架之下进行,这就为这两者相结合创造了条件。

从另外一角度来考虑,我认为在机构中推动CMMI的最困难之处,在于没有一个适合软件开发的框架,过去实行的老一套的基于Waterfall的框架已经被实践证明不适合软件开发,而SCRUM则正好填补了这一个空缺。

以我的理解,在CMMI Level 3所要求的实践之中,基本上可是把它们分成三个类型,一个是项目管理,另一个则是机构管理,再者就是技术方案。在Agile中,前两个是SCRUM的专长,后一个是XP的专长。我们可以把一些具体的实践来出来晒一晒,比较一下。

项目管理类

在这一类里有下面几个实践领域,
  • 需求管理
  • 项目计划
  • 项目监控
  • 危机管理
  • 配置管理
SCRUM基本上包括了前三个实践。需求是通过产品Backlog来管理的;项目计划和监控是通过对产品Backlog和Sprint Backlog的安排来达到的,同时也直接定义了SDLC。危机管理是通过不断地对Sprint对行总结审查而进行的。配置管理倒不是这什么明显,因为它本身就是自成一体的东西。

机构管理类

在这方面有如下几个领域,
  • 度量与分折
  • 过程与产品的质量保证
  • 机构级过程投入
  • 机构级的过程定义
  • 机构级的培训
  • 集成项目管理
  • 决策分折与方案
在Agile的实践中在机构上的一些领域中并不是很成熟,但也不是所有的领域,而且也不是象想象那样不成熟。象SCRUM中的Burndown图就是度量与分析的一个实例。过程和产品质量的保证以及机构级的过程定义是通过组织机构高层对于Agile实践的承诺来达到的。现在SCRUM也已经有了一些标准的培训认证。

技术管理类

在这方面有这几个实践领域,
  • 需求开发
  • 技术方案
  • 产品集成
  • 查证
  • 确认
在SCRUM里,需求开发的结果就是产品Backlog。技术方案讲的是如何设计,开发和实现需求。这在XP中都有概括,象增量设计,测试驱动开发(TDD)。产品集成在XP中有持续集成的概念。查证在XP中有结队编程。在SCRUM中,确认是一个经常性的活动,在每个Sprint之后都会进行。

总结

可见其实CMMI的各个领域是可以放在Agile的框架之下的。也就是说,在Agile的某种方法(比如SCRUM)内,CMMI的原则都基本适用。人们可以想象在SCRUM的框架内去实践CMMI,从而既享受了敏捷的好处,又达到了业介所要求的各种最佳实践,可谓一举两得。

1 comment:

张克强 said...

"可见其实CMMI的各个领域是可以放在Agile的框架之下的。"
反过来就是“Agile的各种方法是可以放在CMMI的框架之下的。”
我更加赞成后一种说法,Agile流派纷呈,在具体方法上存在不一样的做法,也就是Agile方法之间不一定兼容,而CMMI是有效实践的特征元素,反而可以和大多数Agile方法兼容。