OpenTextのホームページ。
技術トピックス

継続的テストとは何か?

クエスチョンマークを中心としたIT項目の図解

概要

継続的テストは、ビジネスリスクに関する迅速なフィードバックを得るために、ソフトウェアデリバリライフサイクル(SDLC)を通して自動テストを実行するプラクティスである。プロセスの後半で行われることが多い従来のテストとは異なり、継続的テストは、継続的インテグレーションとデリバリー(CI/CD)パイプラインと緊密に統合され、すべての開発段階にテストを導入する。この緊密なフィードバックのループは、チームが問題を早期に発見し、迅速に修正するのに役立つ。

継続的テスト

なぜ継続的テストが重要なのか

継続的テストは、スピードの速いチームが信頼性の高いソフトウェアを大規模に提供することを可能にする。アジャイルとDevOpsへのシフトは、リリースサイクルの高速化を意味するが、コントロールなきスピードはリスクにつながる。継続的テストは、開発とともに進化するセーフティネットとして機能する。

これが、開発チームや組織、DevOpsの専門家が継続的テストを使用する理由である:

  1. フィードバックループの高速化:最も修正しやすいタイミングでバグを検出し、コードのコミットから問題の特定までの時間を劇的に短縮します。この即時の可視化によって、小さな問題が大きな障害となり、リリース全体が頓挫することを防ぐことができる。
  2. リリースの信頼性の向上:ビジネス関係者は、テストカバレッジ、合格率、潜在的なビジネスインパクトを示すリアルタイムのダッシュボードにより、配備前にリスクに関するより良い洞察を得ることができます。この透明性によって、直感ではなく実際のリスク評価に基づいて、情報に基づいたゴー/ノーゴーの決断が可能になる。
  3. 品質コストの削減:問題を早期に発見することで、問題がパイプラインを通過するにつれてコストが増大する高価な手戻りを回避。本番稼動中にバグを修正することは、開発中にバグに対処するよりもはるかに多くのコストがかかる可能性がある。
  4. リリースサイクルの短縮:テストはもはやボトルネックではなく、フローの一部です。自動化された品質ゲートは、しばしばリリースを遅らせていた従来の"テストフェーズ" を排除し、真の継続的デリバリーを可能にする。

継続的テストの仕組み

継続的テストは、テストの自動化を継続的インテグレーション・ツールと結びつける。テストは主要なパイプラインの段階で自動的に実行され、結果は意思決定プロセスに直接反映される。

DevOpsおよびCI/CDパイプラインのための継続的テストのワークフロー図。ソースコードのコミットから自動テスト、レポートまでの段階を詳述し、CI開始、ビルド、テスト実行、フィードバックループを含む。

一般的にはこうなる:

  1. コードをコミットする: 開発者が共有リポジトリにコードをプッシュする。
  2. CIパイプラインのトリガー: CIツールは自動的に新しいビルドプロセスをキックオフする。
  3. 自動テストを実行する: 自動テストは、順番に実行するか、並行して実行するか、あるいはその両方を組み合わせて実行する:ユニットテスト、APIテスト、統合テスト、UIテスト、パフォーマンステスト、セキュリティテスト、アクセシビリティテスト。
  4. & レポートを分析する: いずれかのテストが失敗した場合、パイプラインは停止するか、詳細なレポートで関係者に警告を発します。
  5. & 改善する: チームは問題を修正し、テストカバレッジを向上させ、インフラを調整する。

このプロセスは、しばしば継続的開発のためのテスト自動化と呼ばれ、コード・デリバリーと同期して品質を維持する。このプロセスは連続的にループする。


人、プロセス、テクノロジー

継続的テストの実施は、ツールだけの問題ではない。それは、チーム文化、合理化されたプロセス、適切なテクノロジー・スタックを融合させた部門横断的な取り組みである。

  1. 人だ: 開発者、テスター、オペレーションは協力しなければならない。テストはもはや、"他人の仕事ではない。"この文化的転換には、サイロを取り払い、質の高い成果に対するオーナーシップを共有することが必要である。
  2. プロセス シフト・レフトのテスト慣行とリスクベースのテスト戦略は、何をいつテストすべきかを導く。チームは、明確な品質ゲートを定義し、テスト標準を確立し、技術的意思決定とビジネス的意思決定の両方に情報を提供するフィードバック・ループを構築しなければならない。
  3. テクノロジーテスト自動化、CI/CD統合、環境管理、分析をサポートするツールが必要だ。テクノロジー・スタックは信頼性が高く、拡張性があり、単なるテスト実行ではなく、意味のある洞察を提供しなければならない。

これら3つの柱が調和して機能するとき、得られるのはカバレージ以上のものであり、洞察力である。


継続的テストと自動テスト

多くのチームが、自動ソフトウェアテストと継続的テストを混同している。ツールやテクニックは共通だが、戦略と成果は大きく異なる。

自動テストを"what" と考え、継続的テストを"when" and"why と考える。"
このチャートは、特に統合、コラボレーション、ビジネス価値に関して、重要な違いを浮き彫りにしている:

カテゴリー 自動ソフトウェアテスト 継続的テスト
定義 手作業なしでテストを実行するためのツールやスクリプトの使用 CI/CDに組み込まれた自動テストにより、ビジネスリスクに関するフィードバックを迅速かつ継続的に提供する。
走るとき 手動またはオンデマンドで、多くの場合、デリバリー・パイプラインの外にある。 開発と配備の各段階で自動的にトリガーされる
目標& インパクト 手作業によるテスト実行の代替による効率の向上 リアルタイムの洞察により、リスクを削減し、納期を短縮し、品質を向上させる。
パイプラインの統合 CI/CDやデリバリープロセスから切り離される可能性がある。 継続的インテグレーション・テストおよびデプロイメント・ワークフローと完全に統合されています。
チームコラボレーション 一般的にQAが所有し、共同作業は限定的 開発者、テスター、DevOpsチーム間のオーナーシップの共有

継続的テストの課題とその克服法

継続的テストは大きな利点をもたらすが、同時に新たな複雑さをもたらし、最も意図的な実装を頓挫させる可能性もある。

チームが直面する一般的な課題には次のようなものがある:

不安定な環境:設定ミスや利用できないサービスによってテストが失敗し、チームがテスト結果に対する信頼を失うという悪夢のシナリオが生まれる。" 不安定な環境は、継続的なテストをセーフティネットから絶え間ないフラストレーションの源に変え、失敗が無視される"。
これを克服するには、一貫性を保つためにコンテナ化されたテスト環境を使用する。コンテナは、開発、テスト、本番にわたって同一の環境を提供する。DockerやKubernetesのようなツールは、環境の違いがテストの失敗を引き起こさないようにすると同時に、環境の迅速なプロビジョニングとティアダウンを可能にする。

テストの不確実性:テスト結果に一貫性がないため、自動化に対する信頼が損なわれ、チームはテストを何度も再実行するか、最悪の場合、失敗したテストを完全に無視せざるを得なくなる。欠陥のあるテストは生産性を低下させ、継続的なテストをメリットではなく、負担のように感じさせてしまう。
これを克服するには、サービス仮想化を採用して依存関係をシミュレートする:外部サービスが利用できなかったり信頼できなかったりする場合、サービス仮想化によって予測可能で制御可能なシミュレーションが可能になります。このアプローチでは、サードパーティのシステムへの依存を排除し、ネットワークの問題やサービス停止によって引き起こされるテストの不確実性を低減します。

長いフィードバックループ:遅いテスト・スイートはパイプラインを遅延させ、継続的インテグレーションの目的全体を台無しにする。テストに時間がかかり過ぎると、開発者はテストをスキップするか、変更を一括して行うことになり、継続的テストの価値を高める迅速なフィードバックが失われる。
これを克服するには、テストの優先順位付けと並列化を行い、実行時間を短縮する。最も重要なテストを最初に実行し、独立したテストを並行して実行する。コード変更に基づくスマートなテスト選択は、フィードバック時間を劇的に短縮し、並列実行はインフラ利用を最大化する。継続的テストを正しく行うには訓練が必要だが、その見返りは大きい!


継続的テストツールの展望

効果的な継続的テストは、自動化、オーケストレーション、ソフトウェアデリバリパイプライン全体の可視化をサポートする統合ツールのセットに依存している。これらのツールは、単にテストを実行するだけでなく、適切なテストを適切なタイミングで、適切な環境で、意味のあるフィードバックとともに実行することを保証する。

以下は、検討すべき工具の主要カテゴリーである:

  1. テスト自動化フレームワーク:継続的テストの中心は、ユニットテスト、APIテスト、UIテスト、パフォーマンステスト、セキュリティテストのための自動テストスクリプトである。これらのフレームワークは、テストを書いて整理し、大規模に実行し、テストの種類を問わず一貫した結果を報告するための構造を提供する。o9 Solutionsは、OpenText Core Performance Engineeringを使用することで、テストスクリプトの作成を最大70% 加速できることを発見しました。
  2. テスト環境の管理:有効なテスト結果を得るためには、信頼性の高い本番同様の環境が不可欠です。環境ツールは、動的なプロビジョニング、コンフィギュレーション、分離をサポートする。また、仮想化やモッキング技術によって、利用できないサービスやサードパーティのサービスをシミュレートすることもできる。
  3. テストデータの管理:優れたテストには優れたデータが必要だ。これらのツールにより、チームはプライバシー規制の遵守を確保しながら、環境間でテストデータセットの生成、マスク、リフレッシュを行うことができる。適切なテストデータがあれば、欠陥が少なくなり、テスト結果の信頼性が高まる。
  4. テストレポートと分析:継続的テストは大量のテスト結果を生み出します。レポーティング・ツールは、データを実用的な洞察に絞り込むのに役立ち、傾向を特定し、回帰を強調し、ビジネス・リスクに基づくゴー/ノーの決定をサポートする。
  5. コラボレーションとガバナンスツール:最後に、バージョン管理、トレーサビリティ、および監査可能性を可能にするツールは、テストを開発、セキュリ ティ、およびコンプライアンス要件と整合させる上で、重要な役割を果たす。
  6. CI/CDオーケストレーション・ツール:これらのツールは、コードの変更に応じて自動テストをトリガーする。ビルド、テスト、デプロイの流れを管理し、テストがデリバリーの各段階に組み込まれるようにする。また、パイプラインのカスタマイズ、条件ロジック、通知システムや分析システムとの統合も可能だ。

継続的テスト戦略の強化

継続的テストは、それを支えるプラットフォームがあってこそ、その強さを発揮する。自動ソフトウェアテストの規模拡大、テスト環境の改善、DevOpsワークフローへの品質ゲートの統合など、オープンテキストはリスクを低減しながら、より迅速なテストの実施を支援します。

テストソリューションと ソフトウェアデリバリープラットフォームをご覧ください。

脚注