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