敏捷軟件開發(fā)宣言:我們正在通過親身實(shí)踐和幫助其他人實(shí)踐,揭示更好的軟件開發(fā)方法,通過這項(xiàng)工作,我們認(rèn)為:
人和交流勝過過程和工具
可工作的軟件勝過面面俱到的文檔
客戶協(xié)作勝過合同談判
響應(yīng)變化勝過遵循計(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ó)軟件界聽起來仍然顯得有些陌生。自2001年敏捷聯(lián)盟被發(fā)起以來,敏捷方法的實(shí)踐經(jīng)驗(yàn)和理論研究都在不斷的更新。而我國(guó)的大多數(shù)程序員還是只能在書本上讀到敏捷的好處,很難在項(xiàng)目中進(jìn)行實(shí)踐。這其中的原因,主要是缺乏擁有實(shí)際敏捷項(xiàng)目經(jīng)驗(yàn)的人來帶領(lǐng)實(shí)施敏捷。雖然敏捷開發(fā)是種實(shí)踐行為,很難從書本上直接學(xué)習(xí),不過多數(shù)程序員了解敏捷,卻都是先從書本開始的。無論結(jié)果怎樣,從認(rèn)識(shí)到實(shí)踐的過程是免不了的。
敏捷軟件開發(fā)之方法論篇
大家都知道敏捷軟件開發(fā)方法包括了多種方法論,主要有:SCRUM,Crystal,特征驅(qū)動(dòng)軟件開發(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ū)動(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)較早。在還沒有統(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)狀和問題談起,從需求的變化到如何擁抱變化,給出了XP的四項(xiàng)價(jià)值觀和十二項(xiàng)實(shí)踐。對(duì)于想了解敏捷的來龍去脈的人,此書屬于必讀之類。在第二版,Kent根據(jù)幾年來的實(shí)踐,為XP增加了一項(xiàng)價(jià)值觀:尊重,并增加了原則的概念,同時(shí)增加和刪改了一些實(shí)踐。
該書第一版是程序員的宣言,這和Kent的背景很有關(guān)系。隨后XP經(jīng)歷了五六年的發(fā)展和實(shí)踐,Kent自己也逐漸意識(shí)到,這樣的觀點(diǎn)太狹隘了。因此就有了第二版,與其說這是技術(shù)書籍,到更像是純粹意義的軟工書籍。期間也可以看出XP的體系更加完備。這其中尤為突出的是把人放到了更為重要的地位。
《Extreme Programming in Practice》by James Newkirk, Robert C. Martin
中譯版:《極限編程實(shí)踐》,王鈞,人民郵電出版社
讀過了一些列的XP書籍,程序員們都會(huì)覺得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的教程或入門教材,這本書無疑是最佳的,其中提出的一些最佳實(shí)踐更是值得經(jīng)常閱讀來溫習(xí)。本書面向的是單元測(cè)試,而實(shí)際開發(fā)中面對(duì)的數(shù)據(jù)庫測(cè)試,Web測(cè)試等問題并不屬于單元測(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)單且高效的代碼才能夠保持擁抱不斷變化的需求。后來的一本書《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)不是最重要的。ThoughtWorks的首席科學(xué)家Martin Fowler總結(jié)了朋友們的各種實(shí)踐心得,寫出了這本書。從幾年后的目光來看,這本書中的多數(shù)實(shí)踐都被各種IDE做到了操作菜單中。雖然IDE提供了大量重構(gòu)功能,但僅靠IDE是無法寫出簡(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ì)情況來討論該實(shí)踐的優(yōu)劣。對(duì)此有興趣的程序員不妨一讀。
二、敏捷軟件開發(fā)實(shí)踐
自從2001年敏捷聯(lián)盟成立以來,單獨(dú)推廣極限編程的書變少了,而統(tǒng)一口徑推廣敏捷的書變得越來越多。兩本同名的敏捷軟件開發(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)注于過程改進(jìn),而對(duì)如何從技術(shù)角度實(shí)施講的比較少。本書一開始先介紹了敏捷聯(lián)盟和敏捷開發(fā)過程。之后詳細(xì)論述了面向?qū)ο笤O(shè)計(jì)的原則,這些原則是本書的精華之一。后面通過幾個(gè)項(xiàng)目介紹了如何將設(shè)計(jì)模式應(yīng)用于項(xiàng)目中。
Uncle Bob不愧是實(shí)踐的大師,寫出來的書也是擁有很強(qiáng)的實(shí)踐意義。在敏捷團(tuán)隊(duì)的辦公桌上,應(yīng)當(dāng)常備此書,一來可作為參考查詢,二來可以作為新成員的必讀書目。
《Agile Software Development》by Alistair Cockburn
中譯版:《敏捷軟件開發(fā)》,俞涓,人民郵電出版社
這本書更加適合管理者來閱讀。Alistair從項(xiàng)目人數(shù)和交流難易程度,將敏捷的各種方法劃分了其適用范圍。人數(shù)多的或分布式項(xiàng)目就需要靠其他手段來加強(qiáng)交流,人數(shù)少的就可以靠pair programming等進(jìn)行面對(duì)面的交流。交流和反饋是敏捷的核心。同時(shí)Alistair也介紹了一下他提出的Crystal方法族。
三.敏捷項(xiàng)目管理和敏捷需求分析
在推廣敏捷一段時(shí)間后,敏捷社群也意識(shí)到,多數(shù)書籍更像是面向開發(fā)人員,過于技術(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)目主管決策使用何種過程來在自己的團(tuán)隊(duì)中實(shí)踐敏捷有很好的參考作用。
近兩年,人們開始逐漸意識(shí)到敏捷開發(fā)的側(cè)重點(diǎn)不僅僅是開發(fā)過程和開發(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)新方法,新過程的書目。敏捷項(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)理來說,不同的項(xiàng)目或團(tuán)隊(duì)?wèi)?yīng)當(dāng)采用適應(yīng)其特殊情況的方法,而這些方法的基本原則是相同的。
四.敏捷軟件開發(fā)新方向
對(duì)架構(gòu)師或程序員來說,近年來的技術(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ā)工具新貴來快速開發(fā)Web項(xiàng)目,從而達(dá)到快速反饋擁抱變化的目的。
《Refactoring Databases》by Scott W Ambler
此書是Scott的新作,延續(xù)和繼承了《Agile Modeling》(敏捷建模)和《Agile Database Techniques》(敏捷數(shù)據(jù))的思想。在敏捷開發(fā)過程中,作為持久化最常見技術(shù)的數(shù)據(jù)庫如果不能夠敏捷,怎么能夠適應(yīng)一次次迭代和一次次發(fā)布的修改呢?書中介紹了如何進(jìn)行數(shù)據(jù)庫演化,如何保證升級(jí)后數(shù)據(jù)庫數(shù)據(jù)的正確性,以及最佳實(shí)踐。
我們可以看到,隨著敏捷方法和市場(chǎng)的不斷成熟,敏捷的書籍也從理論性轉(zhuǎn)向了實(shí)用和最佳實(shí)踐類型。然而,不可否認(rèn)的是,一個(gè)團(tuán)隊(duì)的敏捷化很難僅靠閱讀書本來完成,由成功實(shí)踐過敏捷的開發(fā)者手把手的帶領(lǐng),才是最好的方法。
聯(lián)系客服