摘 要:目前萬眾創(chuàng)業(yè),互聯(lián)網(wǎng)創(chuàng)業(yè)團(tuán)隊(duì)在項(xiàng)目開發(fā)中需要采用正確的軟件開發(fā)模型,這里介紹Scrum敏捷開發(fā),快速響應(yīng)軟件開發(fā)中的需求變化,把復(fù)雜的開發(fā)任務(wù),分解為很多小的開發(fā)迭代,每個(gè)迭代都產(chǎn)生一個(gè)可交付的軟件產(chǎn)品,打造高效的開發(fā)團(tuán)隊(duì)。
【關(guān)鍵詞】Scrum 敏捷開發(fā) 在線教育 Agile Development Scrum開發(fā)流程
1 什么是敏捷開發(fā)
1.1 敏捷開發(fā)
敏捷開發(fā)(Agile Development)是一種以人為核心、迭代、循序漸進(jìn)的開發(fā)方法。它是一種軟件開發(fā)的流程,指導(dǎo)我們用規(guī)定的環(huán)節(jié)一步一步完成項(xiàng)目的開發(fā),主要驅(qū)動(dòng)核心是人,采用的是迭代式開發(fā)。
1.2 為什么說是以人為核心
瀑布開發(fā)模型以文檔為驅(qū)動(dòng),整個(gè)開發(fā)過程中,要寫大量的文檔,需求文檔寫出來后,開發(fā)人員根據(jù)文檔進(jìn)行開發(fā),一切以文檔為依據(jù)。而敏捷開發(fā)只寫有必要的文檔或盡量少寫文檔,注重的是人與人之間,面對(duì)面的交流,強(qiáng)調(diào)以人為核心。
1.3 什么是迭代
迭代把一個(gè)復(fù)雜且開發(fā)周期很長的開發(fā)任務(wù),分解為很多小周期可完成的任務(wù),一個(gè)周期就是一次迭代,每次迭代都可開發(fā)出一個(gè)可以交付的軟件產(chǎn)品。
1.4 敏捷開發(fā)的4句宣言
(1)個(gè)體與交互勝過過程與工具;
(2)可以工作的軟件勝過面面俱到的文擋;
(3)客戶協(xié)作勝過合同談判;
(4)響應(yīng)變化勝過遵循計(jì)劃。
2 什么是Scrum
Scrum (英式橄欖球爭球隊(duì))軟件開發(fā)模型是敏捷開發(fā)的一種,取名為Scrum,可想象開發(fā)團(tuán)隊(duì)在開發(fā)一個(gè)項(xiàng)目時(shí),大家像打橄欖球一樣迅速、富有戰(zhàn)斗激情、人人你爭我搶地完成,你一定會(huì)感到非常興奮。
Scrum就是這樣的一個(gè)開發(fā)流程,運(yùn)用該流程,你能看到你團(tuán)隊(duì)高效的工作。
Scrum的基本假設(shè)是:
開發(fā)軟件就像開發(fā)新產(chǎn)品,無法一開始就定義軟件產(chǎn)品最終的規(guī)程,過程中需要研發(fā)、創(chuàng)意、嘗試錯(cuò)誤,沒有一種固定的流程可以保證專案成功。Scrum 將軟件開發(fā)團(tuán)隊(duì)比擬成橄欖球隊(duì),有明確的最高目標(biāo),熟悉開發(fā)流程中所需具備的最佳典范與技術(shù),具有高度自主權(quán),緊密溝通合作,解決各種挑戰(zhàn),確保每天、每個(gè)階段都朝向目標(biāo)有明確的推進(jìn)。
Scrum 開發(fā)流程通常以 30 天為一個(gè)階段,由客戶提供新產(chǎn)品的需求規(guī)格開始,開發(fā)團(tuán)隊(duì)與客戶于每一個(gè)階段開始時(shí)挑選該完成的規(guī)格部分,開發(fā)團(tuán)隊(duì)必須盡力于 30 天后交付成果,團(tuán)隊(duì)每天用 15 分鐘開會(huì)檢查每個(gè)成員的進(jìn)度與計(jì)劃,了解所遭遇的困難并設(shè)法排除。
3 Scrum較傳統(tǒng)開發(fā)模型的優(yōu)點(diǎn)
Scrum模型的一個(gè)顯著特點(diǎn)就是能盡快響應(yīng)變化,而傳統(tǒng)的軟件開發(fā)模型(瀑布模型、螺旋模型或迭代模型),隨著系統(tǒng)因素(內(nèi)部和外部因素)的復(fù)雜度增加,項(xiàng)目成功的可能性就迅速降低。
有關(guān)Scrum的幾個(gè)名詞
(1)product backlog: 可以預(yù)知的所有任務(wù),包括功能性的和非功能性的所有任務(wù)。
(2)sprint:一次跌代開發(fā)的時(shí)間周期,一般最多以30天為一個(gè)周期.在這段時(shí)間內(nèi),開發(fā)團(tuán)隊(duì)需要完成一個(gè)制定的backlog,并且最終成果是一個(gè)增量的,可以交付的產(chǎn)品。
(3)sprint backlog:一個(gè)sprint周期內(nèi)所需要完成的任務(wù)。
(4)product owner: 產(chǎn)品負(fù)責(zé)人,主要負(fù)責(zé)確定產(chǎn)品的功能和達(dá)到要求的標(biāo)準(zhǔn),指定軟件的發(fā)布日期和交付的內(nèi)容,同時(shí)有權(quán)力接受或拒絕開發(fā)團(tuán)隊(duì)的工作成果
(5)scrum master: 流程管理員,負(fù)責(zé)監(jiān)督整個(gè)Scrum進(jìn)程,修訂計(jì)劃的一個(gè)團(tuán)隊(duì)成員。
(6)scrum team: 開發(fā)團(tuán)隊(duì),主要負(fù)責(zé)軟件產(chǎn)品在Scrum規(guī)定流程下進(jìn)行開發(fā)工作,人數(shù)控制在5~10人左右,每個(gè)成員可能負(fù)責(zé)不同的技術(shù)方面,但要求每成員必須有很強(qiáng)的自我管理能力,同時(shí)具有一定的表達(dá)能力;成員可以采用任何工作方式,只要能達(dá)到Sprint的目標(biāo)。
(7)time-box: 一個(gè)用于開會(huì)時(shí)間段。比如每個(gè)daily scrum meeting(每日站立會(huì)議) 的time-box為15分鐘。
(8)sprint planning meeting: 在啟動(dòng)每個(gè)sprint前召開。一般為一天時(shí)間(8小時(shí))。該會(huì)議需要制定的任務(wù)是:產(chǎn)品Owner和團(tuán)隊(duì)成員將backlog分解成小的功能模塊, 決定在即將進(jìn)行的sprint里需要完成多少小功能模塊,確定好這個(gè)Product Backlog的任務(wù)優(yōu)先級(jí)。另外,該會(huì)議還需詳細(xì)地討論如何能夠按照需求完成這些小功能模塊。制定的這些模塊的工作量以小時(shí)計(jì)算。
(9)Daily Scrum meeting:開發(fā)團(tuán)隊(duì)成員召開,一般為15分鐘。每個(gè)開發(fā)成員需要向ScrumMaster匯報(bào)三個(gè)項(xiàng)目:今天完成了什么?是否遇到了障礙?即將要做什么?通過該會(huì)議,團(tuán)隊(duì)成員可以相互了解項(xiàng)目進(jìn)度。
(10)Sprint review meeting:在每個(gè)Sprint結(jié)束后,這個(gè)Team將這個(gè)Sprint的工作成果演示給Product Owner,客戶,老板和其他相關(guān)的人員。一般該會(huì)議為4小時(shí)。
(11) Sprint retrospective meeting:對(duì)剛結(jié)束的Sprint進(jìn)行總結(jié)。會(huì)議的參與人員為團(tuán)隊(duì)開發(fā)的內(nèi)部人員。一般該會(huì)議為3小時(shí)。
(12) Scrum開發(fā)流程中的三大角色: 產(chǎn)品負(fù)責(zé)人Product Owner;流程管理員Scrum Master;開發(fā)團(tuán)隊(duì)Scrum Team。
5 如何進(jìn)行Scrum開發(fā)
(1)首先確定一個(gè)Product Backlog(按優(yōu)先順序排列的一個(gè)產(chǎn)品需求列表),這個(gè)是Product Owner負(fù)責(zé)的。
(2)Scrum Team根據(jù)Product Backlog列表,做工作量的預(yù)估和安排。
(3)有了Product Backlog列表,通過 Sprint Planning Meeting(Sprint計(jì)劃會(huì)議)從中挑選出一個(gè)Story作為本次迭代完成的目標(biāo),這個(gè)目標(biāo)的時(shí)間周期是1~4個(gè)星期,然后把這個(gè)Story進(jìn)行細(xì)化,形成一個(gè)Sprint Backlog。
(4) Sprint Backlog是由Scrum Team去完成的,Sprint Backlog是按照目前的人力物力條件可以完成的。每個(gè)成員根據(jù)Sprint Backlog再細(xì)化成更小的任務(wù)(工作量在2天內(nèi)能完成)。
(5)在Scrum Team完成計(jì)劃會(huì)議上選出的Sprint Backlog過程中,需要進(jìn)行 Daily Scrum Meeting(每日站立會(huì)議),每次會(huì)議控制在15分鐘左右,每個(gè)人都必須發(fā)言,并且要向所有成員當(dāng)面匯報(bào)你昨天完成了什么,并且向所有成員承諾你今天要完成什么,同時(shí)遇到不能解決的問題也可以提出,每個(gè)人回答完成后,要走到黑板前更新自己的 Sprint burn down(Sprint燃盡圖)。
(6)做到每日集成,也就是每天都要有一個(gè)可以成功編譯、并且可以演示的版本
當(dāng)一個(gè)Story完成,也就是Sprint Backlog被完成,表示一次Sprint完成,這時(shí),我們進(jìn)行 Sprint Review Meeting(演示會(huì)議),也稱為評(píng)審會(huì)議,產(chǎn)品負(fù)責(zé)人和客戶都要參加,每一個(gè)Scrum Team的成員都要向他們演示自己完成的軟件產(chǎn)品。
(7)最后就是Sprint Retrospective Meeting(回顧會(huì)議),也稱為總結(jié)會(huì)議,以輪流發(fā)言方式進(jìn)行,每個(gè)人都要發(fā)言,總結(jié)并討論改進(jìn)的地方,放入下一輪Sprint的產(chǎn)品需求中,這樣周而復(fù)始,按照同樣的步驟進(jìn)行下一次Sprint。
6 Scrum開發(fā)流程中的一些場景
6.1 Product Backlog 產(chǎn)品需求
Product Backlog 是Scrum的核心,也是一切的起源。從根本上說,它就是一個(gè)需求、或故事、或特性等組成的列表,按照重要性的級(jí)別進(jìn)行了排序,它里面包含的是客戶想要的東西,并用客戶的術(shù)語加以描述。
6.2 Daily Scrum Meeting每日站立會(huì)議
每日的站立會(huì)議,參會(huì)人員可以隨意姿勢(shì)站立,任務(wù)看板要保證讓每個(gè)人看到,當(dāng)每個(gè)人發(fā)言完后,要走到任務(wù)版前更新自己的燃盡圖,時(shí)間控制在15分鐘。
6.3 Task Kanban Board任務(wù)看板
每個(gè)人的工作進(jìn)度和完成情況都是公開的,如果有一個(gè)人的工作任務(wù)在某一個(gè)位置放了好幾天,大家都能發(fā)現(xiàn)他的工作進(jìn)度出現(xiàn)了什么問題(成員人數(shù)最好是5~7個(gè),這樣每人可以使用一種專用顏色的標(biāo)簽紙,一眼就可以從任務(wù)版看出誰的工作進(jìn)度快,誰的工作進(jìn)度慢)。
6.4 Plan Card 計(jì)劃令牌
計(jì)劃紙牌的作用是防止項(xiàng)目在開發(fā)過程中,被某些人所領(lǐng)導(dǎo)。
怎么用的呢?比如A程序員開發(fā)一個(gè)功能,需要8個(gè)小時(shí),B程序員認(rèn)為只需要1小時(shí),那他們各自取相應(yīng)的牌,藏在手中,最后攤牌,如果時(shí)間差距很大,那么A和B就可以討論A為什么要8個(gè)小時(shí)... 最終評(píng)估一個(gè)更合理的時(shí)間。
7 Scrum開發(fā)過程注意事項(xiàng)
(1)產(chǎn)品負(fù)責(zé)人應(yīng)當(dāng)理解每個(gè)故事的含義(通常需求都是由他來編寫的,但是有的時(shí)候其他人也會(huì)添加一些請(qǐng)求,產(chǎn)品負(fù)責(zé)人對(duì)它們劃分先后次序)。他不需要知道每個(gè)需求具體是如何實(shí)現(xiàn)的,但是他要知道為什么這個(gè)需求會(huì)在這里。
Sprint計(jì)劃會(huì)議非常關(guān)鍵,是Scrum中最重要的活動(dòng)。舉辦Sprint計(jì)劃會(huì)議,是為了讓團(tuán)隊(duì)獲得足夠的信息,能夠在幾個(gè)星期內(nèi)不受干擾的工作,也是為了讓產(chǎn)品負(fù)責(zé)人能對(duì)此有充分的信心。
Sprint計(jì)劃會(huì)議成果:Sprint目標(biāo);團(tuán)隊(duì)成員名單(以及他們的投入程度,如果不是100%的話;Sprint backlog(即Sprint中包括的需求列表;確定好sprint演示日期;確定好時(shí)間地點(diǎn),供舉行每日scrum會(huì)議。
整個(gè)團(tuán)隊(duì)和產(chǎn)品負(fù)責(zé)人都必須參加sprint計(jì)劃會(huì)議。原因在于,每個(gè)需求都含有三個(gè)變量,它們兩兩之間都對(duì)彼此有著強(qiáng)烈依賴。
(2)范圍(Scope)和重要性(Importance)由產(chǎn)品負(fù)責(zé)人設(shè)置。估算(estimate)由團(tuán)隊(duì)設(shè)置。在sprint計(jì)劃會(huì)議上,經(jīng)過團(tuán)隊(duì)和產(chǎn)品負(fù)責(zé)人面對(duì)面的對(duì)話,這三個(gè)變量會(huì)逐步得到調(diào)整優(yōu)化。會(huì)議啟動(dòng)后,產(chǎn)品負(fù)責(zé)人一般會(huì)先概況一下希望在這個(gè)sprint中達(dá)成的目標(biāo),還有他認(rèn)為最重要的故事,接下來,團(tuán)隊(duì)從最重要的故事開始逐一討論每個(gè)故事,估算開發(fā)時(shí)間。
質(zhì)量分為內(nèi)部質(zhì)量和外部質(zhì)量:外部質(zhì)量是系統(tǒng)用戶可以感知的。運(yùn)行緩慢、讓人迷糊的用戶界面就屬于外部質(zhì)量低劣;內(nèi)部質(zhì)量指用戶看不到的要素,它們對(duì)系統(tǒng)的可維護(hù)性有深遠(yuǎn)影響。可維護(hù)性包括系統(tǒng)設(shè)計(jì)的一致性、測(cè)試覆蓋率、代碼可讀性和重構(gòu)等。
目前我負(fù)責(zé)開發(fā)的波士頓善恩教育在線學(xué)習(xí)系統(tǒng)(www.bstcine.com)中就采用了Scrum敏捷開發(fā),每日安排任務(wù),寫在白板上,每日早會(huì)15分鐘團(tuán)隊(duì)成員一起領(lǐng)任務(wù),估算開發(fā)時(shí)間。下班前花15分鐘開發(fā)團(tuán)隊(duì)一起過一遍今天的任務(wù)完成進(jìn)度,碰到的問題,任務(wù)完成快的團(tuán)隊(duì)成員從Sprint Backlog中領(lǐng)取待開發(fā)的任務(wù),每周一次例會(huì),兩周一次Sprint Review,開發(fā)效率不錯(cuò)。
參考文獻(xiàn)
[1]廖靖斌,呂梁岳,陳爭云,陽陸育等譯.Scrum敏捷軟件開發(fā)[M].北京:清華大學(xué)出版社,2010.
作者簡介
王萬意(1981-),男,江西省永豐縣人?,F(xiàn)為東華大學(xué)軟件工程碩士在讀。波士頓善恩教育技術(shù)總監(jiān)。研究方向?yàn)榇笮拖到y(tǒng)軟件架構(gòu)。
作者單位
東華大學(xué) 上海市 201620