# 程序員必備的代碼審查(Code Review)清單
在我們關于高效代碼審查的博文中,我們建議使用一個檢查清單。在代碼審查中,檢查清單是一個非常好的工具——它們保證了審查可以在你的團隊中始終如一的進行。它們也是一種保證常見問題能夠被發現并被解決的便利方式。
軟件工程學院的研究表明,程序員們會犯15-20種常見的錯誤。所以,通過把這些錯誤加入到檢查清單當中,你可以確保不論什么時候,只要這些錯誤發生了,你就能發現它們,并且可以幫助你杜絕這些錯誤。
為了幫助你開始創建一個清單,這里列出了一些典型的內容:代碼審查清單。
### 常規項
- 代碼能夠工作么?它有沒有實現預期的功能,邏輯是否正確等。
- 所有的代碼是否簡單易懂?
- 代碼符合你所遵循的編程規范么?這通常包括大括號的位置,變量名和函數名,行的長度,縮進,格式和注釋。
- 是否存在多余的或是重復的代碼?
- 代碼是否盡可能的模塊化了?
- 是否有可以被替換的全局變量?
- 是否有被注釋掉的代碼?
- 循環是否設置了長度和正確的終止條件?
- 是否有可以被庫函數替代的代碼?
- 是否有可以刪除的日志或調試代碼?
### 安全
- 所有的數據輸入是否都進行了檢查(檢測正確的類型,長度,格式和范圍)并且進行了編碼?
- 在哪里使用了第三方工具,返回的錯誤是否被捕獲?
- 輸出的值是否進行了檢查并且編碼?
- 無效的參數值是否能夠處理?
### 文檔
- 是否有注釋,并且描述了代碼的意圖?
- 所有的函數都有注釋嗎?
- 對非常規行為和邊界情況處理是否有描述?
- 第三方庫的使用和函數是否有文檔?
- 數據結構和計量單位是否進行了解釋?
- 是否有未完成的代碼?如果是的話,是不是應該移除,或者用合適的標記進行標記比如‘TODO’?
### 測試
- 代碼是否可以測試?比如,不要添加太多的或是隱藏的依賴關系,不能夠初始化對象,測試框架可以使用方法等。
- 是否存在測試,它們是否可以被理解?比如,至少達到你滿意的代碼覆蓋(code coverage)。
- 單元測試是否真正的測試了代碼是否可以完成預期的功能?
- 是否檢查了數組的“越界“錯誤?
- 是否有可以被已經存在的API所替代的測試代碼?
### 總結
你同樣需要把特定語言中有可能引起錯誤的問題添加到清單中。
這個清單故意沒有詳盡的列出所有可能會發生的錯誤。你不希望你的清單是這樣的,太長了以至于從來沒人會去用它。僅僅包含常見的問題會比較好。
### 優化你的清單
把使用清單作為你的起點,針對特定的使用案例,你需要對其進行優化。一個比較棒的方式就是讓你的團隊記錄下那些在代碼審查過程中臨時發現的問題,有了這些數據,你就能夠確定你的團隊常犯的錯誤,然后你就可以量身定制一個審查清單。確保你刪除了那些沒有出現過的錯誤。(你也可以保留那些出現概率很小,但是非常關鍵的項目,比如安全相關的問題)。
### 得到認可并且保持更新
基本規則是,清單上的任何條目都必須明確,而且,如果可能的話,對于一些條目你可以對其進行二元判定。這樣可以防止判斷的不一致。和你的團隊分享這份清單并且讓他們認同你清單的內容是個好主意。同樣的,要定期檢查你的清單,以確保各條目仍然是有意義的。
有了一個好的清單,可以提高你在代碼審查過程中發現的缺陷個數。這可以幫助你提高代碼標準,避免質量參差不齊的代碼審查。
### 參考資料
- [程序員必備的代碼審查(Code Review)清單](http://blog.jobbole.com/83595/)
- 介紹
- 程序員基礎知識
- 字符編碼
- 技術名詞
- 語義化版本
- 命名規范
- 書寫文檔
- 開源協議
- 目錄結構
- 正則表達式
- 平凡之路
- 數據結構與算法
- 堆和棧
- 浮點數類型
- XML和JSON
- 算法學習之路
- 排序算法
- 代碼架構
- 設計模式
- 常用的Javascript設計模式
- 面向對象編程
- 繼承
- 多態
- 封裝
- 面向接口編程
- 代碼評審
- 六種量化你代碼的方式
- 程序員必備的代碼審查(Code Review)清單
- 服務器部署
- AWS簡介
- 網絡知識
- HTTPS, SPDY和 HTTP/2性能的簡單對比
- HTTP狀態碼
- 懂點設計
- 佳作賞析
- 無縫平鋪
- Sketch學習
- 設計與實現的平衡
- 寫點東西
- 使用gitbook
- 合格的PM
- 一個好的產品經理
- 產品經理的技能
- 團隊合作
- 關于招聘
- 培訓新人
- 領導能力
- 獲取知識
- MOOC
- Podcasts
- 英語學習
- 設計學習
- 前端學習
- iOS學習
- 游戲開發
- 關注健康
- 過勞檢測
- 關于睡眠
- 提升效率
- 學會閱讀
- 學會提問
- 善用搜索
- 學會寫作
- 時間管理
- 知識管理
- 文件管理
- 密碼管理
- 制作視頻
- 制作PPT
- 論音樂對效率的影響
- 程序員效率指南
- SOHO
- 創業資源
- Hacker
- 保護隱私
- 關于工作
- 找工作前需要思考的問題
- 原則與技巧
- 關于簡歷
- 其他方面
- 硬件相關
- 常用軟件
- Windows
- 硬件配置
- 系統安裝
- 常用軟件
- Mac
- 通用設置
- 權限問題
- alias設置
- 常用軟件
- 開發環境
- 快捷鍵設置
- 常用終端命令
- dotfiles
- Android
- 常用軟件
- 如何登錄美國區GooglePlay
- 開發工具
- git
- EditorConfig
- node
- shadowsocks
- ST3--Windows篇
- ST3--Mac篇
- gulp
- 字體的選擇
- Emacs
- WebStorm
- tmux
- Sketch
- Sketch中文學習資料
- Trello
- 使用Trello管理項目的經驗
- git進階
- 15分鐘學會使用Git和遠程代碼庫
- GitHub秘籍
- JetBrains
- IDE設置
- 附錄
- 計算機科學與技術
- 網站
- 書籍
- 工具