這些天看到一本書《Agile Project Management with Scrum》,感覺(jué)很不錯(cuò),于是在網(wǎng)上找了些相關(guān)的資料。
SCRUM方法如下:
由Ken Schwaber和 Jeff Sutherland 提出,旨在尋求充分發(fā)揮面向?qū)ο蠛蜆?gòu)件技術(shù)的開發(fā)方法,是對(duì)迭代式面向?qū)ο蠓椒ǖ母倪M(jìn),名稱來(lái)自英式橄欖球(在比賽中每個(gè)隊(duì)員都應(yīng)時(shí)刻保持對(duì)場(chǎng)上全局的判斷,然后通過(guò)集體行動(dòng),奮力實(shí)現(xiàn)同一目標(biāo)──勝利)。SCRUM方法最初實(shí)踐于Easel公司(1993年),現(xiàn)已被數(shù)十家公司數(shù)百個(gè)項(xiàng)目開發(fā)中應(yīng)用,適用于需求難以預(yù)測(cè)的復(fù)雜商務(wù)應(yīng)用產(chǎn)品的開發(fā)[11]。SCRUM提出的SCRUM Meeting、Sprint、Backlog、SCRUM Master、SCRUM Team、Demo等模式已被PLOP作為組織和過(guò)程模式(Organizational and Process Pattern)的標(biāo)準(zhǔn)[12]。
SCRUM將工業(yè)過(guò)程控制中的概念應(yīng)用到軟件開發(fā)中來(lái),認(rèn)為軟件開發(fā)過(guò)程更多是經(jīng)驗(yàn)性過(guò)程(Empirical Process),而不是確定性過(guò)程(Defined Process)。確定性過(guò)程是可明確描述的、可預(yù)測(cè)的過(guò)程,因而可重復(fù)(Repeatable)執(zhí)行并能產(chǎn)生預(yù)期的結(jié)果,并能通過(guò)科學(xué)理論對(duì)其最優(yōu)化。經(jīng)驗(yàn)性過(guò)程與之相反,應(yīng)作為一個(gè)黑箱(Black box)來(lái)處理,通過(guò)對(duì)黑箱的輸入輸出不斷進(jìn)行度量,在此基礎(chǔ)上,結(jié)合經(jīng)驗(yàn)判斷對(duì)黑箱進(jìn)行調(diào)控,使其不越出設(shè)定的邊界,從而產(chǎn)生滿意的輸出。SCRUM方法將傳統(tǒng)開發(fā)中的分析、設(shè)計(jì)、實(shí)施視為一個(gè)黑箱,認(rèn)為應(yīng)加強(qiáng)黑箱內(nèi)部的混沌性,使項(xiàng)目組工作在混沌的邊沿,充分發(fā)揮人的創(chuàng)造力。如將經(jīng)驗(yàn)性過(guò)程按確定性過(guò)程來(lái)處理(如瀑布模型),必將使過(guò)程缺乏適應(yīng)力。
3.2.1 SCRUM方法的開發(fā)過(guò)程
包括三個(gè)過(guò)程:
(1) 計(jì)劃和體系結(jié)構(gòu)設(shè)計(jì)(確定性過(guò)程)
將Backlog(急待完成的一系列任務(wù),包括:未細(xì)化的產(chǎn)品功能要求、Bugs、缺陷、用戶提出的改進(jìn)、具競(jìng)爭(zhēng)力的功能及技術(shù)升級(jí)等)按優(yōu)先級(jí)排序形成Backlog 列表,根據(jù)該表和風(fēng)險(xiǎn)評(píng)估制訂產(chǎn)品交付基線。
建立系統(tǒng)體系結(jié)構(gòu)(如為已有系統(tǒng)改進(jìn),則只作有限分析、調(diào)整),將Backlog項(xiàng)按高內(nèi)聚低耦合的原則分解為一系列問(wèn)題包(Packets,每個(gè)Packet是一組對(duì)象或構(gòu)件的集合) ,依據(jù)同樣原則相應(yīng)劃分若干個(gè)開發(fā)小組(SCRUM 小組),分配各小組合適的Backlog項(xiàng)或問(wèn)題包。建立開發(fā)運(yùn)行環(huán)境。
(2) Sprint(經(jīng)驗(yàn)性過(guò)程)
該過(guò)程由若干個(gè)迭代的沖刺(Sprint) 活動(dòng)組成,直至風(fēng)險(xiǎn)評(píng)估認(rèn)為產(chǎn)品可交付為止。一個(gè)Sprint是在限定時(shí)間段內(nèi)(Sprint周期,通常為1~6周,可在前一個(gè)Sprint結(jié)束時(shí)調(diào)整)的一系列開發(fā)活動(dòng)(包括分析、設(shè)計(jì)、編碼、測(cè)試等),每個(gè)SCRUM小組并行開發(fā)且必須步調(diào)一致(在一個(gè)Sprint結(jié)束后,均須完成所分配的Backlog項(xiàng)并有可執(zhí)行的產(chǎn)出)。
每個(gè)Sprint包含以下活動(dòng):
l 開發(fā)。對(duì)分配的Backlog工作進(jìn)行分析,將所需改動(dòng)(changes)映射到各packets,打開packets,進(jìn)行領(lǐng)域分析,然后設(shè)計(jì)、開發(fā)、實(shí)施、測(cè)試、文檔化這些改動(dòng)。
l 打包(Wrap)。封裝packets,產(chǎn)生一個(gè)滿足Backlog需求的可執(zhí)行版本。
l 評(píng)審(Review)。所有的SCRUM小組一起開會(huì),提交各自的工作并演示(Demo),然后提出和解決問(wèn)題(Issue)及難點(diǎn)(problem),增加新的Backlog項(xiàng);發(fā)布、審查或調(diào)整產(chǎn)品的標(biāo)準(zhǔn)規(guī)范;進(jìn)行風(fēng)險(xiǎn)評(píng)估并提出合適的對(duì)策;確定下一個(gè)Sprint的工作內(nèi)容和結(jié)束時(shí)間。
l 調(diào)整(Adjust)。根據(jù)評(píng)審會(huì)匯集的信息,對(duì)受影響的Packets進(jìn)行適當(dāng)調(diào)整和鞏固。
(3) 交付和鞏固(確定性過(guò)程)
一旦根據(jù)風(fēng)險(xiǎn)評(píng)估結(jié)果認(rèn)為可交付產(chǎn)品時(shí),即進(jìn)入該階段。該階段的活動(dòng)包括:組裝,系統(tǒng)測(cè)試和回歸測(cè)試(Regression),準(zhǔn)備培訓(xùn)材料,完成最終文檔。
SCRUM過(guò)程認(rèn)為一個(gè)產(chǎn)品的開發(fā)將一直持續(xù)下去,除非經(jīng)風(fēng)險(xiǎn)評(píng)估后認(rèn)為應(yīng)停止。產(chǎn)品交付后的鞏固活動(dòng)類似于傳統(tǒng)方法中的維護(hù)和改善,目的在于整理Sprint期壓力下忽略的工作,為下一階段的開發(fā)做準(zhǔn)備,以便輕裝上陣。
3.2.2 SCRUM對(duì)過(guò)程的管理:
(1) SCRUM的控制手段。
SCRUM提出了八個(gè)控制項(xiàng)(Controls)用于開發(fā)過(guò)程的調(diào)控,其中風(fēng)險(xiǎn)控制是首要的手段。
l Backlog。
l 對(duì)象/構(gòu)件。
l Packets。
l 變動(dòng)(Changes)。實(shí)施一個(gè)Backlog項(xiàng)時(shí),對(duì)相應(yīng)Packet的改動(dòng)。
l 難點(diǎn)(Problems)。實(shí)施一個(gè)變動(dòng)時(shí)所必須解決的技術(shù)難點(diǎn)。
l 問(wèn)題(Issues)。涉及到整個(gè)項(xiàng)目或在Backlog項(xiàng)分解到Packet之前須解決的問(wèn)題。
l 措施(Solutions)。對(duì)問(wèn)題或難點(diǎn)的解決,通常會(huì)導(dǎo)致變動(dòng)。
l 風(fēng)險(xiǎn)(Risks)。影響項(xiàng)目成功的風(fēng)險(xiǎn),應(yīng)持續(xù)跟蹤評(píng)估并相應(yīng)做出調(diào)整。風(fēng)險(xiǎn)評(píng)估的結(jié)果將影響其他所有控制項(xiàng)。SCRUM定義了六個(gè)概念性變量來(lái)用于風(fēng)險(xiǎn)評(píng)估:用戶需求,時(shí)間壓力,競(jìng)爭(zhēng),質(zhì)量,遠(yuǎn)見(vision)和可用資源。
在SCRUM的各個(gè)階段都使用這些控制項(xiàng)來(lái)評(píng)估和權(quán)衡,管理人員側(cè)重于以此管理Backlog,開發(fā)組用以處理變動(dòng)和難點(diǎn)。所有人員一起來(lái)管理問(wèn)題、風(fēng)險(xiǎn)和措施。
根據(jù)對(duì)控制項(xiàng)特別是風(fēng)險(xiǎn)的不斷度量評(píng)估和權(quán)衡,一方面,計(jì)劃和進(jìn)度(在每個(gè)Sprint結(jié)束時(shí))不斷相應(yīng)調(diào)整,保證實(shí)現(xiàn)產(chǎn)品的商務(wù)目標(biāo);另一方面,對(duì)開發(fā)中的工作任務(wù)Backlog動(dòng)態(tài)地進(jìn)行優(yōu)先級(jí)排序,開發(fā)組總是先開發(fā)優(yōu)先級(jí)最高的Backlog項(xiàng),這樣就保證了資源的最合理使用。另外,SCRUM強(qiáng)調(diào)度量(采用標(biāo)準(zhǔn)功能點(diǎn)度量方法)的重要性,通過(guò)對(duì)每個(gè)Sprint中生產(chǎn)率等的度量,計(jì)劃和進(jìn)度將越來(lái)越趨于準(zhǔn)確。
(2) 項(xiàng)目組織。
項(xiàng)目組由全職開發(fā)人員及與該交付產(chǎn)品有關(guān)的市場(chǎng)人員、銷售人員、用戶等組成。設(shè)以下小組:
l 項(xiàng)目管理組。由產(chǎn)品經(jīng)理領(lǐng)銜,包括總設(shè)計(jì)師,各SCRUM小組組長(zhǎng),市場(chǎng)、銷售的高級(jí)職員及典型用戶等。
l 若干個(gè)SCRUM小組。各小組由組長(zhǎng)(SCRUM Master)領(lǐng)銜。每個(gè)小組都是跨專業(yè)的(通常包括開發(fā)人員,文檔人員,質(zhì)量控制人員或用戶代表等),通常為3~7人,以使小組內(nèi)有充分的交流。小組的劃分最好是功能導(dǎo)向的(按所分配的問(wèn)題包或Backlog),也可是系統(tǒng)層次導(dǎo)向(按體系結(jié)構(gòu)中的分層)。.
在項(xiàng)目組人數(shù)增大時(shí),可在管理組之上再設(shè)管理組(SCRUM of SCRUM),從而使SCRUM方法的應(yīng)用到大項(xiàng)目中。
(3) Sprint期間的調(diào)控。
在Sprint期間,應(yīng)使各SCRUM小組盡量避免外界的干擾(不可將新的Backlog任務(wù)加進(jìn)來(lái),組內(nèi)產(chǎn)生的Backlog可放到整個(gè)項(xiàng)目的Backlog列表中,也可在本次Sprint中解決),使小組成員專心于目前的工作,使他們工作在混沌的邊沿。
為避免項(xiàng)目組在Sprint期間不陷入混亂,SCRUM采取兩個(gè)措施:
l SCRUM會(huì)議(SCRUM Meeting)。對(duì)小組行為進(jìn)行監(jiān)控和刺激。會(huì)議在Sprint期間每天在同一地點(diǎn)舉行,由SCRUM Master主持。會(huì)議上,SCRUM Master對(duì)每個(gè)小組成員提三個(gè)問(wèn)題:
1) 昨天的工作進(jìn)展如何。
2) 有否遇到困難和障礙。
3) 今天的工作打算。
會(huì)后SCRUM Master集中精力排除障礙,小組成員則進(jìn)行當(dāng)天的開發(fā)。
l Sprint評(píng)審會(huì)議。評(píng)審后根據(jù)對(duì)每人的工作成績(jī),進(jìn)行相應(yīng)的激勵(lì)。
3.2.3 SCRUM方法的實(shí)踐效果和發(fā)展方向:
SCRUM在實(shí)踐中大大提高了生產(chǎn)率(據(jù)軟件生產(chǎn)率組織的Capers Jones稱可提高6倍),在實(shí)施中有一個(gè)"間斷平衡"(Punctuated equilibrium)現(xiàn)象(類似于自然界中物種的進(jìn)化,在經(jīng)過(guò)一段相對(duì)平衡的各自獨(dú)立、并行的發(fā)展期后,在交匯處發(fā)生變異),即在經(jīng)過(guò)緊張、并行的Sprint開發(fā)后,在Sprint評(píng)審時(shí),軟件產(chǎn)品產(chǎn)生較劇烈的變化。SCRUM方法的最近動(dòng)向是設(shè)法借鑒XP方法。