摘要:結對程式設計(Pair programming)來自於極端程式設計XP(eXtreme Programming),是它的十二個最佳實踐之一。顧名思義,結對程式設計就是兩個程式設計師坐在一起,結對進行程式碼開發。
本文分享自華為雲社群《結對程式設計到底好不好》,作者: 敏捷江湖桃花島梅師姐 。
什麼是結對程式設計
結對程式設計(Pair programming)來自於極端程式設計XP(eXtreme Programming),是它的十二個最佳實踐之一。顧名思義,結對程式設計就是兩個程式設計師坐在一起,結對進行程式碼開發。在極限程式設計中,所有的軟體產品都是由兩個程式設計師並排坐在一起,在同一臺機器上共同完成的。
圖1 結對程式設計
結對程式設計的兩種形式
在採用結對程式設計實踐時,不同的團隊形式各異。有的是分工明確型,一個人負責編寫程式碼,另外一個人審查程式碼,負責程式碼的正確性和可讀性;還有一個人負責詳細設計,一個人負責程式碼實現;或者一個寫功能程式碼,一個人寫測試用例。有的是共同合作型,兩個人共同討論關於所開發功能的架構設計、編碼實現、測試方法、程式碼風格等,然後輪流做輸入和觀察的工作。
“老帶新”不屬於結對程式設計
在國內還有一種大家結對的方式是“老帶新”,一個老員工帶一個新人,這種其實不是嚴格意義上的結對程式設計,算是新人培養的一種形式。這樣結對,就會出現一言堂的現象,失去了結對本身的意義。
結對程式設計的現狀
關於結對程式設計在網上有很多聲音,相對比其他的敏捷實踐,它的爭議幾乎是最大的。根據VersionOne的14屆年度敏捷狀態報告,在組織採用的敏捷工程實踐中,結對程式設計佔受訪企業的31%,排第八位,僅次於持續部署,高於TDD,由此可見,結對程式設計還是有一席之地、可取之處的。
圖2 VersionOne的14屆年度敏捷狀態報告——組織採用的敏捷工程實踐
關於組織是否要採用結對程式設計這項實踐,主要是它到底適不適合自己的專案,符合自己公司的文化。選擇某一項實踐的時候我們要形神兼具,如果僅僅是安排兩個程式設計師坐在一起,一個寫,一個看,這只是形式上符合,而重點是要理解這項實踐它背後的理念。在結對中通常要求兩個程式設計師水平比較相近,這樣可以形成互補,引起討論。兩個人的智慧大於一個人的智慧,這是結對程式設計的基本依據,這樣就會提升產品質量,提升工作效率。下面我們一起來看一下結對程式設計的特點。
結對程式設計的特點
從專案角度,提高了產品質量
結對程式設計時,兩個人共同完成一個功能,可以避免個人的誤區存在,通常個人的想法難免有侷限性,自己看自己寫的程式碼總是覺得怎麼都對。每個人站在不同的角度能夠看到彼此的誤差。還有通過結對,程式碼至少有一個程式設計師進行了審查,這樣可以讓設計、測試和編碼更加友好,減少了缺陷,從而提高了產品質量。
另外,結對的形式也保證了一個功能至少兩個人知道,互為形成backup,不會出現一個人請假或者離職,後續無人知的情形。有的公司還會定期更換結對的人,這樣可以讓團隊的成員都能熟悉到專案的各個功能模組,形成專案集體所有和負責的氛圍,避免了一人責任制,自掃門前雪的現象,也可以讓團隊成員快速的熟悉業務。
從團隊角度,更好的實現了知識傳遞和分享,讓成員關係更融洽
不可否認,結對這種面對面的溝通交流方式,對於知識和技能的傳遞是最好的形式。同時,這種即時的溝通交流也讓同事之間關係變得融洽,相對比那種每個人一個格子間悶頭寫程式碼,更利於建立和諧的團隊氛圍。根據“喬哈里視窗(溝通視窗)”的理論,在實際工作的人際交往中,共同的開放區越多,溝通起來也就越便利,越不易產生誤會。當我們向別人擴大我們的公開象限時,就會更多的和對方建立良好的關係,結對程式設計就是很好的一種形式。
圖3 喬哈里視窗
結對程式設計其實是在結對的磨合中,慢慢的形成團隊的一個共同的價值觀和文化,這個過程是漫長的,潛移默化的,其中必然經歷分歧和統一的過程,而很多團隊在分歧中就直接停止了實踐,也就無法看到結對帶來的好處。
從個人角度,提高了個人的能力,提升了效率
在結對合作的時候,每個人不僅會從對方那裡學到新的知識和技能,還能受到對方的工作方式和處世態度的影響。尺有所短,寸有所長,每個人都有自己的優點和長處,值得被學習和尊重。當團隊中的每個人的能力提高了,其實就是整個團隊能力的提高。
工作效率上,結對程式設計讓大家更專注在工作上,個人的一些工作外的活動將不會進行。每個人都有自己要負責的任務,兩個人其實形成了一個互相監督,共同進步的小團隊,為了團隊任務的完成,兩個人都會專注在自己的任務上,這樣就提高了輸出的效率。
對結對程式設計的質疑
前面提到了對結對程式設計的爭議很大,主要有以下兩點。
管理者認為提高了人力成本
一個人可以完成的工作,變成兩個人來做,產出就降低了一半,這很顯然是一種浪費。關於說到的提高產品的質量,短時間無法看出來,所以,無容置疑的結對程式設計就被認定為一個不好的實踐。
團隊認為找到合適的結對人員很難
首先水平相差不太多的人在團隊中不多;其次結對要求兩個人的脾氣性格都能夠相投,否則很難合作;再次,有些人喜歡單打獨鬥,不善於和別人合作等等很多的原因和理由。
對於以上兩點,在這裡不做評判。敏捷開發不等於所有的敏捷實踐都要在自己的團隊落地,還是那句話:適合自己的才是最好的。