- 相關推薦
探索結對編程
摘要:結對編程(Pair Programming)是極限編程(Extreme Programming)的十一個實踐之一,是團隊設計的基礎。它是指兩個開發人員共用一臺,其中一個人負責具體細節,另一個人關注整體,并且這兩人的角色可以隨時交換。本文通過項目實踐,分析結對編程的優點和不足,并優化結對編程使其更具效率。結對編程的優勢在于:改進設計質量、減少程序缺陷、降低人員風險、提高技術技能和團隊合作精神。
關鍵詞:結對編程;極限編程;代碼
Explore Pair Programming
HOU Hai-ke, YE Jing-lou
(Liaoning Technical University, Electronics and Information Engineering Department, Huludao 125105, China)
Abstract: Pair programming is one of the twelve Extreme Programming's efficient experiences, it means that two programmers develop software side by side at one computer. Using an experiment, analysis the Pair Programming's merit and the insufficiency, And optimal Pair Programming causes it to have the efficiency. It presents that Pair Programming can bring economic profit, improve design quality, reduce defects, decrease staffing risk, enhance technical skills, improve team communications.
Key words: Pair Programming; Extreme programming; Code
1 引言
隨著時代的發展,科技的不斷更新,特別是計算機的普及和用戶需求的不斷變化,我國軟件還處在起步階段,規模較小,傳統的軟件工程技術很難在中小軟件公司中發揮作用,然而極限編程(Extreme Programming,簡稱XP)技術的出現,使中小軟件公司的軟件開發有了新的突破。XP是一個輕量級的、靈巧的軟件開發方法,同時它也是一個非常嚴謹和周密的方法。
XP中非常重要的實踐是結對編程(Pair-Programming)。簡單地說就是兩個人坐在同一臺計算機前面,使用相同的鍵盤和鼠標來開發同樣的一個模塊,一個稱為駕駛者(Driver),負責代碼的鍵入,另外一個稱為領航員(Navigator),負責盯緊可能出現的錯誤,包括低級錯誤和方向性的錯誤。而且,當出現的一個問題對其中一個人來說,難以解決,而恰好是另外一個人的強項的時候,那么角色就會發生轉換。
2 結對編程的優點
結隊編程的價值在于,我們無法在項目的初期進行一個詳細的設計,即使完成一個設計,隨著需求的變化,設計也是需要頻繁的改動,因此與其我們花費大量的時間和精力來維護不穩定的設計文檔的一致性,不如我們簡化、延遲設計,用簡單的實現來滿足當前的需求,而依賴重構來適應需求的變化。
2.1 減少風險
風險會使大多數團隊停滯不前,減少風險的最佳方法是確保團隊中的每個人都完全熟悉系統的所有部件以及對系統的所有更改。技術講解和設計文檔很有用,但對于大多數快節奏的項目,它們并不能很好且迅速地知識。傳播知識最有效的方法是讓一個知道代碼的人與不知道代碼的人一起解決問題。
2.2 使團隊生產效率更高
當一個人在遇到疑難問題時很容易走入“死角”。而Pair則不同,一個人有了想法,首先要表達出來,讓自己的同伴理解,經過深刻的討論,一致認可之后才開始編寫代碼。一個人編寫代碼,另一個則在旁邊思考,會為下一步的工作提出建設性的意見。發現了問題可以及時的指正。大大的提高了代碼質量。
2.3 生成更好的代碼
通過讓程序員結對,確保了更多人熟悉代碼以及它經歷的更改。此外,兩個人編寫的代碼總比一個人寫的代碼好。兩個人的智慧確實勝過一個人的,對于影響整個系統的設計決策更是如此。當團隊成員結對時,至少有一個人一直在復查代碼。這是我聽說過的最好的代碼復查。
3 結對編程遇到的問題
結對確實能給工作帶來質的飛躍,但是通過結對實踐,它也會帶來一些新的問題。
3.1 由于人員的變動,來了新成員
在這種情況下,前期確實會對其搭檔產生一定的影響,但是磨刀不誤砍柴工,通過結隊編程,可以最快的使新成員進入狀態,通過后期的高效完全可以彌補前期的消極影響。
3.2 后面坐著的人跟不上寫代碼的人的思路,寫代碼的人要不斷對其講解
結隊編程不僅僅只是一起寫代碼,在寫代碼之前也需要一起對需求進行探討,一起討論設計方案,達成共識之后才再一起寫測試用例,一起編碼,一起測試。如果出現跟不上的情況,那么趕緊停下來,需要討論的時候到了。
3.3 由于每個人有不同的習慣風格,坐在后面的人不習慣寫代碼人的代碼風格
這正是XP另一個關鍵實踐的必要性:代碼規范。在采用XP方法后,要求所有成員編寫的代碼都想出自于一個人之手寫的,這樣才能使代碼本身就是設計,方便所有成員溝通維護。通過代碼規范之后,也才使XP強調的另一個關鍵實踐“代碼共同擁有”成為有效。
結對可以使兩個人精神更加集中,可擴展思路以創造更簡單,更嚴謹,更便于修改重構的代碼,所以這正應對了項目時間緊的要求。因此結對編程確實是強度非常大的一件事情,所以XP強調40小時/周的另一實踐。
4 結對編程的幾條準則
用編碼規范來支持結對編程:如果兩個人整天把時間浪費在爭論代碼風格的問題上,那么結對編程就不可能發揮它的威力。應該嘗試對風格進行標準化。
不要讓結對編程變成旁觀:不掌握鍵盤的那個人應該主動參與到編程當中,他應該分析代碼,提前思考接下來的代碼應該做些什么,對設計進行評估,并對如何測試代碼做出計劃。
有規律地對結對人員和分配的工作任務進行輪換:如同在其他的協同開發實踐一樣,結對編程的好處在于能夠讓不同的人熟悉系統的不同部分。有規律地進行輪換有助于知識的互相轉播——有些專家建議盡可能經常進行人員輪換,甚至每天進行。
鼓勵雙方跟上對方的步伐:要是其中一個人相對走得太快的話,那就會大大限制了其結對搭檔的作用。速度太快的人需要放慢步伐。否則這對組合應當被拆開,然后和其他人重新組合。
避免新手組合:兩個人當中至少一個有結對經歷時,結對編程的效果最好。
Pair Programming有很大的優勢,是獲得XP最大價值的關鍵。沒有Pair Programming,無法實現有效的Continuous Code Review,代碼質量下降;沒有Pair Programming,Communication很容易弱化,進而影響Team work。然而Pair Programming是XP所有的Practices中最被爭議和被認為是最難接受。
Pair Programming是個漸進的過程,有效率的Pair Programming不是一天就能做到的。Pair Programming是一個相互學習,相互磨合的一個漸進過程。 Developers需要時間來適應這種新的開發模式。剛開始的Pair Programming很可能不比Solo Programming有更高的效率。但適應后的Pairs的開發質量,開發時間都應該比Solo Programming有大幅度的改善。因此我們需要在不斷實踐中克服結對的一些不足,相信到最后一定能達到一個完美的結對方式。
參考文獻:
[1] 陳斐. 結對編程技術[M]. 北京:出版社,2004.
[2] Laurie Williams,Robert Kessler,等. Pair Programming Illuminated[M]. 北京:機械工業出版社,2004.
[3] William C. Wake. 探索極限編程XP系列叢書[M]. 北京:人民郵電出版社,2005.
[4] Scott W Ambler. 敏捷建模—極限編程和統一過程的有效實踐[M]. 北京:機械上業出版社,2003.
【探索結對編程】相關文章:
Visual C#的Excel編程03-19
ASP 3.0高級編程(一)03-18
LabVIEW與MATLAB混合編程03-19
DOS下DSP播音的編程03-03
ASP 3.0高級編程(二)01-07
JDBC數據庫編程的研究03-15
JTAG口及其對Flash的在線編程03-19
AVR單片機GCC編程03-18
探索鋼琴教學01-01