论坛首页 综合技术论坛

敏捷软件开发图书概览

浏览 23113 次
该帖已经被评为精华帖
作者 正文
   发表时间:2006-11-19  

敏捷软件开发图书概览<o:p></o:p>

本文发表于程序员杂志2006年第5期

敏捷软件开发宣言:我们正在通过亲身实践和帮助其他人实践,揭示更好的软件开发方法,通过这项工作,我们认为:<o:p></o:p>

人和交流胜过过程和工具<o:p></o:p>

可工作的软件胜过面面俱到的文档<o:p></o:p>

客户协作胜过合同谈判<o:p></o:p>

响应变化胜过遵循计划<o:p></o:p>

虽然右项也有价值,但是我们认为左项更重要。”<o:p></o:p>

—— Kent BeckMike BeedleArie van BennekumAlistair CockburnWard CunninghamMartin FowlerJames GrenningJim HighsmithAndrew HuntRon JeffriesJon KernBrian Marick Robert C. MartinSteve MellorKen SchwaberJeff SutherlandDave Thomas<o:p></o:p>

<o:p> </o:p>

敏捷软件开发这个词在2006年的中国软件界听起来仍然显得有些陌生。自2001年敏捷联盟被发起以来,敏捷方法的实践经验和理论研究都在不断的更新。而我国的大多数程序员还是只能在书本上读到敏捷的好处,很难在项目中进行实践。这其中的原因,主要是缺乏拥有实际敏捷项目经验的人来带领实施敏捷。虽然敏捷开发是种实践行为,很难从书本上直接学习,不过多数程序员了解敏捷,却都是先从书本开始的。无论结果怎样,从认识到实践的过程是免不了的。<o:p></o:p>

<o:p> </o:p>

敏捷软件开发之方法论篇<o:p></o:p>

大家都知道敏捷软件开发方法包括了多种方法论,主要有:SCRUMCrystal,特征驱动软件开发(FDD),自适应软件开发(ASD),以及最著名的极限编程(XP)。这些方法论分别在不同的著作上专门论述过:<o:p></o:p>

SCRUM:《Agile Software Development with Scrum by Ken Schwaber, Mike Beedle,《Agile Project Management With Scrumby Ken Schwaber<o:p></o:p>

FDD:Java Modeling in Color with UMLby Peter Coad, A Practical Guide to Feature-Driven Development(特征驱动开发) by Stephen R Palmer, John M. Felsing,<o:p></o:p>

Crystal: Crystal Clearby Alistair Cockburn<o:p></o:p>

ASD: Adaptive Software Development》(自适应软件开发)by James A. Highsmith<o:p></o:p>

<o:p> </o:p>

其中尤以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项目的介绍,其中,值得推荐的是下面两部著作。<o:p></o:p>

<o:p> </o:p>

Extreme Programming Explained: Embrace Changeby Kent Beck<o:p></o:p>

第一版中译版:《解析极限编程:拥抱变化》,唐东铭,人民邮电出版社<o:p></o:p>

第二版中译版:雷剑文,电子工业出版社<o:p></o:p>

作为XP的开山之作,目前已经出版了第二版。在第一版中,Kent BeckXP作了详细的描述。从当前软件开发的现状和问题谈起,从需求的变化到如何拥抱变化,给出了XP的四项价值观和十二项实践。对于想了解敏捷的来龙去脉的人,此书属于必读之类。在第二版,Kent根据几年来的实践,为XP增加了一项价值观:尊重,并增加了原则的概念,同时增加和删改了一些实践。<o:p></o:p>

该书第一版是程序员的宣言,这和Kent的背景很有关系。随后XP经历了五六年的发展和实践,Kent自己也逐渐意识到,这样的观点太狭隘了。因此就有了第二版,与其说这是技术书籍,到更像是纯粹意义的软工书籍。期间也可以看出XP的体系更加完备。这其中尤为突出的是把人放到了更为重要的地位。<o:p></o:p>

<o:p> </o:p>

Extreme Programming in Practiceby James Newkirk, Robert C. Martin<o:p></o:p>

中译版:《极限编程实践》,王钧,人民邮电出版社<o:p></o:p>

读过了一些列的XP书籍,程序员们都会觉得XP非常好,但到底如何才能开始实施XP呢?还不是太清楚。本系列中的这本书用一个完整的小项目作例子,从头到尾教给人如何敏捷开发,是一本不可多得的实践教材。如果想直接实施XP开发,这本书可以给你很大启示。<o:p></o:p>

<o:p> </o:p>

<o:p> </o:p>

敏捷软件开发之实践篇<o:p></o:p>

一、极限编程最佳实践<o:p></o:p>

由于极限编程是如此的流行,多数敏捷团队都会或多或少的借鉴一些XP中的敏捷实践,而XP的每一个敏捷实践也确实值得大书特书,而其中最著名的是测试驱动开发和重构实践:<o:p></o:p>

<o:p> </o:p>

Test-Driven Development by Kent Beck<o:p></o:p>

中译版:《测试驱动开发》,崔凯,中国电力出版社<o:p></o:p>

测试驱动开发是Kent Beck另一部力作。“Clean Code That Works”是敏捷开发的目标之一,那么如何达到这个目标?TDD给出了一种方式。测试实质上是需求。由需求产生出的代码肯定是能够工作的功能代码,而要实现Class本身的可测试性,就不得不写出高度解耦合的Clean的代码。本书从一个Money的例子入手,从最初的一点需求开始,逐步增加需求,完成整个货币系统的代码。后面又给出了Unit Test中的一些最佳实践和模式供参考。<o:p></o:p>

然而,本书的教导意义比其实践意义更突出。作为一本TDD的教程或入门教材,这本书无疑是最佳的,其中提出的一些最佳实践更是值得经常阅读来温习。本书面向的是单元测试,而实际开发中面对的数据库测试,Web测试等问题并不属于单元测试的范畴。因此读者并不能从中直接进入到实战。<o:p></o:p>

另一本同名书《Test Driven Development: A Practical Guide》由Davis Astels撰写,他将该书看作是Kent著作的补充,重点阐述利用TDD开发所必要的技术和工具上,因此对实际开发更具实用性。<o:p></o:p>

<o:p> </o:p>

Refactoring: Improving the Design of Existing Codeby Martin Fowler<o:p></o:p>

中译版:《重构:改善既有代码的设计》,侯捷,熊节,中国电力出版社<o:p></o:p>

重构这本书的意义在于,他提供了一种让你写出更加优美代码的能力。在测试的保证下,重构能够发挥强大的威力。敏捷团队中,不断的重构出简单且高效的代码才能够保持拥抱不断变化的需求。后来的一本书《Refactoring to Patterns》(从重构到模式)by Joshua Kerievsky,更是将重构的威力发挥到极限。<o:p></o:p>

重构曾被称为软件开发图书的双璧,另一本书是《Design Patterns(设计模式) by GoF。当然,对现在的软件开发这二者已经不是最重要的。ThoughtWorks的首席科学家Martin Fowler总结了朋友们的各种实践心得,写出了这本书。从几年后的目光来看,这本书中的多数实践都被各种IDE做到了操作菜单中。虽然IDE提供了大量重构功能,但仅靠IDE是无法写出简洁美妙代码的,多数的敏捷团队重构工作做得还是不够。<o:p></o:p>

<o:p> </o:p>

另外有一本专门介绍结对编程的书,《Pair Programming Illuminated》(结对编程技术)by by Laurie Williams and Robert Kessler,指出了为什么要结对?并从各种不同水平不同性格的程序员结对情况来讨论该实践的优劣。对此有兴趣的程序员不妨一读。<o:p></o:p>

<o:p> </o:p>

二、敏捷软件开发实践<o:p></o:p>

自从2001年敏捷联盟成立以来,单独推广极限编程的书变少了,而统一口径推广敏捷的书变得越来越多。两本同名的敏捷软件开发都是不可多得的好书,<o:p></o:p>

<o:p> </o:p>

Agile Software DevelopmentPrinciples, Patterns, and Practicesby Robert C. Martin<o:p></o:p>

中译版:《敏捷软件开发:原则,模式与实践》,邓辉,清华大学出版社<o:p></o:p>

被业内人士称为Uncle BobRobert C Martin在沉寂几年后写出了这部书。该书可以算是从软件开发角度对敏捷方法阐述的最详细和全面的一本。之前的敏捷书籍多是关注于过程改进,而对如何从技术角度实施讲的比较少。本书一开始先介绍了敏捷联盟和敏捷开发过程。之后详细论述了面向对象设计的原则,这些原则是本书的精华之一。后面通过几个项目介绍了如何将设计模式应用于项目中。<o:p></o:p>

Uncle Bob不愧是实践的大师,写出来的书也是拥有很强的实践意义。在敏捷团队的办公桌上,应当常备此书,一来可作为参考查询,二来可以作为新成员的必读书目。<o:p></o:p>

<o:p> </o:p>

Agile Software Developmentby Alistair Cockburn<o:p></o:p>

中译版:《敏捷软件开发》,俞涓,人民邮电出版社<o:p></o:p>

这本书更加适合管理者来阅读。Alistair从项目人数和交流难易程度,将敏捷的各种方法划分了其适用范围。人数多的或分布式项目就需要靠其他手段来加强交流,人数少的就可以靠pair programming等进行面对面的交流。交流和反馈是敏捷的核心。同时Alistair也介绍了一下他提出的Crystal方法族。<o:p></o:p>

<o:p> </o:p>

.敏捷项目管理和敏捷需求分析<o:p></o:p>

在推广敏捷一段时间后,敏捷社群也意识到,多数书籍更像是面向开发人员,过于技术化,难以吸引项目经理或主管。因此,一批面向管理者视角的书也开始浮出水面,这些书包括:<o:p></o:p>

Agile and Iterative Development》(敏捷迭代开发)by Craig Larman<o:p></o:p>

Lean Software Development》(敏捷软件开发工具精益开发方法by Mary Poppendieck<o:p></o:p>

Agile Software Development Ecosystems》(敏捷软件开发生态系统)by Jim Highsmith<o:p></o:p>

书中从各种角度比较和分析各种敏捷方法的优劣,异同,起源,适用范围等。这些书对于一个项目主管决策使用何种过程来在自己的团队中实践敏捷有很好的参考作用。<o:p></o:p>

<o:p> </o:p>

近两年,人们开始逐渐意识到敏捷开发的侧重点不仅仅是开发过程和开发实践,还包括对需求和项目管理等其他相关方面的实践。一些相关的书籍也悄然出现在人们的视野:<o:p></o:p>

Agile Project Management》(敏捷项目管理)by Jim Highsmith<o:p></o:p>

User Stories Appliedby Mike Cohn<o:p></o:p>

Agile Estimating and Planningby Mike Cohn<o:p></o:p>

Agile Requirements & User Stories by Louis Molnar<o:p></o:p>

这些书不同于以往强调新方法,新过程的书目。敏捷项目管理类的书主要介绍如何管理敏捷团队,如何计划要开发的需求,如何为客户提供最大的价值。介绍敏捷需求分析的书主要帮助商务分析师或项目经理挖掘和分析用户需求,写出用户故事,评估和计划用户故事等。人们已经意识到,各种方法论的实质是相同的,都是提供商业价值,减少浪费,增加交流,快速反馈。因此不需要着重于区分是使用了那种方法。对项目经理来说,不同的项目或团队应当采用适应其特殊情况的方法,而这些方法的基本原则是相同的。<o:p></o:p>

<o:p> </o:p>

.敏捷软件开发新方向<o:p></o:p>

对架构师或程序员来说,近年来的技术进展,也使得敏捷开发有了新的研究方向:<o:p></o:p>

Agile Web Development with Railsby Dave Thomas, David Hansson, Leon Breedt, and Mike Clark<o:p></o:p>

该书是获得2006JOLT奖的书,讲得是采用Ruby on Rails这个Web开发工具新贵来快速开发Web项目,从而达到快速反馈拥抱变化的目的。<o:p></o:p>

Refactoring Databasesby Scott W Ambler<o:p></o:p>

此书是Scott的新作,延续和继承了《Agile Modeling》(敏捷建模)和《Agile Database Techniques》(敏捷数据)的思想。在敏捷开发过程中,作为持久化最常见技术的数据库如果不能够敏捷,怎么能够适应一次次迭代和一次次发布的修改呢?书中介绍了如何进行数据库演化,如何保证升级后数据库数据的正确性,以及最佳实践。<o:p></o:p>

<o:p> </o:p>

我们可以看到,随着敏捷方法和市场的不断成熟,敏捷的书籍也从理论性转向了实用和最佳实践类型。然而,不可否认的是,一个团队的敏捷化很难仅靠阅读书本来完成,由成功实践过敏捷的开发者手把手的带领,才是最好的方法。<o:p></o:p>

   发表时间:2006-11-20  
是冰云同学写的么?文章看过了。:D
Agile是魔咒呀。
0 请登录后投票
   发表时间:2006-11-20  
建议开个TW专区,把你们公司的一些内部讨论定期整理贴上来,让兄弟们也分享一下呀
呵呵,羡慕呀,只是去年电话面试都没通过
0 请登录后投票
   发表时间:2006-11-20  
daquan198163 写道
建议开个TW专区,把你们公司的一些内部讨论定期整理贴上来,让兄弟们也分享一下呀
呵呵,羡慕呀,只是去年电话面试都没通过

更多精彩的讨论在每日的开发过程中,还有午饭的时候……
六个月之后可以重新申请,如果有意,欢迎再来试试。
0 请登录后投票
   发表时间:2006-11-23  
好像少了Pragmatic BookShelf里的一些新书,也不错的。
0 请登录后投票
   发表时间:2006-11-26  
Tin 写道
是冰云同学写的么?文章看过了。:D
Agile是魔咒呀。


没错,是魔咒啊!
任何人只要真正实践过敏捷是绝对不会再回到原来的开发方式的。
0 请登录后投票
   发表时间:2006-12-04  
读死,那么多书。
0 请登录后投票
   发表时间:2006-12-17  
绝对的好文,受教育了!
0 请登录后投票
   发表时间:2006-12-30  
  现在正在实践中,用这种方式来管理项目、进行开发,不过全是依着看过的一些资料和道听途说来的一些做法来进行,没有系统的学习过,也没有见过真正的敏捷。
  唉,冰云当时在厦门时应该多请教、能参观一下就更好了,只可惜厦门的氛围还是差些。
0 请登录后投票
   发表时间:2007-01-04  
我觉得Crystal Clear这本书可以标黑。其中提出了很多很有价值的东西,比如Risk List,这对于敏捷应用于固定时间固定预算的项目来说至关重要。敏捷本身是重人轻过程的。如果我们在实施敏捷的过程中重过程了,没有抓住人的话,就失掉了根本。而我认为这本书恰恰就是抓住了,人这个根本。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics