再認識結對編程
摘要
結對編程是敏捷軟件開發中的重要實踐活動,然而國內業界對結對編程如何提高軟件開發效率的實現並不明確。作者根據親身敏捷軟件開發過程的經驗,深入探討了其對提高軟件開發效率的實際作用。
正文
結對編程是極限編程(XP)的十二個實踐之一,是指兩位程序員肩並肩地坐在同一台電腦前合作完成同一個設計、同一個算法以及同一段代碼,並且兩人的角色可以隨時互換。XP認為結對編程能提高軟件開發效率,很多國外軟件企業都在熱衷於結對編程,Facebook程序員肯特•貝克(Kent Beck)表示:“結對程序員之間的交流非常充分,你甚至可以再也不用言語進行交流。你隻要簡單描述再結合著手勢就可以。”Grockit首席執行官羅伊•吉爾伯特(Roy Gilbert)表示,這種模式已經證明非常成功,他的程序員“正在繼續推廣這種做法。”而IBM還為結對編程推出了協同開發工具ECF。
然而,結對編程在國內確處於一個尷尬的境地,業界對其如何提高軟件開發效率的理論並不明確,也有認為不但不能提高效率,反而會降低效率的觀點。本文作者根據親身經曆,結合查閱國外的很多資料,將結對編程提高軟件開發效率的心得與各位讀者分享。
在正確認識結對編程如何提升軟件開發效率之前,首先要認清對結對編程理解的兩個誤區。
誤區一,兩個人工作效率比一個人高
這個誤區又分為兩種情況。一種是簡單地認為兩個人做事應該更快,的確,日常的生活和工作經驗都告訴我們,一般情況下,兩個人合力做一件事,是比一個人獨立來做要快的。兩個程序員合力寫一個程序,應該比一個人來寫這個程序速度快。但國內商業軟件公司開發的實際情況是,如果有兩個人,那麼就要寫兩個程序,而不是隻給你一個程序的任務。讓兩個人順序完成兩個程序,效率顯然比每人負責一個程序,並行開發兩個程序來的低。所以這個說法是不符合國情的。
另一種情況是所結對編程時,兩個人可以相互討論來解決遇到的問題,要比一個人冥思苦想的效率高。初看這種說法很有道理,但現實是在商業軟件開發公司中,對於一個熟練的軟件工程師來說,並不是經常遇到難題,大部分時候收到的需求都是能很快想到解決方案的,根本沒有做大量討論的必要。而但碰到疑難問題的時候,還有很多更加有效率的方法,比如直接尋求相關技術專家的幫助,或者召集多位編程達人做一次頭腦風暴等,結對編程在這點上說提高軟件開發效率是很勉強的,作者認為反而是降低效率。
誤區二,防止偷懶,提高效率
這個說法在國外的資料上沒有,但是國內的很多培訓和資料上都有提到過。它說如果單獨工作,在遇到困難的時候,並不是所有人都立刻積極地去解決問題,這時或許會上網和網友聊聊天,看看無關的網站等等。有可能因為工作的打斷,大半天的時間都浪費了。而結對編程有一種相互督促的作用,在一邊工作疲憊狀態不好使,另一邊會起一個鼓勵和激發鬥誌的作用。
但是這個說法其實隻是一廂情願,由於軟件開發是很講究團隊配合意識的,所以軟件開發公司內的同事關係基本都很融洽的。兩個關係好的同事坐在一起的時候,不但不會互相監督,反而會互相掩護。
以上是作者認為國內業界對結對編程認識的兩個誤區,那麼結對編程是如何提高軟件開發效率的呢?
提高代碼走查效率
在當今的軟件工程概念中,代碼走查是一個很重要的過程。代碼走查的目的是提高軟件的質量,以及可維護性,經過走查的代碼是能夠更容易地被項目組其他成員看懂的。然後代碼走查的成本不低,有經驗的軟件工程師都清楚,要一個開發人員完全理解另一個人的代碼是一件不容易的事情,不隻是代碼編程習慣的不同會導致閱讀代碼的困難,在複雜的業務邏輯下,不同的開發人員的設計思路也有很大不同的,導致不同的人對代碼的理解有很大差異。所有很多時候代碼走查緊緊隻是看看代碼中是否有語法上的錯誤,是否符合編程規範,而要發現業務邏輯上的深層錯誤是很困難的,以至很多浮躁的軟件開發公司甚至直接省略代碼走查這個步驟。
結對編程則正是提高代碼走查效率和質量的非常有效的手段。兩個開發人員坐在一起,共同思考和討論設計思路,輪流編寫程序代碼,輪流走查另一個人在寫的代碼,代碼走查和編碼並行開展,而不是等完全編碼之後才做代碼走查,產生的程序代碼風格是兩個人都能接受的。這樣就不存在要一個人去理解另一個的代碼的問題,實際是兩個人共同理解代碼。而且由於兩個人的思想盲區要遠小於一個人的思想盲區,所以能夠在編碼過程中及時地發現程序在業務邏輯實現上的深層問題,大大提高代碼走查的效率和質量。對於包含代碼走查階段的軟件開發過程而言,結對編程是能大大提升軟件開發效率的。
結對編程還有很多優點,比如提高軟件代碼的質量,促進知識傳遞,降低新員工學習成本等。除此之外,作者還發現結對編程還有一個很大的優點,就是能讓敏捷開發所倡導的共同責任理念落到實處。
敏捷開發強調項目是整個項目團隊共同擁有的,所以項目的問題是項目團隊所有成員的責任,而不隻是某個人的責任,項目團隊的所有成員應該共同努力來解決和避免所有的項目問題。結對編程則能很好地體現這個理念,在結對編程中兩個人頻繁變換角色,對於程序代碼存在錯誤,就很難分清是誰的責任,甚至很難分清楚哪裏的代碼是誰寫的,所以代碼問題至少是結對的兩個人的共同責任,從根本上促進了共同責任的理念。
最後更新:2017-04-03 18:51:53