

# OPS05-BP02 変更をテストし、検証する
<a name="ops_dev_integ_test_val_chg"></a>

 デプロイされた変更はすべてテストし、本稼働でのエラーを回避する必要があります。このベストプラクティスは、バージョンコントロールからアーティファクトビルドへの変更をテストすることに重点を置いています。テストには、アプリケーションコードの変更に加えて、インフラストラクチャ、設定、セキュリティコントロール、運用手順も含める必要があります。テストは、単体テストからソフトウェアコンポーネント分析 (SCA) まで、さまざまな形態があります。ソフトウェアの統合および配信プロセスでテストをさらに早めると、アーティファクト品質の確実性が増します。 

 組織はすべてのソフトウェアアーティファクトにおいてテスト基準を作成する必要があります。テストを自動化すると、手間を軽減し、手動テストによるエラーを回避できます。手動テストが必要な場合もあります。開発者は自動テストの結果を確認して、ソフトウェアの品質を向上させるフィードバックループを作成する必要があります。 

 **期待される成果:** 
+  ソフトウェアの変更は、配信前にすべてテストされる。 
+  開発者はテスト結果を利用できる。 
+  組織に、すべてのソフトウェア変更に適用されるテスト基準がある。 

 **一般的なアンチパターン:** 
+ ソフトウェアの新しい変更を、テストせずにデプロイする。本稼働で実行に失敗し、その結果サービスが停止する。
+ 新しいセキュリティグループが、本番前環境でのテストをせずに CloudFormation にデプロイされる。そのセキュリティグループによって、ユーザーがアプリにアクセスできなくなる。
+ メソッドが変更されたが単体テストがなかった。本稼働にデプロイされた際にソフトウェアが失敗した。

 **このベストプラクティスを活用するメリット:** 
+  ソフトウェアのデプロイにおける変更失敗率が軽減されます。 
+  ソフトウェアの品質が向上します。 
+  開発者のコードの成立性に対する意識が上がります。 
+  セキュリティポリシーを確信を持ってロールアウトし、組織のコンプライアンスをサポートできます。 
+  自動スケーリングポリシーの更新などインフラストラクチャの変更を事前にテストし、トラフィックのニーズを満たすことができます。 

 **このベストプラクティスが確立されていない場合のリスクレベル:** 高 

## 実装のガイダンス
<a name="implementation-guidance"></a>

 継続的統合の実践の一部として、アプリケーションコードからインフラストラクチャまで、すべての変更に対してテストを行います。テスト結果は、開発者が迅速にフィードバックを得られるように公開します。組織に、すべてのソフトウェア変更に適用されるテスト基準を備えます。 

 **お客様事例** 

 AnyCompany Retail は、継続的な統合パイプラインの一部として、すべてのソフトウェアアーティファクトに対して複数種類のテストを実行しています。テスト駆動開発を実践しているため、すべてのソフトウェアに単体テストがあります。アーティファクトがビルドされると、エンドツーエンドのテストが実行されます。1 ラウンド目のテストが完了すると、静的アプリケーションセキュリティスキャンを実行し、既知の脆弱性を探します。開発者は、各テストに合格するたびにメッセージを受け取ります。すべてのテストが完了すると、ソフトウェアアーティファクトはアーティファクトリポジトリに保存されます。 

 **実装手順** 

1.  組織の関係者と協力して、ソフトウェアアーティファクトのテスト基準を作成します。すべてのアーティファクトが合格しなければならない基準のテストとは何でしょうか? テスト範囲に含める必要があるコンプライアンスやガバナンスの要件はありますか? コード品質テストを実施する必要がありますか? テストが完了した際に通知が必要なのは誰ですか? 

   1.  [AWS デプロイパイプラインリファレンスアーキテクチャ](https://pipelines.devops.aws.dev/)には、統合パイプラインの一部としてソフトウェアアーティファクトに対して実行できる、テストの種類の信頼できるリストが含まれています。 

1.  ソフトウェアテスト基準に基づいて必要なテストを行い、アプリケーションを計測します。テストの各セットは 10 分以内に完了する必要があります。テストは統合パイプラインの一部として実行する必要があります。 

   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 バージョン管理を使用する](ops_dev_integ_version_control.md) - すべてのソフトウェアアーティファクトはバージョン管理されたリポジトリにバックアップされる必要があります。 
+  [OPS05-BP06 設計標準を共有する](ops_dev_integ_share_design_stds.md) - 組織のソフトウェアテスト基準によって、設計基準がわかります。 
+  [OPS05-BP10 統合とデプロイを完全自動化する](ops_dev_integ_auto_integ_deploy.md) - ソフトウェアテストは、より大きな統合およびデプロイパイプラインの一部として、自動で実行する必要があります。 

 **関連するドキュメント:** 
+ [ Adopt a test-driven development approach ](https://docs.aws.amazon.com/prescriptive-guidance/latest/best-practices-cdk-typescript-iac/development-best-practices.html)(テスト駆動の開発アプローチを導入する)
+ [ Automated CloudFormation Testing Pipeline with TaskCat and CodePipeline ](https://aws.amazon.com/blogs/devops/automated-cloudformation-testing-pipeline-with-taskcat-and-codepipeline/)(TaskCat と CodePipeline を使用した自動 CloudFormation テストパイプライン)
+ [ Building end-to-end AWS DevSecOps CI/CD pipeline with open source SCA, SAST, and DAST tools ](https://aws.amazon.com/blogs/devops/building-end-to-end-aws-devsecops-ci-cd-pipeline-with-open-source-sca-sast-and-dast-tools/)(オープンソースの SCA、SAST、DAST ツールを使用してエンドツーエンドの AWS DevSecOps CI/CD パイプラインを構築する)
+ [ Getting started with testing serverless applications ](https://aws.amazon.com/blogs/compute/getting-started-with-testing-serverless-applications/)(サーバーレスアプリケーションのテストを開始する)
+ [ My CI/CD pipeline is my release captain ](https://aws.amazon.com/builders-library/cicd-pipeline/) (CI/CD パイプラインが自分のリリースキャプテン)
+ [「AWS における継続的インテグレーションと継続的デリバリーの実践」ホワイトペーパー](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/welcome.html)

 **関連動画:** 
+ [AWS re:Invent 2020: Testable infrastructure: Integration testing on AWS](https://www.youtube.com/watch?v=KJC380Juo2w)(re:Invent 2020: テスト可能なインフラストラクチャ: AWS での統合テスト)
+ [AWS Summit ANZ 2021 - Driving a test-first strategy with CDK and test driven development ](https://www.youtube.com/watch?v=1R7G_wcyd3s)(Summit ANZ 2021 - CDK とテスト駆動開発でテストファースト戦略を獲得する)
+ [ Testing Your Infrastructure as Code with AWS CDK ](https://www.youtube.com/watch?v=fWtuwGSoSOU)(AWS CDK で Infrastructure as Code をテストする)

 **関連リソース:** 
+ [AWS デプロイパイプラインリファレンスアーキテクチャ - アプリケーション](https://pipelines.devops.aws.dev/application-pipeline/index.html)
+ [AWS Kubernetes DevSecOps パイプライン ](https://github.com/aws-samples/devsecops-cicd-containers)
+ [ Policy as Code Workshop – Test Driven Development ](https://catalog.us-east-1.prod.workshops.aws/workshops/9da471a0-266a-4d36-8596-e5934aeedd1f/en-US/pac-tools/cfn-guard/tdd)(Policy as Code ワークショップ - テスト駆動開発)
+ [ Run unit tests for a Node.js application from GitHub by using AWS CodeBuild](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-unit-tests-for-a-node-js-application-from-github-by-using-aws-codebuild.html)(AWS CodeBuild を使用して GitHub から Node.js アプリケーションの単体テストを実行する)
+ [ Use Serverspec for test-driven development of infrastructure code ](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/use-serverspec-for-test-driven-development-of-infrastructure-code.html)(インフラストラクチャコードのデータ駆動開発に Serverspec を使用する)

 **関連サービス:** 
+  [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) 