Monday, March 30, 2009

Scrum

前一陣子在網路上讀到一些關於Agile Software Development的文章, 其中尤其以Scrum最引起我的興趣. 主要的原因是他的觀念跟我之前一直以來的開發作法有很多相似的地方, 只是我一直沒有系統性的把把過去的經驗作有系統的歸納整理, 只是很隨興的照著自己覺得比較快樂的開發方式下去開發引擎, 也不知道有Scrum這東西. 所以我就去買了一本Agile Software Development with Scrum來看, 這本書寫的不錯, 頁數不多, 而且很多作者過去的經驗來加以佐證, 我比較喜歡這種不講太多理論, 專注於實務經驗的書.

基本上Scrum的觀念就是軟體的需求是一直在變的, 所以一般擬定設計之後就不能再改變設計的作法其實很不實際. Scrum的觀念是每一個開發專案有一個所謂的Project backlog, 這個backlog紀錄了所有這個project要完成的功能, 重點是這個backlog是永遠沒有截止日期的, 想要的新功能隨時都可以再加進去, 但專案負責人得為backlog中的每個項目加上優先權. 接下來的開發就是以所謂的sprint一直循環, 每個sprint以不超過30天為最好, 開發成員從backlog中選出可以在這個sprint中完成的項目作為sprint的目標, 每個sprint結束時, 整個專案就會增加一些新的功能. 由於在每個sprint期間, 開發成員只需專注於所挑選的功能上, 所以可以有效提高生產力. 而每個sprint完成時又可以立刻看到專案的成長, 有助於維持團隊的士氣. 如此不斷的循環, 一直推出新的build.

一個人開發引擎其實是頗為無聊的工作, 所以我之前總是以一個短期能達到的目標為單位來開發, 如此一來每隔一段時間就有一些東西出來, 比較會有成就感, 也裁不容易厭倦. 年輕的時候很能熬夜, 常常一個sprint都是以一天來計算的:). 現在體力比較差了, 引擎也更複雜了, 沒辦法這樣搞了. 之前每次引擎po出來的影片其實就是幾個較大的sprint的結果. 不過以前backlog只放在腦袋裡, 現在我打算將backlog在網站上po出來, 以免久了就忘了 :P

現在正在尋找有無好用的scrum工具可以有效的來管理backlog跟每一個sprint.

Scrum

Agile software development

Agile Game Development

Scrum Alliance


順便一提, Unreal Engine也是採用Scrum的方式來開發的喔.

10 comments:

Milo said...

家裡做的引擎也算是用 Agile 的方式,但沒有定 Sprint、沒有做 Poker Planning。主要是寫 Story 和調整 Priority。

最近覺得,這種做法在家裡做有一個缺點(或是我的問題吧)。就是每個 story 通常都是從使用者角度所看到的功能,每次都可能做系統的底層到面層都作修改去完成一個 story。比以往主用 bottom-up 來說,每次做 story 的「熱身」時間會比較長。例如以前可能先分別做好 module A、B,再做上層的C。現在一個 story 要同時改多個 modules。而且因為工餘間斷去做,常常覺得花許多時間只有少許進展。

不過,好處或許是項目更以使用者為中心,而且比較功能會比較靈活。

之前寫了一篇關於 Agile 的,可互相交流一下。

http://miloyip.seezone.net/?p=72

Milo said...

呀,忘了說,我現在用 Google Doc 的 Spreadsheet 做 backlog。因為可以 online collaboration 和 versioning。

半路 said...

原來 Unreal Engine 也是用 Scrum 方法開發的呀! O_O

之前在網路上看了不少相關的文章,看來應該去找 Agile Software Development with Scrum 這本書來讀一讀了。

感謝分享~ :D

MiNg said...

在我的公司中是使用了一個名為 "Sprintometer" 的免費軟件。它具有一般 SCRUM 需要的功能,而且很容易上手。

希望對閣下有用。

gino said...

我們目前也是有導入scrum, product backlog是用excel檔案整理
sprint的週期是三週, 我們主要是使用白板和便利貼來紀錄sprint工作狀況..
還有畫burndown圖...老實說..雖然這個做法感覺很不e化, 但是反而對於工作進度更一目了然...另外我們也會用wiki把每次sprint工作項目做紀錄

在軟體方面, 之前同事有使用過Scrumworks, 可以參考看看

fallingCAT said...

to Milo :
我也還是Scrum的初學者, 所以野是在摸索中. 不過我以前的作法就不是bottom-up, 比如說我要一個基礎類別A及B來完成我目前sprint中的C類別, 通常我只會將C要用到的A和B的功能在這個sprint完成, 等到有其他sprint需要A和B的額外功能時, 我再繼續來完成其他A和B的功能. 所以對我來說採用Scrum並沒有太多不適應.我認為類別並不能成為backlog中的ㄧ個項目, 只有功能才能成為項目, 因為單一類別跟專案一樣是沒有玩全完成的一天的, 隨著專案的演化進展, 類別也會跟著增強, 修改或甚至移除抽換.

to Gino and MiNg :
你們建議的工具我會去了解看看, 謝啦 :)

另外這裏有個以前是High Moon Studio的程式現在轉作Scrum Tainer的程式的網站, 有一些使用Scrum在遊戲開發上的心得
http://www.agilegamedevelopment.com/

而Scrum Alliance也提供了不少訓練, 讓你可以成為合格的Scrum Master或是Tainer, 看了一下課程, 台灣都沒有.....Orz
http://www.scrumalliance.org/

Kermit said...
This comment has been removed by the author.
kermit said...

http://www.targetprocess.com/

Anonymous said...

小弟對agile和testing有些研究, 像是
Scrum
agile testing
performance testing
exploratory testing
歡迎同好一起交流研究

http://www.wretch.cc/blog/kojenchieh

Anonymous said...

我們公司針對Scrum的流程在codeBeamer上開發了一套Wiki pugin叫ScrumWizard, codeBeamer+ScrumWizard 除了可以做ProductBacklog的管理, Sprint Plan, Kanban board等功能, 最重要是專案社群的管理, 在公司內部推導Scrum, 成立一些以Scrum導入為目標的社群是很重要的... 如果對於codeBeamer+ScrumWizard有興趣, 可以參考
http://scrum.esast.com