テスト影響度分析 (TIA) 機能は、テスト対象アプリケーションのカバレッジ データを分析し、アプリケーションの変更によって影響を受けたテストを示す .lst ファイルを出力します。.lst ファイルを SOAtest コマンドラインに渡すと、変更の影響を受けるテストのサブセットだけを実行して、変更を検証することができます。このセクションの内容:
概要
テスト影響度分析は、自動化プロセスの一部として実装されることを目的としています。以下の概要では、テスト影響度分析のプロセスについて説明します。
- 構成する: SOAtest に同梱されているカバレッジ エージェント (agent.jar) を構成し、テスト対象アプリケーションにアタッチして、SOAtest がカバレッジ エージェントと通信できるようにします。
- テスト ケースの対象に関する情報を収集する: 完全なテスト スイートを実行して、テストとテストがカバーするコードに関するデータをエージェントが収集できるようにします。
- ベースライン カバレッジ レポートを生成する: エージェントによって収集されたデータを処理して、ベースライン レポートを作成します。
- 変更の影響を受けるテストを含む .lst ファイルを生成する: アプリケーションの新しいバージョンが利用可能になったら、TestImpactAnalysis スクリプトを実行して、ベースライン カバレッジ レポートを処理します。変更の影響を受けるテストを含む .lst ファイルが作成されます。
- 変更の影響を受けるテストを実行する: アプリケーションの最新バージョン (.war) をサーバーにデプロイし、.lst ファイルを入力として使用して SOAtest を実行するジョブを実行し、変更を検証します。
設定
テスト影響度分析 (TIA) を有効にするには、次の手順を実行します。
アプリケーションをパッケージ化する
テスト対象アプリケーションをデプロイ可能な .war ファイルにパッケージ化します。
テスト対象アプリケーションにカバレッジ エージェントをアタッチする
SOAtest には、SOAtest が変更の影響を受けるテストを判断するために必要なカバレッジ情報を生成する Java エージェントが含まれています。
このエージェントは <INSTALL>/test_impact_analysis/integration/coverage ディレクトリにあります。同じディレクトリ内の agent.properties ファイルから構成設定を取得します。agent.jar および agent.properties ファイルを含むカバレッジ ディレクトリを、テスト対象アプリケーションが実行されているマシンにコピーする必要があります。
カバレッジ エージェントの設定
通常、アプリケーション サーバーには複数のアプリケーションが含まれます。さらに、一般的なサーバー クラスまたはアプリケーション ライブラリをインストゥルメントする必要はありません。エージェントは、アプリケーションのソース コードのカバレッジを収集するだけです。すべてのクラスをインストゥルメントするのは時間がかかりすぎます。このため、カバレッジ エージェントのスコープを適切に設定することが非常に重要です。
agent.properties のプロパティを変更し、-javaagent
引数にプロパティを渡すことにより、カバレッジ エージェントを設定できます。エージェントはいくつかのパラメーターをサポートしています ( 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.associateTestsWithCoverage=true jtest.agent.autostart=false
カバレッジ エージェントのパラメーター
エージェントに設定できるすべてのプロパティは、以下の表のとおりです。
jtest.agent.associateTestsWithCoverage | カバレッジと特定のテストの関連付けを有効/無効にします。デフォルト値は false です。 |
---|---|
jtest.agent.runtimeData | 実行時に収集するカバレッジ データを保存するエージェントのアプリケーション サーバー上の場所を指定します。 |
jtest.agent.includes | インストゥルメントするクラスを指定するパターンのカンマ区切りリスト。以下のワイルド カードをサポートします。
次の例では、
|
jtest.agent.excludes | インストゥルメントから除外するクラスを指定するパターンのカンマ区切りリスト。以下のワイルド カードをサポートします。
次の例では、
|
jtest.agent.autostart | 自動的な実行時データ収集を有効/無効にします。デフォルトは true です。 |
jtest.agent.port | エージェントの通信ポートを設定します。デフォルトは 8050 です。 |
jtest.agent.debug | コンソールへの詳細出力を有効/無効にします。デフォルトは false です。 |
jtest.agent.collectTestCoverage | テスト ケースのカバレッジ情報の収集を有効/無効にします。デフォルト値は false です。 |
jtest.agent.enableMultiuserCoverage | 複数のユーザーの Web アプリケーション カバレッジの収集を有効/無効にします。デフォルト値は |
jtest.agent.serverEnabled | エージェントをアクティブにします。 |
プロパティを設定したら、アプリケーション サーバーの起動時に -javaagent
引数を追加して、エージェントをアタッチし、エージェント設定ファイルを含めます。
-javaagent:'/path/to/agent.jar'=settings='/path/to/agent.properties',runtimeData='/path/to/runtime_coverage'
便宜上、カバレッジ ディレクトリには -javaagent
引数を生成するスクリプトが含まれています。agent.sh または agent.bat スクリプトを実行し、出力をサーバーの起動スクリプトにコピーします。
$ ./agent.sh Add this Java VM args to your process: --------------------------------------------------- -javaagent:"/home/TIA/test_impact_analysis/integration/coverage/agent.jar"=settings="/home/TIA/test_impact_analysis/integration/coverage/agent.properties",runtimeData="/home/TIA/test_impact_analysis/integration/coverage/runtime_coverage" --------------------------------------------------- Press any key to continue . . .
次の例では、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
)。このディレクトリには、静的なカバレッジ データ ファイルが含まれているはずです。このカバレッジ データ ファイルはエージェントの起動時に生成されます。
テスト コンフィギュレーションの作成
テスト実行の情報をカバレッジ エージェントにレポートするテスト コンフィギュレーションを SOAtest で作成する必要があります。テスト コンフィギュレーションは一度だけ作成する必要があります。
- SOAtest メニューから [Parasoft] > [テスト コンフィギュレーション] を選択し、[ビルトイン] カテゴリを展開します。
- Demo Configuration を右クリックし、[複製] を選択します。
- テスト コンフィギュレーションの新しい名前 (TIA_agent など) を指定し、[実行] タブをクリックします。
- [アプリケーション カバレッジ] タブをクリックし、テスト対象アプリケーションとカバレッジ エージェントがホストされているホスト名または IP アドレス、およびエージェントのポート番号を指定します。ポート番号は、agent.properties ファイルの
jtest.agent.port
設定の値に一致する必要があります (デフォルトは8050
)。 - [接続テスト] をクリックして、SOAtest がエージェントとやり取りできるかどうかを検証します。
- (任意) [カバレッジ エージェント ユーザー ID] でユーザー ID を指定できます。ID によって、カバレッジ結果が特定のユーザーと関連付けられます。ユーザー ID は、agent.properties ファイルで
jtest.agent.enableMultiuserCoverage
プロパティがtrue
に設定されている場合にのみ指定する必要があります。複数のユーザーまたは自動化されたテスト実行が、テスト対象アプリケーションの同じインスタンスに同時にアクセスするように構成されている場合、エージェント ユーザー ID を指定することを推奨します。これは、それらのアクセスが、テストと他のユーザーが対象とするコードとの相関に影響を与えないようにするためです。 - カバレッジ エージェントの接続が失敗したときにテストの失敗をレポートしたい場合、[カバレッジ エージェントへの接続の失敗をテストの失敗としてレポートする] オプションを有効にします。このオプションが有効ではない場合、接続の問題はコンソールにレポートされますが、テストは失敗になりません。
- [カバレッジ データの取得] オプションを有効にし、ランタイム カバレッジ データをローカルに保存するディレクトリを指定します。このディレクトリに保存されたデータは、ベースライン カバレッジ レポートを生成 するために分析されます。
- [適用] をクリックして変更を保存します。
テストおよびカバレッジ データの収集
新しいテスト コンフィギュレーションを使用して、完全なテスト スイートを実行します。すでに自動テストを実行している場合は、既存のジョブを変更して新しいテスト コンフィギュレーションを使用できます。例:
soatestcli.exe -data <your workspace> -resource <your tests> -localsettings <properties file with SOAtest settings> -config <new test configuration>
SOAtest を使用したテスト実行コマンドの詳細については、コマンドラインからのテスト実行 (soatestcli) を参照してください。手動で SOAtest GUI からテストを実行する ことも可能です。
ベースライン カバレッジの生成
SOAtest には ベースライン カバレッジ レポートを作成する ためのスクリプトが含まれています。スクリプトは、完全なテスト実行によって収集されたカバレッジ データとテスト対象アプリケーションの WAR ファイルを分析してレポートを生成します。OS に応じて、<INSTALL>/test_impact_analysis ディレクトリにある TestImpactAnalysis.bat (Windows) または TestImpactAnalysis.sh (Linux/macOS) のいずれかを実行できます。
Linux/MacOS の一時ディレクトリ
変数をまだ設定していない場合は、.sh スクリプトを変更し、一時ディレクトリを指定する必要がある場合があります。例:
#!/bin/bash
TMP=/tmp
テストが終了したら、次の構文を使用して TestImpactAnalysis.sh または TestImpactAnalysis.bat スクリプトを実行し、カバレッジ レポートを生成します。
./TestImpactAnalysis.sh -app <PATH TO AUT WAR FILE> -runtimeCoverage <PATH_TO_RUNTIME_COVERAGE> -outputReport <PATH_TO_OUTPUT_REPORT_DIR> -include <SPACE_SEPARATED_PATTERNS> -exclude <SPACE_SEPARATED_PATTERNS>
-app
フラグはデプロイ可能な .war を指定します。自動テスト実行のために、テスト対象アプリケーションと同じアーティファクトをデプロイする必要があります ( Package your Application を参照)。-runtimeCoverage
フラグは、テスト コンフィギュレーションで構成したディレクトリを指定します。-outputReport
フラグの使用は任意であり、カバレッジ レポートの出力先を指定します。-include
フラグの使用は任意であり、解析に含めるパターンのスペース区切りリストを指定します。デフォルトでは、すべてのテスト クラスが含まれます。-exclude
フラグの使用は任意であり、解析から除外するパターンのスペース区切りリストを指定します。-include
フラグで指定されたパターンに一致するクラスは、除外されるパターンを上書きします。- ベースライン カバレッジ XML レポートの生成に使用されるランタイム カバレッジ データ ファイルを保持する場合は、
-keepRuntimeCoverage
オプションを追加します。このパラメーターは値を取らないため、主にデバッグ目的で使用されます。このオプションがコマンドに含まれていない場合、ランタイム カバレッジ データファイルは実行の最後に削除されます。
コマンド例:
TestImpactAnalysis.bat ^ -app C:\tomcat\webapps\application.war ^ -runtimeCoverage C:\TIA\runtime-coverage ^ -outputReport C:\TIA\reports ^ -include com\myapp\data\**,com\myapp\common\** ^ -exclude com\myapp\transport\**,com\myapp\autogen\**
./TestImpactAnalysis.sh \ -app /home/tomcat/webapps/application.war \ -runtimeCoverage /home/TIA/runtime-coverage \ -outputReport /home/TIA/reports \ -include com/myapp/data/**,com/myapp/common/** \ -exclude com/myapp/transport/**,com/myapp/autogen/**
スクリプトが終了すると、coverage.xml レポートは -outputReport
フラグで指定された場所に保存されます。このフラグが含まれていない場合、ファイルはデフォルトで <USER_HOME>/parasoft/test_impact_analysis/reports/ ディレクトリに保存されます。
変更の影響を受けるテストのリスト生成
アプリケーションの新しいバージョンが利用可能になったら、次の構文を使用して TestImpactAnalysis.sh または TestImpactAnalysis.bat スクリプトを実行します。
TestImpactAnalysis.sh -app <PATH_TO_NEW_WAR> -coverageReport <PATH_TO_COVERAGE_XML_REPORT> -outputLst <PATH_TO_LST>
-app
フラグは、新しいデプロイ可能な .war を指定します ( Package your Application を参照)。-coverageReport
フラグは、Generating Baseline Coverage で生成された coverage.xml レポートを指定する必要があります。-outputLst
フラグの使用は任意であり、結果の出力先を指定します。
スクリプトが終了すると、結果は -outputLst
フラグで指定されたディレクトリの .lst ファイルに保存されます。このフラグが含まれていない場合、ファイルはデフォルトで <USER_HOME>/parasoft/test_impact_analysis/lsts/ ディレクトリに保存されます。.lst ファイルのデフォルト名は <yyyyMMdd_HHmmss>_affected_tests.lst
です。.lst ファイルは、テストが変更の影響を受ける場合にのみ生成されます。
変更の影響を受けるテストの実行
変更影響度分析によって報告されたテストだけを実行するには、SOAtest の実行中に -resource
パラメーターを使用して .lst ファイルを指定します。
soatestcli.exe -data <your workspace> -resource <path to .lst> -localsettings <properties file with SOAtest settings> -config <your team's test configuration>
SOAtest を使用したテスト実行コマンドの詳細については、コマンドラインからのテスト実行 (soatestcli) を参照してください。