DevOps 技術: テストデータの管理

自動テストは、最新のソフトウェア配信手法の重要な要素です。単体テスト、統合テスト、システムテストを一連の包括的なセットとして実行できることは、アプリが想定どおりに動作し、本番環境に安全にデプロイできることを確認するうえで非常に重要です。テストで現実的なシナリオを検証するには、現実的なデータをテストに提供することが重要です。

手動テストや自動テストなど、テストスイート全体のあらゆる種類のテストでテストデータが必要となるため、これは非常に重要です。良いテストデータを使用すると、一般的または高価値のユーザー ジャーニーの検証、エッジケースのテスト、欠陥の再現、エラーのシミュレーションを行うことができます。

ただし、テストデータを効果的に使用、管理することは簡単ではありません。テストの範囲外で定義されたデータに過度に依存すると、テストの安定性が低下し、メンテナンス費用が増加する可能性があります。外部データソースへの依存により、遅延が発生しテストのパフォーマンスに影響する場合があります。本番環境データには機密情報が含まれる可能性があるため、本番環境データのコピーにはリスクが伴います。これらの課題に対処するには、テストデータの慎重かつ戦略的な管理が求められます。

テストデータ管理の実装方法

DevOps Research and Assessment(DORA)の分析によると、成功したチームは次の基本原則に基づいてテストデータ管理に取り組んでいます。

  • 完全な自動テストスイートを実行するための十分なテストデータが利用可能である。
  • 自動テストスイート用のテストデータをオンデマンドで取得できる。
  • チームが実行できる自動テストが、テストデータによる制限または制約を受けない。

テストデータの管理プロセスを改善するには、すべての開発チームでこれらの条件をすべて満たすようにしてください。これらを実践することは、全般的なテストの自動化継続的インテグレーションの機能にも好影響を与える可能性があります。

テストデータ管理の一般的な注意点

テストデータの管理は困難な場合があります。テストデータの管理に関する一般的な問題には、次のようなものがあります。

  • テストでのデータへの過度の依存。特に、単体テストではテスト外部のデータや状態に依存しないようにしてください。
  • テストに関連する部分や重要な部分を特定するのではなく、本番環境データベース全体のコピーを使用する。
  • 機密データのマスキングやハッシュ化を行わない。
  • 古いデータや関連性がなくなったデータに依存する。

テストデータ管理の改善方法

テストデータをより効果的かつ効率的に使用する方法は、次のとおりです。

  1. 単体テストを優先する。単体テストはテスト対象のコードを除き、互いに、またシステム内の他の部分から独立して行われる必要があります。単体テストでは外部データに依存しないでください。テスト自動化ピラミッドで定義されているように、テストの大部分は単体テストで構成する必要があります。適切に設計されたコードベースに対して実行される適切な単体テストは、上位レベルのテストよりもはるかに簡単に優先順位を決定でき、メンテナンス費用も大幅に抑えられます。単体テストの範囲を広げると、外部データを消費する上位レベルのテストへの依存を最小限に抑えることができます。

    テスト自動化ピラミッド。

  2. テストデータへの依存を最小限に抑える。テストデータには注意深い継続的なメンテナンスが必要です。API とインターフェースの進化に合わせて、関連するテストデータを更新または再作成する必要があります。このプロセスは、チーム ベロシティに悪影響を与える可能性がある費用の一部を占めています。そのため、自動テストの実行に必要なテストデータの量を最小限に抑えることをおすすめします。

  3. テストデータを分離する。入力が制御され、想定した出力と実際の出力との比較が可能な、明確に定義された環境でテストを実行します。特定のテストで使用されるデータが対象テストに明示的に関連付けられており、他のテストまたはプロセスによって変更されないようにします。可能な限り、テストではアプリケーションの API を使用して、テストの設定の一環として必要な状態を作成する必要があります。テストデータを分離することも、テストを並行して実行するための前提条件です。

  4. データベースに保存されているテストデータへの依存を最小限に抑える。次の理由から、データベースに保存されたテストデータを維持することが特に難しい場合があります。

    1. テストの独立性が不十分。データは、データベースによって永続的に保存されます。データへの変更は、明示的にリセットされない限り、テストすべてにわたって保持されます。テスト入力の信頼性が低いと、テストの独立性の維持がさらに難しくなり、並行できなくなります。
    2. パフォーマンスへの影響。実行速度は、自動テストの重要な要件です。通常、データベースの操作は、ローカルに保存されたデータを操作するよりも時間がかかり、煩雑です。必要に応じて、インメモリ データベースを優先してください。
  5. テストデータをすぐに利用できるようにする。完全な本番環境データベースのコピーに対してテストを実行すると、リスクが生じます。データの更新は困難かつ処理速度の低下を伴う場合があります。その結果、データが古くなる可能性があります。本番環境データには機密情報が含まれる場合もあります。代わりに、テストに必要な関連するデータのセクションを特定します。これらのセクションを定期的にエクスポートして、簡単にテストで使用できるようにします。

テストデータ管理の測定方法

テストデータ管理方法が改善されるにつれて、前述の基本原則に照らして進捗状況を測定することが重要になります。

  1. 完全な自動テストスイートを実行するための十分なテストデータが利用可能である。これは開発者とテスト担当者が、テストスイートで使用するデータの管理と操作に費やす時間をトラッキングすることで測定できます。また、業務に十分なデータがあるか、あるいはデータ量が業務の妨げとなっていると感じているかどうかをチームに尋ねて、知覚的尺度(つまり、アンケート)として把握することもできます。
  2. 自動テストスイート用のテストデータをオンデマンドで取得できる。これは、使用可能な主要なデータセットの割合、データセットへのアクセス頻度、データセットの更新頻度として測定できます。
  3. チームが実行できる自動テストが、テストデータによる制限または制約を受けない。これは、追加のテストデータを取得することなく実行できる自動テストの数として測定できます。また、テストデータによって自動テストに関する取り組みが制限されていると感じているかどうかをチームに尋ねて、知覚的尺度(つまり、アンケート)として把握することもできます。

次のステップ