提高代碼質量的12個技巧

jopen 11年前發布 | 6K 次閱讀 代碼質量

正如我曾在以前的帖子中提到過,我最近正在教授學生有關于精益軟件開發的課程。其中一個我提出的觀點就是:質量免費(或者至少能變得便宜)的前提是,我們得先致力于提高質量。

提高代碼質量的12個技巧

1.測試驅動開發(TDD)

如果說要找一個最能提高代碼質量同時還要減少bug的實踐練習恐怕就非TDD莫屬了。它的優點是適用于任何類型的項目和敏捷開發。其歷史可以追溯到 很早以前,但是直到XP的普及它才漸漸為人所知。當作為能自動化構建和測試實踐的持續集成周期的一部分運作的時候,它被稱為單元測試。

很多開發人員并不知道該怎么提高這方面的能力,這需要培訓和教育。而且這是一個學習和積累的過程,不要想著能一夜吃成個胖子。

2.驗收測試驅動開發(ATDD)

這是基于TDD單元測試之后的一個新的水平。這不但表明了驗收標準,而且還能在開發工作開始之前自動執行開發需求。在很多情況下,需要專業測試人員和客戶攜手共同參與到測試中去。

3.持續集成(CI)

這能確保新代碼不會干擾到已經存在的代碼。如果再加上TDD和ATDD一起創建一個自動化、可重復的的測試套件,將會大幅度提高其使用價值。

4.結對編程

有關于結對編程的爭論似乎已經偃旗息鼓了,同樣的人們實際應用的例子也越來越少。這不可謂不是一個遺憾。因為在即時的代碼審查上,兩個腦袋總比一個 管用。它也允許開發人員將注意力全部灌注到手頭的工作上——不必分心于電話、郵件、短信等等,因為我們的partner會搞定。

5.代碼審查

如果沒辦法結對編程,那么退而求其次,至少得進行一次代碼審查。最好代碼一寫好就能落實到位一個輕量級流程的代碼審查。我們在學校里學的那種又大又 正規的流程其實并不實際——只有NASA( 美國宇航局)這種不差錢的土豪才買得起。所以換個輕量級的流程,意味著只需20%的成本就能享受80%的相同 效果。

6.靜態分析工具

以前人人都不看好所謂的靜態分析工具。現在則好了很多,雖然它們仍然并不能真正替代代碼審查,但是其使用成本比較低。當然可能需要購買許可證,但是一旦將它們設置進系統中之后,以后每一次我們輸入代碼,它們都會一絲不茍兢兢業業地檢查并且快速提示發現的所有錯誤。

7.編碼標準

老實說我并不怎么喜歡編碼標準。從我的經驗來看,很多團隊在討論編碼標準上面浪費了太多的時間,而且一旦確定了某種標準,這往往會損害一部分開發人員的利益。不過如果我們能克服這些問題,那么絕對會有意想不到的效果。

首先建立一個討論小組——應該以一種面對面的形式,不要通過電子郵件和電話——討論出編碼標準里應該包含哪些內容。找到需要討論的地方,規分為不同 的類別:少許定位為必選項目,推薦項目的數量可以較前者多點,候選項目則可以更多。在候選組里的需要經過深思熟慮之后才能放到推薦組和必選組中。剩下的第 四組則是明確不能成為編程標準的內容。

每隔三至四個月檢查一下這些標準,看看有沒有需要從候選組提升到推薦組,或者從推薦組放到必選組的,要是發現什么已經不適應當前工作的項目,那就盡快刪除或者降級。

此外,我們不應該將編碼標準當做代碼審查的一部分,而是兩手都要抓,兩手都要硬,萬一不得不遺漏其中之一,可以借助自動化工具,例如運行靜態分析工具,自動執行代碼標準來檢查代碼。

8.自動化

其實就目前而言,我們提出的大多數意見和建議,是能夠自動化執行而且也應該被自動化執行的,但是可惜的是這個概念還沒有深入人心。從長遠看,非自動 化就意味著需要耗費大量的時間,而且成本更高。雖然自動化看似在短期內需要投入大量的成本,但是從整體上而言,其實是節約了成本的。

9.重構(以及重構工具)

重構的目的就在于提高代碼質量,當然更重要的是,改善整體的設計。如果重構之后不能達到上述目的,那么說明你的思路錯了。我們可以在重構的時候摒棄 自動化單元測試,而且很多人也是這么做的,但是這等同于高空走鋼絲的時候下面沒有安全防護網——一旦失足便萬劫不復。如果是裝備了“安全防護網”的重構不 但毋須占用大量時間,而且還能頻繁運行。

以上這些對于能提高代碼質量顯然是顯而易見的。還有一些雖然也在圖片名單上,但是并不那么為大家所認可,不過我認為它們也值得包括進去。

10.展示和說明(早期)

也許你會奇怪這怎么能提高代碼質量呢,請不要懷疑,It does。因為定期展示相關潛在客戶對于軟件的要求,能促使開發人員不斷地將他們的代碼保持在最接近發布的狀態,這也使得開發進程更快、更細致。

第二個原因則是能收集更多周期性的反饋,指引我們正確的方向。

最后,如果一個開發人員害怕將他的工作展現給用戶和客戶看,這是一個非常危險的信號,最好停下來好好自我檢查一番。

11.用戶測試

用戶測試能讓我們從另一角度進行測試,以便盡早發現問題。

與第10點相同,碎片化的處理模式能提供更為細致的步驟。無論是在工作規劃上還是在改進代碼上面,這都給了我們一個機會,能在做每一個決定之前都可以重新調整和矯正航向。

12.團隊凝聚力

關于團隊的凝聚力其重要性不言而喻,因為一個團隊一旦失去了凝聚力,那么大家就會各執己見,各施其力。要想不如此,我們就必須要在開發目標和如何設計代碼以及如何改進代碼上面的觀點達成一致。

上述12點可能并不詳盡,歡迎大家群策群力,提出寶貴的意見和建議,謝謝。

譯文鏈接:http://原網站已經失效/article/12-skills-improve-code-quality.html
英文原文:Things to do to improve code quality
翻譯作者:碼農網 – 小峰

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!