摘要:
在it界中,「敏捷」是乙個很酷的詞彙,「敏捷」的相關理論可謂鋪天蓋地。
「敏捷」一詞實質沒有統一定義,各家有自家的說法,本教程將讓你了解「敏捷」的來龍去脈,抓住「敏捷」本質,並能在工作中實踐「敏捷」。
大綱:
「敏捷」陷阱
為什麼會有「敏捷」這個說法?
極限程式設計
敏捷開發
rup敏捷開發的實質是什麼?
如何才能敏捷起來?
張傳波首席專家
軟體知識原創基地
www.umlonline.cn
正文:
「敏捷」陷阱
小甲想到某開發公司應聘開發工程師,向該公司的某開發人員打聽他們的開發方式。
小甲:請問貴公司開發模式是怎樣的?
開發人員:咱們敏捷開發!不用寫文件,寫好**就可以了。
小甲心想:哇,爽啊!趕緊去應聘!
小甲已經在該公司工作了數週,他覺得很鬱悶:
無需求文件,要做東西都是口頭分配的。
無計畫可言,想到啥就做啥。
加班不在話下,返工是家常便飯。
這就是敏捷開發嗎?
不少公司搞cmmi認證,推行過程改進,往往被開發人員嗤之以鼻,開發人員喜歡自由奔放有創造力的工作模式,喜歡敏捷!
然而很多號稱「敏捷」的公司,其實只是手工作坊的工作模式,想到啥就幹啥,如果你是開發人員可能還會好一點,如果你是測試人員、實施人員,在這樣的公司你簡直會覺得無法溝通無法工作!
到底什麼是敏捷呢?如何才不會跌入敏捷陷阱呢?
為什麼會有「敏捷」這個說法?
大學時我們就被灌輸了這樣的知識:
生命週期模型有瀑布型、噴泉型、迭代型、螺旋型等。
一般來說,大型的、複雜的、對安全要求高的系統,應該採用傳統的瀑布型來開發,應採取重型過程。
對於中小型、需要快速投產的系統,應採用靈活的生命週期,採用敏捷的方式開發。
其實「敏捷」是相對於「重型」提出來的,重型開發有這樣的特點:(摘自網際網路)
有一種敏捷開發,就叫敏捷開發。你可以認為這種是「狹義」敏捷開發,而本文標題所說的敏捷開發是泛指所有帶有敏捷特點的開發模式。
這種敏捷開發有這樣的特點:
1.個體和互動勝過過程和工具。
以人為本,注重程式設計中人的自我特長發揮。
2.可以工作的軟體勝過面面具到的文件。
強調軟體開發的產品是軟體,而不是文件。文件是為軟體開發服務的,而不是開發的主體。
3.客戶合作勝過合同談判。
客戶與開發者的關係是協作,不是合約。
開發者不是客戶業務的「專家」,也不是為了開發軟體,把開發人員變成客戶業務的專家。
要適應客戶的需求,就要通過客戶合作來闡述實際的需求細節。
4.響應變化勝過遵循計畫。
設計周密是為了最終軟體的質量,但不表明設計比實現更重要。
要適應客戶需求的不斷變化,設計也要不斷跟進,所以設計不能是「閉門造車」、「自我良好」。
要不斷根據環境的變化,修改自己的設計,指導開發的方向。
你可能會感覺到這些特點與極限程式設計的相似與不同之處,同時你也會感覺到這些特點很多與傳統的重型開發針鋒相對的。
rup
統一軟體過程,英文全寫為:rational unified process。
下面這兩張圖最能反應rup的特點:
以上兩圖來自網際網路
為了方便大家理解,我弄了中英文兩張圖,兩者是乙個意思,不過內容組織稍微有點不同,大家注意一下就行了。
要精確理解rup的意思還是有點難度的,簡單談談我對rup的理解。
按照時間順序,專案分為初始(inception)、細化(elaboration)、構造(construction)、交付(transition)四個階段,
每個階段會有很多個小迭代。這四個階段其實很難說有明顯界限的,我覺得大家大概了解每個階段的工作內容就可以了。
按照工作的性質,專案的工作可以分為以下幾類:
商業建模(business modeling)
需求(requirements)
分析和設計(analysis & design)
實現(implementation)
測試(test)
部署(deployment)
配置管理與變更管理(configuration & change mgmt)
專案管理(project management)
環境(environment)
以上這些工作,在專案的不同時期工作量分布是不太一樣的,如:商業建模、需求這些工作往往是頭大尾小,分析與設計、實現等是中間大兩頭小,專案管理、環境方面的工作一直都會持續進行。
rup的思想打破了「需求-設計-編碼-測試」這樣的傳統瀑布模式,需求、設計、編碼、測試這些工作其實一直都在進行的,只是不同時間比重不一樣。這個思想是很符合「敏捷」的特點,也和實際情況非常吻合。
大家理解這個意思後,我覺得完全可以按照自己公司的實際情況重新定義時間上的階段,也可以自己重新定義專案的各類工作,以及思考各類工作在專案不同時間的工作量分布。
關於敏捷開發的流派還有很多,如:自適應軟體開發、水晶方法、實用程式設計等等,我覺不同流派其實本質還是很類似的,這裡就不一一介紹了。
敏捷開發的實質是什麼?
什麼是敏捷?我想大家各有各的說法,我覺得敏捷過程應該是這樣的:
1.乙個專案目標明確的過程。
2.有利於實現專案目標的事情,一定要做。
3.對專案目標沒有幫助的事情,一律不做。
4.有效和高效是最重要的專案管理原則。
5.敏捷的過程是讓人愉快、工作起來有戰鬥力的過程。
敏捷開發簡單說就是有有效的辦法去做有用的事情,過程的目的是讓專案做得更好,不是為了過程而過程,不是用過程來「框死」專案,過程是為專案服務的。
各家各派的敏捷方**,其實基本道理都是這樣的,只是各自從不同的角度來闡述如何做軟體開發。我們沒有必要盲目崇拜某某方**,各種方**也沒有必要pk,我們應該集百家所長,為我所用!
如何才能敏捷起來?
有時候我們會這樣說:懶人會更聰明,因為他會想盡一切可以偷懶的辦法。如果說,敏捷開發其實就是「懶人」想出來的,這樣也不算奇怪。
那是不是我們就可以做「懶人」了?當然不是了,如果你不足夠聰明你就沒有資格做「懶人」!
其實「懶人」一點都不懶,因為他的腦袋從來是不偷閒的,他的腦袋是很勤快的。
說了這麼多,我其實想說的是:要敏捷,最關鍵在於多思考!
不要盡信各種敏捷方**,你必須思考,必須能提出自己的疑問和見解,這樣你才算理解這些方**。
你需要多實踐、多充實自己的知識,這樣你才會有更多的思考本錢,更多的打仗用的**。
你需要多總結,總結使人進步!
敏捷很容易,只要你開始思考如何讓工作更有效,只要你開始改善你的工作方法,你已經開始敏捷了!
-----全文完-----
軟體架構縱橫談
我在成都web開發大會與中國軟體技術大會上皆以此題做了演講。在這個演講中,我提出了mmn架構的命題。mmn架構即巨集觀架構 微觀架構與奈米架構。我在演講中 了mmn架構在原則 模式與方法學的體現。我試圖提出乙個好的架構過程,將各種方法學 原則與模式糅合在這個架構體系中。然而,這個命題還很粗糙。因為我...
粵語文化縱橫談
粵語文化縱橫談 2009年11月17日 粵語文化縱橫談 什麼是文化?對於這個問題,學術界有多種答案。而在漢語中,文化 一詞的 文 本義為紋理,引申為文辭,也就是語言 例如呂叔湘先生的一本語法學著作就叫 中國文法要略 文化,就是 以語言教化 當然這未必是對文化最科學的解釋,但由此可以看出,在我國傳統文...
win8 遊戲縱橫談
win8 已經寫了7 8個不入流的小遊戲,這些都是一些簡單的2d遊戲,無論曾經風靡的遊戲,例如俄羅斯方塊,連連看,寶石迷陣的遊戲,還是打地鼠,足球這些小兒科的遊戲。通過這些乙個個鮮活遊戲小例子,我總結出了開發遊戲的幾大要素。1 在遊戲絕對座標系,他的x軸的 與普通座標系一樣,但y軸與普通座標系是恰恰...