1.5 敏捷開發(XP和Scrum)

敏捷(Agile)

推崇敏捷的人認為:以「瀑布模型」為代表的傳統軟體開發模型重視計劃,一旦需求有變,修改成本高。

這種開發方法曾極大地促進了軟體業的發展,但如今卻顯得「力不從心」。

Why?

只因現在的商業環境風雲莫測,客戶需求變化快,正所謂「計劃趕不上變化」,然而傳統的軟體開發方法,恰恰難以快速響應變化,必須有和時代匹配的新模式出現——「敏捷編程」應運而生。(其實主要是現代軟體的更新更容易了,很多都是直接在線升級)

官網《敏捷軟體開發宣言》

敏捷軟體開發宣言?

agilemanifesto.org

我們一直在實踐中探尋更好的軟體開發方法,

身體力行的同時也幫助他人。由此我們建立了如下價值觀:

個體和互動 高於 流程和工具

工作的軟體 高於 詳盡的文檔

客戶合作 高於 合同談判

響應變化 高於 遵循計劃

也就是說,儘管右項有其價值,

我們更重視左項的價值。

敏捷過程4個價值觀:

(1)(溝通)個體和交互勝過過程和工具;

工具很重要,但不要過分誇大工具的作用。

團隊的構建,比環境的構建重要得多,合作、溝通的能力比單純的編程能力更重要。

(人本主義關懷)

(2)(簡單)可以工作的軟體勝過面面俱到的文檔

沒有文檔的軟體是一種災難;

但過多的文檔比過少的文檔更糟糕。

(迎合了不想寫文檔的人的心理)

(3)(反饋)客戶合作勝過合同談判;

成功的項目需要有序、頻繁的客戶反饋。

不要依賴於合同或者關於工作的陳述,而要讓軟體的客戶和開發團隊密切地在一起工作,並盡量經常提供反饋。

(4)(謙遜)響應變化勝過遵循計劃。

響應變化的能力常決定一個軟體項目的成敗。

計劃不能考慮過遠。

較好的做計劃的策略是:為下兩周做詳細的計劃,為下三個月做初略的計劃,再以後就做極為初略的計劃。

(打臉喜歡做計劃的人)

官網《敏捷宣言遵循的原則》

敏捷宣言遵循的原則?

agilemanifesto.org

總的來說,包括5個原則:

l 主張簡單

l 擁抱變化

l 快速反饋

l 高質量地工作

l 可用的軟體

極限編程·XP

敏捷過程是一種「價值觀」和「方法論」,是一個抽象的概念。其中一種具體的實踐形式是「極限編程」。

極限編程(eXtreme Programming,簡稱XP),比敏捷過程提出地更早(敏捷宣言發表之前,已有一些符合其價值觀的實踐,敏捷過程也是從實踐中提出地理論)。對比傳統的項目開發方式,XP強調把好的開發實踐運用到極致。XP多應用於軟體需求模糊的場合。

XP提倡的方法:

(1). 開發過程中至少要有一名客戶代表

(2). 快速交付——

a) 數周迭代一次,及時向客戶演示系統,獲得客戶反饋。

b) 不需要等一個產品的所有功能都實現了才能發布,只要把能盈利的功能做完了,通過測試就可以發布第一個版本,後面的功能按照優先順序接著做,做好了再更新。

(3). 結對編程

(4). 測試驅動開發——(Test-Driven Development,TDD)編碼之前即設計好測試方案

(5). 代碼集體所有——開發團隊中,每人都能改代碼,人人都要對代碼負責

(6). 不加班——為保證生產力,XP規定每周不超過40h,連續加班不超過兩周

(7). 開放的工作空間——

a) 要求team leader作為領隊人而不是管理者,團隊每個人都平等,但是項目負責人比重更大

b) 共同做出決定,每個人在自己的領域發聲,但是這並不代表這個團隊無組織無紀律。

c) 項目負責人需要找到合適的團隊成員,闡述產品的願景,並且鼓勵大家,保持大家的積極性。

d) 雖然開發過程是可調整的,但是負責人要保證這個產品不能完全跑偏。

(8). 及時調整計劃——計劃趕不上變化,沒有一成不變的計劃。一個預先設想的功能時候是有的,後來發現這個功能不需要了,可以廢掉;開發過程中發現了很有必要的新功能,那做完手頭這個就做這個新的。

(9). 重構——不改變系統行為的前提下,優化系統內部結構,以降低複雜性、提高靈活性。

Scrum

敏捷開發之Scrum(1)?

mp.weixin.qq.com圖標敏捷開發之Scrum(2)?

mp.weixin.qq.com圖標

Scrum本指橄欖球運動中的「爭球」的動作——團隊通力合作,在場地內傳球。這個過程需要認真配合、信念一致、目標明確。這個過程完美體現了對一個團隊的所有要求。

用Scrum命名一種開發過程,比喻開發團隊在開發一個項目時,像打橄欖球一樣迅速、激情,人人你爭我搶地完成它。

Scrum 方法——簡單說,就是以 交付 與 迭代 為核心的方法。「每過一小段時間就停一停手頭的工作,檢查一下已經完成了哪些任務,看看這些任務是不是自己應該做的,看看有沒有更好的方法」

Scrum開發流程中的三大角色:

產品負責人(Product Owner)——主要負責確定產品的功能和達到要求的標準,指定軟體的發布日期和交付的內容,同時有權力接受或拒絕開發團隊的工作成果。

流程管理員(Scrum Master)——主要負責整個Scrum流程在項目中的順利實施和進行,以及清除擋在客戶和開發工作之間的溝通障礙,使得客戶可以直接驅動開發。

開發團隊(Scrum Team)——主要負責軟體產品在Scrum規定流程下進行開發工作,人數控制在5~10人左右,每個成員可能負責不同的技術方面,但要求每成員必須要有很強的自我管理能力,同時具有一定的表達能力;成員可以採用任何工作方式,只要能達到目標。

Scrum主要方式:

  • l 衝刺(sprint):2周—4周,期間不許添加需求
  • l 成員5—10人
  • l 任務牆
  • l 每日一會:站立會議,避免時間過長
  • l 極其靈活,可以違反需求優先順序

XP與SCRUM的區別

一:迭代長度的不同

  • XP的一個衝刺的迭代長度大致為1~2周,
  • Scrum的迭代長度一般為 2~ 4周.

二:迭代中是否允許修改需求

  • XP可以考慮修改需求,原則是需求實現的時間量是相等的。
  • Scrum一旦迭代開工,不允許修改需求,由Scrum Master嚴格把關,不允許開發團隊受到干擾

三:在迭代中,需求需求是否嚴格按照優先順序別來實現

  • XP必須遵守優先順序別。
  • Scrum可以不按照優先順序別來做。

Scrum的理由是:如果優先問題的解決者,由於其它事情耽擱,不能認領任務,那麼整個進度就耽誤了。

四:軟體的實施過程中,是否採用嚴格的工程方法,保證進度或者質量

  • XP對整個流程方法定義非常嚴格,規定需要採用TDD、自動測試、結對編程、簡單設計、重構等約束團隊的行為。
  • Scrum沒有對軟體的整個實施過程開出工程實踐的處方。要求開發者自覺保證。

推薦閱讀:

機器學習項目為什麼未實現敏捷開發
如何使用Leangoo進行簡單的BUG管理
天下武功,唯快不破
你大概走了假敏捷——認真說說敏捷的實現和問題(手繪版)
兩周疾風式教學課程構想

TAG:軟體工程 | 敏捷開發 | Scrum | 項目管理 | 軟體開發 |