敏捷軟件開發圖書概覽

敏捷軟件開發圖書概覽<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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章