結對編程是軟件開發過程中所使用的一種技術,兩名程序開發人員共享同一臺工作站。其中一個扮演駕駛者(Driver)的角色,進行代碼編寫,另一個扮演觀察員(Observer)或導航員(Navigator)的角色,對代碼進行評測。他們可以輪流編寫代碼和測試案例,還可以坐在一起交流思想,解決問題。
結對編程的概念已經存在很長一段時間,已經有許多公司認同這種編程方式,但也有許多公司表示他們不考慮采用。結對編程需要花費的時間可能比個人編程更長,但產生的 bug 比個人編程少;它需要公司付出多一倍的人力,但編程的效率會比個人編程高。這是一個比較有爭議的編程方式,不同公司的需求不同,對結對編程的看法就不一樣。
說了結對編程不得不說TDD 這個開發模式。
因為這兩者結合起來還是挺有效率的,TDD是一種追求敏捷的開發模式,兩個人結對編程,一人寫測試,寫完一個測試就commit一次,一人寫這個測試的實現,實現之后再commit一次。每需要實現一個邏輯時就寫一個測試,來完成對該邏輯本身正確與否的判斷,這樣像疊積木似的一塊一塊的完成邏輯,并且測試保證了每個邏輯的正確性,就保證了代碼的有效性,不會出現推翻重來的情況,最后一個測試完成之后,還可以對代碼進行重構,進一步優化代碼,有測試的保證,就可以讓每一步重構不會影響到之前的邏輯正確性,可以放心的進行重構是行得通的。
國外有位開發者 Sam Harris 對結對編程的利弊做出了客觀的總結分析,總結如下:
結對編程的好處
1、互相鼓勵,不容易沮喪:團隊工作能增加成員的工作積極性。因為在面對問題的時候,會有人一起分擔,共同嘗試新的策略。
2、互相監督,不容易偷懶:兩個人一起工作需要互相配合,如果想偷懶去干別的,就會拖延工作進度。
3、增加兩個人的專注力
4、互相學習編程技巧,完成知識的傳遞:在編程中,相互討論,可以更快更有效地解決問題,互相請教對方,可以得到能力上的互補。
5、可以培養和訓練新人:讓資深開發者和新手一起工作,可以讓新人更快上手。
6、減少 bug:兩人互相監督工作,可以增強代碼和產品質量,并有效的減少 BUG。
結對編程的壞處
1、與合不來的人一起編程容易發生爭執,不利于團隊和諧。
2、經驗豐富的老手可能會對新手產生不滿的情緒。
3、一山不容二虎,開發者之間可能就某一問題發生分歧,產生矛盾,造成不必要的內耗。
4、開發人員可能會在工作時交談一些與工作無關的事,分散注意力,造成效率低下。