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