このトピックでは、Parasoft アプリケーション カバレッジ ワークフローの一部として SOAtest を使用する方法について説明します。アプリケーション カバレッジ ソリューションの使用に関する完全な情報については、「Collecting Coverage for Web Applications」を参照してください。
Parasoft アプリケーション カバレッジ ソリューションを使用すると、実行中のアプリケーションに対してテストを実行しながら、アプリケーションのコード カバレッジを測定できます。カバレッジは、実行中の単一のアプリケーションから、または複数のバックエンド サービスで構成されるアプリケーションから収集できます (同じテスト ケースの実行中に、すべてのバックエンド サービスからカバレッジを収集できます)。これにより、既存のテストスイートの有効性を評価し、追加のテストが必要な箇所を判断し、アプリケーションの進化に合わせてより効率的にテストを実行することができます。SOAtest for Java/dotNET に付属のカバレッジ エージェントを利用してアプリケーション カバレッジを収集できます。これにより、テストの実行中にアプリケーションを監視できます。
アプリケーション カバレッジは、静的および動的カバレッジ データを収集して DTP にアップロードして表示することによって取得されます。
次のステップでは、SOAtest によるアプリケーション カバレッジのワークフローを説明します。
SOAtest 2023.1 以降では、DTP にアップロードされるカバレッジ レポートは DTP 2023.1 以降に送信する必要があります。以前のバージョンの DTP は、SOAtest 2023.1 以降によって生成されたカバレッジ レポートを適切に処理できません。 |
アプリケーションのソース コードにアクセスできる場合は、可能であれば Jtest または dotTEST を使用して .xml または .data 形式で静的カバレッジ ファイルを生成する必要があります。この方法には、ユーザー クラス、メソッド、行に関するメタデータが含まれること、DTP でカバレッジ結果を表示するときにカバレッジ データで注釈が付けられたソース コードの表示をサポートすることなど、いくつかの利点があります。また、この方法で生成された静的カバレッジはより正確な分析を提供するため、テスト影響度分析 も向上します。テストは、変更されたメソッドを通過する場合にのみ、影響を受けるとフラグ付けされます。 アプリケーションバイナリから生成された静的カバレッジで TIA を使用することもできますが、TIA の結果はより広範囲になり (分析はクラスレベルで行われるため)、一部のテストは、影響を受ける必要がないにもかかわらず、影響を受けるとフラグ付けされる可能性があります。これらのツールを使用して静的カバレッジ ファイルを生成する方法の詳細については、docs.parasoft.com にある Jtest または dotTEST のユーザー ガイドを参照してください。
SOAtest に付属のカバレッジ ツールを使用して静的カバレッジ ファイルを生成することもできますが、これには上記のソース コードを使用する利点がありません。これを行うには、SOAtest とは独立してツールを実行し、実行時にバイナリ、フィルター、およびその他のプロパティを渡す必要があります (下記のサンプル プロパティ ファイルを参照)。Parabank に対して Jtest カバレッジ ツール (jtestcov) を使用した例を以下に示します。
java -jar jtestcov.jar -app c:/<PATH_TO_APPLICATION>/parabank.war -include com/parasoft/parabank/** -settings c:/<PATH_TO_LICENSE_FILE>/settings.properties |
# === 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 encrypt 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 |
包含と除外の定義は、システムの処理量を制御する上で重要な部分であり、静的カバレッジファイルの生成時間に大きな影響を与える可能性があります。多くの場合、サードパーティライブラリコードのコードカバレッジを測定する必要はないため、これらの設定を使用してコードカバレッジをプロジェクトコードに限定することをお勧めします。包含と除外は、インストゥルメントするクラスを指定するパターンのカンマ区切りリストとして表現する必要があります。以下のワイルド カードをサポートします。
次の例では、com.myapp.data パッケージのすべてのクラスと、com.myapp.common で始まるパッケージおよびサブ パッケージのすべてのクラスがインストゥルメントされます。
次の例では、com.myapp.transport パッケージのすべてのクラスと、com.myapp.autogen で始まるパッケージおよびサブ パッケージのすべてのクラスがインストゥルメントから除外されます。
開発部門以外でアプリケーションバイナリを扱っていて、適切な include/exclude 設定がわからない場合は、開発部門に連絡して、正しいパターンを使用しているかを確認してください。通常、 |
SOAtest でカバレッジの収集を開始する前に、Parasoft dotTEST または Parasoft Jtest を使用して、テスト対象アプリケーション (AUT) を設定する必要があります。処理の概要を以下に示します。 詳しい手順については、docs.parasoft.com で Jtest または dotTEST ユーザー ガイドを参照してください。予期しない問題を回避するために、SOAtest、dotTEST、Jtest のバージョンが同期していることを確認してください。
アプリケーション サーバーには通常、複数のアプリケーションが含まれています。さらに、共通のサーバー クラスやアプリケーション ライブラリをインストゥルメントする必要はありません。エージェントはアプリケーションのソース コードのカバレッジを収集するだけで済みます。すべてのクラスをインストゥルメントするには時間がかかりすぎます。このため、カバレッジ エージェントの範囲を適切に設定することが非常に重要です。Jtest と dotTEST のカバレッジ エージェントがあります。
agent.properties のプロパティを変更し、-javaagent 引数にプロパティを渡すことにより、Jtest のカバレッジ エージェントを設定できます。エージェントはいくつかのパラメーターをサポートしていますが ( 「カバレッジ エージェントのパラメーター」を参照)、デフォルト設定の構成はほとんどの場合に適しています。
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 | インストゥルメントするクラスを指定するパターンのカンマ区切りリスト。以下のワイルド カードをサポートします。
次の例では、
|
jtest.agent.excludes | インストゥルメントから除外するクラスを指定するパターンのカンマ区切りリスト。以下のワイルド カードをサポートします。
次の例では、
|
jtest.agent.autostart | 自動ランタイム データ収集を有効/無効にします。デフォルトは true です。 |
jtest.agent.port | エージェント通信ポートを設定します。デフォルトは 8050です。 |
jtest.agent.debug | コンソールへの詳細な出力を有効/無効にします。デフォルトは false です。 |
jtest.agent.enableMultiuserCoverage | 複数のユーザーの Web アプリケーション カバレッジの収集を有効/無効にします。デフォルトは |
jtest.agent.autoloadMultiuserLibs | jtest.agent.enableMultiuserCoverage が true に設定されている場合に、マルチユーザー ライブラリ (OpenTelemetry javaagent) の自動読み込みを有効/無効にします。デフォルト値は true です。 |
jtest.agent.serverEnabled | エージェントをアクティブ化します。 |
jtest.agent.enableJacoco | エージェントが JaCoCo エンジンを使用してカバレッジを収集できるようにします。デフォルトは false です。 |
jtest.agent.appLocationIncludes | コード変更によって影響を受けた手動テストを判別するために CTP が使用するアプリケーション ファイルの場所を指定する、カンマ区切りのパス パターンのリスト。以下のワイルド カードをサポートします。
|
jtest.agent.appLocationExcludes | jtest.agest.appLocationIncludes で指定された場所内にあるアプリケーション ファイルの場所を指定するパス パターンのカンマ区切りリストです。ただし、CTP がコード変更の影響を受けた手動テストを判別する際には考慮する必要はありません。この方法でファイルを除外すると、ファイルの変更を分析するために必要な時間を大幅に短縮できます。以下のワイルド カードをサポートします。
|
プロパティを設定したら、アプリケーション サーバーの起動時に -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 サーバーに接続しています。
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 |
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)。このディレクトリには、静的なカバレッジ データ ファイルが含まれているはずです。このカバレッジ データ ファイルはエージェントの起動時に生成されます。
マルチユーザー モードの追加手順
マルチユーザー カバレッジを有効にしていて、複数のユーザーが同じ Web アプリケーションに同時にアクセスしている場合、収集されるカバレッジ データが混在する可能性があります。これを防ぐために、いくつかの追加手順があります。
テストでは、次の HTTP ヘッダーを挿入する必要があります: baggage: test-operator-id=<USER>
jtest.agent.enableMultiuserCoverage と jtest.agent.autoloadMultiuserLibs の両方が有効になっていることを確認してください (「Jtest カバレッジ エージェント」を参照)。また、マルチユーザー モードでは次の点に注意してください。
jtest.agent.enableMultiuserCoverage を有効にすると、agent.jar ディレクトリから jtest-otel-ext.jar と opentelemetry-javaagent.jar が自動的にロードされます。dotTEST カバレッジ エージェントは、Web アプリケーションおよびスタンドアロン アプリケーションのカバレッジを収集できます。それぞれ異なる構成が必要です。
Web アプリケーション
テスト対象アプリケーション (AUT) は、IIS バージョン 7.5 以降を使用するマシン上で実行されている必要があります。
カバレッジ エージェントをテスト対象アプリケーションに接続するには、次の操作を行います。
<INSTALL_DIR>/coverage/dotNET/dottest_agent フォルダーを、IIS がインストールされ、Web アプリケーションがデプロイされているマシンにコピーします。agent_client.exe |
0 または負の値を指定すると、接続試行はタイムアウトしません。その結果、処理速度が大幅に低下したり、ツールが無期限にハングしたりする可能性があります。 |
アプリケーションを起動し、ブラウザで <host>:8050/status を開いてエージェントの準備ができていることを確認します。次の応答が返されるはずです。
{"session":null,"test":null} |
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 アプリケーションに同時にアクセスしている場合、収集されるカバレッジ データが混在する可能性があります。これを防ぐために、いくつかの追加手順があります。
テストでは、次の HTTP ヘッダーを挿入する必要があります: baggage: test-operator-id=<USER>
スタンドアロン アプリケーション
ほとんどのユーザーは Web アプリケーションのカバレッジを収集しますが、スタンドアロン アプリケーションからカバレッジ情報を収集することもできます。
<INSTALL_DIR>/coverage/dotNET/dottest_agent フォルダーを、スタンドアロン アプリケーションを実行するマシンにコピーします。agent_client.exe |
0 または負の値を指定すると、接続試行はタイムアウトしません。その結果、処理速度が大幅に低下したり、ツールが無期限にハングしたりする可能性があります。 |
マルチユーザー カバレッジは現在、スタンドアロン アプリケーションでは利用できません。 |
適切な構成を利用して、SOAtest はテストの実行中にアプリケーション カバレッジを収集します。これを行うには、必要に応じて次のオプションを使用して SOAtest 設定ファイル (「設定」を参照) を構成します。
http\://<Agent Host>\:8050;http\://<Agent Host>\:9050.jtest.agent.enableMultiuserCoverage を参照してください。application.coverage.binaries.exclude=jakarta/**,java/**,javax/**,org/apache/**,org/springframework/**application.coverage.binaries.include=com/myapp/data/*,com/myapp/common/**${dtp_project};${dtp_project}_Functional Test.設定したテスト コンフィギュレーション ファイルと設定ファイルを使って、コマンドライン モードでテストを実行します (「Configuring SOAtest to Collect and Upload Coverage」を参照)。この手順は自動化プロセスの一部であるべきです。カバレッジ データはテストの実行時に収集され、DTP への公開が有効になっている場合は DTP にアップロードされます。
DTP に移動してカバレッジ エクスプローラーを開き、SOAtest のテストで達成されたアプリケーション カバレッジを確認します。 カバレッジ エクスプローラーの使用方法の詳細については、Parasoft DTP ドキュメントを参照してください。