一、什么是敏捷開發(fā)?
-
傳統(tǒng)開發(fā)方式:如迭代式開發(fā)、瀑布式開發(fā)
- 軟件的開發(fā)過程是確定的、可測的
- 在一開始努力收集到需要的信息并指定好計(jì)劃
- 忠實(shí)地執(zhí)行計(jì)劃就能夠成功
-
敏捷開發(fā)(Agile Development)
- 無法從一開始就收集到確保陳功所需要的所有信息
- 隨著開發(fā)的進(jìn)行,對正在做的東西的認(rèn)識越來越深刻,才能發(fā)現(xiàn)產(chǎn)品中的一切缺陷或需要調(diào)整的地方
二、敏捷開發(fā)的核心是什么?
-
敏捷開發(fā)的原則是:
- 快速驗(yàn)證
- 價(jià)值驅(qū)動
- 團(tuán)隊(duì)自組織
-
敏捷開發(fā)的目的是:
- 更早驗(yàn)證產(chǎn)品模式
- 獲得投資回報(bào)
- 降低投資風(fēng)險(xiǎn)
-
敏捷開發(fā)的核心是:
- 以人為核心!
- 人為核心!
- 人為核心!
敏捷開發(fā)是增量式的迭代開發(fā),需要應(yīng)對多種可能的需求變化并快速感知響應(yīng)。
增量迭代開發(fā)就是定期產(chǎn)出可工作的軟件并收集軟件反饋,然后做出相應(yīng)的調(diào)整戰(zhàn)略。
形成所謂的快速反饋循環(huán),以迅速應(yīng)對變化。
三、敏捷開發(fā)的兩種方法
1)Scrum
Scrum表示橄欖球運(yùn)動的“爭球”動作;
大家像打橄欖球一樣迅速、富有戰(zhàn)斗激情、人人你爭我搶地完成它。
2)XP
極限編程(eXtreme Programming)是敏捷方法中最被推崇的一個(gè)
3)Scrum和XP的區(qū)別是什么?
區(qū)別之一: 迭代長度的不同
- XP的一個(gè)Sprint的迭代長度大致為1~2周
- Scrum的一個(gè)Sprint迭代長度一般為 2~ 4周.
區(qū)別之二: 在迭代中, 是否允許修改需求
- XP在一個(gè)迭代中,如果一個(gè)User Story(用戶素材, 也就是一個(gè)需求)還沒有實(shí)現(xiàn), 則可以考慮用另外的需求將其替換,替換的原則是需求實(shí)現(xiàn)的時(shí)間量是相等的。
- Scrum是不允許這樣做的,一旦迭代開工會完畢, 任何需求都不允許添加進(jìn)來,并有Scrum Master嚴(yán)格把關(guān),不允許開發(fā)團(tuán)隊(duì)受到干擾
區(qū)別之三: 在迭代中,User Story是否嚴(yán)格按照優(yōu)先級別來實(shí)現(xiàn)
XP是務(wù)必要遵守優(yōu)先級別的。 但Scrum在這點(diǎn)做得很靈活, 可以不按照優(yōu)先級別來做,Scrum這樣處理的理由是:如果優(yōu)先問題的解決者,由于其它事情耽擱,不能認(rèn)領(lǐng)任務(wù),那么整個(gè)進(jìn)度就耽誤了。 另外一個(gè)原因是,如果按優(yōu)先級排序的User Story #6和#10,雖然#6優(yōu)先級高,但是如果#6的實(shí)現(xiàn)要依賴于#10,則不得不優(yōu)先做#10.
區(qū)別之四
軟件的實(shí)施過程中,是否采用嚴(yán)格的工程方法,保證進(jìn)度或者質(zhì)量
四、如何實(shí)現(xiàn)敏捷開發(fā)?
Scrum開發(fā)流程中的三大角色
一)產(chǎn)品負(fù)責(zé)人(Product Owner)
主要負(fù)責(zé)確定產(chǎn)品的功能和達(dá)到要求的標(biāo)準(zhǔn),指定軟件的發(fā)布日期和交付的內(nèi)容,同時(shí)有權(quán)力接受或拒絕開發(fā)團(tuán)隊(duì)的工作成果。
二)流程管理員(Scrum Master)
主要負(fù)責(zé)整個(gè)Scrum流程在項(xiàng)目中的順利實(shí)施和進(jìn)行,以及清除擋在客戶和開發(fā)工作之間的溝通障礙,使得客戶可以直接驅(qū)動開發(fā)。
三)開發(fā)團(tuán)隊(duì)(Scrum Team)
主要負(fù)責(zé)軟件產(chǎn)品在Scrum規(guī)定流程下進(jìn)行開發(fā)工作,人數(shù)控制在5~10人左右,每個(gè)成員可能負(fù)責(zé)不同的技術(shù)方面,但要求每成員必須要有很強(qiáng)的自我管理能力,同時(shí)具有一定的表達(dá)能力;成員可以采用任何工作方式,只要能達(dá)到Sprint的目標(biāo)。
什么是Sprint?
Sprint是短距離賽跑的意思,在開發(fā)里面指的是一次迭代。
而一次迭代的周期是1個(gè)月時(shí)間(即4個(gè)星期),
也就是我們要把一次迭代的開發(fā)內(nèi)容以最快的速度完成它,
這個(gè)過程我們稱它為Sprint。
- 我們首先需要確定一個(gè)Product Backlog(按優(yōu)先順序排列的一個(gè)產(chǎn)品需求列表),這個(gè)是由Product Owner 負(fù)責(zé)的;
- Scrum Team根據(jù)Product Backlog列表,做工作量的預(yù)估和安排;
- 有了Product Backlog列表,我們需要通過 Sprint Planning Meeting(Sprint計(jì)劃會議) 來從中挑選出一個(gè)Story作為本次迭代完成的目標(biāo),這個(gè)目標(biāo)的時(shí)間周期是1~4個(gè)星期,然后把這個(gè)Story進(jìn)行細(xì)化,形成一個(gè)Sprint Backlog;
- Sprint Backlog是由Scrum Team去完成的,每個(gè)成員根據(jù)Sprint Backlog再細(xì)化成更小的任務(wù)(細(xì)到每個(gè)任務(wù)的工作量在2天內(nèi)能完成);
- 在Scrum Team完成計(jì)劃會議上選出的Sprint Backlog過程中,需要進(jìn)行 Daily Scrum Meeting(每日站立會議),每次會議控制在15分鐘左右,每個(gè)人都必須發(fā)言,并且要向所有成員當(dāng)面匯報(bào)你昨天完成了什么,并且向所有成員承諾你今天要完成什么,同時(shí)遇到不能解決的問題也可以提出,每個(gè)人回答完成后,要走到黑板前更新自己的 Sprint burn down(Sprint燃盡圖);
- 做到每日集成,也就是每天都要有一個(gè)可以成功編譯. 并且可以演示的版本;很多人可能還沒有用過自動化的每日集成,其實(shí)TFS就有這個(gè)功能,它可以支持每次有成員進(jìn)行簽入操作的時(shí)候,在服務(wù)器上自動獲取最新版本,然后在服務(wù)器中編譯,如果通過則馬上再執(zhí)行單元測試代碼,如果也全部通過,則將該版本發(fā)布,這時(shí)一次正式的簽入操作才保存到TFS中,中間有任何失敗,都會用郵件通知項(xiàng)目管理人員;
- 當(dāng)一個(gè)Story完成,也就是Sprint Backlog被完成,也就表示一次Sprint完成,這時(shí),我們要進(jìn)行 Srpint Review Meeting(演示會議),也稱為評審會議,產(chǎn)品負(fù)責(zé)人和客戶都要參加(最好本公司老板也參加),每一個(gè)Scrum Team的成員都要向他們演示自己完成的軟件產(chǎn)品(這個(gè)會議非常重要,一定不能取消);
- 最后就是** Sprint Retrospective Meeting(回顧會議)**,也稱為總結(jié)會議,以輪流發(fā)言方式進(jìn)行,每個(gè)人都要發(fā)言,總結(jié)并討論改進(jìn)的地方,放入下一輪Sprint的產(chǎn)品需求中;
五、Scrum開發(fā)流程中的一些場景圖
任務(wù)看版包含 未完成、正在做、已完成 的工作狀態(tài)
假設(shè)你今天把一個(gè)未完成的工作已經(jīng)完成,
那么你要把小卡片從未完成區(qū)域貼到已完成區(qū)域。
每個(gè)人的工作進(jìn)度和完成情況都是公開的,
如果有一個(gè)人的工作任務(wù)在某一個(gè)位置放了好幾天,
大家都能發(fā)現(xiàn)他的工作進(jìn)度出現(xiàn)了什么問題
(成員人數(shù)最好是5~7個(gè),這樣每人可以使用一種專用顏色的標(biāo)簽紙,一眼就可以從任務(wù)版看出誰的工作進(jìn)度快,誰的工作進(jìn)度慢)
計(jì)劃紙牌怎么用的呢?
比如A程序員開發(fā)一個(gè)功能,需要5個(gè)小時(shí),
B程序員認(rèn)為只需要半小時(shí),那他們各自取相應(yīng)的牌,藏在手中,
最后攤牌,如果時(shí)間差距很大,
那么A和B就可以討論A為什么要5個(gè)小時(shí)...
希望詳細(xì)了解學(xué)習(xí)的同學(xué)可以購買這本書《硝煙中的Scrum和XP》作者Henrik Kniberg講 述了他在一年的時(shí)間里,帶領(lǐng)40人的團(tuán)隊(duì)實(shí)施Scrum的過程。他們試過了多種團(tuán)隊(duì)尺寸(3~12人)、sprint長度(2~6星期),定義“完成”的 不同方式,不同的backlog格式,各種測試策略,在多個(gè)Scrum團(tuán)隊(duì)之間進(jìn)行同步的多種方式。他們還嘗試過XP實(shí)踐——持續(xù)集成、結(jié)對編程、測試驅(qū) 動開發(fā)等等,還試過了把XP跟Scrum組合。