敏捷開發縱橫談

發表于:2014-01-16來源:Csdn作者:張傳波點擊數: 標簽:敏捷開發
“敏捷”陷阱 小甲想到某開發公司應聘開發工程師,向該公司的某開發人員打聽他們的開發方式。 小甲:請問貴公司開發模式是怎樣的? 開發人員:咱們敏捷開發!不用寫文檔,寫好代碼就可以了。

  “敏捷”陷阱

  小甲想到某開發公司應聘開發工程師,向該公司的某開發人員打聽他們的開發方式。

  小甲:請問貴公司開發模式是怎樣的?

  開發人員:咱們敏捷開發!不用寫文檔,寫好代碼就可以了。

  小甲心想:哇,爽啊!趕緊去應聘!

  小甲已經在該公司工作了數周,他覺得很郁悶:

  無需求文檔,要做東西都是口頭分配的。

  無計劃可言,想到啥就做啥。

  加班不在話下,返工是家常便飯。

  這就是敏捷開發嗎?

  不少公司搞CMMI認證,推行過程改進,往往被開發人員嗤之以鼻,開發人員喜歡自由奔放有創造力的工作模式,喜歡敏捷!

  然而很多號稱“敏捷”的公司,其實只是手工作坊的工作模式,想到啥就干啥,如果你是開發人員可能還會好一點,如果你是測試人員、實施人員,在這樣的公司你簡直會覺得無法溝通無法工作!

  到底什么是敏捷呢?如何才不會跌入敏捷陷阱呢?

  為什么會有“敏捷”這個說法?

  大學時我們就被灌輸了這樣的知識:

  生命周期模型有瀑布型、噴泉型、迭代型、螺旋型等。

  一般來說,大型的、復雜的、對安全要求高的系統,應該采用傳統的瀑布型來開發,應采取重型過程。

  對于中小型、需要快速投產的系統,應采用靈活的生命周期,采用敏捷的方式開發。

  其實“敏捷”是相對于“重型”提出來的,重型開發有這樣的特點:(摘自互聯網)

  1.刻板而嚴格控制。

  2.很多活動和工件,官僚主義氣息濃重。

  3.文檔繁多。

  4.長期而詳細的計劃。

  5.過程高于本質核心的工作。

  6.面向過程而不是面向人,把人看成機械方法中的插件。

  7.預見而不是適應。

  于是我就很有疑問了,如果重型開發有這樣的特點,那么請問:對于大型的、復雜的、安全要求高的系統,也需要用具備上述特點的重型過程來開發嗎?如果是這樣,誰愿意在這樣的工作環境下工作?具備這樣特點的過程對項目成功有什么好處?

  “重型”的重要特點是呆板,因為大家不喜歡呆板,喜歡靈活,所以提出了“敏捷”的說法!

  我猜想:

  1.重型過程其實是一些沒有實際項目經驗的理論家搞出來的產物。

  2.重型過程的出發點純粹就是為了過程而過程。

  當然上述論述純屬瞎猜,無法證實。

  每個人對“重型”與“敏捷”的理解其實都不太一樣,這里我用一個問題來測試一下你:

  我國的航天事業取得長足的發展,讓國人振奮,請問:你認為嫦娥工程采用的過程是重型的還是敏捷的?

  這么重大的項目,很多人可能認為應該是重型過程,很多人可能認為敏捷的過程是不太嚴禁的過程,其實嫦娥工程是靈活而又十分嚴謹的工程。

  大家有沒有留意到我們火箭發射時間是如何預報的?是不是具體說某天某時某刻發射?

  不是!而是說某段時間內擇機發射!“擇機發射”是多么靈活、科學、嚴謹的發射計劃啊,完全與我們傳統的計劃想法不一樣,難道你能說這也是重型過程嗎?

  所謂“重型”與“敏捷”其實都是相對的,我們沒有必要去爭論到底是“重型”還是“敏捷”。我們平時見到這么多“重型”“敏捷”的不同說法,其實大家都是各自從不同的標準出發。

  下面我們將介紹常見的幾種敏捷開發,每種理念其實背后的道理是很類似的,我們沒有必要去爭論哪種方式更好,你完全可以吸取百家所長化為自己的理念,按照你的想法將項目做好。

  極限編程

  極限編程英文叫:Extreme Programming,簡稱叫XP,最開始我接觸到XP的說法時,還覺得是Windows XP的XP呢!

  我第一次學習極限編程的最佳實踐時,讓我震撼不已,后來再工作中不斷體會,有了自己的見解。我將這些最佳實踐分為幾類:需求、設計、測試、編碼、項目管理。

  需求方面的最佳實踐:

  1.客戶故事:強調以客戶的語言來表達需求。

  需求分析有很多科學系統的方法,采用這些系統方法有時候往往不如使用最原始的土方法,就是用客戶的陳述來表達需求!

  極限編程認為,客戶不能清晰認識自己想要什么是很正常的事情,項目組也沒有必要成為業務專家,所以通過這兩個最佳實踐讓客戶來引導項目。項目的開發工作講究短平快,系統會分為多個小版本發布,客戶經過多個版本發布會逐步清楚認識到自己想要什么。

  這個最佳實踐鑒于我國的情況,其實是很難執行的。我們的項目一般合同價錢是簽死的,項目時間也是死的,基本都沒有機會讓我們來回折騰,如果我們不能在項目初期精準地分析出客戶真正的需求,項目失敗的機會是非常高的。

  我在實際工作中往往會通過用戶故事來獲取原始需求,然后對這些用戶故事進行提煉,提煉后的需求再跟客戶確認。我認為項目組還是很有必要成為業務專家,項目組中還是很需要有需求分析方面的高手,項目經不起折騰啊!

  2.客戶全程參與:強調從項目一開始到最后,客戶應該與項目緊密聯系,發揮更大的作用。

  這個實踐在實際工作中應該很好地貫徹,不要僅在需求階段才讓客戶介入,客戶最好就能常駐在項目小組內。下面有一些讓客戶多參與的建議做法:

  1)需求階段要與各用戶反復確認需求。

  2)系統做出界面時馬上讓客戶看看。

  3)項目計劃要讓客戶知道。

  4)每周向客戶發送項目進展報告。

  5)讓客戶參與測試軟件。

  設計方面的最佳實踐只有一條:

  1.簡單設計:不用長遠考慮,只要設計能保證當前功能可以實現就行。

  軟件開發的可謂千變萬化,能將功能做出來的最簡單設計就是最好的設計,你不需要考慮以后發生變化還能重用這些設計和代碼,明天的事情鬼知道,搞定今天的事情就可以了!

原文轉自:http://www.cnblogs.com/umlonline/archive/2010/03/17/1687760.html

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97