敏捷软件开发图书概览
敏捷软件开发图书概览
“ 敏捷软件开发宣言:我们正在通过亲身实践和帮助其他人实践,揭示更好的软件开发方法,通过这项工作,我们认为:
人和交流胜过过程和工具
可工作的软件胜过面面俱到的文档
客户协作胜过合同谈判
响应变化胜过遵循计划
虽然右项也有价值,但是我们认为左项更重要。 ”
—— Kent Beck , Mike Beedle , Arie van Bennekum , Alistair Cockburn , Ward Cunningham , Martin Fowler , James Grenning , Jim Highsmith , Andrew Hunt , Ron Jeffries , Jon Kern , Brian Marick , Robert C. Martin , Steve Mellor , Ken Schwaber , Jeff Sutherland , Dave Thomas
敏捷软件开发这个词在 2006 年的中国软件界听起来仍然显得有些陌生。自 2001 年敏捷联盟被发起以来,敏捷方法的实践经验和理论研究都在不断的更新。而我国的大多数程序员还是只能在书本上读到敏捷的好处,很难在项目中进行实践。这其中的原因,主要是缺乏拥有实际敏捷项目经验的人来带领实施敏捷。虽然敏捷开发是种实践行为,很难从书本上直接学习,不过多数程序员了解敏捷,却都是先从书本开始的。无论结果怎样,从认识到实践的过程是免不了的。
敏捷软件开发之方法论篇
大家都知道敏捷软件开发方法包括了多种方法论,主要有: SCRUM , Crystal, 特征驱动软件开发( FDD ),自适应软件开发( ASD ),以及最著名的极限编程 (XP) 。这些方法论分别在不同的著作上专门论述过:
SCRUM :《 Agile Software Development with Scrum 》 by Ken Schwaber, Mike Beedle ,《 Agile Project Management With Scrum 》 by Ken Schwaber
FDD: 《 Java Modeling in Color with UML 》 by Peter Coad, 《 A Practical Guide to Feature-Driven Development 》 ( 特征驱动开发 ) by Stephen R Palmer, John M. Felsing,
Crystal: 《 Crystal Clear 》 by Alistair Cockburn
ASD: 《 Adaptive Software Development 》(自适应软件开发) by James A. Highsmith
其中尤以 XP 系列的书籍居多。人民邮电出版社的一系列极限编程系列丛书,在国内引进较早。在还没有统一敏捷词汇的情况下,引发了一批敏捷先锋人士的热情,是我国程序员的敏捷启蒙教材。这些书包括《 Extreme Programming Explained 》(解析极限编程),《 Extreme Programming Examined 》(极限编程研究),《 Extreme Programming Installed 》 ( 极限编程实施 ) ,《 Extreme Programming Explored 》(探索极限编程),《 Extreme Programming Applied 》(应用极限编程)《 Extreme Programming in Practice 》(极限编程实践),《 Planning Extreme Programming 》(规划极限编程)等,这些书有的是作者的 XP 实践论文,有些是对 XP 项目的介绍,其中,值得推荐的是下面两部著作。
《 Extreme Programming Explained: Embrace Change 》 by Kent Beck
第一版中译版:《解析极限编程:拥抱变化》, 唐东铭, 人民邮电出版社
第二版中译版: 雷剑文,电子工业出版社
作为 XP 的开山之作,目前已经出版了第二版。在第一版中, Kent Beck 对 XP 作了详细的描述。从当前软件开发的现状和问题谈起,从需求的变化到如何拥抱变化,给出了 XP 的四项价值观和十二项实践。对于想了解敏捷的来龙去脉的人,此书属于必读之类。在第二版, Kent 根据几年来的实践,为 XP 增加了一项价值观:尊重,并增加了原则的概念,同时增加和删改了一些实践。
该书第一版是程序员的宣言,这和 Kent 的背景很有关系。随后 XP 经历了五六年的发展和实践, Kent 自己也逐渐意识到,这样的观点太狭隘了。因此就有了第二版,与其说这是技术书籍,到更像是纯粹意义的软工书籍。期间也可以看出 XP 的体系更加完备。这其中尤为突出的是把人放到了更为重要的地位。
《 Extreme Programming in Practice 》 by James Newkirk, Robert C. Martin
中译版:《极限编程实践》, 王钧, 人民邮电出版社
读过了一些列的 XP 书籍,程序员们都会觉得 XP 非常好,但到底如何才能开始实施 XP 呢?还不是太清楚。本系列中的这本书用一个完整的小项目作例子,从头到尾教给人如何敏捷开发,是一本不可多得的实践教材。如果想直接实施 XP 开发,这本书可以给你很大启示。
敏捷软件开发之实践篇
一、极限编程最佳实践
由于极限编程是如此的流行,多数敏捷团队都会或多或少的借鉴一些 XP 中的敏捷实践,而 XP 的每一个敏捷实践也确实值得大书特书,而其中最著名的是测试驱动开发和重构实践:
《 Test-Driven Development 》 by Kent Beck
中译版:《测试驱动开发》, 崔凯,中国电力出版社
测试驱动开发是 Kent Beck 另一部力作。 “Clean Code That Works” 是敏捷开发的目标之一,那么如何达到这个目标? TDD 给出了一种方式。测试实质上是需求。由需求产生出的代码肯定是能够工作的功能代码,而要实现 Class 本身的可测试性,就不得不写出高度解耦合的 Clean 的代码。本书从一个 Money 的例子入手,从最初的一点需求开始,逐步增加需求,完成整个货币系统的代码。后面又给出了 Unit Test 中的一些最佳实践和模式供参考。
然而,本书的教导意义比其实践意义更突出。作为一本 TDD 的教程或入门教材,这本书无疑是最佳的,其中提出的一些最佳实践更是值得经常阅读来温习。本书面向的是单元测试,而实际开发中面对的数据库测试, Web 测试等问题并不属于单元测试的范畴。因此读者并不能从中直接进入到实战。
另一本同名书《 Test Driven Development: A Practical Guide 》由 Davis Astels 撰写,他将该书看作是 Kent 著作的补充,重点阐述利用 TDD 开发所必要的技术和工具上,因此对实际开发更具实用性。
《 Refactoring: Improving the Design of Existing Code 》 by Martin Fowler
中译版:《重构:改善既有代码的设计》,侯捷,熊节,中国电力出版社
重构这本书的意义在于,他提供了一种让你写出更加优美代码的能力。在测试的保证下,重构能够发挥强大的威力。敏捷团队中,不断的重构出简单且高效的代码才能够保持拥抱不断变化的需求。后来的一本书《 Refactoring to Patterns 》(从重构到模式) by Joshua Kerievsky ,更是将重构的威力发挥到极限。
重构曾被称为软件开发图书的双璧,另一本书是《 Design Patterns 》 ( 设计模式 ) by GoF 。当然,对现在的软件开发这二者已经不是最重要的。 Thought Works 的首席科学家 Martin Fowler 总结了朋友们的各种实践心得,写出了这本书。从几年后的目光来看,这本书中的多数实践都被各种 IDE 做到了操作菜单中。虽然 IDE 提供了大量重构功能,但仅靠 IDE 是无法写出简洁美妙代码的,多数的敏捷团队重构工作做得还是不够。
另外有一本专门介绍结对编程的书,《 Pair Programming Illuminated 》(结对编程技术) by by Laurie Williams and Robert Kessler ,指出了为什么要结对?并从各种不同水平不同性格的程序员结对情况来讨论该实践的优劣。对此有兴趣的程序员不妨一读。
二、敏捷软件开发实践
自从 2001 年敏捷联盟成立以来,单独推广极限编程的书变少了,而统一口径推广敏捷的书变得越来越多。两本同名的敏捷软件开发都是不可多得的好书,
《 Agile Software Development : Principles, Patterns, and Practices 》 by Robert C. Martin
中译版:《敏捷软件开发:原则,模式与实践》,邓辉, 清华大学出版社
被业内人士称为 Uncle Bob 的 Robert C Martin 在沉寂几年后写出了这部书。该书可以算是从软件开发角度对敏捷方法阐述的最详细和全面的一本。之前的敏捷书籍多是关注于过程改进,而对如何从技术角度实施讲的比较少。本书一开始先介绍了敏捷联盟和敏捷开发过程。之后详细论述了面向对象设计的原则,这些原则是本书的精华之一。后面通过几个项目介绍了如何将设计模式应用于项目中。
Uncle Bob 不愧是实践的大师,写出来的书也是拥有很强的实践意义。在敏捷团队的办公桌上,应当常备此书,一来可作为参考查询,二来可以作为新成员的必读书目。
《 Agile Software Development 》 by Alistair Cockburn
中译版:《敏捷软件开发》,俞涓,人民邮电出版社
这本书更加适合管理者来阅读。 Alistair 从项目人数和交流难易程度,将敏捷的各种方法划分了其适用范围。人数多的或分布式项目就需要靠其他手段来加强交流,人数少的就可以靠 pair programming 等进行面对面的交流。交流和反馈是敏捷的核心。同时 Alistair 也介绍了一下他提出的 Crystal 方法族。
三 . 敏捷项目管理和敏捷需求分析
在推广敏捷一段时间后,敏捷社群也意识到,多数书籍更像是面向开发人员,过于技术化,难以吸引项目经理或主管。因此,一批面向管理者视角的书也开始浮出水面,这些书包括:
《 Agile and Iterative Development 》(敏捷迭代开发) by Craig Larman
《 Lean Software Development 》( 敏捷 软件开发工具 — 精益开发方法 ) by Mary Poppendieck
《 Agile Software Development Ecosystems 》(敏捷软件开发生态系统) by Jim Highsmith
书中从各种角度比较和分析各种敏捷方法的优劣,异同,起源,适用范围等。这些书对于一个项目主管决策使用何种过程来在自己的团队中实践敏捷有很好的参考作用。
近两年,人们开始逐渐意识到敏捷开发的侧重点不仅仅是开发过程和开发实践,还包括对需求和项目管理等其他相关方面的实践。一些相关的书籍也悄然出现在人们的视野:
《 Agile Project Management 》(敏捷项目管理) by Jim Highsmith
《 User Stories Applied 》 by Mike Cohn
《 Agile Estimating and Planning 》 by Mike Cohn
《 Agile Requirements & User Stories 》 by Louis Molnar
这些书不同于以往强调新方法,新过程的书目。敏捷项目管理类的书主要介绍如何管理敏捷团队,如何计划要开发的需求,如何为客户提供最大的价值。介绍敏捷需求分析的书主要帮助商务分析师或项目经理挖掘和分析用户需求,写出用户故事,评估和计划用户故事等。人们已经意识到,各种方法论的实质是相同的,都是提供商业价值,减少浪费,增加交流,快速反馈。因此不需要着重于区分是使用了那种方法。对项目经理来说,不同的项目或团队应当采用适应其特殊情况的方法,而这些方法的基本原则是相同的。
四 . 敏捷软件开发新方向
对架构师或程序员来说,近年来的技术进展,也使得敏捷开发有了新的研究方向:
《 Agile Web Development with Rails 》 by Dave Thomas, David Hansson, Leon Breedt, and Mike Clark
该书是获得 2006JOLT 奖的书,讲得是采用 Ruby on Rails 这个 Web 开发工具新贵来快速开发 Web 项目,从而达到快速反馈拥抱变化的目的。
《 Refactoring Databases 》 by Scott W Ambler
此书是 Scott 的新作,延续和继承了《 Agile Modeling 》(敏捷建模)和《 Agile Database Techniques 》(敏捷数据)的思想。在敏捷开发过程中,作为持久化最常见技术的数据库如果不能够敏捷,怎么能够适应一次次迭代和一次次发布的修改呢?书中介绍了如何进行数据库演化,如何保证升级后数据库数据的正确性,以及最佳实践。
我们可以看到,随着敏捷方法和市场的不断成熟,敏捷的书籍也从理论性转向了实用和最佳实践类型。然而,不可否认的是,一个团队的敏捷化很难仅靠阅读书本来完成,由成功实践过敏捷的开发者手把手的带领,才是最好的方法。