- 原文連接 : Code Review Best Practices
- 原文做者 : Kevin London
- 譯文出自 : 開發技術前線 www.devtf.cn
- 譯者 : ayyb1988
- 校對者: chaossss
- 狀態 : 完成
在Wiredrive上,咱們作了不少的Code Review。在此以前我歷來沒有作過,這對於我來講是一個全新的體驗,下面來總結一下在Code Review中作的事情以及說說Code Review的最好方式。 html
簡單的說,Code Review是開發者之間討論修改代碼來解決問題的過程。不少文章談論了Code Review的諸多好處,包括知識共享,代碼的質量,開發者的成長,卻不多討論審查什麼、如何審查。 git
單一職責原則:一個類有且只能一個職責。我一般使用這個原則去衡量,若是咱們必須使用「和」來描述一個方法作的事情,這可能在抽象層上出了問題。 github
開閉原則對於面向對象的語言,對象在可擴展方面開放、對在修改方面關閉。若是咱們須要添加另外的內容會怎樣? 算法
代碼複用:根據「三振法」,若是代碼被複制一次,雖然不喜歡這種方式,但一般沒什麼問題。但若是再一次被複制,就應該經過提取公共的部分來重構它。 shell
換位考慮,若是換位考慮,這行代碼是否有問題?用這種模式是否能夠發現代碼中的問題。 設計模式
用更好的代碼: 若是在一塊混亂的代碼作修改,添加幾行代碼也許更容易,但我建議更進一步,用比原來更好的代碼。 網絡
潛在的bugs:是否會引發的其餘錯誤?循環是否以咱們指望的方式終止? 數據結構
錯誤處理:錯誤肯定被優雅的修改?會致使其餘錯誤?若是這樣,修改是否有用? 函數
效率: 若是代碼中包含算法,這種算法是不是高效? 例如,在字典中使用迭代,遍歷一個指望的值,這是一種低效的方式。 工具
方法名: 在計算機科學中,命名是一個難題。一個函數被命名爲==get_message_queue_name==,但作的倒是徹底不一樣的事情,好比從輸入內容中清除html,那麼這是一個不許確的命名,而且可能會誤導。
值名:對於數據結構,==foo== or ==bar== 多是無用的名字。相比==exception==, ==e==一樣是無用的。若是須要(根據語言)儘量詳細,在從新查看代碼時,那些見名知意的命名是更容易理解的。
函數長度: 對於一個函數的長度,個人經驗值是小於20行,若是一個函數在50行以上,最好把它分紅更小的函數塊。
類的長度:我認爲類的長度應該小於300行,最好在100內。把較長的類分離成獨立的類,這樣更容易理解類的功能。
文件的長度: 對於Python,一個文件最多1000行代碼。任何高於此的文件應該把它分離成更小更內聚,看一下是否違背的「單一職責」 原則。
文檔:對於複雜的函數來講,參數個數可能較多,在文檔中須要指出每一個參數的用處,除了那些顯而易見的。
註釋代碼: 移除任何註釋代碼行。
在提交代碼以前,我常常用git添加改變的文件/文件夾,而後經過git diff 來查看作了哪些修改。一般,我會關注以下幾點:
* 是否有註釋?
* 變量名是否見名知意?
* …等上面提到的
和著名的橡皮鴨調試法(Rubber Duck Debugging)同樣,每次提交前總體把本身的代碼從新檢查一遍很是有幫助,尤爲是看看有沒有犯低級錯誤。
當Code Review時,會遇到很多問題,我也學會了如何處理,下面是一些方法:
一些關於clean code的書籍,以下:
* Clean Code
* Refactoring
* All the Small Things by Sandi Metz
* How to Design a Good API and Why it Matters
* Discussion on Hacker News
在Code Review時,要在 意識 方法 心態 習慣 這幾個方面上下功夫,堅持code review,相信咱們會在各方面有很大的提高。