閱讀932 返回首頁    go 魔獸


阿裏內貿團隊敏捷實踐(三)結對編程

本文主要從提升項目質量、促進知識傳遞及減少項目風險等角度出發,講述作者所在團隊在結對編程實踐中的一些經曆,以及如何避免或減少其所帶來的負麵影響。

你了解結對編程嗎?你嚐試過結對編程實踐嗎?也許你還未曾嚐試甚至還不曾了解,那麼我們一起來學習和了解敏捷結對編程實踐,相信對敏捷感興趣的你會有收獲。

什麼是結對編程

結對編程(Pair Programming)是一種敏捷軟件開發實踐,指兩個程序員並排坐在一台電腦前,麵對同一個顯示器,使用同一個鍵盤和鼠標一起工作。一個人輸入代碼, 而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作駕駛員,審查代碼的人稱作觀察員(或導航員), 兩個程序員定期互換角色。他們在一起完成需求分析、係統設計、編碼、單元測試、整合測試(Integration Test)、寫文檔等工作。基本上所有的開發環節都一起肩並肩地、平等地、互補地進行工作(如圖1所示)。

上麵是極限編程(eXtreme Programming,XP)對結對編程的描述,它有如下主要的優點:

  • 有利於提升項目質量,減少Bug;
  • 有利於知識傳遞,降低學習成本;
  • 多人熟悉同一段代碼,減少項目風險;
  • 與別人一起工作會增加責任和紀律性等。

盡管結對編程有諸多誘人的優點,但實行結對編程實踐的卻為數不多,其主要原因可能有:

  • 結對編程需要投入更多的資源;
  • 結對雙方需同時注意力集中,否則效率更低;
  • 結對人員能力要求相適,否則起不到觀察者的作用,甚至產生依賴;
  • 不成功的配對,經常引發爭吵,產生內耗,導致團隊不和諧等。

結對編程是頗具爭議的敏捷實踐之一,除上述一些優缺點外,可能大家還有更多不同的看法,但分析利弊不是本文所要討論的重點。

實踐經驗

就我所在的項目團隊而言,6人左右的開發團隊需要支持多個中小型獨立產品的需求開發,在繁重的業務壓力下,用戶價值的快速交付是首要的,所以想嚐試 共用一台電腦進行結對開發的實踐隻能是一種奢望。讓團隊開發人員盡可能熟悉相互間的產品代碼,提升項目開發效率以及保證良好的項目質量,是我們在項目開發 過程中需要重點解決的問題。

我們試圖通過集體Code Review和設計交流分享等活動,來提升代碼質量以及相互間業務代碼的熟悉度,但一直收效甚微。問題主要在於這種集中式活動時間較難安排,人多交流效果 不佳,性價比不高。後來,得益於公司的導師機製,在一對新人和導師身上,找到了敏捷結對的原型。由於他們的緊密合作,遇到問題及時溝通,新人在項目進度和 質量都有不錯表現,很好地融入了團隊。在後續的項目過程中,我們不斷地嚐試和優化這種結對形式,逐漸形成相對固定的工作方法。

與XP結對編程相比,敏捷結對編程最為顯著的差異是結對進行需求分析、係統設計和問題討論,但分別編碼實現,通過過程中頻繁的Review來實現結 對的效果。開發人員兩兩結對,共同認領開發任務,一起對所承擔的開發任務負責。在需求理解、設計階段雙方一起設計和討論,然後分工各自編碼實現,並通過 Code Review以確保實現與設計一致。對結對過程中發現的問題,隨時溝通和討論。由於產品業務邏輯相對不是特別複雜,所以通過這種小範圍、高效的溝通,可以 解決項目中的絕大部分問題,實現更高的開發效率並確保代碼質量。目前,在開發流程中的主要結對活動如圖2所示。

結對活動(如圖3所示)給我們帶來了哪些好處?

  • 提升項目質量。結對開發人員在需求理解、設計思路上進行了充分的溝通和討論,能盡早地發現和解決問題,避免前期因需求理解偏差、設計缺陷問題造成返工。
  • 知識傳遞。對於新員工或經驗略遜的開發人員,通過經常性的溝通和討論,能迅速地進入角色和積累經驗,發揮了傳幫帶的作用。
  • backup,規避項目風險。結對人員之間互為backup,有利於團隊成員之間熟悉業務代碼,若有人員異動時有利於項目風險控製。

無論新老結對還是強弱結對,都要盡力避免一方對另一方產生依賴,要給新人足夠的成長和鍛煉空間,讓其獨立思考和解決問題,並允許在可控範圍內嚐試失 敗,以獲取寶貴經驗得到成長。否則,團隊隻會多一個執行者,結對難以達到預想的效果。同時,一定程度的獨立活動,可以讓大家保留自己的工作習慣,而且形式 更為自由和靈活。當然,大家可能會有疑問,如何保證結對人選中資深工程師工作的正確性,因為新人和弱者很有可能無法提出想要的Review幫助。這個問題 在我們的結對中不可避免,有選擇地邀請其他資深專家Review,也許會是個不錯的解決方案,特別是對於一些重要的複雜業務邏輯。

參加結對的工程師應具備獨立思考和解決問題的能力,並且具備較好的團隊協作意識。否則,不僅不能有好的結對效果,反而會帶來一些新問題。此外,結對也不僅限在研發工程師之間,研發和測試工程師之間或同產品經理之間的結對(如圖4所示),同樣可以帶來不錯的效果。

引入敏捷實踐,貴在充分理解、結合實際,能揚長避短,且是一個適應、發展的過程,而按部就班絕對不是個好主意。有選擇地結對對我們來說也許是上策,在結對的人選、場合、結對的環節等方麵進行選擇性的實施。


文章轉自 並發編程網-ifeve.com

最後更新:2017-05-22 20:03:07

  上一篇:go  Slipped Conditions
  下一篇:go  阿裏內貿團隊敏捷實踐(二)自組織管理