在之前的《风花雪月~开篇Cira说》中说了,要梳理一下自己这么多年做过的几大理论体系,被很多人问到过这些体系的区别,那就先从体系对比开始,每个人都有一颗八卦的心,不管是在生活、工作还是学术上,一说到不同的体系,就是喜欢让他们先掐起来,总喜欢比个高下,所以体系对比这个系列,就以博弈为主题吧,第一篇,先来说说CMMI和Agile
产生背景
CMMI
1984年,美国国防部出资在卡耐基.梅隆大学设立的软件工程研究所(SEI,Software Engineering Institute),SEI于1991年正式推出软件过程能力成熟度模型(CMM,Capability Maturity Model),2001年发布CMMI (Capability Maturity Model Integration, 能力成熟度模型集成) ,这是美国国防部为了确保军方大型软件项目的开发成功而诞生的。
Agile
2001年2月11日至13日,在美国犹他州瓦萨奇山雪鸟滑雪胜地,17个人聚到一起,交谈、滑雪、休闲,当然还有聚餐。他们试图找到共识,最终的成果就是《敏捷软件开发宣言》(Manifesto for Agile Software Development)。参会者们包括来自于极限编程、Scrum、DSDM、自适应软件开发、水晶系列、特征驱动开发、实效编程的代表们,还包括了希望找到文档驱动、重型软件开发过程的替代品的一些推动者。
从发布的时间就可以知道,10年的差距足以让两种理论就象两代人一样有着代沟,一个是软件工程时代的神存在,一个是互联网信息时代的强势出现。结果显而易见,大家都是喜欢小鲜肉的。
关注点
CMMI
对于军方项目美国国防部最担心的是什么呢? 相比开发周期、投入成本、软件创新、研发人员被激励、快速占领市场,毫无疑问,美国国防部最担心的莫过于:项目失败!
Agile
在新经济环境下,公司最担心的显然已经不是万无一失,而是担心慢人一步,担心没有创新,担心开发人员没有被激励、不能发挥出最大的价值。
关注点的不同,不同关键要素的优先级区别立现。
主角
CMMI
CMMI从一出生就被赋予的使命是要确保万无一失,是以把软件开发过程变成象生产线那样可控为目的,软件开发过程中的每个步骤、每个过程域、每个行为都被识别和定义,所以成为重型软件过程也就成为了必然。
Agile
敏捷的提出者就是工程师,他们非常清楚软件开发是一个创造性的工作,而完成这项创造性工作的主角是人,所以敏捷软件开发中把人放到了首要的位置。
在人、流程、技术的铁三角中,CMMI坚定的把Process作为了第一选择,而敏捷坚定的以人为本。
方法论
CMMI
前面已经说了是由SEI研究和发布的,所以CMMI是有组织有计划的不断发布新版定义,那套模型定义的圣经厚达700多页,把整个开发过程分为24个关键过程域,对每个关键过程域,详细定义了:
– Generic Goal (GG) 通用目标
– Generic Practices (GP) 通用实践
– Specific Goals (SG) 具体目标
– Specific Practices (SP) 具体实践
Agile
敏捷的方法论充分体现了以人为本,鼓励创新,没有一个统一的组织发布完整的模型,只有统一的敏捷宣言、敏捷原则,而各种方法论根据不同的场景、不同的关注点、不同的目的如雨后春笋般产生,这里随便列几个大家比较熟悉的:
1. XP – eXtreme Programming (XP) [Beck]:极限编程,关注于开发人员和强调团队工作
2. FDD – Feature-Driven Development [Palmer]: 特征驱动开发,需求驱动开发方式的一种
3. Scrum [Schwaber]: 迭代式增量软件开发过程,关注于具体的管理框架和实践
4. Lean Software Development [Poppendieck]: 精益软件开发,来自于丰田的产品开发实践
敏捷宣言
Agile Manifesto (2001) establishes a set of values that are people-centric and results-driven:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Responding to change over following the plan
Customer Collaboration over contract negotiation
That is, while there is value in the items on the right, we value the items on the left more.
敏捷宣言创立了一系列以人为本和结果驱动的价值观:
个体和交互重于过程和工具
可工作的软件重于面面俱到的文档
响应变化重于遵循计划
客户合作重于合同谈判
虽然右项也具有价值,但是我们认为左项具有更大的价值。
应用
CMMI
CMMI包含了产品开发、维护及服务完整的实践做法,覆盖了从开始到交付和维护的整个产品生命周期,它对于所有关键过程域和关键实践的定义,可以让软件开发过程可控、可预测、可追溯,可以让组织可以量化的知道自己的能力成熟度,也可以给甲方一个清晰的产品、服务提供方的能力度量,所以CMM/CMMI发布后不仅再限于美国军方项目而被快速的广泛应用,企业也会因为有个CMMI几级的头衔而大力宣传。
Agile
敏捷方法通常会带来更高的开发效率并且快速适应变化。敏捷原则只是一个方法论,并没有给出完整、具体而详细的流程,具体如何操作、采用什么样的具体实践,同样的实践在不同的组织、不同的产品、不同的团队如何落地都有可能千差万别。这极大程度的迎合了快速发展、变化无处不在的市场,近十年来它的热度不用我多言了。
看到这里,你是不是会有一个感觉,CMMI早已经该被Agile拍死在沙滩上了,而事实上大家也正在这么做,可是回过头再想一下,他们到底是什么?说到底,不都是以持续完善组织,产出优质的、满足客户要求的产品为目的的工具而已,既然都是工具,就无好坏之分,只有合不合适,是否选择了正确的工具、是否正确的使用了工具,在于选择使用的人,所谓没有更好,只有更适合。
每项技术都有局限性,如果有人说有一个对所有软件开发都适用的最佳的正确方法,千万别信。
CMMI强调过程的可观测性,Agile强调可观测的结果(可运行软件), CMMI 提供了更多以数学统计为基础的过程管理和质量控制技术方法,而敏捷中给出更多具体的实践方法。
在适用条件下,CMMI对于大型团队/强分工/长周期的项目是个神存在,而轻量敏捷方法通常会带来更高的开发效率并且快速适应变化。
CMMI 与 Agile 都有各自明确的适用范围。在一些价值观、原则和实践做法上,它们既存在着明显的区别或对立,同时又存在着一定的互补关系。
从零开始做到CMM 3级,再到CMMI 3级,再到CMMI 5级,然后华丽转身做敏捷转型,再到大规模敏捷,10几年的对这几个体系的实操,有几点深刻体会:
有着完整流程体系的组织在敏捷转型时,会更容易遇上思维壁垒,在改变思维方式时需要付出更大的努力。
有着完整流程体系的组织在敏捷转型时,一旦突破了思维壁垒,转型速度和效果会快速超过那些从零开始的组织,具有完整的理论体系素养的团队可以很好的把原有基础与敏捷结合,并为敏捷加速。
即使从零开始直接做敏捷,如果敏捷教练和团队能具备一些CMMI的一些关键过程域的定义和理论,会让敏捷的实施更有效。
不想做项目管理的工程师不是好工程师。这不是说每个工程师都应该去做项目管理,但是具备必要的项目管理基本知识和思维,就更容易站在不同的视角审视和处理自己的工作,就好比多维空间里的降维打击,很多时候站高一个层次去思考会容易很多,也更容易跟你的各种合作伙伴、上下级同事间有共同语言。
对于CMMI和敏捷的对比先扒到这里,说是博弈系列,其实不是争个好坏、输赢,双赢多赢才是最好的结果,不是吗。
因为体系很大,一篇肯定是涵盖不完的,在以后的梳理中还会涉及,尤其在实操环节应该可以更好的体现。
文章仅代表个人观点,如果有建议、意见、批评,也欢迎大家拍砖。
如果有想让我写的话题、问题,也欢迎后台留言。