

# SEC11-BP04 執行程式碼檢閱
<a name="sec_appsec_manual_code_reviews"></a>

 實作程式碼檢閱，協助驗證正在開發之軟體的品質和安全性。程式碼檢閱旨在讓原始程式碼作者以外的團隊成員檢閱程式碼是否潛藏任何問題、漏洞，以及是否遵守編碼標準和最佳實務。此處理程序有助於擷取原始開發人員可能忽略的錯誤、不一致和安全漏洞。使用自動化工具協助檢閱程式碼。

 **預期結果：**您在開發期間納入程式碼檢閱流程，以提高撰寫的軟體品質。您可以利用在程式碼檢閱期間的學習，提升經驗不足之團隊成員的技能。您可以使用自動化工具和測試來識別自動化的機會，並支援程式碼檢閱程序。

 **常見的反模式：**
+  您在部署之前不會檢閱程式碼。
+  撰寫程式碼和檢閱程式碼的是同一個人。
+  您未使用自動化程序和工具來協助或協調程式碼檢閱。
+  您未在建置者開始檢閱程式碼之前，先讓他們接受應用程式安全的訓練。

**建立此最佳實務的優勢：**
+  程式碼品質更高。
+  經由重複使用常用方法而使程式碼開發更具一致性。
+  減少在滲透測試與後期階段找出問題的數量。
+  團隊內部的知識轉移效能更高。

 **未建立此最佳實務時的曝險等級：**中 

## 實作指引
<a name="implementation-guidance"></a>

 程式碼檢閱有助於在開發期間驗證軟體的品質和安全性。手動檢閱旨在讓原始程式碼作者以外的團隊成員檢閱程式碼是否潛藏任何問題、漏洞，以及是否遵守編碼標準和最佳實務。此處理程序有助於擷取原始開發人員可能忽略的錯誤、不一致和安全漏洞。

 請考慮使用 [Amazon CodeGuru 安全工具](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html)協助自動執行程式碼檢閱。CodeGuru 安全工具使用機器學習和自動推理來分析您的程式碼，並識別潛在的安全漏洞和編碼問題。將自動化程式碼檢閱與現有程式碼儲存庫整合，並持續整合/持續部署 (CI/CD) 管道。

### 實作步驟
<a name="implementation-steps"></a>

1.  **建立程式碼檢閱程序：**
   +  定義進行程式碼檢閱的時間點，例如在將程式碼合併到主要分支之前，或在部署到生產環境之前。
   +  確定誰應該參與程式碼檢閱程序，例如團隊成員、資深開發人員和安全專家。
   +  決定程式碼檢閱方法，包括使用的程序和工具。

1.  **設定程式碼檢閱工具：**
   +  評估並選取符合您團隊需求的程式碼檢閱工具，例如 GitHub 提取請求或 CodeGuru 安全工具 
   +  將所選工具與您現有的程式碼儲存庫和 CI/CD 管道整合。
   +  設定工具以強制執行程式碼檢閱要求，例如檢閱者人數下限與核准規則。

1.  **定義程式碼檢閱檢查清單和指引：**
   +  建立程式碼檢閱檢查清單，或概述應檢閱之內容的指引。考慮程式碼品質、安全漏洞、遵守編碼標準和效能等因素。
   +  與開發團隊共用檢查清單或指引，並確認每個人都了解預期情況。

1.  **訓練開發人員程式碼檢閱最佳實務：**
   +  為您的團隊提供有關如何執行有效程式碼檢閱的訓練。
   +  教育您的團隊有關在檢閱過程中，需注意的應用程式安全原則和常見漏洞。
   +  鼓勵知識分享和配對程式設計工作階段，以提升經驗不足之團隊成員的技能。

1.  **實作程式碼檢閱程序：**
   +  將程式碼檢閱步驟整合到您的開發工作流程中，例如建立提取請求和指派檢閱者。
   +  要求在合併或部署之前，針對程式碼變更內容進行程式碼檢閱。
   +  在檢閱過程中，鼓勵公開溝通和建設性的意見回饋。

1.  **監控並改善：**
   +  定期審查程式碼檢閱程序的有效性，並收集團隊的意見回饋。
   +  識別自動化或工具改進的機會，以簡化程式碼檢閱程序。
   +  根據學習和產業最佳實務，持續更新和精簡程式碼檢閱檢查清單或指引。

1.  **培養程式碼檢閱文化：**
   +  強調程式碼檢閱的重要性，以維持程式碼品質和安全性。
   +  慶祝程式碼檢閱程序的成功和學習成果。
   +  營造一個可以讓開發人員放心地提供和接收意見回饋的協作和支援環境。

## 資源
<a name="resources"></a>

 **相關的最佳實務：**
+  [SEC11-BP02 自動化在整個開發和發布生命週期的測試](sec_appsec_automate_testing_throughout_lifecycle.md) 

 **相關文件：**
+  [DevOps 指引：DL.CR.2 針對程式碼變更執行對等檢閱](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cr.2-perform-peer-review-for-code-changes.html) 
+  [關於 GitHub 中的提取請求](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) 

 **相關範例：**
+  [使用 Amazon CodeGuru 安全工具自動執行程式碼檢閱](https://aws.amazon.com/blogs/devops/automate-code-reviews-with-amazon-codeguru-reviewer/) 
+  [使用 Amazon CodeGuru 安全工具 CLI，自動偵測 CI/CD 管道中的安全漏洞與錯誤](https://aws.amazon.com/blogs/devops/automating-detection-of-security-vulnerabilities-and-bugs-in-ci-cd-pipelines-using-amazon-codeguru-reviewer-cli/) 

 **相關影片：**
+  [使用 Amazon CodeGuru 安全工具持續改善程式碼品質](https://www.youtube.com/watch?v=iX1i35H1OVw) 