Code Review 代碼復審指南

jopen 10年前發布 | 35K 次閱讀 代碼分析/審查/優化 Code Review

一開始這篇指南是為團隊而寫的,后來發現包含的內容比較有一般性,所以刪掉了一些和團隊強相關的內容,發到這里。


「Code Review」直譯過來便是「代碼復審」,也就是讓代碼作者之外的人來復審代碼,提出修改意見,接受代碼變更。

益處

  • 發現錯誤:一個人的思考總是會不可避免地出現一些紕漏,而這些紕漏在另一個人眼中也許顯而易見。
  • 保持代碼風格統一:對于整個團隊來說,代碼風格的統一顯得至關重要。風格一致的代碼能提供更好的可讀性,也能避免犯一些「低級錯誤」。
  • 保證設計的合理性:代碼直接反映出你的系統設計,在寫一個新的系統時,確保你的設計不會出現大問題。
  • 保證提交的變更符合團隊的其他要求:例如對測試用例的要求和對文檔的要求;
  • 互相學習:Code Review 的過程也是思想交流的過程,可以取人之長,補己之短。
  • </ul>

    怎樣進行 Code Review

    Review 時機

    基本的語法檢查和自動化測試通過之后,代碼被合并到主分支之前。

    Reviewer

    Reviewer 可以是一個,也可以更多。在代碼變更越大、變更內容牽扯到更多的人和外部系統,或者自信度越低的情況下,你就可能需要更多的 Reviewer。另外在不同的場景下,你也需要不同角色的 Reviewer 參與。

    • 新人上手:Mentor 是第一選擇;
    • 日常工作:同組的其他工程師;
    • 向其他系統或模塊提交 Patch 或 Bugfix:相應系統或模塊的 Maintainer;
    • 專業度很高的代碼:團隊中相應的領域專家。
    • </ul>

      內容

      Reviewer 需要針對變更作以下復審:

      • 代碼風格:確保變更代碼風格符合規范。
      • 明顯的錯誤:確保變更代碼不出現低級錯誤,例如訪問不存在的屬性或訪問空指針。
      • 不合理的設計:確保變更代碼不出現明顯的不合理的系統設計,例如單個 Redis 實例存儲過多的數據、濫用 OOD 或動態語言特性。
      • 明顯的性能問題:確保變更不會引發明顯的性能問題,例如連續、大量、串行地調用 RPC 接口或者不合理的存儲訪問模式。
      • 測試用例:確保相應的變更有相應的單元測試。
      • 注釋和文檔:確保有必要的注釋和接口說明文檔。
      • 其他團隊約定:確保變更的內容符合團隊的其他約定,例如服務的接口的訪問需要接入監控系統和日志系統等。
      • </ul>

        如果被 Review 的內容對應一個新的系統或功能,Reviewer 還需要確保:

        • 理解這個功能的細節
        • 理解這個系統的工程設計細節
        • </ul>

          合并時機

          通常來說,需要所有的 Reviewer 都接受變更才能合并代碼。

          Review 文檔

          • Python 代碼規范
          • MySQL 使用規范
          • Redis 使用規范
          • </ul>

            編寫 Review 友好的代碼

            高效地進行 Code Review 不僅僅只是 Reviewer 的工作,代碼的作者也起著至關重要的作用。

            Commit 粒度

            總的來說,Commit 的粒度應該遵循以下原則: