テストデータをよりスマートに扱う方法
自動化されたエンドツーエンドテストをおこなう上で重要なことの一つとして、テストデータの生成があります。システムが期待通りに動作することを確認するために、多様なテストデータの組み合わせが必要です。
これには、ハッピーパスのテストシナリオやエッジケースが含まれます。たとえば、ログインページをテストする場合、有効なユーザー名と無効なユーザー名とパスワードの組み合わせがテスト データに混在している可能性があります。また、空文字、null 値、unicode 文字をはじめ、任意の組み合わせの特殊文字が含まれる可能性があります。
テストデータがテストのボトルネックにならないように、テストデータを効率的に処理するための方法をいくつか見てみましょう。
テストデータの生成方法を選択する
テストデータの生成には、手動と自動の 2 種類の方法があり、それぞれに長所と短所があります。
手動のテストデータ生成では、アプリケーションのテストに使用する入力をより細かくコントロールできます。テスト担当者は、クリティカル シンキング(批判的思考)のスキルと経験によって、ポジティブテスト(正常系)とネガティブテスト(異常系)の両方に有用な詳細なテストデータを作成できます。これは事前に定義された静的なデータであり、実行時に自動テストに渡されます。
静的なテストデータの唯一の欠点は、常にメンテナンスしていないと、データの値が時間の経過とともに陳腐化する可能性があることです。また、あるシステムでテストデータの情報を変更した場合、同じテストデータを使用する他のシステムに影響する可能性があります。そのため、静的なテストデータの変更によって、成功するテストと失敗するテストのあるシナリオになるかもしれません。
自動のテストデータ生成では、柔軟性が高まると同時に、テスト実行のたびにテストデータを変更することよる問題が防止されます。テストデータは実行時に自動的に生成され、手動による介入は一切ありません。そのため、テストデータを継続的にメンテナンスする必要がなくなります。
自動生成の最大の欠点は、システムを検証するために使用される入力データがテスト実行のたびに動的に変化するため、入力データをコントロールするのが難しくなることです。テストに失敗した場合、どのテストデータの組み合わせがテストに失敗したのかを特定するために以前のテスト実行と比較するのは困難です。また、テストデータの組み合わせが適切な数ではなく、本番データとかけ離れている場合もあります。
どの方法が適切でしょうか? それは、プロジェクトの状況や何をしようとしているかによって異なります。
本番環境に近いテストデータを使用する
テストデータは、本番環境をある程度模倣する必要があります。実際のユーザーが本番環境で使用しないようなテストデータを持っていても、何のメリットもありません。
多様なテストデータを確実に準備するための良い方法は、本番環境のデータをコピーして機密性の高い部分を隠蔽し、QA環境でこのデータを使用して、実際の動作に近い結果を得ることです。そうすることで、実際のユーザーがアプリケーションを操作するときに近い入力データをテストで利用できます。
本番環境からテストデータを取得する方法は、実行時におこなうこともできますし、バックグラウンドで実行されるバッチなどで定期的におこなうことも可能です。
ダミーのテストデータを生成するジェネレータを使用する
テストデータを自動生成する場合、必須でない限り、各アクションを実行するために個別にユーティリティを作成する必要はありません。ダミーのデータを生成するオープンソースのライブラリとしては、Faker、PHP Faker、Perl Faker、Ruby Faker、Java Faker、jfairy、fakeit などがあります。また、より堅牢なテストデータ生成機能を持つ有料ツールやライブラリも数多く存在します。
テストデータを管理するための戦略を持つ
手動のテストデータ生成では、メンテナンスが最大の問題となります。アプリケーションの複雑さに伴ってテストデータの量が指数関数的に増加する場合は特にそうです。
増大するテストデータのニーズに対応するには、Excelファイル、構成ファイル、またはデータベースでデータを管理します。自動化テストを実行する際には、実行時にこれらのファイルを渡します。また、一部のテストデータが古くなった場合に備えて、すべてのテストデータのバックアップを取っておきましょう。
テストデータの問題を防ぐために有効な方法のひとつは、開発環境、QA環境、本番環境など、環境ごとにデータを用意することです。多様なデータセットを使用することは、システムのテストに役立つほか、テストカバレッジを増加させます。
作者について:
Raj Subrameyerは、国際的な基調講演者、ライター、およびキャリアコーチであり、技術的なバックグラウンドを豊富に持っています。 彼のBlog(rajsubra.com/blog/)では、読者の生活に役立ち、インスピレーションを与えるニュース、リソースを投稿しています。
(この記事は、開発元 Ranorex 社 Blog 「Smarter Ways to Handle Test Data」2020年6月4日の翻訳記事です。)