原文:http://nanfang.iteye.com/blog/930563
在一家以敏捷開發(fā)和咨詢著稱的公司工作了一年了,以下是我當(dāng)前對(duì)敏捷的認(rèn)識(shí):
1. 敏捷宣言:
個(gè)體與交互 勝過(guò) 過(guò)程與工具
可以工作的軟件 勝過(guò) 面面俱到的文檔
客戶協(xié)作 勝過(guò) 合同談判
響應(yīng)變化 勝過(guò) 遵循計(jì)劃
以上是大家熟悉的四句箴言,但還有一句話也許常被忽略:“即,雖然右側(cè)條目有其價(jià)值,但我們更重視左側(cè)條目”。這句話也放在了宣言不顯著的地方。宣言的官網(wǎng)背景是幾位敏捷先賢討論問(wèn)題的畫面,中間的大胡子應(yīng)該是老馬(Martin Fowler)。這副背景畫頗有宗教油畫的風(fēng)格。
2. CMMI
一 個(gè)叫德里克·布魯克斯的人曾經(jīng)領(lǐng)導(dǎo)開發(fā)過(guò)一個(gè)失敗的大型計(jì)算機(jī)操作系統(tǒng):System/360。他離開這個(gè)項(xiàng)目后寫出了古典名著《人月神話》。接替布魯克 斯來(lái)擦項(xiàng)目屁股的人叫做瓦茨·漢弗里。漢弗里驚訝的發(fā)現(xiàn)這么大的項(xiàng)目居然沒(méi)有正式嚴(yán)格的計(jì)劃,不知道漢弗里到底經(jīng)歷的多少麻煩,他退休后加入了一個(gè)五角大 樓開辦的軟件工程學(xué)院,在那兒他和同事們建立了軟件成熟度模型(CMM),其中最有名的是其五個(gè)臺(tái)階:
臺(tái)階一:組織基本沒(méi)做啥
臺(tái)階二:組織做一些計(jì)劃,跟蹤,配置管理工作,也討論質(zhì)量保證等話題
臺(tái)階三:組織為各種活動(dòng)定義了過(guò)程
臺(tái)階四:組織有了準(zhǔn)繩,活動(dòng)可以跟蹤和度量
臺(tái)階五:組織有持續(xù)改進(jìn)的過(guò)程
有時(shí),敏捷和CMMI被人們一起談?wù)撟鲗?duì)比,從我對(duì)它們目前的了解來(lái)看,兩者似乎沒(méi)太多聯(lián)系。而且CMM5的“持續(xù)改進(jìn)的過(guò)程”似乎比“敏捷”還敏捷。
3. Scrum
我第一次真正對(duì)敏捷產(chǎn)生興趣是兩年前聽說(shuō)了這個(gè)詞,隨后參加了公司的Scrum的興趣小組,也讀了些Scrum的書,其中對(duì)這本印 象深刻。有一陣子還傻乎乎的自己給自己寫B(tài)acklog,Sprint和Story,還關(guān)注下Burning down chart。對(duì)于很多人,或許Scrum就是敏捷,敏捷就是Scrum。依我看來(lái),Scrum像是CMM3 + 敏捷,或者是基于敏捷理念的開發(fā)流程。有趣的是:幾乎每本Scrum的書和文章都要提到一雞和豬的故事。Scrum之所以流行可能是其提供一整套可操作的 過(guò)程,容易上手,如同方便面一般方便。但是教條的執(zhí)行Scrum我看還真一點(diǎn)都不敏捷。
4. 極限編程(XP)
極限編程的名字起得頗有邪教的感覺。XP要比Scrum歷史悠久,但沒(méi)有Scrum那么流行。XP中的TDD和結(jié)對(duì)編程常常引起很大的爭(zhēng)議。在我一年的XP實(shí)踐中,我卻很對(duì)這兩個(gè)玩意產(chǎn)生了極大的興趣。、
反感TDD的人往往是沒(méi)有真正嘗試過(guò)TDD的人,想玩玩TDD的最佳方式也許是跟一個(gè)熟悉TDD程序員結(jié)對(duì)一會(huì)兒。很多場(chǎng)合下,用TDD開發(fā)非常有趣并且能寫出高質(zhì)量的代碼。但是任何時(shí)候都教調(diào)的使用TDD不一定能帶來(lái)多大好處,測(cè)試代碼也有維護(hù)成本的。
對(duì) 于結(jié)對(duì)編程,大多數(shù)人都是很難理解的。有些擁有結(jié)對(duì)編程經(jīng)驗(yàn)的程序員對(duì)它又愛又恨。結(jié)對(duì)最大的好處或許是知識(shí)傳播,想學(xué)習(xí)某種技術(shù)時(shí)和一個(gè)高手結(jié)對(duì)是效率 非常高的方式。新人加入團(tuán)隊(duì),和老成員結(jié)對(duì)能非常迅速的進(jìn)入狀態(tài)。但是兩個(gè)水平差異不大,但開發(fā)習(xí)慣迥異的人坐在一起結(jié)隊(duì)是一種煎熬。一個(gè)經(jīng)常發(fā)生的事情 是:經(jīng)過(guò)長(zhǎng)時(shí)間無(wú)意義的討論甚至爭(zhēng)吵后,雙方妥協(xié)寫出一段折中的代碼,這段代碼僅僅是折中的而不是最好的代碼。
5. 精益(Lean)
敏 捷宣言已經(jīng)發(fā)布十年了,已經(jīng)不是新鮮玩意了。業(yè)界需要點(diǎn)新潮點(diǎn)的詞匯。精益來(lái)自于豐田公司的生產(chǎn)模式。在朝鮮戰(zhàn)爭(zhēng)時(shí)期,豐田汽車公司為了為美軍提供更多品 種的汽車,來(lái)自豐田紡織公司的大野耐一根據(jù)以往的經(jīng)驗(yàn)并通過(guò)不斷的實(shí)踐發(fā)明了豐田生產(chǎn)方式。這種生產(chǎn)方式在學(xué)術(shù)界被稱為精益生產(chǎn)。精益生產(chǎn)中有不少實(shí)踐跟 一些敏捷開發(fā)實(shí)踐不謀而合,如自動(dòng)化,可視化等。但是生搬硬套精益思想中的一些理念到軟件開發(fā)中多少有些別扭。
6. 敏捷實(shí)踐
以下是我接觸過(guò)的敏捷實(shí)踐:
結(jié)對(duì)編程:尤其適合老人帶新人,和老藝人傳幫帶很像,和高手結(jié)對(duì)真是職業(yè)生涯的幸事
TDD:有趣,值得嘗試
站立會(huì)議:不錯(cuò)的交流方式,站會(huì)講究簡(jiǎn)短不展開,有問(wèn)題會(huì)后交流
故事卡:一種很有效的需求分析方式
故事墻:可視化項(xiàng)目進(jìn)展,很有趣,但我個(gè)人認(rèn)為作用不大
燃燒曲線:沒(méi)感覺,或許客戶喜歡看
回顧會(huì)議:回顧會(huì)議的召開需要些技巧,需要個(gè)好的主持方式,確實(shí)能暴露問(wèn)題
Show Case:需要客戶配合才有作用
重構(gòu):啥也不說(shuō)了,最爽的事
迭代開發(fā):討厭僵化的迭代開發(fā),迭代計(jì)劃還是有彈性的好
看板方式:來(lái)自精益生產(chǎn),能夠取消迭代,減少浪費(fèi),贊
持續(xù)集成:見7
7. 持續(xù)集成
每當(dāng)Build成功,就有小鳥唱歌;Build失敗就是一聲悶雷,團(tuán)隊(duì)中必須有人站出來(lái)為此負(fù)責(zé)。這種開發(fā)模式我去年才剛剛接觸到,但恐怕我的職業(yè)生涯會(huì)離不開它了,我認(rèn)為它是最有用的敏捷開發(fā)實(shí)踐。甚至有些同事對(duì)持續(xù)集成的評(píng)價(jià)是持續(xù)集成就是敏捷。
8. 傳說(shuō)中的敏捷團(tuán)隊(duì)
傳說(shuō)中的敏捷團(tuán)隊(duì),每個(gè)人都是多面手,溝通暢通,有效協(xié)作,共同成長(zhǎng)并且持續(xù)改進(jìn),心心相通,眾志成城,快速響應(yīng)變化,為客戶帶來(lái)最大的價(jià)值。我相信這樣的團(tuán)隊(duì)是存在的,因?yàn)槲椰F(xiàn)在所處的項(xiàng)目團(tuán)隊(duì)已經(jīng)讓我看到了敏捷團(tuán)隊(duì)的雛形。
9. Martin Fowler
有幸和老馬有了一次面對(duì)面的交流,和老馬介紹了下我們的項(xiàng)目,但他也沒(méi)有給出什么建議。
最后我問(wèn)了兩個(gè)問(wèn)題:
我:您是我的偶像,請(qǐng)問(wèn)我如何才能成為一個(gè)像您這樣的軟件開發(fā)高手?
老馬:我無(wú)法回答,我不是開發(fā)者了,我只是個(gè)演說(shuō)者。
我:項(xiàng)目中和客戶交流,客戶說(shuō)你們不用搞太多測(cè)試和TDD之類,我們希望你們做的更快些,多實(shí)現(xiàn)功能為主。我認(rèn)為我們的主要目的是為客戶多交付價(jià)值,所以我們確實(shí)應(yīng)該減少測(cè)試的力度,您怎么看?
老馬:你需要權(quán)衡(Trade off),但在我看來(lái)寫測(cè)試只會(huì)讓我更快些。
10. 對(duì)敏捷的質(zhì)疑
一篇對(duì)敏捷諷刺的帖子,的確,如果教條的使用一些敏捷實(shí)踐恐怕沒(méi)什么好處。在公司內(nèi)部,也有很多質(zhì)疑敏捷的聲音,我想如果沒(méi)有質(zhì)疑和反饋來(lái)促使改進(jìn),敏捷就不是敏捷了。
11. 技術(shù) > 任何方法論
我到現(xiàn)在還一直持有這個(gè)偏激的觀點(diǎn):軟件開發(fā)不是工程而是藝術(shù),開發(fā)者的技術(shù)水平?jīng)Q定了軟件的水平。敏捷實(shí)踐能夠幫助優(yōu)秀的發(fā)者們做的更好更快。但追求更高的技術(shù)才是軟件開發(fā)的王道。