天天看點

阿裡内貿團隊靈活實踐(三)結對程式設計

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

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

什麼是結對程式設計

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

阿裡内貿團隊靈活實踐(三)結對程式設計

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

有利于提升項目品質,減少Bug;

有利于知識傳遞,降低學習成本;

多人熟悉同一段代碼,減少項目風險;

與别人一起工作會增加責任和紀律性等。

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

結對程式設計需要投入更多的資源;

結對雙方需同時注意力集中,否則效率更低;

結對人員能力要求相适,否則起不到觀察者的作用,甚至産生依賴;

不成功的配對,經常引發争吵,産生内耗,導緻團隊不和諧等。

結對程式設計是頗具争議的靈活實踐之一,除上述一些優缺點外,可能大家還有更多不同的看法,但分析利弊不是本文所要讨論的重點。

實踐經驗

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

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

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

阿裡内貿團隊靈活實踐(三)結對程式設計

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

提升項目品質。結對開發人員在需求了解、設計思路上進行了充分的溝通和讨論,能盡早地發現和解決問題,避免前期因需求了解偏差、設計缺陷問題造成返工。

知識傳遞。對于新員工或經驗略遜的開發人員,通過經常性的溝通和讨論,能迅速地進入角色和積累經驗,發揮了傳幫帶的作用。

backup,規避項目風險。結對人員之間互為backup,有利于團隊成員之間熟悉業務代碼,若有人員異動時有利于項目風險控制。

阿裡内貿團隊靈活實踐(三)結對程式設計

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

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

阿裡内貿團隊靈活實踐(三)結對程式設計

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

繼續閱讀