(57)【特許請求の範囲】
【請求項１】
コンピュータに、
動作監視の対象プロセスによる、前記対象プロセスの子プロセスの生成の実行を指示する実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、
前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、
前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて記憶部に記憶する、
ことを実行させることを特徴とする制御プログラム。
【請求項２】
請求項１において、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、前記アクセスに関する情報をさらに記憶する、
制御プログラム。
【請求項３】
請求項２において、
前記記憶は、前記子プロセスのアクセスの発生に応じて、前記子プロセスのアクセスに関する情報をさらに記憶する、
制御プログラム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記対象プロセスによる所定の処理を複数回実行し、前記複数回の前記所定の処理の実行結果情報を取得し、
前記複数回の前記実行結果情報の分散が所定値を超える場合に、前記生成及び前記終了の検出、及び、前記記憶を行う、
制御プログラム。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、動作監視の対象外プロセスの実行にプロセッサが使用した実行時間をさらに記憶する、
制御プログラム。
【請求項６】
処理部は、動作監視の対象プロセスによる、前記対象プロセスの子プロセスの生成の実行を指示する実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、
処理部は、前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、
処理部は、前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて記憶部に記憶する、
制御方法。
【請求項７】
動作監視の対象プロセスの子プロセスの生成の実行を指示する実行ファイルを記憶する記憶部と、
前記対象プロセスによる、前記実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて前記記憶部に記憶する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法、及び、情報処理装置に関する。
【背景技術】
【０００２】
ソフトウェア（プログラム）の動作検証では、ソフトウェアの機能の検証に加えて、ソフトウェアの性能の検証を行う。検証者は、ソフトウェアの性能値を測定し、測定した性能値が所定の基準を満たしているか否かの判定に基づいて、性能の検証を行う。検証者は、例えば、高精度な性能値を取得するために、性能値を複数回に渡って測定する。
【０００３】
また、検証者は、ソフトウェアの実際の運用環境と同様の環境を想定して、性能値の測定を行う。運用環境では、検証対象（動作監視の対象）のプロセスの他に、オペレーションシステムや様々なソフトウェアのプロセス（検証対象外のプロセス）が動作する。
【０００４】
検証対象外のプロセスの動作の状態に応じて、性能値を測定する情報処理装置におけるリソースの使用状況が変化する。リソースの使用状況の変化にしたがって、例えば、生成可能な子プロセスの数が変化し、性能値のばらつきが生じることがある。
【０００５】
検証者は、測定した複数の性能値から有意な性能値を抽出し、有意な性能値の平均値等に基づいて、性能の検証を行う。
【０００６】
性能値の測定に関する技術については、特許文献１〜４に記載される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２００８/０７２６７４号
【特許文献２】特開平７-１２９６５３号公報
【特許文献３】特公平７−７４９８４号公報
【特許文献４】特開２００５−２５３７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、性能値のばらつきが生じた場合、性能値のばらつきが、リソースの使用状況、または、ソフトウェアの障害や検証環境の設定エラー等のいずれによるものなのかを特定することは容易ではない。
【０００９】
そこで、測定時にプロセスのシステムコールのトレースを取得して、検証対象（動作監視の対象）のプロセスに対応する子プロセスの動作状況を把握することにより、性能値のばらつきの要因を特定する方法がある。ただし、システムコールのトレースを取得することにより情報処理装置の負荷が高くなり、ソフトウェアの動作が、実際の運用時と異なってしまう。
【００１０】
このように、実際の運用時と動作を変えることなく、検証対象のプロセスに対応する子プロセスの動作状況を把握することは容易ではない。
【００１１】
１つの側面では、本発明は、動作監視の対象プロセスに対応する子プロセスの動作状況の把握を支援する制御プログラム、制御方法、及び、情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
第１の態様によれば、コンピュータに、動作監視の対象プロセスによる、前記対象プロセスの子プロセスの生成の実行を指示する実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて記憶部に記憶する、ことを実行させる。
【発明の効果】
【００１３】
１つの側面では、動作監視の対象プロセスに対応する子プロセスの動作状況の把握を支援する。
【図面の簡単な説明】
【００１４】
【図１】本実施の形態における検証システムの構成を示す図である。
【図２】図１に示した情報処理装置１００で動作するプロセスを説明する図である。
【図３】性能値の測定開始から終了までの、図２に示した各プロセスの動作状態の一例を示す図である。
【図４】検証対象のプロセスｐｘが、５つの子プロセスｐｘｃ−１〜ｐｘｃ−５を生成し、５つの処理を並列して実行する例を説明する図である。
【図５】検証対象のプロセスｐｘが、４つの子プロセスｐｘｃ−１〜ｐｘｃ−４を生成し、４つの処理を並列して実行する例を説明する図である。
【図６】所定の条件に応じて、検証対象のプロセスｐｘの処理が相違する例を説明する図である。
【図７】各プロセスのＣＰＵ実行時間を定期的に取得する処理を、模式的に説明する図である。
【図８】本実施の形態における処理の概要を模式的に説明する図である。
【図９】本実施の形態のドライバプログラム１０が生成するログ情報５０の一例を示す図である。
【図１０】本実施の形態における情報処理装置１００（図１、図２）のハードウェア構成図である。
【図１１】図１０に示したドライバプログラム１０のソフトウェアブロックの構成図である。
【図１２】図１１に示した、検証対象プロセステーブル６０ａ、及び、プロセス生成アドレステーブル６０ｂの一例を示す図である。
【図１３】図１１に示した、子プロセス管理テーブル６０ｃの一例を示す図である。
【図１４】第１のログ情報５０−１の別の形態のログ情報５０−１ｘを説明する図である。
【図１５】検証対象外のプロセスｐｙの実行に応じて、性能値が変動する例を説明する第１の図である。
【図１６】検証対象外のプロセスｐｙの実行に応じて、性能値が変動する例を説明する第２の図である。
【図１７】第２のログ情報５０−２の一例を示す図である。図１７における矢印Ｙ１１は、ＣＰＵ実行時間を示す。
【図１８】図１１に示した候補プロセステーブル６０ｄの一例を示す図である。
【図１９】図１１に示したドライバプログラム１０の処理の流れを説明するフローチャート図である。
【図２０】第１の実行工程の測定パラメータ７０−１、及び、再測定パラメータ７０−２を示す図である。
【図２１】第１の実行工程（図１９のＳ１１）の処理の流れを説明するフローチャート図である。
【図２２】測定時プロセス管理テーブル８０の一例を示す図である。
【図２３】図２１の工程Ｓ２６に示す再測定の判定処理の流れを説明する第１のフローチャート図である。
【図２４】図２１の工程Ｓ２６に示す再測定の判定処理の流れを説明する第２のフローチャート図である。
【図２５】第２の実行工程（図１９のＳ１２）の処理の流れを説明するフローチャート図である。
【図２６】図２４の工程Ｓ６５の、ログ情報生成モジュール１１４の処理を説明する第１のフローチャート図である。
【図２７】図２４の工程Ｓ６５の、ログ情報生成モジュール１１４の処理を説明する第２のフローチャート図である。
【図２８】測定結果情報９０の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１６】
［検証システム］
図１は、本実施の形態における検証システムの構成を示す図である。図１に示す検証システムは、情報処理装置１００、クライアント装置４０、ストレージ装置ＳＤを有する。情報処理装置１００は、クライアント装置４０、及び、ストレージ装置ＳＤと接続する。
【００１７】
図１に示す検証システムは、情報処理装置１００で動作する検証対象のソフトウェア２０の性能を測定し、測定した性能が所定の基準を満たすか否かを判定することによって、性能を検証する。情報処理装置１００では、オペレーションシステム（図１に図示せず）が動作し、当該オペレーションシステム上で検証対象のソフトウェア２０が動作する。また、検証対象のソフトウェア２０は、例えば、ストレージ装置ＳＤへのアクセス（ａｙ）を行うドライバプログラム１０を、サブルーチンとして呼び出す（ａｘ）。
【００１８】
次に、検証対象のソフトウェア２０の性能値の測定の一連の流れを説明する。クライアント装置４０は、検証対象のソフトウェア２０に、性能値の測定の対象とする所定の処理の開始を指示する（ｓｔ）。検証対象のソフトウェア２０は、クライアント装置４０からの指示に応答して、ストレージ装置ＳＤに記憶されたテストデータを用いた、所定の処理を行う。検証対象のソフトウェア２０は、例えば、所定の処理として、テストデータの読み出し、読み出したデータの加工、及び、データのストレージ装置ＳＤへの書き込み等を繰り返す。
【００１９】
所定の処理を終了すると、検証対象のソフトウェア２０は、クライアント装置４０に、処理の終了を通知する（ｅｄ）。クライアント装置４０は、開始の指示から終了の通知までのレスポンス時間（処理時間ともいう）を、性能値として取得する。
【００２０】
検証システムは、精度の高い性能値に基づいて検証を行うために、例えば、複数回に渡って性能値を測定する。また、検証者は、例えば、複数の性能値から有意な性能値を判定し、有意な性能値の平均値等に基づいて性能値が、所定の基準を満たすか否かを判定する。
【００２１】
本実施の形態において、検証対象のソフトウェア２０は、例えば、データベース管理システム（DataBase Management System：ＤＢＭＳ）のソフトウェアである。ＤＢＭＳのソフトウェアは、アクセス要求に応じたデータベースへのアクセス等を行う。なお、検証対象のソフトウェア２０は、ＤＢＭＳのソフトウェアの例に限定されるものではなく、ファイルシステムのソフトウェアや、データに基づいて演算処理等を行うソフトウェア等であってもよい。
【００２２】
また、検証システムは、検証対象のソフトウェア２０を実際に使用する運用環境に則した性能値を測定するために、運用環境を想定した環境を構築し、性能値を測定する。したがって、情報処理装置１００では、検証対象のソフトウェア２０及びオペレーションシステムに加えて、オペレーションシステム上で動作する、性能の検証対象外のソフトウェア（図１に図示せず）が動作する。
【００２３】
図２は、図１に示した情報処理装置１００で動作するプロセスを説明する図である。図２において、図１で示したものと同一のものは、同一の記号で示す。図２は、図１で説明した情報処理装置１００と、クライアント装置４０で動作するテストプログラム３０と、ストレージ装置ＳＤを示す。
【００２４】
前述したとおり、情報処理装置１００では、検証対象のソフトウェア２０に加えて、オペレーションシステムや検証対象外のソフトウェアが動作する。したがって、図２に示すように、情報処理装置１００では、検証対象のソフトウェアのプロセスｐｘ１〜ｐｘ３、ｐｘｃに加えて、オペレーションシステムのプロセスｐｚや、検証対象外のソフトウェアのプロセスｐｙ１、ｐｙ２が動作する。
【００２５】
図２に示す、横線で示す矩形ｐｘ１〜ｐｘ３、ｐｘｃは、検証対象のソフトウェア２０のプロセスを示す。また、プロセスｐｘｃは、プロセスｐｘ３が生成したプロセスを示す。プロセスｐｘ１〜ｐｘ３、ｐｘｃは、常駐プロセスと非常駐プロセスとを含む。図２の例では、プロセスｐｘ１〜ｐｘ３は常駐プロセスを示し、プロセスｐｘｃは非常駐プロセスを示す。
【００２６】
常駐プロセスｐｘ１〜ｐｘ３は、例えば、検証対象のソフトウェア２０の開始時に生成され、ソフトウェア２０の終了時に終了するプロセスを示す。一方、非常駐プロセスｐｘｃは、検証対象のソフトウェア２０の開始後、終了するまでの間のいずれかのタイミングで生成され、または、終了するプロセスを示す。
【００２７】
以下、プロセスｐｘ１〜ｐｘ３を検証対象のプロセスｐｘと称し、プロセスｐｘｃを子プロセスと称する。また、図２に示す、オペレーションシステムのプロセスｐｚや、検証対象外のソフトウェアのプロセスｐｙ１、ｐｙ２を、検証対象外のプロセスｐｙと称する。
【００２８】
図２の例において、プロセスｐｘ１は、テストプログラム３０による、所定の処理の開始指示を受信するとともに（ｓｔ）、所定の処理の終了時にテストプログラム３０に終了を通知する（ｅｄ）。プロセスｐｘ１〜ｐｘ３は、相互にプロセス間通信を行い、データや指示等を送受信する。
【００２９】
図２の例において、プロセスｐｘ３（親プロセスともいう）は、所定の処理の途中で、子プロセスｐｘｃを生成し、プロセス間通信にしたがって、子プロセスｐｘｃに処理の指示を行う。また、図２の例において、プロセスｐｘ３と、その子プロセスｐｘｃは、サブルーチンとしてドライバプログラム１０を呼び出し、ストレージ装置ＳＤに対するアクセスを行う（ａｘ）。
【００３０】
［測定開始から終了までの各プロセスの動作状態］
次に、図３にしたがって、性能値の測定開始から終了までの、図２に示した各プロセスの動作状態を説明する。
【００３１】
図３は、性能値の測定開始から終了までの、図２に示した各プロセスの動作状態の一例を示す図である。図３において、図１、図２で示したものと同一のものは、同一の記号で示す。図３に示す矢印ｔｔは、時間の経過を示す。
【００３２】
図３に示す横線の矩形は、図２に示した検証対象のプロセスｐｘ１〜ｐｘ３による、ＣＰＵ（Central Processing Unit：ＣＰＵ）を使用した期間ｔｐｘ１〜ｔｐｘ３を示す。一方、空白の矩形は、図２に示した検証対象外のプロセスｐｙ１、ｐｙ２による、ＣＰＵを使用した期間ｔｐｙ１〜ｔｐｙ２を示す。また、斜線の矩形は、検証対象のプロセスｐｘ１〜ｐｘ３による、Ｉ／Ｏ（Input／Output）待ち状態の期間ｔｉｏを示す。また、矢印ｔｘは、いずれのプロセスもＣＰＵを使用していない期間を示す。
【００３３】
情報処理装置１００で動作するオペレーションシステムは、各プロセスに、順次、ＣＰＵの時間を割り当てることによって、各プロセスの処理を実行する。オペレーションシステムは、例えば、各プロセスがＣＰＵを使用する時間が、割り当てた時間を超えた場合、または、当該プロセスによるＩ／Ｏ待ち等が発生した場合に、ＣＰＵの割り当てを、別のプロセスに切り替える。
【００３４】
図３の例によると、オペレーションシステムは、プロセスｐｘ１、プロセスｐｘ２、プロセスｐｘ３の順に、ＣＰＵを割り当てる（ｔｐｘ１〜ｐｘ３）。そして、プロセスｐｘ３にＣＰＵを割り当てている間に、プロセスｐｘ３によるＩ／Ｏ待ちの発生を検出すると、オペレーションシステムは、プロセスｐｙ１にＣＰＵの割り当てを切り替える。そして、Ｉ／Ｏ待ち期間ｔｉｏが終了するまでの間、いずれのプロセスもＣＰＵを使用しない期間ｔｘが生じる。
【００３５】
そして、Ｉ／Ｏ待ち期間ｔｉｏの終了を検出すると、オペレーションシステムは、プロセスｐｘ３にＣＰＵを再度、割り当てる。そして、プロセスｐｘ３によるＩ／Ｏ待ちの発生を再検出すると、オペレーションシステムは、プロセスｐｙ２にＣＰＵの割り当てを切り替える。そして、Ｉ／Ｏ待ち期間ｔｉｏの終了を検出すると、オペレーションシステムは、プロセスｐｙ２へのＣＰＵの割り当ての終了に応じて、プロセスｐｘ３にＣＰＵを再度割り当てる。同様にして、オペレーションシステムは、各プロセスに、順次、ＣＰＵを割り当てる。
【００３６】
図２、図３で説明してきたとおり、情報処理装置１００では、検証対象のプロセスｐｘに加えて、検証対象外のプロセスｐｙが動作し、各プロセスは、互いに、ＣＰＵ資源等のリソースを共有する。したがって、ＣＰＵやメモリ等のリソースの使用状況は、検証対象外のプロセスｐｙの動作状況に応じて変化する。
【００３７】
リソースの使用状況の変化により、検証対象のプロセスｐｘが使用可能なリソースの量が変化する。したがって、測定時の検証対象外のプロセスｐｙの動作状況に応じて、性能値の測定値が変動する場合がある。これにより、例えば、性能値を複数回に渡って測定する場合、複数の性能値の間でばらつきが生じる場合がある。
【００３８】
また、検証対象のソフトウェア２０は、所定の条件に合致した場合に、特定の処理を行う仕様を有する場合がある。これにより、所定の条件に合致したか否かに応じて、検証対象のプロセスｐｘの処理が変化し、性能値が変化する場合がある。これにより、リソースの使用状況が変化する場合と同様にして、複数の性能値の間でばらつきが生じる場合がある。
【００３９】
［性能値のばらつき］
次に、図４〜図６にしたがって、性能値のばらつきが生じる例を説明する。図４、図５は、検証対象のプロセスｐｘが複数の子プロセスｐｘｃを生成し（ｆｋ）、子プロセスｐｘｃにしたがって処理を並列実行する場合を例示する。また、図６は、検証対象のプロセスｐｘが、所定の条件に合致した場合に、子プロセスｐｘｃを生成し、当該子プロセスｐｘｃに特定の処理を実施させる場合を例示する。
【００４０】
（処理を並列実行する場合）
図４、図５の例は、検証対象のプロセスｐｘが、サービスの開始後、所定の処理を１０回実行し、サービスを終了するまでの処理時間を、性能値として測定する場合を例示する。図４、図５の例によると、検証対象のプロセスｐｘは、所定の処理を並列して実行するために、サービスの開始後、複数の子プロセスｐｘｃを生成する。
【００４１】
図４は、検証対象のプロセスｐｘが、５つの子プロセスｐｘｃ−１〜ｐｘｃ−５を生成し、５つの処理を並列して実行する例を説明する図である。図４において、図１、図２で示したものと同一のものは、同一の記号で示す。図４に示す矢印ｔｍ１は、サービスの開始後、終了するまでの処理時間（レスポンス時間）、即ち、性能値を示す。
【００４２】
検証対象のプロセスｐｘは、テストプログラム３０によるサービスの開始指示に応答して、複数の子プロセスｐｘｃ−１〜ｐｘｃ−５を生成する。このとき、検証対象のプロセスｐｘは、情報処理装置１００のリソースの使用状況に応じて、５つの子プロセスｐｘｃ−１〜ｐｘｃ−５を生成する（ｆｋ）。
【００４３】
子プロセスｐｘｃ−１〜ｐｘｃ−５の生成後、検証対象のプロセスｐｘは、子プロセスｐｘｃ−１〜ｐｘｃ−５のそれぞれに、所定の処理の実行を指示する。これにより、子プロセスｐｘｃ−１〜ｐｘｃ−５は、所定の処理を並列して実行し、５回分の処理を行う。検証対象のプロセスｐｘは、子プロセスｐｘｃ−１〜ｐｘｃ−５が所定の処理を終了するまでの間（ｔｐ）、残りの５回分の処理の実行指示を待機する。
【００４４】
子プロセスｐｘｃ−１〜ｐｘｃ−５が所定の処理を終了すると、検証対象のプロセスｐｘは、さらに、子プロセスｐｘｃ−１〜ｐｘｃ−５に所定の処理の実行を指示する。したがって、子プロセスｐｘｃ−１〜ｐｘｃ−５は、所定の処理を、再び、並列して実行する。処理が終了すると、検証対象のプロセスｐｘは、子プロセスｐｘｃ−１〜ｐｘｃ−５を終了し、サービスを終了する。
【００４５】
図４の例によると、検証対象のプロセスｐｘは５つの子プロセスｐｘｃ−１〜ｐｘｃ−５を生成する。したがって、検証対象のソフトウェア２０は、５つの所定の処理を並列して実行できる。
【００４６】
図５は、検証対象のプロセスｐｘが、４つの子プロセスｐｘｃ−１〜ｐｘｃ−４を生成し、４つの処理を並列して実行する例を説明する図である。図５において、図４で示したものと同一のものは、同一の記号で示す。
【００４７】
図５の例において、検証対象のプロセスｐｘは、図４の例に対して、４つの子プロセスｐｘｃ−１〜ｐｘｃ−４しか生成できない（ｆｋ）。したがって、検証対象のソフトウェア２０は、４つの所定の処理を並列して実行する。子プロセスｐｘｃ−１〜ｐｘｃ−４が所定の処理を終了すると、検証対象のプロセスｐｘは、さらに、子プロセスｐｘｃ−１〜ｐｘｃ−４に所定の処理の実行を指示する。これにより、検証対象のソフトウェア２０は、８回分の処理を実行する。
【００４８】
２回分の処理が残っているため、検証対象のプロセスｐｘは、処理の終了に応答して、さらに、子プロセスｐｘｃ−１、ｐｘｃ−２に所定の処理の実行を指示し、子プロセスｐｘｃ−１、ｐｘｃ−２は、２つの処理を並列して実行する。処理が終了すると、検証対象のプロセスｐｘは、子プロセスｐｘｃ−１〜ｐｘｃ−４を終了し、サービスを終了する。
【００４９】
図５の例によると、検証対象のプロセスｐｘは４つの子プロセスｐｘｃ−１〜ｐｘｃ−４しか生成できないため、処理の並列度は図４の例に対して低い。したがって、図５の例の処理時間ｔｍ２は、図４の例の処理時間ｔｍ１に対して長い。
【００５０】
このように、十分な数の子プロセスｐｘｃを生成できた場合（図４）、処理の並列度が高くなり、処理時間を短縮可能になる。一方、十分な数の子プロセスｐｘｃを生成できなかった場合（図５）、処理の並列度が低くなり、十分な数の子プロセスｐｘｃを生成できた場合に対して、処理時間が長い。
【００５１】
なお、図４、図５に図示していないが、十分な数の子プロセスｐｘｃを生成できなかった場合、処理の途中で生じたリソースの空きに応じて、子プロセスｐｘｃを追加生成する場合がある。この場合、処理時間は、図４及び図５の処理時間ｔｍ１、ｔｍ２の間の時間となる。
【００５２】
このように、情報処理装置１００のリソースの使用状況に応じて、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃをいくつ生成したかに応じて、処理時間（性能値）が変化する。したがって、複数回に渡って性能値を測定する場合、複数の性能値の間でばらつきが生じる場合がある。
【００５３】
（所定の条件に応じた処理の相違）
図６は、所定の条件に応じて、検証対象のプロセスｐｘの処理が相違する例を説明する図である。図６において、図１、図２で示したものと同一のものは、同一の記号で示す。
【００５４】
図６の例は、図４、図５の例と同様にして、サービスを開始後（ｓｔ）、終了する（ｅｄ）までの処理時間ｔｍ１１を、性能値として測定する。図６の例によると、検証対象のプロセスｐｘは、サービスの実行中に生成し、内部メモリ（図示せず）に蓄積したデータｌｇが所定量を超えた場合に、データｌｇをストレージ装置ＳＤに書き込む。
【００５５】
具体的に、検証対象のプロセスｐｘは、テストプログラム３０からのサービスの開始指示に応答して（ｓｔ）、所定の処理を行うとともにデータｌｇを生成し、内部メモリに記憶する。検証対象のプロセスｐｘは、所定の処理の度に、データｌｇを生成し内部メモリに記憶する。そして、検証対象のプロセスｐｘは、蓄積したデータｌｇが所定量を超えた場合に、子プロセスｐｘｃを生成し（ｆｋ）子プロセスｐｘｃを介して、データｌｇを内部メモリからストレージ装置ＳＤに書き込む（ａｘ、ａｙ）。
【００５６】
図６の例によると、検証対象のプロセスｐｘは、１回の測定で３２個のデータｌｇを生成する。そして、検証対象のプロセスｐｘは、内部メモリのデータｌｇが２００個に達した場合に、子プロセスｐｘｃを生成し、子プロセスｐｘｃに２００個のデータｌｇをストレージ装置ＳＤに記憶させる。したがって、ストレージ装置ＳＤへの書き込みが生じる測定回と、当該書き込みが生じない回とが生じる。
【００５７】
図６の例によると、７回目、１３回目、１９回目等の測定回の際に、内部メモリ内のデータｌｇが２００個に達し、データｌｇのストレージ装置ＳＤへの書き込みが生じる。したがって、１回〜６回目の測定回と、７回目の測定回との間で、ストレージ装置ＳＤへの書き込みの有無の相違が生じ、処理時間ｔｍ１１に相違が生じる。１３回目、１９回目の測定回についても同様にして、他の測定回との処理時間ｔｍ１１に相違が生じる。
【００５８】
ストレージ装置ＳＤへの書き込みが生じる測定回の処理時間ｔｍ１１は、当該書き込みが生じない測定回の処理時間ｔｍ１１に対して長い。なお、当該書き込みが、検証対象のプロセスｐｘによるＩ／Ｏ待ち時間の間に発生する場合、処理時間ｔｍ１１は、当該書き込みが生じない場合に近似する。
【００５９】
このように、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃを生成したかに応じて、処理時間（性能値）が変化する。これにより、性能値を複数回に渡って測定する場合、複数の性能値の間でばらつきが生じる場合がある。
【００６０】
図４〜図６に示したように、性能値のばらつきが生じる場合がある。したがって、検証システムは、性能値のばらつきが、検証対象のソフトウェア２０の障害、または、図４〜図６に示した例のいずれに起因して生じたのかを特定するために、測定時に、ばらつきの要因を特定可能にする情報を採取する。
【００６１】
［情報の採取］
次に、測定時に情報を採取する例を説明する。第１に、システムコールのトレースを取得する例を、第２に、ＣＰＵ実行時間を取得する例を説明する。
【００６２】
（システムコールのトレース）
第１に、検証システムは、オペレーションシステムの機能を用いて、性能値の測定時に、各プロセスが発行するシステムコールをトレースする。具体的に、検証システムは、システムコールのトレースをタイムスタンプ（時刻）とともに取得する設定を行うことによって、検証対象のプロセスｐｘを起動する。
【００６３】
検証者は、各プロセスの時刻に応じたシステムコールのトレースに基づいて、各プロセスの処理の流れを把握できる。また、検証者は、時刻に基づいて、各プロセスのシステムコールのトレースを突き合わせることによって、プロセス間の処理の対応を把握できる。これにより、検証者は、検証対象のプロセスｐｘがいずれの処理を実行している場合に、子プロセスｐｘｃの生成または終了が生じたかを把握できる。
【００６４】
したがって、図４、図５の例において、検証者は、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃをいくつ生成したのかを把握できる。同様にして、図６の例において、検証者は、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃを生成したかを把握できる。これにより、図４〜図６の例において、性能値のばらつきが、いずれの要因に起因して生じたのかを特定可能になる。
【００６５】
ただし、トレースを採取することによって、オペレーションシステムの負荷が高くなり、各プロセスの処理時間が長くなる。負荷や処理時間の増大により、通常の運用時と動作が変化する。一例として、検証対象のソフトウェア２０が、一定期間が経過した場合にタイムアウトを検出する仕様を含む場合、処理時間の増大に伴ってタイムアウトが頻発し、処理が異常終了する場合がある。または、一定間隔で特定の処理を行う場合、処理時間の増大により、特定の処理が通常の運用時に対して多く動作する。
【００６６】
また、トレースのデータ量が膨大であることにより、オペレーションシステムのトレース領域がオーバーフローする場合がある。オーバーフローが生じる前にトレースのデータをディスク等に書き込む場合、処理時間がさらに長くなる。
【００６７】
このように、システムコールのトレースを採取することによって、性能値のばらつきの要因を特定可能になる一方、測定時の検証対象のソフトウェア２０の処理が、実際の運用時の処理から変化する。実際の運用時と処理が異なる環境で測定した性能値は、適切ではない。
【００６８】
また、例えば、システムコールのうち、子プロセスｐｘｃの生成と終了に関するシステムコールのみをトレースする方法がある。これにより、トレースの取得にかかる負荷を抑制することが可能になる。または、検証対象のプロセスｐｘが子プロセスｐｘｃを生成したタイミングで、子プロセスｐｘｃを生成した旨を所定のプログラムに通知する機能を、オペレーションシステムに組み込む方法がある。
【００６９】
子プロセスｐｘｃの生成と終了に関する情報を抜粋して採取することにより、子プロセスｐｘｃの生成、及び、終了にかかる時刻を把握可能になる。ただし、検証対象のプロセスｐｘがいずれの処理を実行しているときに、子プロセスｐｘｃの生成または終了が生じたかを把握することは困難である。
【００７０】
（ＣＰＵ実行時間の採取）
第２に、検証システムは、性能値の測定時に、定期的に、各プロセスのＣＰＵ実行時間を取得する。ＣＰＵ実行時間は、情報処理装置１００のＣＰＵの稼働時間を示し、各プロセスが処理の実行のためにＣＰＵを専有した時間（の累計）を示す。
【００７１】
図７は、各プロセスのＣＰＵ実行時間を定期的に取得する処理を、模式的に説明する図である。図７において、図６で示したものと同一のものは、同一の記号で示す。図７に示すように、検証システムは、一定の間隔毎（ｔｔ１〜ｔｔ５）に、各プロセスのＣＰＵ実行時間を取得する。
【００７２】
検証者は、一定の間隔毎（ｔｔ１〜ｔｔ５）の各プロセスのＣＰＵ実行時間に基づいて、いずれの時間帯に、子プロセスｐｘｃが動作したかを把握する。例えば、タイミングｔｔ４に新たな子プロセスｐｘｃのＣＰＵ実行時間を検出した場合、タイミングｔｔ３〜ｔｔ４の時間帯に、子プロセスｐｘｃが生成されたことを把握可能になる。これにより、検証者は、子プロセスｐｘｃが生成された時間帯を把握できる。
【００７３】
しかしながら、一定の間隔毎のＣＰＵ実行時間に基づくことにより、子プロセスｐｘｃが生成された時間帯の、検証対象のプロセスｐｘのＣＰＵ実行時間を取得できるものの、検証対象のプロセスｐｘの処理を把握することは困難である。したがって、図４〜図６の例において、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃを生成したのか、また、子プロセスｐｘｃをいくつ生成したのか、を把握することは困難である。
【００７４】
このように、実際の運用時と処理を変えることなく、検証対象のプロセスｐｘに対応する子プロセスの動作状況を示す情報を採取することは容易ではない。
【００７５】
［本実施の形態の概要］
したがって、本実施の形態における情報処理装置１００は、動作監視の対象プロセスｐｘによる、子プロセスｐｘｃの生成を実行する実行ファイルの読み出しに応じて、子プロセスｐｘｃの生成を検出する。そして、情報処理装置１００は、子プロセスｐｘｃの生成が検出された後の、対象プロセスｐｘによる、記憶部またはネットワークに対するアクセスの発生に応じて、子プロセスｐｘｃが動作中であるか否かを判定する。動作中ではないと判定した場合、情報処理装置１００は子プロセスｐｘｃの終了を検出する。
【００７６】
そして、情報処理装置１００は、子プロセスｐｘｃの生成及び終了を検出したタイミングそれぞれに対応する、対象プロセスｐｘによるアクセスに関する情報を、子プロセスｐｘｃを識別する識別情報に関連付けて記憶部に記憶する。記憶部は、例えば、情報処理装置１００のメインメモリやストレージ装置ＳＤである。
【００７７】
図８は、本実施の形態における処理の概要を模式的に説明する図である。図８において、図１、図２で示したものと同一のものは、同一の記号で示す。図８において、ストレージ装置ＳＤに記憶されている実行ファイルｅｘは、検証対象プロセスｐｘの子プロセスｐｘｃの生成を指示するプログラムを示す。なお、実行ファイルｅｘは、情報処理装置のメモリ等に記憶されていてもよい。
【００７８】
図８は、検証対象のプロセスｐｘが、処理の途中で子プロセスｐｘｃを生成する（ｆｋ）場合を例示する。図８の例において、検証対象のプロセスｐｘによるストレージ装置ＳＤに対するアクセスａｘ１〜ａｘ８のうち、アクセスａｘ４は子プロセスｐｘｃの生成を指示する実行ファイルｅｘに対する読み出しを示す。また、アクセスａｘ１１、ａｘ１２は、子プロセスｐｘｃによるストレージ装置ＳＤに対するアクセスを示し、期間ｃｈは子プロセスｐｘｃの生成期間を示す。
【００７９】
子プロセスｐｘｃの生成は、例えば、子プロセスｐｘｃの生成指示を記述した実行ファイルｅｘが読み出され（ａｘ４）、オペレーションシステムｐｚによって実行権限が付与されることによって実現する。したがって、本実施の形態におけるドライバプログラム１０は、子プロセスｐｘｃの生成を指示する実行ファイルｅｘの読み出し時に、子プロセスｐｘｃの生成を検出する。
【００８０】
そして、ドライバプログラム１０は、子プロセスｐｘｃの生成後、ストレージ装置ＳＤに対するアクセスの都度ａｘ５〜ａｘ７、生成した子プロセスｐｘｃが動作中であるか否かを判定する。図８の例によると、ドライバプログラム１０は、アクセスａｘ７のタイミングに、生成した子プロセスｐｘｃが終了したことを検出する。
【００８１】
そして、ドライバプログラム１０は、子プロセスｐｘｃの生成及び動作の終了を検出したタイミングａｘ４、ａｘ７の、検証対象のプロセスｐｘによるアクセスに関する情報を、子プロセスｐｘｃの識別情報に関連付けてログ情報５０として記憶部に記憶する。以下、アクセスに関する情報を、アクセス情報と称する。
【００８２】
本実施の形態におけるアクセス情報は、例えば、アクセスのシーケンス番号（順番情報）とアクセス対象のアドレスのいずれかまたは両方である。ただし、アクセス情報は、この例に限定されるものではない。アクセス情報は、例えば、アクセス対象のデータのサイズや、データの内容であってもよい。
【００８３】
（ログ情報）
図９は、本実施の形態のドライバプログラム１０が生成するログ情報の一例を示す図である。図９に示すログ情報を、第１のログ情報５０−１と称する。
【００８４】
図９に示す情報ｌｅ１は、子プロセスｐｘｃの生成を検出したタイミングに対応する、検証対象のプロセスｐｘのアクセス情報を示す。情報ｌｅ２は、子プロセスｐｘｃの終了を検出したタイミングに対応する、検証対象のプロセスｐｘのアクセス情報を示す。また、情報ｌｅ２は、子プロセスｐｘｃの識別情報として、実行ファイルｅｘの識別情報「ｉＤ００１」、及び、子プロセスｐｘｃのプロセスＩＤ「６７８９」を有する。
【００８５】
実行ファイルｅｘの識別情報「ｉＤ００１」に基づいて、いずれの処理を行うプログラムが実行されたのかを特定可能になる。また、図９の例において、アクセス情報は、アクセス対象のアドレスである。
【００８６】
アクセス情報に基づくことにより、処理の内容を検知している検証者は、アクセスの発生時の、検証対象のプロセスｐｘの処理を把握できる。即ち、検証者は、アクセス情報のアクセスが、検証対象のプロセスｐｘがいずれの処理を行っている際のアクセスであるかを把握できる。
【００８７】
したがって、子プロセスｐｘｃの生成及び終了のタイミングのアクセス情報を、子プロセスの情報と対応して記録することによって、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃの生成及び終了が生じたのかを把握可能になる。または、子プロセスの識別情報に基づくことにより、検証対象のプロセスｐｘがいずれの処理を行っている際に、子プロセスｐｘｃをいくつ生成したのかを把握可能になる。
【００８８】
これにより、図４、図５の例において、検証者は、検証対象のプロセスｐｘがいずれの処理を実行している場合に、子プロセスｐｘｃをいくつ生成したのかを把握可能になる。また、図６の例において、検証者は、検証対象のプロセスｐｘがいずれの処理を実行している場合に、データｌｇをストレージ装置ＳＤに記憶させる子プロセスｐｘｃを生成したのかを把握可能になる。
【００８９】
また、本実施の形態におけるドライバプログラム１０は、アクセス情報のみを記憶するため、情報の採取に起因する負荷の増大や、処理時間の長期化を抑制することが可能になる。このように、ドライバプログラム１０は、最小限の情報を記憶することにより、実際の運用時と処理を変えることなく、検証対象のプロセスｐｘに対応する子プロセスの動作状況を示す情報を採取することができる。これにより、性能値のばらつきの要因を効率的に特定可能になる。
【００９０】
なお、図８、図９の例では、検証対象のプロセスｐｘによるアクセスが、ストレージ装置ＳＤに対するアクセスである場合を例示した。ただし、この例に限定されるものではない。検証対象のプロセスｐｘによるアクセスは、他の記憶部やネットワークに対するアクセスであってもよい。ネットワークに対するアクセスは、例えば、検証対象のプロセスｐｘによる、他のプロセスや他の装置に対する情報の送受信である。
【００９１】
ドライバプログラム１０は、例えば、記憶部に対するアクセスに加え、検証対象のプロセスｐｘによる情報の送受信を検出し、アクセス情報を記憶する。アクセス情報は、例えば、情報の送受信の宛先の情報や、送受信する対象のデータを示す。このように、ネットワークアクセスのアクセス情報を記録することにより、同様にして、検証対象のプロセスｐｘによるアクセス発生時の処理を把握可能になる。
【００９２】
次に、図１０にしたがって、本実施の形態における情報処理装置１００のハードウェア構成を、図１１にしたがって、本実施の形態における情報処理装置１００のソフトウェアブロック図を説明する。
【００９３】
［情報処理装置１００のハードウェア構成］
図１０は、本実施の形態における情報処理装置１００（図１、図２）のハードウェア構成図である。情報処理装置１００は、例えば、ＣＰＵ（Central Processing Unit：ＣＰＵ）１０１、メインメモリ２０１や補助記憶装置２０２等を備えるメモリ１０２、通信インタフェース部１０３、外部インタフェース部１０４を有する。各部は、バス１０６を介して相互に接続する。
【００９４】
ＣＰＵ１０１は、バス１０６を介してメモリ１０２等と接続するとともに、情報処理装置１００全体の制御を行う。通信インタフェース部１０３は、インターネット等を介して、他の機器（図示せず）と接続し、ネットワークに対するアクセスを行う。ＲＡＭ（Random Access Memory：ＲＡＭ）等を示すメインメモリ２０１は、ＣＰＵ１０１が処理を行うデータ等を記憶する。また、外部インタフェース部１０４は、ストレージ装置ＳＤ等と接続する。
【００９５】
補助記憶装置２０２は、ＣＰＵ１０１が実行するオペレーションシステムのプログラムを格納する領域（図示せず）を備える。また、補助記憶装置２０２は、ソフトウェアプログラム格納領域２０、ドライバプログラム格納領域１０、テストプログラム格納領域３０を備える。また、補助記憶装置２０２は、ログ情報格納領域５０、パラメータファイル群格納領域６０を有する。補助記憶装置２０２は、ＨＤＤ（Hard disk drive：ＨＤＤ）、不揮発性半導体メモリ等を示す。
【００９６】
ソフトウェアプログラム格納領域２０のソフトウェアプログラム（以下、ソフトウェアプログラム２０と称する）は、ＣＰＵ１０１の実行によって、ソフトウェアプログラム（検証対象のソフトウェア）２０の処理を実現する。前述したとおり、ソフトウェアプログラム２０は、例えば、ＤＢＭＳのソフトウェアである。
【００９７】
テストプログラム格納領域３０のテストプログラム３０（以下、テストプログラム３０と称する）は、ＣＰＵ１０１の実行によって、テストプログラム３０の処理を実現する。テストプログラム３０は、ソフトウェアプログラム２０に、テストの開始及び終了を指示する。
【００９８】
ドライバプログラム格納領域１０のドライバプログラム（以下、ドライバプログラム１０と称する）は、ＣＰＵ１０１の実行によって、ストレージ装置ＳＤやメインメモリ２０１等の記憶部やネットワークに対するアクセス処理等を実現する。
【００９９】
ドライバプログラム１０は、ソフトウェアプログラム２０によるアクセス命令に応答して、当該命令に対応する処理を行い、処理結果をソフトウェアプログラム２０に出力する。ドライバプログラム１０の詳細は、図１１のソフトウェアブロック図にしたがって後述する。なお、例えば、検証者は、性能値の測定時に、オペレーションシステム（図示せず）が有するドライバプログラムを、本実施の形態におけるドライバプログラム１０に置き換える。
【０１００】
ログ情報格納領域５０のログ情報（以下、ログ情報５０と称する）は、ドライバプログラム１０が生成する情報であって、図９に示したような第１のログ情報５０−１を示す。なお、ログ情報５０は、ストレージ装置ＳＤに記憶されてもよい。
【０１０１】
パラメータファイル群格納領域６０のパラメータファイル群（以下、パラメータファイル群６０と称する）は、ドライバプログラム１０が参照する情報である。パラメータファイル群６０が有する各パラメータファイルの詳細は、図１１にしたがって後述する。
【０１０２】
［情報処理装置１００のソフトウェアブロック］
図１１は、図１０に示したドライバプログラム１０のソフトウェアブロックの構成図である。ドライバプログラム１０は、例えば、制御モジュール１１１、アクセスモジュール１１２、実行管理モジュール１１３、ログ情報生成モジュール１１４を有する。
【０１０３】
制御モジュール１１１は、各モジュール１１１〜１１４の制御を行う。アクセスモジュール１１２は、検証対象のソフトウェア２０のプロセスによる、記憶部やネットワーク等に対するアクセスを検出し、アクセスに応じた処理を実行する。
【０１０４】
実行管理モジュール１１３は、パラメータファイル群６０を参照し、検証対象のプロセスｐｘの性能値の測定時に、ログ情報５０の採取を行うための性能値の再測定を行うか否かを判定する。性能値の再測定を行う場合、実行管理モジュール１１３は、ログ情報生成モジュール１１４にログ情報５０の生成を指示する。
【０１０５】
ログ情報生成モジュール１１４は、パラメータファイル群６０を参照し、子プロセスｐｘｃの生成及び終了を検出する。そして、ログ情報生成モジュール１１４は、子プロセスｐｘｃの生成及び終了を検出したタイミングの、検証対象のプロセスｐｘによるアクセスのアクセス情報と、子プロセスｐｘｃの識別情報とを、ログ情報５０として記憶する。
【０１０６】
パラメータファイル群は、検証対象プロセステーブル６０ａ、プロセス生成アドレステーブル６０ｂ、子プロセス管理テーブル６０ｃ、候補プロセステーブル６０ｄを有する。検証対象プロセステーブル６０ａ、及び、プロセス生成アドレステーブル６０ｂを、図１２にしたがって説明する。また、子プロセス管理テーブル６０ｃを図１３にしたがって、候補プロセステーブル６０ｄを図１８にしたがって後述する。
【０１０７】
図１２は、図１１に示した、検証対象プロセステーブル６０ａ、及び、プロセス生成アドレステーブル６０ｂの一例を示す図である。
【０１０８】
［検証対象プロセステーブル６０ａ］
図１２の（Ａ）は、図１１に示した検証対象プロセステーブル６０ａの一例を示す図である。検証対象プロセステーブル６０ａは、検証対象のプロセスｐｘの識別情報（例えば、プロセス名）を有する。具体的に、図１２の（Ａ）に示す検証対象プロセステーブル６０ａは、検証対象のプロセスｐｘのプロセス名「ｍｗｐｒｏｃ」、「ｍｗｐｒｖ」を有する。
【０１０９】
［プロセス生成アドレステーブル６０ｂ］
図１２の（Ｂ）は、図１１に示したプロセス生成アドレステーブル６０ｂの一例を示す図である。プロセス生成アドレステーブル６０ｂは、図１２の（Ａ）の検証対象プロセステーブル６０ａに示す検証対象のプロセスｐｘの、子プロセスｐｘｃの生成を指示する実行ファイルｅｘのアドレスを有する。
【０１１０】
図１２の（Ｂ）に示すプロセス生成アドレステーブル６０ｂは、アドレス「０ｘ１０１ａｂｄｄ０」、「０ｘ１０２０５ａ００」を有する。したがって、ドライバプログラム１０は、検証対象のプロセスｐｘがアドレス「０ｘ１０１ａｂｄｄ０」、「０ｘ１０２０５ａ００」に対してアクセスした場合に、子プロセスｐｘｃの生成を検出する。
【０１１１】
［子プロセス管理テーブル６０ｃ］
図１３は、図１１に示した子プロセス管理テーブル６０ｃの一例を示す図である。ログ情報生成モジュール１１４は、子プロセス管理テーブル６０ｃを生成する。子プロセス管理テーブル６０ｃは、検証対象のプロセスｐｘのプロセスＩＤ（identifier：ＩＤ）の情報Ｙ１、子プロセスｐｘｃの数Ｙ２、子プロセスｐｘｃのプロセスＩＤの情報Ｙ３を有する。
【０１１２】
図１３の例によると、子プロセス管理テーブル６０ｃは、シーケンス番号「１」のソフトウェア２０について、検証対象のプロセスｐｘのプロセスＩＤ「０１１」の情報Ｙ１と、生成した子プロセスｐｘｃの数「３」Ｙ２を有する。また、子プロセス管理テーブル６０ｃは、３つの子プロセスｐｘｃのプロセスＩＤ「１７５，１７６，１７９」の情報Ｙ３を有する。
【０１１３】
［第１のログ情報５０−１の別の形態］
なお、ドライバプログラム１０は、子プロセスｐｘｃの生成及び終了を検出したタイミングとは異なるタイミングに、検証対象のプロセスｐｘによるアクセスの発生に応じて、アクセス情報をさらに記憶してもよい。次に、図１４にしたがって、図９に示した第１のログ情報５０−１の別の形態を例示する。
【０１１４】
図１４は、第１のログ情報５０−１の別の形態のログ情報５０−１ｘを説明する図である。図１４に示す第１のログ情報５０−１ｘは、図９に示した、第１のログ情報５０−１の情報ｌｅ１、ｌｅ２を含む。具体的に、図１４に示す情報ｌｅ１２は情報ｌｅ１（図９）に対応し、図１４に示す情報ｌｅ１４は情報ｌｅ２（図９）に対応する。
【０１１５】
図１４に示す情報ｌｅ１１は、子プロセスｐｘｃの生成及び終了を検出したタイミングとは異なるタイミングの、検証対象のプロセスｐｘによるアクセスの情報を示す。このように、子プロセスｐｘｃの生成及び終了を検出したタイミングとは異なるタイミングのアクセス情報ｌｅ１１に、さらに基づくことにより、検証対象のプロセスｐｘの処理の内容をより詳細に把握可能になる。
【０１１６】
したがって、子プロセスｐｘｃの生成及び終了が、検証対象のプロセスｐｘのいずれの処理の実行中に生じたかをより高精度に把握可能になり、より高精度に性能値のばらつきの要因を特定可能になる。
【０１１７】
また、ドライバプログラム１０は、子プロセスｐｘｃのアクセスの発生に応じて、子プロセスｐｘｃのアクセスに関する情報をさらに記憶してもよい。図１４に示す情報ｌｅ１３は、子プロセスｐｘｃによるアクセスの情報を示す。子プロセスｐｘｃのアクセス情報ｌｅ１３に基づくことにより、子プロセスｐｘｃの処理の内容を把握可能になる。
【０１１８】
したがって、さらに、子プロセスｐｘｃの生成及び終了に加えて、子プロセスｐｘｃがいずれの処理の実行中に、検証対象のプロセスｐｘのいずれの処理が実行されたかを把握可能になる。これにより、性能値のばらつきの要因を、より高精度に特定可能になる。
【０１１９】
なお、図示していないが、ドライバプログラム１０は、子プロセスｐｘｃの終了を検出したタイミングに対応するアクセスに関する情報を、ＣＰＵが子プロセスｐｘｃの実行に使用した実行時間（ＣＰＵ実行時間）にさらに関連付けて記憶してもよい。即ち、ドライバプログラム１０は、情報ｌｅ１４に、子プロセスｐｘｃのＣＰＵ実行時間をさらに記録してもよい。これにより、検証者は、子プロセスｐｘｃの処理の負荷を把握することができ、子プロセスｐｘｃの処理をより的確に把握できる。
【０１２０】
［性能値のばらつきの別の例］
ここで、ドライバプログラム１０の処理の詳細を説明する前に、図１５、図１６にしたがって、性能値のばらつきが生じる別の例を説明する。図１５、図１６の例における性能値のばらつきの要因を特定するために、ドライバプログラム１０は、さらに、別の情報を採取してもよい。
【０１２１】
図１５、図１６は、検証対象のプロセスｐｘの性能値の測定中に、性能値の検証対象外のプロセスｐｙが動作する場合を例示する。図１５、図１６の例では、検証システムは、図４〜図６の例と同様にして、サービスの開始後、終了するまでの時間を、性能値として測定する。
【０１２２】
図１５は、検証対象外のプロセスｐｙの実行に応じて、性能値が変動する例を説明する第１の図である。図１５において、図４〜図６で示したものと同一のものは、同一の記号で示す。
【０１２３】
検証対象外のプロセスｐｙは、前述したとおり、オペレーションシステムや検証対象外のソフトウェアのプロセスを示す。検証対象外のプロセスｐｙの一例は、監視処理を行うプロセスであって、所定の変化をトリガーとして所定の処理を行うプロセスである。本実施の形態例では、検証対象外のプロセスｐｙが、メモリ、Ｉ／Ｏ等のパトロールを行う非常駐のプロセスである場合を例示する。
【０１２４】
テストプログラム３０が検証対象のソフトウェア２０にサービスの開始を指示すると、検証対象のプロセスｐｘは、テストプログラム３０からの指示に応じて、一連の処理を行う。一連の処理を終了すると、検証対象のプロセスｐｘは、一連の処理の終了をテストプログラム３０に通知する。
【０１２５】
図１５の例によると、検証対象のプロセスｐｘによる処理ｐｒ１と、パトロール処理のプロセス（検証対象外のプロセスｐｙ）の処理ｐｒ２が同じ時間帯に実行される。図３で前述したとおり、オペレーションシステムは、各プロセスに交互にＣＰＵを割り当てる。したがって、パトロールを行うプロセスｐｒの処理ｐｒ２が、検証対象のプロセスｐｘの処理ｐｒ１と同じ時間帯に実行されることにより、検証対象のプロセスｐｘの処理が一時、待機状態となる。これにより、サービスを開始してから終了するまでの処理時間ｔｍ２１が長くなる。
【０１２６】
図１６は、検証対象外のプロセスｐｙの実行に応じて、性能値が変動する例を説明する第２の図である。図１６において、図１５で示したものと同一のものは、同一の記号で示す。
【０１２７】
図１６の例では、パトロールを行うプロセスｐｙの処理ｐｒ２は、検証対象のプロセスｐｘのＩ／Ｏ待ちの状態（矢印無し部分）である時間帯に実行される。したがって、図１６の例における処理時間ｔｍ２２は、図１５の例における処理時間ｔｍ２１に対して短い。
【０１２８】
また、図示していないが、サービスの開始から終了までの時間帯に、パトロールを行うプロセスｐｙが動作しない場合、処理時間は、図１５、図１６の例に対してさらに短くなる。このように、検証対象のプロセスｐｘの処理ｐｒ１と、検証対象外のプロセスｐｙの処理ｐｒ２との実行される時間帯の重複の度合いに応じて、処理時間は長くなる。
【０１２９】
図１５、図１６に示すように、検証対象のプロセスｐｘがいずれの処理を行っている際に、検証対象外のプロセスｐｙが処理ｐｒ２を行ったかに応じて、性能値が変化する場合がある。したがって、性能値を複数回に渡って測定する場合、複数の性能値の間でばらつきが生じる。
【０１３０】
図１５、図１６の例によると、性能値のばらつきの要因を特定するために、検証対象のプロセスｐｘがいずれの処理を行っている際に、パトロールを行うプロセスｐｙの処理が行われたかを示す情報を採取することが求められる。
【０１３１】
したがって、ドライバプログラム１０は、子プロセスｐｘｃの生成及び終了を検出したタイミングとは異なるタイミングに、アクセスの発生に応じて、検証対象外のプロセスｐｙの実行にＣＰＵが使用した実行時間（ＣＰＵ実行時間）をさらに記憶してもよい。ドライバプログラム１０は、図９、図１４に示したログ第１のログ情報５０−１、５０−１ｘに加えて、図１７に示す第２のログ情報５０−２を生成してもよい。
【０１３２】
［第２のログ情報５０−２］
図１７は、第２のログ情報５０−２の一例を示す図である。図１７における矢印Ｙ１１は、ＣＰＵ実行時間を示す。図１７に示す第２のログ情報５０−２は、検証対象のプロセスｐｘによるアクセスの発生を検出したタイミングに対応する、当該アクセスに関する情報（以下、アクセス情報ともいう）、及び、検証対象外のプロセスｐｙのＣＰＵ実行時間Ｙ１を有する。図１７の例では、アクセス情報は、アクセスのシーケンス番号（１〜６）と、アクセス対象のアドレスを示す。
【０１３３】
図１７に示す情報ｌｅ２１によると、シーケンス番号「４」のプロセスＩＤ「１００１」のＣＰＵ実行時間は、値「１．１００１２２」である。一方、情報ｌｅ２２によると、シーケンス番号「５」のプロセスＩＤ「１００１」のＣＰＵ実行時間は、値「１．１０２３７５」である。つまり、シーケンス番号「４」のアクセスから、シーケンス番号「５」のアクセスにかけて、プロセスＩＤ「１００１」のＣＰＵ実行時間が値「１．１００１２２」から値「１．１０２３７５」に増加している。
【０１３４】
これは、シーケンス番号「４」のアクセスからシーケンス番号「５」のアクセスまでの間の時間帯に、プロセスＩＤ「１００１」が示す検証対象外のプロセスｐｙがＣＰＵを使用したことを示す。即ち、シーケンス番号「４」のアクセスからシーケンス番号「５」のアクセスまでの間の時間帯に、検証対象外のプロセスｐｙが処理を行ったことを示す。また、前述したとおり、検証者は、アクセス情報に基づくことにより、各アクセスが、検証対象のプロセスｐｘがいずれの処理を行っている際のアクセスであるかを把握できる。
【０１３５】
したがって、検証対象のプロセスｐｘのアクセス情報を、検証対象外のプロセスｐｙのＣＰＵ実行時間と対応して記録することによって、検証対象のプロセスｐｘがいずれの処理を行っている際に、検証対象外のプロセスｐｙの処理が行われたかを把握可能になる。
【０１３６】
これにより、図１５、図１６の例において、検証者は、検証対象のプロセスｐｘがいずれの処理ｐｒ１を実行している場合に、パトロール処理のプロセスの処理ｐｒ２が実行されたかを把握できる。したがって、性能値のばらつきが生じた場合、図１７に示す第２のログ情報５０−２に基づいて、性能値のばらつきが、ソフトウェア２０の障害に起因して生じたのか、図１５、図１６のような例に基づいて生じたのかを特定可能になる。
【０１３７】
また、本実施の形態におけるドライバプログラム１０は、アクセス情報のみを記憶するため、情報の採取に起因する負荷の増大や、処理時間の長期化を抑制することが可能になる。このように、ドライバプログラム１０は、最小限の情報を記憶することにより、実際の運用時と処理を変えることなく、さらに、検証対象のプロセスｐｘに対応する検証対象外のプロセスｐｙの動作状況を示す情報を採取することができる。これにより、性能値のばらつきの要因を効率的に特定可能になる。
【０１３８】
次に、図１８にしたがって、図１１で説明した、候補プロセステーブル６０ｄの一例を説明する。
【０１３９】
［候補プロセステーブル６０ｄ］
図１８は、図１１に示した候補プロセステーブル６０ｄの一例を示す図である。候補プロセステーブル６０ｄは、図１５〜図１７で説明した、ＣＰＵ実行時間を取得する対象の検証対象外のプロセスｐｙの情報を有する。
【０１４０】
図１８に示す候補プロセステーブル６０ｄは、２つの検証対象外のプロセスｐｙ「ｉｏｐａｔｏｒｏｌ」、「ｄｅｖｄａｅｍｏｎ」の識別情報を有する。したがって、ドライバプログラム１０は、測定時に、プロセス「ｉｏｐａｔｏｒｏｌ」、「ｄｅｖｄａｅｍｏｎ」のＣＰＵ実行時間を取得対象とする。
【０１４１】
［ドライバプログラム１０の処理の詳細］
次に、図１９〜図２７にしたがって、図１１に示したドライバプログラム１０の処理の詳細を説明する。図１９〜図２７の例では、ドライバプログラム１０は、図１４に示した第１のログ情報５０−１ｘと、図１７に示した第２のログ情報５０−２を生成する。なお、図１４に示した第１のログ情報５０−１ｘは、図９に示した第１のログ情報５０−１の情報を含む。したがって、ドライバプログラム１０は、図１９〜図２７の例にしたがって、図９に示した第１のログ情報５０−１を生成可能である。
【０１４２】
図１９は、図１１に示したドライバプログラム１０の処理の流れを説明するフローチャート図である。
【０１４３】
Ｓ１１：ドライバプログラム１０の実行管理モジュール１１３は、第１の実行工程として、測定パラメータ７０−１に基づいて、検証対象のソフトウェア２０の性能値を複数回に渡って測定する。そして、実行管理モジュール１１３は、検証対象のソフトウェア２０について、性能値の再測定の有無を判定し、再測定パラメータ７０−２に記憶する。測定パラメータ７０−１、及び、再測定パラメータ７０−２の詳細は、図２０にしたがって後述する。また、工程Ｓ１１の処理の詳細を、図２１のフローチャート図にしたがって後述する。
【０１４４】
Ｓ１２：実行管理モジュール１１３は、第２の実行工程として、再測定パラメータ７０−２に再測定の指示が行われた検証対象のソフトウェア２０の、性能値を再測定する。再測定の際に、ログ情報生成モジュール１１４は、ログ情報５０（第１のログ情報５０−１ｘ、第２のログ情報５０−２）を記憶する。工程Ｓ１２の処理の詳細を、図２５のフローチャート図にしたがって後述する。
【０１４５】
［第１の実行工程（図１９のＳ１１）］
第１の実行工程の処理の詳細を説明する前に、図２０にしたがって、第１の実行工程の測定パラメータ７０−１、及び、再測定パラメータ７０−２を説明する。なお、図１０に図示していないが、測定パラメータ７０−１及び再測定パラメータ７０−２は、例えば、情報処理装置１００の補助記憶装置２０２に記憶される。
【０１４６】
（再測定パラメータ７０−２）
図２０は、第１の実行工程の測定パラメータ７０−１、及び、再測定パラメータ７０−２を示す図である。図２０の（Ａ）は測定パラメータ７０−１を示し、図２０の（Ｂ）は再測定パラメータ７０−２を示す。
【０１４７】
図２０の（Ａ）に示す測定パラメータ７０−１は、検証対象のソフトウェア２０のシーケンス番号Ｙ２１と、性能値の測定回数Ｙ２２と、検証対象のソフトウェア２０の実行ファイルｅｘのファイルパスＹ２３とを有する。
【０１４８】
具体的に、図２０の（Ａ）によると、シーケンス番号「１」Ｙ２１が示す、ソフトウェア２０のファイルパスＹ２３は、パス「/usr/kensa/test/testpro1」であって、測定回数Ｙ２２は１００回である。同様にして、シーケンス番号「２」Ｙ２１が示す、ソフトウェア２０のファイルパスＹ２３は、パス「/usr/kensa/test/testpro2」であって、測定回数Ｙ２２は５０回である。
【０１４９】
図２０の（Ｂ）に示す再測定パラメータ７０−２は、図２０の（Ａ）の測定パラメータ７０−１に加えて、再測定フラグＹ３１と、検証対象外のプロセスｐｙのプロセスＩＤの情報Ｙ３２を有する。再測定フラグＹ２１は、対象のシーケンス番号のソフトウェア２０の性能値の再測定を行うか否かを示す。また、プロセスＩＤの情報Ｙ３２は、測定時に処理が実行されていた検証対象外のプロセスｐｙを示す。
【０１５０】
具体的に、図２０の（Ｂ）によると、シーケンス番号「１」Ｙ２１の、検証対象のソフトウェア２０の再測定フラグＹ３１は値「ＯＮ」であり、第２の実行工程（Ｓ１２）で、当該ソフトウェア２０の性能値の再測定を実施することを示す。また、第１の実行工程（Ｓ１１）によるソフトウェア２０の性能値の測定時に、プロセスＩＤ「１２５」Ｙ３２の検証対象外のプロセスｐｙが動作したことを示す。
【０１５１】
また、図２０の（Ｂ）によると、シーケンス番号「２」Ｙ２１のソフトウェア２０の再測定フラグＹ３１は値「ＯＦＦ」であるため、第２の実行工程（Ｓ１２）で、当該ソフトウェア２０の性能値の再測定を実施しないことを示す。
【０１５２】
（第１の実行工程の処理の流れ）
図２１は、第１の実行工程（図１９のＳ１１）の処理の流れを説明するフローチャート図である。実行管理モジュール１１３は、図２０の（Ａ）に示した測定パラメータ７０−１を入力として、図２１のフローチャート図の処理を実行し、図２０の（Ｂ）に示した再測定パラメータ７０−２を出力する。
【０１５３】
Ｓ２１：実行管理モジュール１１３は、測定パラメータ７０−１（図２０の（Ａ））のシーケンス番号を示す、変数「ｉ」に、値「１」をセットする。
【０１５４】
Ｓ２２：実行管理モジュール１１３は、測定パラメータ７０−１の測定回数を示す変数「ｊ」に、値「１」をセットする。
【０１５５】
Ｓ２３：実行管理モジュール１１３は、測定パラメータ７０−１のファイルパスに基づいて、シーケンス番号「ｉ」番目の、検証対象のソフトウェア２０の実行を指示し、検証対象のソフトウェア２０の性能値を測定する。
【０１５６】
このとき、実行管理モジュール１１３は、検証対象のソフトウェア２０の性能値の測定時の、候補プロセステーブル６０ｄ（図１８）に規定した検証対象外のプロセスｐｙのＣＰＵ実行時間を取得し、測定時プロセス管理テーブル８０に記録する。測定時プロセス管理テーブル８０の詳細は、図２２にしたがって後述する。
【０１５７】
具体的に、実行管理モジュール１１３は、測定の開始時、及び、終了時に、検証対象外のプロセスｐｙのＣＰＵ実行時間を取得する。そして、実行管理モジュール１１３は、検証対象のプロセスｐｘの測定の開始時と終了時の、ＣＰＵ実行時間の差を、検証対象外のプロセスｐｙのＣＰＵ実行時間として測定時プロセス管理テーブル８０に記録する。
【０１５８】
Ｓ２４：実行管理モジュール１１３は、測定回数「ｊ」の値をインクリメントする。
【０１５９】
Ｓ２５：実行管理モジュール１１３は、測定回数「ｊ」が、所定回数を超えるか否かを判定する。
【０１６０】
Ｓ２６：所定回数を超える場合（Ｓ２５のＹｅｓ）、実行管理モジュール１１３は、測定結果により再測定が必要かどうか判定する。判定の結果、再測定が必要と判定した場合、再測定パラメータ７０−２（図１９の（Ｂ））における、対象のシーケンス番号「ｉ」の再測定フラグを値「ＯＮ」に設定する。工程Ｓ２６の処理の詳細は、図２３のフローチャート図にしたがって後述する。
【０１６１】
一方、所定回数を超えない場合（Ｓ２５のＮｏ）、実行管理モジュール１１３は、工程Ｓ２３に遷移し、シーケンス番号「ｉ」番目の検証対象のソフトウェア２０の実行を指示する。
【０１６２】
Ｓ２７：再測定の判定（Ｓ２６）の後、実行管理モジュール１１３は、シーケンス番号「ｉ」の値をインクリメントする。
【０１６３】
Ｓ２８：実行管理モジュール１１３は、シーケンス番号「ｉ」の値が、測定パラメータ７０−１に規定された、検証対象のソフトウェア２０の総数を超えたか否かを判定する。変数「ｉ」の値が総数を超える場合（Ｓ２８のＹｅｓ）、全てのソフトウェアを対象として性能値の測定を行ったことを示すため、実行管理モジュール１１３は処理を終了する。
【０１６４】
一方、総数を超えていない場合（Ｓ２８のＮｏ）、実行管理モジュール１１３は、工程Ｓ２２に遷移し、次のソフトウェアを対象として性能値の測定を行う。
【０１６５】
（測定時プロセス管理テーブル８０）
図２２は、測定時プロセス管理テーブル８０の一例を示す図である。図２２に示す測定時プロセス管理テーブル８０は、シーケンス番号Ｙ４１に対応するソフトウェア２０の、各測定回Ｙ４２の、候補プロセステーブル６０ｄに規定した各プロセスのＣＰＵ実行時間を有する。
【０１６６】
情報ｌｅ８１よると、実行シーケンス「１」Ｙ４１の測定回「１」Ｙ４２のプロセス「ｉｏｐａｔｏｒｏｌ」のＣＰＵ実行時間は、値「０．１００１２２」である。また、情報ｌｅ８２によると、実行シーケンス「１」Ｙ４１の測定回「１」Ｙ４２のプロセス「ｄｅｖｄａｅｍｏｎ」のＣＰＵ実行時間は、値「０．００００００」である。
【０１６７】
（再測定の有無の判定（図２０のＳ２６））
図２３は、図２１の工程Ｓ２６に示す再測定の判定処理の流れを説明する第１のフローチャート図である。
【０１６８】
Ｓ３１：実行管理モジュール１１３は、候補プロセステーブル６０ｄ（図１８）を参照し、候補プロセステーブル６０ｄに規定された総プロセス数を変数「Ｎ」にセットする。図１８に示す候補プロセステーブル６０ｄによると、変数「Ｎ」は値「２」である。
【０１６９】
Ｓ３２：実行管理モジュール１１３は、候補プロセステーブル６０ｄに規定されたプロセスのカウンタを示す変数「ｋ」に値「１」をセットする。
【０１７０】
Ｓ３３：実行管理モジュール１１３は、カウンタを示す変数「ｍ」に値「１」を、測定回を示す変数「ｊ」に値「１」をセットする。
【０１７１】
Ｓ３４：実行管理モジュール１１３は、図２２に示した測定時プロセス管理テーブル８０を参照し、シーケンス番号「ｉ」、測定回「ｊ」の「ｋ」番目の検証対象外のプロセスｐｙのＣＰＵ実行時間を取得し、値「ｗｏｒｋ（ｋ）」にセットする。
【０１７２】
Ｓ３５：実行管理モジュール１１３は、値「ｗｏｒｋ（ｋ）」が、値「０」より大きいか否かを判定する。即ち、実行管理モジュール１１３は、シーケンス番号「ｉ」、測定回「ｊ」の「ｋ」番目の検証対象外のプロセスｐｙが、測定時に実行されていたか否かを判定する。このように、実行管理モジュール１１３は、測定時プロセス管理テーブル８０に基づいて、候補プロセステーブル６０ｄに規定されたプロセスのうち、測定時に実行されていた検証対象外のプロセスｐｙを抽出する。
【０１７３】
Ｓ３６：値「ｗｏｒｋ（ｋ）」が値「０」である場合（Ｓ３５のＮｏ）、「ｋ」番目の検証対象外のプロセスｐｙが実行されていなかったことを示す。したがって、実行管理モジュール１１３は、測定回「ｊ」の値をインクリメントする。
【０１７４】
Ｓ３７：実行管理モジュール１１３は、測定回「ｊ」の値が、測定回数を超えたか否かを判定する。即ち、実行管理モジュール１１３は、すべての測定回を対象として、工程Ｓ３４〜Ｓ３６の処理を行ったか否かを判定する。測定回数を超えない場合（Ｓ３７のＮｏ）、実行管理モジュール１１３は、工程Ｓ３４の処理に遷移し、別の測定回を対象として、工程Ｓ３４、Ｓ３５の処理を行う。
【０１７５】
Ｓ３８：測定回数を超えた場合（Ｓ３７のＹｅｓ）、実行管理モジュール１１３は、プロセスのカウンタ「ｋ」の値をインクリメントする。
【０１７６】
Ｓ３９：一方、値「ｗｏｒｋ（ｋ）」が値「０」より大きい場合（Ｓ３５のＹｅｓ）、「ｋ」番目の検証対象外のプロセスｐｙの処理が実行されたことを示す。したがって、実行管理モジュール１１３は、ワークフラグを値「ＯＮ」に設定するとともに、ワークリスト（ｍ）に、「ｋ」番目のプロセス名（プロセスＩＤ）を格納する。また、実行管理モジュール１１３は、カウンタ「ｍ」の値をインクリメントする。
【０１７７】
図２１の測定時プロセス管理テーブル８０によると、シーケンス番号「１」の検証対象のソフトウェア２０の１、２回目の測定時に、「ｋ＝１」のプロセス「ｉｏｐａｔｏｒｏｌ」のＣＰＵ実行時間が値「０」より大きい。したがって、実行管理モジュール１１３は、シーケンス番号「１」の検証対象のソフトウェア２０のワークフラグを値「ＯＮ」に設定するとともに、ワーク（ｍ）に、プロセス名「ｉｏｐａｔｏｒｏｌ」を格納する。
【０１７８】
Ｓ４０：実行管理モジュール１１３は、プロセスのカウンタ「ｋ」の値が、候補プロセステーブル６０ｄが有する総プロセス数「Ｎ」の値を超えるか否かを判定する。超えない場合（Ｓ４０のＮｏ）、実行管理モジュール１１３は、工程Ｓ３３の処理に遷移する。即ち、実行管理モジュール１１３は、別の検証対象外のプロセスｐｙを対象として、工程Ｓ３３〜Ｓ３９の処理を行う。
【０１７９】
一方、プロセスのカウンタ「ｋ」の値が、候補プロセステーブル６０ｄが有する総プロセス数「Ｎ」の値を超えた場合（Ｓ４０のＹｅｓ）、実行管理モジュール１１３は、図２４のフローチャート図の処理に遷移する（Ａ１）。
【０１８０】
図２４は、図２１の工程Ｓ２６に示す再測定の判定処理の流れを説明する第２のフローチャート図である。図２４は、図２３（Ａ１）の続きの処理を示すフローチャート図である。
【０１８１】
Ｓ５１：実行管理モジュール１１３は、ワークフラグが値「ＯＮ」であるか否かを判定する。即ち、実行管理モジュール１１３は、図２２の工程Ｓ３９で、シーケンス番号「ｉ」のソフトウェア２０のワークフラグが値「ＯＮ」に更新されたか否かを判定する。
【０１８２】
Ｓ５２：ワークフラグが値「ＯＮ」ではない場合（Ｓ５１のＮｏ）、実行管理モジュール１１３は、図２１の工程Ｓ２３にしたがって測定した、シーケンス番号「ｉ」の測定回数分の性能値（処理時間）の分散を算出する。
【０１８３】
Ｓ５３：実行管理モジュール１１３は、算出した分散が、予め定めた所定値を超えるか否かを判定する。所定値は、例えば、検証等にしたがって予め定められる。
【０１８４】
Ｓ５４：分散が所定値を超えない場合（Ｓ５３のＮｏ）、複数の性能値の間でばらつきが生じていないことを示す。したがって、実行管理モジュール１１３は、再測定パラメータ７０−２に、シーケンス番号「ｉ」のソフトウェア２０の再測定フラグが値「ＯＦＦ」である旨の情報を書き込む。
【０１８５】
Ｓ５５：一方、分散が所定値を超える場合（Ｓ５３のＹｅｓ）、複数の性能値の間でばらつきが生じ、ばらつきの要因を特定するために、測定時の情報を採取する必要性がある場合を示す。したがって、実行管理モジュール１１３は、再測定パラメータ７０−２に、シーケンス番号「ｉ」のソフトウェア２０の再測定フラグが値「ＯＮ」である旨の情報を書き込む。
【０１８６】
このように、実行管理モジュール１１３は、第１の実行工程（Ｓ１１）として、検証対象プロセスｐｘによる所定の処理を複数回実行し、複数回の所定の処理の測定値（実行結果情報）を取得する。そして、ドライバプログラム１０は、複数回の測定値（実行結果情報）の分散が所定値を超える場合に、第１のログ情報５０−１、５０−１ｘを生成し、記憶する。
【０１８７】
つまり、実行管理モジュール１１３は、性能値のばらつきを検出した場合に、対象のソフトウェア２０の性能値の再測定を行う旨、判定する。これにより、実行管理モジュール１１３は、当該ソフトウェア２０について、ばらつきの要因を特定可能な情報を採取できる。
【０１８８】
Ｓ５６：ワークフラグが値「ＯＮ」である場合（Ｓ５１のＹｅｓ）、図２３の工程Ｓ３９で、ワークフラグが値「ＯＮ」に更新されたことを示し、測定時に検証対象外のプロセスｐｙの処理が実行されていたことを意味する。
【０１８９】
したがって、実行管理モジュール１１３は、再測定パラメータ７０−２に、シーケンス番号「ｉ」のソフトウェア２０の再測定フラグが値「ＯＮ」である旨の情報を書き込む。また、実行管理モジュール１１３は、再測定パラメータ７０−２に、シーケンス番号「ｉ」のソフトウェア２０の測定時に処理が実行されていたプロセスを示す、ワーク（ｍ）に保持されたプロセスＩＤの情報を追加する。
【０１９０】
このように、実行管理モジュール１１３は、検証対象プロセスｐｘによる所定の処理を複数回実行し、実行の際に検証対象外プロセスｐｙのＣＰＵが使用した実行時間（ＣＰＵ実行時間）が所定値を超える場合に、第２のログ情報５０−２を生成し、記憶する。所定値は、例えば、値「０」である。ただし、この例に限定されるものではなく、所定値は検証等にしたがって設定されてもよい。
【０１９１】
このように、実行管理モジュール１１３は、性能値のばらつきを検出しないソフトウェア２０であっても、測定時に検証対象外のプロセスｐｙの処理が実行されていた場合には、性能値の再測定を行う旨、判定する。例えば、全ての測定回を通して、検証対象外のプロセスｐｙの処理が実行されていた場合、性能値のばらつきは生じないものの、性能値が適切な値ではない場合がある。
【０１９２】
したがって、実行管理モジュール１１３は、検証対象外のプロセスｐｙのＣＰＵ実行時間に基づくことにより、当該ソフトウェア２０について、障害の有無を特定可能な情報を採取できる。
【０１９３】
［第２の実行工程（図１９のＳ１２）］
図２５は、第２の実行工程（図１９のＳ１２）の処理の流れを説明するフローチャート図である。
【０１９４】
Ｓ６１：実行管理モジュール１１３は、再測定パラメータ７０−２（図２０の（Ｂ））のシーケンス番号を示す変数「ｉ」に、値「１」をセットする。
【０１９５】
Ｓ６２：実行管理モジュール１１３は、再測定パラメータ７０−２において、シーケンス番号「ｉ」の検証対象のソフトウェア２０の再測定フラグが値「ＯＮ」であるか否かを判定する。
【０１９６】
Ｓ６３：再測定フラグが値「ＯＮ」である場合（Ｓ６２のＹｅｓ）、実行管理モジュール１１３は、測定時に情報を採取するための設定を行う。具体的に、実行管理モジュール１１３は、再測定パラメータ７０−２のシーケンス番号「ｉ」に、測定時に動作した検証対象外のプロセスＩＤが付与されている場合、対象外プロセスフラグを値「ＯＮ」に設定しておく。対象外プロセスフラグを参照する処理は、図２６にしたがって後述する。
【０１９７】
Ｓ６４：実行管理モジュール１１３は、再測定パラメータ７０−２の測定回数を示す変数「ｊ」に値「１」をセットする。
【０１９８】
Ｓ６５：実行管理モジュール１１３は、再測定パラメータ７０−２に基づいて、シーケンス番号「ｉ」番目の、検証対象のソフトウェア２０の実行を指示し、検証対象のソフトウェア２０の性能値を測定する。ログ情報生成モジュール１１４は、測定時に、ログ情報５０を生成する。
【０１９９】
再測定パラメータ７０−２に検証対象外のプロセスｐｙのプロセスＩＤが記載されていない場合、ログ情報生成モジュール１１４は、第１のログ情報５０−１、５０−１ｘを生成する。また、再測定パラメータ７０−２における再測定フラグが値「ＯＮ」であって、検証対象外のプロセスｐｙのプロセスＩＤが記載されている場合、ログ情報生成モジュール１１４は、第２のログ情報５０−２を生成する。ログ情報生成モジュール１１４の処理の詳細を、図２６にしたがって後述する。
【０２００】
Ｓ６６：実行管理モジュール１１３は、測定回数「ｊ」の値をインクリメントする。
【０２０１】
Ｓ６７：実行管理モジュール１１３は、測定回数「ｊ」が、所定回数を超えるか否かを判定する。
【０２０２】
Ｓ６８：所定回数を超える場合（Ｓ６７のＹｅｓ）、実行管理モジュール１１３は、工程Ｓ６５の検証対象のソフトウェア２０の実行による性能値の測定時に、採取したログ情報５０を出力する。一方、所定回数を超えない場合（Ｓ６７のＮｏ）、実行管理モジュール１１３は、工程Ｓ６５に遷移する。
【０２０３】
Ｓ６９：再測定フラグが値「ＯＮ」ではない場合（Ｓ６２のＮｏ）、または、工程Ｓ６８の後、実行管理モジュール１１３は、シーケンス番号「ｉ」の値をインクリメントする。
【０２０４】
Ｓ７０：実行管理モジュール１１３は、シーケンス番号「ｉ」の値が、検証対象とするソフトウェア２０の総数を超えたか否かを判定する。変数「ｉ」の値がソフトウェア２０の数を超える場合（Ｓ７０のＹｅｓ）、実行管理モジュール１１３は、処理を終了する。
【０２０５】
一方、検証対象とするソフトウェア２０の総数を超えていない場合（Ｓ７０のＮｏ）、実行管理モジュール１１３は、工程Ｓ６４に遷移し、次のソフトウェアを対象として、工程Ｓ６４〜Ｓ６９の処理を行う。
【０２０６】
（ログ情報生成モジュール１１４の処理（図２４のＳ６５））
図２６は、図２４の工程Ｓ６５の、ログ情報生成モジュール１１４の処理を説明する第１のフローチャート図である。
【０２０７】
Ｓ８１：ログ情報生成モジュール１１４は、アクセスの発生を検出すると、図１２の（Ａ）に示した検証対象プロセステーブル６０ａを参照する。そして、ログ情報生成モジュール１１４は、検出したアクセスの呼び出し元のプロセス、または、呼び出し元のプロセスの親プロセスが、検証対象プロセステーブル６０ａに規定されたプロセスに該当するか否かを判定する。該当しない場合（Ｓ８１のＮｏ）、ログ情報生成モジュール１１４は、図２７のフローチャート図の処理に遷移する（Ａ３）。
【０２０８】
Ｓ８２：一方、該当する場合（Ｓ８１のＹｅｓ）、ログ情報生成モジュール１１４は、ログ情報（第１のログ情報５０−１ｘ、第２のログ情報５０−２）に、アクセス情報を記録する。なお、図９に示す第１のログ情報５０−１を生成する場合、ログ情報生成モジュール１１４は、後述する子プロセスｐｘｃの生成及び終了の検出時にのみ、アクセス情報を記録する。
【０２０９】
Ｓ８３：ログ情報生成モジュール１１４は、図２５の工程Ｓ６３で設定した対象外プロセスフラグが値「ＯＮ」であるか否かを判定する。
【０２１０】
Ｓ８４：対象外プロセスフラグが値「ＯＮ」である場合（Ｓ８３のＹｅｓ）、ログ情報生成モジュール１１４は、再測定パラメータ７０−２に指定されたプロセスＩＤの、ＣＰＵ実行時間をオペレーションシステムから取得する。オペレーションは、プロセスＩＤ毎のＣＰＵ実行時間を有する。そして、ログ情報生成モジュール１１４は、図１７に示すように、取得したＣＰＵ実行時間を、第２のログ情報５０−２に追加する。
【０２１１】
なお、対象外プロセスフラグが値「ＯＮ」ではない場合（Ｓ８３のＮｏ）、ログ情報生成モジュール１１４は、工程Ｓ８４の処理を行わない。
【０２１２】
Ｓ８５：ログ情報生成モジュール１１４は、検出したアクセスが読み出しであるか否かを判定する。
【０２１３】
Ｓ８６：読み出しである場合（Ｓ８５のＹｅｓ）、ログ情報生成モジュール１１４は、読み出し対象のアドレスが、プロセス生成アドレステーブル６０ｂに規定されているアドレスであるか否かを判定する。
【０２１４】
Ｓ８７：規定されている場合（Ｓ８６のＹｅｓ）、子プロセスｐｘｃの生成を目的とした、読み出しアクセスであることを示す。したがって、ログ情報生成モジュール１１４は、図１４の情報ｌｅ１２に示すように、子プロセスｐｘｃを生成した旨の情報を、第１のログ情報５０−１ｘに追加して記憶する。
【０２１５】
Ｓ８８：ログ情報生成モジュール１１４は、子プロセスｐｘｃが生成されたことを示す、子プロセス生成フラグを値「ＯＮ」にする（Ａ２）。
【０２１６】
なお、読み出しアクセスではない場合（Ｓ８５のＮｏ）、または、読み出しアドレスがプロセス生成アドレステーブル６０ｂに規定されていない場合（Ｓ８６のＮｏ）、ログ情報生成モジュール１１４は、工程Ｓ８７、Ｓ８８の処理を行わない（Ａ２）。
【０２１７】
図２７は、図２４の工程Ｓ６５の、ログ情報生成モジュール１１４の処理を説明する第２のフローチャート図である。図２７は、図２６の続き（Ａ２）のフローチャート図である。
【０２１８】
Ｓ９１：ログ情報生成モジュール１１４は、子プロセス生成フラグが値「ＯＮ」であるか否かを判定する。
【０２１９】
子プロセス生成フラグが値「ＮＯ」ではない場合（Ｓ９１のＮｏ）、また、図２６のフローチャート図の工程Ｓ８１の判定がＮＯである場合（Ｓ８１のＮｏ：Ａ３）、ログ情報生成モジュール１１４は、後述する工程Ｓ１００の処理に遷移する。
【０２２０】
Ｓ９２：子プロセス生成フラグが値「ＯＮ」である場合（Ｓ９１のＹｅｓ）、子プロセスが生成済みであることを示す。したがって、ログ情報生成モジュール１１４は、オペレーションシステムが有する情報に基づいて、生成した子プロセスｐｘｃが動作中であるか否かを判定する。
【０２２１】
Ｓ９３：子プロセスｐｘｃが動作中である場合（Ｓ９２のＹｅｓ）、ログ情報生成モジュール１１４は、当該子プロセスｐｘｃが、子プロセス管理テーブル６０ｃに追加済みであるか否かを判定する。ログ情報生成モジュール１１４は、追加済みではない場合に、子プロセス管理テーブル６０ｃに、検出した子プロセスｐｘｃの情報を追加する。
【０２２２】
Ｓ９４：一方、子プロセスｐｘｃが動作中ではない場合（Ｓ９２のＮｏ）、ログ情報生成モジュール１１４は、子プロセスｐｘｃの終了を検出する。したがって、ログ情報生成モジュール１１４は、図１４の情報ｌｅ１４に示すように、子プロセスｐｘｃが終了した旨の情報を、第１のログ情報５０−１ｘに追加して記録する。
【０２２３】
Ｓ９５：工程Ｓ９４に続き、ログ情報生成モジュール１１４は、子プロセス生成フラグを値「ＯＦＦ」に設定する。
【０２２４】
Ｓ９６：ログ情報生成モジュール１１４は、アクセスの呼び出し元のプロセスのプロセスＩＤが検証対象プロセステーブル６０ａに規定されていないか否かを判定する。
【０２２５】
Ｓ９７：規定されていない場合（Ｓ９６のＹｅｓ）、生成した子プロセスｐｘｃによるアクセスであることを示す。したがって、ログ情報生成モジュール１１４は、図１４の情報ｌｅ１３に示すように、子プロセスｐｘｃによるアクセスである旨の情報を、第１のログ情報５０−１ｘに追加して記載する。
【０２２６】
このように、ログ情報生成モジュール１１４は、さらに、子プロセスによるアクセス情報を記録することによって、子プロセスｐｘｃの生成及び終了のタイミングに加えて、子プロセスｐｘｃの処理の内容を把握可能にする。
【０２２７】
Ｓ９８：ログ情報生成モジュール１１４は、呼び出し元の子プロセスｐｘｃのプロセスＩＤが、子プロセス管理テーブル６０ｃに登録されていないか否かを判定する。
【０２２８】
Ｓ９９：登録されていない場合（Ｓ９８のＹｅｓ）、同一の実行ファイルｅｘのアドレスに基づいて、複数の子プロセスｐｘｃが生成された場合を示す。この場合、実行ファイルｅｘのデータがキャッシュメモリに記憶されることにより、アクセスモジュール１１２は、当該アドレスにアクセスしたことを検出できず、子プロセスｐｘｃの生成を検出しない場合がある。したがって、ログ情報生成モジュール１１４は、子プロセスｐｘｃによるアクセスの発生に応じて、呼び出し元の子プロセスｐｘｃのプロセスＩＤを、子プロセス管理テーブル６０ｃに追加する。
【０２２９】
一方、登録済みである場合（Ｓ９８のＮｏ）、ログ情報生成モジュール１１４は、工程Ｓ９９の処理を行わない。
【０２３０】
なお、アクセスの呼び出し元のプロセスのプロセスＩＤが、検証対象プロセステーブル６０ａに規定されている場合（Ｓ９６のＮｏ）、検出したアクセスが、検証対象のプロセスｐｘによるアクセスであることを示す。したがって、ログ情報生成モジュール１１４は、工程Ｓ９７〜Ｓ９９の処理を行わない。
【０２３１】
Ｓ１００：工程Ｓ９６がＮｏの場合、工程Ｓ８１がＮｏの場合、工程Ｓ９９の後のいずれかの場合、アクセスモジュール１１２は、検出したアクセスに応じた処理を行う。具体的に、アクセスモジュール１１２は、アクセスに応じて、記憶部に対する読み出し、または、書き込みを行う。また、ネットワークに対するアクセスを検出する場合、アクセスモジュール１１２は、データの送受信を行う。
【０２３２】
［測定結果情報］
図２５、図２６のフローチャート図に示していないが、ドライバプログラム１０は、図２８に示す、測定結果情報９０をさらに生成してもよい。
【０２３３】
図２８は、測定結果情報９０の一例を示す図である。測定結果情報９０は、シーケンス番号毎に、再測定の有無Ｙ５１、性能値のばらつきの有無Ｙ５２、検証対象外のプロセスｐｙの動作の有無等の情報を有する。また、測定結果情報９０は、ばらつき有の場合には、第１のログ情報５０−１ｘへのリンク情報（詳細情報１）を有する。また、測定結果情報９０は、検証対象外のプロセスｐｙの動作の場合には、第２のログ情報５０−２へのリンク情報（詳細情報２）を有する。
【０２３４】
例えば、情報ｌｅ９１は、シーケンス番号「１」の検証対象のソフトウェア２０の性能値にばらつきがあることを示し、第１のログ情報５０−１ｘへのリンク情報を有する。また、情報ｌｅ９１は、当該ソフトウェア２０の測定時に、検証対象外のプロセスｐｙが動作したことを示し、第２のログ情報５０−２へのリンク情報を有する。一方、情報ｌｅ９２は、検証対象外のプロセスｐｙが動作していないことにより、第１のログ情報５０−１ｘへのリンク情報のみを有する。
【０２３５】
［他の実施の形態］
なお、ドライバプログラム１０は、アクセス情報を、ＣＰＵが検証対象のプロセスｐｘの実行に使用した実行時間（ＣＰＵ実行時間）にさらに関連付けて記憶してもよい。これにより、検証者は、アクセスのタイミング毎の検証対象のプロセスｐｘの処理の負荷を把握することができ、検証対象のプロセスｐｘの処理の内容をより的確に把握できる。
【０２３６】
以上の実施の形態をまとめると、次の付記のとおりである。
【０２３７】
（付記１）
コンピュータに、
動作監視の対象プロセスによる、前記対象プロセスの子プロセスの生成の実行を指示する実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、
前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、
前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて記憶部に記憶する、
ことを実行させることを特徴とする制御プログラム。
【０２３８】
（付記２）
付記１において、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、前記アクセスに関する情報をさらに記憶する、
制御プログラム。
【０２３９】
（付記３）
付記２において、
前記記憶は、前記子プロセスのアクセスの発生に応じて、前記子プロセスのアクセスに関する情報をさらに記憶する、
制御プログラム。
【０２４０】
（付記４）
付記１乃至３のいずれかにおいて、
前記アクセスに関する情報は、アクセスの順番情報、アクセスの対象アドレスのいずれかまたは両方を含む、
制御プログラム。
【０２４１】
（付記５）
付記１乃至４のいずれかにおいて、
前記記憶は、前記子プロセスの前記終了を検出したタイミングに対応する、前記アクセスに関する情報を、プロセッサが前記子プロセスの実行に使用した実行時間にさらに関連付けて記憶する、
制御プログラム。
【０２４２】
（付記６）
付記１乃至５のいずれかにおいて、
前記対象プロセスによる所定の処理を複数回実行し、前記複数回の前記所定の処理の実行結果情報を取得し、
前記複数回の前記実行結果情報の分散が所定値を超える場合に、前記生成及び前記終了の検出、及び、前記記憶を行う、
制御プログラム。
【０２４３】
（付記７）
付記１乃至６のいずれかにおいて、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、動作監視の対象外プロセスの実行にプロセッサが使用した実行時間をさらに記憶する、
制御プログラム。
【０２４４】
（付記８）
付記７において、
前記対象プロセスによる所定の処理を複数回実行し、前記実行の際に前記対象外プロセスの前記プロセッサが使用した実行時間が所定値を超える場合に、前記記憶を行う、
制御プログラム。
【０２４５】
（付記９）
処理部は、動作監視の対象プロセスによる、前記対象プロセスの子プロセスの生成の実行を指示する実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、
処理部は、前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、
処理部は、前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて記憶部に記憶する、
制御方法。
【０２４６】
（付記１０）
付記９において、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、前記アクセスに関する情報をさらに記憶する、
制御方法。
【０２４７】
（付記１１）
付記１０において、
前記記憶は、前記子プロセスのアクセスの発生に応じて、前記子プロセスのアクセスに関する情報をさらに記憶する、
制御方法。
【０２４８】
（付記１２）
付記９乃至１１のいずれかにおいて、
前記アクセスに関する情報は、アクセスの順番情報、アクセスの対象アドレスのいずれかまたは両方を含む、
制御方法。
【０２４９】
（付記１３）
付記９乃至１２のいずれかにおいて、
前記対象プロセスによる所定の処理を複数回実行し、前記複数回の前記所定の処理の実行結果情報を取得し、
前記複数回の前記実行結果情報の分散が所定値を超える場合に、前記生成及び前記終了の検出、及び、前記記憶を行う、
制御方法。
【０２５０】
（付記１４）
付記９乃至１３のいずれかにおいて、
前記記憶は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、動作監視の対象外プロセスの実行にプロセッサが使用した実行時間をさらに記憶する、
制御方法。
【０２５１】
（付記１５）
動作監視の対象プロセスの子プロセスの生成の実行を指示する実行ファイルを記憶する記憶部と、
前記対象プロセスによる、前記子実行ファイルの読み出しに応じて、前記対象プロセスの子プロセスの生成を検出し、前記子プロセスの生成が検出された後の、前記対象プロセスによる、記憶部またはネットワークに対するアクセスの発生に応じて、前記子プロセスが動作中であるか否かを判定し、動作中ではないと判定した場合に当該子プロセスの終了を検出し、前記子プロセスの前記生成及び前記終了を検出したタイミングそれぞれに対応する、前記対象プロセスによる前記アクセスに関する情報を、前記子プロセスを識別する識別情報に関連付けて前記記憶部に記憶する処理部と、
を有する情報処理装置。
【０２５２】
（付記１６）
付記１５において、
前記処理部は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、前記アクセスに関する情報をさらに記憶する、
情報処理装置。
【０２５３】
（付記１７）
付記１６において、
前記処理部は、前記子プロセスのアクセスの発生に応じて、前記子プロセスのアクセスに関する情報をさらに記憶する、
情報処理装置。
【０２５４】
（付記１８）
付記１５乃至１７のいずれかにおいて、
前記アクセスに関する情報は、アクセスの順番情報、アクセスの対象アドレスのいずれかまたは両方を含む、
情報処理装置。
【０２５５】
（付記１９）
付記１５乃至１８のいずれかにおいて、
前記処理部は、前記対象プロセスによる所定の処理を複数回実行し、前記複数回の前記所定の処理の実行結果情報を取得し、
前記複数回の前記実行結果情報の分散が所定値を超える場合に、前記生成及び前記終了の検出、及び、前記記憶を行う、
情報処理装置。
【０２５６】
（付記２０）
付記１５乃至１９のいずれかにおいて、
前記処理部は、前記子プロセスの生成及び終了を検出した前記タイミングとは異なるタイミングに、前記アクセスの発生に応じて、動作監視の対象外プロセスの実行にプロセッサが使用した実行時間をさらに記憶する、
情報処理装置。
【符号の説明】
【０２５７】
１００：情報処理装置、４０：クライアント装置、ＳＤ：ストレージ装置ＳＤ、２０：検証対象のソフトウェア、１０：ドライバプログラム、３０：テストプログラム、ｐｘ：検証対象のプロセス、ｐｙ：検証対象外のプロセス
【図１】
0006497234.tif 000002
【図２】
0006497234.tif 000003
【図３】
0006497234.tif 000004
【図４】
0006497234.tif 000005
【図５】
0006497234.tif 000006
【図６】
0006497234.tif 000007
【図７】
0006497234.tif 000008
【図８】
0006497234.tif 000009
【図９】
0006497234.tif 000010
【図１０】
0006497234.tif 000011
【図１１】
0006497234.tif 000012
【図１２】
0006497234.tif 000013
【図１３】
0006497234.tif 000014
【図１４】
0006497234.tif 000015
【図１５】
0006497234.tif 000016
【図１６】
0006497234.tif 000017
【図１７】
0006497234.tif 000018
【図１８】
0006497234.tif 000019
【図１９】
0006497234.tif 000020
【図２０】
0006497234.tif 000021
【図２１】
0006497234.tif 000022
【図２２】
0006497234.tif 000023
【図２３】
0006497234.tif 000024
【図２４】
0006497234.tif 000025
【図２５】
0006497234.tif 000026
【図２６】
0006497234.tif 000027
【図２７】
0006497234.tif 000028
【図２８】
0006497234.tif 000029