CMM & 敏捷开发,向左走?向右走?

近几年来,敏捷开发模式在业界风生水起,SCRUM、XP、测试驱动开发等等,演化出很多方法论。有人说CMM就是过程规范,质量有保证;有人说CMM就是写一堆无甚用处的文档;有人说敏捷开发过程灵活,速度快;也有人说敏捷开发搞不好,就是裸奔;有人说CMM和敏捷开发是对立的,理念不同;有人说CMM和敏捷开发是统一的,可以融合。关于软件开发流程和模式的讨论数十年来不曾停止,人类智力活动的复杂性以及人性的多样化使得软件开发过程就像天上的云彩一样多姿多彩,却又难于琢磨。

沟通中的隐喻无处不在,软件开发尤其突出

古时有三个秀才同时进京赶考,路上偶遇一算命活神仙,这三个秀才就问起前程来,活神仙举起一根手指头,算是结果,并说是天机不可泄漏,自己理解去。秀才离去后,边上的人问活神仙,一根手指头是何意?活神仙笑而不答,一人回答说:这个“一”有很多种理解方式:一个考上了,就是一嘛;二个考上了就是一个没考上嘛;三个都考上了就是一起都考上了嘛,要是都没有考上就是一个都没考上。不知活神仙说的是哪一种?

正如一个手指头可以代表很多种含义,沟通中的隐喻无处不在,而很多时候我们并不能真正理解其背后的含义。比如在产品开发的过程中,我们的客户提需求的时候,往往就像上面的活神仙一样伸出了一个手指头,然后市场向研发伸出了一个手指头,开发人员在看了这个手指头后,根据自己的理解,开发出了“一个手指头”所代表的需求,而这个需求的目的和范围往往和客户的真实需求相去甚远。有可能客户要头牛,你却给了一只羊,结果后面不得不再次开发;也有可能客户要辆自行车,你却给了一台奔驰车,结果白白浪费了研发人力。现实生活中的沟通隐喻无处不在,对沟通隐喻的理解依赖于一个团队共同体验的多少,改善沟通隐喻的方法就是使用更合理的沟通途径。

减少沟通隐喻的利器——敏捷开发

CMM注重文档写作,适合长时间保留证据,但从沟通效果上来说并不是最佳,要减少沟通中的隐喻,最好的方式就是两个人频繁的面对面沟通,敏捷开发正是通过强调沟通的方法来减少沟通隐喻,从而提升对软件需求变化的响应。


我们来看一下敏捷开发宣言:

我们一直在实践中探寻更好的软件开发方法,身体力行的同时也帮助他人。我们建立了如下价值观:

个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划

也就是说,尽管右项有其价值,我们更重视左项的价值。

敏捷开发的本质就是通过良好的沟通减少团队和客户、以及团队成员之间的沟通隐喻,确保大家理解一致,至于沟通的过程记录、比如文档等,并不是最重要的,沟通目的最重要,沟通方式可以灵活。

CMM提供可靠性,敏捷开发提供灵活性

如果我们把软件开发的过程比作谈恋爱,那么CMM就像一个恋爱指南,结婚前要求两人必须先通过介绍人见面一次,然后轧马路、逛商场多少小时,一起看电影、喝咖啡几次,见双方父母,得到父母同意后才可以结婚。而敏捷开发的理念是双方一定要达到相互非常了解的程度才可以结婚,至于恋爱过程,可以由团队自己决定——当然这种恋爱过程也是有一定方法集的,比如迭代开发、任务墙、每日晨会、结对编程等。

曾经有开发人员听到敏捷这个概念时说,我们早该敏捷了,CMM要写这么多文档太浪费时间,敏捷开发可以大幅度提高生产率。其实这些都是对CMM和敏捷的误解,那些认为一敏捷就可以直接编码的想法无异于刚刚见到一个姑娘,就冲上去对人家说,我们结婚吧。所以敏捷不等于快,CMM的文档也不是完全没有必要,敏捷开发对人员的技能和成熟度要求较高,要让你们自己决定恋爱方式,自己决定什么时候结婚,你必须得成熟,知道相互之间了解到什么程度才可以结婚,并且灵活掌握了沟通的技能。

CMM提供了一个大多数项目都可以实践成功的路线,但有时候大家会质疑,我都按CMM的要求做了,规范程度也很高,但是为什么软件质量还是不行?就像完全按照恋爱指南操作不能保证婚姻幸福一样,貌合神离的按照CMM操作也不能保证软件质量一定就高,有些项目在执行的时候,需求设计文档都写了,但是实际对需求和业务理解得并不好。做软件是要倾注一个团队的思想、感情和心血的,敷衍了事的看电影、喝咖啡根本无助于双方的感情进展,反而是在浪费时间和金钱。CMM效果好不好,过程规范性是一方面,执行过程的人才是根本所在。

CMM&敏捷开发,相互借鉴、融合是趋势

软件开发是利用人的智慧进行产品生产的过程,是一项创造性的活动,人的因素至关重要,CMM重过程、重证据,但对人的积极性和创造力强调不够;敏捷开发充分调动了人的主观能动性,但对团队的成熟度要求高。CMM对于那些成熟度不高的团队而言,提供了一条可以让成功复制的实践路线,虽然它无法根据每个项目做到量身定做,但是在牺牲一定效率的情况下做到了普遍性的质量可控。敏捷开发为每个项目提供了足够的自主权,可以充分保证项目的效率,而且自主管理的方式对团队士气也非常有利。CMM和敏捷,都有值得借鉴的地方,磨合不够成熟的团队,业务功能复杂、难度高的项目,按照CMM好好的写写文档,对质量是很有帮助的;成熟度高的团队,或者业务功能逻辑很简单的项目,使用敏捷开发,减少过程交付,有助于提升软件开发效率。近期业界对于敏捷和CMM的判断从最初的狂热逐步转向理性,提出了有纪律的敏捷,不论采用CMM还是敏捷,相互借鉴、融合将是未来的发展趋势。

----------------华丽分割线-----------------

欢迎【订阅】软件架构师微信公众号:ArchitectClub,为您的软件架构师之路添砖加瓦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值