(57)【要約】【課題】本発明は、複数のソフトウェア・コンポーネントで構成されたアプリケーションの実行時の呼出関係をトレースできるようにすることを目的としている。【解決手段】データ処理システムにおいて実行されるソフトウェア・コンポーネントについて、当該ソフトウェア・コンポーネントにおける処理の開始時と処理の終了時とに、処理の開始時の識別子と、処理の終了時の識別子と、コンポーネント名と、メソッド名とを自動記録するようにし、当該記録に基づいて、実行されたソフトウェア・コンポーネントの呼出関係をトレースする。【選択図】        図３
2004259154.tif 000002
【特許請求の範囲】
【請求項１】
複数のソフトウェア・コンポーネントで構成されたアプリケーションを実行してゆくデータ処理システムに関連するソフトウェア・コンポーネントの呼出関係トレース方法において、
実行されてゆく各ソフトウェア・コンポーネントについて、当該ソフトウェア・コンポーネントの処理開始時の識別子と、処理終了時の識別子と、コンポーネント名と、メソッド名とを記録手段に記録し、
当該記録された識別子を含む情報に基づいて、実行されたソフトウェア・コンポーネントの呼出関係をトレースする
ことを特徴とするソフトウェア・コンポーネントの呼出関係トレース方法。
【請求項２】
複数のソフトウェア・コンポーネントで構成されたアプリケーションを実行してゆくデータ処理システムに関連するソフトウェア・コンポーネントの呼出関係トレース方法において、
作成されたアプリケーションに、ソフトウェア・コンポーネントのメソッドの処理開始時、および該メソッドの処理終了時に呼び出される処理機能が追加されており、
当該処理機能による処理に基づいて、処理開始時の識別子と、処理終了時の識別子と、コンポーネント名と、メソッド名とを記録するように構成し、
当該記録された識別子を含む情報に基づいて、実行されたソフトウェア・コンポーネントの呼出関係をトレースする
ことを特徴とするソフトウェア・コンポーネントの呼出関係トレース方法。
【請求項３】
複数のソフトウェア・コンポーネントで構成されたアプリケーションを実行してゆくデータ処理システムに関連するソフトウェア・コンポーネントの呼出関係トレース・システムにおいて、
実行されてゆく各ソフトウェア・コンポーネントについて、当該ソフトウェア・コンポーネントの処理開始時の識別子と、処理終了時の識別子と、コンポーネント名と、メソッド名とを記録する手段と、
当該記録された識別子を含む情報に基づいて、実行されたソフトウェア・コンポーネントの呼出関係をトレースする手段と
を有する
ことを特徴とするソフトウェア・コンポーネントの呼出関係トレース・システム。
【請求項４】
複数のソフトウェア・コンポーネントで構成されたアプリケーションを実行してゆくデータ処理システムに関連するソフトウェア・コンポーネントの呼出関係トレース・システムにおいて、
作成されたアプリケーションに、ソフトウェア・コンポーネントのメソッドの処理開始時、および該メソッドの処理終了時に呼び出される処理手段が追加されており、
当該処理手段を用いて、処理開始時の識別子と、処理終了時の識別子と、コンポーネント名と、メソッド名とを記録する手段と、
当該記録された識別子を含む情報に基づいて、実行されたソフトウェア・コンポーネントの呼出関係をトレースする手段と
を有する
ことを特徴とするソフトウェア・コンポーネントの呼出関係トレース・システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のソフトウェア・コンポーネントで構成されたアプリケーションの管理方法及びシステムに関わり、特に、アプリケーション実行時のソフトウェア・コンポーネント間の呼出関係をトレースするに当たって、ソフトウェア・コンポーネントを、処理開始時の識別子と、処理終了時の識別子と、コンポーネント名と、メソッド名とを記録するように構成し、記録された識別子を含む情報に基づいて、ソフトウェア・コンポーネント間の実行時の呼出関係をトレースするソフトウェア・コンポーネントの呼出関係トレース方法及びシステムに関する。
【０００２】
【従来の技術】
複数のソフトウェア・コンポーネントで構成されたアプリケーションにおける、アプリケーション実行時のソフトウェア・コンポーネント間の呼出関係をトレースする従来の１つの方法では、ソフトウェア・コンポーネントを、処理開始時刻と処理終了時刻とを記録するように構成し、記録された時間に基づいて、ソフトウェア・コンポーネント間の呼出関係を判断していた（例えば、特許文献１参照）。また、従来の他の方法では、デバッガ等を用いて、あるソフトウェア・コンポーネントが呼び出され、かつそのコンポーネントが他のコンポーネント又は他のメソッドを呼び出す際に、その呼出元のコンポーネント及びメソッド名、呼出先のコンポーネント名及びメソッド名を全て記録して、ソフトウェア・コンポーネント間の呼出関係を判断していた（例えば、特許文献２参照）。
【０００３】
【特許文献１】
特開平５−３５５４９号公報
【特許文献２】
特開平８−８３１９７号公報
【０００４】
【発明が解決しようとする課題】
上記従来のソフトウェア・コンポーネント間の呼出関係をトレースする前者の方法では、複数のメソッドの処理開始時刻の差異が、計測可能な時刻精度以下の場合、処理開始時刻は同一時刻として記録され、また、各メソッドで処理に要した処理時間が、計測可能な時刻精度以下の場合、処理終了時刻は処理開始時刻と同一時刻として記録されるため、どの順番でメソッドが呼び出され、どの順番でメソッドが終了したかを判定することができないという問題がある。
【０００５】
また、上記従来のソフトウェア・コンポーネント間の呼出関係をトレースする後者の方法では、記録しなければならない情報が膨大になり、ソフトウェアの実行中に与える性能負荷が大きくなるため、処理時間の計測値が、トレースを行なわない場合の値と大きく異なるという問題がある。
【０００６】
本発明は、複数のソフトウェア・コンポーネントで構成されたアプリケーションの実行時の呼出関係をトレースできるようにすることを目的としている。
【０００７】
【課題を解決するための手段】
請求項に記載のソフトウェア・コンポーネントの呼出関係トレース方法及びシステムは、ソフトウェア・コンポーネントのメソッドの処理開始時、および該メソッドの処理終了時に呼び出される呼出手段を備えるように各ソフトウェア・コンポーネントを構成し、該呼出手段によって呼び出された情報に基づき、コンポーネント名と、メソッド名と、処理開始識別子と、処理終了識別子とを記録する記録手段をもうけ、記録されたコンポーネント名と、メソッド名と、処理開始識別子と、処理終了識別子との情報から、ソフトウェア・コンポーネントの呼出関係を構築する呼出関係構築手段を備える。
【０００８】
【発明の実施の形態】
以下、図面を用いて本発明の実施形態を詳細に説明する。
【０００９】
図１は、本実施例におけるソフトウェア・コンポーネントの呼出関係をトレースする対象となるアプリケーションの構成を示したものである。コンピュータ装置１は、アプリケーション実行基盤ソフトウェア２を備えている。アプリケーション実行基盤ソフトウェア２は、アプリケーション２１を備えており、アプリケーション２１に対して実行環境を提供する。アプリケーション２１は、ソフトウェア・コンポーネントであるコンポーネント２２ａ、２２ｂ、２２ｃから構成されており、コンポーネント２２ａ、２２ｂ、２２ｃが相互に通信して動作することにより、アプリケーション全体としての処理を遂行する。
【００１０】
図２は、図１で示したコンピュータ装置１を含む、本発明のコンポーネント呼出関係トレース・システムの構成図である。
【００１１】
図２では、コンピュータ装置１と、コンピュータ装置５で構成されているが、単一のコンピュータ装置で構成されてもよい。コンポーネント呼出関係トレース・システムは、プローブ２３ａ、２３ｂ、２３ｃと、モニタ３と、トレース表示ツール６とで構成されている。
【００１２】
プローブ２３ａ、２３ｂ、２３ｃは、ソフトウェア・コンポーネントの呼出関係をトレースするために、アプリケーション２１におけるコンポーネント２２ａ、２２ｂ、２２ｃに組込まれる。モニタ３は、ソフトウェア・コンポーネントの呼出関係をトレースするために、アプリケーション実行基盤ソフトウェア２が提供する実行環境で動作するように設定される。モニタ３は、プローブ処理受付部３１と、識別子管理部３２と、記録部３３とを備えており、識別子管理部３２は、処理開始識別子管理部３４と、処理終了識別子管理部３５とを備えている。ログ４は、記録部３３によって生成される。トレース表示ツール６は、ログ解析部６１と、表示部６２とを備えている。
【００１３】
図３は、図２におけるログ４を生成するまでの動作を説明するフロー図である。
図４は、図２におけるトレース表示ツール６の動作を説明するフロー図である。
図５は、本動作例において生成されるログ４の例である。
図６は、本動作例におけるトレース結果をトレース表示ツール６で表示した例である。
【００１４】
以下では、図１から図６を用いて、システムの一動作例を説明する。
アプリケーション２１は、元来は図１に示す構成状態にある。ソフトウェア・コンポーネントの呼出関係をトレースするにあたり、コンポーネント２２ａ、２２ｂ、２２ｃに、それぞれ、プローブ２３ａ、２３ｂ、２３ｃを組込む。また、モニタ３を、アプリケーション実行基盤ソフトウェア２が提供する実行環境で動作するように設定し、アプリケーション２１とともに動作させる。
【００１５】
本動作例では、アプリケーション２１を利用するユーザ・プログラムからのリクエストが、コンポーネント２２ａのメソッドＡを呼び出し、該メソッドＡがコンポーネント２２ｂのメソッドＢ１を呼び出し、該メソッドＢ１がコンポーネント２２ｃのメソッドＣを呼び出し、該メソッドＣの処理が終了し、それを受けてメソッドＢ１の処理が終了し、それを受けてメソッドＡがさらにコンポーネント２２ｂのメソッドＢ２を呼び出し、該メソッドＢ２の処理が終了し、それを受けてメソッドＡの処理が終了し、ユーザ・プログラムに応答が返る場合を例として説明する。
【００１６】
まず、図２及び図３を用いて、ログ４を生成するまでの動作説明を行う。
アプリケーション２１を利用するユーザ・プログラムは、アプリケーション２１に対してリクエストを発生させる（ステップＳ１）。該リクエストに対する処理は、コンポーネント２２ａに渡され、コンポーネント２２ａのメソッドＡで処理が開始される。
【００１７】
メソッドＡでは、処理の開始に先立ち、コンポーネント２２ａに組込まれたプローブ２３ａによって、モニタ３に対して呼出が行なわれる（ステップＳ２）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ３）、識別子管理部３２は、処理開始識別子管理部３４から処理開始識別子を取得し（ステップＳ４）、処理を記録部３３に依頼する（ステップＳ５）。記録部３３は、メソッドＡの名前等の識別情報と、取得した処理開始識別子をメモリ上に記録する（ステップＳ６）。メソッドＡは、本来の処理を行う（ステップＳ７）。次に、メソッドＡは、該処理中に、コンポーネント２２ｂのメソッドＢ１に対して呼出を行う（ステップＳ８）。
【００１８】
メソッドＢ１では、処理の開始に先立ち、コンポーネント２２ｂに組込まれたプローブ２３ｂによって、モニタ３に対して呼出が行なわれる（ステップＳ９）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ１０）、識別子管理部３２は、処理開始識別子管理部３４から処理開始識別子を取得し（ステップＳ１１）、処理を記録部３３に依頼する（ステップＳ１２）。記録部３３は、メソッドＢ１の名前等の識別情報と、取得した処理開始識別子をメモリ上に記録する（ステップＳ１３）。メソッドＢ１は、本来の処理を行う（ステップＳ１４）。次に、メソッドＢ１は、該処理中に、コンポーネント２２ｃのメソッドＣに対して呼出を行う（ステップＳ１５）。
【００１９】
メソッドＣでは、処理の開始に先立ち、コンポーネント２２ｃに組込まれたプローブ２３ｃによって、モニタ３に対して呼出が行なわれる（ステップＳ１６）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ１７）、識別子管理部３２は、処理開始識別子管理部３４から処理開始識別子を取得し（ステップＳ１８）、処理を記録部３３に依頼する（ステップＳ１９）。記録部３３は、メソッドＣの名前等の識別情報と、取得した処理開始識別子をメモリ上に記録する（ステップＳ２０）。メソッドＣは、本来の処理を行う（ステップＳ２１）。
【００２０】
次に、メソッドＣでの処理が終了し、メソッドＣは、メソッドＣの呼出元であるメソッドＢ１に応答を返す（ステップＳ２２）。その後、メソッドＣ内において、プローブ２３ｃによって、モニタ３に対して呼出が行なわれる（ステップＳ２３）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ２４）、識別子管理部３２は、処理終了識別子管理部３５から処理終了識別子を取得し（ステップＳ２５）、処理を記録部３３に依頼する（ステップＳ２６）。記録部３３は、メソッドＣの名前等の識別情報と、取得した処理終了識別子をメモリ上に記録する（ステップＳ２７）。
【００２１】
メソッドＢ１は、メソッドＣからの応答を受け取り、残りの処理を継続する。メソッドＢ１での処理が終了し、メソッドＢ１は、メソッドＢ１の呼出元であるメソッドＡに応答を返す（ステップＳ２８）。その後、メソッドＢ１内において、プローブ２３ｂによって、モニタ３に対して呼出が行なわれる（ステップＳ２９）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ３０）、識別子管理部３２は、処理終了識別子管理部３５から処理終了識別子を取得し（ステップＳ３１）、処理を記録部３３に依頼する（ステップＳ３２）。記録部３３は、メソッドＣの名前等の識別情報と、取得した処理終了識別子をメモリ上に記録する（ステップＳ３３）。
【００２２】
メソッドＡは、メソッドＢ１からの応答を受け取り、残りの処理を継続する。メソッドＡが、該処理中に、さらにコンポーネント２２ｂのメソッドＢ２を呼び出す（ステップ３４）。
【００２３】
メソッドＢ２では、処理の開始に先立ち、コンポーネント２２ｂに組込まれたプローブ２３ｂによって、モニタ３に対して呼出が行なわれる（ステップＳ３５）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ３６）、識別子管理部３２は、処理開始識別子管理部３４から処理開始識別子を取得し（ステップＳ３７）、処理を記録部３３に依頼する（ステップＳ３８）。記録部３３は、メソッドＢ２の名前等の識別情報と、取得した処理開始識別子をメモリ上に記録する（ステップＳ３９）。メソッドＢ２は、本来の処理を行う（ステップＳ４０）。
【００２４】
次に、メソッドＢ２での処理が終了し、メソッドＢ２は、メソッドＢ２の呼出元であるメソッドＡに応答を返す（ステップＳ４１）。その後、メソッドＢ２内において、プローブ２３ｂによって、モニタ３に対して呼出が行なわれる（ステップＳ４２）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ４３）、識別子管理部３２は、処理終了識別子管理部３５から処理終了識別子を取得し（ステップＳ４４）、処理を記録部３３に依頼する（ステップＳ４５）。記録部３３は、メソッドＢ２の名前等の識別情報と、取得した処理終了識別子をメモリ上に記録する（ステップＳ４６）。
【００２５】
メソッドＡは、メソッドＢ２からの応答を受け取り、残りの処理を継続する。メソッドＡでの処理が終了し、メソッドＡは、メソッドＡの呼出元であるユーザ・プログラムに応答を返す（ステップＳ４７）。その後、メソッドＡ内において、プローブ２３ａによって、モニタ３に対して呼出が行なわれる（ステップＳ４８）。モニタ３のプローブ処理受付部３１は、該呼出を受け、処理を識別子管理部３２に依頼し（ステップＳ４９）、識別子管理部３２は、処理終了識別子管理部３５から処理終了識別子を取得し（ステップＳ５０）、処理を記録部３３に依頼する（ステップＳ５１）。記録部３３は、メソッドＡの名前等の識別情報と、取得した処理終了識別子をメモリ上に記録する（ステップＳ５２）。
【００２６】
記録部３３は、メモリ上に記録された情報を、ログに書き出す（ステップＳ５３）。
【００２７】
なお、本実施例において、モニタ３は、アプリケーション２１の実行中に、プローブ２３ａ、２３ｂ、２３ｃと通信が可能であれば、アプリケーション実行基盤ソフトウェア２で動作する必要はなく、アプリケーション実行基盤ソフトウェア２及びコンピュータ装置１とは無関係に動作するようにしてもよい。
【００２８】
また、記録部３３は、一時的な情報の蓄積をメモリ上に行う必要はなく、直接ログに書き出すか、または、他の記録機能にその処理を依頼して実現することができる。また、本動作例における、ログ生成のタイミングは、任意の時間で実施することができる。
【００２９】
次に、図４、図５、及び図６を用いて、トレース表示ツール６の動作説明を行う。
トレース表示ツール６のログ解析部６１は、ログ４を読み込む（ステップＳ１０１）。
【００３０】
前記動作説明で生成されたログ４の例を図５に示す。本例は、単一の実行スレッドで実行された部分のみを示している。本例では、メソッドが特定できるコンポーネント名及びメソッド名、及び、それに対応して、処理開始識別子及び処理終了識別子が記録されている。処理開始識別子は、処理開始識別子管理部３４で一意に管理されているものであり、本動作例では、処理開始識別子が取得された順番で１から始まる正の整数値で管理されており、取得された順番で１づつ増加して提供されるものとする。同様に、処理終了識別子は、処理開始識別子とは独立に、処理終了識別子管理部３５で一意に管理されているものであり、本動作例では、処理終了識別子が取得された順番で１から始まる正の整数値で管理されており、取得された順番で１づつ増加して提供されるものとする。
【００３１】
ログ解析部６１は、読み込んだログ４を解析する（ステップＳ１０２）。
解析は、単一の実行スレッドで実行されていることを前提として実施する。
【００３２】
まず、処理開始識別子の大小を比較し、その開始順序が、順に、コンポーネント２２ａのメソッドＡ、コンポーネント２２ｂのメソッドＢ１、コンポーネント２２ｃのメソッドＣ、コンポーネント２２ｂのメソッドＢ２であることを判断する。
【００３３】
次に、処理終了識別子の大小を比較する。メソッドＡの処理終了識別子が４で最大なこと、及び、単一の実行スレッドで実行されていることから、メソッドＡの終了が最も遅く、他のメソッドであるメソッドＢ１、メソッドＣ、メソッドＢ２は、メソッドＡの処理中に呼び出されたことが判断できる。
【００３４】
次に、メソッドＣの処理終了識別子が１で最も早く終了しており、メソッドＢ１の処理終了識別子の２より小さいことから、メソッドＣは、メソッドＢ１の終了後にメソッドＡによって直接に呼び出されたのではなく、メソッドＢ１によって直接に呼び出されたことが判断できる。
【００３５】
また、メソッドＢ２は、処理終了識別子が３であるため、メソッドＢ１、メソッドＣ、メソッドＢ２の中では、最も遅く終了したことが判断できるため、メソッドＢ１またはメソッドＣの処理中に呼び出されたものではなく、メソッドＡによって直接に呼び出されたことが判断できる。
【００３６】
ログ解析部６１は、前記判断結果を表示部６２に渡し（ステップＳ１０３）、表示部６２は、その結果を表示する（ステップＳ１０４）。
【００３７】
図６は、その表示例である。本表示例では、メソッドＡが、その処理中に、メソッドＢ１、メソッドＢ２の順番で呼び出し、さらにメソッドＢ１は、その処理中に、メソッドＣを呼び出したことを示している。
【００３８】
なお、本発明は、上記の実施例に限定されることなく、特許請求の範囲内において種々の変更・応用が可能である。
【００３９】
【発明の効果】
以上に説明したように、本発明によれば、計測可能な時刻精度に左右されることなく、どの順番でメソッドが呼び出され、どの順番でメソッドが終了したかを判定することができる。また、ソフトウェア・コンポーネント間の呼出関係をトレースするために記録することが必要な情報量を軽減することができ、ソフトウェアの実行中に与える性能負荷への影響を軽減することができる。
【図面の簡単な説明】
【図１】呼出関係トレース対象のソフトウェア・アプリケーションの構成図例を示す。
【図２】本発明のコンポーネント呼出関係トレース・システムの構成図例を示す。
【図３】ログ生成までの動作を説明するフロー図を示す。
【図４】トレース表示ツールの動作を説明するフロー図を示す。
【図５】ログの例を示す。
【図６】トレース表示ツールにおける表示例を示す。
【符号の説明】
１    コンピュータ装置
２    アプリケーション実行基盤ソフトウェア
２１  アプリケーション
２２ａ〜２２ｃ    コンポーネント
２３ａ〜２３ｃ    プローブ
３    モニタ
３１  プローブ処理受付部
３２  識別子管理部
３３  記録部
３４  処理開始識別子管理部
３５  処理終了識別子管理部
４    ログ
５    コンピュータ装置
６    トレース表示ツール
【図１】
2004259154.tif 000003
【図２】
2004259154.tif 000004
【図３】
2004259154.tif 000005
【図４】
2004259154.tif 000006
【図５】
2004259154.tif 000007
【図６】
2004259154.tif 000008