1. 程式人生 > >Scrum敏捷開發簡介

Scrum敏捷開發簡介

       Scrum是一種靈活的敏捷軟體開發管理過程。這個名詞來源於英式橄欖球。Scrum方法由Ken Schwaber和 Jeff Sutherland 提出,它將軟體開發團隊比作橄欖球隊,全隊有明確的最高目標:釋出產品的重要性高於一切。團隊高度自治,隊員們熟悉開發過程中涉及到的各種技術,緊密合作,確保每個迭代都朝著最高目標推進。而且每隔2至6周,每個人都能看到能實際工作的軟體,並且據此決定是釋出這個版本還是繼續開發以加強它的功能。

       對於功能需求可能經常發生變化的專案來說,Scrum是它們最為理想的選擇之一。在一個採用Scrum的專案中,首先要將所有需要完成的工作列在一個產品待開發項(Product Backlog)中,專案開發過程中需求的改變也要寫進去。在每個迭代(Sprint)開始之前,要開一個迭代計劃會議(Sprint Planning Meetting)。在會上,產品責任人(Product Owner)為 Product Backlog中的各功能需求確定優先順序(或者是在會前完成),隨後Scrum開發團隊按照優先順序,從Product Backlog中挑選出他們認為能在本次迭代中完成的任務,把它們從Product Backlog中挪到Sprint Backlog中來。在Sprint進行過程中,Scrum團隊每一天都要舉行一個簡短的每日立會(Daily Stand-up Meeting),以便團隊成員瞭解開發進度。Sprint結束之後,需要開評審會(Review Meeting)和反思會(Restrospective Meeting)。開發團隊在評審會

上把這個Sprint的開發成果展示給大家看;而在反思會上,團隊成員們會回顧過去的這個Sprint,從中總結經驗和教訓。



       那麼什麼是Product Backlog?什麼是Sprint Backlog?

       產品待開發項(Product Backlog):根據初始需求分解出的任務列表,包括功能性的和非功能性的所有功能; 由Product Owner為Product Backlog中的任務確定優先級別;當開發團隊開始做某個任務的時候,再精確定義和分解這個任務。

       Product Backlog是產品所要具備的所有功能的總綱。當一個專案剛剛開始時,沒人能夠事先預見到所有的任務和需求,併為之做一個充分、詳細而又包羅永珍的計劃。可行的方式是,先為一個專案寫下所有它應該具備的顯著特徵和功能,數量不必很多,最好夠讓團隊的第一個Sprint有活可幹。隨著Sprint的進行,生產出可釋出的產品增量,客戶對產品的直觀認識也隨之加深,他們可以據此建議更改或者新增產品Backlog中的任務。

       在Sprint計劃會議上,產品負責人人為產品Backlog中的任務確定優先順序,並向Scrum團隊描述這些任務。Scrum團隊隨後根據團隊整體情況,確定他們能在這個即將到來的Sprint中完成哪些功能,並把它們挪到Sprint Backlog中去。

       迭代計劃會(Sprint Planning Meeting) :在每個Sprint開始之前,需要召開Sprint計劃會議,一般為4至8個小時。參加人員有產品責任人、Scrum Master、Scrum團隊和其他感興趣的人,比如管理層人員和客戶代表。Product Owner從產品Backlog中挑選優先度高的任務,並與Scrum團隊一起決定在這個Sprint中需要完成多少功能;Scrum團隊將這些任務分解成小的功能模組; Scrum團隊成員詳細討論如何能按需求完成這些功能模組,並估計完成每個功能模組所需的大概時間。

       每日立會(Daily Stand-up Meeting):既團隊每日例會,條件允許的話,每天都應該在同樣的時間和地點,所有成員站立著舉行。由於是站立的狀態開會,因此時間比較短,一般為15分鐘左右。這個會議最好是在每天的早晨開,有利於團隊成員們安排好當天的工作計劃。只有團隊成員可以在每日Scrum會議上發言,其他人員如果對專案進度有興趣也可以參加,但只能旁聽而不能發言。

       會議由Scrum Master主持,Scrum團隊的所有成員輪流回答上圖中的三個問題,即:

    1. 昨天我完成了什麼工作;
    2. 今天我打算做什麼;
    3. 我遇到了什麼障礙。
      通過這三個問題,團隊成員之間可以彼此相互熟悉工作內容,充分了解專案進度,相互幫助解決問題。Scrum Master除了傾聽團隊成員的發言外,他還有責任設法解決團隊成員在會上提出的困難,儘快掃除阻礙他們工作的障礙。即使有的問題Scrum Master沒有能力解決,例如某些技術細節問題等,他也應該找到團隊中或其他團隊的來幫助快速的解決問題。另外,還有兩點需要注意的地方:其一,這是團隊成員之間的交流,也是相互的承諾,並不是用來向老闆彙報工作進度的;其二,這也不是一個專門用於解決各種問題的會議,成員們遇到的問題可以在會上提出來,而有能力解決這些問題的人可以在會後幫助他們解決問題。

       Sprint評審會(Review Meeting):Sprint結束時召開;由開發團隊展示這個Sprint中完成的功能;長度為兩個小時左右;不需要PPT;一般是已完成的功能的Demo; 誰都可以參加:客戶、管理層、Product Owner、其他開發人員等等。
       在每個Sprint結束時,應該組織一個Sprint評審會議。Scrum開發團隊將在會上展示他們在這個Sprint中所做的工作。一般採用向大家演示產品新功能的方式來展示。
       相對來說,Sprint評審會議不必很正式。通常不需要用到PPT幻燈片,而且長度最好控制在兩個小時之內。也就是說,不要讓Sprint評審會議成為Scrum團隊的負擔,他們不必花太多時間來準備這個會議。
       Sprint評審會議的參與者,可以包括所有對該產品感興趣的人:產品責任人,Scrum團隊,利益相關者,管理層人員,客戶,甚至來自其他專案的開發人員等等。

       在Sprint評審會議上,Scrum團隊用Demo的形式展示產品的新功能之後,與會人員依據在Sprint計劃會議上確定的本Sprint的目標來評審具備了這些新功能的產品。

       為什麼一定要用Demo的形式來展示產品的新功能呢?因為這種方式有很多好處:
       首先,參與會議的人都能直觀的看到Scrum團隊的工作成果;其次,利益相關者們可以據此提出更切合實際的反饋意見;第三,為了完成Demo,團隊會努力完成併發布那些功能,即使只是釋出在測試環境下,也比沒完成的好。如果不做Demo,也許不少功能會停留在“已完成99%”的階段。相比較起來,在有Demo的情況下,也許“已完成”的功能數量會相對少一些,但它們是確確實實完成了的,否則,那些“99%”的貌似完成的功能勢必還要拖到下個Sprint來解決。
       假如有一個剛從傳統的開發模式轉而採用Scrum的團隊,由於不習慣這種自我約束、自組織的方式,在Sprint中並沒做多少工作,那麼在會上演示的時候,他們會覺得很尷尬。沒準老闆看到他們花了這麼多時間只做了這麼少的工作而感到很生氣。發生這種情況當然是大家都不想看到的,但良藥苦口,在下一個Sprint中,這個團隊肯定會吸取教訓,他們會明白無論什麼情況下都必須Demo,那麼他們必然會很好的完成這個Sprint並演示給大家看。