コードなしでJavaアプリケーションテストのカバレッジを計測する

Jtest の jtestcov を利用すると Java アプリケーションのアーカイブファイルでアプリケーションカバレッジが計測できることをご存じでしょうか。受入れテストやQAチームによるテストなどにおいてソースコードが手元に無い場合でも jtestcov でアプリケーションテストのコードカバレッジを計測できます。

本記事では jtestcov を利用したアプリケーションカバレッジの計測をご紹介します。

なお、アプリケーション開発においてカバレッジを計測するメリットは以下の記事で取り上げています。ぜひご一読ください。

jtestcov とは

jtestcov は Jtest 2023.1 で搭載されたカバレッジ計測専用ツールです。
jtestcov を利用するとアプリケーションのアーカイブファイルをスキャンしてアプリケーションテスト実行時のカバレッジレポートを作成、 Parasoft DTP にアップロードすればアプリケーションの包括的なカバレッジを計測することができます。
さらに、これまでのカバレッジ計測では必須だった静的カバレッジファイルの生成を省略してカバレッジレポートを作成できるためアプリケーションカバレッジ計測の効率化を実現します。
Parasoft Jtest は テストコードは不要で、手動またはテスト自動化ツールで実行されたUIテストのカバレッジを計測。
テストの精度向上やエビデンス作成工数を削減します。

>> Parasoft Jtest の詳細はこちら <<

jtestcov のアプリケーションカバレッジ計測

jtestcov では 3 パターンのカバレッジレポートを作成できます。
  1. 静的カバレッジデータと実行時データに基づいたカバレッジレポート
    • ソースコードを解析して生成する静的カバレッジデータと実行時データを使用します。
  2. アプリケーションのアーカイブファイルと実行時データに基づいたカバレッジレポート
    • アプリケーションのアーカイブファイルと実行時データを使用します。
  3. 実行時データに基づいたカバレッジレポート
    • アプリケーションの実行時データだけを使用します。
それぞれのカバレッジレポート作成方法をご紹介します。

パターン1:静的カバレッジデータと実行時データに基づいたカバレッジレポート

Jtest がソースコードを解析して生成する静的カバレッジデータとカバレッジエージェントで収集する実行時カバレッジデータからカバレッジレポートを作成します。
※このパターンによるカバレッジレポート作成にはソースコードが必要です。
カバレッジ計測方法
1. 静的カバレッジデータ生成
Jtest Maven、Gradle または Ant プラグインのビルドプロセス内で生成します。以下のコマンドを実行して生成される monitor.zip に含まれる static_coverage.xml ファイルが静的カバレッジデータです。
  • Maven
    • mvn package jtest:monitor
  • Gradle
    • gradle assemble jtest-monitor -I <JTEST_HOME>/integration/gradle/init.gradle
  • Ant :
    • ant -lib <JTEST_HOME>/integration/ant/jtest-ant-plugin.jar -listener com.parasoft.Listener jtest-monitor
2. カバレッジエージェント構成
カバレッジエージェントは以下のファイルと -javaagent フラグで構成します。
  1. 「1. 静的カバレッジデータ生成」の monitor.zip に含まれる agent.properties
    • カバレッジ計測のスコープ等、エージェントの設定を行うためのプロパティファイルです。
  2. カバレッジを計測するアプリケーションにカバレッジエージェント情報を渡す -javaagent フラグ
    • 「1. 静的カバレッジデータ生成」の monitor.zip に含まれる agent.sh/agent.bat スクリプトを実行して作成します。
-javaagent フラグはアプリケーションの起動時に渡す必要があります。WEB アプリケーションサーバーで稼働するアプリケーションの場合は WEB アプリケーションサーバーの起動スクリプトに追加します。
例:
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"E:\jtest\monitor\agent.jar"=settings="E:\jtest\monitor\agent.properties",runtimeData="E:\jtest\monitor\runtime_coverage"
3. アプリケーションテスト
アプリケーションのテストを実施します。
4. カバレッジレポート生成
「1. 静的カバレッジデータ生成」で作成した静的カバレッジデータと、「3. アプリケーションテスト」中に収集された実行時カバレッジデータ (-javaagent フラグの "runtimeData" で指定したディレクトリに自動生成される。) でカバレッジレポートを作成します。
例:
java -jar "<JTEST_HOME>\integration\coverage\jtestcov.jar" -static [static_coverage.xml ファイルパス] -runtime [実行時カバレッジデータファイルパス または ディレクトリ] -publish
作成されたレポートには計測したカバレッジのパーセンテージとメソッド毎の詳細が出力されます。

HTMLレポートに行カバレッジのパーセンテージが出力される

HTMLレポートにメソッド毎のカバレッジ情報が出力される

コード行に紐づいたカバレッジ情報を確認するには、カバレッジデータを Parasoft DTP にアップロードするか IDE プラグインにカバレッジレポート (coverage.xml) をインポートします。

Parasoft DTP にアップロードしたカバレッジデータとコード情報

パターン2:アプリケーションのアーカイブファイルと実行時データに基づいたカバレッジレポート

パターン1 の静的カバレッジデータの代わりにカバレッジ計測対象のアプリケーションのアーカイブファイル (war、ear、jar、zip) とカバレッジエージェントで収集するカバレッジデータからカバレッジレポートを生成します。
カバレッジ計測方法
1. カバレッジエージェント構成
カバレッジエージェントは以下のファイルと -javaagent フラグで構成します。
  1. <JTEST_HOME>\integration\coverage\agent.properties
    • カバレッジ計測のスコープ等、エージェントの設定を行うためのプロパティファイルです。
  2. カバレッジを計測するアプリケーションにカバレッジエージェント情報を渡す -javaagent フラグ
    • Jtest インストールディレクトリ内の agent.jar および agent.properties 、任意の実行時カバレッジデータ出力先を設定します。
-javaagent フラグはアプリケーションの起動時に渡す必要があり、WEB アプリケーションサーバーで稼働するアプリケーションの場合は WEB アプリケーションサーバーの起動スクリプトに追加します。
例:
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"<JTEST_HOME>\integration\coverage\agent.jar"=settings="<JTEST_HOME>\integration\coverage\agent.properties",runtimeData="E:\jtest\monitor\runtime_coverage"
2. アプリケーションテスト
アプリケーションのテストを実施します。
3. カバレッジレポート生成
テスト対象アプリケーションのディレクトリまたはアーカイブファイルと、「2. アプリケーションテスト」中に収集された実行時カバレッジデータ (-javaagent フラグの "runtimeData" で指定したディレクトリに自動生成される。) でカバレッジレポートを作成します。
例:
java -jar "<JTEST_HOME>\integration\coverage\jtestcov.jar" -app [アプリケーションのディレクトリ または アーカイブファイルパス] -runtime [実行時カバレッジデータファイルパス または ディレクトリ] -publish

HTMLレポートに行カバレッジのパーセンテージが出力される

HTMLレポートにメソッド毎のカバレッジ情報が出力される

コード行に紐づいたカバレッジ情報を確認するには、カバレッジデータを Parasoft DTP にアップロード、さらに  Parasoft DTP にアップロード済みのソースコード情報とカバレッジデータを紐づけます。

Parasoft DTP にアップロード済みのコード情報とカバレッジデータを紐づける

パターン3:実行時データに基づいたカバレッジレポート

パターン 1 の静的カバレッジデータやパターン 2 のアーカイブファイルは不要でカバレッジエージェントが収集したカバレッジデータだけを利用してカバレッジレポートを生成します。
アプリケーション上で実行されたクラスの情報だけが含まれる簡易的なカバレッジレポートを生成されるため、カバレッジデータの詳細を確認するにはアプリケーションのソースコードまたは静的カバレッジデータが存在する DTP にカバレッジデータをアップロードする必要があります。
カバレッジ計測方法
1. カバレッジエージェント構成
カバレッジエージェントは以下のファイルと -javaagent フラグで構成します。
  1. <JTEST_HOME>\integration\coverage\agent.properties
    • カバレッジ計測のスコープ等、エージェントの設定を行うためのプロパティファイルです。
  2. カバレッジを計測するアプリケーションにカバレッジエージェント情報を渡す -javaagent フラグ
    • Jtest インストールディレクトリ内の agent.jar および agent.properties 、任意の実行時カバレッジデータ出力先を設定します。
-javaagent フラグはアプリケーションの起動時に渡す必要があり、WEB アプリケーションサーバーで稼働するアプリケーションの場合は WEB アプリケーションサーバーの起動スクリプトに追加します。
例:
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"<JTEST_HOME>\integration\coverage\agent.jar"=settings="<JTEST_HOME>\integration\coverage\agent.properties",runtimeData="E:\jtest\monitor\runtime_coverage"
2. アプリケーションテスト
アプリケーションのテストを実施します。
3. カバレッジレポート生成
テスト対象アプリケーションのディレクトリまたはアーカイブファイルと、「2.アプリケーションテスト」中に収集された実行時カバレッジデータ (-javaagent オプションの "runtimeData" で指定したディレクトリに自動生成される。) でカバレッジレポートを作成します。
例:
java -jar "<JTEST_HOME>\integration\coverage\jtestcov.jar" -runtime [実行時カバレッジデータファイルパス または ディレクトリ] -publish
作成されたレポートには行カバレッジの情報は出力されずアプリケーションの包括的なカバレッジ情報が出力されます。

HTMLレポートには行カバレッジの情報は出力されない

HTMLレポートにはアプリケーション全体のカバレッジ情報が出力される

コード行に紐づいたカバレッジ情報を確認するには、カバレッジデータを Parasoft DTP にアップロード、さらに  Parasoft DTP にアップロード済みのソースコード情報とカバレッジデータを紐づけます。

Parasoft DTP にアップロード済みのコード情報とカバレッジデータを紐づける

※本記事では概要のご紹介となります。各カバレッジレポートの計測方法や jtestcov の詳細は Jtest のドキュメントをご確認ください。

まとめ

今回 Jtest のカバレッジツール jtestcov を利用したアプリケーションカバレッジ計測をご紹介しました。
ソースコードを利用できない環境におけるテストのカバレッジ計測や効率的なアプリケーションカバレッジ計測の実現に興味がございましたら、ぜひ一度 jtestcov をお試しください。

Parasoft Jtestについて

 

Jtestは、テスト工数の大幅削減とセキュアで高品質なJavaシステムの開発を強力にサポートするJava対応テストツールです。4,000個以上のコーディング規約をもとにソースコードを静的に解析し、プログラムの問題点や処理フローに潜む検出困難なエラーを検出します。さらに、JUnitを用いた単体テストについて、作成、実行、テストカバレッジ分析、テスト資産の管理といった単体テストに係る作業をサポートし、単体テストの効率化を促進します。

Top