Scrum與Scrum+XP論戰之我見

近日,國外的敏捷社區熱鬧非常,關於Scrum與Scrum+XP之爭的討論更是甚囂塵上。大家不但在Yahoo敏捷討論小組進行了激烈的辯論,戰火也燃燒到了多位專家的博客上。對此專題,InfoQ曾進行了連續報道:《[url=http://www.infoq.com/cn/news/2008/11/decline-of-agile]James Shore:敏捷的衰落[/url]》、《[url=http://www.infoq.com/cn/news/2009/02/whole-enchilada-and-context]採用敏捷需要面面俱到[/url]》、《[url=http://www.infoq.com/cn/news/2009/02/decline-of-agilist]敏捷專家的衰落——實施敏捷必須面面俱到?[/url]》。
從這場著名的論戰看來,國外採用敏捷的公司不但衆多,而且越來越多,而且最常用的一種方式就是從Scrum做起[1]。爲什麼先用Scrum呢?因爲Scrum主要是管理的實踐。對組織裏的領導來說,管理是其基礎,改善的管理實踐對他們是最能看得見、摸得着的,也最容易被他們接受。那麼採用了Scrum之後的組織,是否真正敏捷了呢?是否達到實施敏捷的目的了嗎?
Jame Shore認爲,許多組織採用了Scrum,但是情況變得更糟:“So, unfortunately, a lot of self-described Agile projects are going to fail.”[2]。
然而Jurgen聲稱,他們的公司只用了Scrum,也相當成功:“Today all our project managers agreed that the introduction of Scrum has increased the success of our projects. ”[3]。

其實單獨採用Scrum能否成功這纔是這場論戰的焦點之爭。如果是實踐是檢驗真理的唯一標準,暫且認爲他們二人所述屬實,則Shore的數據來自更多的公司,明顯佔了上風。而Jurgen僅從自己公司入手,在隨後的辯論過程中,更讓人疑竇叢生,比如Jonathon Golden就認爲Jurgen一定有什麼事兒瞞着我們:“There is clearly something he's not telling us.”

其實組織採用敏捷,目的無非體驗是敏捷帶來的好處:改善軟件質量,提高軟件交付的成功率。那麼敏捷怎樣達到這一點呢?單獨採用Scrum爲什麼不夠呢,Ron Jeffies給出了Scrum必須使用重構這個XP實踐的理由,相當精彩[4]:
[quote]如果你真的要用Scrum,那麼:
* 你必須從第一個Sprint起開始交付軟件;
* 你必須在隨後的每一個Sprint中交付軟件;
* 如果你在第一個Sprint裏交付軟件,那麼當時所作出的設計就會比較脆弱,因爲你沒時間把一切都弄好。
* 因爲這樣一個設計沒法從頭到尾承載起項目,你就不得不改進設計;
改善既有代碼的設計,即爲重構之名。你必須做重構...[/quote]

可見即使只採用Scrum的組織,重構也是很有必要的。既然已經採用Scrum了,不妨也採用重構吧。看看另一個實踐TDD:
測試驅動開發與傳統先寫代碼後補測試相比,更能保證代碼有對應的測試覆蓋。這樣重構之後,通過運行單元測試可以保證重構不會引入新的bug。這也是爲什麼TDD把重構納入它的一個步驟的原因。當然除此之外,TDD還有很多其它好處。所以既然重構了,爲什麼不採用TDD呢?
那麼結對編程呢?很多嘗試過結對編程的人說,2個人一塊幹活確實不如分別幹活快;當然也有人得出類似結論,結對編程在某些情況下合適,在其它一些情況下不合適。但是看看結對編程給代碼帶來的質量的提高吧;看看頻繁交流對組員帶來的技術上的提高;看看交換結對後每個人都能熟悉每個模塊,是怎樣降低了人員流失帶來的風險,等等諸多好處。對這些我想首先是毋庸置疑的。其次結對編程真的會使生產效率下降嗎?以前有數據說編程人員的最高最低效率相差能夠達到20倍,你的項目中會全部都是效率很高的牛人嗎?他們一天8小時會一直效率很高嗎?數據說明編程人員一天高效率的時間只有2-3個小時。而有了結對編程之後,Marko Majkic在Yahoo Scrum討論小組中《[url=http://groups.yahoo.com/group/scrumdevelopment/message/35585]Rotten apple in Scrum team[/url]》中說道,某人的產出是其他人的一半:”Average contribution per developer is 38 usp (user story points). One of the members makes only 19 usp - twice less than the others.“所以最高最高效率的差別大大縮小了,可能只有2倍左右。同時也有數據表明結對編程後程序員的高效時間能夠延長到4-5個小時。
如果以整個項目週期內每個程序員每日所做的工作量來看,結對編程的效率不但不會低,反倒很可能會高。何況代碼有了更高的質量。所以,爲什麼不採用結對編程呢?
關於其它XP實踐,我想都有類似的理由。雖然表面看來不採用某些實踐,對你的項目影響不大,但實際上它們在各個方面扮演着重要的角色,是敏捷戰車上的重要組件。因此,把它們作爲一個整體,你會發現項目大有不同。

目前國內敏捷社區對此討論甚少,平靜如一灘死水。其中原因,想必主要是國內實施敏捷的公司太少。你的項目是否採用敏捷了?是否只實施了Scrum的實踐呢?如果覺得哪裏不太對勁,項目仍在苦苦掙扎的話,XP很可能就是你的答案。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章