このセクションでは、SOAtest を使って Java アプリケーションに対して実行時エラー検出を実施する方法について説明します。
このセクションの内容:
Parasoft Jtest のインストールが必要
SOAtest は、Parasoft Jtest との統合によって、Java の実行時エラー検出と Java イベント モニタリングの機能を提供します。Java の広範なテストと解析のプラクティスを容易にします。
SOAtest の実行時エラー検出あるいは Java イベント モニタリングの機能を使用する前に、必ず 1) Jtest がインストール済みであること、および 2) SOAtest の "Jtest Connect" ライセンス オプションが有効であることを確認してください。
Jtest の入手については、テクマトリックス (株) の Parasoft 製品カスタマーセンター ( [email protected] ) にお問い合わせください。
この製品間機能を使用するには、Jtest と SOAtest を p2 updatesite アーカイブを介してインストールする必要があります (詳細については「Eclipse p2 更新サイトからのインストール」を参照)。
実行時エラー検出の概要
SOAtest では、機能テストまたは侵入テストを実行するときに、実行時エラー検出を行うことができます。
実行時エラー検出は、アプリケーションの実行中に発生する重大な欠陥を検出します。欠陥は、今までに例のない正確さでレポートされます。これは、実行時 ( たとえばファイルの上書き時) にだけ姿を現す欠陥を効率的に特定するために、また、アプリケーションのクラッシュ、パフォーマンスの低下、予測不能な動作の根本的原因を突き止めるために非常に重要です。
SOAtest は、レポートされたエラーと、エラーの検出時に実行されていた機能テストとを関連付けます。この違反と機能テストの関連付けによって、ユーザーはレポートされたエラーを辿って、アプリケーションに対する特定のユースケースを突き止めることができます。
検出されるエラー カテゴリには以下のものが含まれます。
- アプリケーションのクラッシュ
- Eclipse 環境
- 例外
- 機能エラー
- ファイル入出力
- グラフィカル ユーザー インターフェイス
- データベース
- ネットワーク
- 最適化
- 移植性
- セキュリティ
- サーブレット
- スレッドと同期化
サーバーの準備
アプリケーションをモニタリングするには、アプリケーション サーバーを実行しているマシンに適切な jar ファイルをコピーし、その jar ファイルを使用するようにアプリケーション サーバーを設定する必要があります。以下の操作を行います。
- insure.jar および insureimpl.jar を、[Jtest_install_dir]/plugins/com.parasoft.xtest.jtest_[version]/resources/ から、チェックしたいアプリケーションがあるサーバー上のディレクトリにコピーします。
- サーバーが実行中の場合、サーバーを停止します。
- 起動スクリプトで、既存の Java 引数に -javaagent コマンドを追加します。
- 詳細については 「javaagent コマンドの詳細」を参照してください。
- 機能テストの実行時にアプリケーションの内部動作もモニタリングしたい場合、必ずオプションの trace_to_xml パラメーターを追加してください。詳細については以下の囲みの説明を参照してください。
- サーバーを再起動します。
サーバーは通常と同じように起動します。ただし、指定したパッケージ クラスがインストゥルメントされる点が異なります。
テストの実行中にアプリケーションの内部動作に対する可視性を得るには
実行時エラー検出のためにアプリケーションを設定する際、アプリケーションのモニタリングも準備しています。これは、機能テストの実行中にアプリケーションの内部動作に対する可視性を提供します。テストの失敗原因の特定が向上するだけでなく、回帰テストでのユース ケース検証条件も充実させることができます。たとえば、EJB メソッド呼び出しまたは別のシステムへのリモート呼び出しが、期待されるパラメーターを使って実施されていることを検証できます。
このモニタリングを行うには、以下の操作を行います。
- サーバー起動スクリプトで、要求される trace および推奨される trace_to_xml パラメーターを使用します。
- モニタリングするテスト シナリオの先頭に、適切に設定された Event Monitor ツールを追加します。
詳細については、「Java アプリケーションのモニタリング」 を参照してください。
javaagent コマンドの詳細
基本
以下の起動時パラメーターが必要です。
パラメーター | 説明 |
---|---|
soatest | 実行時エラー検出を設定するために必要です。 |
port=[port_number] | モニタリングするプログラムとの応答に使用するポート番号を指定します。5050 から 5099 の値を指定してください。 |
instrument= [class_name.method_name(jni_sig)] | チェックする完全修飾メソッドの接頭辞を指定します。たとえば com.abc.util.IOUtil.method と指定すると、 IOUtil.java 中のメソッドで、 method で開始するすべてのメソッドがインストゥルメントされます。com.abc. と指定すると、それらのメソッドがインストゥルメントされるほか、完全修飾名が com.abc. で開始するクラスのすべてのメソッドもインストゥルメントされます。具体的なクラス名を指定できます。必須。 |
Eclipse または Application Server から実行するアプリケーションの場合
独自のクラス ローダー ( つまり Eclipse、JBoss、および Tomcat) を定義するアプリケーションの場合、ブートのクラスパスに insure.jar を追加する必要があります。そのようなアプリケーションをモニタリングするには、起動構成の VM 引数に次の行を追加する必要があります。-javaagent:"<path_to_jar>\insure.jar=soatest,port=<port>",instrument=<my.package.prefix> -Xbootclasspath/a<path_to_jar>\insure.jar
例:-javaagent:"/home/user/parasoft/insure.jar=soatest,port=5060",instrument=com.mycompany.onlinestore -Xbootclasspath/a:/home/user/parasoft/insure.jar
ほかの ( スタンドアロンの) Java アプリケーションの場合
ほかの ( スタンドアロンの) Java アプリケーションの場合、ブートのクラスパスに insure.jar を追加する必要はありません。例:java -javaagent:"C:\Program Files\Parasoft\insure.jar=soatest,port=5050",instrument=com.mycompany.myapp
テスト コンフィギュレーションのカスタマイズ
実行時エラー検出を実施するには、テスト コンフィギュレーションをカスタマイズし、チェックするアプリケーションと検出するエラーを指定する必要があります。 次の操作を行います。
- テスト コンフィギュレーションを新規作成します (「テスト コンフィギュレーションとルールの設定」で説明)。
- [実行] > [実行時エラー検出] タブで、次の操作を行います。
- [実行時エラー検出の実行] を有効にします。
- [サーバー エージェント ホスト] フィールドで、チェックするアプリケーションを実行しているサーバーのホストを入力します。
- [サーバー エージェント ポート] フィールドで、チェックするアプリケーションを実行しているサーバーのポートを入力します。
- ルールを有効化/無効化し、どのような種類のエラーを検出するかを指定します。
エラーの検出
アプリケーションで実行時エラー検出を実施するには、次の操作を行います。
- 実行時エラー検出で実行する機能テストのノードを選択します。
- (前のセクションで説明した) カスタム テスト コンフィギュレーションを実行します。
検出されたエラーが次のように表示されます。
同じ詳細情報がレポートでも提供されます。
SOAtest は、レポートされたエラーと、エラーの検出時に実行されていた機能テストとを関連付けます。この違反と機能テストの関連付けによって、ユーザーはレポートされたエラーを辿って、アプリケーションに対する特定のユースケースを突き止めることができます。
実行時エラー検出のために特定 Web サーバーを設定するためのヒント
このセクションでは、SOAtest の実行時エラー検出で使用するために一般的な Web アプリケーション サーバーを設定する方法について説明します。
JBoss App Server 3.0.4
- JBossInstallRoot/bin/run.bat (Windows の場合) または run.sh (UNIX の場合) のバックアップを作成します。
- オリジナル ファイルで、JAVA_OPTS 変数に JVM 引数を追加します。例:
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig)] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
Sun Java System Application Server
- アドミン コンソールにログインします (デフォルトではポート 4848 でアクセスされます)。
- [JVM Settings] リンクをクリックします。
- [JVM Options] リンクをクリックします。
- [Add JVM Options] リンクをクリックします。
- 新規に作成したテキスト フィールドで、次の引数を追加します:
"-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar"
- [保存] をクリックします。
- サーバーを再起動します。
WebSphere 6.1
- サーバー/アプリケーションを起動できるマシン上で、SOAtest インストール ディレクトリから eventmonitor ディレクトリ全体を、チェックしたいアプリケーションを実行しているマシンにコピーします (たとえば c:\eventmonitor)。
- http://<HOST>:9060/ibm/console/ に移動し、WebSphere Application Server の管理コンソール (Administrative Console) を表示します。
- 左側のパネルで、[Servers] > [Application Servers] を選択します。アプリケーション サーバーの一覧が表示されます。
- アプリケーション サーバーのリストで、設定するサーバーの名前をクリックします。選択したサーバーの設定タブが表示されます。
- [Server Infrastructure] > [Java and Process Management] の下にある [Process Definition] プロパティをクリックします。[Process Definition] の画面が表示されます。
- [Additional Properties] エリアで [Java Virtual Machine] プロパティを選択します。[Java Virtual Machine] の画面が表示されます。
- [Debug Mode] を有効にし、現在のデバッグ引数の最後に JVM 引数を追加します。次のコマンドを使用します:
-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
- ページの最後までスクロールし、[Apply] をクリックして変更をローカル設定に保存します。
- [Save] をクリックして変更をマスター設定に保存します。
WebSphere 5.x
SOAtest は、WSAD 5.1 IDE から起動される WebSphere 5.1 ローカル テスト環境サーバーのための追加の JVM 引数を自動的に設定します。 実行時エラー検出のために他のすべての WebSphere 5.x サーバーを設定するには、以下の操作を行います。
- http://<Host>:9090/admin (デフォルト ポートは 9090) に移動し、WebSphere Application Server の管理コンソール (Administrative Console) を表示します。
- 左側のパネルで、[Servers] > [Application Servers] を選択します。
- アプリケーション サーバーのリストで、設定するサーバーの名前をクリックします。選択したサーバーの設定タブが表示されます。
- [Additional Properties] エリアにある [Process Definition] プロパティをクリックします。[Process Definition] の画面が表示されます。
- [Additional Properties] エリアで [Java Virtual Machine] プロパティを選択します。[Java Virtual Machine] の画面が表示されます。
- [Debug Mode] を有効にし、デバッグ引数の最後に JVM 引数を追加します。以下を使用します。
-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor
directory]/insure.jar
- Websphere Application Server バージョン 5 は、Tracer の操作のために -Xnoagent JVM 引数も必要とする場合があります。-Xnoagent は java.lang.NoClassDefFoundError: sun/tools/agent/Agent WAS 5.x の起動時の問題を修正します。
- ページの最後までスクロールし、[Apply] をクリックして変更をローカル設定に保存します。
- [Save] をクリックして変更をマスター設定に保存します。
WebLogic 8.1 (Sun JVM を使用)
- サーバーを起動するために使用する起動スクリプトのバックアップを作成します。
- パスを発見するには、スタートアップ メニューを右クリックし、ショートカット メニューから [Properties] を選択します。パスは通常 C:\bea\user_projects\domains\mydomain\startWebLogic.cmd (Windows) または .sh (UNIX) です。
- オリジナルのスクリプト ファイルで、set JAVA_OPTIONS の行に JVM 変数を追加します (この行をまだ追加していない場合、ここで追加してください)。例:
set JAVA_OPTIONS=-javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_name.method_name(jni_sig) ] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
JBossService
コマンドラインから JBossService.exe を使って JBoss を起動する場合、次の操作を行います。
- http://forge.objectweb.org/project/showfiles.php?group_id=137&release_id=1267 から JavaService-2.0.7.zip をダウンロードします。
- 任意のディレクトリに zip ファイルの内容を展開します。
- JavaService.exe をコピーしてアプリケーションの bin ディレクトリに置き、ファイル名を JBossService.exe に変更します。
- run.bat を次のように変更します。
- 次の行を追加して、実行時エラー検出引数を含めて Java オプションを設定します ( グローバルに設定することによってクリーンアップできます)。
- 実行中のアプリケーションに接続する例:
set JAVA_OPTS=-Dprogram.name=%PROGNAME% -Xms128m -Xmx512m "-Djava.endorsed.dirs=%JBOSS_ENDORSED_DIRS%" -javaagent:[eventmonitor directory]/insure.jar=soatest,port=[port number],instrument=[class_name.method_name(jni_sig)],trace=[class_ name.method_name(jni_sig)] -Xbootclasspath/a:[eventmonitor directory]/insure.jar
- 実行中のアプリケーションに接続する例:
- モニタリングを使って JBossService.exe を起動するようにスクリプトを設定します。
たとえば、Showcase というアプリケーションの場合、
"%JAVA%" %JAVA_OPTS% "-Djava.endorsed.dirs=%JBOSS_ENDORSED_DIRS%" -classpath "%JBOSS_CLASSPATH%" org.jboss.Main %*
を呼び出す代わりに次の行を追加します。rem install Showcase (routes system.out and system.err to the runtimeerrordetection directory) JBossService.exe -install Showcase "%JAVA_HOME%\jre\bin\server\jvm.dll" "-Djava.class.path=%JBOSS_CLASSPATH%" %JAVA_OPTS% -start org.jboss.Main -stop org.jboss.Main -params %* -method systemExit -out C:\runtimeerrordetection\stdoutJBOSS.log -err C:\runtimeerrordetection\stderrJBOSS.log -overwrite rem start the Showcase service net start Showcase
注意
サービスのインストールは一度だけ実行するべきです。理想としては、run.bat ファイルには start コマンドだけを記述します。インストールはコマンドラインから実行できます。サービスがすでにインストール済みの場合、適切な VM 引数を使って再度インストールする必要があります。次のコマンドを使ってサービスを停止またはアンインストールできます。net stop Showcase
JBossService.exe –uninstall Showcase
- 次の行を追加して、実行時エラー検出引数を含めて Java オプションを設定します ( グローバルに設定することによってクリーンアップできます)。
- 通常と同じように run.bat ファイルを実行します。コマンド プロンプトに次のメッセージが表示されます。
**********
The Showcase service is starting.
The Showcase service was started successfully.
**********
コマンド プロンプトにメッセージが表示されるタイミングと JBoss が実際に起動するタイミングにはずれがあるので注意してください。 通常と同じようにアプリケーション トランザクションを実行し、モニタリングが動作しているかどうかを検証します。
注意
start、stop、install および uninstall コマンドは、run.bat だけでなくコマンドラインからも実行できます。