JP3199876B2 - プログラム解析システムおよび方法 - Google Patents
プログラム解析システムおよび方法Info
- Publication number
- JP3199876B2 JP3199876B2 JP31172192A JP31172192A JP3199876B2 JP 3199876 B2 JP3199876 B2 JP 3199876B2 JP 31172192 A JP31172192 A JP 31172192A JP 31172192 A JP31172192 A JP 31172192A JP 3199876 B2 JP3199876 B2 JP 3199876B2
- Authority
- JP
- Japan
- Prior art keywords
- information
- message
- data
- program
- message communication
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Description
【0001】
【産業上の利用分野】本発明は、オブジェクト指向言語
によるソフトウェア開発の支援を行うためのプログラム
解析システムに関する。
によるソフトウェア開発の支援を行うためのプログラム
解析システムに関する。
【0002】
【従来の技術】オブジェクト指向言語を用いたプログラ
ムにおいては、プログラムの動作は各オブジェクト間の
メッセージ通信によってなされる。この各オブジェクト
間のメッセージ通信の解析は、プログラムのテスト/デ
バッグやオブジェクトの設計の改良に有効に利用するこ
とができる。
ムにおいては、プログラムの動作は各オブジェクト間の
メッセージ通信によってなされる。この各オブジェクト
間のメッセージ通信の解析は、プログラムのテスト/デ
バッグやオブジェクトの設計の改良に有効に利用するこ
とができる。
【0003】従来は各オブジェクト間のメッセージ通信
を解析する場合、開発中のプログラム内の各オブジェク
トから利用され得るすべてのオブジェクトのソースプロ
グラムあるいはすべてのオブジェクトに用意されている
メソッドのリストから、メッセージとして送られている
メソッド名の文字列を静的に検索し、その結果を表示し
ていた。
を解析する場合、開発中のプログラム内の各オブジェク
トから利用され得るすべてのオブジェクトのソースプロ
グラムあるいはすべてのオブジェクトに用意されている
メソッドのリストから、メッセージとして送られている
メソッド名の文字列を静的に検索し、その結果を表示し
ていた。
【0004】ところが、オブジェクト指向言語では異な
るオブジェクトに対し同じメソッド名を許すために、こ
のような従来のプログラム検索方式のようにただ単にソ
ースプログラムを検索するだけでは、いくつかのオブジ
ェクト内で定義された同じ名前を持つメソッドの一覧が
結果として得られるだけであり、そのオブジェクトが同
一の名前を有するメソッドのうちどのメソッドを実際に
メッセージとして送るのか、あるいは同名のメソッドを
有するオブジェクトのうちどのオブジェクトに実際にメ
ッセージが送られるのかについては特定できないという
不都合があった。
るオブジェクトに対し同じメソッド名を許すために、こ
のような従来のプログラム検索方式のようにただ単にソ
ースプログラムを検索するだけでは、いくつかのオブジ
ェクト内で定義された同じ名前を持つメソッドの一覧が
結果として得られるだけであり、そのオブジェクトが同
一の名前を有するメソッドのうちどのメソッドを実際に
メッセージとして送るのか、あるいは同名のメソッドを
有するオブジェクトのうちどのオブジェクトに実際にメ
ッセージが送られるのかについては特定できないという
不都合があった。
【0005】さらに、前述のメソッドが特定できたとし
ても、従来の静的なメッセージ通信解析では生じる可能
性のあるメッセージ通信に関連するメソッド名を列挙す
るに過ぎず、プログラムが動作することにより実際に発
生するメッセージ通信の状況を把握することは非常に困
難であった。
ても、従来の静的なメッセージ通信解析では生じる可能
性のあるメッセージ通信に関連するメソッド名を列挙す
るに過ぎず、プログラムが動作することにより実際に発
生するメッセージ通信の状況を把握することは非常に困
難であった。
【0006】このように、従来の解析方式では、メッセ
ージ通信を追ってプログラムの動作を追跡し、実際のプ
ログラムの動作に即したメッセージ通信の状況を把握す
ることの困難性から、プログラムのテスト/デバッグが
非効率的になっていた。
ージ通信を追ってプログラムの動作を追跡し、実際のプ
ログラムの動作に即したメッセージ通信の状況を把握す
ることの困難性から、プログラムのテスト/デバッグが
非効率的になっていた。
【0007】
【発明が解決しようとする課題】本発明は、上記事情を
考慮してなされたもので、オブジェクト指向言語によっ
て書かれたプログラムのメッセージ通信を動的に記録
し、プログラムの解析を行うためのプログラムの解析シ
ステムを提供することを目的とする。
考慮してなされたもので、オブジェクト指向言語によっ
て書かれたプログラムのメッセージ通信を動的に記録
し、プログラムの解析を行うためのプログラムの解析シ
ステムを提供することを目的とする。
【0008】
【課題を解決するための手段】本発明は、或るオブジェ
クトが或る処理(メソッド)の実行中に所望のオブジェ
クトに対し、該所望のオブジェクトに指示することによ
ってのみ実行可能な所望の処理の起動を指示する第1の
メッセージを送信し、該所望のオブジェクトが該或るオ
ブジェクトに対し、該所望の処理の実行終了を通知する
第2のメッセージを返信することによって次々と処理が
進められるように記述されたプログラムを解析するプロ
グラム解析方法であって、前記プログラムの動作時に個
々の前記処理の起動または実行終了が発生する毎に、起
動を指示する前記第1のメッセージを受信した受信オブ
ジェクトを示す名称、起動された該処理を示す名称、お
よび起動された該処理についての引数に関するデータを
含む第1の情報、または前記第2のメッセージが実行終
了を通知する処理についての戻り値に関するデータを含
む第2の情報を、それらの発生順を認識できるように記
録し、前記第1および第2の情報の記録をその発生順に
辿って初めて出現する前記第2の情報に対して、それま
での発生順で最後に出現した前記第1の情報を、対にな
るものとして特定し、それら特定された第1および第2
の情報を前記記録から除外した場合について同一の基準
によって他の対になる第1および第2の情報を特定する
ことを、繰り返し行うことによって、記録されたすべて
の前記第1および第2の情報について、対になる第1お
よび第2の情報同士を特定し、特定された前記対になる
第1および第2の情報の各々について、前記第1および
第2の情報の記録における当該第1の情報までの発生順
のうちに出現した他の第1の情報であって対になる他の
第2の情報が未だ出現しないもののうち最後に出現した
ものに含まれるオブジェクトを、当該前記第1の情報に
含まれる受信オブジェクトに対して前記第1のメッセー
ジを送信した送信オブジェクトとして特定し、各々の前
記対になる第1および第2の情報における前記受信オブ
ジェクトと前記送信オブジェクトとの間でなされたメッ
セージ通信に関する情報として、該送信オブジェクトを
示す名称、該受信オブジェクトを示す名称、起動された
処理を示す名称、ならびに該起動された処理についての
引数に関するデータおよび戻り値に関するデータを含む
情報を作成することを特徴とする。好ましくは、作成さ
れた前記メッセージ通信に関する情報の集合に基づいて
前記メッセージ通信の解析を行うようにしてもよい。好
ましくは、前記解析は、前記メッセージ通信に関する統
計解析であるようにしてもよい。好ましくは、前記統計
解析による解析結果は、同一の内容を有するメッセージ
通信の頻度集計であるようにしてもよい。また、本発明
は、或るオブジェクトが或る処理(メソッド)の実行中
に所望のオブジェクトに対し、該所望のオブジェクトに
指示することによってのみ実行可能な所望の処理の起動
を指示する第1のメッセージを送信し、該所望のオブジ
ェクトが該或るオブジェクトに対し、該所望の処理の実
行終了を通知する第2のメッセージを返信することによ
って次々と処理が進められるように記述されたプログラ
ムを解析するプログラム解析システムであって、前記プ
ログラムの動作時に個々の前記処理の起動または実行終
了が発生する毎に、起動を指示する前記第1のメッセー
ジを受信した受信オブジェクトを示す名称、起動された
該処理を示す名称、および起動された該処理についての
引数に関するデータを含む第1の情報、または前記第2
のメッセージが実行終了を通知する処理についての戻り
値に関するデータを含む第2の情報を、それらの発生順
を認識できるように記録する手段と、前記第1および第
2の情報の記録をその発生順に辿って初めて出現する前
記第2の情報に対して、それまでの発生順で最後に出現
した前記第1の情報を、対になるものとして特定し、そ
れら特定された第1および第2の情報を前記記録から除
外した場合について同一の基準によって他の対になる第
1および第2の情報を特定することを、繰り返し行うこ
とによって、記録されたすべての前記第1および第2の
情報について、対になる第1および第2の情報同士を特
定する手段と、特定された前記対になる第1および第2
の情報の各々について、前記第1および第2の情報の記
録における当該第1の情報までの発生順のうちに出現し
た他の第1の情報であって対になる他の第2の情報が未
だ出現しないもののうち最後に出現したものに含まれる
オブジェクトを、当該前記第1の情報に含まれる受信オ
ブジェクトに対して前記第1のメッセージを送信した送
信オブジェクトとして特定する手段と、各々の前記対に
なる第1および第2の情報における前記受信オブジェク
トと前記送信オブジェクトとの間でなされたメッセージ
通信に関する情報として、該送信オブジェクトを示す名
称、該受信オブジェクトを示す名称、起動された処理を
示す名称、ならびに該起動された処理についての引数に
関するデータおよび戻り値に関するデータを含む情報を
作成する手段とを備えたことを特徴とする。
クトが或る処理(メソッド)の実行中に所望のオブジェ
クトに対し、該所望のオブジェクトに指示することによ
ってのみ実行可能な所望の処理の起動を指示する第1の
メッセージを送信し、該所望のオブジェクトが該或るオ
ブジェクトに対し、該所望の処理の実行終了を通知する
第2のメッセージを返信することによって次々と処理が
進められるように記述されたプログラムを解析するプロ
グラム解析方法であって、前記プログラムの動作時に個
々の前記処理の起動または実行終了が発生する毎に、起
動を指示する前記第1のメッセージを受信した受信オブ
ジェクトを示す名称、起動された該処理を示す名称、お
よび起動された該処理についての引数に関するデータを
含む第1の情報、または前記第2のメッセージが実行終
了を通知する処理についての戻り値に関するデータを含
む第2の情報を、それらの発生順を認識できるように記
録し、前記第1および第2の情報の記録をその発生順に
辿って初めて出現する前記第2の情報に対して、それま
での発生順で最後に出現した前記第1の情報を、対にな
るものとして特定し、それら特定された第1および第2
の情報を前記記録から除外した場合について同一の基準
によって他の対になる第1および第2の情報を特定する
ことを、繰り返し行うことによって、記録されたすべて
の前記第1および第2の情報について、対になる第1お
よび第2の情報同士を特定し、特定された前記対になる
第1および第2の情報の各々について、前記第1および
第2の情報の記録における当該第1の情報までの発生順
のうちに出現した他の第1の情報であって対になる他の
第2の情報が未だ出現しないもののうち最後に出現した
ものに含まれるオブジェクトを、当該前記第1の情報に
含まれる受信オブジェクトに対して前記第1のメッセー
ジを送信した送信オブジェクトとして特定し、各々の前
記対になる第1および第2の情報における前記受信オブ
ジェクトと前記送信オブジェクトとの間でなされたメッ
セージ通信に関する情報として、該送信オブジェクトを
示す名称、該受信オブジェクトを示す名称、起動された
処理を示す名称、ならびに該起動された処理についての
引数に関するデータおよび戻り値に関するデータを含む
情報を作成することを特徴とする。好ましくは、作成さ
れた前記メッセージ通信に関する情報の集合に基づいて
前記メッセージ通信の解析を行うようにしてもよい。好
ましくは、前記解析は、前記メッセージ通信に関する統
計解析であるようにしてもよい。好ましくは、前記統計
解析による解析結果は、同一の内容を有するメッセージ
通信の頻度集計であるようにしてもよい。また、本発明
は、或るオブジェクトが或る処理(メソッド)の実行中
に所望のオブジェクトに対し、該所望のオブジェクトに
指示することによってのみ実行可能な所望の処理の起動
を指示する第1のメッセージを送信し、該所望のオブジ
ェクトが該或るオブジェクトに対し、該所望の処理の実
行終了を通知する第2のメッセージを返信することによ
って次々と処理が進められるように記述されたプログラ
ムを解析するプログラム解析システムであって、前記プ
ログラムの動作時に個々の前記処理の起動または実行終
了が発生する毎に、起動を指示する前記第1のメッセー
ジを受信した受信オブジェクトを示す名称、起動された
該処理を示す名称、および起動された該処理についての
引数に関するデータを含む第1の情報、または前記第2
のメッセージが実行終了を通知する処理についての戻り
値に関するデータを含む第2の情報を、それらの発生順
を認識できるように記録する手段と、前記第1および第
2の情報の記録をその発生順に辿って初めて出現する前
記第2の情報に対して、それまでの発生順で最後に出現
した前記第1の情報を、対になるものとして特定し、そ
れら特定された第1および第2の情報を前記記録から除
外した場合について同一の基準によって他の対になる第
1および第2の情報を特定することを、繰り返し行うこ
とによって、記録されたすべての前記第1および第2の
情報について、対になる第1および第2の情報同士を特
定する手段と、特定された前記対になる第1および第2
の情報の各々について、前記第1および第2の情報の記
録における当該第1の情報までの発生順のうちに出現し
た他の第1の情報であって対になる他の第2の情報が未
だ出現しないもののうち最後に出現したものに含まれる
オブジェクトを、当該前記第1の情報に含まれる受信オ
ブジェクトに対して前記第1のメッセージを送信した送
信オブジェクトとして特定する手段と、各々の前記対に
なる第1および第2の情報における前記受信オブジェク
トと前記送信オブジェクトとの間でなされたメッセージ
通信に関する情報として、該送信オブジェクトを示す名
称、該受信オブジェクトを示す名称、起動された処理を
示す名称、ならびに該起動された処理についての引数に
関するデータおよび戻り値に関するデータを含む情報を
作成する手段とを備えたことを特徴とする。
【0009】また、本発明に係るプログラム解析方法
は、オブジェクト指向言語により記述されたプログラム
の動作時において発生するメッセージ通信に関連する各
オブジェクトで定義された各メソッドの動的な起動/終
了状況記録を作成するための記録作成ステップと、前記
記録を基に各オブジェクトの各メソッドの実行履歴を解
析するための実行履歴解析ステップと、前記実行履歴解
析ステップにおける解析結果を基に各オブジェクト間の
動的なメッセージ通信を解析するための通信解析ステッ
プとを有することを特徴とする。また、本発明に係るプ
ログラム解析システムは、オブジェクト指向言語により
記述されたプログラムの動作時において発生するメッセ
ージ通信に関連する各オブジェクトで定義された各メソ
ッドの動的な起動/終了状況記録を作成するための記録
作成手段と、前記記録を基に各オブジェクトの各メソッ
ドの実行履歴を解析するための実行履歴解析手段と、前
記実行履歴解析手段による解析結果を基に各オブジェク
ト間の動的なメッセージ通信を解析するための通信解析
手段とを有することを特徴とする。
は、オブジェクト指向言語により記述されたプログラム
の動作時において発生するメッセージ通信に関連する各
オブジェクトで定義された各メソッドの動的な起動/終
了状況記録を作成するための記録作成ステップと、前記
記録を基に各オブジェクトの各メソッドの実行履歴を解
析するための実行履歴解析ステップと、前記実行履歴解
析ステップにおける解析結果を基に各オブジェクト間の
動的なメッセージ通信を解析するための通信解析ステッ
プとを有することを特徴とする。また、本発明に係るプ
ログラム解析システムは、オブジェクト指向言語により
記述されたプログラムの動作時において発生するメッセ
ージ通信に関連する各オブジェクトで定義された各メソ
ッドの動的な起動/終了状況記録を作成するための記録
作成手段と、前記記録を基に各オブジェクトの各メソッ
ドの実行履歴を解析するための実行履歴解析手段と、前
記実行履歴解析手段による解析結果を基に各オブジェク
ト間の動的なメッセージ通信を解析するための通信解析
手段とを有することを特徴とする。
【0010】
【作用】本発明は、オブジェクト指向言語により記述さ
れたプログラムはオブジェクト内で定義されたメソッド
の実行中に発生するオブジェクト間のメッセージ通信に
よって、メッセージの受け手側のオブジェクト内で定義
された他のメソッドが起動されることにより進められて
いき、1つのメッセージ通信はそのメッセージ通信が起
動したメソッドの終了により完了するので、従って当該
メッセージ通信は後から発生したメッセージ通信の方が
必ず先に完了するというメッセージ通信の入れ子構造的
性質を有することに着目してなされたものである。
れたプログラムはオブジェクト内で定義されたメソッド
の実行中に発生するオブジェクト間のメッセージ通信に
よって、メッセージの受け手側のオブジェクト内で定義
された他のメソッドが起動されることにより進められて
いき、1つのメッセージ通信はそのメッセージ通信が起
動したメソッドの終了により完了するので、従って当該
メッセージ通信は後から発生したメッセージ通信の方が
必ず先に完了するというメッセージ通信の入れ子構造的
性質を有することに着目してなされたものである。
【0011】本発明では、処理の起動に応答して、第1
のメッセージを受信した受信オブジェクトを示す名称、
起動された処理を示す名称、および起動された該処理に
ついての引数に関するデータを含む第1の情報を記録
し、処理の実行終了に応答して、実行終了された処理に
ついての戻り値に関するデータを含む第2の情報を記録
する。その際、それら情報の発生順を認識できるように
記録する。次に、この情報の記録において対になる第1
および第2の情報同士を特定する。すなわち、情報の記
録をその発生順に辿って初めて出現する第2の情報に対
して、それまでの発生順で最後に出現した第1の情報
を、対になるものとして特定し、それら特定された対に
なる情報を該記録から除外した場合について同一の基準
によって他の対になる情報を特定することを、繰り返し
行うことによって、記録されたすべての第1および第2
の情報についての対応関係を特定する。次に、特定され
た対応関係に基づいて各々の対になる情報における受信
オブジェクトに対する送信オブジェクトを特定する。す
なわち、各々の第1の情報に含まれる受信オブジェクト
について、該情報の記録における当該第1の情報までの
発生順のうちに出現した他の第1の情報であって対にな
る他の第2の情報が未だ出現しないもののうち最後に出
現したものに含まれるオブジェクトを、当該受信オブジ
ェクトに対する送信オブジェクトとして特定する。そし
て、特定された各々の受信オブジェクトと送信オブジェ
クトとの間でなされたメッセージ通信に関する情報とし
て、該送信オブジェクトを示す名称、該受信オブジェク
トを示す名称、起動された処理を示す名称、ならびに該
起動された処理についての引数に関するデータおよび戻
り値に関するデータを含む情報を作成する。
のメッセージを受信した受信オブジェクトを示す名称、
起動された処理を示す名称、および起動された該処理に
ついての引数に関するデータを含む第1の情報を記録
し、処理の実行終了に応答して、実行終了された処理に
ついての戻り値に関するデータを含む第2の情報を記録
する。その際、それら情報の発生順を認識できるように
記録する。次に、この情報の記録において対になる第1
および第2の情報同士を特定する。すなわち、情報の記
録をその発生順に辿って初めて出現する第2の情報に対
して、それまでの発生順で最後に出現した第1の情報
を、対になるものとして特定し、それら特定された対に
なる情報を該記録から除外した場合について同一の基準
によって他の対になる情報を特定することを、繰り返し
行うことによって、記録されたすべての第1および第2
の情報についての対応関係を特定する。次に、特定され
た対応関係に基づいて各々の対になる情報における受信
オブジェクトに対する送信オブジェクトを特定する。す
なわち、各々の第1の情報に含まれる受信オブジェクト
について、該情報の記録における当該第1の情報までの
発生順のうちに出現した他の第1の情報であって対にな
る他の第2の情報が未だ出現しないもののうち最後に出
現したものに含まれるオブジェクトを、当該受信オブジ
ェクトに対する送信オブジェクトとして特定する。そし
て、特定された各々の受信オブジェクトと送信オブジェ
クトとの間でなされたメッセージ通信に関する情報とし
て、該送信オブジェクトを示す名称、該受信オブジェク
トを示す名称、起動された処理を示す名称、ならびに該
起動された処理についての引数に関するデータおよび戻
り値に関するデータを含む情報を作成する。
【0012】
【0013】以上により、オブジェクト指向言語によっ
て作成されたプログラムのメッセージ通信を動的に記録
し、プログラムの解析を行うことが可能となる。従っ
て、そのようなプログラムのテスト/デバッグを容易に
行うことができ、ソフトウェア開発における工数の大幅
削減などの開発の効率化を図ることができる。
て作成されたプログラムのメッセージ通信を動的に記録
し、プログラムの解析を行うことが可能となる。従っ
て、そのようなプログラムのテスト/デバッグを容易に
行うことができ、ソフトウェア開発における工数の大幅
削減などの開発の効率化を図ることができる。
【0014】
【実施例】以下、図面を参照しながら実施例を説明す
る。
る。
【0015】最初に、オブジェクト指向言語におけるオ
ブジェクト間のメッセージ通信について、図2に示すメ
ッセージ通信の一例を用いて簡単に説明する。ここで、
図2の符号Cへの添字は、当該事象の発生順を表わす。
オブジェクト指向言語により記述されたプログラムは、
オブジェクトaObj〜cObj内で定義されたメソッド(図示
せず、)の実行中に発生するオブジェクト間のメッセー
ジ通信aMes〜dMesによって、メッセージの受けて側のオ
ブジェクトaObj〜dObj 内で定義された他のメソッド
(図示せず)が起動されることにより進められていく。
なお、対象プログラムに起動をかける(aObjにaMesを送
信する)プログラム実行の機構を便宜的にSystemと表記
する。1つのメッセージ通信は、そのメッセージ通信が
起動したメソッドの終了により完了するので、後から発
生したメッセージ通信の方が必ず先に完了する性質を有
する。例えば、図2では先に発生したcMesに関する
メッセージ通信(C4,C7)の方が、後から発生した
dMesに関するメッセージ通信(C5,C6)よりも
遅く完了している。すなわち、複数のメッセージ通信
は、入れ子構造になっている。
ブジェクト間のメッセージ通信について、図2に示すメ
ッセージ通信の一例を用いて簡単に説明する。ここで、
図2の符号Cへの添字は、当該事象の発生順を表わす。
オブジェクト指向言語により記述されたプログラムは、
オブジェクトaObj〜cObj内で定義されたメソッド(図示
せず、)の実行中に発生するオブジェクト間のメッセー
ジ通信aMes〜dMesによって、メッセージの受けて側のオ
ブジェクトaObj〜dObj 内で定義された他のメソッド
(図示せず)が起動されることにより進められていく。
なお、対象プログラムに起動をかける(aObjにaMesを送
信する)プログラム実行の機構を便宜的にSystemと表記
する。1つのメッセージ通信は、そのメッセージ通信が
起動したメソッドの終了により完了するので、後から発
生したメッセージ通信の方が必ず先に完了する性質を有
する。例えば、図2では先に発生したcMesに関する
メッセージ通信(C4,C7)の方が、後から発生した
dMesに関するメッセージ通信(C5,C6)よりも
遅く完了している。すなわち、複数のメッセージ通信
は、入れ子構造になっている。
【0016】本発明は、係るメッセージ通信の性質に着
目してなされたものであり、以下に説明するような構成
および動作により実現される。なお、以下の説明におい
て、あるメッセージ通信に関連するメッセージ名とメソ
ッド名は同一であるものとし、当該メッセージ通信の内
容は、メッセージ名および必要な引数または戻り値を含
むものとする。
目してなされたものであり、以下に説明するような構成
および動作により実現される。なお、以下の説明におい
て、あるメッセージ通信に関連するメッセージ名とメソ
ッド名は同一であるものとし、当該メッセージ通信の内
容は、メッセージ名および必要な引数または戻り値を含
むものとする。
【0017】図1は、本発明の一実施例に係るプログラ
ム解析システムの構成を示すブロック図である。まず、
図1のシステムの構成について説明する。当該プログラ
ム解析システム1は、オブジェクト指向言語インタプリ
タ上でのプログラム動作時の各オブジェクトで定義され
た各メソッドの動的な起動/終了状況記録を作成するた
めのメソッド起動/終了状況記録作成部2と、前記記録
作成部2により作成された前記記録を格納するための起
動/終了状況記憶部12と、前記記録作成部2により作
成された前記記録を基に各オブジェクトの各メソッドの
実行履歴を解析するメソッド実行履歴解析部4と、前記
メソッド実行履歴解析部4により解析された結果を格納
するための第1解析結果記憶部14と、前記メソッド実
行履歴解析部4により解析された結果を基に各オブジェ
クト間の動的なメッセージ通信を解析するメッセージ通
信解析部6と、前記メッセージ通信解析部6により解析
された結果を格納するための第2解析結果記憶部16
と、前記メッセージ通信解析部6により解析された結果
を表示するための表示部20とにより構成される。次
に、図1のシステムの動作について説明する。
ム解析システムの構成を示すブロック図である。まず、
図1のシステムの構成について説明する。当該プログラ
ム解析システム1は、オブジェクト指向言語インタプリ
タ上でのプログラム動作時の各オブジェクトで定義され
た各メソッドの動的な起動/終了状況記録を作成するた
めのメソッド起動/終了状況記録作成部2と、前記記録
作成部2により作成された前記記録を格納するための起
動/終了状況記憶部12と、前記記録作成部2により作
成された前記記録を基に各オブジェクトの各メソッドの
実行履歴を解析するメソッド実行履歴解析部4と、前記
メソッド実行履歴解析部4により解析された結果を格納
するための第1解析結果記憶部14と、前記メソッド実
行履歴解析部4により解析された結果を基に各オブジェ
クト間の動的なメッセージ通信を解析するメッセージ通
信解析部6と、前記メッセージ通信解析部6により解析
された結果を格納するための第2解析結果記憶部16
と、前記メッセージ通信解析部6により解析された結果
を表示するための表示部20とにより構成される。次
に、図1のシステムの動作について説明する。
【0018】まず、前記メソッド起動/終了状況記録作
成部2について説明する。前記メソッド起動/終了状況
記録作成部2は、オブジェクト指向言語により記述され
たプログラムのインタプリタ上での動作中に、前記プロ
グラムを構成するオブジェクトの中で定義されたメソッ
ドそれぞれの起動あるいは終了に応答して、そのメソッ
ドの起動あるいは終了の記録を作成する。当該記録は、
前記プログラムの開始から終了まで、メソッドの起動あ
るいは終了が検出された順番に時系列的なデータとして
記録される。
成部2について説明する。前記メソッド起動/終了状況
記録作成部2は、オブジェクト指向言語により記述され
たプログラムのインタプリタ上での動作中に、前記プロ
グラムを構成するオブジェクトの中で定義されたメソッ
ドそれぞれの起動あるいは終了に応答して、そのメソッ
ドの起動あるいは終了の記録を作成する。当該記録は、
前記プログラムの開始から終了まで、メソッドの起動あ
るいは終了が検出された順番に時系列的なデータとして
記録される。
【0019】前記メソッドの起動に応答して記録される
メソッドの起動に関するデータは、起動されたメソッド
が定義されたオブジェクト名(すなわちメッセージ通信
を受信したオブジェクト名)、起動されたメソッド名、
および、引数に関するデータより構成される。前記引数
に関するデータは、引数があるときはその引数名であ
り、引数がないときは引数がないことを示すデータであ
る。前記引数がないことを示すデータは、例えばデータ
“nil“でもよい。前記3つのデータで、1つのレコ
ードを構成し、例えば、レコード内の第1の項目に前記
オブジェクト名を、第2の項目に前記メソッド名を、第
3の項目に前記引数に関するデータを記録してもよい。
メソッドの起動に関するデータは、起動されたメソッド
が定義されたオブジェクト名(すなわちメッセージ通信
を受信したオブジェクト名)、起動されたメソッド名、
および、引数に関するデータより構成される。前記引数
に関するデータは、引数があるときはその引数名であ
り、引数がないときは引数がないことを示すデータであ
る。前記引数がないことを示すデータは、例えばデータ
“nil“でもよい。前記3つのデータで、1つのレコ
ードを構成し、例えば、レコード内の第1の項目に前記
オブジェクト名を、第2の項目に前記メソッド名を、第
3の項目に前記引数に関するデータを記録してもよい。
【0020】前記メソッドの終了に応答して記録される
メソッドの終了に関するデータの記録は、前記メソッド
の起動に関するデータと同一のデータフォーマットを有
する。従って、同様に3つのデータで、1つのレコード
を構成し、例えば、レコード内の第1の項目にメソッド
の終了を意味する“nil“を、第2の項目にメソッド
の終了を意味する“#end“を、第3の項目に前記戻
り値に関するデータを記録してもよい。前記戻り値に関
するデータは、戻り値があるときはその戻り値であり、
戻り値がないときは戻り値がないことを示すデータであ
る。前記戻り値がないことを示すデータは、例えばデー
タ“nil“でもよい。
メソッドの終了に関するデータの記録は、前記メソッド
の起動に関するデータと同一のデータフォーマットを有
する。従って、同様に3つのデータで、1つのレコード
を構成し、例えば、レコード内の第1の項目にメソッド
の終了を意味する“nil“を、第2の項目にメソッド
の終了を意味する“#end“を、第3の項目に前記戻
り値に関するデータを記録してもよい。前記戻り値に関
するデータは、戻り値があるときはその戻り値であり、
戻り値がないときは戻り値がないことを示すデータであ
る。前記戻り値がないことを示すデータは、例えばデー
タ“nil“でもよい。
【0021】次に、各メソッドの起動と終了との状況を
動的に記録するためのアルゴリズムの一例を図3に示
す。前記メソッド起動/終了状況記録作成部2は、ステ
ップ1で、最初に起動されたメソッドの起動を記録し、
ステップ2に移り、以下ステップ8において、最初に起
動されたメソッドが終了したこと(すなわち後述のステ
ップ4において終了が検出されたメソッドを起動したメ
ソッドが存在しないこと)が検出されるまで、次に示す
監視、検出、記録に関するステップを繰り返す。 動作1)メソッド終了の監視、検出、記録に関するステ
ップ
動的に記録するためのアルゴリズムの一例を図3に示
す。前記メソッド起動/終了状況記録作成部2は、ステ
ップ1で、最初に起動されたメソッドの起動を記録し、
ステップ2に移り、以下ステップ8において、最初に起
動されたメソッドが終了したこと(すなわち後述のステ
ップ4において終了が検出されたメソッドを起動したメ
ソッドが存在しないこと)が検出されるまで、次に示す
監視、検出、記録に関するステップを繰り返す。 動作1)メソッド終了の監視、検出、記録に関するステ
ップ
【0022】前記ステップ2でメソッド起動の発生を監
視し、メソッドの起動が検出された場合、ステップ3に
移り、メソッドの起動について前述のデータを記録し、
ステップ2に戻る。 動作2)メソッド終了の監視、検出、記録に関するステ
ップ
視し、メソッドの起動が検出された場合、ステップ3に
移り、メソッドの起動について前述のデータを記録し、
ステップ2に戻る。 動作2)メソッド終了の監視、検出、記録に関するステ
ップ
【0023】次に、ステップ2でメソッドの起動が検出
されなかった場合、ステップ4に移りメソッド終了の発
生を監視し、メソッドの終了が検出された場合、ステッ
プ5に移り、戻り値の有無を検出し、戻り値があるとき
はステップ6に移り、メソッドの終了について前述のデ
ータを記録し、戻り値がないときはステップ7に移り、
メソッドの終了について前述のデータを記録し、ステッ
プ8を経てステップ2に戻る。以上の手順によりメソッ
ド起動/終了状況記録が作成される。表1は、図3のア
ルゴリズムによって記録されたデータフォーマットの一
例である。
されなかった場合、ステップ4に移りメソッド終了の発
生を監視し、メソッドの終了が検出された場合、ステッ
プ5に移り、戻り値の有無を検出し、戻り値があるとき
はステップ6に移り、メソッドの終了について前述のデ
ータを記録し、戻り値がないときはステップ7に移り、
メソッドの終了について前述のデータを記録し、ステッ
プ8を経てステップ2に戻る。以上の手順によりメソッ
ド起動/終了状況記録が作成される。表1は、図3のア
ルゴリズムによって記録されたデータフォーマットの一
例である。
【0024】
【表1】
【0025】iはレコード番号であり、jはレコード内
の項目番号である。同一のレコード番号を有する1組み
のデータは、前述のようなメソッドの起動の記録あるい
は終了の記録に対応し、レコード番号iはその発生順に
対応している。なお、表1における各項目は、前述した
データフォーマットの例と同一のものを示す。例えば、
レコード番号2,項目番号1のデータは、受信オブジェ
クト名がbObjであることを示し、レコード番号2,
項目番号2のデータは、起動されたメソッド名がbMe
sであることを示し、レコード番号2,項目番号3のデ
ータは、引数名がarg1であることを示している。レ
コード番号2のデータは、このデータがメソッドの終了
記録であり、戻り値はないことを示している。表1に示
すようなデータは、前記起動/終了状況記憶部12に格
納される。
の項目番号である。同一のレコード番号を有する1組み
のデータは、前述のようなメソッドの起動の記録あるい
は終了の記録に対応し、レコード番号iはその発生順に
対応している。なお、表1における各項目は、前述した
データフォーマットの例と同一のものを示す。例えば、
レコード番号2,項目番号1のデータは、受信オブジェ
クト名がbObjであることを示し、レコード番号2,
項目番号2のデータは、起動されたメソッド名がbMe
sであることを示し、レコード番号2,項目番号3のデ
ータは、引数名がarg1であることを示している。レ
コード番号2のデータは、このデータがメソッドの終了
記録であり、戻り値はないことを示している。表1に示
すようなデータは、前記起動/終了状況記憶部12に格
納される。
【0026】なお、メソッドの起動または終了を検出す
る部分は、メソッドの起動または終了に関連するインタ
ープリタの部分に連結させて構成してもよいし、メソッ
ドの起動または終了に関連して作動するデータ線あるい
は制御装置の部分に連結させて構成してもよい。
る部分は、メソッドの起動または終了に関連するインタ
ープリタの部分に連結させて構成してもよいし、メソッ
ドの起動または終了に関連して作動するデータ線あるい
は制御装置の部分に連結させて構成してもよい。
【0027】次に、メソッド実行履歴解析部4について
説明する。前記メソッド実行履歴解析部4は、前記起動
/終了状況記憶部12に格納されているメソッドの起動
/終了に関する記録を読み込み、当該記録を解析して、
メッセージ通信に関するデータを完成させる。すなわ
ち、1つのメッセージ通信に関するデータは、例えばメ
ッセージの送り手のオブジェクト名、メッセージの受け
手のオブジェクト名、メッセージ名、引数に関するデー
タおよび戻り値に関するデータにより構成されるが、そ
れらのデータは前記記録の中に散在しているので、前記
記録を解析して散在しているデータを1つに取り纏める
必要がある。なお、前述のようにメッセージ通信の内容
のうちメッセージ名は、メッセージの受け手のオブジェ
クト内で定義され、そのメッセージ通信により起動され
たメソッド名と同一のものである。
説明する。前記メソッド実行履歴解析部4は、前記起動
/終了状況記憶部12に格納されているメソッドの起動
/終了に関する記録を読み込み、当該記録を解析して、
メッセージ通信に関するデータを完成させる。すなわ
ち、1つのメッセージ通信に関するデータは、例えばメ
ッセージの送り手のオブジェクト名、メッセージの受け
手のオブジェクト名、メッセージ名、引数に関するデー
タおよび戻り値に関するデータにより構成されるが、そ
れらのデータは前記記録の中に散在しているので、前記
記録を解析して散在しているデータを1つに取り纏める
必要がある。なお、前述のようにメッセージ通信の内容
のうちメッセージ名は、メッセージの受け手のオブジェ
クト内で定義され、そのメッセージ通信により起動され
たメソッド名と同一のものである。
【0028】ここで、メッセージの受け手のオブジェク
ト名、メッセージ名、引数に関するデータは、メソッド
の起動に関する記録に含まれ、戻り値に関するデータは
メソッドの起動に関する記録に含まれる。
ト名、メッセージ名、引数に関するデータは、メソッド
の起動に関する記録に含まれ、戻り値に関するデータは
メソッドの起動に関する記録に含まれる。
【0029】また、メッセージの送り手のオブジェクト
名は、メソッドの起動および終了の時系列的関係の解析
により得られる。つまり、あるメソッドが起動された場
合、当該メソッドに関連するオブジェクトにメッセージ
を送信したオブジェクトは、図2を用いて前述したよう
なメッセージ通信の入れ子構造により、その時点でまだ
終了していないメソッドのうち最も遅く起動されたもの
を探索することにより特定される。
名は、メソッドの起動および終了の時系列的関係の解析
により得られる。つまり、あるメソッドが起動された場
合、当該メソッドに関連するオブジェクトにメッセージ
を送信したオブジェクトは、図2を用いて前述したよう
なメッセージ通信の入れ子構造により、その時点でまだ
終了していないメソッドのうち最も遅く起動されたもの
を探索することにより特定される。
【0030】次に、メソッドの実行履歴を解析するため
のアルゴリズムの一例を図4に示す。本手順は、2つの
主な動作からなる。1つは前記メソッドの起動に関する
データの読み込みに応答した、スタックへの当該読み込
んだデータの格納であり、他の1つは前記メソッドの終
了に関するデータの読み込みに応答した、当該読み込ん
だデータの配列への格納、ならびにスタックから配列へ
のデータの格納およびスタックから配列へ格納したデー
タのスタックからの削除(すなわちスタックポインタか
ら1を減ずること)である。
のアルゴリズムの一例を図4に示す。本手順は、2つの
主な動作からなる。1つは前記メソッドの起動に関する
データの読み込みに応答した、スタックへの当該読み込
んだデータの格納であり、他の1つは前記メソッドの終
了に関するデータの読み込みに応答した、当該読み込ん
だデータの配列への格納、ならびにスタックから配列へ
のデータの格納およびスタックから配列へ格納したデー
タのスタックからの削除(すなわちスタックポインタか
ら1を減ずること)である。
【0031】まず、当該メソッド実行履歴解析部4は、
ステップ11で前記スタックおよび配列を初期化する。
次に、ステップ12で、前記起動/終了状況記憶部12
に格納されている前記メソッドの起動または/終了に関
する記録から、前記レコード番号の順番に1レコード分
のデータを読み込む。次に、ステップ13で、データの
終了を判断し、データの終了でない場合、ステップ14
に移り、メソッドの起動に関する記録かどうかを検出す
る。メソッドの起動か終了かの判断は、例えばダータの
第2の項目がデータ”#end”かどうかを検出するこ
とによりなされる。
ステップ11で前記スタックおよび配列を初期化する。
次に、ステップ12で、前記起動/終了状況記憶部12
に格納されている前記メソッドの起動または/終了に関
する記録から、前記レコード番号の順番に1レコード分
のデータを読み込む。次に、ステップ13で、データの
終了を判断し、データの終了でない場合、ステップ14
に移り、メソッドの起動に関する記録かどうかを検出す
る。メソッドの起動か終了かの判断は、例えばダータの
第2の項目がデータ”#end”かどうかを検出するこ
とによりなされる。
【0032】以下、ステップ14の動作の結果、読み込
んだデータがメソッドの起動に関するデータの場合と、
メソッドの終了に関するデータの場合とに分けて説明す
る。 動作1)読み込んだデータがメソッドの起動に関するデ
ータの場合
んだデータがメソッドの起動に関するデータの場合と、
メソッドの終了に関するデータの場合とに分けて説明す
る。 動作1)読み込んだデータがメソッドの起動に関するデ
ータの場合
【0033】まず、ステップ15で、スタックポインタ
がスタックの先頭を差しているかどうかを検出する。ス
タックポインタがスタックの先頭を差していることは、
読み込んだデータがこの手順において始めて読み込まれ
たものであることと等価であり、この場合、このメソッ
ドを起動するトリガーとなったメッセージの送り手のオ
ブジェクト名は、図3の手順において記録されていない
ので、ステップ16に移り、発信オブジェクト名とし
て”SYSTEM”を保持する。
がスタックの先頭を差しているかどうかを検出する。ス
タックポインタがスタックの先頭を差していることは、
読み込んだデータがこの手順において始めて読み込まれ
たものであることと等価であり、この場合、このメソッ
ドを起動するトリガーとなったメッセージの送り手のオ
ブジェクト名は、図3の手順において記録されていない
ので、ステップ16に移り、発信オブジェクト名とし
て”SYSTEM”を保持する。
【0034】それ以外の場合すなわち第1番目のデータ
以外は、当該起動されたメソッドに関して、スタックの
スタックポインタが示す位置にこの動作1のループの以
前の実行により既に記録されている受信オブジェクトが
メッセージを発信していることになる。すなわち、前述
したように、その時点でまだ終了していないメソッドの
うち最も遅く起動されたものに関するオブジェクトが、
該当する発信オブジェクトであるが、起動したメソッド
に関するオブジェクトは後のステップ17の動作におい
てスタックに起動順に格納され、また、起動したメソッ
ドは遅く起動したものから順に終了するので、後述する
動作2の実行により、格納された順序と逆の順序でその
終了したメソッドに関するオブジェクト名がスタックよ
り外され、それによって、スタックポインタが示す位置
の受信オブジェクト名がその時点でまだ終了していない
メソッドに関するオブジェクトのうち最も遅く起動され
たオブジェクトを示す。従って、この場合、発信オブジ
ェクト名としてその受信オブジェクト名を保持する。
以外は、当該起動されたメソッドに関して、スタックの
スタックポインタが示す位置にこの動作1のループの以
前の実行により既に記録されている受信オブジェクトが
メッセージを発信していることになる。すなわち、前述
したように、その時点でまだ終了していないメソッドの
うち最も遅く起動されたものに関するオブジェクトが、
該当する発信オブジェクトであるが、起動したメソッド
に関するオブジェクトは後のステップ17の動作におい
てスタックに起動順に格納され、また、起動したメソッ
ドは遅く起動したものから順に終了するので、後述する
動作2の実行により、格納された順序と逆の順序でその
終了したメソッドに関するオブジェクト名がスタックよ
り外され、それによって、スタックポインタが示す位置
の受信オブジェクト名がその時点でまだ終了していない
メソッドに関するオブジェクトのうち最も遅く起動され
たオブジェクトを示す。従って、この場合、発信オブジ
ェクト名としてその受信オブジェクト名を保持する。
【0035】次に、ステップ16あるいはステップ17
の動作完了に応答して、ステップ18でスタックへのデ
ータ格納のためスタックポインタに1を加算し、ステッ
プ19に移る。ステップ19では、ステップ16あるい
はステップ17で保持した前記発信オブジェクト名、な
らびに読み込んだメソッドの起動に関するデータつま
り、受信オブジェクト名、メソッド名および引数に関す
るデータをスタックのスタックポインタが示す位置に格
納する。この動作により、スタックに、メソッドが起動
された順番にそのメソッドに関するオブジェクト名が格
納される。ただし、後述する動作2の実行により、終了
したメソッドに関するオブジェクト名はスタックより外
されている。なお、この時点で前記メッセージ通信に関
するデータセットのうち戻り値に関するデータ以外のデ
ータについては得られたことになる。そして、ステップ
12へ戻る。 動作2)読み込んだデータがメソッドの終了に関するデ
ータの場合
の動作完了に応答して、ステップ18でスタックへのデ
ータ格納のためスタックポインタに1を加算し、ステッ
プ19に移る。ステップ19では、ステップ16あるい
はステップ17で保持した前記発信オブジェクト名、な
らびに読み込んだメソッドの起動に関するデータつま
り、受信オブジェクト名、メソッド名および引数に関す
るデータをスタックのスタックポインタが示す位置に格
納する。この動作により、スタックに、メソッドが起動
された順番にそのメソッドに関するオブジェクト名が格
納される。ただし、後述する動作2の実行により、終了
したメソッドに関するオブジェクト名はスタックより外
されている。なお、この時点で前記メッセージ通信に関
するデータセットのうち戻り値に関するデータ以外のデ
ータについては得られたことになる。そして、ステップ
12へ戻る。 動作2)読み込んだデータがメソッドの終了に関するデ
ータの場合
【0036】前述のように、メソッドの終了に関する記
録が検出された場合、この受信オブジェクトに送信を行
ったオブジェクトは、スタックのスタックポインタが示
す位置に格納されている。従って、当該読み込んだメソ
ッドの終了に関するデータおよび当該スタックのスタッ
クポインタが示す位置に格納されているメソッドの起動
に関するデータにより、このメッセージ通信に関する1
組のデータが完成する。まず、ステップ20でスタック
のスタックポインタが示す位置に記録されている発信オ
ブジェクト名、受信オブジェクト名、メソッド名、引数
に関するデータを、ステップ21で、読み込んだ記録に
おける戻り値に関するデータを、配列のインデックス位
置に登録する。
録が検出された場合、この受信オブジェクトに送信を行
ったオブジェクトは、スタックのスタックポインタが示
す位置に格納されている。従って、当該読み込んだメソ
ッドの終了に関するデータおよび当該スタックのスタッ
クポインタが示す位置に格納されているメソッドの起動
に関するデータにより、このメッセージ通信に関する1
組のデータが完成する。まず、ステップ20でスタック
のスタックポインタが示す位置に記録されている発信オ
ブジェクト名、受信オブジェクト名、メソッド名、引数
に関するデータを、ステップ21で、読み込んだ記録に
おける戻り値に関するデータを、配列のインデックス位
置に登録する。
【0037】次に、ステップ22で次のメッセージ通信
に関する1組のデータの格納のために配列インデックス
に1を加算し、ステップ23でその時点でまだ終了して
いないメソッドのうち最も遅く起動されたものに関する
データの格納位置をスタックポインタが示すようにスタ
ックポインタから1を減ずる。なお、ステップ20とス
テップ21、また、ステップ22とステップ23は、そ
れぞれ順序が入れ替わっても構わない。そして、ステッ
プ12へ戻る。
に関する1組のデータの格納のために配列インデックス
に1を加算し、ステップ23でその時点でまだ終了して
いないメソッドのうち最も遅く起動されたものに関する
データの格納位置をスタックポインタが示すようにスタ
ックポインタから1を減ずる。なお、ステップ20とス
テップ21、また、ステップ22とステップ23は、そ
れぞれ順序が入れ替わっても構わない。そして、ステッ
プ12へ戻る。
【0038】以上の手順により、メソッド実行履歴の解
析結果すなわち1つのメッセージ通信に関するデータセ
ット(例えば送信オブジェクト名、受信オブジェクト
名、メソッド名、引数に関するデータ、戻り値に関する
データ)が得られる。表2は、図4のアルゴリズムによ
る解析の結果生成されるデータのフォーマットの一例を
示す図である。
析結果すなわち1つのメッセージ通信に関するデータセ
ット(例えば送信オブジェクト名、受信オブジェクト
名、メソッド名、引数に関するデータ、戻り値に関する
データ)が得られる。表2は、図4のアルゴリズムによ
る解析の結果生成されるデータのフォーマットの一例を
示す図である。
【0039】
【表2】
【0040】iはレコード番号であり、jはレコード内
の項目番号である。同一のレコード番号を有する1組み
のデータは、前述のような1つのメッセージ通信の記録
に対応し、レコード番号iはそのメッセージ通信が完了
した順に対応している。なお、表2における各項目は、
前述した各データに対応する。例えば、レコード番号
1,項目番号1のデータは、メッセージの送り手のオブ
ジェクト名がaObjであることを、レコード番号1,
項目番号2のデータは、メッセージの受け手のオブジェ
クト名がbObjであることを、レコード番号1,項目
番号3のデータは、メッセージ通信の内容すなわち起動
されたメソッド名がbMesであることを、レコード番
号1,項目番号4のデータは、引数はarg1sである
ことを、レコード番号1,項目番号5のデータは、戻り
値はret1であることを示している。そして、表2に
示すようなデータは、前記第1解析結果記憶部14に格
納される。
の項目番号である。同一のレコード番号を有する1組み
のデータは、前述のような1つのメッセージ通信の記録
に対応し、レコード番号iはそのメッセージ通信が完了
した順に対応している。なお、表2における各項目は、
前述した各データに対応する。例えば、レコード番号
1,項目番号1のデータは、メッセージの送り手のオブ
ジェクト名がaObjであることを、レコード番号1,
項目番号2のデータは、メッセージの受け手のオブジェ
クト名がbObjであることを、レコード番号1,項目
番号3のデータは、メッセージ通信の内容すなわち起動
されたメソッド名がbMesであることを、レコード番
号1,項目番号4のデータは、引数はarg1sである
ことを、レコード番号1,項目番号5のデータは、戻り
値はret1であることを示している。そして、表2に
示すようなデータは、前記第1解析結果記憶部14に格
納される。
【0041】なお、本実施例においては、データそのも
のにスタック動作を適用し、メソッドの終了の記録に応
答して、メッセージ通信データの配列への格納がなさ
れ、前記レコード番号iはメッセージ通信が完了した順
番に対応するが、その代わりに、メソッドの起動の記録
に応答して、予め戻り値以外のメッセージ通信データを
配列に格納しておき、後からメソッドの終了の記録に応
答して、関連する配列位置に当該戻り値を格納してもよ
い。これは、レコード番号にスタック動作を適用するこ
とで実現できる。この場合、前記レコード番号iはメッ
セージ通信が送信された順番に対応する。
のにスタック動作を適用し、メソッドの終了の記録に応
答して、メッセージ通信データの配列への格納がなさ
れ、前記レコード番号iはメッセージ通信が完了した順
番に対応するが、その代わりに、メソッドの起動の記録
に応答して、予め戻り値以外のメッセージ通信データを
配列に格納しておき、後からメソッドの終了の記録に応
答して、関連する配列位置に当該戻り値を格納してもよ
い。これは、レコード番号にスタック動作を適用するこ
とで実現できる。この場合、前記レコード番号iはメッ
セージ通信が送信された順番に対応する。
【0042】また、本手法において用いるスタックおよ
び配列の2つの記録手段は、当該メソッド実行履歴解析
部4に含まれていてもよいし、当該メソッド実行履歴解
析部4に連結された情報記憶媒体であってもよい。
び配列の2つの記録手段は、当該メソッド実行履歴解析
部4に含まれていてもよいし、当該メソッド実行履歴解
析部4に連結された情報記憶媒体であってもよい。
【0043】次に、メッセージ通信解析部6について説
明する。前記メッセージ通信解析部6は、前記第1解析
結果記憶部14に格納されている前記解析結果すなわち
メッセージ通信データを読み込み、メッセージ通信デー
タの解析を実行する。本実施例においては、メッセージ
通信データの解析例として、同一のメッセージ通信の発
生頻度集計の手順について図5に示す。
明する。前記メッセージ通信解析部6は、前記第1解析
結果記憶部14に格納されている前記解析結果すなわち
メッセージ通信データを読み込み、メッセージ通信デー
タの解析を実行する。本実施例においては、メッセージ
通信データの解析例として、同一のメッセージ通信の発
生頻度集計の手順について図5に示す。
【0044】まず、当該メソッド実行履歴解析部4は、
ステップ31で集計テーブルを初期化する。次に、ステ
ップ32で、前記第1解析結果記憶部14に格納されて
いるメッセージ通信データの記録から、前記1レコード
分のデータを読み込む。次に、ステップ33で、データ
の終了を判断し、データの終了でない場合、ステップ3
4に移る。ステップ34以下では、各メッセージ通信デ
ータのフィールドの生成および頻度の集計を実行する。
すなわち、送信オブジェクト名、受信オブジェクト名、
メソッド名、引数に関するデータおよび戻り値に関する
データをそれぞれ集計中の既存のフィールドと比較し、
すべてのデータについて一致するフィールドが存在する
場合はそのフィールドの計数値に1を加算し、それ以外
の場合は新しいフィールドを生成する。
ステップ31で集計テーブルを初期化する。次に、ステ
ップ32で、前記第1解析結果記憶部14に格納されて
いるメッセージ通信データの記録から、前記1レコード
分のデータを読み込む。次に、ステップ33で、データ
の終了を判断し、データの終了でない場合、ステップ3
4に移る。ステップ34以下では、各メッセージ通信デ
ータのフィールドの生成および頻度の集計を実行する。
すなわち、送信オブジェクト名、受信オブジェクト名、
メソッド名、引数に関するデータおよび戻り値に関する
データをそれぞれ集計中の既存のフィールドと比較し、
すべてのデータについて一致するフィールドが存在する
場合はそのフィールドの計数値に1を加算し、それ以外
の場合は新しいフィールドを生成する。
【0045】具体的には、ステップ34では発信オブジ
ェクト名を比較し、ステップ36では受信オブジェクト
名を比較し、ステップ38ではメソッド名を比較し、ス
テップ40では引数および戻り値に関するデータの組み
を比較し、すべて一致した場合はステップ42において
そのフィールドの計数値に1を加算する。
ェクト名を比較し、ステップ36では受信オブジェクト
名を比較し、ステップ38ではメソッド名を比較し、ス
テップ40では引数および戻り値に関するデータの組み
を比較し、すべて一致した場合はステップ42において
そのフィールドの計数値に1を加算する。
【0046】また、いずれかのステップで一致しなかっ
た場合は、ステップ35、ステップ37、ステップ39
またはステップ41において、一致しなかったそれぞれ
のステップまでのステップで一致したデータを有するフ
ィールドの位置に新たなフィールドを挿入して一致しな
かったデータを登録し、その計数値を1とする。
た場合は、ステップ35、ステップ37、ステップ39
またはステップ41において、一致しなかったそれぞれ
のステップまでのステップで一致したデータを有するフ
ィールドの位置に新たなフィールドを挿入して一致しな
かったデータを登録し、その計数値を1とする。
【0047】以上の手順により、各メッセージ通信(例
えば同一の送信オブジェクト名、受信オブジェクト名、
メソッド名、引数に関するデータ、戻り値に関するデー
タを有するもの)の頻度の集計結果が得られる。
えば同一の送信オブジェクト名、受信オブジェクト名、
メソッド名、引数に関するデータ、戻り値に関するデー
タを有するもの)の頻度の集計結果が得られる。
【0048】図6は、図5のアルゴリズムによる解析の
結果生成されるデータのフォーマットの一例を示す図で
ある。各メッセージ通信に対して発生頻度が記録されて
いる。また、図6のデータベースでは、辞書形式と呼ば
れるデータ構造を階層的に使用して構成されている。辞
書構造は検索キーとそれに対応する値の組からなってお
り、本データ構造では、さらにその中に辞書形式のデー
タ構造を入れ子にしている。ここで、第1の検索キーで
あるkey1は送信オブジェクト名であり、key2は
受信オブジェクト名であり、key3はメソッド名であ
り、key3は引数および戻り値に関するデータの組み
である。このようにすれば、このデータベースを用い
て、検索キーによる種々のデータ解析を実施することが
できる。もちろん、前記メッセージ通信解析結果のデー
タフォーマットは、これ以外のフォーマットを用いても
構わない。そして、前記解析結果は第2解析結果記憶部
16に格納される。
結果生成されるデータのフォーマットの一例を示す図で
ある。各メッセージ通信に対して発生頻度が記録されて
いる。また、図6のデータベースでは、辞書形式と呼ば
れるデータ構造を階層的に使用して構成されている。辞
書構造は検索キーとそれに対応する値の組からなってお
り、本データ構造では、さらにその中に辞書形式のデー
タ構造を入れ子にしている。ここで、第1の検索キーで
あるkey1は送信オブジェクト名であり、key2は
受信オブジェクト名であり、key3はメソッド名であ
り、key3は引数および戻り値に関するデータの組み
である。このようにすれば、このデータベースを用い
て、検索キーによる種々のデータ解析を実施することが
できる。もちろん、前記メッセージ通信解析結果のデー
タフォーマットは、これ以外のフォーマットを用いても
構わない。そして、前記解析結果は第2解析結果記憶部
16に格納される。
【0049】なお、メッセージ通信解析部6に、前記メ
ッセージ通信の集計以外の、例えば、前記次系列データ
を基にしたメッセージ通信間の従属関係に関する解析、
特定のオブジェクト間で転送されたデータに関する解
析、メッセージ通信と他の任意の事象の相関関係に関す
る解析等の適当な統計処理等を含ませてもよい。
ッセージ通信の集計以外の、例えば、前記次系列データ
を基にしたメッセージ通信間の従属関係に関する解析、
特定のオブジェクト間で転送されたデータに関する解
析、メッセージ通信と他の任意の事象の相関関係に関す
る解析等の適当な統計処理等を含ませてもよい。
【0050】次に、前述した各記憶部12、14、16
に格納されているデータは、適宜表示部20に表示され
る。さらに、関連するプリンターから出力され(図示せ
ず)、可搬用情報記憶媒体に複製され、他のシステムに
ネットワークを介して転送されてもよい。ここで、前記
起動/終了状況記憶部12、前記第1解析結果記憶部1
4および前記第2解析結果記憶部16は、任意の組み合
わせで共用されていてもよい。
に格納されているデータは、適宜表示部20に表示され
る。さらに、関連するプリンターから出力され(図示せ
ず)、可搬用情報記憶媒体に複製され、他のシステムに
ネットワークを介して転送されてもよい。ここで、前記
起動/終了状況記憶部12、前記第1解析結果記憶部1
4および前記第2解析結果記憶部16は、任意の組み合
わせで共用されていてもよい。
【0051】また、前記メソッド起動/終了状況記録作
成部2、前記メソッド実行履歴解析部4および前記メッ
セージ通信解析部6は、前記作成部2および前記履歴解
析部4、前記履歴解析部4および前記通信解析部6ある
いは前記作成部2、前記履歴解析部4および前記前記通
信解析部6が適宜合体されて構成されてもよい。
成部2、前記メソッド実行履歴解析部4および前記メッ
セージ通信解析部6は、前記作成部2および前記履歴解
析部4、前記履歴解析部4および前記通信解析部6ある
いは前記作成部2、前記履歴解析部4および前記前記通
信解析部6が適宜合体されて構成されてもよい。
【0052】以上の説明のように、本実施例はオブジェ
クト指向言語インタプリタ上で動作するプログラムに関
するメッセージ通信の解析について記述されているが、
オブジェクト指向言語コンパイラを用いて動作するプロ
グラムに関するメッセージ通信の解析についても適当な
変更を加えることにより適用可能である。例えば、メソ
ッドの起動および終了の検出/記録に関しては、各メソ
ッドの最初と最後にメッセージ通信の検出/記録のため
のトリガー手段を挿入し、その手段の実行に応答して当
該起動および終了に関する記録を実行する手段を当該プ
ログラムに連結してもよい。さらに、コンパイラを用い
たプログラムの解析に関しては、メソッドの起動または
終了に応答して検出されたメソッド名等はコンパイル時
にシンボル化されてもとの名前とは異なるシンボルにな
っているので、コンパイラによってコンパイル時に作成
されたシンボルテーブル(シンボル化された名前とシン
ボルとの対象表を含むもの)を用いて、コンパイラによ
ってシンボル化されたもとの名前を特定する手順を図3
の手順と図4の手順との間に挿入し、あるいは図3また
は図4の手順の中に挿入してもよい。また、本発明は上
述した各実施例に限定されるものではなく、その要旨を
逸脱しない範囲で、種々変形して実施することができ
る。
クト指向言語インタプリタ上で動作するプログラムに関
するメッセージ通信の解析について記述されているが、
オブジェクト指向言語コンパイラを用いて動作するプロ
グラムに関するメッセージ通信の解析についても適当な
変更を加えることにより適用可能である。例えば、メソ
ッドの起動および終了の検出/記録に関しては、各メソ
ッドの最初と最後にメッセージ通信の検出/記録のため
のトリガー手段を挿入し、その手段の実行に応答して当
該起動および終了に関する記録を実行する手段を当該プ
ログラムに連結してもよい。さらに、コンパイラを用い
たプログラムの解析に関しては、メソッドの起動または
終了に応答して検出されたメソッド名等はコンパイル時
にシンボル化されてもとの名前とは異なるシンボルにな
っているので、コンパイラによってコンパイル時に作成
されたシンボルテーブル(シンボル化された名前とシン
ボルとの対象表を含むもの)を用いて、コンパイラによ
ってシンボル化されたもとの名前を特定する手順を図3
の手順と図4の手順との間に挿入し、あるいは図3また
は図4の手順の中に挿入してもよい。また、本発明は上
述した各実施例に限定されるものではなく、その要旨を
逸脱しない範囲で、種々変形して実施することができ
る。
【0053】
【発明の効果】以上説明したように、本発明によれば、
オブジェクト指向言語によって作成されたプログラムの
メッセージ通信を動的に記録し、プログラムの解析を行
うことが可能となる。従って、そのようなプログラムの
テスト/デバッグを容易に行うことができ、ソフトウェ
ア開発における工数の大幅削減などの開発の効率化を図
ることができる。
オブジェクト指向言語によって作成されたプログラムの
メッセージ通信を動的に記録し、プログラムの解析を行
うことが可能となる。従って、そのようなプログラムの
テスト/デバッグを容易に行うことができ、ソフトウェ
ア開発における工数の大幅削減などの開発の効率化を図
ることができる。
【図1】本発明の一実施例に係るプログラム解析システ
ムの構成を示すブロック図である。
ムの構成を示すブロック図である。
【図2】オブジェクト指向言語におけるオブジェクト間
のメッセージ通信の一例を示す図。
のメッセージ通信の一例を示す図。
【図3】各メソッドの起動と終了との状況を動的に記録
するためのアルゴリズムである。
するためのアルゴリズムである。
【図4】メソッドの実行履歴を解析するためのアルゴリ
ズムである。
ズムである。
【図5】各オブジェクト間のメッセージ通信を解析する
ためのアルゴリズムである。
ためのアルゴリズムである。
【図6】図6のアルゴリズムによる解析の結果生成され
るデータのフォーマットを示す図である。
るデータのフォーマットを示す図である。
1…プログラム解析システム、 2…メソッド起動/終了状況記録作成部、 4…メソッド実行履歴解析部、 6…メッセージ通信解析部、 12…起動/終了状況記憶部、 14…第1解析結果記憶部、 16…第2解析結果記憶部、 20…表示部。
───────────────────────────────────────────────────── フロントページの続き (58)調査した分野(Int.Cl.7,DB名) G06F 11/28 - 11/36
Claims (5)
- 【請求項1】或るオブジェクトが或る処理の実行中に所
望のオブジェクトに対し、該所望のオブジェクトに指示
することによってのみ実行可能な所望の処理の起動を指
示する第1のメッセージを送信し、該所望のオブジェク
トが該或るオブジェクトに対し、該所望の処理の実行終
了を通知する第2のメッセージを返信することによって
次々と処理が進められるように記述されたプログラムを
解析するプログラム解析方法であって、 前記プログラムの動作時に個々の前記処理の起動または
実行終了が発生する毎に、起動を指示する前記第1のメ
ッセージを受信した受信オブジェクトを示す名称、起動
された該処理を示す名称、および起動された該処理につ
いての引数に関するデータを含む第1の情報、または前
記第2のメッセージが実行終了を通知する処理について
の戻り値に関するデータを含む第2の情報を、それらの
発生順を認識できるように記録し、 前記第1および第2の情報の記録をその発生順に辿って
初めて出現する前記第2の情報に対して、それまでの発
生順で最後に出現した前記第1の情報を、対になるもの
として特定し、それら特定された第1および第2の情報
を前記記録から除外した場合について同一の基準によっ
て他の対になる第1および第2の情報を特定すること
を、繰り返し行うことによって、記録されたすべての前
記第1および第2の情報について、対になる第1および
第2の情報同士を特定し、 特定された前記対になる第1および第2の情報の各々に
ついて、前記第1および第2の情報の記録における当該
第1の情報までの発生順のうちに出現した他の第1の情
報であって対になる他の第2の情報が未だ出現しないも
ののうち最後に出現したものに含まれるオブジェクト
を、当該前記第1の情報に含まれる受信オブジェクトに
対して前記第1のメッセージを送信した送信オブジェク
トとして特定し、 各々の前記対になる第1および第2の情報における前記
受信オブジェクトと前記送信オブジェクトとの間でなさ
れたメッセージ通信に関する情報として、該送信オブジ
ェクトを示す名称、該受信オブジェクトを示す名称、起
動された処理を示す名称、ならびに該起動された処理に
ついての引数に関するデータおよび戻り値に関するデー
タを含む情報を作成することを特徴とするプログラム解
析方法。 - 【請求項2】作成された前記メッセージ通信に関する情
報の集合に基づいて前記メッセージ通信の解析を行うこ
とを特徴とする請求項1に記載のプログラム解析方法。 - 【請求項3】前記解析は、前記メッセージ通信に関する
統計解析であることを特徴とする請求項2に記載のプロ
グラム解析方法。 - 【請求項4】前記統計解析による解析結果は、同一の内
容を有するメッセージ通信の頻度集計であることを特徴
とする請求項3に記載のプログラム解析方法。 - 【請求項5】或るオブジェクトが或る処理の実行中に所
望のオブジェクトに対し、該所望のオブジェクトに指示
することによってのみ実行可能な所望の処理の起動を指
示する第1のメッセージを送信し、該所望のオブジェク
トが該或るオブジェクトに対し、該所望の処理の実行終
了を通知する第2のメッセージを返信することによって
次々と処理が進められるように記述されたプログラムを
解析するプログラム解析システムであって、 前記プログラムの動作時に個々の前記処理の起動または
実行終了が発生する毎に、起動を指示する前記第1のメ
ッセージを受信した受信オブジェクトを示す名称、起動
された該処理を示す名称、および起動された該処理につ
いての引数に関するデータを含む第1の情報、または前
記第2のメッセージが実行終了を通知する処理について
の戻り値に関するデータを含む第2の情報を、それらの
発生順を認識できるように記録する手段と、 前記第1および第2の情報の記録をその発生順に辿って
初めて出現する前記第2の情報に対して、それまでの発
生順で最後に出現した前記第1の情報を、対になるもの
として特定し、それら特定された第1および第2の情報
を前記記録から除外した場合について同一の基準によっ
て他の対になる第1および第2の情報を特定すること
を、繰り返し行うことによって、記録されたすべての前
記第1および第2の情報について、対になる第1および
第2の情報同士を特定する手段と、特定された前記対に
なる第1および第2の情報の各々について、前記第1お
よび第2の情報の記録における当該第1の情報までの発
生順のうちに出現した他の第1の情報であって対になる
他の第2の情報が未だ出現しないもののうち最後に出現
したものに含まれるオブジェクトを、当該前記第1の情
報に含まれる受信オブジェクトに対して前記第1のメッ
セージを送信した送信オブジェクトとして特定する手段
と、 各々の前記対になる第1および第2の情報における前記
受信オブジェクトと前記送信オブジェクトとの間でなさ
れたメッセージ通信に関する情報として、該送信オブジ
ェクトを示す名称、該受信オブジェクトを示す名称、起
動された処理を示す名称、ならびに該起動された処理に
ついての引数に関するデータおよび戻り値に関するデー
タを含む情報を作成する手段とを備えたことを特徴とす
るプログラム解析システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31172192A JP3199876B2 (ja) | 1992-11-20 | 1992-11-20 | プログラム解析システムおよび方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31172192A JP3199876B2 (ja) | 1992-11-20 | 1992-11-20 | プログラム解析システムおよび方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH06161819A JPH06161819A (ja) | 1994-06-10 |
JP3199876B2 true JP3199876B2 (ja) | 2001-08-20 |
Family
ID=18020677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP31172192A Expired - Fee Related JP3199876B2 (ja) | 1992-11-20 | 1992-11-20 | プログラム解析システムおよび方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3199876B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102608056B1 (ko) * | 2021-11-17 | 2023-11-29 | 전재권 | 전도식 수문 작동 시스템 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
JP2006018477A (ja) * | 2004-06-30 | 2006-01-19 | Canon Software Inc | シーケンス情報生成装置およびシーケンス情報生成方法およびプログラムおよび記録媒体 |
KR101401296B1 (ko) * | 2012-10-04 | 2014-05-29 | 한국항공우주연구원 | 메시지 로깅 기반 프로그램 테스팅 시스템 및 방법 |
JP7082284B2 (ja) * | 2018-08-07 | 2022-06-08 | 富士通株式会社 | 分析支援方法および分析支援プログラム |
-
1992
- 1992-11-20 JP JP31172192A patent/JP3199876B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102608056B1 (ko) * | 2021-11-17 | 2023-11-29 | 전재권 | 전도식 수문 작동 시스템 |
Also Published As
Publication number | Publication date |
---|---|
JPH06161819A (ja) | 1994-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11822919B2 (en) | Auto-generation of API documentation via implementation-neutral analysis of API traffic | |
US7996853B2 (en) | Method and apparatus for correlation of events in a distributed multi-system computing environment | |
US7739282B1 (en) | Method and system for tracking client software use | |
US5574854A (en) | Method and system for simulating the execution of a computer program | |
US6742143B2 (en) | Method and apparatus for analyzing performance of data processing system | |
US20070083854A1 (en) | Testing usability of a software program | |
US20150220421A1 (en) | System and Method for Providing Runtime Diagnostics of Executing Applications | |
US10528456B2 (en) | Determining idle testing periods | |
US11436133B2 (en) | Comparable user interface object identifications | |
US10509719B2 (en) | Automatic regression identification | |
WO2016093803A1 (en) | Separating test verifications from test executions | |
JP3199876B2 (ja) | プログラム解析システムおよび方法 | |
CN114416481A (zh) | 日志分析方法、装置、设备及存储介质 | |
CN114048099A (zh) | Java应用监控方法及装置、存储介质及电子设备 | |
JP3897897B2 (ja) | ネットワークコンピューティング環境におけるトラブルシューティング装置及びトラブルシューティング方法並びにトラブルシューティングプログラムを記録したコンピュータ読取可能な記録媒体 | |
US20060136877A1 (en) | Method, system and program product for capturing a semantic level state of a program | |
US7653742B1 (en) | Defining and detecting network application business activities | |
CN115757175A (zh) | 一种交易日志文件处理方法及装置 | |
EP2587380B1 (en) | Runtime environment and method for non-invasive monitoring of software applications | |
US20050122336A1 (en) | Information processing system, information processor for information registration, information processor for information retrieval, information processing method for information registration, and information processing method for information retrieval, program, and recording medium | |
US20040015742A1 (en) | Method and system for allowing customization of remote data collection in the event of a system error | |
US10824532B2 (en) | Dump analysis generation | |
US20030177413A1 (en) | Versioning and replaying performance tuning projects | |
JP2009134535A (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラム | |
CA2065521A1 (en) | Extensible event-action system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |