(57)【特許請求の範囲】
【請求項１】
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定する参照検出部と、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、前記参照検出部により特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定するコマンド特定部と
を備えた情報処理装置。
【請求項２】
前記コマンド特定部により特定されたコマンドに関連する文書情報を取得する文書取得部をさらに備えた、請求項１記載の情報処理装置。
【請求項３】
前記定義情報は、前記実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが、当該データを参照するプロセスごとに対応付けられており、
前記コマンド特定部は、前記参照検出部により特定された前記データの参照先及び当該データを参照したプロセスと、前記定義情報に含まれるデータの参照先及び当該データを参照するプロセスとに基づいて、実行されたコマンドを特定する、請求項１又は２記載の情報処理装置。
【請求項４】
前記データの参照先は、データファイル内において参照された箇所が特定される参照アドレスである、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記参照検出部は、前記プログラムのテスト時の処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該データの参照先を特定する、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記プログラムの処理において出力されたシステムメッセージを検出し、前記実行対象となり得るコマンドと、当該コマンドの実行時に出力されるシステムメッセージとが対応付けられたメッセージ対応情報が記録された記憶部を参照し、検出した前記システムメッセージと、当該メッセージ対応情報に含まれるシステムメッセージとに基づいて、前記出力されたシステムメッセージに対応するコマンドを特定するメッセージ検出部をさらに備えた、請求項１〜５のいずれか１項に記載の情報処理装置。
【請求項７】
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定し、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定する
処理をコンピュータに実行させる情報処理プログラム。
【請求項８】
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定し、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定する
処理をコンピュータが実行する情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータにおいて実行されたコマンドを特定する技術に関する。
【背景技術】
【０００２】
ソフトウェアプログラム製品が出荷される際には、プログラムに関する内容を含んだ文書情報（例えば、プログラムの機能や実行手順、注意事項が記載された文書情報等であり、以下、単に文書という）が併せて提供される。ユーザは、当該プログラムを自身のシステムにおいて使用する際に、プログラムの動作設定やシステム環境、使用する機能等に関連する文書を参照する。
【０００３】
ここで、このような文書は、ソフトウェアプログラム製品の出荷後に内容の更新が必要となることがある。一例として、出荷時に提供された文書に不備があった場合等が該当する。この場合、ユーザは、自身のプログラムの使用状況に関連する文書の更新情報を自ら探して取得することとなる。
なお、従来技術の一例として、システムで生じたエラーに対応する情報を取得して利用者端末に提示する技術が提供されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２８８８２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ユーザが、自身のプログラムの使用状況に関連する文書の更新情報を自ら探して取得することは、ユーザにとって負担となる。このため、ユーザが使用するコンピュータにおいてどのような機能が実現されたか、すなわち、どのようなコマンドが実行されたかを自動的に特定し、実行されたコマンドに関連する文書を取得できるようにすることが望ましい。なお、このように実行されたコマンドを特定することは、文書の取得に限らず、コンピュータの使用状況に基づいた様々な情報を取得する際にも同様に適用することができる。
そこで、本発明の１つの態様では、少なくとも、コンピュータにおいて実行されたコマンドを特定できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
本発明の１つの態様では、プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定する。また、プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、特定されたデータの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定する。
【発明の効果】
【０００７】
本発明の１つの態様によれば、コンピュータにおいて実行されたコマンドを特定することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】本実施形態におけるシステム全体の一例の概要の説明図である。
【図２】プログラム開発サーバの機能構成及びデータ構成の一例の説明図である。
【図３】対象アドレステーブル（プログラム開発サーバ）の一例の説明図である。
【図４】参照アドレステーブル（プログラム開発サーバ）の一例の説明図である。
【図５】プロセス生成終了時刻テーブル（プログラム開発サーバ）の一例の説明図である。
【図６】アクセス記録テーブル（プログラム開発サーバ）の一例の説明図である。
【図７】特徴定義テーブル（プログラム開発サーバ）の一例の説明図である。
【図８】初期処理（プログラム開発サーバ）の一例のフローチャートである。
【図９】コマンド実行処理（プログラム開発サーバ）の一例のフローチャートである。
【図１０】トレース処理（プログラム開発サーバ）の一例のフローチャートである。
【図１１】read命令の対象となった参照アドレスを特定する方法の一例を示す説明図である。
【図１２】プロセス監視処理（プログラム開発サーバ）の一例のフローチャートである。
【図１３】アクセス記録処理の一例のフローチャートである。
【図１４】特徴定義テーブル生成処理の一例のフローチャートである。
【図１５】ユーザ側サーバの機能構成及びデータ構成の一例の説明図である。
【図１６】特徴定義テーブル（ユーザ側サーバ）の一例の説明図である。
【図１７】対象アドレステーブル（ユーザ側サーバ）の一例の説明図である。
【図１８】参照アドレステーブル（ユーザ側サーバ）の一例の説明図である。
【図１９】プロセス生成終了時刻テーブル（ユーザ側サーバ）の一例の説明図である。
【図２０】使用コマンドテーブルの一例の説明図である。
【図２１】初期処理（ユーザ側サーバ）の一例のフローチャートである。
【図２２】コマンド実行処理（ユーザ側サーバ）の一例のフローチャートである。
【図２３】トレース処理（ユーザ側サーバ）の一例のフローチャートである。
【図２４】プロセス監視処理（ユーザ側サーバ）の一例のフローチャートである。
【図２５】コマンド特定処理の一例のフローチャートである。
【図２６】文書取得処理の一例のフローチャートである。
【図２７】文書提供サーバの機能構成及びデータ構成の一例の説明図である。
【図２８】ユーザ側サーバ情報の一例の説明図である。
【図２９】対応文書テーブルの一例の説明図である。
【図３０】文書ファイルの一例の説明図である。
【図３１】文書提供処理の一例のフローチャートである。
【図３２】ジョブ名及びコマンド名の対応テーブルの一例の説明図である。
【図３３】ユーザ側サーバの機能構成及びデータ構成の一例（第２実施例）の説明図である。
【図３４】コマンド・メッセージ対応テーブルの一例の説明図である。
【図３５】メッセージ検出・コマンド特定処理の一例のフローチャートである。
【図３６】本実施形態における管理サーバのハードウェア構成の一例である。
【発明を実施するための形態】
【０００９】
［本実施形態における背景、課題及び手段の概要］
本実施形態では、ソフトウェアプログラム製品が導入されたコンピュータにおける特定のファイルへのアクセス状況から、当該コンピュータで実行されたプログラムのコマンドを特定する技術について説明する。本実施形態では、このようにコマンドを特定する技術を、例えば、ユーザが使用するサーバ（コンピュータの一例である）の構築時のテストの際に適用する。これにより、当該サーバにおいてユーザにより使用されるコマンドを特定しておく。そして、一例として、プログラムに関する内容を含んだ文書において更新が発生した場合等に、ユーザにより使用されるコマンドに関連する文書を自動抽出できるようにする。
【００１０】
本実施形態の技術的背景について具体的に説明する。前述したように、ソフトウェアプログラム製品が出荷される際には、プログラムに関する内容を含んだ文書が併せて提供される。ユーザは、当該プログラムを自身のシステムにおいて使用する際に、プログラムの動作設定やシステム環境、使用する機能等に関連する文書を参照する。
【００１１】
ここで、例えば、このような文書において不備等があることが把握された場合、ユーザによる運用開始前であれば、その不備等を修正する更新情報が具体的にユーザに通知され得る。例えば、ユーザが使用するプログラムがサーバシステムで動作するものである場合には、サーバシステムの構築を行なったメーカや専門業者によって、このような更新情報がユーザに通知され得る。しかし、例えば、ユーザがシステムの運用を開始した後にメーカ等によって公開された更新情報については、必ずしもユーザに対して具体的に通知されるわけではない。
【００１２】
ここで、例えば、プログラムの不具合等については、例えば、ユーザのシステムにおけるプログラム更新の適用状況を示すシステムファイルとメーカ側のマスタ情報とに基づいて、未適用の更新の自動抽出及び更新の反映を行なう技術が用いられている。しかし、文書の不備等については、プログラムの更新のように自動で行う技術は用いられていない。このため、ユーザが、メーカが公開した文書の更新情報から、自身のシステムにおけるプログラムの動作設定やシステム環境、使用する機能等に関連する更新情報を手作業で探して取得することとなる。この方法は、ユーザにとって負担が大きい上に、精度が低い。したがって、ユーザのシステムにおけるソフトウェアの動作設定やシステム環境、使用する機能等を特定し、関連する情報を自動抽出できることが望ましい。
【００１３】
ここで、これらの特定すべき事項のうち、プログラムの動作設定については、ユーザのシステムにおける設定ファイルを参照することで特定できる。また、システム環境（例えば、ソフトウェアの版数、ハードウェアの機種及びオペレーティングシステム（ＯＳ：Operating System）の起動からの経過時間等）については、ＯＳの標準機能により特定することが可能である。
【００１４】
しかし、ユーザが使用対象としているプログラムの機能、すなわち、ユーザが実行対象としているコマンドをどのように特定するかが問題となる。その理由の１つとして、ユーザが使用対象としているコマンドの全てが、当該コマンドを特定する処理を行う時点で実行中であるとは限らないということがある。例えば、バックアップ等のバッチ処理においては、当該処理が実行されるときにだけ動的にコマンドが実行され、プロセスが生成されることが多い。
【００１５】
そこで、１つの方法例として、システムで動作したプロセスについてのログを蓄積する方法が考えられる。この方法によれば、ログに基づいて、動作したプロセスを特定することができる。しかし、今後に開発するプログラムであれば、例えばテスト時におけるプロセスの生成時にログを記録するようにプログラムに組み込むことが可能であるが、すでに出荷済みのソフトウェアプログラム製品やＯＥＭ（original equipment manufacturer）製品では、プログラムに対してそのような設定をすることができない。ここで、テスト時にのみログを記録するようにプログラムに組み込むことができたとしても、実際の運用時においてもテストか否か（ログを記録するか否か）の判定処理が発生するため、当該処理による負荷が生じてしまう。
【００１６】
また、そもそもプロセスとコマンドとは１対１の関係にあるとは限らず、１つのプロセスで複数のコマンドに対応するモードを制御するような場合がある。そして、文書の内容が、「あるプロセスで動作する特定のモード」にのみ対応している場合がある。具体例を１つ挙げると、常駐プロセスにより通信制御を行うプログラムにおいて、提供された文書が「○○の通信制御において、プロトコルＮｏ．１を使用した送受信において、△△のようなデータを扱う場合、□□して下さい」といった内容であるとする。この場合、ユーザは、当該プログラムを用いた通信において「プロトコルＮｏ．１」を使用している場合にのみ、当該文書を参照すればよい。しかし、通常の通信制御において、プロトコルは、通信元の他のコンピュータが、セッション確立要求コマンドのパラメータによって動的に指定する。このとき、コマンドのパラメータによって指定されるプロトコルが異なっていても、処理をするプロセス自体は同じ常駐プロセスである（なお、ソフトウェアの定義ファイルにも、プロトコルに関する情報は含まれていない）。したがって、プロセスを特定できたとしても、実行されるコマンドに関する情報、すなわち、ユーザが必要とする文書を特定できる情報まで取得できるとは限らない。
【００１７】
そこで、本実施形態では、それぞれのコマンドが実行される際に、特定のファイルアクセス（例えば、動作環境ファイルの参照や一時ファイルの生成等）を行うことに着目している。すなわち、本実施形態では、コマンドと当該コマンドの実行の際に発生するファイルアクセスとを対応付けた特徴定義テーブルを予め生成しておく。さらに、ユーザのシステムにおいてどのようなファイルアクセスが行なわれたかを記録する。そして、当該アクセスの記録と、特徴定義テーブルとを照合し、どのコマンドが実行されたかを特定する。
【００１８】
なお、特徴定義テーブルは、例えばメーカの担当者等が予め生成しておけばよいが、開発した時期が古いソフトウェアやＯＥＭ製品では、ソフトウェアの仕様が必ずしも詳細に把握できるとは限らない。このため、本実施形態では、一例として、メーカ等において、コマンド実行に対応するプロセス及びアクセス対象となるファイルを抽出して特徴定義テーブルを自動生成する処理を行う。また、アクセス情報の記録については、ユーザのシステムにおけるテスト時（システムの導入時）に、ユーザが実行することとなるコマンドを実際に実行する。そして、この際に、ディスクアクセスのトレースプログラムを実行し、コマンド実行に伴うディスクアクセスの詳細情報を記録する。
【００１９】
本実施形態によれば、上記の処理により、ユーザのシステムにおいて、どのコマンドが実行されたかを特定することができる。そして、これにより、ユーザのシステムにおいて使用されるコマンドに対応する文書、すなわち、ユーザが必要とする文書を特定できる情報を特定することができる。したがって、ユーザが必要とする文書、すなわち、ユーザによるソフトウェアの使用状況に関連する文書を自動抽出することが可能となる。
以下、このような本実施形態のシステムについて詳細に説明する。
【００２０】
［第１実施例］
＜システムの全体説明＞
図１は、本実施形態におけるシステム全体の一例の概要を示すとともに、システムに含まれる各サーバにおける処理の概要及びサーバ間における連携についての一例を示した図である。
【００２１】
本実施形態のシステムは、ソフトウェアプログラム製品を提供するメーカが使用するメーカ側システム１と、ソフトウェアプログラム製品を使用するユーザが使用するユーザ側システム２とを含む。メーカ側システム１は、プログラム開発サーバ３及び文書提供サーバ７を含む。プログラム開発サーバ３は、ユーザに提供するソフトウェアプログラム製品のプログラムを開発するために用いるサーバである。文書提供サーバ７は、ユーザ側サーバ５に対し、ユーザ側サーバ５の動作設定やシステム環境、使用する機能等に関連する文書を提供するサーバである。ユーザ側システム２は、ユーザが使用するユーザ側サーバ５を含む。
【００２２】
ここで、図１を参照しながら、各サーバにおける処理の概要及びサーバ間における連携について説明する。
メーカ側システム１のプログラム開発サーバ３は、ソフトウェアを開発したときに、当該ソフトウェアにおいて実行可能なコマンドを実行する（Ｐ１）。当該コマンドは、例えば、メーカの担当者が手動で実行命令を入力することによって実行される。そして、プログラム開発サーバ３は、コマンドが実行されることによって発生する、特定のファイル（データ）に対するアクセス（参照命令）を検出する。なお、本実施形態では、当該ファイルが動作環境ファイルである例を用いて以下の説明を行う。さらに、プログラム開発サーバ３は、ファイルアクセスにおける参照先に関する情報を、コマンドと対応付けて記憶部に記録する（Ｐ２）。そして、プログラム開発サーバ３は、当該記録に基づいて、コマンドに対応するファイルアクセスを示す特徴定義テーブルを生成する（Ｐ３）。この特徴定義テーブル（Ｄ１）は、例えばネットワークを介した送受信や記憶媒体を介した移動等により、ユーザ側システム２のユーザ側サーバ５に渡され、ユーザ側サーバ５の記憶部に記録される。なお、ユーザ側サーバ５は、例えばネットワークを介して、プログラム開発サーバ３の記憶部に記録された特徴定義テーブルを参照してもよい。
【００２３】
ユーザ側システム２のユーザ側サーバ５では、例えばサーバの構築の際、すなわち、ソフトウェアをサーバに導入する際に行われるテストにおいて、次のような処理を実行する。まず、ユーザ側サーバ５は、ユーザによって使用されるコマンドを実行する（Ｐ４）。そして、ユーザ側サーバ５は、コマンドが実行されることによって発生する、動作環境ファイル（データ）に対するアクセス（参照命令）を検出する。さらに、ユーザ側サーバ５は、ファイルアクセスにおける参照先に関する情報を、記憶部に記録する（Ｐ５）。そして、ユーザ側サーバ５は、当該ファイルアクセスに関する情報とプログラム開発サーバ３によって生成された特徴定義テーブルとを照合し、使用されたコマンドを特定する（Ｐ６）。
【００２４】
そして、ユーザ側サーバ５は、文書提供サーバ７に対して、文書の提供要求をネットワークを介して送信する。この際に、ユーザ側サーバ５は、使用されたコマンドに関する情報（Ｄ２）を併せて、メーカ側システム１の文書提供サーバ７に送信する（Ｐ７）。
メーカ側システム１の文書提供サーバ７は、ユーザ側サーバ５から文書の提供要求及び使用されたコマンドに関する情報を受信すると、当該情報に基づいて、ユーザ側サーバ５で使用されたコマンドに関連する文書を特定する（Ｐ８）。そして、文書提供サーバ７は、当該文書（Ｄ３）を、ユーザ側サーバ５に送信し（Ｐ９）、ユーザ側サーバ５が当該文書を受信する（Ｐ１０）。
【００２５】
＜各サーバにおける構成及び処理の説明＞
次に、プログラム開発サーバ３、ユーザ側サーバ５及び文書提供サーバ７のそれぞれにつき、サーバの機能構成及びデータ構成、並びに処理内容の説明をする。
〔プログラム開発サーバの構成〕
【００２６】
図２は、プログラム開発サーバ３の機能構成及びデータ構成を示す。プログラム開発サーバ３は、対象アドレステーブル３１、参照アドレステーブル３２、プロセス生成終了時刻テーブル３３、アクセス記録テーブル３４及び特徴定義テーブル３５が記録された記憶部３０を備える。また、プログラム開発サーバ３は、プログラムがインストールされて実行されることによりその機能が実現され、前述した記憶部３０のデータにアクセスしながら処理を実行する制御部４０を備える。制御部４０は、初期処理部４１、コマンド実行部４２、トレース部４３、プロセス監視部４４、アクセス記録部４５及び特徴定義テーブル生成部４６を備える。
【００２７】
まず、プログラム開発サーバ３の記憶部３０の各データについて、図３〜図７を参照しながら説明する。なお、図面に示すテーブルのデータは、少なくとも一部のデータの具体例を示すものであり、必ずしもデータ全体を示すものではない。
【００２８】
対象アドレステーブル３１は、対象とするソフトウェアのプログラムの実行バイナリ及び動作環境ファイルのアドレス等が記録されるテーブルである。対象アドレステーブル３１は、図３に示すように、実行バイナリ（０）又は動作環境ファイル（１）のいずれかを示す種別、実行バイナリのプロセス名又は動作環境ファイル名（ファイルのパスを含む）及び実行バイナリ又は動作環境ファイルのアドレスの項目を有する。
【００２９】
参照アドレステーブル３２は、コマンドが実行されたときにread命令によって読み込まれた（参照された）アドレス等が記録されるテーブルである。参照アドレステーブル３２は、図４に示すように、参照アドレス及び当該参照が行なわれた時刻の項目を有する。
【００３０】
プロセス生成終了時刻テーブル３３は、コマンドが実行されたときにおけるプロセスの生成及び終了時刻が記録されるテーブルである。プロセス生成終了時刻テーブル３３は、図５に示すように、プロセス名、当該プロセスの生成時刻及び終了時刻の項目を有する。なお、本実施形態では、１つのコマンドについて所定回数繰り返し実行し、それぞれにおいて発生したプロセスについて生成及び終了時刻が記録される。このため、当該プロセス生成終了時刻テーブル３３は、コマンド実行の繰り返し回数ごとにそれぞれ対応して生成される。
【００３１】
アクセス記録テーブル３４は、コマンドが実行されたときに生成されたプロセスによって参照されたアドレスが、コマンド実行の繰り返し回数ごとに記録されるテーブルである。アクセス記録テーブル３４は、図６に示すように、実行されたコマンドのコマンド名、コマンド実行の繰り返し回数、コマンド実行におけるプロセス名及び参照アドレスの項目を含む。
【００３２】
特徴定義テーブル３５は、コマンドに対応するファイルアクセス、すなわち、コマンドが実行されたときにおけるプロセス名と参照アドレス等とが記録されるテーブルである。特徴定義テーブル３５は、図７に示すように、実行されたコマンド名、コマンド実行におけるプロセス名、参照ファイル名及び参照アドレスの項目を含む。
【００３３】
次に、プログラム開発サーバ３の制御部４０の各要素について説明する。
初期処理部４１は、処理対象とするプログラムにおけるプロセスの実行バイナリや動作環境ファイルのアドレスを示す対象アドレステーブル３１を生成する。また、初期処理部４１は、後述するトレース部及びプロセス監視部に処理開始を通知した上で、コマンド実行部４２に処理開始を通知する。これにより、以降においてトレース処理、プロセス監視処理及びコマンド実行処理が並行して実行される。
【００３４】
コマンド実行部４２は、処理対象とするプログラムにおいて実行され得るコマンドを順次実行する。また、コマンド実行部４２は、各コマンドの処理が終了したときには、後述する特徴定義テーブル生成部４６に処理開始を通知する。
【００３５】
トレース部４３は、トレース処理を実行し、コマンドの実行によって発生するread命令を検出する。read命令の対象が実行バイナリのときにはプロセスの生成を検出し、動作環境ファイルのときには参照アドレスを参照アドレステーブル３２に記録する。
プロセス監視部４４は、実行中のプロセスの終了を監視する。そして、プロセスが終了したときには、後述するアクセス記録部４５に処理開始を通知する。
アクセス記録部４５は、プロセスの開始から終了までにおける参照アドレスを参照アドレステーブル３２から取得し、プロセス名と対応付けてアクセス記録テーブル３４に記録する。
【００３６】
特徴定義テーブル生成部４６は、アクセス記録テーブル３４に記録されたプロセス名及び参照アドレスに基づいて、コマンド実行時に発生したプロセス名及び参照アドレス等を特定する。そして、コマンドと、コマンド実行時に発生したプロセス名及び参照アドレス等とを対応付けた特徴定義テーブル３５を生成する。
【００３７】
〔プログラム開発サーバの処理説明〕
プログラム開発サーバ３の初期処理部４１、コマンド実行部４２、トレース部４３、プロセス監視部４４、アクセス記録部４５及び特徴定義テーブル生成部４６により実行される処理の一例の詳細につき、図８〜図１０、図１１〜図１４に示すフローチャートを参照しながら説明する。前提として、プログラム開発サーバ３による以下の処理は、対象とするソフトウェアプログラム製品のソフトウェアパッケージごとに実行される。対象とするソフトウェアパッケージが複数存在する場合には、ソフトウェアパッケージのそれぞれについて実行される。
【００３８】
図８は、初期処理部４１により実行される初期処理の一例を示す。当該処理は、例えばメーカの担当者による入力装置等を介した実行操作に応じて開始する。
ステップＳ１で、初期処理部４１は、ソフトウェアパッケージがインストールされているアドレスを、ＯＳから取得する。
【００３９】
以下のステップＳ２の処理は、ソフトウェアパッケージに含まれるプロセスの数だけ繰り返し実行される（ループ処理Ａ）。なお、ソフトウェアパッケージに含まれるプロセスの数は、ソフトウェアパッケージに含まれるファイルのうち、実行ファイル（例えば拡張子がexeのファイル）をカウントすることによって得ることができる。
【００４０】
ステップＳ２で、初期処理部４１は、予め記憶部３０に設定しておいた、ソフトウェアパッケージにおけるプロセスの実行バイナリ及び動作環境ファイルの相対アドレスを示す情報（図示省略）を参照する。
なお、プロセスの実行バイナリ及び動作環境ファイルの相対アドレスは、例えば次のような方法によって設定することが可能である。すなわち、１つの方法として、公開されているコマンドやシステムコールを使用した方法を用いることができる。より具体的には、ＯＳがＵＮＩＸ（登録商標）である例で説明すると、ソフトウェアパッケージをインストールしたディレクトリにおけるファイルの情報を取得し、ファイルの実行権があるものを実行バイナリのファイルと識別し、read処理のみ可能なものを動作環境ファイル（他のファイルも含む）と識別する。そして、例えばstatシステムコールにより上記のファイルに対するinode番号を取得し、該当するinode構造体に設定されている格納アドレスを取得する。また、他の方法として、カーネル内の制御テーブルをサーチする方法を用いることができる。より具体的には、上記と同様にＯＳがＵＮＩＸ（登録商標）である例で説明すると、全てのinode構造体を検索し、検索の結果抽出できたinode構造体から、ファイルの実行権があるものを実行バイナリのファイルと識別し、read処理のみ可能なものを動作環境ファイル（他のファイルも含む）と識別する。さらに、該当するinode構造体に設定されている格納アドレスを取得する。
そして、初期処理部４１は、当該情報に設定された相対アドレスを、ソフトウェアパッケージがインストールされているアドレスに基づいて絶対アドレスにした上で、対象アドレステーブル３１として記憶部３０に記録する。
【００４１】
ステップＳ３で、初期処理部４１は、トレース処理及びプロセス監視処理をコールする。これにより、トレース部がトレース処理を開始し、プロセス監視部がプロセス監視処理を開始する。
ステップＳ４で、初期処理部４１は、コマンド実行処理をコールする。これにより、コマンド実行部４２がコマンド実行処理を開始する。
すなわち、上記ステップＳ３及びステップＳ４により、トレース処理、プロセス監視処理が起動した上で、コマンド実行処理が実行されることとなる。前述したように、プログラム開発サーバ３は、これらの処理を並行して実行する。
【００４２】
図９は、コマンド実行部４２により実行されるコマンド実行処理の一例を示す。
以下のステップＳ１１〜ステップＳ１３は、実行されるコマンドの数だけ繰り返し実行される（ループ処理Ａ）。さらに、当該ステップＳ１１〜ステップＳ１３は、所定回数（詳細は後述する）だけ繰り返し実行される（ループ処理Ｂ）。それぞれのループ処理において処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数については、記憶部３０に保持する（図示省略）。なお、当該コマンド名及び繰り返し回数は、後述するトレース処理のステップＳ２６やプロセス監視処理のステップＳ３２、アクセス記録処理のステップＳ４３において使用する。
【００４３】
ステップＳ１１で、コマンド実行部４２は、コマンドを実行する。なお、コマンド実行部４２は、例えば、予め設定しておいた実行ファイルに基づいてコマンドを実行してもよいし、メーカの担当者による入力装置等を介した実行操作等に応じてコマンドを実行してもよい。
ステップＳ１２で、コマンド実行部４２は、コマンドによる処理が終了したか否かを判定する。終了していればステップＳ１３に進み、終了していなければそのまま待機する。
ステップＳ１３で、コマンド実行部４２は、特徴定義テーブル生成処理をコールする。これにより、特徴定義テーブル生成部４６が特徴定義テーブル生成処理を開始する。
【００４４】
ここで、上記コマンド実行処理を、所定回数繰り返す理由について説明する。前述したように、当該コマンド実行処理と並行してトレース処理が実行され、コマンド実行により生成されたプロセス及び参照アドレスが記録される。ここで、コマンドが実行され、複数のプロセスが生成された場合、全てのプロセスが、コマンドを実行する度に毎回生成されるとは限らない。動作条件等によって一時的に生成されるプロセスも存在し得る。このため、本実施形態では、コマンドが実行されたときに確実に生成されるプロセス及び参照アドレスのみを特定するべく、コマンドを複数回繰り返して実行し、全ての実行回において共通して生成されたプロセス及び参照アドレスを特定する。なお、コマンドによって生成されるプロセス及び参照アドレスが毎回同じであることが明らかな場合には、このようにコマンドの実行を複数回繰り返す必要はない。
【００４５】
図１０は、トレース部４３により実行されるトレース処理の一例を示す。
以下のステップＳ２１〜ステップＳ２７は、当該トレース処理の実行中、継続的に繰り返し実行される（ループ処理Ａ）。
ステップＳ２１で、トレース部４３は、コマンドが実行されたときに発生する命令をトレースする。
ステップＳ２２で、トレース部４３は、トレースにより検出された命令が、read命令又はwrite命令のいずれかであるかを判定する。read命令である場合には（Ｙｅｓ）、ステップＳ２３に進み、write命令である場合には（Ｎｏ）、通常の書き込み処理を行い、次のトレース処理に移る。
【００４６】
ステップＳ２３で、トレース部４３は、read命令の対象となった参照アドレスを特定し、当該参照アドレスが、対象アドレステーブル３１に含まれるか否かを判定する。含まれる場合には（Ｙｅｓ）、ステップＳ２４に進み、含まれない場合には（Ｎｏ）、次のトレース処理に移る。
ステップＳ２４で、トレース部４３は、対象アドレステーブル３１を参照し、read命令の対象となった参照アドレスが、実行バイナリのアドレスであるか否かを判定する。実行バイナリのアドレスである場合には（Ｙｅｓ）、ステップＳ２５に進み、そうでない場合、すなわち、動作環境ファイルのアドレスである場合には（Ｎｏ）、ステップＳ２７に進む。
【００４７】
ステップＳ２５で、トレース部４３は、プロセスの生成を監視し、プロセスが生成されたか否かを判定する。なお、当該プロセスの生成の監視については、トレース部４３からシグナル等によって通知を受けた別の要素（モジュール）で行ってもよい。プロセスが生成された場合には（Ｙｅｓ）、ステップＳ２６に進み、プロセスが生成されていない場合には（Ｎｏ）、プロセスが生成されるまで待機する。
【００４８】
ステップＳ２６で、トレース部４３は、対象アドレステーブル３１を参照し、参照アドレスからプロセス名を特定する。そして、トレース部４３は、現在処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数に対応するプロセス生成終了時刻テーブル３３に、プロセス名及び現在時刻（プロセス生成時刻とする）を記録する。
ステップＳ２７で、トレース部４３は、read命令の対象となった、動作環境ファイルの参照アドレス及び現在時刻（参照時刻とする）を、参照アドレステーブル３２に記録する。
【００４９】
なお、前述したread命令の対象となった参照アドレスを特定する方法の一例について、図１１を参照して説明する。プログラム開発サーバ３において、対象とするソフトウェアパッケージのプログラムは、コマンドの実行時に、ＯＳを介して、ソフトウェアパッケージがインストールされている記憶領域を参照するread命令を発行する。このとき、プログラムは、プロセスを実行する際には、それぞれのプロセスに対応する箇所をread命令の参照先とする。また、プログラムは、プロセスの処理において、必要に応じ、動作環境ファイルのうち、実行されたコマンドに対応する箇所をread命令の参照先とする。トレース部４３は、上記のトレース処理において、当該read命令を検出し、ＯＳから、read命令の参照先である参照アドレスを取得することができる。なお、当該方法は、後述するユーザ側サーバ５でも同様に適用可能である。
【００５０】
図１２は、プロセス監視部４４により実行されるプロセス監視処理の一例を示す。
以下のステップＳ３１〜ステップＳ３４は、監視対象のプロセスの数だけ繰り返し実行される（ループ処理Ａ）。当該監視対象のプロセスとは、プロセス生成終了時刻テーブル３３に記録されているプロセスであって、且つ、終了時刻が記録されていないプロセスとする。
【００５１】
ステップＳ３１で、プロセス監視部４４は、対象のプロセスが存在するか否かを判定する。存在する場合には（Ｙｅｓ）、次のプロセスの処理に移り、存在しない場合には（Ｎｏ）、ステップＳ３２に進む。
ステップＳ３２で、プロセス監視部４４は、処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数に対応するプロセス生成終了時刻テーブル３３に、プロセス名及び現在時刻（プロセス終了時刻とする）を記録する。
ステップＳ３３で、プロセス監視部４４は、対象のプロセスの監視を終了する。
ステップＳ３４で、プロセス監視部４４は、アクセス記録処理をコールする。これにより、アクセス記録部がアクセス記録処理を開始する。
【００５２】
図１３は、アクセス記録部４５により実行されるアクセス記録処理の一例を示す。
ステップＳ４１で、アクセス記録部４５は、プロセス生成終了時刻テーブル３３を参照し、プロセスの開始時刻及び終了時刻を取得する。
ステップＳ４２で、アクセス記録部４５は、参照アドレステーブル３２を参照し、プロセスの開始時刻から終了時刻までの間の参照アドレスを取得する。
ステップＳ４３で、アクセス記録部４５は、アクセス記録テーブル３４に、処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数、プロセス名及び参照アドレスを記録する。
【００５３】
図１４は、特徴定義テーブル生成部４６により実行される特徴定義テーブル生成処理の一例を示す。当該処理における処理対象のコマンドは、コマンド実行処理のステップＳ１２においてコマンド処理が終了したと判定されたコマンドである。
【００５４】
ステップＳ５１で、特徴定義テーブル生成部４６は、アクセス記録テーブル３４を参照し、対象のコマンド実行時における繰り返し回数ごとのレコードで共通する参照アドレスを特定する。なお、図６のアクセス記録テーブル３４のデータの具体例で説明すると、プロセス名及び参照アドレスが「プロセス１、０ｘ３ｆ２０」及び「プロセス１、０ｘ３５２０」については、コマンドＡの繰り返し処理の１回目及び２回目において共通しているが、２回目における「プロセス２、０ｘ３５２７」については、１回目において存在しない。このため、特徴定義テーブル生成部４６は、「プロセス１、０ｘ３ｆ２０」及び「プロセス１、０ｘ３５２０」を特定する。
【００５５】
ステップＳ５２で、ステップＳ５１で取得したプロセス名及び参照アドレスに基づき、特徴定義テーブル３５に、対象のコマンド、プロセス名、参照ファイル及び参照アドレスを記録する。なお、参照ファイル名は、例えば対象アドレステーブル３１を参照することにより、参照アドレスから特定することが可能である。また、アクセス記録テーブル３４に記録された参照アドレスは絶対アドレスであるため、特徴定義テーブル３５に記録する参照アドレスは、参照ファイル内の相対アドレスに変換したアドレスとする。
以上説明したプログラム開発サーバ３の処理により、特徴定義テーブル３５が生成される。当該特徴定義テーブル３５は、後述するユーザ側サーバにおいて使用される。
【００５６】
〔ユーザ側サーバの構成〕
図１５は、ユーザ側サーバ５の機能構成及びデータ構成を示す。ユーザ側サーバ５は、ユーザ側サーバ５は、特徴定義テーブル５１、対象アドレステーブル５２、参照アドレステーブル５３、プロセス生成終了時刻テーブル５４及び使用コマンドテーブル５５が記録された記憶部５０を備える。また、ユーザ側サーバ５は、プログラムがインストールされて実行されることによりその機能が実現され、前述した記憶部５０のデータにアクセスしながら処理を実行する制御部６０を備える。制御部６０は、初期処理部６１、コマンド実行部６２、トレース部６３、プロセス監視部６４、コマンド特定部６５及び文書取得部６６を備える。
【００５７】
まず、ユーザ側サーバ５の記憶部５０の各データについて、図１６〜図２０を参照しながら説明する。
特徴定義テーブル５１は、プログラム開発サーバ３で生成された特徴定義テーブル３５のデータが複製（又は移動）されたテーブルであり、コマンドに対応するファイルアクセス、すなわち、コマンドが実行されたときにおけるプロセス名と参照アドレス等とが記録されるテーブルである。特徴定義テーブル５１は、図１６に示すように、実行されたコマンド名、コマンド実行におけるプロセス名、参照ファイル及び参照アドレスの項目を含む。また、特徴定義テーブル５１にはさらに、ユーザ側サーバ５における当該参照アドレスの絶対アドレスが記録される。なお、特徴定義テーブル５１は、定義情報の一例である。
【００５８】
対象アドレステーブル５２は、対象とするソフトウェアのプログラムの実行バイナリ及び動作環境ファイルのアドレス等が記録されるテーブルである。対象アドレステーブル５２は、図１７に示すように、実行バイナリ（０）又は動作環境ファイル（１）のいずれかを示す種別、実行バイナリのプロセス名又は動作環境ファイル名（ファイルのパスを含む）及び実行バイナリ又は動作環境ファイルのアドレスの項目を有する。
【００５９】
参照アドレステーブル５３は、コマンドが実行されたときにread命令によって参照されたアドレス等が記録されるテーブルである。参照アドレステーブル５３は、図１８に示すように、参照アドレス及び当該参照が行なわれた時刻の項目を有する。
【００６０】
プロセス生成終了時刻テーブル５４は、コマンドが実行されたときにおけるプロセスの生成及び終了時刻が記録されるテーブルである。プロセス生成終了時刻テーブル５４は、図１９に示すように、プロセス名、当該プロセスの生成時刻及び終了時刻の項目を有する。
【００６１】
使用コマンドテーブル５５は、プロセスによって参照されたアドレスに基づいて特定されるコマンドを記録するテーブルである。使用コマンドテーブル５５は、図２０に示すように、特定されるコマンド、プロセス名、参照ファイル名及び参照アドレスの項目を有する。
【００６２】
次に、ユーザ側サーバ５の制御部６０の各要素について説明する。
初期処理部６１は、処理対象とするプログラムにおけるプロセスの実行バイナリや動産環境ファイルのアドレスを示す対象アドレステーブル３１を生成する。また、初期処理部６１は、後述するトレース部６３及びプロセス監視部６４に処理開始を通知した上で、コマンド実行部６２に処理開始を通知する。これにより、以降においてトレース処理、プロセス監視処理及びコマンド実行処理が並行して実行される。
【００６３】
コマンド実行部６２は、処理対象とするソフトウェアにおいて実行され得るコマンドを順次実行する。
トレース部６３は、トレース処理を実行し、コマンドの実行によって発生するread命令を捕捉する。read命令の対象が実行バイナリのときにはプロセスの生成を検出し、動作環境ファイルのときには参照されたアドレスを参照アドレステーブル５３に記録する。なお、トレース部６３が、参照検出部の一例として機能する。
【００６４】
プロセス監視部６４は、実行中のプロセスの終了を監視する。
コマンド特定部６５は、ユーザ側サーバ５において使用されたコマンドを特定する。具体的には、コマンド特定部６５は、プロセスの開始から終了までにおける参照アドレスを参照アドレステーブル５３から取得して、コマンド実行時に発生したプロセス名及び参照アドレス等を特定し、使用コマンドテーブル５５に記録する。そして、特徴定義テーブル５１を参照して、プロセス名及び参照アドレス等が使用コマンドテーブル５５のプロセス名及び参照アドレス等と一致するコマンドを取得して、使用コマンドテーブル５５にさらに記録する。
【００６５】
文書取得部６６は、使用コマンドテーブル５５に記録されたコマンド等の情報をパラメータ領域に設定した文書取得要求を、文書提供サーバ７に送信する。そして、文書提供サーバ７から、使用コマンド等に関連した文書を受信する。
【００６６】
〔ユーザ側サーバの処理説明〕
ユーザ側サーバ５の初期処理部６１、コマンド実行部６２、トレース部６３、プロセス監視部６４、コマンド特定部６５及び文書取得部６６により実行される処理の一例の詳細につき、図２１〜図２６に示すフローチャートを参照しながら説明する。前提として、ユーザ側サーバ５による以下の処理は、ソフトウェアパッケージごとに実行される。対象となるソフトウェアパッケージが複数存在する場合には、ソフトウェアパッケージのそれぞれについて実行される。
【００６７】
図２１は、初期処理部６１により実行される初期処理の一例を示す。当該処理は、例えば、ユーザ側サーバ５におけるテストを行う担当者による入力装置等を介した実行操作等に応じて開始する。
ステップＳ６１で、初期処理部６１は、ソフトウェアパッケージがインストールされているアドレスを、ＯＳから取得する。
【００６８】
以下のステップＳ６２及びステップＳ６３の処理は、ソフトウェアパッケージに含まれるプロセスの数だけ繰り返し実行される（ループ処理Ａ）。
ステップＳ６２で、初期処理部６１は、予め記憶部５０に設定しておいた、ソフトウェアパッケージにおけるプロセスの実行バイナリ及び動作環境ファイルの相対アドレスを示す情報（図示省略）を参照する。そして、初期処理部６１は、当該情報に設定された相対アドレスを、ソフトウェアパッケージがインストールされているアドレスに基づいて絶対アドレスにした上で、対象アドレステーブル５２として記憶部５０に記録する。
【００６９】
以下のステップＳ６３の処理は、特徴定義テーブル５１に含まれる参照アドレスの数だけ繰り返し実行される（ループ処理Ａ）。
ステップＳ６３で、初期処理部６１は、対象アドレステーブル５２に記録された動作環境ファイルの絶対アドレスと、特徴定義テーブル５１に含まれる参照アドレス（ファイル内の相対アドレス）から、参照アドレスの絶対アドレスを特定する。そして、初期処理部６１は、参照アドレスの絶対アドレスを、特徴定義テーブル５１に記録する。
【００７０】
ステップＳ６４で、初期処理部６１は、トレース処理及びプロセス監視処理をコールする。これにより、トレース部６３がトレース処理を開始し、プロセス監視部６４がプロセス監視処理を開始する。
ステップＳ６５で、初期処理部６１は、コマンド実行処理をコールする。これにより、コマンド実行部６２がコマンド実行処理を開始する。
すなわち、上記ステップＳ６４及びステップＳ６５により、トレース処理、プロセス監視処理が起動した上で、コマンド実行処理が実行されることとなる。前述したように、ユーザ側サーバ５は、これらの処理を並行して実行する。
【００７１】
図２２は、コマンド実行部６２により実行されるコマンド実行処理の一例を示す。
以下のステップＳ７１は、実行されるコマンドの数だけ繰り返し実行される（ループ処理Ａ）。
ステップＳ７１で、コマンド実行部６２は、コマンドを実行する。ここでは、前述したプログラム開発サーバ３側のコマンド実行部４２によるステップＳ１１の処理と異なり、ユーザ側サーバ５の実際の運用において使用される可能性のあるコマンドのみ実行される。なお、コマンド実行部６２は、例えば、予め設定しておいた実行ファイルに基づいてコマンドを実行してもよいし、ユーザ側サーバ５におけるテストを行う担当者による入力装置等を介した実行操作等に応じてコマンドを実行してもよい。
【００７２】
図２３は、トレース部６３により実行されるトレース処理の一例を示す。
以下のステップＳ８１〜ステップＳ８７は、当該トレース処理の実行中、継続的に繰り返し実行される（ループ処理Ａ）。
ステップＳ８１で、トレース部６３は、コマンドが実行されたときに発生する命令をトレースする。
ステップＳ８２で、トレース部６３は、トレースにより検出された命令が、read命令又はwrite命令のいずれかであるかを判定する。read命令である場合には（Ｙｅｓ）、ステップＳ８３に進み、write命令である場合には（Ｎｏ）、通常の書き込み処理を行い、次のトレース処理に移る。
【００７３】
ステップＳ８３で、トレース部６３は、read命令の対象となった参照アドレスを特定し、当該参照アドレスが、対象アドレステーブル５２に含まれるか否かを判定する。含まれる場合には（Ｙｅｓ）、ステップＳ８４に進み、含まれない場合には（Ｎｏ）、次のトレース処理に移る。
ステップＳ８４で、トレース部６３は、対象アドレステーブル５２を参照し、read命令の対象となった参照アドレスが、実行バイナリのアドレスであるか否かを判定する。実行バイナリのアドレスである場合には（Ｙｅｓ）、ステップＳ８５に進み、そうでない場合、すなわち、動作環境ファイルのアドレスである場合には（Ｎｏ）、ステップＳ８７に進む。
【００７４】
ステップＳ８５で、トレース部６３は、プロセスの生成を監視し、プロセスが生成されたか否かを判定する。なお、当該プロセスの生成の監視については、トレース部６３からシグナル等によって通知を受けた別の処理部（モジュール）で行ってもよい。プロセスが生成された場合には（Ｙｅｓ）、ステップＳ８６に進み、プロセスが生成されていない場合には（Ｎｏ）、プロセスが生成されるまで待機する。
【００７５】
ステップＳ８６で、トレース部６３は、対象アドレステーブル５２を参照し、参照アドレスからプロセス名を特定する。そして、トレース部６３は、現在処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数に対応するプロセス生成終了時刻テーブル５４に、プロセス名及び現在時刻（プロセス生成時刻とする）を記録する。
ステップＳ８７で、トレース部６３は、read命令の対象となった、動作環境ファイルの参照アドレス及び現在時刻（参照時刻とする）を、参照アドレステーブル５３に記録する。
【００７６】
図２４は、プロセス監視部６４により実行されるプロセス監視処理の一例を示す。
以下のステップＳ９１〜ステップＳ９３は、監視対象のプロセスの数だけ繰り返し実行される（ループ処理Ａ）。当該監視対象のプロセスとは、プロセス生成終了時刻テーブル５４に記録されているプロセスであって、且つ、終了時刻が記録されていないプロセスとする。
【００７７】
ステップＳ９１で、プロセス監視部６４は、対象のプロセスが存在するか否かを判定する。存在する場合には（Ｙｅｓ）、次のプロセスの処理に移り、存在しない場合には（Ｎｏ）、ステップＳ９２に進む。
ステップＳ９２で、プロセス監視部６４は、処理対象としているコマンドのコマンド名及び当該コマンド実行の繰り返し回数に対応するプロセス生成終了時刻テーブル５４に、プロセス名及び現在時刻（プロセス終了時刻とする）を記録する。
ステップＳ９３で、プロセス監視部６４は、対象のプロセスの監視を終了する。
【００７８】
図２５は、コマンド特定部６５により実行されるコマンド特定処理の一例を示す。このコマンド特定処理は、前述したトレース処理及びプロセス監視処理が終了した後に、例えばユーザ側サーバ５におけるテストを行う担当者による入力装置等を介した実行操作等に応じて実行する。
【００７９】
以下のステップＳ１０１〜ステップＳ１０３は、プロセス生成終了時刻テーブル５４のレコードの数だけ繰り返し実行される（ループ処理Ａ）。
ステップＳ１０１で、コマンド特定部６５は、プロセス生成終了時刻テーブル５４を参照し、プロセスの開始時刻及び終了時刻を取得する。
ステップＳ１０２で、コマンド特定部６５は、参照アドレステーブル５３を参照し、プロセスの開始時刻から終了時刻までの間の参照アドレスを取得する。
ステップＳ１０３で、コマンド特定部６５は、ステップＳ１０１で取得したプロセス名及び参照アドレスに基づき、使用コマンドテーブル５５に、プロセス名、参照ファイル及び参照アドレスを記録する。なお、参照ファイル名は、例えば対象アドレステーブル５２を参照することにより、参照アドレスから特定することが可能である。
【００８０】
以下のステップＳ１０４〜ステップＳ１０６は、使用コマンドテーブル５５のレコードの数だけ繰り返し実行される（ループ処理Ｂ）。
ステップＳ１０４で、コマンド特定部６５は、使用コマンドテーブル５５及び特徴定義テーブル５１を参照し、特徴定義テーブル５１に、プロセス名、参照ファイル及び参照アドレスの絶対アドレスが、使用コマンドテーブル５５の対象のレコードのプロセス名、参照ファイル及び参照アドレスと一致するレコードが存在するか否かを判定する。レコードが存在する場合には（Ｙｅｓ）、ステップＳ１０５に進み、レコードが存在しない場合には（Ｎｏ）、ステップ１０６に進む。
【００８１】
ステップＳ１０５で、コマンド特定部６５は、特徴定義テーブル５１を参照し、プロセス名、参照ファイル及び参照アドレスの絶対アドレスが、使用コマンドテーブル５５の対象のレコードのプロセス名、参照ファイル及び参照アドレスと一致するレコードのコマンドを取得する。そして、コマンド特定部６５は、当該コマンドを、使用コマンドテーブル５５の対象のレコードに記録する。これにより、ユーザ側サーバ５で使用されたコマンドが特定できたこととなる。
ステップＳ１０６で、コマンド特定部６５は、使用コマンドテーブル５５の対象のレコードを削除する。対応するコマンドが特定できなかったためである。
【００８２】
図２６は、文書取得部６６により実行される文書取得処理の一例を示す。
ステップＳ１１１で、文書取得部６６は、文書を取得するための情報の一例として、プログラムの動作設定及びシステム環境情報（図面では情報Ａと記載する）並びにプログラムの修正適用情報（図面では情報Ｂと記載する）を取得する。前述したように、プログラムの動作設定については、ユーザのシステムにおける設定ファイルを参照することで取得できる。また、システム環境情報（例えば、ソフトウェアの版数、ハードウェアの機種及びＯＳの起動からの経過時間等）については、ＯＳの標準機能により取得できる。
【００８３】
ステップＳ１１２で、文書取得部６６は、使用コマンドテーブル５５を参照し、ユーザ側サーバ５において使用されたコマンドのコマンド名を取得する。
ステップＳ１１３で、文書取得部６６は、プログラムの動作設定及びシステム環境情報並びにプログラムの修正適用情報と、使用されたコマンドのコマンド名とをパラメータ領域に設定した文書提供要求を、文書提供サーバ７に送信する。その後、文書取得部６６は、文書提供サーバ７から文書を受信するまで待機（スリープ）する。
ステップＳ１１４で、文書取得部６６は、文書提供サーバ７から文書を取得する。
【００８４】
〔文書提供サーバの構成〕
図２７は、文書提供サーバ７の機能構成及びデータ構成を示す。文書提供サーバ７は、記憶部７０において、ユーザ側マシン情報、対応文書テーブル７２及び文書ファイル７３を備える。また、文書提供サーバ７は、プログラムがインストールされて実行されることによりその機能が実現される制御部８０を備える。制御部８０は、文書提供部８１を備える。
【００８５】
文書提供部８１は、ユーザ側サーバ５からの文書提供要求に応じて、ユーザ側サーバ５に関連する文書をユーザ側サーバ５に送信する。具体的には、文書提供部８１は、ユーザ側サーバ５から、ユーザ側サーバ５に関する情報がパラメータ領域に設定された文書提供要求を受信し、当該情報をユーザ側サーバ情報７１として記憶部７０に記録する。そして、文書提供部８１は、当該ユーザ側サーバ情報７１と対応文書テーブル７２とを照合し、ユーザ側サーバ５に関連した文書を特定する。さらに、文書提供部８１は、当該特定した文書を文書ファイル７３から取得し、ユーザ側サーバ５に送信する。
【００８６】
次に、記憶部の各データの詳細について、図２８〜図３０を参照しながら説明する。
ユーザ側サーバ情報７１は、ユーザ側サーバ５から受信した文書提供要求のパラメータ領域に設定された情報であり、図２８に示すように、ユーザ側サーバ５のプログラムの動作設定及びシステム環境情報、プログラムの修正適用情報及び使用されたコマンドのコマンド名を有する。
【００８７】
対応文書テーブル７２は、ユーザ側サーバ情報７１に関連する文書を特定する情報を含んだテーブルである。対応文書テーブル７２は、図２９に示すように、文書を一意に特定する文書識別情報、ユーザ側サーバ５のプログラムの動作設定及びシステム環境情報、プログラムの修正適用情報、使用されたコマンドのコマンド名並びに当該文書が提供対象となるか否かの情報を示す通知フラグの項目を有する。なお、修正適用情報は、例えば、当該文書を提供する際に適用する必要のある修正番号や、適用している場合に文書が必要になる修正番号等を含む。
【００８８】
文書ファイル７３は、ユーザ側サーバ５に提供する文書自体のファイル群であり、図３０に示すように、文書識別情報と、文書内容とを有する。なお、文書識別情報は、文書自体のファイル名等であってもよい。
【００８９】
〔文書提供サーバの処理説明〕
文書提供サーバ７の文書提供部８１により実行される処理の一例の詳細につき、図３１に示すフローチャートを参照しながら説明する。
【００９０】
図３１は、文書提供部８１により実行される初期処理の一例を示す。当該処理は、例えばユーザ側サーバ５におけるテストを行う担当者による入力装置等を介した実行操作に応じて開始する。
ステップＳ１２１で、文書提供部８１は、ユーザ側サーバ５から、ユーザ側サーバ５のプログラムの動作設定及びシステム環境情報、プログラムの修正適用情報並びに使用されたコマンドのコマンド名がパラメータ領域に設定された文書提供要求を受信する。
【００９１】
以下のステップＳ１２２〜ステップＳ１２６の処理は、対応文書テーブル７２のレコードの数だけ繰り返し実行される（ループ処理Ａ）。
ステップＳ１２２で、文書提供部８１は、対応文書テーブル７２のレコードにおけるプログラムの動作設定及びシステム環境情報が、ユーザ側サーバ情報７１（受信した情報）におけるプログラムの動作設定及びシステム環境情報と一致するか否かを判定する。一致する場合には（Ｙｅｓ）、ステップＳ１２３に進み、一致しない場合には（Ｎｏ）、ステップＳ１２６に進む。
【００９２】
ステップＳ１２３で、文書提供部８１は、対応文書テーブル７２における対象レコードの通知フラグと「ＴＲＵＥ（通知対象）」に設定する。
ステップＳ１２４で、文書提供部８１は、対応文書テーブル７２のレコードにおけるプログラムの修正適用情報に基づいた、文書を通知対象とする条件に、ユーザ側サーバ情報７１（受信した情報）におけるプログラムの修正適用情報が適合するか否かを判定する。具体的には、例えば、文書提供部８１は、対応文書テーブル７２のレコードにおけるプログラムの修正適用情報に設定された「適用する必要のある修正番号」が、ユーザ側サーバ情報７１におけるプログラムの修正適用情報に含まれている場合（適用する必要のある修正がユーザ側サーバ５において既になされている場合）に、当該条件に適合すると判定する。また、文書提供部８１は、例えば、対応文書テーブル７２のレコードにおけるプログラムの修正適用情報に設定された「適用している場合に文書が必要になる修正番号」が、ユーザ側サーバ情報７１におけるプログラムの修正適用情報に含まれている場合に、文書提供部８１は、条件に適合すると判定する。条件に適合する場合には（Ｙｅｓ）、ステップＳ１２５に進み、適合しない場合には（Ｎｏ）、ステップＳ１２６に進む。
【００９３】
ステップＳ１２５で、文書提供部８１は、対応文書テーブル７２のレコードにおけるコマンド名に、ユーザ側サーバ情報７１（受信した情報）におけるコマンド名が含まれるか否かを判定する。含まれる場合には（Ｙｅｓ）、次のレコードの処理に進み、含まれない場合には（Ｎｏ）、ステップＳ１２６に進む。
ステップＳ１２６で、文書提供部８１は、対応文書テーブル７２における対象レコードの通知フラグと「ＦＡＬＳＥ（非通知対象）」に設定する。
【００９４】
ステップＳ１２７で、文書提供部８１は、対応文書テーブル７２を参照し、通知フラグが「ＴＲＵＥ」のレコードの文書識別情報を取得する。そして、文書提供部８１は、取得した文書識別情報に対応する文書を文書ファイル７３から取得し、ユーザ側サーバ５に送信する。
【００９５】
＜本実施例による効果等＞
本実施例によれば、ユーザ側サーバ５において、プロセスの処理における動作環境ファイルに対する参照アドレスを特定する。そして、当該特定した参照アドレスを、コマンド及びコマンド実行時の参照アドレスが対応付けられた特徴定義テーブルの情報と照合することで、ユーザ側サーバ５においてどのコマンドが実行されたかを特定することができる。
【００９６】
また、本実施例によれば、ユーザ側サーバ５において文書を取得する際に、当該特定したコマンドの情報を、文書提供要求とともに文書提供サーバ７に送信する。これにより、文書提供サーバ７では、ユーザ側サーバ５において使用されるコマンドに対応する文書、すなわち、ユーザが必要とする文書を特定できる情報を特定することができる。したがって、ユーザが必要とする文書、すなわち、ユーザによるソフトウェアの使用状況に関連する文書を自動抽出して提供することが可能となる。
【００９７】
さらに、本実施例によれば、特徴定義テーブルにおいて、コマンドに対し、参照アドレスが、対象とするプログラムのコマンドの実行時に処理されるプロセスごとに対応付けられている。そして、ユーザ側サーバ５では、それぞれのプロセス実行中における参照アドレスを特定し、プロセス及び参照アドレスの両方の情報を特徴定義テーブルの情報と照合して、実行されたコマンドを特定する。このため、より正確にコマンドを特定することができる。なお、上記実施例では、参照ファイルも対応付けているが、参照アドレスがあれば参照ファイルを特定できるため、参照ファイルを対応付けることは必須ではない。
【００９８】
また、本実施例によれば、前述したように動作環境ファイルに対する参照アドレスを特定して、特徴定義テーブルの参照アドレスと照合することにより、例えば参照先のファイル名を用いて照合する場合と比較して、よりコマンドを特定する精度が向上する。すなわち、動作環境ファイルの中の具体的な参照箇所を用いた照合を行うことにより、異なるコマンドにおいて同じ動作環境ファイルの中の異なる箇所を参照するような場合にも、コマンドを正確に特定することが可能となる。
【００９９】
さらに、本実施例によれば、上記のユーザ側サーバ５による処理を、ユーザ側サーバ５の導入時におけるテストにおいて併せて実行する。これにより、ユーザが使用する可能性のあるコマンドを網羅して特定することができる。
【０１００】
また、本実施例によれば、プログラム開発サーバ３において特徴定義テーブルを生成する際に、各コマンドを複数回実行し、各回において共通して参照された参照アドレスのみを、コマンドに対応付けている。これにより、コマンドの実行時に確実に参照される参照アドレスのみが特徴定義テーブルに含まれることとなり、ユーザ側サーバ５においてコマンドを特定する精度が向上する。
【０１０１】
ここで、例えば、ユーザ側サーバ５は、前述したコマンド特定処理において、特定したコマンドを、ジョブごとにグループ化して記憶部５０に記録してもよい。具体的には、例えば、図３２に示すように、ジョブ名とコマンド名とを対応付けたテーブルをさらに生成してもよい。そして、文書提供サーバ７に文書提供要求を送信する際に、ユーザにより指定されたジョブに含まれるコマンドをパラメータ領域に設定すれば、ユーザが実行するジョブに関連する文書を的確に取得することが可能となる。
【０１０２】
また、本実施例では、ユーザ側サーバ５において特定したコマンドについての情報を、文書を取得する際に用いたが、他の用途に用いることも当然に可能である。
さらに、本実施例では文書提供サーバ７がユーザ側サーバ５と異なるサーバであるシステム構成の例を用いて説明したが、文書のデータは、例えばユーザ側サーバ５に含まれていてもよい。そして、例えば、ユーザ側サーバ５において、特定したコマンドについての情報を用いて、必要な文書のみを表示するような処理を行なってもよい。
【０１０３】
また、本実施例では、プログラム開発サーバ３において特徴定義テーブルを生成したが、プログラム開発を行う装置において特徴定義テーブルを生成する必要はない。対象とするプログラムを実行可能な他の装置においても、同様の処理をすることが可能である。
【０１０４】
［第２実施例］
第２実施例では、第１実施例で説明した技術において、さらに、ユーザ側サーバ５において使用されたコマンドを特定する精度を向上させる実施例について説明する。
前述した第１実施例では、ユーザ側サーバ５において動作環境ファイルに対して行なわれたアクセスに基づいて、ユーザ側サーバ５で使用されたコマンドを特定した。第２実施例ではさらに、ユーザ側サーバ５において出力されたシステムメッセージに基づいて、ユーザ側サーバ５で使用されたコマンドを特定する。
なお、第１実施例と同様の内容については原則として説明を省略する。
【０１０５】
〔第２実施例におけるユーザ側サーバの構成〕
図３３は、第２実施例におけるユーザ側サーバ５の機能構成及びデータ構成を示す。第２実施例におけるユーザ側サーバ５の記憶部５０は、第１実施例に加え、さらにコマンド・メッセージ対応テーブル５６を備える。また、ユーザ側サーバ５の制御部６０は、第１実施例に加え、さらにメッセージ検出・コマンド特定部６７を備える。
【０１０６】
コマンド・メッセージ対応テーブル５６は、システムメッセージと、当該システムメッセージが出力されるコマンドを対応付けるテーブルであり、例えば、ユーザ側サーバ５におけるテストを行う担当者等によって予め記憶部５０に記録される。コマンド・メッセージ対応テーブル５６は、図３４に示すように、コマンド名及び当該コマンド名に対応するメッセージの項目を有する。
【０１０７】
メッセージ検出・コマンド特定部６７は、ユーザ側サーバ５におけるメッセージの出力を監視する。そして、メッセージ検出・コマンド特定部６７は、出力されたシステムメッセージに対応するコマンドを、コマンド・システムメッセージ対応テーブルを参照して特定し、アクセス記録テーブル３４に記録する。
【０１０８】
〔第２実施例におけるユーザ側サーバの処理説明〕
図３５は、メッセージ検出・コマンド特定部６７によるメッセージ検出・コマンド特定処理の一例を示す。なお、図示を省略するが、当該メッセージ検出・コマンド特定処理は、例えば、第１実施例で示した初期処理部６１による初期処理のステップＳ６４においてコールされることにより開始する。
【０１０９】
以下のステップＳ１３１〜ステップＳ１３７は、当該トレース処理の実行中、継続的に繰り返し実行される（ループ処理Ａ）。
ステップＳ１３１で、メッセージ検出・コマンド特定部６７は、メッセージの出力を監視する。なお、このようなメッセージの出力監視は、既存の監視モジュール等を用いて実現することができる。
【０１１０】
ステップＳ１３２で、メッセージ検出・コマンド特定部６７は、メッセージ出力があったか否かを判定し、出力があった場合には（Ｙｅｓ）、ステップＳ１３３に進み、出力がない場合には（Ｎｏ）、さらにメッセージ出力の監視を継続する。
ステップＳ１３３で、メッセージ検出・コマンド特定部６７は、コマンド・メッセージ対応テーブル５６を参照し、出力されたメッセージが含まれるレコードがあるか否かを判定する。レコードがある場合には（Ｙｅｓ）、ステップＳ１３４に進み、レコードがない場合には（Ｎｏ）、さらにメッセージ出力監視処理を継続する。
【０１１１】
ステップＳ１３４で、メッセージ検出・コマンド特定部６７は、コマンド・メッセージ対応テーブル５６から、出力されたメッセージが含まれるレコードのコマンド名を取得する。そして、メッセージ検出・コマンド特定部６７は、当該コマンド名を、使用コマンドテーブル５５に記録する。なお、この場合、使用コマンドテーブル５５のプロセス名、参照ファイル名及び参照アドレスは空欄のままでよい。
【０１１２】
＜第２実施例による効果＞
当該第２実施例によれば、第１実施例における動作環境ファイルへのアクセスに加え、さらに、ユーザ側サーバ５において出力されたシステムメッセージに基づいて、ユーザ側サーバ５で使用されたコマンドが特定される。このため、ユーザ側サーバ５で実行されたコマンドをさらに網羅して特定することができる。したがって、ユーザ側サーバ５に関連する文書をさらに適切に提供することが可能となる。
【０１１３】
［ハードウェア構成等］
前述したプログラム開発サーバ３、文書提供サーバ７及びユーザ側サーバ５として機能するコンピュータのハードウェア構成の一例を図３６に示す。本コンピュータは、プロセッサ１０１、メモリ１０２、ストレージ１０３、可搬記憶媒体駆動装置１０４、入出力装置１０５及び通信インタフェース１０６を備える。
【０１１４】
プロセッサ１０１は、制御ユニット、演算ユニット及び命令デコーダ等を含み、実行ユニットが、命令デコーダで解読されたプログラムの命令に従い、制御ユニットより出力される制御信号に応じ、演算ユニットを用いて算術・論理演算を実行する。かかるプロセッサ１０１は、制御に用いる各種情報が格納される制御レジスタ、既にアクセスしたメモリ２等の内容を一時的に格納可能なキャッシュ、及び、仮想記憶のページテーブルのキャッシュとしての機能を果たすＴＬＢを備える。なお、プロセッサ１０１は、ＣＰＵ（Central Processing Unit）コアが複数設けられている構成でもよい。
【０１１５】
メモリ１０２は、例えばＲＡＭ（Random Access Memory）等の記憶装置であり、プロセッサ１０１で実行されるプログラムがロードされるとともに、プロセッサ１０１の処理に用いるデータが格納されるメインメモリである。また、ストレージ１０３は、例えばＨＤＤ（Hard Disk Drive）やフラッシュメモリ等の記憶装置であり、プログラムや各種データが格納される。可搬記憶媒体駆動装置１０４は、可搬記憶媒体１０７に記憶されたデータやプログラムを読み出す装置である。可搬記憶媒体１０７は、例えば磁気ディスク、光ディスク、光磁気ディスク又はフラッシュメモリ等である。プロセッサ１０１は、メモリ１０２やストレージ１０３と協働しつつ、ストレージ１０３や可搬記憶媒体１０７に格納されたプログラムを実行する。なお、プロセッサ１０１が実行するプログラムや、アクセス対象となるデータは、当該コンピュータと通信可能な他の装置に格納されていてもよい。なお、本実施形態で記載したプログラム開発サーバ３、文書提供サーバ７及びユーザ側サーバ５の記憶部とは、メモリ１０２、ストレージ１０３又は可搬記憶媒体１０７若しくは当該コンピュータと通信可能な他の装置の少なくともいずれかを示す。
【０１１６】
入出力装置１０５は例えばキーボードやタッチパネル、ディスプレイ等であり、ユーザ操作等による動作命令を受け付ける一方、コンピュータによる処理結果を出力する。
通信インタフェース１０６は、例えば、例えばＬＡＮ（Local Area Network）カード等の他、無線周波受信機および送信機、ならびに光受信機および送信機を含むことができる。前述の受信機および送信機は、Ｗｉ−Ｆｉネットワーク、ブルートゥース・ネットワーク、ロング・ターム・エボリューションなどの１つまたは複数の通信ネットワークにより動作するように実現することができる。
これらのコンピュータの各構成要素は、バス１０８で接続されている。
なお、本実施形態では、少なくともユーザ側サーバ５及び文書提供サーバ７は、ネットワークを介して相互に通信可能に接続されているものとする。当該ネットワークは例えばＷＡＮ（Wide Area Network）であり、有線接続及び無線接続のいずれであってもよい。
【０１１７】
［その他］
なお、本明細書で説明したコンピュータの機能的構成及び物理的構成は、上述の態様に限るものではなく、例えば、各機能や物理資源を統合して実装したり、逆に、さらに分散して実装したりすることも可能である。
また、本明細書において、閾値等との比較において「〜以上」や「〜以下」とした記載箇所は、特記した場合を除き当該記載に限定されるものではなく、「〜より大きい（〜を上回る）」や「〜より小さい（〜を下回る）」に適宜置き換えることが可能である。
【０１１８】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定する参照検出部と、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、前記参照検出部により特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定するコマンド特定部と
を備えた情報処理装置。
【０１１９】
（付記２）
前記コマンド特定部により特定されたコマンドに関連する文書情報を取得する文書取得部をさらに備えた、付記１記載の情報処理装置。
【０１２０】
（付記３）
前記定義情報は、前記実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが、当該データを参照するプロセスごとに対応付けられており、
前記コマンド特定部は、前記参照検出部により特定された前記データの参照先及び当該データを参照したプロセスと、前記定義情報に含まれるデータの参照先及び当該データを参照するプロセスとに基づいて、実行されたコマンドを特定する、付記１又は２記載の情報処理装置。
【０１２１】
（付記４）
前記データの参照先は、データファイル内において参照された箇所が特定される参照アドレスである、付記１〜３のいずれか１項に記載の情報処理装置。
【０１２２】
（付記５）
前記参照検出部は、前記プログラムのテスト時の処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該データの参照先を特定する、付記１〜４のいずれか１項に記載の情報処理装置。
【０１２３】
（付記６）
前記プログラムの処理において出力されたシステムメッセージを検出し、前記実行対象となり得るコマンドと、当該コマンドの実行時に出力されるシステムメッセージとが対応付けられたメッセージ対応情報が記録された記憶部を参照し、検出した前記システムメッセージと、当該メッセージ対応情報に含まれるシステムメッセージとに基づいて、実行されたコマンドを特定するメッセージ検出部をさらに備えた、付記１〜５のいずれか１項に記載の情報処理装置。
【０１２４】
（付記７）
前記定義情報は、前記実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドが複数回実行されたときに各回において共通して参照されたデータの参照先とが対応付けられている、付記１〜６のいずれか１項に記載の情報処理装置。
【０１２５】
（付記８）
前記コマンド特定部は、特定したコマンドを、所定のジョブごとにグルーピングして前記記憶部に記録する、付記１〜７のいずれか１項に記載の情報処理装置。
【０１２６】
（付記９）
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定し、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定する
処理をコンピュータに実行させる情報処理プログラム。
【０１２７】
（付記１０）
プログラムの処理において生成される所定のプロセスにおいて発生したデータの参照命令を検出して、当該参照命令によるデータの参照先を特定し、
前記プログラムの処理において実行対象となり得るコマンドのそれぞれについて、コマンドと、当該コマンドの実行時に参照されるデータの参照先とが対応付けられた定義情報が記録された記憶部を参照し、特定された前記データの参照先と、当該定義情報に含まれるデータの参照先とに基づいて、実行されたコマンドを特定する
処理をコンピュータが実行する情報処理方法。
【符号の説明】
【０１２８】
１…メーカ側システム、２…ユーザ側システム、３…プログラム開発サーバ、３１…対象アドレステーブル、３２…参照アドレステーブル、３３…プロセス生成終了時刻テーブル、３４…アクセス記録テーブル、３５…特徴定義テーブル、４１…初期処理部、４２…コマンド実行部、４３…トレース部、４４…プロセス監視部、４５…アクセス記録部、４６…特徴定義テーブル生成部、５…ユーザ側サーバ、５１…特徴定義テーブル、５２…対象アドレステーブル、５３…参照アドレステーブル、５４…プロセス生成終了時刻テーブル、５５…使用コマンドテーブル、６１…初期処理部、６２…コマンド実行部、６３…トレース部、６４…プロセス監視部、６５…コマンド特定部、６６…文書取得部、７…文書提供サーバ、７１…ユーザ側サーバ情報、７２…対応文書テーブル、７３…文書ファイル、８１…文書提供部
【図１】
0006361331.tif 000002
【図２】
0006361331.tif 000003
【図３】
0006361331.tif 000004
【図４】
0006361331.tif 000005
【図５】
0006361331.tif 000006
【図６】
0006361331.tif 000007
【図７】
0006361331.tif 000008
【図８】
0006361331.tif 000009
【図９】
0006361331.tif 000010
【図１０】
0006361331.tif 000011
【図１１】
0006361331.tif 000012
【図１２】
0006361331.tif 000013
【図１３】
0006361331.tif 000014
【図１４】
0006361331.tif 000015
【図１５】
0006361331.tif 000016
【図１６】
0006361331.tif 000017
【図１７】
0006361331.tif 000018
【図１８】
0006361331.tif 000019
【図１９】
0006361331.tif 000020
【図２０】
0006361331.tif 000021
【図２１】
0006361331.tif 000022
【図２２】
0006361331.tif 000023
【図２３】
0006361331.tif 000024
【図２４】
0006361331.tif 000025
【図２５】
0006361331.tif 000026
【図２６】
0006361331.tif 000027
【図２７】
0006361331.tif 000028
【図２８】
0006361331.tif 000029
【図２９】
0006361331.tif 000030
【図３０】
0006361331.tif 000031
【図３１】
0006361331.tif 000032
【図３２】
0006361331.tif 000033
【図３３】
0006361331.tif 000034
【図３４】
0006361331.tif 000035
【図３５】
0006361331.tif 000036
【図３６】
0006361331.tif 000037