結對程式設計

来自维基百科,自由的百科全书

结对编程

結對程式設計(英語:Pair programming)是一種敏捷軟體開發的方法,兩個程式設計師在一個電腦上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作駕駛員,審查代碼的人稱作觀察員(或導航員[1]。兩個程式設計師經常互換角色。

Thumb
結對程式設計

在結對程式設計中,觀察員同時考慮工作的戰略性方向,提出改進的意見,或將來可能出現的問題以便處理。這樣使得駕駛者可以集中全部注意力在完成當前任務的「戰術」方面。觀察員當作安全網和指南。結對程式設計對開發程式有很多好處。比如增加紀律性,寫出更好的代碼等。

結對程式設計是極限編程的組成部分。

成本和收益

一些研究發現程式設計師結對工作與單獨工作相比,會寫出更短的程式,更好的設計,以及更少的缺陷。[2] 研究發現缺陷率降低15%到50%,會由於程式設計師的經驗以及任務的複雜度而不同。[3][4] 結對程式設計比單獨程式設計相比,通常會考慮更多的設計選項,達成更簡單,更易維護的設計;程式設計師們也會更早地捕捉到設計的缺陷。[5] 與一個程式設計師承擔同一個任務相比,程式設計師在結對程式設計時工作會完成的更快。結對的程式設計師經常發現當他們一同工作時解決表面上「不可能」的問題變得容易,或更加快速,或至少有可能解決。[2][6]

然而,一個2007年的元分析得出結論「結對程式設計並非一致地有利或有效的」,這是因為是否結對程式設計選擇以外的許多因素在程式設計任務的產出上起著很大的作用。[7] 元研究發現結對程式設計往往一定程度地縮短了開發時間,而且對代碼品質產生了正的邊際效益,但是結對程式設計大大增加了開發人員的工時;也就是說與單獨程式設計相比花費大大增加了。作者指出有關結對程式設計的研究遭遇了發表偏倚,有些不利於結對程式設計的研究要麼沒有開展研究,要麼沒有投稿,要麼沒有被授受發表。他們得出結論「你不可能期待又快又好又便宜。」

雖然編碼通常比一個程式設計師單獨工作更快地完成,但是整體程式編寫時間(程式設計師數目 × 花費的時間)增加了。管理者需要在工作更快的完成以及縮減測試和除錯時間和更高的編碼成本之間平衡。這些因素的相對權重在不同的專案、不同的任務之間也不同。對於那些程式設計師沒有完全理解的任務上,程式設計師期待更多的創造性、挑戰、以及高複雜度,此時使用結對程式設計最有幫助。[8] 在簡單的,程式設計師都完全了解的任務上,結對程式設計導致生產力的淨下降。[8][9]

在兩個程式設計師工作時,兩個程式設計師之間傳遞著知識。他們分享關於系統細節的知識,並且互相學習程式設計技巧。[2][10] 新的員工很快地獲得團隊的習慣,並學習到系統的細節。[11] 「混雜結對程式設計」,即每個程式設計師輪流與團隊中的所有其他程式設計師結對程式設計,而不是僅與某個程式設計師程式設計,使得系統的知識在整個團隊中傳播,減少了程式設計師離開團隊帶來的風險。[2]

結對程式設計通常會帶來紀律和時間管理的提升。程式設計師在與結對的夥伴一同工作時,不太會忘記編寫單元測試,花時間上網或處理個人電子郵件,[12] 或偷工減料。結對的夥伴「讓他們保持誠信」。[13][14] 人們更不願意打斷兩個結對程式設計的人,而單獨工作的人卻容易被打斷。[15]

其他的收益據報告包括提高士氣[16]以及在代碼正確性上更大的信心。[2]

可重複實驗

在學術圈裡,結對程式設計也是爭議的。其原因是過往學術期刊所發表的結對程式設計實驗,基本上其他學者很難讓重複實驗核對。所以很多結對程式設計實驗只有原作者才真正了解結果。可是,2013年Giri 和Soni [17] 重複了在2006年Kim Man Lui所報告的結對程式設計實驗 [18] 而實驗結果也是一致。此次重複實驗標記著結對程式設計研究的里程碑。

變體

遠端結對程式設計

遠端結對程式設計,也稱作虛擬結對程式設計分散式結對程式設計,是指兩個程式設計師不在同一地點,通過協同編輯器,共享桌面,或遠端結對程式設計的IDE外掛程式進行的結對程式設計,[19]。 遠端結程式設計引入了一些在面對面的結對程式設計中不存在的困難,例如協同運作的額外時延,更多的依賴「重量級」的任務跟蹤工具,而不是「輕量級」的索引卡片,以及沒有口頭交流導致的在類似誰「控制鍵盤」問題上的混亂和衝突[20]

許多工具,例如Eclipse有外掛程式支援遠端結對。有些團隊嘗試使用VNCRealVNC,每個程式設計師使用他們自己的電腦。[21][22][23] 也有人使用基於文字的GNU Screen的對談共享功能。蘋果公司Mac OS X包含內建的螢幕共享應用。

乒乓結對程式設計

乒乓結對程式設計中,觀察者編寫失敗的測試用例,駕駛者修改代碼以通過該用例,觀察者編寫新的單元測試用例,等等。這個迴圈持續到觀察者能不寫出失敗的測試用例為止。但是這種方法比估計的計劃要花更多的時間。[24]

參見

參考文獻

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.