摘要:
Agile和CMMI是两种比较常用的过程改进的模型或方法论。对于我们从事中小型应用软件开发的企业,如何将两者结合,使过程既能发挥Agile的敏捷与持续交付特点,又能发挥CMMI等成熟过程的可预见性与可管理性的特点呢?本文尝试从分析Agile和CMMI的异同点入手,从过程体系规划,以及经典实践方面的结合等方面,论述Agile和CMMI是可以结合起来实施的,运用Agile方式是可以达到CMMI成熟度级别要求的。
关键字:
敏捷、Agile、CMMI、经典实践
正文:
- 过程改进的现状
目前大部分的软件企业的过程改进现状如下:
首先,现在的项目大部分都比较小,都是中小型运用开发,即使是大型外包公司,其单个项目也是比较小的;
第二,项目普遍交付期短,频繁交付且需求变更频繁,要求过程体系能够支持这种频繁变更与持续迭代;
第三,项目的质量要求差异性大,这个决定了需要对不同质量要求的项目采取不同的质量策略和过程策略;
第四是过程管理的人员对研发和项目管理理解不够深入,知其然而不知其所以然,导致过程适用性不高,过程规划与实施两张皮;
第五是过程改进比较急功近利,要么偏向认证与评估,要么现实绩效重于持续改进;
最后,过程改进过程中,片面重视质量管理方法的应用而轻质量文化的建设。
正是由于以上一些特征,导致在过程改进中人们由于一时的挫折而陷入迷失与彷徨,摇摆在各种模型和方法的选择中,尝试一个,怀疑一个,抛弃一个,由此陷入怪圈。作为主流的过程模型,Agile和CMMI到底孰优孰劣,是否可以结合使用呢?也成为长期的争论话题。
- CMMI与Agile的异同点探讨
让我们先来看看CMMI和Agile两种过程改进方法论和模型之间的异同之处吧。先说说这两者之间的差异:
站在CMMI的拥护者的角度看Agile,他们认为,两者的差距如下:
CMMI |
Agile |
√ |
成体系的过程方法和最佳实践集 |
× |
零碎的实践 |
√ |
文档化的可重复的过程 |
× |
靠个人和团队能力维系过程和项目的成败 |
√ |
量化控制 |
× |
缺乏必要的度量 |
√ |
完善的监控体系 |
× |
缺乏过程透明度 |
√ |
支持多特征的项目管理 |
× |
仅适用于小型项目 |
同样,Agile的拥护者对CMMI这样的强过程也有着种种偏见,他们认为:
Agile |
CMMI |
√ |
轻量级的过程 |
× |
重量级的过程 |
√ |
变更驱动 |
× |
计划驱动,欠灵活 |
√ |
阶段结果可见,计划弹性十足 |
× |
线性控制,欠灵活 |
√ |
自律,高效 |
× |
流程代价较高 |
√ |
强调可交付物的输出 |
× |
强调过程规范性 |
√ |
团队自组织 |
× |
QA监控和管理层弹压 |
CMMI本身是一种强过程,而且本身是强调过程可视性的,这与Agile的强调最大限度的降低官僚的附加管理活动、团队自组织与拥抱变化从表象上看起来是水火不容的。要使两者结合起来,就需要在两者之间找到契合点。
从我实施Agile的体会来讲,Agile是一种文化甚于是一种过程改进的体系模型。它体现了过程改进过程中对人的因素的关注。一切以人为核心,无论是计划,沟通,跟踪监控,还是文档化,以调动人的积极性、主动性和潜能为出发点,最大限度的降低过程活动消耗。另外,Agile下面是可以包容诸如软件工程、项目管理、支撑管理等各方面的最佳实践的。Agile本身所强调的Sprint划分,Daily
Meeting,持续集成等最佳实践与传统的软件工程并不冲突,是软件工程某些方面基于Agile的实例化。
同时,如果大家对CMMI模型和其评估方法体系进行深入研究也会发现,CMMI也不是大家想象的那样机械,那么重量级。CMMI是一个经典实践参照集,其经典实践是指导性的,是可以替换和客户化的。CMMI把过程集分成若干个过程域,每个过程域都有相应的过程目标,为支撑达到这些过程目标模型推荐了若干的经典实践。评估时候,只有这些过程目标是必须符合的,为了达到这些过程目标,你可以选用它推荐的经典实践,也可以选择其他替代的过程方法。如果不是为了评估宣称组织达到某个成熟度级别,我们完全可以只选取部分的过程参照CMMI的经典实践去改进,而达到相应的过程目标要求。
3.如何在过程改进中结合CMMI与Agile
对于CMMI和Agile的结合,我们可以从这个大策略上去考虑:运用CMMI的过程目标去要求过程,在过程策略上,参照Agile对人和过程效率的关注,参照CMMI的经典实践集。以下是我们在实践中将两者结合的具体实施:
首先,需要建立一个具备包容性的过程体系框架。这个过程体系框架具备如下特征:
- 能够包容Agile与CMMI的特定要求,即其能支持从轻量级到重量级的项目过程定义;
- 具备支持多项目特征的最佳实践集,具体可以采用以下方法实施:
- 在一定层次上抽象的组织级过程,从而使得组织级过程层面是统一的,而子过程级别是可以灵活选择的;
- 每类子过程根据典型的项目特征配备多套的备选子过程,而不是一套子过程中基于复杂的剪裁条件供项目组去剪裁;
- 这个过程体系框架应该是一个目标驱动的过程体系,目标举动的过程体系有利于充分调动团队的积极性、参与意识与潜能;
- 过程定义需要支持快速迭代交付与变更驱动的研发;
4.CMMI与Agile结合的实例
下面是CMMI和Agile结合的具体领域的示例:
◆ 实践示例-1-计划过程
√
CMMI的项目计划过程域
项目计划过程域的过程目标如下:
SG1 建立估算值
SG2 制定项目计划
SG3 取得对项目计划的承诺
√
Agile 的方法
“建立Backlog”是Agile中的计划过程,其对CMMI中的SG1
SG2 SG3都有体现。
Bocklog的参与者有Scrum team,Product
Owner,management和customer。Product Owner主持讨论调整Backlog,以及讨论决定下一个Sprint的Backlog;
讨论某个小组的细化的Sprint的Backlog的参与者是Scrum
Team,在讨论会上建立该Sprint的工作目标,并且决定怎么做;一般来说Sprint的Backlog颗粒度要求在4-16小时。
◆
实践示例-2-度量
√
CMMI的度量与分析过程域
度量与分析过程域过程目标:
SG1 安排度量与分析活动
SG2 提供度量结果
√
Agile 的方法
Product / Sprint Backlog
Graph
通过对每个Sprint的未完工的工作量度量,可以实时监控项目的范围变更状况和项目完工估计。
◆
实践示例-3-工程过程
√
CMMI的过程目标
VAL (确认)
SG1 确认准备
SG2 确认产品和产品组件
VER (验证)
SG1 验证准备
SG2 执行同行评审
SG3 验证工作产品
TS (技术解决方案)
SG1 选择产品组件解决方案
SG2 执行设计
SG3 实现产品设计
PI (产品集成)
SG1 准备产品集成
SG2 确保接口的相容性
SG3 组装产品组件并交付产品
√
Agile的实现过程
测试驱动
测试:A/B交叉测试;集成测试等。
评审:A/B交叉评审。
技术实现
Agile并未排斥引入设计方法,技术解决方法,编码规范等典型的软件工程技术和方法。
CI ( 持续集成)是Agile最重要的一个最佳实践,它是传统的集成和每日构建的延伸。
5.小结
CMMI和Agile都聚焦于提高产品质量与提高过程与团队绩效,都是目标驱动的过程体系。通过适当的过程体系规划,能使两者在过程目标和子过程的具体实践层面有机结合起来,充分发挥两者的优点,提升组织的过程改进。
|