快來領取這份代碼審查問題手冊!
git
代碼審查列表,是代碼審查的明確規則和指導手冊,它可使代碼審查爲你的團隊帶來更多好處,而且可以顯著提高代碼審查的速度。github
研究代表,使用代碼審查列表的審閱者的表現要優於不使用的審閱者。因此無論你是新手開發者仍是經驗豐富的開發者,開始考慮使用代碼審查列表吧。設計模式
代碼做者應該關注的列表
做爲代碼的做者,你應該保證:安全
- 代碼編譯成功而且經過靜態檢查(沒有警告)
- 代碼經過全部的測試(單元測試、集成測試和系統測試)
- 你已經仔細檢查了拼寫錯誤,並作了處理(註釋、todo等)
- 概述代碼修改的緣由以及修改了哪些地方
除此以外,做爲代碼做者,也應該在提交審查以前,按照審查者的列表對本身的代碼進行審查。框架
代碼審查者應該關注的列表
做爲代碼審查者,你的任務是尋找最重要的問題。評論會要對代碼的結構性或邏輯性問題更有價值,即便有時候會顯得挑剔。模塊化
你應該知道什麼是好的代碼反饋。另外須要注意,最好的代碼審查反饋不是點評,而是建議。因此不要說「變量名稱應該是removeObject「,最好說」調用變量removeObject怎麼樣?「。函數
下面這份列表足夠幫助你提出好的代碼審查反饋了。工具
實現
- 此代碼更改會執行它應該作的事情嗎?
- 這種解決方法是最簡單的嗎?
- 這個更改有引入一些不須要的編譯時或運行時的依賴嗎?
- 是否使用了不該該使用的框架、API、庫、服務?
- 是否存在能夠提高解決方法的未使用的框架、API、庫、服務?
- 代碼是否處於正確的抽象級別?
- 代碼是否的模塊化作的是否足夠好?
- 你是否有其餘的解決方案,該方案在代碼可維護性、可讀性、性能、安全方面表現更好?
- 是否已經存在相似功能的函數?若是有,爲何不復用?
- 是否有最佳實踐、設計模式或特定語言模式能夠優化代碼?
- 代碼是否遵循面向對象的分析和設計原則,例如單一責任原則,開閉原則,里氏替換原則,接口隔離,依賴注入?
邏輯錯誤或Bug
- 你能想到代碼不按預期運行的任何用例嗎?
- 你能想到任何可能破壞代碼的輸入或外部事件嗎?
錯誤處理和日誌
- 錯誤都被正確處理了嗎?
- 是否有須要增長或刪除的日誌/debug信息?
- 錯誤消息對用戶是否友好?
- 是否有足夠的日誌,它們的編寫方式是不是易於調試的?
可用性和可訪問性
- 從可用性角度出發,所提出的解決方案是否設計合理?
- API文檔是否足夠好?
- 提出的解決方案是否具有可訪問性?
- API/UI是否直觀易用?
測試與可測試性
- 代碼是否達到可測試標準?
- 是否有足夠的自動化測試(單元測試/集成測試/系統測試)?
- 現有測試是否合理覆蓋代碼變動?
- 是否有額外的測試用例、輸入或邊界用例以供測試?
依賴
- 若是這個修改須要更新代碼之外的文件,例如更新文檔,配置,readme文件。是否完成了這些更新?
- 這個修改是否會對系統其餘地方形成影響?是否能後向後兼容?
安全和隱私數據
- 這段代碼是否打開軟件的安全漏洞?
- 權限和身份驗證是否被正確處理?
- 是否安全處理了敏感數據,例如用戶數據、信用卡信息等?是否正確使用加密方法?
- 代碼更改是否顯露了一些私密信息(如迷藥,用戶名等)?
- 若是代碼處理用戶輸入,是否解決了跨站點腳本,SQL注入等安全漏洞,是否進行了輸入清洗和驗證?
- 從外部API或庫中得到的數據是否進行了相應的檢查?
性能
- 這段代碼修改是否會對系統性能產生負面影響?
- 是否能夠進一步提高代碼性能?
可讀性
- 代碼是否容易理解?
- 哪一部分使你困惑,爲何?
- 能夠經過減少方法來提升代碼可讀性嗎?
- 能夠經過使用不一樣的函數/方法或變量名稱來提高代碼可讀性嗎?
- 代碼是否存放在正確的文件/目錄/包?
- 你是否定爲方法應該重構以擁有更直觀的控制流程?
- 數據流是否可理解?
- 是否有多餘的註釋?
- 某些註釋是否能夠更好的傳達信息?
- 是否更多的註釋會使你的代碼更容易理解?
- 是否能夠移除一些註釋,經過提高代碼可讀性來理解代碼?
- 是否存在註釋掉的代碼?
專家意見
- 你是否定爲特定專家(如安全專家或可用性專家)應該先檢查代碼,而後再提交代碼?
- 這個代碼修改會影響其餘團隊嗎?他們也應該發表意見嗎?
好了,以上就是最爲緊迫的一些問題列表。性能
代碼風格和約定
您的團隊或公司必須擁有清晰的編碼風格指南,這一點很重要。由於這是在代碼庫中實施惟一性的惟一方法。而且一致性會使代碼審查更快,令人們能夠輕鬆地更改項目,並保持您代碼的可讀性和可維護性。單元測試
Google是作到這一點的很好的例子,無疑,這使Google能夠進行快速的代碼審查。
首先,我建議使用現成的編碼樣式來支持Google提供的多種語言。設定基本規則很重要,但要確保一勞永逸。不要持續爭論。
儘量自動化
肯定了代碼風格之後,請花一些時間正確安裝和配置工具,以便一鍵格式化代碼。
另外還有不少事情能夠作。例如使用靜態檢查來代替部分人工審覈。這是值得爲之努力的。
完整問題列表
原文連接
https://www.michaelagreiler.com/code-review-checklist/