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