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