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