在這篇文章中, Alesia Krush將對四種最流行的敏捷開發(fā)方法進(jìn)行比較,給出了每種方法的優(yōu)缺點(diǎn)。
市場上有各種各樣的面向?qū)嵺`的敏捷框架,其中最受歡迎的是Scrum、Kanban、Lean和XP。雖然這是一個(gè)比較類文章,但分析這些框架卻有點(diǎn)像拿蘋果與橙子做比較,因?yàn)槠渲械囊恍┓椒梢韵嗷ブС只蜓a(bǔ)充(尤其是當(dāng)它們適用于開發(fā)生命周期不同部分時(shí))。
Scrum
Scrum完全可以被稱為敏捷軟件開發(fā)的框架。Alesia Krush分享了一個(gè)經(jīng)歷:“某次我遇到了一個(gè)朋友,并告訴他我的新工作是關(guān)于“敏捷”的。他提出的一個(gè)問題就是,你每天都在做Scrum之類的事情嗎?“。在很多人看來,Scrum就是敏捷的代名詞。
首先,Scrum是一個(gè)管理框架。Scrum明確地規(guī)定了一個(gè)模型,根據(jù)這個(gè)模型,開發(fā)人員計(jì)劃工作、更新計(jì)劃并分析過程。該框架介紹了角色Scrum Master,Scrum Master是一個(gè)專門為流程提供便利、并確保遵循這一流程的角色。
人工品
Scrum的主要“人工品”(信息傳播者)是:
1. User Story。一小部分功能是,團(tuán)隊(duì)將在一個(gè)被稱為Sprint的時(shí)間段內(nèi)工作。通常的格式是:作為[用戶角色],希望[系統(tǒng)做這個(gè)和那個(gè)],以便[交付這樣和這樣的商業(yè)價(jià)值]。它必須有一個(gè)“完成的定義”,用來確定故事是否已經(jīng)正確執(zhí)行。
2. Task。它可以與用戶故事相關(guān)或不相關(guān)。例如,設(shè)置新的開發(fā)環(huán)境或研究CPU內(nèi)存問題是與用戶故事無關(guān)的任務(wù)。
3. Backlog。用戶故事和未來Sprint任務(wù)的列表。
4. Sprint backlog。從Backlog的當(dāng)前Sprint中挑選用戶故事和任務(wù)列表(又名“工作項(xiàng)目”)。
5. Product increment。在Sprint結(jié)束時(shí)交付的一種潛在可交付功能塊。
6. Extensions。像Burndown Chart、Velocity等的報(bào)告,用于跟蹤團(tuán)隊(duì)的進(jìn)展。
角色
1. 開發(fā)團(tuán)隊(duì)。包括開發(fā)人員、QA工程師、UI/UX設(shè)計(jì)師、業(yè)務(wù)分析師以及其他需要的人員。Scrum團(tuán)隊(duì)通常有3到9名成員。當(dāng)9個(gè)人還不夠時(shí),團(tuán)隊(duì)就一分為二了。
2. Scrum Master。主持每日Scrum會議、策劃/更新/回顧會議,并幫助團(tuán)隊(duì)成員解決溝通問題。Scrum Master不是團(tuán)隊(duì)成員,所以他們可以同時(shí)與多個(gè)團(tuán)隊(duì)合作。
3. 產(chǎn)品所有者。利益相關(guān)者的代表,將Scrum團(tuán)隊(duì)的愿景(作為用戶故事的基礎(chǔ))傳達(dá)給Scrum團(tuán)隊(duì),在每個(gè)Sprint結(jié)束時(shí)優(yōu)先考慮用戶故事,并接受或拒絕他們。
價(jià)值
1. 承諾(在Sprint中實(shí)現(xiàn)目標(biāo))。
2. 勇氣(做您認(rèn)為正確的事)。
3. 重點(diǎn)(在當(dāng)前Sprint中的工作項(xiàng)目)。
4. 開放(關(guān)于面臨的任何挑戰(zhàn))。
5. 尊重(相信其他人的能力)。
Kanban
Kanban框架是由豐田工程師Taiichi Ohno發(fā)明的。在20世紀(jì)40年代后期,豐田代表們觀察到超市是如何根據(jù)貨架上的貨物重新進(jìn)貨。這促使豐田建立了一個(gè)供應(yīng)體系,生產(chǎn)計(jì)劃將由實(shí)際消耗驅(qū)動。
Kanban的關(guān)鍵思想之一是避免產(chǎn)生過剩。Kanban通過使用Kanban卡和Kanban板來可視化資源在生產(chǎn)周期中的移動。這使每個(gè)人都能夠最大程度地了解流程,并幫助管理人員實(shí)時(shí)解決盈余/短缺問題。
Kanban系統(tǒng)還引入了“pull”與“push”的概念,工人可以根據(jù)自己的能力進(jìn)行工作,而不是在傳送帶上或在待辦事項(xiàng)列表形式中工作。
在軟件工程中,Kanban意味著一次可以進(jìn)行的工作量是有限的。換句話說,Kanban上的“進(jìn)行中”欄內(nèi)可以擁有卡片是有上限的,這樣做是為了增加焦點(diǎn)并減少上下文切換。
Kanban開發(fā)的另一個(gè)方面是,活動始終與客戶需求緊密相關(guān),并與客戶保持持續(xù)的溝通。除非在經(jīng)濟(jì)上有利于客戶,否則什么都不會產(chǎn)生。
原則
1. 專注—減少多任務(wù);
2. 減少浪費(fèi);
3. 客戶的需求放在第一位(即他們的業(yè)務(wù)需求-ROI);
實(shí)踐
1. 可視化;
2. 限制工作進(jìn)展;
3. 流程管理(可以通過管理隊(duì)列或限制工作來完成);
4. 明確政策;
5. 使用反饋循環(huán);
6. 實(shí)驗(yàn)演變;
Kanban和Scrum的關(guān)鍵區(qū)別在于:Kanban是連續(xù)的,而Scrum是迭代的。Kanban更適合在Sprint期間有大量計(jì)劃外工作(支持問題;緊急修復(fù);緊急功能請求)的團(tuán)隊(duì)。通過這種方式,團(tuán)隊(duì)可以隨時(shí)重新排序任務(wù),不再需要等待Sprint結(jié)束。
Lean
Lean開發(fā)者,Mary Poppendieck在她的事業(yè)生涯中取得了巨大的成功,她帶領(lǐng)她與Tom Poppendieck共同編寫了Lean軟件。因?yàn)長ean大量借用了Kanban,兩種方法之間有許多相似之處。
就像Kanban一樣,Lean盡量避免浪費(fèi),最大限度地為客戶帶來價(jià)值。與Kanban不同的是,Lean有一些關(guān)于工程實(shí)踐的規(guī)定(例如TDD)。與此同時(shí),Lean對交付時(shí)間的要求不那么嚴(yán)格,團(tuán)隊(duì)可能隨時(shí)準(zhǔn)備部署。
XP - 極限編程
極限編程始于Kent Beck的一個(gè)實(shí)驗(yàn),他的想法是把編程實(shí)踐做到極致,看看會發(fā)生什么。例如,代碼審查代替代碼檢查。后來,隨著越來越多的公司開始采用這種方法,例如日常集成測試等,某些嚴(yán)格的規(guī)則開始被忽略。
與傳統(tǒng)的觀念相反,XP不只是簡單的平等配對編程,XP還提供了一個(gè)流程管理算法。
需要注意的另一點(diǎn)是,理想情況下,所有的XP操作都應(yīng)該一起使用,否則他們將無法正常工作。
XP的管理方面受到了一些項(xiàng)目經(jīng)理批評。例如,持續(xù)存在的客戶被認(rèn)為是壓力的來源。另外,沒有任何要求和設(shè)計(jì)系統(tǒng)可能是無效的。
值
XP值與Scrum中的值相關(guān)。見表格:
就像Kanban和Lean,XP也很注重浪費(fèi)問題。
實(shí)踐
1. 計(jì)劃游戲;
2. 測試驅(qū)動開發(fā)(“先寫單元測試”);
3. 配對編程;
4. 團(tuán)隊(duì)(客戶/程序的實(shí)際用戶可用于反饋);
5. 持續(xù)集成;
6. 重構(gòu)設(shè)計(jì)改進(jìn);
7. 小版本;
8. 編碼標(biāo)準(zhǔn);
9. 集體代碼所有權(quán);
10. 設(shè)計(jì)簡單;
11. 系統(tǒng)隱喻(以程序員,客戶和其他人理解的方式命名事物);
12. 可持續(xù)性。