一些对CMM和XP做过深入研究的人看到这个题目可能会嗤之以鼻——搞错没有?这一个度量的标准,一个是方法论,不是同一范畴,怎么能放在一起比较?
的确,CMM仅指明了每个等级该做什么,并没有告诉人们如何去做,而XP则从方法论上告诉了人们如何去实践。两者不属于同一范畴,但同样对于软件开发而言,它们之间又有那么多的可比性,本文根据个人对两者的理解,谈下个人的观点。
为了便于对CMM和XP不熟悉的朋友理解,在行文前先对两者做以简单介绍。
关于CMM
CMM (能力成熟度模型)是英文Capability Maturity Model缩写。CMM的定义是:有关软件企业或组织的软件过程进程中各个发展阶段的定义、实现、质量控制和改善的模型化描述。
CMM根据软件开发过程能力成熟度共分5个等级,分别是初始级、可重复级、已定义级、已管理级和不断优化级。CMM5个等级共计18个关键过程域、52个目标、300多个关键实践。
CMM的核心思想是过程管理。从第二级开始,每个级等定义了相应的定义和规范。下图很好的表述了5个级别的联系。
CMM中18个关键过程域,分布在2至5级中:
9a3Tv.UV;o e2第2级(可重复级)有6个关键过程域,主要涉及建立软件项目管理控制方面的内容。
w)AT {&\}4ykbA2即:需求管理(RM)、软件项目计划(SPP)、软件项目跟踪与监控(SPTO)、软件子合同管理(SSM)、软件质量保证(SQA)、软件配置管理(SCM)51Testing软件测试网x!J%Asl!j
第3级(定义级)有7个关键过程域,主要涉及项目和组织的策略,使软件组织建立起对项目中的有效计划和管理过程的内部细节。
"LV.? u"CoM5^S2即:组织过程焦点(OPF)、组织过程定义(OPD)、培训程序(TP)、集成软件管理(ISM)、软件产品工程(SPE)、组间协调(IC)、同级评审(PR)
1Q m\IQ1qCD2第4级(管理级)有2个关键过程域,主要的任务是为软件过程和软件产品建立一种可以理解的定量的方式。51Testing软件测试网q JE |2eR.c5B
即:定量过程管理(QPM)、软件质量管理(SQM)
y w2Nx3H'Y'ig2第5级(优化级)有3个关键过程域,主要涉及的内容是软件组织和项目中如何实现持续不断的过程改进问题。51Testing软件测试网"p&gj,r*g4ir
即:缺陷预防(DP)、技术变更管理(TCM)、过程变更管理(PCM)
关于XP
XP(Extreme Programming)是一种敏捷软件工程方法,和传统的瀑布模型一样,XP也是一种软件开发模型,极限编程模型。
XP共包含四个核心价值和十二个关键实践。分别是:
四个核心价值——
沟通:项目中发现的问题往往是由于开发人员与设计人员、设计人员与客户之间的沟通不畅造成的,因此,在XP项目中没有沟通是不可能的。51Testing软件测试网Xc` OcD V R
简单:XP认为应该尽量保持代码的简单,只要它能工作就可以。Kent Beck指出与其实现一个复杂的的系统,不如设计一个能够满足目前需要的、简单的系统,因为你所考虑的情况可能永远都不会发生。
z5E3?)a3X q1a~2反馈:尽快获得用户的反馈,并且越详细越好,使得开发人员能够保证自己的成果符合用户的需要。
,K2} {Ty(B)ymi2勇气:这是最重要的核心价值。因为XP强调要"拥抱变化",因此对于用户的反馈,要勇于对自己的代码进行修改,丢掉坏的代码。
十二个关键实践——
1. 有计划的开发(planning design)
XP要求要求根据项目进展和技术情况,确定下一版本的功能开发范围;
2. 简单设计( Simple Design )
XP要求代码的设计应该尽可能的简单,只要满足当前功能的要求即可;
N6~TwP$T5r*Y23.小版本发行( Small Release )
以较小的增量经常向客户发行版本,然后根据用户反馈决定下一步的开发计划;
4.测试驱动开发( Test-driven )
在编写代码前先编写测试内容,而后再进行编码,直至所有的测试项都得以通过;
5.代码重构( Code Refactoring )
'U:q3WlXd3iT!G2代码重构是指在不改变系统行为的前提下,重新调整、优化系统的内部结构以减少复杂性、消除冗余、增加软件灵活性和提高性能;
6.系统隐喻( System Metaphor )
通过隐喻来描述系统如何运作、新的功能以何种方式加入到系统。XP不需要事先进行详细的架构设计,而是在迭代周期中不断的细化架构;
7.成对编程( Pair Programming )
:P m2gY!w.l iP P2XP认为在项目中采用成对编程比独自编程更加有效。成对编程是由两个开发人员在同一台电脑上共同编写代码,通常一个人负责写编码,而另一个负责检查代码的正确性与可读性;
8.每周40小时工作制( 40-hour Week )51Testing软件测试网IU G+iB2yd*{o
XP要求项目团队人员每周工作时间不超过40小时,加班不得连续超过两周,否则会影响生产率;
9.持续集成( Continuous Integration )
5T N @#~/F3nT7~2XP提倡在一天中集成系统多次,而且随着需求的改变,要不断的进行回归测试;
10.代码规范( Code Standards )
u&q@!oX6j Vy$g2XP强调通过指定严格的代码规范来进行沟通,尽可能减少不必要的文档;
11.现场客户( On-site Customer )
m1d RQ6o@ gCZ2XP要求至少有一名实际的客户代表在整个项目开发周期在现场负责确定需求、回答团队问题以及编写功能验收测试;
12. 代码集体所有(Collectively Ownership)
代码公有,提高了代码的透明度,这就意味这每个人都可以在任何时候变更任何代码。
CMM与XP
上面介绍了一些CMM和XP的常识知识,接下来该对两者做以对比分析了。
首先,在适用范围上,CMM主要是面对重型项目(200人以上)的,而XP主要是面对一些轻型项目(50人以下);
其次,对于需求比较明确的,一般不会变化或者变化比较小的比较适合实施CMM,而对于一些软件需求不明确,需求变化难以控制的项目更适合采取敏捷开发(XP)方法;
再者,实施CMM需求各种复杂文档规范,而以XP为代表的敏捷开发则尽可能避免这些文档;
第四,CMM讲的是做什么,并没有告诉人们如何去做,而XP讲的是如何去做,是方法论;
第五,实施CMM的企业采用的多是瀑布的开发模型,而采取XP开发方法则为迭代开发模型;
……