このトピックでは、Parasoft アプリケーション カバレッジ ワークフローの一部として SOAtest を使用する方法について説明します。アプリケーション カバレッジ ソリューションの使用に関する完全な情報については、「Collecting Coverage for Web Applications」を参照してください。このセクションの内容:

はじめに

Parasoft アプリケーション カバレッジ ソリューションを使用すると、実行中のアプリケーションに対してテストを実行しながら、アプリケーションのコード カバレッジを測定できます。カバレッジは、実行中の単一のアプリケーションから、または複数のバックエンド サービスで構成されるアプリケーションから収集できます (同じテスト ケースの実行中に、すべてのバックエンド サービスからカバレッジを収集できます)。これにより、既存のテストスイートの有効性を評価し、追加のテストが必要な箇所を判断し、アプリケーションの進化に合わせてより効率的にテストを実行することができます。SOAtest for Java/dotNET に付属のカバレッジ エージェントを利用してアプリケーション カバレッジを収集できます。これにより、テストの実行中にアプリケーションを監視できます。

アプリケーション カバレッジは、静的および動的カバレッジ データを収集して DTP にアップロードして表示することによって取得されます。

  • 静的カバレッジ データは、アプリケーションで使用できるすべてのソース コードの説明です。
    • 静的カバレッジ ファイルは、Jtest または dotTEST を使用してプロジェクトのソース コードを分析するか (推奨される方法)、SOAtest に付属のカバレッジ ツールを使用してアプリケーション バイナリを分析することによって作成できます。
    • 静的カバレッジ ファイルは、それを作成したツール (つまり、Jtest/dotTEST またはカバレッジ ツール) によって DTP にアップロードされます。
  • 動的 (ランタイム) データは、テストの実行時にカバレッジ エージェントによって収集されるカバレッジ データです。テストの実行時にどのコードがカバーされているかを測定します。
    • ランタイム カバレッジ データは SOAtest によって収集され、DTP にアップロードされます。
  • データは DTP 上で自動的にマージされます。

次のステップでは、SOAtest によるアプリケーション カバレッジのワークフローを説明します。

  1. 静的カバレッジ ファイルを生成します。アプリケーションのソース コードにアクセスできる場合は、静的カバレッジ ファイルを Jtest/dotTEST によって .xml または .data 形式で生成する必要があります。この方法には他の方法に比べていくつかの利点があるためです。アプリケーションのソース コードにアクセスできない場合は、SOAtest に付属のカバレッジ ツールを使用してアプリケーション バイナリを分析することによって、静的カバレッジ ファイルを生成することもできます。詳細については、以下の「静的カバレッジ ファイルの生成」を参照してください。
  2. カバレッジ エージェントをテスト対象アプリケーション (AUT) に接続します。カバレッジ エージェントは SOAtest に同梱されており、テスト対象アプリケーションの実行中に実行されるコードを監視できます。
  3. カバレッジ エージェントに接続してランタイム カバレッジを収集し、データを DTP にアップロードするように SOAtest を構成します。
  4. 自動化プロセスの一部として SOAtest を使用してテストを実行します。
  5. カバレッジ エクスプローラーで DTP 上のアプリケーション カバレッジを確認します。

SOAtest 2023.1 によって生成され、DTP にアップロードされるカバレッジ レポートは、DTP 2023.1 に送信する必要があります。以前のバージョンの DTP は、SOAtest 2023.1 によって生成されたカバレッジ レポートを適切に処理できません。

静的カバレッジ ファイルの生成

アプリケーションのソース コードにアクセスできる場合は、可能であれば Jtest または dotTEST を使用して .xml または .data 形式で静的カバレッジ ファイルを生成する必要があります。この方法には、ユーザー クラス、メソッド、行に関するメタデータが含まれること、DTP でカバレッジ結果を表示するときにカバレッジ データで注釈が付けられたソース コードの表示をサポートすることなど、いくつかの利点があります。これらのツールを使用して静的カバレッジ ファイルを生成する方法の詳細については、docs.parasoft.com にある Jtest または dotTEST のユーザー ガイドを参照してください。

SOAtest に付属のカバレッジ ツールを使用して静的カバレッジ ファイルを生成することもできますが、これには上記のソース コードを使用する利点がありません。これを行うには、SOAtest とは独立してツールを実行し、実行時にバイナリ、フィルター、ライセンス、およびその他のプロパティを渡す必要があります (下記のサンプル ライセンス プロパティ ファイルを参照)。Parabank に対して Jtest カバレッジ ツール (jtestcov) を使用した例を以下に示します。

java -jar jtestcov.jar -soatest -app c:/<PATH_TO_APPLICATION>/parabank.war -include com/parasoft/parabank/parasoft/** -settings c:/<PATH_TO_LICENSE_FILE>/license.properties

-Soatest フラグは、SOAtest ライセンスを渡すためにカバレッジ ツールによって使用されます。これは、上の例のように SOAtest から独立してカバレッジ ツールを実行する場合に必要です。アプリケーション カバレッジ設定を使用して soatestcli を実行すると、カバレッジ ツールの起動時にライセンスが自動的に渡されます。java -jar jtestcov.jar help を実行すると、使用可能なすべてのコマンドとオプションを確認できます。

サンプル ライセンス プロパティ ファイル
# === LICENSE ===

# === END USER LICENSE AGREEMENT ===
# Set to true to accept the Parasoft End User License Agreement (EULA).
# Please review the EULA.txt file included in the product installation directory.
#parasoft.eula.accepted=false

# === LOCAL LICENSE ===
# Enables local license - be sure to specify password.
#jtest.license.use_network=false

# Specifies password for the local license. 
#jtest.license.local.password=[LICENSE PASSWORD]

# === NETWORK LICENSE ===
# Enables network license - be sure to configure DTP server settings.
#jtest.license.use_network=true

# Specifies type of the network license (edition).
# Supported editions: desktop_edition, desktop_compliance_edition, server_edition, server_compliance_edition
#jtest.license.network.edition=server_edition

# Enables specific list of license features
#jtest.license.network.edition=custom_edition
#jtest.license.custom_edition_features=Jtest, Automation, Desktop Command Line, DTP Publish, Coverage, Test Impact Analysis


# === DTP SERVER SETTINGS ===

# Specifies URL of the DTP server in the form https://host[:port][/context-path]
#dtp.url=https://localhost:8443

# Specifies user name for DTP server authentication.
#dtp.user=admin

# Specifies password for DTP server authentication - use jtestcli -encodepass <PASSWORD> to encode the password, if needed.
#dtp.password=admin

# Specifies name of the DTP project - this settings is optional. 
#dtp.project=[DTP Project Name]

# === DTP REPORTING ===

# Enables reporting test results to DTP server - be sure to configure DTP server settings.
#report.dtp.publish=true

# Specifies a build identifier used to label results. It may be unique for each build
# but may also label more than one test sessions that were executed during a specified build.
#build.id=${dtp_project}-yyyy-MM-dd

# Specifies a tag which represents an unique identifier for the run, used to distinguish it from similar runs.
# It could be constructed as minimal combination of following variables that will make it unique or specified manually.
# e.g. ${config_name}-${project_module}-${scontrol_branch}-${exec_env}
#session.tag=[tag]

# Specifies a set of tags that will be used to create coverage images in DTP server.
# Coverage images allow you to track different types of coverage, such as coverage for unit, functional, manual tests and others.
# There is a set of predefined tags that will be automatically recognized by DTP, see the examples below.
# You can also specify other tags that will be used to create coverage images.
#report.coverage.images=${dtp_project}
#report.coverage.images=${dtp_project};${dtp_project}_Unit Test
#report.coverage.images=${dtp_project};${dtp_project}_Functional Test
#report.coverage.images=${dtp_project};${dtp_project}_Manual Test

# === CONSOLE VERBOSITY LEVEL ===
# Increases console verbosity level to high.
#console.verbosity.level=high

テスト対象アプリケーションのカバレッジ設定

SOAtest でカバレッジの収集を開始する前に、Parasoft dotTEST または Parasoft Jtest を使用して、テスト対象アプリケーション (AUT) を設定する必要があります。処理の概要を以下に示します。 詳しい手順については、docs.parasoft.com で Jtest または dotTEST ユーザー ガイドを参照してください。予期しない問題を回避するために、SOAtest、dotTEST、Jtest のバージョンが同期していることを確認してください。

  1. (オプション) カバレッジ エージェントのオプションを設定して、カバレッジ エージェントをカスタマイズします。この手順は、AUT と同時に対話している複数のユーザーのカバレッジ情報を収集する場合に必要です。 
  2. カバレッジ エージェントを AUT に接続します。

カバレッジ エージェントの構成

アプリケーション サーバーには通常、複数のアプリケーションが含まれています。さらに、共通のサーバー クラスやアプリケーション ライブラリをインストゥルメントする必要はありません。エージェントはアプリケーションのソース コードのカバレッジを収集するだけで済みます。すべてのクラスをインストゥルメントするには時間がかかりすぎます。このため、カバレッジ エージェントの範囲を適切に設定することが非常に重要です。Jtest と dotTEST のカバレッジ エージェントがあります。

Jtest カバレッジ エージェント

agent.properties のプロパティを変更し、-javaagent 引数にプロパティを渡すことにより、Jtest のカバレッジ エージェントを設定できます。エージェントはいくつかのパラメーターをサポートしていますが (Coverage Agent Parameters を参照)、デフォルト設定の構成はほとんどの場合に適しています。

jtest.agent.serverEnabled=true
jtest.agent.includes=com/myapp/data,com/myapp/common/**
jtest.agent.excludes=com/myapp/transport/*,com/myapp/autogen/**

カバレッジ エージェント パラメーター

次の表に、エージェントに設定できるすべてのプロパティを示します。

jtest.agent.runtimeDataエージェントが実行時に収集するカバレッジ データを保存するアプリケーション サーバー上の場所を指定します。 
jtest.agent.includes

インストゥルメントするクラスを指定するパターンのカンマ区切りのリスト。以下のワイルド カードをサポートします。

* はゼロ個以上の文字に一致します
** は複数のディレクトリ レベルに一致します

次の例では、com.myapp.data パッケージのすべてのクラスと、com.myapp.common で始まるパッケージおよびサブ パッケージのすべてのクラスがインストゥルメントされます。

com/myapp/data/*,com/myapp/common/**

jtest.agent.excludes

インストゥルメンから除外するクラスを指定するパターンのカンマ区切りのリスト。以下のワイルド カードをサポートします。

* はゼロ個以上の文字に一致します
** は複数のディレクトリ レベルに一致します

次の例では、com.myapp.transport パッケージのすべてのクラスと、com.myapp.autogen で始まるパッケージおよびサブ パッケージのすべてのクラスがインストゥルメントから除外されます。

com/myapp/transport/*,com/myapp/autogen/**

jtest.agent.autostart自動的な実行時データ収集を有効/無効にします。デフォルトは true です。
jtest.agent.port エージェントの通信ポートを設定します。デフォルトは 8050 です。
jtest.agent.debug コンソールへの詳細出力を有効/無効にします。デフォルトは false です。
jtest.agent.enableMultiuserCoverage 

複数のユーザーの Web アプリケーション カバレッジの収集を有効/無効にします。デフォルト値は false です。 

jtest.agent.serverEnabledエージェントをアクティブ化します。
jtest.agent.enableJacoco エージェントが JaCoCo エンジンを使用してカバレッジを収集できるようにします。 デフォルトは false です。

プロパティを設定したら、アプリケーション サーバーの起動時に -javaagent 引数を追加してエージェントを接続し、エージェント設定ファイルを含めます。  

-javaagent:'/path/to/agent.jar'=settings='/path/to/agent.properties',runtimeData='/path/to/runtime_coverage' 

次の例では、catalina.sh (Linux) または catalina.bat (Windows) スクリプトの先頭に JAVA_OPTS 変数を使用して、エージェントを Tomcat サーバーに接続しています。

Linux および macOS
if [ "$1" = "start" -o "$1" = "run" ]; then
JAVA_OPTS='-javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/coverage_storage"'
fi
Windows
if "%1"=="stop" goto skip_instrumentation
set JAVA_OPTS=-javaagent:"C:\TIA\test_impact_analysis\integration\coverage\agent.jar"=settings="C:\TIA\test_impact_analysis\integration\coverage\agent.properties",runtimeData="C:\TIA\coverage_storage"
:skip_instrumentation

アプリケーションを起動し、ブラウザで <host>:8050/status を開いて、エージェントの準備ができていることを確認します。test、runtime_coverage、testCase の各プロパティを含む JSON オブジェクトが表示されます。例:

{"test":null,"session":"runtime_coverage_20191008_1537_0","testCase":null}

runtimeData プロパティで指定したディレクトリを確認することもできます (上記の例では /home/TIA/coverage_storage)。ディレクトリには、一連の静的カバレッジ データ ファイルが含まれている必要があります。ファイルはエージェントの起動時に生成されます。

dotTEST カバレッジ エージェント

dotTEST カバレッジ エージェントは、Web アプリケーションおよびスタンドアロン アプリケーションのカバレッジを収集できます。それぞれ異なる構成が必要です。

Web アプリケーション

テスト対象アプリケーション (AUT) は、IIS バージョン 7.5 以降を使用するマシン上で実行されている必要があります。

カバレッジ エージェントをテスト対象アプリケーションに接続するには、次の操作を行います。

  1. <INSTALL_DIR>/coverage/dotNET/dottest_agent フォルダーを、IIS がインストールされ、Web アプリケーションがデプロイされているマシンにコピーします。
  2. このマシン上で管理者としてコンソールを実行します。
  3. このマシンで Agent Client ツールを呼び出して、IIS 内でのランタイム カバレッジ収集を有効にします。

    agent_client.exe

    agent_client は Web サーバー (IIS) の環境を初期化し、サービスのように動作して、テストを実行してカバレッジを収集できるようにします。次のメッセージが出力されている限り、サービスは準備ができており、コマンドを待機しています。

    Write 'exit' and hit Enter to close agent_client

    テストされる Web サイトまたはアプリケーションがまだ読み込まれていない場合でも、テスト セッションとテストを開始できます。

  4. このマシンのファイアウォール設定で、ポート 8050 (カバレッジ エージェントのデフォルト ポート) が HTTP トラフィックを許可していることを確認してください。デフォルトのポートが使用できない場合は、カバレッジ エージェントのポート番号を変更できます。
  5. アプリケーションを起動し、ブラウザで <host>:8050/status を開いてエージェントの準備ができていることを確認します。次の応答が返されるはずです。

    {"session":null,"test":null}
  6. soatest.properties を構成して、テスト対象アプリケーションのカバレッジを収集します。いくつかのアプリケーション カバレッジ パラメーターがサポートされていますが (「アプリケーション カバレッジの設定」を参照)、次の設定を構成することがほとんどの場合に適しています。

    application.coverage.enabled=true
    application.coverage.agent.url=http://localhost:8050
    application.coverage.binaries=c:/<PATH_TO_APPLICATION_PDB_FILES>/bin
    application.coverage.binaries.include=<INCLUDE_PATTERN>
    application.coverage.binaries.exclude=<EXCLUDE_PATTERN>

    アプリケーション バイナリのパスが、アプリケーション PDB ファイルを含むフォルダーへのパスであることを確認してください。

スタンドアロン アプリケーション

ほとんどのユーザーは Web アプリケーションのカバレッジを収集しますが、スタンドアロン アプリケーションからカバレッジ情報を収集することもできます。

  1. <INSTALL_DIR>/coverage/dotNET/dottest_agent フォルダーを、スタンドアロン アプリケーションを実行するマシンにコピーします。
  2. そのフォルダー内で次の内容を指定して、coverage_wizard.exe を実行します。
    • アプリケーションのフルパス
    • コマンドライン引数
    • 作業ディレクトリ
  3. アプリケーションで使用される .NET CLR バージョンを選択します。
  4. ウィザードによって生成されたスクリプトが保存されるディレクトリを [ターゲット スクリプト ディレクトリ] フィールドに入力します。
  5. [カバレッジ エージェントを使用する] オプションを有効にし、必要に応じて [管理者権限なしでカバレッジを収集する] オプションを有効または無効にします。
    • デフォルトでは、カバレッジ エージェントでカバレッジを収集するには管理者権限が必要ですが、管理者特権を持たないユーザーがカバレッジを収集するようにツールを設定できます。そうすると、runCamAgentInit.bat と runCamAgentUninit.bat という 2 つの追加 .bat スクリプトが生成されます。管理者権限で runCamAgentInit.bat スクリプトを実行し、カバレッジ エージェントをセットアップして初期化します。テストが完了したら、runCamAgentUninit.bat スクリプトを実行してプロセスを停止します。
  6. [終了] をクリックします。ウィザードは、上で指定したターゲット スクリプト ディレクトリにスクリプトを生成します。
  7. このマシン上で管理者としてコンソールを実行し、スクリプトが生成されたディレクトリに変更します。
  8. runCamAgent.batを実行します。
  9. 別のコンソールを管理者として実行し、monitorCoverage.bat を実行します。
  10. soatest.properties を構成して、テスト対象アプリケーションのカバレッジを収集します。いくつかのアプリケーション カバレッジ パラメーターがサポートされていますが (「アプリケーション カバレッジの設定」を参照)、次の設定を構成することがほとんどの場合に適しています。

    application.coverage.enabled=true
    application.coverage.agent.url=http://localhost:8050
    application.coverage.binaries=c:/<PATH_TO_APPLICATION_PDB_FILES>/bin
    application.coverage.binaries.include=<INCLUDE_PATTERN>
    application.coverage.binaries.exclude=<EXCLUDE_PATTERN>

    アプリケーション バイナリのパスが、アプリケーション PDB ファイルを含むフォルダーへのパスであることを確認してください。

カバレッジを収集およびアップロードするための SOAtest の設定 

適切な構成を利用して、SOAtest はテストの実行中にアプリケーション カバレッジを収集します。これを行うには、必要に応じて次のオプションを使用して SOAtest 設定ファイル (「設定」を参照) を構成します。

  • build.id: カバレッジ結果を関連付けるビルド ID に設定します。SOAtest のカバレッジ結果を、同じアプリケーションの他のタイプのテスト (単体テストや手動テストなど) の結果とマージする場合は、すべて同じビルド ID を使用する必要があります。ここで設定するビルド ID は、静的および動的カバレッジ ファイルを収集してカバレッジ データをアップロードする際に、dotTEST または Jtest に設定されたビルド ID と一致する必要があります。
  • dtp.project: この値は、静的および動的カバレッジ ファイルを収集するときに dotTEST または Jtest に設定された dtp.project 値と一致する必要があります。
  • report.dtp.publish: true に設定すると、テスト結果データの DTP へのパブリッシュが有効になります。
  • application.coverage.enabled: true に設定します。これにより、アプリケーションのカバレッジが可能になります。
  • application.coverage.agent.url: テスト対象のアプリケーションとカバレッジ エージェントがホストされる URL を指定します。エージェントのプロトコル (HTTP/HTTPS) とポート番号を含めます。複数のエントリはセミコロン ( ; ) で区切ります。例: http\://<Agent Host>\:8050;http\://<Agent Host>\:9050.
  • application.coverage.user.id: 任意。ユーザー ID を指定すると、カバレッジ結果を特定のユーザーに関連付けることができます。ユーザー ID は、カバレッジ エージェントがマルチ ユーザー モードで実行するように設定されている場合にだけ指定するべきです。下記の jtest.agent.enableMultiuserCoverage を参照してください。
  • application.coverage.dtp.publish: カバレッジ レポートを DTP にアップロードする場合は true に設定し、カバレッジ レポートを DTP にアップロードしない場合は false に設定します。複数のカバレッジ エージェントを設定している場合、それらのカバレッジ レポートは DTP 用の 1 つのカバレッジ レポートにマージされます。デフォルトは、report.dtp.publish の値 (「設定 」を参照)、または -publish が soatestcli に渡された場合は true になります。
  • application.coverage.binaries: 任意。Jtest の場合、テスト対象アプリケーションのバイナリを含む URL またはローカル ファイルを指定します。フォルダー、または .war、.jar、.zip、または .ear ファイルへのパスを指定できます。dotTEST には、アプリケーション PDB ファイルが含まれるフォルダーを指定します。静的カバレッジ ファイルが個別に DTP にアップロードされる場合は必要ありません。application.coverage.static.file が指定されている場合は使用しないでください。
  • application.coverage.binaries.exclude: オプションですが、推奨されます。テスト対象アプリケーションのスキャン中に除外するアプリケーション バイナリのカンマ区切りパターンを指定します。これも application.coverage.binaries.include も設定されていない場合、バイナリの分析に時間がかかり、必要以上に多くのアプリケーションが分析されます。application.coverage.static.file が指定されている場合は使用しないでください。デフォルトでは、すべてのバイナリが受け入れられます。例: application.coverage.binaries.exclude=jakarta/**,java/**,javax/**,org/apache/**,org/springframework/**
  • application.coverage.binaries.include: オプションですが、推奨されます。これも application.coverage.binaries.exclude も設定されていない場合、バイナリの分析に時間がかかり、必要以上に多くのアプリケーションが分析されます。テスト対象アプリケーションのスキャン中に含めるアプリケーション バイナリのカンマ区切りパターンを指定します。application.coverage.static.file が指定されている場合は使用しないでください。デフォルトでは、すべてのバイナリが受け入れられます。例: application.coverage.binaries.include=com/myapp/data/*,com/myapp/common/**
  • application.coverage.static.file: 任意。dotTEST または Jtest を使用して .xml または .data 形式で生成された静的カバレッジ ファイルへのパス、またはアプリケーション バイナリを分析した SOAtest カバレッジ ツールによって生成された静的カバレッジ ファイルへのパスを指定します。静的カバレッジ ファイルが個別に DTP にアップロードされる場合は必要ありません。application.coverage.binaries が指定されている場合は使用しないでください。
  • application.coverage.images: DTP でカバレッジ イメージを作成するために使用されるタグのセットを指定します。カバレッジ イメージは、同じビルド ID を持つランのカバレッジ データを集約するための一意な識別子です。複数のエントリはセミコロン ( ; ) で区切ります。詳細については、Parasoft DTP ユーザー ガイドを参照してください。例: ${dtp_project};${dtp_project}_Functional Test.

カバレッジを収集およびアップロードするためのテストの実行

設定したテスト コンフィギュレーション ファイルと設定ファイルを使って、コマンドライン モードでテストを実行します (「Configuring SOAtest to Collect and Upload Coverage」を参照)。この手順は自動化プロセスの一部であるべきです。カバレッジ データはテストの実行時に収集され、DTP への公開が有効になっている場合は DTP にアップロードされます。

DTP でのカバレッジの参照

DTP に移動してカバレッジ エクスプローラーを開き、SOAtest のテストで達成されたアプリケーション カバレッジを確認します。  カバレッジ エクスプローラーの使用方法の詳細については、https://docs.parasoft.com にある Parasoft DTP ユーザー ガイドを参照してください。


  • No labels