敏捷软件开发图书概览<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 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<o:p></o:p>
<o:p> </o:p>
敏捷软件开发这个词在2006年的中国软件界听起来仍然显得有些陌生。自2001年敏捷联盟被发起以来,敏捷方法的实践经验和理论研究都在不断的更新。而我国的大多数程序员还是只能在书本上读到敏捷的好处,很难在项目中进行实践。这其中的原因,主要是缺乏拥有实际敏捷项目经验的人来带领实施敏捷。虽然敏捷开发是种实践行为,很难从书本上直接学习,不过多数程序员了解敏捷,却都是先从书本开始的。无论结果怎样,从认识到实践的过程是免不了的。<o:p></o:p>
<o:p> </o:p>
敏捷软件开发之方法论篇<o:p></o:p>
大家都知道敏捷软件开发方法包括了多种方法论,主要有:SCRUM,Crystal,特征驱动软件开发(FDD),自适应软件开发(ASD),以及最著名的极限编程(XP)。这些方法论分别在不同的著作上专门论述过:<o:p></o:p>
SCRUM:《Agile Software Development with Scrum》 by Ken Schwaber, Mike Beedle,《Agile Project Management With Scrum》by Ken Schwaber<o:p></o:p>
FDD:《Java Modeling in Color with UML》by Peter Coad, 《A Practical Guide to Feature-Driven Development》(特征驱动开发) by Stephen R Palmer, John M. Felsing,<o:p></o:p>
Crystal: 《Crystal Clear》by 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 Change》by Kent Beck<o:p></o:p>
第一版中译版:《解析极限编程:拥抱变化》,唐东铭,人民邮电出版社<o:p></o:p>
第二版中译版:雷剑文,电子工业出版社<o:p></o:p>
作为XP的开山之作,目前已经出版了第二版。在第一版中,Kent Beck对XP作了详细的描述。从当前软件开发的现状和问题谈起,从需求的变化到如何拥抱变化,给出了XP的四项价值观和十二项实践。对于想了解敏捷的来龙去脉的人,此书属于必读之类。在第二版,Kent根据几年来的实践,为XP增加了一项价值观:尊重,并增加了原则的概念,同时增加和删改了一些实践。<o:p></o:p>
该书第一版是程序员的宣言,这和Kent的背景很有关系。随后XP经历了五六年的发展和实践,Kent自己也逐渐意识到,这样的观点太狭隘了。因此就有了第二版,与其说这是技术书籍,到更像是纯粹意义的软工书籍。期间也可以看出XP的体系更加完备。这其中尤为突出的是把人放到了更为重要的地位。<o:p></o:p>
<o:p> </o:p>
《Extreme Programming in Practice》by 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 Code》by 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 Development:Principles, Patterns, and Practices》by Robert C. Martin<o:p></o:p>
中译版:《敏捷软件开发:原则,模式与实践》,邓辉,清华大学出版社<o:p></o:p>
被业内人士称为Uncle Bob的Robert C Martin在沉寂几年后写出了这部书。该书可以算是从软件开发角度对敏捷方法阐述的最详细和全面的一本。之前的敏捷书籍多是关注于过程改进,而对如何从技术角度实施讲的比较少。本书一开始先介绍了敏捷联盟和敏捷开发过程。之后详细论述了面向对象设计的原则,这些原则是本书的精华之一。后面通过几个项目介绍了如何将设计模式应用于项目中。<o:p></o:p>
Uncle Bob不愧是实践的大师,写出来的书也是拥有很强的实践意义。在敏捷团队的办公桌上,应当常备此书,一来可作为参考查询,二来可以作为新成员的必读书目。<o:p></o:p>
<o:p> </o:p>
《Agile Software Development》by 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 Applied》by Mike Cohn<o:p></o:p>
《Agile Estimating and Planning》by 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 Rails》by Dave Thomas, David Hansson, Leon Breedt, and Mike Clark<o:p></o:p>
该书是获得2006JOLT奖的书,讲得是采用Ruby on Rails这个Web开发工具新贵来快速开发Web项目,从而达到快速反馈拥抱变化的目的。<o:p></o:p>
《Refactoring Databases》by 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>
分享到:
相关推荐
《敏捷软件开发生态系统》不仅是一本介绍敏捷开发理论的书籍,更是一本实践指南。通过对核心原则的深入剖析、对各种敏捷方法的全面介绍以及丰富的案例研究,本书为希望采用敏捷开发方法的企业和个人提供了宝贵的参考...
6. **Scrum**:Scrum是一种用于管理产品开发过程的方法,通常用于敏捷软件开发。它包括一系列角色、责任和会议,如产品负责人、Scrum Master、开发团队、Sprint计划会议、每日站会、Sprint评审会议等。 7. **精益...
- 常见的软件开发模型:瀑布模型、敏捷开发、螺旋模型等。 2. **编程语言及框架**: - **C#**:面向对象编程的基础、类和对象、继承和多态性等。 - **Java**:基本语法、面向对象特性、异常处理等。 - **ASP...
- **大规模敏捷软件开发的最佳实践** - **敏捷过程建设的方法与技巧** #### 组织层面的敏捷实施 在《敏捷经典:Enterprise-Scale Agile Software Development》一书中,作者James Schiel深入探讨了如何在组织层面...
- 《敏捷数据库技巧》为软件开发人员提供了一套全面的指导方案,帮助他们更好地理解和运用敏捷方法来改进数据库开发过程。通过学习这些技巧和技术,开发人员能够构建出更加健壮、灵活且易于维护的数据库系统。
通过上述知识点的概述可以看出,《Java软件工程指南书籍》是一本全面涵盖了软件工程各个方面的著作,不仅深入浅出地讲解了软件开发的全过程,而且还提供了大量的实践案例供读者学习和参考。无论是对于初学者还是资深...
《软件过程动力学》是一本深入探讨软件开发过程中各个阶段的专业书籍。作者Raymond J. Madachy通过本书系统地分析了软件工程中的关键问题,旨在帮助读者理解软件过程的本质以及如何有效地管理和优化这些过程。 **2....
综上所述,《软件工程思想》是一本极具启发性的书籍,它不仅仅讲述了软件开发的技术细节,更重要的是传递了一种科学的思维方式和严谨的工作态度,这对于每一个从事IT行业的专业人士来说都是非常宝贵的财富。
#### 敏捷软件开发概览 敏捷开发是一种以人为本、迭代、增量的方法,用于管理产品开发过程。它强调快速响应变化、交付可用的产品、客户满意度以及持续改进。根据《敏捷开发者实践》这本书的内容,我们可以深入探讨...
《高级软件工程:软件工程-理论与实践》一书不仅是软件工程教育的优秀教材,也是软件开发人员、项目经理、研究人员和相关专业学生不可或缺的参考书籍。通过对本书的学习,读者不仅能掌握软件工程的基本原理和方法,...
后续的软件开发方法论,如敏捷开发等,都在某种程度上受到了Brooks思想的影响。 总之,《人月神话》不仅是一本技术书籍,更是一本关于软件开发哲学的经典著作。它对软件行业的贡献不仅仅在于提出了具体的管理策略,...
软件工程的概念诞生于1968年,面对软件开发中的种种问题——如质量低下、错误频发、进度延误和成本超支等,业界意识到需要借鉴传统工程领域的成熟方法来管理软件开发过程。这一转变标志着“软件危机”的应对策略,也...