天天看點

在複雜的項目開發中使用結對程式設計

  在開發軟體項目時,不僅寫出相應功能的子產品很重要;確定寫出的子產品的易維護性(bug 修複,代碼重構)也同樣重要。

       主打網際網路技術和門戶網站的Perpetuum 手機公司曾開展了一個長期的軟體項目,以研制出一套基于web的内容管理軟體。Perpetuum公司的許多開發者都參與了這個項目。項目中大部分複雜的子產品都是完全靠個人開發的(非多人協作完成)。維護這些子產品(即非多人協作完成的子產品)非常困難。因為開發某一子產品的人還需要開發新的子產品或者維護另一既有子產品,這需要花費更多的時間。為了避免這種情況發生,他們決定在開發複雜子產品時試驗性地使用結對程式設計。

       結對程式設計是數種極限程式設計技術中的一種。這項技術要求兩個開發者在一台計算機上共同工作。其中一人寫代碼,另一人坐在一旁檢查搭檔的工作。前者稱為驅動者,後者稱為觀察者。觀察者在旁觀察驅動者工作,并不斷審查代碼,發現代碼中出現的錯誤。一段時間後,觀察者和驅動者交換角色。即工作一段時間後讓原來的觀察者寫代碼,執行驅動者的任務,而原來的驅動者則執行觀察者的任務。應當注意,觀察者不應隻坐在一旁看驅動者寫代碼,而應該通過思考,通過與驅動者交流不同意見積極地參與到創作代碼的過程中去。

       結對程式設計可以使公司避免隻有少數人熟悉某些子產品代碼的情況。這就是Perpetuum公司決定試驗性地使用結對程式設計的主要原因。如果一個任務是由兩個人共同完成的,那麼當其中一人離職後,團隊也能更容易彌補由此而引發的不良後果。這種好處在稍大點的,一段時間後就需要重新結對的團隊中表現得更加明顯。結對的方式也使得在團隊中分享特定項目知識成為可能。除了可以分享與項目相關的知識外,開發者也會很自然而然地分享一些空閑時間學習到的技術知識。這是因為結對的人緊密地互相配合,是以自然就會交流更多獨自開發時的學到的經驗。

       與所有極限程式設計技術一樣,結對程式設計也引起了許多非議。一些人認為以結對的方式工作會導緻時間上的浪費。尤其是在一些不要求代碼品質更高,要求盡可能快地實作所需功能的情況下。沒有研究或實驗證明結對程式設計更加有效。他們認為結對程式設計要比單獨程式設計多耗費兩倍的時間。

       如果我們單單從代碼書寫的角度看,這個結論也未為不可。但是如果我們把分析、設計,代碼書寫時耗費的時間都考慮進去與之做個比較的話,采用結對程式設計隻需耗費原先40%到50%的時間就可完成開發任務。這是因為群體的IQ水準要比所有獨立個體的IQ水準總和要高些。結對工作的開發者可以把他們的經驗與創造性結合起來。是以通常結對團體設計解決方案的能力要比單個開發者的高得多。

       信心和樂趣是從事諸如程式設計這類富有創新性的工作的良好動力。試過結對程式設計的人表明結對工作時對自己設計的解決方案更有信心;而且也更加享受開發的過程。

       不斷的代碼複查保證了代碼的品質。雖然使用了結對程式設計,但并不是說bug不會出現。bug依舊會有,但是卻能更早地被發現和修複。

注意:要依次滿足以下條件才适合使用結對程式設計:

       1、結對成員接受結對程式設計的概念。

繼續閱讀