1.5 敏捷開發(XP和Scrum)
敏捷(Agile)
推崇敏捷的人認為:以「瀑布模型」為代表的傳統軟體開發模型重視計劃,一旦需求有變,修改成本高。
這種開發方法曾極大地促進了軟體業的發展,但如今卻顯得「力不從心」。
Why?
只因現在的商業環境風雲莫測,客戶需求變化快,正所謂「計劃趕不上變化」,然而傳統的軟體開發方法,恰恰難以快速響應變化,必須有和時代匹配的新模式出現——「敏捷編程」應運而生。(其實主要是現代軟體的更新更容易了,很多都是直接在線升級)
官網《敏捷軟體開發宣言》
敏捷軟體開發宣言
我們一直在實踐中探尋更好的軟體開發方法,
身體力行的同時也幫助他人。由此我們建立了如下價值觀:個體和互動 高於 流程和工具工作的軟體 高於 詳盡的文檔客戶合作 高於 合同談判響應變化 高於 遵循計劃也就是說,儘管右項有其價值,我們更重視左項的價值。
敏捷過程4個價值觀:
(1)(溝通)個體和交互勝過過程和工具;
工具很重要,但不要過分誇大工具的作用。
團隊的構建,比環境的構建重要得多,合作、溝通的能力比單純的編程能力更重要。
(人本主義關懷)
(2)(簡單)可以工作的軟體勝過面面俱到的文檔
沒有文檔的軟體是一種災難;
但過多的文檔比過少的文檔更糟糕。(迎合了不想寫文檔的人的心理)
(3)(反饋)客戶合作勝過合同談判;
成功的項目需要有序、頻繁的客戶反饋。
不要依賴於合同或者關於工作的陳述,而要讓軟體的客戶和開發團隊密切地在一起工作,並盡量經常提供反饋。
(4)(謙遜)響應變化勝過遵循計劃。
響應變化的能力常決定一個軟體項目的成敗。
計劃不能考慮過遠。較好的做計劃的策略是:為下兩周做詳細的計劃,為下三個月做初略的計劃,再以後就做極為初略的計劃。(打臉喜歡做計劃的人)
官網《敏捷宣言遵循的原則》
敏捷宣言遵循的原則
總的來說,包括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)敏捷開發之Scrum(2)
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管理
※天下武功,唯快不破
※你大概走了假敏捷——認真說說敏捷的實現和問題(手繪版)
※兩周疾風式教學課程構想