在一家以敏捷开发和咨询著称的公司工作了一年了,以下是我当前对敏捷的认识:
1. 敏捷宣言:
个体与交互 胜过 过程与工具
可以工作的软件 胜过 面面俱到的文档
客户协作 胜过 合同谈判
响应变化 胜过 遵循计划
以上是大家熟悉的四句箴言,但还有一句话也许常被忽略:“即,虽然右侧条目有其价值,但我们更重视左侧条目”。这句话也放在了宣言不显著的地方。宣言的官网背景是几位敏捷先贤讨论问题的画面,中间的大胡子应该是老马(Martin Fowler)。这副背景画颇有宗教油画的风格。
2. CMMI
一个叫德里克·布鲁克斯的人曾经领导开发过一个失败的大型计算机操作系统:System/360。他离开这个项目后写出了古典名著《人月神话》。接替布鲁克斯来擦项目屁股的人叫做瓦茨·汉弗里。汉弗里惊讶的发现这么大的项目居然没有正式严格的计划,不知道汉弗里到底经历的多少麻烦,他退休后加入了一个五角大楼开办的软件工程学院,在那儿他和同事们建立了软件成熟度模型(CMM),其中最有名的是其五个台阶:
台阶一:组织基本没做啥
台阶二:组织做一些计划,跟踪,配置管理工作,也讨论质量保证等话题
台阶三:组织为各种活动定义了过程
台阶四:组织有了准绳,活动可以跟踪和度量
台阶五:组织有持续改进的过程
有时,敏捷和CMMI被人们一起谈论作对比,从我对它们目前的了解来看,两者似乎没太多联系。而且CMM5的“持续改进的过程”似乎比“敏捷”还敏捷。
3. Scrum
我第一次真正对敏捷产生兴趣是两年前听说了这个词,随后参加了公司的Scrum的兴趣小组,也读了些Scrum的书,其中对这本印象深刻。有一阵子还傻乎乎的自己给自己写Backlog,Sprint和Story,还关注下Burning down chart。对于很多人,或许Scrum就是敏捷,敏捷就是Scrum。依我看来,Scrum像是CMM3 + 敏捷,或者是基于敏捷理念的开发流程。有趣的是:几乎每本Scrum的书和文章都要提到一鸡和猪的故事。Scrum之所以流行可能是其提供一整套可操作的过程,容易上手,如同方便面一般方便。但是教条的执行Scrum我看还真一点都不敏捷。
4. 极限编程(XP)
极限编程的名字起得颇有邪教的感觉。XP要比Scrum历史悠久,但没有Scrum那么流行。XP中的TDD和结对编程常常引起很大的争议。在我一年的XP实践中,我却很对这两个玩意产生了极大的兴趣。、
反感TDD的人往往是没有真正尝试过TDD的人,想玩玩TDD的最佳方式也许是跟一个熟悉TDD程序员结对一会儿。很多场合下,用TDD开发非常有趣并且能写出高质量的代码。但是任何时候都教调的使用TDD不一定能带来多大好处,测试代码也有维护成本的。
对于结对编程,大多数人都是很难理解的。有些拥有结对编程经验的程序员对它又爱又恨。结对最大的好处或许是知识传播,想学习某种技术时和一个高手结对是效率非常高的方式。新人加入团队,和老成员结对能非常迅速的进入状态。但是两个水平差异不大,但开发习惯迥异的人坐在一起结队是一种煎熬。一个经常发生的事情是:经过长时间无意义的讨论甚至争吵后,双方妥协写出一段折中的代码,这段代码仅仅是折中的而不是最好的代码。
5. 精益(Lean)
敏捷宣言已经发布十年了,已经不是新鲜玩意了。业界需要点新潮点的词汇。精益来自于丰田公司的生产模式。在朝鲜战争时期,丰田汽车公司为了为美军提供更多品种的汽车,来自丰田纺织公司的大野耐一根据以往的经验并通过不断的实践发明了丰田生产方式。这种生产方式在学术界被称为精益生产。精益生产中有不少实践跟一些敏捷开发实践不谋而合,如自动化,可视化等。但是生搬硬套精益思想中的一些理念到软件开发中多少有些别扭。
6. 敏捷实践
以下是我接触过的敏捷实践:
结对编程:尤其适合老人带新人,和老艺人传帮带很像,和高手结对真是职业生涯的幸事
TDD:有趣,值得尝试
站立会议:不错的交流方式,站会讲究简短不展开,有问题会后交流
故事卡:一种很有效的需求分析方式
故事墙:可视化项目进展,很有趣,但我个人认为作用不大
燃烧曲线:没感觉,或许客户喜欢看
回顾会议:回顾会议的召开需要些技巧,需要个好的主持方式,确实能暴露问题
Show Case:需要客户配合才有作用
重构:啥也不说了,最爽的事
迭代开发:讨厌僵化的迭代开发,迭代计划还是有弹性的好
看板方式:来自精益生产,能够取消迭代,减少浪费,赞
持续集成:见7
7. 持续集成
每当Build成功,就有小鸟唱歌;Build失败就是一声闷雷,团队中必须有人站出来为此负责。这种开发模式我去年才刚刚接触到,但恐怕我的职业生涯会离不开它了,我认为它是最有用的敏捷开发实践。甚至有些同事对持续集成的评价是持续集成就是敏捷。
8. 传说中的敏捷团队
传说中的敏捷团队,每个人都是多面手,沟通畅通,有效协作,共同成长并且持续改进,心心相通,众志成城,快速响应变化,为客户带来最大的价值。我相信这样的团队是存在的,因为我现在所处的项目团队已经让我看到了敏捷团队的雏形。
9. Martin Fowler
有幸和老马有了一次面对面的交流,和老马介绍了下我们的项目,但他也没有给出什么建议。
最后我问了两个问题:
我:您是我的偶像,请问我如何才能成为一个像您这样的软件开发高手?
老马:我无法回答,我不是开发者了,我只是个演说者。
我:项目中和客户交流,客户说你们不用搞太多测试和TDD之类,我们希望你们做的更快些,多实现功能为主。我认为我们的主要目的是为客户多交付价值,所以我们确实应该减少测试的力度,您怎么看?
老马:你需要权衡(Trade off),但在我看来写测试只会让我更快些。
10. 对敏捷的质疑
一篇对敏捷讽刺的帖子,的确,如果教条的使用一些敏捷实践恐怕没什么好处。在公司内部,也有很多质疑敏捷的声音,我想如果没有质疑和反馈来促使改进,敏捷就不是敏捷了。
11. 技术 > 任何方法论
我到现在还一直持有这个偏激的观点:软件开发不是工程而是艺术,开发者的技术水平决定了软件的水平。敏捷实践能够帮助优秀的发者们做的更好更快。但追求更高的技术才是软件开发的王道。
分享到:
相关推荐
《关于敏捷开发的一本好书》是一本由Jim Highsmith撰写的著作,出版于2002年,全书共448页,ISBN号为0-201-76043-6。该书深入探讨了敏捷软件开发这一主题,旨在帮助读者理解并实践敏捷开发的核心理念与方法论。 ###...
1. "敏捷开发Scrum.doc":这可能是一份关于敏捷开发中的Scrum框架的详细文档,涵盖了Scrum的角色(产品负责人、Scrum Master和开发团队)、事件(Sprint、Sprint计划、每日Scrum、Sprint评审和Sprint回顾)以及工件...
最近抽出时间,看了一本关于敏捷的书籍,其中以生动的例子讲解了 scrum 的相关知识 , 让我映象很深刻,当然也受到了不少启发,在此,小弟不才,和大家一起分享下。 关于敏捷,这个大家百度一下就知道了,我就不废话...
根据提供的文件内容,以下是关于SCRUM(敏捷开发模式)的相关知识点: ...以上是基于提供的文件内容整理的关于敏捷开发模式SCRUM的知识点。由于文件内容有限,更多的具体细节和深入讨论将需要进一步的文档和实践经验。
【我的敏捷文档】是关于敏捷开发方法论的资料集合,主要包含了两本书籍:《敏捷无敌》和《Kanban and Scrum - cn》。这两本书深入探讨了敏捷开发的核心理念以及具体实践策略,旨在帮助读者理解并有效地应用敏捷方法...
本培训资料集包括了敏捷开发的理论、实践以及用于员工和学生培训的文档和PPT,以下是关于敏捷开发的一些关键知识点: 1. **敏捷宣言**:敏捷开发的核心理念是人高于流程,可工作的软件高于详尽的文档,客户合作高于...
【2012敏捷开发大会PPT】是一个集合了多位业内专家在敏捷开发领域的深度分享,涵盖了一系列关于敏捷开发理念、实践以及转型策略的主题演讲。这些演讲内容旨在推动软件开发团队更加高效、灵活地应对快速变化的需求,...
Scrum是一种敏捷开发框架,由Jeff Sutherland和Ken Schwaber等人在1990年代初期提出,最初在Easel Corp实施。它强调团队协作、快速反馈和适应性,旨在提高软件开发的效率和质量,特别是在面对复杂和变化的项目需求时...
CMMI V1.3版本对敏捷方法的注解是针对那些采用敏捷开发方式的组织,以帮助他们在遵循CMMI模型的同时,充分利用敏捷的灵活性和高效性。 在CMMI V1.3中,对于敏捷方法的考虑主要体现在对实践的通用性和适应性的理解上...
根据提供的文件信息,无法直接生成关于敏捷开发知识体系的具体内容知识点,因为所给内容并非实际的知识体系描述或相关内容,而是提示信息和一个网址链接。但是,根据标题“敏捷开发知识体系--高清版.pdf”,我们可以...
综上所述,《如何构建敏捷项目管理团队》不仅是一本关于敏捷教练角色和职责的指导书籍,更是一部涵盖了敏捷团队构建方法、角色定位以及实战经验分享的综合性著作,对于正在备考敏捷教练认证或是希望深入了解敏捷开发...
【敏捷开发全程实战】是关于敏捷开发方法论的深度实践指南,旨在帮助读者全面理解和掌握敏捷开发的核心理念、流程及工具。在这个过程中,我们将深入探讨敏捷开发的起源、价值以及如何在实际项目中有效地实施敏捷。 ...
在这个压缩包文件"敏捷学习资料"中,可能包含了一系列关于敏捷开发的学习资源,如理论介绍、实践案例、工具使用指南等,旨在帮助学习者深入了解并掌握敏捷开发的核心理念和实践技巧。 首先,敏捷开发的核心价值观...
本培训资料包含了一系列关于敏捷开发的PPT和文档,非常适合用于员工和学生的培训。 一、敏捷宣言 敏捷宣言是敏捷开发的核心,它强调了四个价值观:个体和互动高于流程和工具,可工作的软件高于详尽的文档,客户合作...
在本压缩包中,你将找到一系列关于敏捷开发和管理的资料,帮助你理解和实践敏捷理念。 首先,我们看到一个名为“火星人敏捷开发手册+2012-12-25.pdf”的文件,这可能是一本详细介绍敏捷开发实践的手册,特别版为...
《敏捷软件开发经典教材》是IT领域内关于敏捷开发的一部权威著作,由Alistair Cockburn编写,作为敏捷开发领域的先驱者之一,Cockburn在此书中深入探讨了敏捷开发的理念、方法以及实践,为软件开发团队提供了一套...
敏捷开发是软件开发领域的一种方法论,旨在应对传统软件工程理论中存在...本书《轻松Scrum之旅:敏捷开发故事》是一本关于敏捷开发的实践经验和方法论的书籍,旨在帮助读者更好地理解和掌握敏捷开发的思想和实践经验。
【敏捷PPT】是关于敏捷开发方法论的一种呈现方式,通常用于向团队或利益相关者介绍敏捷项目管理的核心理念、实践和流程。敏捷方法强调快速响应变化、迭代开发和持续改进,以提高软件项目的成功率。在敏捷环境中,PPT...