(57)【要約】      （修正有）【課題】  ソフトウェアにおける再現率の低い障害の原因を特定し、開発の工数を削減する効果を与える。【解決手段】  複数にモジュール分けされたソフトウェアの動作確認において、インポート関数アドレス及び仮想関数アドレステーブルを利用して、モジュール間の関数呼び出しをフックしてログに記録する。また、それぞれの関数呼出においては、すべてのパラメータ、及び戻り値を、時刻と共に記録する。また、パラメータの一部に可変長配列が存在する場合には、ユーザが一定量の要素数以下のみログに取得する手段を設けたソフトウェア評価システムである。【選択図】  図１１
2006031248.tif 000002
【特許請求の範囲】
【請求項１】
複数にモジュール分けされているソフトウェアにおいて、あるモジュールから別のモジュール内に存在する関数への呼び出しを、ログ取得のためのルーチンにリダイレクトする手段を有し、リダイレクトしたログ取得ルーチン内部に計時手段を有し、リダイレクトしたログ取得ルーチン内部に呼び出し時のパラメータを判別する手段を有し、リダイレクトしたログ取得ルーチン内部で元の関数を呼び出す手段を有し、元の関数を呼び出す際に、その関数からの戻りをログ取得ルーチンにリダイレクトさせる手段を有し、リダイレクトしたログ取得ルーチン内部で関数からの戻り値を判別する手段を有する、ソフトウェア評価システム。
【請求項２】
上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するＣＯＭサーバのメソッドへの呼び出しを、ログ取得のためのルーチンにリダイレクトする手段を有し、リダイレクトしたログ取得ルーチン内部に計時手段を有し、リダイレクトしたログ取得ルーチン内部に呼び出し時のパラメータを判別する手段を有し、リダイレクトしたログ取得ルーチン内部で元のメソッドを呼び出す手段を有し、元のメソッドを呼び出す際に、そのメソッドからの戻りをログ取得ルーチンにリダイレクトさせる手段を有し、リダイレクトしたログ取得ルーチン内部でメソッドからの戻り値を判別する手段を有する、ソフトウェア評価システム。
【請求項３】
上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンにリダイレクトする手段として、呼び出し元がメモリにロードするインポート関数アドレステーブルを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換える手段を有する、ソフトウェア評価システム。
【請求項４】
上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンにリダイレクトする手段として、呼び出し元がメモリにロードするＶｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換える手段を有する、ソフトウェア評価システム。
【請求項５】
上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンが、呼び出された関数の情報を記録する手段を有し、書き換える前のインポート関数アドレステーブルに記載された元の関数を呼び出す手段を有する、ソフトウェア評価システム。
【請求項６】
上記ソフトウェア評価システムにおいて、ログ取得のためのルーチンが、呼び出されたメソッドの情報を記録する手段を有し、書き換える前のＶｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅに記載された元のメソッドを呼び出す手段を有する、ソフトウェア評価システム。
【請求項７】
上記ソフトウェア評価システムにおいて、ログ取得ルーチン内部で、関数／メソッドの呼び出された時刻、及び関数／メソッド呼び出し時のパラメータ、関数／メソッドから処理が戻った時刻、及び関数／メソッドからの戻り値をログとして記録する手段を有する、ソフトウェア評価システム。
【請求項８】
上記ソフトウェア評価システムにおいて、ログ取得ルーチン内部で、関数／メソッド呼び出し時のパラメータをメモリアドレスと判別する手段を有し、関数／メソッド呼び出し時の該当メモリアドレスの内容を保持する手段を有し、関数／メソッドから処理が戻った時点での該当メモリアドレスの内容を保持する手段を有し、関数／メソッド呼び出し時及び関数／メソッドから処理が戻った時点での該当メモリアドレスの内容を、ログとして記録する手段を有する、ソフトウェア評価システム。
【請求項９】
上記ソフトウェア評価システムにおいて、各モジュールのエクスポートする関数一覧を取得する手段を有し、メモリに配置されたインポート関数アドレステーブルのうち、何れの関数をログ取得ルーチンにリダイレクトするかの設定を、エクスポートする関数一覧から選択する手段を有する、ソフトウェア評価システム。
【請求項１０】
上記ソフトウェア評価システムにおいて、各ＣＯＭサーバのエクスポートするインターフェース及びメソッド一覧を取得する手段を有し、メモリに配置されたＶｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅのうち、何れのメソッドをログ取得ルーチンにリダイレクトするかの設定を、エクスポートするインターフェース及びメソッド一覧から選択する手段を有する、ソフトウェア評価システム。
【請求項１１】
上記ソフトウェア評価システムにおいて、各モジュールのエクスポートする関数一覧、もしくは各ＣＯＭサーバのエクスポートするインターフェース及びメソッド一覧をファイル形式で供給する手段を有し、そのファイル内に、エクスポートされたそれぞれの関数／メソッドにおけるパラメータ及び戻り値の定義を記述する手段を有し、その定義ファイルから、何れのモジュールの、何れの関数／メソッドの、何れのパラメータ、あるいは何れの戻り値をログ取得ルーチンにより記録するかの設定を、選択する手段を有する、ソフトウェア評価システム。
【請求項１２】
上記ソフトウェア評価システムにおいて、何れのモジュールの、何れの関数／メソッドの、何れのパラメータ、あるいは何れの戻り値をログ取得ルーチンにより記録するかの設定を、ファイルとして保存する手段を有し、そのファイルを読み込む手段を有し、エクスポートする関数一覧、もしくは各ＣＯＭサーバのエクスポートするインターフェース及びメソッド一覧として供給されたファイルを読み込む手段を有し、その２つのファイルに示された情報を以って、インポート関数アドレステーブル、もしくはＶｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅの何れのアドレスを、ログ取得のためのルーチンがロードされたメモリアドレスに書き換えるか選択する手段を有する、ソフトウェア評価システム。
【請求項１３】
上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するモジュールへの関数呼び出しを行い、且つパラメータに可変長配列が存在する場合において、その配列要素内でログとして取得する要素数をユーザが制限する手段を有し、要素数をあらわすパラメータ／戻り値に示された数と、ユーザにより指示されたログに保存すべき制限要素数とを比較する手段を有し、比較した結果小さい方の要素数をもって、配列要素の内容をその数分、ログとして取得する手段を有する、ソフトウェア評価システム。
【請求項１４】
上記ソフトウェア評価システムにおいて、あるモジュールから別のモジュール内に存在するＣＯＭサーバへのメソッド呼び出しを行い、且つパラメータに可変長配列が存在する場合において、その配列要素内でログとして取得する要素数をユーザが制限する手段を有し、要素数をあらわすパラメータ／戻り値に示された数と、ユーザにより指示されたログに保存すべき制限要素数とを比較する手段を有し、比較した結果小さい方の要素数をもって、配列要素の内容をその数分、ログとして取得する手段を有する、ソフトウェア評価システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数にモジュール分けされたソフトウェアの動作確認、デバッグ及び評価に関する。
【背景技術】
【０００２】
再現率の低いソフトウェアの障害に対しては、ソフトウェアの処理ログを取得することによって対処している場合が多いが、従来、処理ログの取得はソフトウェアのモジュール自体に手を加えて、処理ログ取得ルーチンを追加することによって行なわれている。また、配列要素の次元数、配列の要素値をもつ可変長配列を含むソフトウェアにおいて、可変長配列の要素次元数と要素数が一致していないことがある。
【特許文献１】特開２００４−３８３１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
上記従来の技術には４点の問題点がある。
【０００４】
（１）ユーザの動作環境でもログを取得しつづけるためには、モジュール本体にログ取得用の変更が入ったものを使用する必要がある。
【０００５】
（２）モジュール毎にログ取得を行うため、生成されたログはモジュール単位の物となってしまい、ソフトウェア全体の処理を、完全に時間順のログとして取得するのが困難である。
【０００６】
（３）全体の処理ログとしての見通しが悪いため、ログを解析して問題点を発見するまでのプロセスに工数がかかる。
【０００７】
（４）可変長配列の存在するモジュールのログを取得する場合で可変長配列内の要素次元数が実際の要素数よりも大幅に大きい場合、ログ取得のパフォーマンスに大きな影響がでてしまう。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明においては、あるモジュールから別のモジュール内に存在する関数の呼び出しが行なわれる際の仕組みである、メモリに保持されたインポート関数アドレス、乃至仮想関数アドレステーブル（Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ）を利用して、モジュール間の関数呼び出しをフックしてログに記録する、という手段を用いる。また、それぞれの関数呼び出しにおいては、すべてのパラメータ及び戻り値を、時刻と共に記録する。また、パラメータの一部に可変長配列が存在する場合に、ユーザが一定量の要素数以下のみログに取得するという手段を設けることで、可変長配列の要素次元数と実際の要素数が大幅に異なる場合（要素次元数＞実際の要素数）において、ソフトウェア評価システムのパフォーマンスを向上させる手段を提供する。
【発明の効果】
【０００９】
本発明を施したソフトウェア評価システムを用いることで、ソフトウェアの問題点を解析する工数が削減される。
【発明を実施するための最良の形態】
【００１０】
＜実施形態１＞
図１は、本発明を施したソフトウェア評価システムの構成をあらわす図である。説明を簡略化するために、本実施例では、本ソフトウェア評価システムが１台のＰＣ内部に構築されるものとするが、本発明の特徴は１台のＰＣ内部に構築されるか、あるいは複数のＰＣにネットワークシステムとして構築されるかによらず有効である。
【００１１】
本ソフトウェア評価システムを搭載するコンピュータには、ＣＰＵ１、チップセット２、ＲＡＭ３、ハードディスクコントローラ４、ディスプレイコントローラ５、ハードディスクドライブ６、ＣＤ−ＲＯＭドライブ７、ディスプレイ８が搭載されている。また、ＣＰＵとチップセットを繋ぐ信号線１１、チップセットとＲＡＭを繋ぐ信号線１２、チップセットと各種周辺機器とを繋ぐ周辺機器バス１３、ハードディスクコントローラとハードディスクドライブを繋ぐ信号線１４、ハードディスクコントローラとＣＤ−ＲＯＭドライブを繋ぐ信号線１５、ディスプレイコントローラとディスプレイを繋ぐ信号線１６が搭載されている。
【００１２】
本発明を施したソフトウェア評価システムを説明するために、まず図２によって、複数のモジュールに分かれたソフトウェアが、通常の状態でどのようにメモリにロードされるかを説明する。
【００１３】
通常、複数のモジュールに分かれたソフトウェアは、全体の制御を行なう実行ファイルＥＸＥ（２３）と、モジュールとして存在しＥＸＥの補完的な役割を担うダイナミックリンクライブラリＤＬＬ（２７）とに分かれており、メモリにはＥＸＥとＤＬＬの両方がロードされる。ＥＸＥはコードセグメント（２８）とデータセグメント（２９）、そしてインポート関数アドレステーブル（２２）から成っている。更に、インポート関数アドレステーブルは、関数の所属するＤＬＬによって分かれており（２１，２４）、ＤＬＬごとにそれぞれの関数がロードされたアドレスが書かれている（３０〜３５）。ＤＬＬの関数の実体は、ＤＬＬごとに分かれて（２５，２６）ロードされ、それぞれの関数は該当するＤＬＬの一部としてロードされる（３６〜４１）。この図では、１本のＥＸＥがＡ．ＤＬＬ及びＢ．ＤＬＬの２つのダイナミックリンクライブラリ内の関数を使用している例を示しており、実際に使用される関数はＦｕｎｃ  ＡＡ，Ｆｕｎｃ  ＡＢ，Ｆｕｎｃ  ＡＣ，Ｆｕｎｃ  ＢＡ，Ｆｕｎｃ  ＢＢ，Ｆｕｎｃ  ＢＣの６個となっている。
【００１４】
ＥＸＥのコードセグメント内にあるコードが関数Ｆｕｎｃ  ＡＡを呼び出す場合には、まずインポート関数アドレステーブル内に書かれたＦｕｎｃ  ＡＡのアドレス（３０）が読み込まれる。ここには実際にはＡ．ＤＬＬの一部として読み込まれたＦｕｎｃ  ＡＡコード（３６）のアドレスが書かれており、そのアドレスをコールすることによって、ＥＸＥのコードはＡ．ＤＬＬのＦｕｎｃ  ＡＡを呼び出すことができる。
【００１５】
図３は、本発明を施したソフトウェア評価システムのメモリ構成をあらわす図であり、図２とは、ログ取得用のコードに対してＩＡＴ  Ｐａｔｃｈ（Ｉｍｐｏｒｔ  Ａｄｄｒｅｓｓ  Ｔａｂｌｅ  Ｐａｔｃｈ）という手法を用いて、関数呼び出しをリダイレクトしているという点で異なっている。
【００１６】
ログ取得が開始されると、メモリ内にはＩＡＴ  Ｐａｔｃｈ用のＤＬＬであるＣ．ＤＬＬ（５８）がロードされる。Ｃ．ＤＬＬはインポート関数アドレステーブル（５２）内に書かれた関数のアドレスを、Ｃ．ＤＬＬ内のログ取得コードであるＦｕｎｃ  ＣＡＡ，Ｆｕｎｃ  ＣＡＢ，Ｆｕｎｃ  ＣＡＣ，Ｆｕｎｃ  ＣＢＡ，Ｆｕｎｃ  ＣＢＢ，Ｆｕｎｃ  ＣＢＣのアドレスに書き換える（６１〜６６）。Ｃ．ＤＬＬ内のＦｕｎｃ  ＣＡＡ，  Ｆｕｎｃ  ＣＡＢ，Ｆｕｎｃ  ＣＡＣ，Ｆｕｎｃ  ＣＢＡ，Ｆｕｎｃ  ＣＢＢ，Ｆｕｎｃ  ＣＢＣのコード（７３〜７８）は、ログを記録すると共に、元々関数呼び出しを受けるべくメモリにロードされている、該当する関数であるＦｕｎｃ  ＡＡ，  Ｆｕｎｃ  ＡＢ，Ｆｕｎｃ  ＡＣ，Ｆｕｎｃ  ＢＡ，Ｆｕｎｃ  ＢＢ，Ｆｕｎｃ  ＢＣ（６７〜７２）を呼び出す。
【００１７】
図４は、図３におけるＩＡＴ  Ｐａｔｃｈの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではＥＸＥがＡ．ＤＬＬ内のＦｕｎｃ  ＡＡを呼び出す際に、ＩＡＴ  Ｐａｔｃｈによるログ取得コードがどのように動作するかの例をあらわしている。
【００１８】
ＥＸＥ（９１）がＦｕｎｃ  ＡＡをコールすると（９４）、Ｃ．ＤＬＬ内にあるログ取得コードがＤＬＬ名／関数名をメモリに保存し、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する（９５）。その後Ｃ．ＤＬＬは本来呼び出されるはずであった、Ａ．ＤＬＬ（９３）内のＦｕｎｃ  ＡＡをコールする（９６）。Ａ．ＤＬＬのＦｕｎｃ  ＡＡ処理（９７）が終了し、Ｃ．ＤＬＬに制御がリターンすると（９８）、Ｃ．ＤＬＬはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する（９９）。その後、Ｃ．ＤＬＬは保存したログ情報をファイルに書き込み（１００）、あたかもＡ．ＤＬＬのＦｕｎｃ  ＡＡが通常通りに終了したかのように、ＥＸＥにリターンする（１０１）。
【００１９】
図５は、本発明を施したソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のＥＸＥ（１１３）が、ＤＬＬ−１（１１６）やＤＬＬ−２（１１７）内の関数を呼び出すが、ここではＡＰＩトレーサと呼ばれるログ取得コードを埋め込み（１１４）、処理ログを生成している（１１５）。ＡＰＩトレーサは、ＤＬＬ−１やＤＬＬ−２の関数定義を記述したファイル（１１１）と、どのＤＬＬのどの関数のインポート関数テーブルを書き換えてログを取得するかの設定シナリオ（１１２）を元に動作する。
【００２０】
図６は、本発明を施したソフトウェア評価システムにおいて、通常、実行ファイルＥＸＥ（１１８）がＣＯＭサーバでエクスポートされているインターフェースのインスタンス作成時に、通常の状態でどのようにメモリにロードされるかを説明する。
【００２１】
通常、インターフェースのインスタンス作成を行うと、ＣＯＭサーバ内で、要求されたインターフェース（１２１，１２２）と、そのメソッド（１３０〜１３５）が作成され、それらは、メモリ上に両方がロードされる。ここで、ｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅは作成された各インターフェース毎に作られ（１１８，１２０）、作成要求を行ったＥＸＥに渡される。このｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅには各メソッドの作成されたアドレスが書かれている（１２４〜１２９）。ＥＸＥはこれら情報を利用し、各インターフェースに対して呼び出しを行う。この図では、１本のＥＸＥがＩｎｔｅｒｆａｃｅ  Ａ及びＩｎｔｅｒｆａｃｅ  Ｂの２つのインターフェースのインスタンスを作成しており、そのインターフェース内部のメソッドを使用している例を示しており、実際に使用されているメソッドは、Ｍｅｔｈｏｄ  ＡＡ，Ｍｅｔｈｏｄ  ＡＢ，Ｍｅｔｈｏｄ  ＡＣ，Ｍｅｔｈｏｄ  ＢＡ，  Ｍｅｔｈｏｄ  ＢＢ，Ｍｅｔｈｏｄ  ＢＣとなっている。
【００２２】
ＥＸＥのコードが関数Ｍｅｔｈｏｄ  ＡＡを呼び出す場合には、まずｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅ内に書かれたＭｅｔｈｏｄ  ＡＡのアドレス（１２４）が読み込まれる。ここには実際にはＣＯＭサーバのＩｎｔｅｒｆａｃｅ  Ａの一部として作成されたＭｅｔｈｏｄ  ＡＡコード（１３０）のアドレスが書かれており、そのアドレスをコールすることによって、ＥＸＥのコードはＩｎｔｅｒｆａｃｅ  ＡのＭｅｔｈｏｄ  ＡＡを呼び出すことができる。
【００２３】
図７は、本発明を施したソフトウェア評価システムのメモリ構成をあらわす図であり、図６とは、ログ取得用のコードに対してＶＴａｂｌｅ  Ｐａｔｃｈ（ｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅ  Ｐａｔｃｈ）という手法を用いて、メソッド呼び出しをリダイレクトしているという点で異なっている。
【００２４】
ログ取得が開始されると、メモリ内にはＶＴａｂｌｅ  Ｐａｔｃｈ用のＤＬＬ（１４３）がロードされる。このＤＬＬはｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅ（１３６，  １３８）内に書かれたメソッドのアドレスを、ＤＬＬ内のログ取得コードであるＭｅｔｈｏｄ  Ａ’Ａ，Ｍｅｔｈｏｄ  Ａ’Ｂ，  Ｍｅｔｈｏｄ  Ａ’Ｃ，Ｍｅｔｈｏｄ  Ｂ’Ａ，  Ｍｅｔｈｏｄ  Ｂ’Ｂ，Ｍｅｔｈｏｄ  Ｂ’Ｃのアドレスに書き換える（１４５〜１５０）。ＤＬＬ内のＭｅｔｈｏｄ  Ａ’Ａ，Ｍｅｔｈｏｄ  Ａ’Ｂ，Ｍｅｔｈｏｄ  Ａ’Ｃ，Ｍｅｔｈｏｄ  Ｂ’Ａ，Ｍｅｔｈｏｄ  Ｂ’Ｂ，Ｍｅｔｈｏｄ  Ｂ’Ｃのコード（１５７〜１６２）は、ログを記録すると共に、元々のメソッド呼び出しを受けるべくメモリにロードされている、該当するメソッドであるＭｅｔｈｏｄ  ＡＡ，Ｍｅｔｈｏｄ  ＡＢ，Ｍｅｔｈｏｄ  ＡＣ，  Ｍｅｔｈｏｄ  ＢＡ，Ｍｅｔｈｏｄ  ＢＢ，Ｍｅｔｈｏｄ  ＢＣ（１５１〜１５６）を呼び出す。
【００２５】
図８は、図７におけるＶＴａｂｌｅ  Ｐａｔｃｈの処理をあらわすタイミングチャートである。説明を簡略化するために、この図ではＥＸＥがＣＯＭサーバ内のＩｎｔｅｒｆａｃｅ  ＡのＭｅｔｈｏｄ  ＡＡを呼び出す際に、ＶＴａｂｌｅ  Ｐａｔｃｈによるログ取得コードがどのように動作するかの例をあらわしている。
【００２６】
ＥＸＥ（１６３）がＭｅｔｈｏｄ  ＡＡをコールすると（１６６）、ＤＬＬ内にあるログ取得コードがモジュール名／インターフェース名／メソッド名をメモリに保存し、呼び出し時刻をメモリに保存し、呼び出し時のパラメータをメモリに保存し、呼び出し時のポインタパラメータの指すメモリ内容を、別メモリに保存する（１６７）。その後ＤＬＬは本来呼び出されるはずであった、ＣＯＭサーバ（１６５）内のＭｅｔｈｏｄ  ＡＡをコールする（１６８）。ＣＯＭサーバのＭｅｔｈｏｄ  ＡＡ処理（１６９）が終了し、ＤＬＬに制御がリターンすると（１７０）、ＤＬＬはリターン時の時刻をメモリに保存し、戻り値をメモリに保存し、リターン時にポインタパラメータが指すメモリ内容を、別メモリに保存する（１７１）。その後、ＤＬＬは保存したログ情報をファイルに書き込み（１７２）、あたかもＣＯＭサーバのＭｅｔｈｏｄ  ＡＡが通常通りに終了したかのように、ＥＸＥにリターンする（１７３）。
【００２７】
図９は、本発明を施したソフトウェア評価システムの内部構成をあらわす図である。通常は実行形式のＥＸＥ（１７６）が、ＣＯＭサーバ−１（１７９）やＣＯＭサーバ−２（１８０）内のメソッドを呼び出すが、ここではＡＰＩトレーサと呼ばれるログ取得コードを埋め込み（１７７）、処理ログを生成している（１７８）。ＡＰＩトレーサは、ＣＯＭサーバ−１（１７９）やＣＯＭサーバ−２の関数定義を記述したファイル（１７４）と、どのＣＯＭサーバのどのインターフェースのどのメソッドのｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  ｔａｂｌｅを書き換えてログを取得するかの設定シナリオ（１７５）を元に動作する。
【００２８】
図１０及び図１１は、ＳＡＦＥＡＲＲＡＹ等の可変長配列の概念図である。通常は図１０に示されるように要素次元数（１８０）と要素（１８１〜１８５）の数は一致している。しかしＳＡＦＥＡＲＲＡＹの使用方法を誤ると図１１に示すように、要素次元数（１８６）と要素（１８７〜１９１）の数が異なった構造となる場合がある。このような可変長配列を含むソフトウェアの評価を行う場合、要素次元数をもとに要素を読み込むと要素の存在しない部分（１９２〜１９６）まで読み込むことになり、ログ取得のパフォーマンスが低下する。本発明を施したソフトウェア評価システムでは、評価対象のソフトウェアに図１１のような可変長配列を含む場合のログ取得処理のパフォーマンスを向上させる。
【００２９】
図１２は、本発明を施したソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例である。ＤＬＬ名／Ｉｎｔｅｒｆａｃｅ名及び関数／メソッド名を記述し、その関数／メソッドに対する、パラメータ及び戻り値の型が示されている。本発明を施したソフトウェア評価システムは、この関数定義ファイルによって指示された内容を元に、それぞれの関数／メソッドがどのようなパラメータ／戻り値を有しているかを判断し、その内容をログとして取得する。なお、本実施例では、Ｉｎｔｅｒｆａｃｅ  ＡのＭｅｔｈｏｄ  ＡＢが、出力パラメータとして、ＳＡＦＥＡＲＲＡＹへのポインタが定義されている。また、Ｉｎｔｅｒｆａｃｅ  ＡのＭｅｔｈｏｄ  ＡＣが、戻り値として、ＳＡＦＥＡＲＲＡＹが定義されている。
【００３０】
図１３は、図１２に示した関数定義ファイルを用いて、本発明を施したソフトウェア評価システムで取得した、ログの一例である。それぞれの呼び出しに対して、関数／メソッドが呼び出された時刻、及びその際のパラメータ／戻り値が、ログとして生成される。
【００３１】
図１２〜図１３に示された関数定義ファイル、ログに示された実施例は、指示するデータが入力データか出力データか、あるいは戻り値かに依存せずに有効である。例えば、関数からの出力パラメータとしてデータアドレスが戻され、更に関数からの戻り値としてデータサイズが出力された場合にも、同様にデータ本体のログを取得することが可能である。
【００３２】
図１４は、本発明を施したソフトウェア評価システムにおける、一例をあらわす処理の流れ図である。
【００３３】
設定された関数／メソッドが呼び出されることによって、処理が開始されると（Ｓ１）、本ソフトウェアはＤＬＬ名／Ｉｎｔｅｒｆａｃｅ名／Ｍｅｔｈｏｄ名／呼び出し時の時刻をＨＤＤに保存し（Ｓ２）、その呼び出しに対してのパラメータをＨＤＤに保存する（Ｓ３）。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図１２に示した関数定義ファイルに基づいて判断し（Ｓ４）、定義されている場合は、可変長配列の中から要素次元数を取得する（Ｓ５）。さらに、要素次元数分の要素をその可変長配列から読み込み（Ｓ９）、ログをＨＤＤに保存する（Ｓ１０）。パラメータが可変長配列として定義されていない場合、Ｓ５からＳ７の処理は行われない。
【００３４】
関数内部の処理が終了すると（Ｓ８）、本ソフトウェアはＤＬＬ名／Ｉｎｔｅｒｆａｃｅ名／Ｍｅｔｈｏｄ名／終了時の時刻をＨＤＤに保存し（Ｓ９）、その呼び出しに対してのパラメータ及び戻り値をＨＤＤに保存する（Ｓ１０）。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図１２に示した関数定義ファイルに基づいて判断し（Ｓ１１）、定義されている場合は、可変長配列の中から要素次元数を取得する（Ｓ１２）。さらに、要素次元数分の要素をその可変長配列から読み込み（Ｓ１３）、ログをＨＤＤに保存する（Ｓ１４）。パラメータが可変長配列として定義されていない場合、Ｓ１２からＳ１４の処理は行われない。
【００３５】
この処理は、評価対象となるプログラムが終了するまで（Ｓ１５）続行される。
【００３６】
＜実施形態２＞
図１５及び図１６は、本発明を施したソフトウェア評価システムにおける、別な一例をあらわす処理の流れ図である。
【００３７】
設定された関数／メソッドが呼び出されることによって、処理が開始されると（Ｓ１１）、本ソフトウェアはＤＬＬ名／Ｉｎｔｅｒｆａｃｅ名／Ｍｅｔｈｏｄ名／呼び出し時の時刻をＨＤＤに保存し（Ｓ１２）、その呼び出しに対してのパラメータをＨＤＤに保存する（Ｓ１３）。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図１２に示した関数定義ファイルに基づいて判断し（Ｓ１４）、定義されている場合は、可変長配列の中から要素次元数を取得する（Ｓ１５）。さらに、可変長配列の要素数制限値が設定されているかどうかを判断し（Ｓ１６）、設定されている場合は要素次元数と制限値を比較する（Ｓ１７）。要素次元数よりも制限値の方が小さい場合には、制限数分の要素をその可変長配列から読み込む（Ｓ１８）。また、要素次元数の方が小さい場合及び制限値が設定されていない場合には、要素次元数分の要素をその可変長配列から読み込む（Ｓ１９）。可変長配列から要素を読み込んだ後、ログをＨＤＤに保存する（Ｓ２０）。パラメータが可変長配列として定義されていない場合、Ｓ１５からＳ２０の処理は行われない。
【００３８】
関数内部の処理が終了すると（Ｓ２１）、本ソフトウェアはＤＬＬ名／Ｉｎｔｅｒｆａｃｅ名／Ｍｅｔｈｏｄ名／終了時の時刻をＨＤＤに保存し（Ｓ２２）、その呼び出しに対してのパラメータ及び戻り値をＨＤＤに保存する（Ｓ２３）。次に本ソフトウェアは、パラメータが可変長配列として定義されているかどうかを、図１２に示した関数定義ファイルに基づいて判断し（Ｓ２４）、定義されている場合は、可変長配列の中から要素次元数を取得する（Ｓ２５）。さらに、可変長配列の要素数制限値が設定されているかどうかを判断し（Ｓ２６）、設定されている場合は要素次元数と制限値を比較する（Ｓ２７）。要素次元数よりも制限値の方が小さい場合には、制限数分の要素をその可変長配列から読み込む（Ｓ２８）。また、要素次元数の方が小さい場合及び制限値が設定されていない場合には、要素次元数分の要素をその可変長配列から読み込む（Ｓ２９）。可変長配列から要素を読み込んだ後、ログをＨＤＤに保存する（Ｓ３０）。パラメータが可変長配列として定義されていない場合、Ｓ２５からＳ３０の処理は行われない。
【００３９】
この処理は、評価対象となるプログラムが終了するまで（Ｓ３１）続行される。
【００４０】
＜実施形態３＞
図１７は、実施例１及び実施例２で示された機能を設定するための、ユーザーインターフェイスの例である。ＳＡＦＥＡＲＲＡＹの取得要素数を制限するかどうかの設定が存在し、取得要素数を制限しないという設定が行われた場合、実施例１に示した処理が行われる。また、取得要素数を制限するという設定が行われた場合、実施例２に示した処理が行われる。
【図面の簡単な説明】
【００４１】
【図１】実施例１におけるソフトウェア評価システムを搭載した、コンピュータの構成をあらわす図である。
【図２】実施例１を説明するためにあらわした、関数ロード時の通常のメモリ構成をあらわす図である。
【図３】実施例１におけるソフトウェア評価システムを搭載した、コンピュータのＩＡＴ  Ｐａｔｃｈ使用時のメモリ構成をあらわす図である。
【図４】実施例１におけるソフトウェア評価システムのＩＡＴ  Ｐａｔｃｈを使用時のタイミングチャートである。
【図５】実施例１におけるソフトウェア評価システムのＩＡＴ  Ｐａｔｃｈを使用時の内部構成をあらわす図である。
【図６】実施例１を説明するためにあらわした、ＣＯＭサーバのインターフェースのインスタンス作成時の通常のメモリ構成をあらわす図である。
【図７】実施例１におけるソフトウェア評価システムを搭載した、コンピュータのＶＴａｂｌｅ  Ｐａｔｃｈ使用時のメモリ構成をあらわす図である。
【図８】実施例１におけるソフトウェア評価システムのＶＴａｂｌｅ  Ｐａｔｃｈを使用時のタイミングチャートである。
【図９】実施例１におけるソフトウェア評価システムのＶＴａｂｌｅ  Ｐａｔｃｈを使用時の内部構成をあらわす図である。
【図１０】実施例１における可変長配列の内部構造の概念をあらわす図である。
【図１１】実施例１における可変長配列の内部構造の概念をあらわす図である。
【図１２】実施例１におけるソフトウェア評価システムに対して、それぞれの関数及びメソッドのパラメータの形式や、戻り値の形式を指示する、関数定義ファイルの例である。
【図１３】図１２に示した関数定義ファイルを用いて、実施例１におけるソフトウェア評価システムで取得した、ログの一例である。
【図１４】実施例１に示したソフトウェア評価システムにおける、処理の流れ図である。
【図１５】実施例２に示したソフトウェア評価システムにおける、処理の流れ図である。
【図１６】実施例２に示したソフトウェア評価システムにおける、処理の流れ図である。
【図１７】実施例３におけるソフトウェア評価システムの、ユーザーインターフェイスの例である。
【符号の説明】
【００４２】
１  ＣＰＵ
２  チップセット
３  ＲＡＭ
４  ハードディスクコントローラ
５  ディスプレイコントローラ
６  ハードディスクドライブ
７  ＣＤ−ＲＯＭドライブ
８  ディスプレイ
１１  ＣＰＵとチップセットを繋ぐ信号線
１２  チップセットとＲＡＭを繋ぐ信号線
１３  チップセットと各種周辺機器とを繋ぐ周辺機器バス
１４  ハードディスクコントローラとハードディスクドライブを繋ぐ信号線
１５  ハードディスクコントローラとＣＤ−ＲＯＭドライブを繋ぐ信号線
１６  ディスプレイコントローラとディスプレイを繋ぐ信号線
【図１】
2006031248.tif 000003
【図２】
2006031248.tif 000004
【図３】
2006031248.tif 000005
【図４】
2006031248.tif 000006
【図５】
2006031248.tif 000007
【図６】
2006031248.tif 000008
【図７】
2006031248.tif 000009
【図８】
2006031248.tif 000010
【図９】
2006031248.tif 000011
【図１０】
2006031248.tif 000012
【図１１】
2006031248.tif 000013
【図１２】
2006031248.tif 000014
【図１３】
2006031248.tif 000015
【図１４】
2006031248.tif 000016
【図１５】
2006031248.tif 000017
【図１６】
2006031248.tif 000018
【図１７】
2006031248.tif 000019