自動テストカバレッジを改善する方法 

Taryn McMillan 著

自動テストカバレッジとは、自動化されたテストによってどの程度アプリケーションが検証されたかを意味します。通常はパーセンテージで表される数値です。テストカバレッジが高いことは、リリースの前にアプリケーションのより広い範囲がテストされ、エンドユーザーのエクスペリエンスを妨げる欠陥が少なくなり、ソフトウェアの品質が向上することを意味します。

テスト自動化カバレッジの改善に向けた具体的な5つのアクション

  1. 自動化するテストを決定する
  2. 適切なテストツールを選択する
  3. 適切なテストカバレッジ種類を選択する
  4. 自動テストカバレッジを評価するためのメトリクスを決定する
  5. テストのメンテナンスに投資する

1.自動化するテストを決定する

何を自動テストツールによってテストし、何を手動でテストするかを決定するための具体的なガイドラインを策定するべきです。自動化の範囲を決定する作業は、自動化実行可能性分析と呼ばれることがあります。 

アジャイルテストクアドラントを利用すると、目的によってテストを分類できます。開発のガイドとなる技術指向のテストは、ほぼどのような場合も自動化の良い候補です。

個々のテストに関して考慮すべきその他の条件は以下のとおりです。 

  • どの程度頻繁にテストを繰り返す必要があるか
  • 機能テストか非機能テストか
  • テストのスケールおよびスコープ
  • テストの全体的な目標およびリソース配分
  • プロジェクトの全体的な目標
TestRail製品ページ

2.適切なテストツールを選択する

自動化フレームワークを決定する前にプロジェクトの要件を考慮します。SeleniumCypressPlaywrightが最もよく知られていますが、アプリケーションによっては、最適な選択肢ではないかもしれません。フレームワークを採用する前にリサーチを行い、サポート対象言語、クロスプラットフォーム互換性、使いやすさなどの観点から必要条件を検討します。

テスト管理ツールの選択についても同様に検討します。要件カバレッジに関しては、要件とテストケースの間のリンクをわかりやすく視覚化するツールが必要になるでしょう。たとえば、TestRailのようなツールは、双方向の統合によってJiraの課題とTestRailの特定のテストケースおよび結果をリンクし、QAチームと開発チームの両方が相手の作業を参照できるようにします。

3.適切なテストカバレッジ種類を選択する

カバレッジ種類はテストの特定の領域で不足しているカバレッジを検出するのに役立ちます。 

QAチームによっては、カバレッジ種類とメトリクスが同じ意味で使われることもあります。 

カバレッジ種類はカバレッジの計測に使用するアプローチです。メトリクスは実際の計測値そのものです。 

下の表は、一般的な5つのカバレッジ種類とそれを利用するべき理由です。

種類定義利用する理由
製品カバレッジどの程度製品の全体的な機能をテストしたかを計測します。テストがすべての重要な機能をカバーしたことを保証します。複雑でリスクの高い領域、または未テストの領域を検出するのに役立ちます。
要件カバレッジユーザーストーリー、機能要件、非機能要件を特定のテストケースに対応付けます。ストーリーおよびすべてのプロジェクト要件が検証されたことを保証します。
リスクカバレッジテスト作業がどの程度ハイリスク領域をカバーしたかに着目します。ユーザー認証などの脆弱な領域に的を絞ったテストを作成するのに役立ちます。
互換性カバレッジさまざまなプラットフォーム、ブラウザー、OS、その他の技術のうち、どこまでがテストに含まれているかを検証します。複数の環境および構成にわたってユーザーエクスペリエンスが一貫していることを保証するのに役立ちます。
境界値カバレッジテストがどの程度境界値またはエッジケースをカバーしているかに着目します。入力値の範囲内でバグやその他の問題を検出するのに役立ちます。

4.自動テストカバレッジを評価するためのメトリクスを決定する

テストカバレッジメトリクスは、カバレッジがどの程度網羅されているかを評価します。テストプロセスを評価する際に検討するべきメトリクスには、以下のようなものがあります。

  • テストの不安定性: 不安定なテストが多いことは、コードまたはテストスクリプトに潜在的な問題があることを示唆します。常に安定していないテストを突き止めるには、そういったテストを分離して再現する必要があります。 
  • 欠陥密度: 高い欠陥密度は、エラーが起きやすい領域を指し示します。カバレッジが不足しており、自動化するメリットがある領域を示している場合があります。また、カバーされたコードが特に複雑である場合もあります。
  • テスト実行時間ソフトウェアが複雑になるにつれて、当然、テスト実行時間は増加します。しかし、明確な理由のない突然の増加には注意するべきです。それはテスト構成の問題を示している場合があります。全体的なテスト実行時間を短縮したい場合、テストを並行化することを検討します。 
  • CI/CDパイプラインの安定性: CI/CDが不安定であるとテスト結果が信頼できなくなるということをチームに意識させます。不安定性の根本的な原因は、テストが不安定であることから外部のAPIの問題までさまざまな可能性があります。

5.テストのメンテナンスに投資する

通常、テストのメンテナンスは、特定のフェーズというよりも、スプリントを通して継続されるプロセスです。メンテナンスはレグレッションテストとともにソフトウェアの最近の変更に対処します。 

テストのメンテナンスに分類されるアクティビティには、以下のようなものがあります。

  • 新機能または要件をカバーするテストを追加する
  • プロジェクトの変更または新規テストデータを反映するようテストを更新する
  • 壊れたテストまたは意味のなくなったテストを削除し、不安定なテストを修正する
  • 過去のテストサイクルで見つかった欠陥を分析する

よいテストカバレッジとは

何がよいテストカバレッジであるかは、コンテキストによって多少異なります。

一般的には、よいカバレッジとは以下のような特徴を備えています。 

  • バランスの良いテストケースのバラエティ: 具体的なテストケースの構成はテストの目標によって異なります。しかし、標準的な動作だけでなく、例外的なシナリオもテストするのはよいプラクティスです。たとえば、単体テストでは、数値入力として0などの予期しない値を使用します。互換性テストでは、さまざまなブラウザーでテストを行います。 
  • コードカバレッジと機能カバレッジの両立: よいテストカバレッジには、コードベースのテストだけではなく、アプリケーションの機能のテストも含まれているべきです。
  • 計測可能: テストカバレッジは定量化できなければなりません。この点は、テスト戦略の全体的な健全性を測るうえでも、要件カバレッジやリスクカバレッジなどの個々のメトリクスを計測するうえでも重要です。
  • 適応性が高い: 自動化されたテストはソフトウェアの最新の状態をカバーしなければなりません。つまり、開発者が新機能を追加したり、テスターが新しいバグを発見したりした場合、テストを修正して追加の要件をカバーする必要があります。 
  • メンテナンスが容易: テストカバレッジは容易に維持できなければなりません。品質の高い自動化フレームワークおよびテスト管理ソフトウェアを採用すると、カバレッジの維持にかかる時間を短縮できます。

テスト管理ツールを利用して自動テストカバレッジを改善する方法 

テスト管理ツールは、構造化されたフレームワークを提供し、自動テストケースの管理を合理化することで、自動テストカバレッジを改善します。自動テストカバレッジの改善において、TestRailが特に役立つ点は以下のとおりです。

  • 一元化されたテストケースリポジトリ
    • 手動テストケースと自動テストケースの両方に対応する一元化されたリポジトリがあると、整理が容易になります。
    • 自動化エンジニアは自動テストスクリプトをリポジトリにアップロードして特定のテストケースと関連付けることで可視性を確保し、どのテストがすでに自動化され、どのテストが依然として自動化を必要としているかを簡単に識別できます。
画像: 1つのコラボレーションプラットフォームで階層フォルダーを使用して自動テストケースと手動テストケースを管理、分類、追跡
  • テストカバレッジおよび要件トレーサビリティ
    • テストケースと要件またはユーザーストーリーをリンクする機能があれば、すべての要件を1つまたはそれ以上の手動または自動テストケースによって確実にカバーできます。
    • このようなリンクを確立することで、自動テストによってカバーされた要件を追跡し、テストカバレッジの不足を検出して、足りないシナリオを自動化することが可能になります。
  • 自動化ツールとの統合
画像: Selenium、単体テストフレームワーク、Jenkinsなどの継続的インテグレーション(CI)システムなど、一般的に利用されるツールのうちどれを利用している場合でも、TestRailはほぼどんなツールとでも統合できます
  • バージョン管理システム
    • バージョン管理システムと統合することで、自動化スクリプトに加えられた変更を確実に追跡できます。これによって、チームメンバー間のコラボレーションを促進し、常に最新版の自動テストが実行されるようにできます。
  • テスト実行およびスケジューリング
    • 決まった間隔で、または必要な時に自動テストの実行を計画しスケジュールする機能があると、開発ワークフローを中断することなく幅広いテストカバレッジを確保できます。
  • 総合的なレポートおよび分析
    • 充実したレポート機能は、テストカバレッジやテストの成功/失敗ステータス、一定期間のトレンドを可視化するのに役立ちます。このようなデータ駆動型アプローチは、チームが情報に基づいて自動カバレッジの改善に関わる決定を下せるよう支援します。
画像: QA活動の全体像を示すテスト分析およびレポートによってデータ駆動型決定を加速します。
  • コラボレーションおよびコミュニケーション
    • TestRailはテスト実施の進捗をリアルタイムに可視化し、プロジェクトのステークホルダーがテストアクティビティをモニターして情報に基づく決定を下すことを可能にします。テスター、開発者、ステークホルダーがテスト結果を共有し、フィードバックを提供し、効果的にコミュニケーションできるようにすることでコラボレーションが促進されます。結果として、自動化の目標に向けて皆の足並みが揃い、より幅広いテストカバレッジの達成につながります。

テストカバレッジに関しては、常に改善の余地があります。

TestRailの機能を活用すると、自動化作業を効率的に管理し、カバレッジの不足を検出し、高いレベルのテストカバレッジを実現できます。今すぐ30日間の無料トライアルを開始してください。

自動テストカバレッジのFAQ

なぜ高いテストカバレッジが重要なのですか?

以下の自動テストカバレッジの投資効率が高い領域の例を参照してください。 

  • トレーサビリティ: 自動化ツールはトレーサビリティを促進します。医療などの規制の厳しい業界では、トレーサビリティは企業のコンプライアンスを文書化する手段になります。
  • スケーラビリティ: モジュール化されたアプローチによってテストに取り組むと、テストカバレッジが柔軟になり、スケールアップが容易です。 
  • 問題の早期検出: アプリケーションの重要な領域をカバーするようテストカバレッジを構成すると、開発の初期に問題を検出するのに役立ちます。
  • 効率性: 最適化とは、重複するテストを削除し、カバレッジの不足を検出することを意味します。最適化によって、その後のテストシナリオでリソースを割り当てるのに最もふさわしい領域がわかります。
  • リスク軽減: 徹底したテストカバレッジによって、セキュリティ脆弱性やユーザーエクスペリエンスを損なう可能性があるその他の欠陥が見逃される確率を低減できます。
  • チームの自信: TestRailなどのツールを使用して要件とテストケースの間の関係を視覚化すると、テストに関してより自信が持てるようになります。 

テストカバレッジとコードカバレッジは何が違うのですか?

全体的なテストカバレッジと比較して、コードカバレッジはより細かいメトリクスです。コードカバレッジは主に単体テストにフォーカスし、定量化が容易です。

コードカバレッジを計算するには、テストスイートによってカバーされたコード行数を実行可能な行の総数で割ります。この値を100倍したものがカバレッジ率です。

コードカバレッジ = (テストによってカバーされたコード行数/総コード行数) x 100

さらに細かく分けると、テストでカバーされたブランチ、ステートメント、パスの数に着目し、合計コード行数と比較することもできます。 

いっぽう、テストカバレッジはより広いメトリクスであり、ソフトウェアの複雑な性質から、定量化はより困難です。 

1つのアプローチとして、すべてのプロジェクト要件のリストを用意します。このリストと、要件ごとに成功したテストの数を比較します。 

テストが成功している場合、要件はカバーされたとみなせます。カバーされた要件を数え、下記の式に従ってテストカバレッジを算出します。

テストカバレッジ = (カバーされた要件の数/要件の総数) x 100

テストカバレッジとコードカバレッジが同じ意味で使われていることがよくあります。これらは別個の、しかし関連するメトリクスです。どちらも自動テストの成功度合いを計測するのに役に立ちます。

次の表は、テストカバレッジとコードカバレッジの類似点と差異点を分類したものです。

テスト属性テストカバレッジコードカバレッジ
定義テストがどの程度プロジェクトの要件および機能をチェックしたかテストがどの程度プロジェクトの要件および機能をチェックしたか
機能テストまたは非機能テスト機能テストおよび非機能テストの両方に関係する通常は機能テストに関係するが、パフォーマンステストなどの非機能シナリオでも役に立つ場面がある
テストの種類統合テスト、受け入れテスト、レグレッションテスト単体テスト、システムテスト、統合テスト
関連するツールテスト管理ではTestRail、課題追跡ではJira、テスト自動化ではSeleniumなどPythonではCoverage.py、JavaではJaCoCo、JavaScriptではIstanbul など
ホワイトボックステストまたはブラックボックステストブラックボックステストまたはホワイトボックステストホワイトボックステスト
計測可能性テストカバレッジは要件、機能、利用シナリオなど多くの要素を含む幅広い用語のため、定量化は困難数式を使用した定量化が容易

(この記事は、開発元Gurock社の Blog 「How to Improve Automation Test Coverage」2022年12月4日の翻訳記事です。)

関連する製品

テスト管理ツール TestRail

テストケースの管理やテスト結果の記録、チームでの情報共有など、Excelを使ったテスト管理の業務に限界を感じていませんか?TestRailはシンプルで使いやすいUIを提供し、テストにかかるさまざまな管理コストの削減に貢献します。

■ TestRailの特長 ■

  • テストにさまざまな情報を関連づけて一元管理
  • Webブラウザー上でテストケースを簡単に入力や編集可能
  • テスト実施の準備と結果の共有が容易
  • 進捗や比較などのレポートを提供
  • 要件 / 課題管理ツールやテスト自動化ツールと連携

日本国内では、テスト管理にExcelを使っていたお客さまからの乗り換えが多く、Web上で完結するテスト管理を実現されています。

TestRail でテスト管理のお悩みを解決しませんか?

eBook 公開中

Paul Gerrard著 効果的なテスト管理12の秘密 (日本語)

テスト計画やテスト管理に役立つ12のトピックを解説します。

詳細はこちら