敏捷軟件開發(fā)圖書概覽
本文發(fā)表于程序員雜志2006年第5期
“
敏捷軟件開發(fā)宣言:我們正在通過(guò)親身實(shí)踐和幫助其他人實(shí)踐,揭示更好的軟件開發(fā)方法,通過(guò)這項(xiàng)工作,我們認(rèn)為:
人和交流勝過(guò)過(guò)程和工具
可工作的軟件勝過(guò)面面俱到的文檔
客戶協(xié)作勝過(guò)合同談判
響應(yīng)變化勝過(guò)遵循計(jì)劃
雖然右項(xiàng)也有價(jià)值,但是我們認(rèn)為左項(xiàng)更重要。
”
—— 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
?
敏捷軟件開發(fā)這個(gè)詞在
2006
年的中國(guó)軟件界聽起來(lái)仍然顯得有些陌生。自
2001
年敏捷聯(lián)盟被發(fā)起以來(lái),敏捷方法的實(shí)踐經(jīng)驗(yàn)和理論研究都在不斷的更新。而我國(guó)的大多數(shù)程序員還是只能在書本上讀到敏捷的好處,很難在項(xiàng)目中進(jìn)行實(shí)踐。這其中的原因,主要是缺乏擁有實(shí)際敏捷項(xiàng)目經(jīng)驗(yàn)的人來(lái)帶領(lǐng)實(shí)施敏捷。雖然敏捷開發(fā)是種實(shí)踐行為,很難從書本上直接學(xué)習(xí),不過(guò)多數(shù)程序員了解敏捷,卻都是先從書本開始的。無(wú)論結(jié)果怎樣,從認(rèn)識(shí)到實(shí)踐的過(guò)程是免不了的。
?
敏捷軟件開發(fā)之方法論篇
大家都知道敏捷軟件開發(fā)方法包括了多種方法論,主要有:
SCRUM
,
Crystal,
特征驅(qū)動(dòng)軟件開發(fā)(
FDD
),自適應(yīng)軟件開發(fā)(
ASD
),以及最著名的極限編程
(XP)
。這些方法論分別在不同的著作上專門論述過(guò):
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
》
(
特征驅(qū)動(dòng)開發(fā)
) by Stephen R Palmer, John M. Felsing,
Crystal:
《
Crystal Clear
》
by Alistair Cockburn
ASD:
《
Adaptive Software Development
》(自適應(yīng)軟件開發(fā))
by James A. Highsmith
?
其中尤以
XP
系列的書籍居多。人民郵電出版社的一系列極限編程系列叢書,在國(guó)內(nèi)引進(jìn)較早。在還沒(méi)有統(tǒng)一敏捷詞匯的情況下,引發(fā)了一批敏捷先鋒人士的熱情,是我國(guó)程序員的敏捷啟蒙教材。這些書包括《
Extreme Programming Explained
》(解析極限編程),《
Extreme Programming Examined
》(極限編程研究),《
Extreme Programming Installed
》
(
極限編程實(shí)施
)
,《
Extreme Programming Explored
》(探索極限編程),《
Extreme Programming Applied
》(應(yīng)用極限編程)《
Extreme Programming in Practice
》(極限編程實(shí)踐),《
Planning Extreme Programming
》(規(guī)劃極限編程)等,這些書有的是作者的
XP
實(shí)踐論文,有些是對(duì)
XP
項(xiàng)目的介紹,其中,值得推薦的是下面兩部著作。
?
《
Extreme Programming Explained: Embrace Change
》
by Kent Beck
第一版中譯版:《解析極限編程:擁抱變化》,
唐東銘,
人民郵電出版社
第二版中譯版:
雷劍文,電子工業(yè)出版社
作為
XP
的開山之作,目前已經(jīng)出版了第二版。在第一版中,
Kent Beck
對(duì)
XP
作了詳細(xì)的描述。從當(dāng)前軟件開發(fā)的現(xiàn)狀和問(wèn)題談起,從需求的變化到如何擁抱變化,給出了
XP
的四項(xiàng)價(jià)值觀和十二項(xiàng)實(shí)踐。對(duì)于想了解敏捷的來(lái)龍去脈的人,此書屬于必讀之類。在第二版,
Kent
根據(jù)幾年來(lái)的實(shí)踐,為
XP
增加了一項(xiàng)價(jià)值觀:尊重,并增加了原則的概念,同時(shí)增加和刪改了一些實(shí)踐。
該書第一版是程序員的宣言,這和
Kent
的背景很有關(guān)系。隨后
XP
經(jīng)歷了五六年的發(fā)展和實(shí)踐,
Kent
自己也逐漸意識(shí)到,這樣的觀點(diǎn)太狹隘了。因此就有了第二版,與其說(shuō)這是技術(shù)書籍,到更像是純粹意義的軟工書籍。期間也可以看出
XP
的體系更加完備。這其中尤為突出的是把人放到了更為重要的地位。
?
《
Extreme Programming in Practice
》
by James Newkirk, Robert C. Martin
中譯版:《極限編程實(shí)踐》,
王鈞,
人民郵電出版社
讀過(guò)了一些列的
XP
書籍,程序員們都會(huì)覺(jué)得
XP
非常好,但到底如何才能開始實(shí)施
XP
呢?還不是太清楚。本系列中的這本書用一個(gè)完整的小項(xiàng)目作例子,從頭到尾教給人如何敏捷開發(fā),是一本不可多得的實(shí)踐教材。如果想直接實(shí)施
XP
開發(fā),這本書可以給你很大啟示。
?
?
敏捷軟件開發(fā)之實(shí)踐篇
一、極限編程最佳實(shí)踐
由于極限編程是如此的流行,多數(shù)敏捷團(tuán)隊(duì)都會(huì)或多或少的借鑒一些
XP
中的敏捷實(shí)踐,而
XP
的每一個(gè)敏捷實(shí)踐也確實(shí)值得大書特書,而其中最著名的是測(cè)試驅(qū)動(dòng)開發(fā)和重構(gòu)實(shí)踐:
?
《
Test-Driven Development
》
by Kent Beck
中譯版:《測(cè)試驅(qū)動(dòng)開發(fā)》,
崔凱,中國(guó)電力出版社
測(cè)試驅(qū)動(dòng)開發(fā)是
Kent Beck
另一部力作。
“Clean Code That Works”
是敏捷開發(fā)的目標(biāo)之一,那么如何達(dá)到這個(gè)目標(biāo)?
TDD
給出了一種方式。測(cè)試實(shí)質(zhì)上是需求。由需求產(chǎn)生出的代碼肯定是能夠工作的功能代碼,而要實(shí)現(xiàn)
Class
本身的可測(cè)試性,就不得不寫出高度解耦合的
Clean
的代碼。本書從一個(gè)
Money
的例子入手,從最初的一點(diǎn)需求開始,逐步增加需求,完成整個(gè)貨幣系統(tǒng)的代碼。后面又給出了
Unit Test
中的一些最佳實(shí)踐和模式供參考。
然而,本書的教導(dǎo)意義比其實(shí)踐意義更突出。作為一本
TDD
的教程或入門教材,這本書無(wú)疑是最佳的,其中提出的一些最佳實(shí)踐更是值得經(jīng)常閱讀來(lái)溫習(xí)。本書面向的是單元測(cè)試,而實(shí)際開發(fā)中面對(duì)的數(shù)據(jù)庫(kù)測(cè)試,
Web
測(cè)試等問(wèn)題并不屬于單元測(cè)試的范疇。因此讀者并不能從中直接進(jìn)入到實(shí)戰(zhàn)。
另一本同名書《
Test Driven Development: A Practical Guide
》由
Davis Astels
撰寫,他將該書看作是
Kent
著作的補(bǔ)充,重點(diǎn)闡述利用
TDD
開發(fā)所必要的技術(shù)和工具上,因此對(duì)實(shí)際開發(fā)更具實(shí)用性。
?
《
Refactoring:
Improving the Design of Existing Code
》
by Martin Fowler
中譯版:《重構(gòu):改善既有代碼的設(shè)計(jì)》,侯捷,熊節(jié),中國(guó)電力出版社
重構(gòu)這本書的意義在于,他提供了一種讓你寫出更加優(yōu)美代碼的能力。在測(cè)試的保證下,重構(gòu)能夠發(fā)揮強(qiáng)大的威力。敏捷團(tuán)隊(duì)中,不斷的重構(gòu)出簡(jiǎn)單且高效的代碼才能夠保持擁抱不斷變化的需求。后來(lái)的一本書《
Refactoring to Patterns
》(從重構(gòu)到模式)
by Joshua Kerievsky
,更是將重構(gòu)的威力發(fā)揮到極限。
重構(gòu)曾被稱為軟件開發(fā)圖書的雙璧,另一本書是《
Design Patterns
》
(
設(shè)計(jì)模式
) by GoF
。當(dāng)然,對(duì)現(xiàn)在的軟件開發(fā)這二者已經(jīng)不是最重要的。
Thought
Works
的首席科學(xué)家
Martin Fowler
總結(jié)了朋友們的各種實(shí)踐心得,寫出了這本書。從幾年后的目光來(lái)看,這本書中的多數(shù)實(shí)踐都被各種
IDE
做到了操作菜單中。雖然
IDE
提供了大量重構(gòu)功能,但僅靠
IDE
是無(wú)法寫出簡(jiǎn)潔美妙代碼的,多數(shù)的敏捷團(tuán)隊(duì)重構(gòu)工作做得還是不夠。
?
另外有一本專門介紹結(jié)對(duì)編程的書,《
Pair Programming Illuminated
》(結(jié)對(duì)編程技術(shù))
by by Laurie Williams and Robert Kessler
,指出了為什么要結(jié)對(duì)?并從各種不同水平不同性格的程序員結(jié)對(duì)情況來(lái)討論該實(shí)踐的優(yōu)劣。對(duì)此有興趣的程序員不妨一讀。
?
二、敏捷軟件開發(fā)實(shí)踐
自從
2001
年敏捷聯(lián)盟成立以來(lái),單獨(dú)推廣極限編程的書變少了,而統(tǒng)一口徑推廣敏捷的書變得越來(lái)越多。兩本同名的敏捷軟件開發(fā)都是不可多得的好書,
?
《
Agile Software Development
:
Principles, Patterns, and Practices
》
by Robert C. Martin
中譯版:《敏捷軟件開發(fā):原則,模式與實(shí)踐》,鄧輝,
清華大學(xué)出版社
被業(yè)內(nèi)人士稱為
Uncle Bob
的
Robert C Martin
在沉寂幾年后寫出了這部書。該書可以算是從軟件開發(fā)角度對(duì)敏捷方法闡述的最詳細(xì)和全面的一本。之前的敏捷書籍多是關(guān)注于過(guò)程改進(jìn),而對(duì)如何從技術(shù)角度實(shí)施講的比較少。本書一開始先介紹了敏捷聯(lián)盟和敏捷開發(fā)過(guò)程。之后詳細(xì)論述了面向?qū)ο笤O(shè)計(jì)的原則,這些原則是本書的精華之一。后面通過(guò)幾個(gè)項(xiàng)目介紹了如何將設(shè)計(jì)模式應(yīng)用于項(xiàng)目中。
Uncle Bob
不愧是實(shí)踐的大師,寫出來(lái)的書也是擁有很強(qiáng)的實(shí)踐意義。在敏捷團(tuán)隊(duì)的辦公桌上,應(yīng)當(dāng)常備此書,一來(lái)可作為參考查詢,二來(lái)可以作為新成員的必讀書目。
?
《
Agile Software Development
》
by Alistair Cockburn
中譯版:《敏捷軟件開發(fā)》,俞涓,人民郵電出版社
這本書更加適合管理者來(lái)閱讀。
Alistair
從項(xiàng)目人數(shù)和交流難易程度,將敏捷的各種方法劃分了其適用范圍。人數(shù)多的或分布式項(xiàng)目就需要靠其他手段來(lái)加強(qiáng)交流,人數(shù)少的就可以靠
pair programming
等進(jìn)行面對(duì)面的交流。交流和反饋是敏捷的核心。同時(shí)
Alistair
也介紹了一下他提出的
Crystal
方法族。
?
三
.
敏捷項(xiàng)目管理和敏捷需求分析
在推廣敏捷一段時(shí)間后,敏捷社群也意識(shí)到,多數(shù)書籍更像是面向開發(fā)人員,過(guò)于技術(shù)化,難以吸引項(xiàng)目經(jīng)理或主管。因此,一批面向管理者視角的書也開始浮出水面,這些書包括:
《
Agile and Iterative Development
》(敏捷迭代開發(fā))
by Craig Larman
《
Lean Software Development
》(
敏捷
軟件開發(fā)工具
—
精益開發(fā)方法
)
by Mary Poppendieck
《
Agile Software Development Ecosystems
》(敏捷軟件開發(fā)生態(tài)系統(tǒng))
by Jim Highsmith
書中從各種角度比較和分析各種敏捷方法的優(yōu)劣,異同,起源,適用范圍等。這些書對(duì)于一個(gè)項(xiàng)目主管決策使用何種過(guò)程來(lái)在自己的團(tuán)隊(duì)中實(shí)踐敏捷有很好的參考作用。
?
近兩年,人們開始逐漸意識(shí)到敏捷開發(fā)的側(cè)重點(diǎn)不僅僅是開發(fā)過(guò)程和開發(fā)實(shí)踐,還包括對(duì)需求和項(xiàng)目管理等其他相關(guān)方面的實(shí)踐。一些相關(guān)的書籍也悄然出現(xiàn)在人們的視野:
《
Agile Project Management
》(敏捷項(xiàng)目管理)
by Jim Highsmith
《
User Stories Applied
》
by Mike Cohn
《
Agile Estimating and Planning
》
by Mike Cohn
《
Agile Requirements & User Stories
》
by Louis Molnar
這些書不同于以往強(qiáng)調(diào)新方法,新過(guò)程的書目。敏捷項(xiàng)目管理類的書主要介紹如何管理敏捷團(tuán)隊(duì),如何計(jì)劃要開發(fā)的需求,如何為客戶提供最大的價(jià)值。介紹敏捷需求分析的書主要幫助商務(wù)分析師或項(xiàng)目經(jīng)理挖掘和分析用戶需求,寫出用戶故事,評(píng)估和計(jì)劃用戶故事等。人們已經(jīng)意識(shí)到,各種方法論的實(shí)質(zhì)是相同的,都是提供商業(yè)價(jià)值,減少浪費(fèi),增加交流,快速反饋。因此不需要著重于區(qū)分是使用了那種方法。對(duì)項(xiàng)目經(jīng)理來(lái)說(shuō),不同的項(xiàng)目或團(tuán)隊(duì)?wèi)?yīng)當(dāng)采用適應(yīng)其特殊情況的方法,而這些方法的基本原則是相同的。
?
四
.
敏捷軟件開發(fā)新方向
對(duì)架構(gòu)師或程序員來(lái)說(shuō),近年來(lái)的技術(shù)進(jìn)展,也使得敏捷開發(fā)有了新的研究方向:
《
Agile Web Development with Rails
》
by
Dave Thomas, David Hansson, Leon Breedt, and Mike Clark
該書是獲得
2006JOLT
獎(jiǎng)的書,講得是采用
Ruby on Rails
這個(gè)
Web
開發(fā)工具新貴來(lái)快速開發(fā)
Web
項(xiàng)目,從而達(dá)到快速反饋擁抱變化的目的。
《
Refactoring Databases
》
by Scott W Ambler
此書是
Scott
的新作,延續(xù)和繼承了《
Agile Modeling
》(敏捷建模)和《
Agile Database Techniques
》(敏捷數(shù)據(jù))的思想。在敏捷開發(fā)過(guò)程中,作為持久化最常見(jiàn)技術(shù)的數(shù)據(jù)庫(kù)如果不能夠敏捷,怎么能夠適應(yīng)一次次迭代和一次次發(fā)布的修改呢?書中介紹了如何進(jìn)行數(shù)據(jù)庫(kù)演化,如何保證升級(jí)后數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,以及最佳實(shí)踐。
?
我們可以看到,隨著敏捷方法和市場(chǎng)的不斷成熟,敏捷的書籍也從理論性轉(zhuǎn)向了實(shí)用和最佳實(shí)踐類型。然而,不可否認(rèn)的是,一個(gè)團(tuán)隊(duì)的敏捷化很難僅靠閱讀書本來(lái)完成,由成功實(shí)踐過(guò)敏捷的開發(fā)者手把手的帶領(lǐng),才是最好的方法。