

# OPS05-BP02 測試並驗證變更
<a name="ops_dev_integ_test_val_chg"></a>

 所部署的每項變更都必須經過測試，以避免在生產環境中發生錯誤。此一最佳實務著重於各種變更 (從版本控制到成品組建) 的測試。除了應用程式碼變更之外，測試應包括基礎設施、組態、安全控制和操作程序。測試採取多種形式，從單元測試到軟體元件分析 (SCA) 都包括在內。將測試進一步納入軟體整合和交付程序中，可進一步確保成品的品質。

 您的組織必須針對所有軟體成品制定測試標準。自動化測試可減少辛勞並避免手動測試錯誤。在某些情況下可能需要手動測試。開發人員必須有權存取自動化測試結果，以建立可改善軟體品質的回饋迴圈。

 **預期成果：**您的軟體變更在交付前都經過測試。開發人員有權存取測試結果和驗證。您的組織具有適用於所有軟體變更的測試標準。

 **常見的反模式：**
+  您在部署新軟體變更時未進行任何測試。它無法在生產環境中執行，這會導致中斷。
+  新的安全群組透過 AWS CloudFormation 進行部署，而未在生產前環境中測試。安全群組會讓您的客戶無法存取您的應用程式。
+  方法被修改，但沒有單元測試。軟體部署至生產環境時失敗。

 **建立此最佳實務的優勢：**降低了軟體部署的變更失敗率。軟體品質獲得改善。開發人員更能感知其程式碼的可行性。可以安心推出安全政策，以支援組織的合規性。基礎設施變更 (例如自動化擴展政策更新) 會事先經過測試，以符合流量需求。

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

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

 作為持續整合實務的一部分，對從應用程式碼到基礎設施的所有變更進行測試。發布測試結果，以便開發人員快速獲得意見回饋。您的組織具有所有變更都必須通過的測試標準。

 透過 Amazon Q Developer，利用生成式 AI 的強大功能，提升開發人員生產力和程式碼品質。Amazon Q Developer 包括程式碼建議的產生 (以大型語言模型為基礎)、單元測試的生產 (包括邊界條件)，以及透過偵測和修復安全漏洞增強程式碼安全性。

 **客戶範例** 

 在其持續整合管道中，AnyCompany Retail 對所有軟體成品執行了數種類型的測試。他們實行測試驅動型開發，所以所有軟體都有單元測試。建置成品後，它們會執行端到端測試。在第一輪測試完成後，他們會執行靜態應用程式安全性掃描，以尋找已知的漏洞。通過每個測試門時，開發人員會收到訊息。所有測試都完成後，軟體成品即儲存在成品儲存庫中。

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

1.  與組織中的利益相關者合作制定軟體成品的測試標準。所有成品都應該通過哪些標準測試？ 測試涵蓋範圍中是否必須包含合規性或管控要求？ 您是否需要進行程式碼品質測試？ 測試完成時，誰需要得知？ 

   1.  [AWS 部署管道參考架構](https://pipelines.devops.aws.dev/)包含可在整合管道中對軟體成品執行之測試類型的授權清單。

1.  根據您的軟體測試標準，以必要的測試檢測您的應用程式。每組測試應在十分鐘內完成。測試應執行為整合管道的一部分。

   1.  使用 [Amazon Q Developer](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/what-is.html)，這是一種生成式 AI 工具，可協助建立單元測試案例 (包括邊界條件)、使用程式碼和註解產生函數，以及實作眾所周知的演算法。

   1.  使用 [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 來測試您的應用程式碼是否存在故障。

   1.  可使用 [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 對軟體成品執行測試。

   1.  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 可將您的軟體測試安排到管道中。

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

 **相關的最佳實務：**
+  [OPS05-BP01 使用版本控制](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_version_control.html) 
+  [OPS05-BP06 共用設計標準](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_share_design_stds.html) 
+  [OPS05-BP07 實作用於提高程式碼品質的實務](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_code_quality.html) 
+  [OPS05-BP10 完全自動化整合和部署](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_auto_integ_deploy.html) 

 **相關文件：**
+  [採用測試驅動的開發方法](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/development-best-practices.html) 
+  [使用 Amazon Q 加速您的軟體開發生命週期](https://aws.amazon.com/blogs/devops/accelerate-your-software-development-lifecycle-with-amazon-q/) 
+  [Amazon Q Developer 現已正式推出，包含可重新構想開發人員體驗的新功能預覽](https://aws.amazon.com/blogs/aws/amazon-q-developer-now-generally-available-includes-new-capabilities-to-reimagine-developer-experience/) 
+  [在 IDE 中使用 Amazon Q Developer 的終極速查表](https://community.aws/content/2eYoqeFRqaVnk900emsknDfzhfW/the-ultimate-cheat-sheet-for-using-amazon-q-developer-in-your-ide) 
+  [左移工作負載，利用 AI 建立測試](https://community.aws/content/2gBZtC94gPzaCQRnt4P0rIYWuBx/shift-left-workload-leveraging-ai-for-test-creation) 
+  [Amazon Q 開發人員中心](https://aws.amazon.com/developer/generative-ai/amazon-q/) 
+  [使用 Amazon CodeWhisperer 快速建置應用程式的 10 種方式](https://aws.amazon.com/blogs/devops/10-ways-to-build-applications-faster-with-amazon-codewhisperer/) 
+  [使用 Amazon CodeWhisperer 超越程式碼覆蓋範圍](https://aws.amazon.com/blogs/devops/looking-beyond-code-coverage-with-amazon-codewhisperer/) 
+  [使用 Amazon CodeWhisperer 進行提示詞工程的最佳實務](https://aws.amazon.com/blogs/devops/best-practices-for-prompt-engineering-with-amazon-codewhisperer/) 
+  [使用 TaskCat 和 CodePipeline 的自動化 AWS CloudFormation 測試管道](https://aws.amazon.com/blogs/devops/automated-cloudformation-testing-pipeline-with-taskcat-and-codepipeline/) 
+  [使用開放原始碼 SCA、SAST 和 DAST 工具建置端對端 AWS DevSecOps CI/CD 管道](https://aws.amazon.com/blogs/devops/building-end-to-end-aws-devsecops-ci-cd-pipeline-with-open-source-sca-sast-and-dast-tools/) 
+  [開始測試無伺服器應用程式](https://aws.amazon.com/blogs/compute/getting-started-with-testing-serverless-applications/) 
+  [CI/CD 管道是我的發行主管](https://aws.amazon.com/builders-library/cicd-pipeline/) 
+  [《在 AWS 上實行持續整合和持續交付》白皮書](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html) 

 **相關影片：**
+  [使用適用於軟體開發的 Amazon Q Developer 代理程式來實作 API](https://www.youtube.com/watch?v=U4XEvJUvff4) 
+  [使用 JetBrains IDE 安裝、設定和使用 Amazon Q Developer (操作說明)](https://www.youtube.com/watch?v=-iQfIhTA4J0) 
+  [掌握 Amazon CodeWhisperer 的藝術 - YouTube 播放清單](https://www.youtube.com/playlist?list=PLDqi6CuDzubxzL-yIqgQb9UbbceYdKhpK) 
+  [AWS re:Invent 2020：可測試的基礎設施：在 AWS 上進行整合測試](https://www.youtube.com/watch?v=KJC380Juo2w) 
+  [AWS Summit ANZ 2021 - 透過 CDK 和測試驅動的開發施行測試優先策略](https://www.youtube.com/watch?v=1R7G_wcyd3s) 
+  [使用 AWS CDK 測試基礎設施即程式碼](https://www.youtube.com/watch?v=fWtuwGSoSOU) 

 **相關資源：**
+  [AWS 部署管道參考架構 - 應用程式](https://pipelines.devops.aws.dev/application-pipeline/index.html) 
+  [AWS Kubernetes DevSecOps 管道](https://github.com/aws-samples/devsecops-cicd-containers) 
+  [使用 AWS CodeBuild 為 GitHub 中的 Node.js 應用程式執行單元測試](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html) 
+  [使用 Serverspec 進行基礎設施程式碼的測試驅動開發](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/use-serverspec-for-test-driven-development-of-infrastructure-code.html) 

 **相關服務：**
+  [Amazon Q Developer](https://aws.amazon.com/q/developer/) 
+  [Amazon CodeGuru Reviewer](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) 
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 
+  [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 