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