(57)【要約】      （修正有）【課題】メソッドの呼び出し関係のリストアップにおいて、呼び出し回数の多いメソッドリストをユーザのアクセスしやすい位置に表示させる。【解決手段】ソースコード１２１に示されるクラスＡのメソッドFuncAの実行により、例えば、クラスＢのFuncBが呼び出される場合、クラスＡのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル５２−１において、呼び出し先「B::FuncB()」の呼び出した回数が１回増加され、クラスＢのFuncB()に関連付けられたメソッド呼び出し元記憶テーブル５１において、呼び出し元「A::FuncA()」の回数が１回増加される。これにより、クラスＡのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル５２−１、およびクラスＢのFuncBに関連付けられたメソッド呼び出し元記憶テーブル５１が更新される。メソッド参照表示部は呼び出された回数に基づいて多いメソッド順にリストを生成し表示する。【選択図】図４
2005327036.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードの表示を制御する情報処理装置において、
前記ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、前記第２のメソッドのクラスを取得するクラス情報取得手段と、
前記クラス情報取得手段により取得された前記クラス毎に、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録手段と、
前記ソフトウェアを構成する前記第１のメソッドのソースコードが表示され、前記第１のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記呼び出し情報登録手段により登録された前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報に基づいて、前記第１のメソッドから呼び出される前記第２のメソッドのリスト表示を制御する表示制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記ソフトウェアを構成する前記第２のメソッドのソースコードが表示され、前記第２のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記表示制御手段は、前記呼び出し情報登録手段により登録された前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報に基づいて、前記第２メソッドを呼び出す前記第１のメソッドのリスト表示を、さらに制御する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報は、前記第１のメソッドが前記第２のメソッドを呼び出した呼び出し回数であり、
前記表示制御手段は、前記第１のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記第２のメソッドの前記呼び出し回数の多いクラス順に、前記第１のメソッドから呼び出される前記第２のメソッドのリスト表示を制御し、
前記第２のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記第２のメソッドの呼び出し回数の多い順に、前記第２メソッドを呼び出す前記第１のメソッドのリスト表示を制御する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記呼び出し情報登録手段は、
前記第１のメソッドに関連付けて、前記クラス情報取得手段により取得された前記クラス毎に、かつ、前記第１のメソッドからの前記第２のメソッドの呼び出し毎に、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する第１の登録手段と、
前記クラス情報取得手段により取得された前記クラスの前記第２のメソッドに関連付けて、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する第２の登録手段と
を備えることを特徴とする請求項１に記載の情報処理装置。
【請求項５】
ソフトウェアのソースコードの表示を制御する情報処理装置の情報処理方法において、
前記ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、前記第２のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第１のメソッドのソースコードが表示され、前記第１のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報に基づいて、前記第１のメソッドから呼び出される前記第２のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とする情報処理方法。
【請求項６】
ソフトウェアのソースコードの表示を制御する処理をコンピュータに行わせるプログラムが記録されている記録媒体であって、
前記ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、前記第２のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第１のメソッドのソースコードが表示され、前記第１のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報に基づいて、前記第１のメソッドから呼び出される前記第２のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とするプログラムが記録されている記録媒体。
【請求項７】
ソフトウェアのソースコードの表示を制御する処理をコンピュータに行わせるプログラムであって、
前記ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、前記第２のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第１のメソッドのソースコードが表示され、前記第１のメソッドのソースコード上において、前記第２のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第１のメソッドからの前記第２のメソッドの呼び出し統計情報に基づいて、前記第１のメソッドから呼び出される前記第２のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および方法、記録媒体、並びにプログラムに関し、特に、オブジェクト指向言語を用いたソフトウェア開発環境における操作性を向上することができるようにした情報処理装置および方法、記録媒体、並びにプログラムに関する。
【背景技術】
【０００２】
ソフトウェアの開発作業を支援することを目的として、特許文献１に示されるように、開発されたソフトウェアのソースコードで定義されたオブジェクト、クラスまたは関数などの定義を簡単に参照する機能が、さまざまなソフトウェアプログラミング環境で提供されている。
【０００３】
例えば、関数（メソッド）の呼び出し関係をリストアップし、呼び出し先、または呼び出し元の関数の定義を簡単に参照し、修正できるようなツール機能としては、Visual Ｃ＋＋（登録商標）開発環境において、ソースブラウザ機能がある。このソースブラウザ機能により、あるＣ＋＋の関数が他のどの関数から呼び出されているか、または、ある関数呼び出しの関数の定義はどの関数の何行目にあるかといったことが画面上に表示されるので、ユーザは、即座に確認し、それらに基づいて、ソフトウェアの修正などを行っていた。
【０００４】
また、Smalltalk（スモールトーク）言語環境においては、システムブラウザが現在参照しているメソッド呼び出し元メソッドのブラウザや、呼び出し先メソッドのブラウザを簡単に表示させることができるようになっている。
【０００５】
【特許文献１】特開平６−１２４２００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、このオブジェクト指向言語と呼ばれるＣ＋＋やSmalltalkにおいて、仮想（virtual）関数やメソッドの呼び出し先は、対象となるオブジェクトを動的に変更することで、動的に決定されるようになっている。したがって、ユーザ（プログラマ）が特定の関数名やメソッド名で呼び出しを記述しても、そこで実際に呼び出される関数やメソッドは、対象となるオブジェクトのクラスが決まるまで、決定されない。
【０００７】
すなわち、対象となるオブジェクトは、実行時に動的に変更することが可能なため、このような関数と関数、あるいは、メソッドとメソッドのリンクは、動的リンクまたは遅延結合と呼ばれ、ソフトウェアのインタフェースと実装の分離を実行時に可能とさせることができる。したがって、例えば、関数名やメソッド名に同じものを用いることにより、さまざまなクラスのインタフェースを統一させ、ソフトウェアの再利用を図ることができる。しかしながら、その半面、同一の関数名やメソッド名を持つ関数やメソッドが同一プログラム内、同一システム内に多数存在するような性質をソフトウェアが持つようになってしまう。
【０００８】
以上により、上述したソースブラウザツールやブラウザを用いてしまうと、同一の関数名やメソッド名がリストに連なってしまうだけでなく、実際に呼び出されることがない関数やメソッドまでリストに表示されてしまい、ユーザが目的とする関数やメソッドが見つけ出し難い課題があった。
【０００９】
本発明は、このような状況に鑑みてなされたものであり、ソフトウェア開発環境における操作性を向上することができるようにするものである。
【課題を解決するための手段】
【００１０】
本発明の情報処理装置は、ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、第２のメソッドのクラスを取得するクラス情報取得手段と、クラス情報取得手段により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録手段と、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、呼び出し情報登録手段により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示を制御する表示制御手段とを備えることを特徴とする。
【００１１】
ソフトウェアを構成する第２のメソッドのソースコードが表示され、第２のメソッドのソースコード上において、第２のメソッドが選択された場合、表示制御手段は、呼び出し情報登録手段により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第２メソッドを呼び出す第１のメソッドのリスト表示を、さらに制御するようにすることができる。
【００１２】
第１のメソッドからの第２のメソッドの呼び出し統計情報は、第１のメソッドが第２のメソッドを呼び出した呼び出し回数であり、表示制御手段は、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、第２のメソッドの呼び出し回数の多いクラス順に、第１のメソッドから呼び出される第２のメソッドのリスト表示を制御し、第２のメソッドのソースコード上において、第２のメソッドが選択された場合、第２のメソッドの呼び出し回数の多い順に、第２メソッドを呼び出す第１のメソッドのリスト表示を制御するようにすることができる。
【００１３】
呼び出し情報登録手段は、第１のメソッドに関連付けて、クラス情報取得手段により取得されたクラス毎に、かつ、第１のメソッドからの第２のメソッドの呼び出し毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する第１の登録手段と、クラス情報取得手段により取得されたクラスの第２のメソッドに関連付けて、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する第２の登録手段とを備えるようにすることができる。
【００１４】
本発明の情報処理方法は、ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、第２のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
【００１５】
本発明のプログラムが記録されている記録媒体は、ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、第２のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
【００１６】
本発明のプログラムは、ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、第２のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
【００１７】
本発明においては、ソフトウェアを構成する第１のメソッドの実行中に、第２のメソッドが呼び出される場合、第２のメソッドのクラスが取得され、取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報が登録される。そして、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示が制御される。
【発明の効果】
【００１８】
本発明によれば、ソフトウェア開発環境における操作性を向上することができる。また、本発明によれば、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することができる。
【発明を実施するための最良の形態】
【００１９】
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。したがって、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
【００２０】
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
【００２１】
請求項１に記載の情報処理装置（例えば、図１の情報処理装置１）は、ソフトウェアを構成する第１のメソッド（例えば、図７の第１行目のクラスＢのメソッドFuncB（））の実行中に、第２のメソッド（例えば、図７の第３行目のメソッドFuncB（））が呼び出される場合、第２のメソッドのクラス（例えば、図７の第４行目のobj2（fp）により決まるクラス）を取得するクラス情報取得手段（例えば、図３の対象クラス取得部１０２）と、クラス情報取得手段により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報（例えば、図４のメソッド呼び出し先記憶テーブル５２−２）を登録する呼び出し情報登録手段（例えば、図３の呼び出し先テーブル更新部１０４）と、ソフトウェアを構成する第１のメソッドのソースコード（例えば、図１１のクラスＢのメソッドFuncB（））が表示され、第１のメソッドのソースコード上において、第２のメソッド（例えば、メソッドFuncC（））が選択された場合、呼び出し情報登録手段により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示（例えば、図１２のメソッドリスト表示２５１）を制御する表示制御手段（例えば、図９のメソッド参照表示制御部２０１）とを備えることを特徴とする。
【００２２】
請求項２に記載の情報処理装置は、ソフトウェアを構成する第２のメソッドのソースコード（例えば、図１４のクラスＢのメソッドFuncB（））が表示され、第２のメソッドのソースコード上において、第２のメソッド（例えば、図１４のクラスＢのメソッドFuncB（））が選択された場合、表示制御手段は、呼び出し情報登録手段により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報（例えば、図４のメソッド呼び出し元記憶テーブル５１）に基づいて、第２メソッドを呼び出す第１のメソッドのリスト表示（例えば、図１５のメソッドリスト表示２９１）を、さらに制御することを特徴とする。
【００２３】
請求項４に記載の情報処理装置は、呼び出し情報登録手段は、第１のメソッド（例えば、図４のクラスＢのメソッドFuncB（））に関連付けて、クラス情報取得手段により取得されたクラス（例えば、図４のクラスＡ，クラスＤ，クラスＦ，クラスＥ）毎に、かつ、第１のメソッドからの第２のメソッドの呼び出し（例えば、図４のFuncB（）,FuncC（））毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報（例えば、図４のメソッド呼び出し先記憶テーブル５２−２）を登録する第１の登録手段と、クラス情報取得手段により取得されたクラスの第２のメソッド（例えば、図４のクラスＢのメソッドFuncB）に関連付けて、第１のメソッドからの第２のメソッドの呼び出し統計情報（例えば、図４のメソッド呼び出し元記憶テーブル５１）を登録する第２の登録手段（例えば、図３の呼び出し元テーブル更新部１０５）とを備えるようにすることができる。
【００２４】
請求項５に記載の情報処理方法は、ソフトウェアを構成する第１のメソッド（例えば、図７の第１行目のクラスＢのメソッドFuncB（））の実行中に、第２のメソッド（例えば、図７の第３行目のメソッドFuncB（））が呼び出される場合、第２のメソッドのクラス（例えば、図７の第４行目のobj2（fp） により決まるクラス）を取得するクラス情報取得ステップ（例えば、図８のステップＳ１２）と、クラス情報取得ステップの処理により取得されたクラス毎に、第１のメソッドからの第２のメソッドの呼び出し統計情報（例えば、図４のメソッド呼び出し先記憶テーブル５２−２）を登録する呼び出し情報登録ステップ（例えば、図８のステップＳ１６）と、ソフトウェアを構成する第１のメソッドのソースコードが表示され、第１のメソッドのソースコード上において、第２のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第１のメソッドからの第２のメソッドの呼び出し統計情報に基づいて、第１のメソッドから呼び出される第２のメソッドのリスト表示（例えば、図１２のメソッドリスト表示２５１）を制御する表示制御ステップ（例えば、図１０のステップＳ３３）とを含むことを特徴とする。
【００２５】
なお、請求項６に記載の記録媒体および請求項７に記載のプログラムは、上述した請求項５に記載の情報処理方法と基本的に同様の構成であるため、繰り返しになるのでその説明は省略する。
【００２６】
以下、図を参照して本発明の実施の形態について説明する。
【００２７】
図１は、本発明を適用した情報処理装置１のハードウェア構成例を表している。図１においては、情報処理装置１は、例えば、コンピュータをベースに構成されている。
【００２８】
ＣＰＵ（Central Processing Unit）１１は、ＲＯＭ（Read Only Memory）１２に記憶されているプログラム、または記憶部１８からＲＡＭ（Random Access Memory）１３にロードされたプログラムに従って各種の処理を実行する。ＲＡＭ１３にはまた、ＣＰＵ１１が各種の処理を実行する上において必要なデータなども適宜記憶される。
【００２９】
ＣＰＵ１１、ＲＯＭ１２、およびＲＡＭ１３は、バス１４を介して相互に接続されている。このバス１４にはまた、入出力インタフェース１５も接続されている。
【００３０】
入出力インタフェース１５には、キーボード、マウスなどよりなる入力部１６、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）などよりなるディスプレイ、並びにスピーカなどよりなる出力部１７、ハードディスクなどより構成される記憶部１８、モデム、ターミナルアダプタなどより構成される通信部１９が接続されている。通信部１９は、図示せぬネットワークを介しての通信処理を行う。
【００３１】
入出力インタフェース１５にはまた、必要に応じてドライブ２０が接続され、磁気ディスク２１、光ディスク２２、光磁気ディスク２３、或いは半導体メモリ２４などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部１８にインストールされる。
【００３２】
すなわち、ＣＰＵ１１が、各種のプログラムを実行することにより、図１のコンピュータは、後述する各種の処理を実行する。この場合、プログラムは、図１のコンピュータに内蔵されている記録媒体としてのＲＯＭ１２や記憶部１８に予め記録しておくことができる。あるいはまた、プログラムは、磁気ディスク２１や、光ディスク２２、光磁気ディスク２３、半導体メモリ２４などのリムーバブル記録媒体に、一時的あるいは永続的に格納（記録）し、いわゆるパッケージソフトウェアとして提供することができる。
【００３３】
なお、プログラムは、上述したようなリムーバブル記録媒体から図１のコンピュータにインストールする他、ダウンロードサイトから、デジタル衛星放送用の人工衛星を介して、図１のコンピュータに無線で転送したり、ＬＡＮ（Local Area Network）、図示せぬネットワークを介して、図１のコンピュータに有線で転送してインストールすることもできる。
【００３４】
ここで、情報処理装置１は、ユーザによりオブジェクト指向プログラミング言語によって記述されたソフトウェアの開発が行われるソフトウェア開発環境を有している。以下、ユーザにより開発されたソフトウェアを、開発ソフトウェアと称する。このソフトウェア開発環境においては、例えば、オブジェクト指向プログラミング言語として、コンパイラで実現されるＣ＋＋言語が用いられるものとする。
【００３５】
オブジェクト指向プログラミングは、関連するデータの集合と、それに対する手続き（メソッド）を「オブジェクト」と呼ばれる一つのまとまりとして管理し、その組み合わせによってソフトウェアを構築するプログラミングである。メソッドは、オブジェクト指向プログラミングにおいて、各オブジェクトが持っている自身に対する操作（手続き）であり、以降、その操作に対応する関数も含めて、メソッドと称する。
【００３６】
また、オブジェクト指向プログラミングにおいて、オブジェクトは、同種のオブジェクトをまとめて扱うためのクラスにより定義されており、実行時にメソッド呼び出しの対象となるオブジェクトを動的に変更させることが可能なため、さまざまなクラスのインタフェースを統一させ、ソフトウェアの再利用を図る目的により、同一プログラム内や同一記憶部１８内には、同一のメソッド名（関数名）を持つメソッド（関数）が多数記憶されている。
【００３７】
図２は、図１の記憶部１８の構成例を示すブロック図である。この記憶部１８には、上述したように、オブジェクト指向プログラミング言語によるソフトウェアの開発に用いられるメソッドに関する情報や、ソフトウェアに用いられるメソッドの情報を収集、あるいは参照するためのプログラムなどが記憶されている。なお、記憶部１８には、図示は省略するが、Ｃ＋＋言語をコンパイラするためのコンパイラプログラムも記憶されている。
【００３８】
図２の例の場合、記憶部１８は、メソッド定義記憶部４２、メソッド呼び出し統計情報記憶部４３、メソッド呼び出し統計情報収集プログラム記憶部４４、および、メソッド参照ブラウザ表示制御プログラム記憶部４５により構成されている。
【００３９】
メソッド定義記憶部４２には、ソフトウェア開発において用いられるメソッド（関数）の定義情報が記憶されている。例えば、クラスＡのメソッド名ａのメソッドの定義情報、クラスＢのメソッド名ａのメソッドの定義情報、クラスＢのメソッド名ｂのメソッドの定義情報というように、クラスおよびメソッド名毎のメソッドの定義情報が記憶されている。
【００４０】
メソッド呼び出し統計情報記憶部４３には、メソッド定義記憶部４２にクラスおよびメソッド名毎に記憶されているメソッドの定義情報に関連付けられて、メソッド呼び出し元記憶テーブル５１およびメソッド呼び出し先記憶テーブル５２からなるメソッド呼び出しの統計情報が記憶されている。
【００４１】
メソッド呼び出し元記憶テーブル５１は、メソッド定義記憶部４２に記憶されているメソッドの定義情報が対応するメソッドが、どの呼び出し元から（すなわち、どのクラスに属するどのメソッド名のメソッドから）何回呼び出されているかなどのメソッド呼び出し元に関する情報で構成される。メソッド呼び出し先記憶テーブル５２は、メソッド定義記憶部４２に記憶されているメソッドの定義情報が対応するメソッドから呼び出されるメソッドは、どのクラスのメソッドで、何回呼び出しているかなどのメソッド呼び出し先に関する情報で構成される。
【００４２】
メソッド呼び出し統計情報収集プログラム記憶部４４には、情報処理装置１において開発ソフトウェアが実行される度に起動される、メソッド呼び出しの統計情報を収集する処理を行うメソッド呼び出し統計情報収集プログラムが記憶されている。ＣＰＵ１１は、メソッド呼び出し統計情報収集プログラム記憶部４４から、メソッド呼び出し統計情報収集プログラムをＲＡＭ１３にロードすることにより、メソッド呼び出し統計情報収集処理を実行する。
【００４３】
メソッド参照ブラウザ表示制御プログラム記憶部４５には、情報処理装置１において開発ソフトウェアを構成するメソッドを参照するためのブラウザを表示する処理を行うメソッド参照ブラウザ表示制御プログラムが記憶されている。ＣＰＵ１１は、メソッド参照ブラウザ表示制御プログラム記憶部４５から、メソッド参照ブラウザ表示制御プログラムをＲＡＭ１３にロードすることにより、メソッド参照ブラウザ表示制御処理を実行する。
【００４４】
図３は、情報処理装置１の機能構成の一例を示すブロック図である。図３に示される機能ブロックは、情報処理装置１のＣＰＵ１１により、メソッド呼び出し統計情報収集プログラム記憶部４４のメソッド呼び出し統計情報収集プログラムが実行されることで実現される。
【００４５】
統計情報収集制御部１０１は、開発ソフトウェアが実行され、メソッドが呼び出される場合に、開発ソフトウェアにおいて現在実行中のメソッド（以降、アクティブメソッドとも称する）のクラスおよびメソッド名を取得し、対象クラス取得部１０２、呼び出しメソッド情報取得部１０３、呼び出し先テーブル更新部１０４、および呼び出し元テーブル更新部１０５の各処理を制御する。
【００４６】
対象クラス取得部１０２は、統計情報収集制御部１０１の制御のもと、アクティブメソッドから呼び出されるメソッド（以降、呼び出しメソッドとも称する）の対象クラスを取得する。すなわち、開発ソフトウェアの実行によりメソッドを呼び出すための変数の値が求められるので、対象クラス取得部１０２は、求められた変数の値に基づいて、呼び出しメソッドの対象クラスを取得し、取得した対象クラスを、統計情報収集制御部１０１に供給する。呼び出しメソッド情報取得部１０３は、呼び出しメソッドのメソッド名などの情報を取得し、取得したメソッド名を、統計情報収集制御部１０１に供給する。
【００４７】
呼び出し先テーブル更新部１０４は、統計情報収集制御部１０１の制御のもと、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル５２に、対象クラス取得部１０２により取得された呼び出しメソッドの対象クラス、および呼び出しメソッド情報取得部１０３により取得された呼び出しメソッドのメソッド名に対応するエントリがあれば、そのエントリの呼び出し回数を１回増加させる。すなわち、メソッド呼び出し先記憶テーブル５２のエントリは、対象クラス取得部１０２により取得された呼び出しメソッドの対象クラス毎に、かつ、呼び出しメソッド情報取得部１０３により取得された呼び出しメソッドのメソッド名毎に（換言すると、クラスとメソッドのマトリックスで）登録されている。
【００４８】
また、呼び出し先テーブル更新部１０４は、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル５２に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがなければ、そのメソッド呼び出し先記憶テーブル５２に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリを登録し、そのエントリの呼び出し回数を１回に設定する。
【００４９】
呼び出し元テーブル更新部１０５は、統計情報収集制御部１０１の制御のもと、対象クラス取得部１０２および呼び出しメソッド情報取得部１０３により取得された呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあれば、そのエントリの呼び出し回数を１回増加させる。また、呼び出し元テーブル更新部１０５は、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがなければ、そのメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリを登録し、そのエントリの呼び出し回数を１回に設定する。
【００５０】
図４を参照して、メソッドの定義情報とメソッド呼び出しの統計情報の関係の一例を説明する。図４の例の場合、クラスＡのメソッドFuncAの定義情報を表すソースコード１２１と、クラスＡのメソッドFuncAの定義情報に関連付けて、メソッド呼び出し統計情報記憶部４３に記憶されているメソッド呼び出し先記憶テーブル５２−１が示されている。また、クラスＢのメソッドFuncBの定義情報を表すソースコード１２２と、クラスＢのメソッドFuncBのメソッドの定義情報に関連付けて、メソッド呼び出し統計情報記憶部４３に記憶されているメソッド呼び出し先記憶テーブル５２−２およびメソッド呼び出し元記憶テーブル５１が示されている。
【００５１】
ソースコード１２１は、第１行目の「A：：FuncA（）」（クラスＡのメソッドFuncA）が、第２行目乃至第４行目の「｛…  obj1->FuncB（）;  ｝」を実行する、すなわち、obj1（変数）に基づいて、メソッドFuncBを呼び出す関数であることを定義している。
【００５２】
メソッド呼び出し先記憶テーブル５２−１には、クラスＡのメソッドFuncAが呼び出すメソッドFuncBの呼び出し先の情報として、クラスＡのメソッドFuncA（の実行）が、クラスＢ「B：：FuncB（）」であるメソッドFuncBを、呼び出した回数が５回であり、クラスＣ「C：：FuncB（）」であるメソッドFuncBを、呼び出した回数が１回であることが記憶されている。
【００５３】
ソースコード１２２は、第１行目の「B：：FuncB（）」（クラスＢのメソッドFuncB）が、第２行目乃至第５行目の「｛…  obj2->FuncB（）;  obj3->FuncC（）;  ｝」を実行する、すなわち、obj2（変数）に基づいて、メソッドFuncBを呼び出し、obj3（変数）に基づいて、メソッドFuncCを呼び出す関数であることを定義している。
【００５４】
メソッド呼び出し先記憶テーブル５２−２には、クラスＢのメソッドFuncBが呼び出すメソッドFuncBの呼び出し先の情報として、クラスＢのメソッドFuncB（の実行）が、クラスＡ「A：：FuncB（）」であるメソッドFuncBを、呼び出した回数が６回であることが記憶されており、クラスＢのメソッドFuncBが呼び出すメソッドFuncCの呼び出し先の情報として、クラスＢのメソッドFuncB（の実行）が、クラスＤ「D：：FuncC（）」であるメソッドFuncCを、呼び出した回数が８回であり、クラスＦ「F：：FuncC（）」であるメソッドFuncCを、呼び出した回数が２回であり、クラスＥ「E：：FuncC（）」であるメソッドFuncCを、呼び出した回数が１回であることが記憶されている。
【００５５】
メソッド呼び出し元記憶テーブル５１には、クラスＢのメソッドFuncBを呼び出す元の情報として、クラスＢのメソッドFuncBが、クラスＡであるメソッドFuncA「A：：FuncA（）」から呼び出された回数が５回あり、クラスＦであるメソッドFuncG「F：：FuncG（）」から呼び出された回数が３回あることが記憶されている。
【００５６】
以上のように構成されるメソッド呼び出し元記憶テーブル５１、メソッド呼び出し先記憶テーブル５２−１、およびメソッド呼び出し先記憶テーブル５２−２は、開発ソフトウェアの実行の際、呼び出し先テーブル更新部１０４または呼び出し元テーブル更新部１０５により更新される。
【００５７】
具体的には、ソースコード１２１に示されるクラスＡのメソッドFuncAの実行により、例えば、クラスＢのFuncBが呼び出される場合、呼び出し先テーブル更新部１０４は、クラスＡのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル５２−１において、呼び出し先「B：：FuncB（）」の呼び出した回数を１回増加させる。また、呼び出し元テーブル更新部１０５は、クラスＢのFuncB（）に関連付けられたメソッド呼び出し元記憶テーブル５１において、呼び出し元「A：：FuncA（）」の回数を１回増加させる。
【００５８】
これにより、クラスＡのメソッドFuncA（アクティブメソッド）に関連付けられたメソッド呼び出し先記憶テーブル５２−１、およびクラスＢのFuncB（呼び出しメソッド）に関連付けられたメソッド呼び出し元記憶テーブル５１が更新される。
【００５９】
同様に、ソースコード１２２に示されるクラスＢのメソッドFuncBの実行により、例えば、クラスＡのFuncBが呼び出され、クラスＤのFuncCが呼び出された場合、呼び出し先テーブル更新部１０４は、クラスＢのFuncBに関連付けられたメソッド呼び出し先記憶テーブル５２−２において、呼び出し先「A：：FuncB（）」の回数を１回増加させ、呼び出し先「D：：FuncC（）」の回数を１回増加させる。また、呼び出し元テーブル更新部１０５は、図示せぬクラスＡのFuncBに関連付けられたメソッド呼び出し元記憶テーブルにおいて、「B：：FuncB（）」の回数を１回増加させ、図示せぬクラスＤのメソッドFuncCに関連付けられたメソッド呼び出し元記憶テーブルにおいて、「B：：FuncB（）」の回数を１回増加させる。
【００６０】
これにより、クラスＢのメソッドFuncB（アクティブメソッド）に関連付けられたメソッド呼び出し先記憶テーブル５２−２、並びに、クラスＡのFuncBおよびクラスＤのメソッドFuncC（呼び出しメソッド）に関連付けられたメソッド呼び出し元記憶テーブルが更新される。
【００６１】
図５は、図４のソースコード１２２がコンパイルされたプログラムコードの例を示している。ここで、Ｃ＋＋言語で開発されたソースコードは、例えば、ＣＰＵ１１によりコンパイラプログラムが実行されることにより、コンパイルされてから各プログラムなどで利用される。
【００６２】
したがって、図５の第４行目乃至第７行目は、第３行目の「;obj2->FuncB（）;」がコンパイルされたものであり、ＣＰＵ１１が第３行目の「;obj2->FuncB（）;」のメソッド呼び出しを実現する命令を示している。
【００６３】
第４行目の「mov r4,obj2（fp）;」は、フレームポインタ（fp）が指すobj2（変数）をレジスタｒ４に入れることを示している。第５行目の「mov r2,vTbl（r4）;」は、レジスタｒ２に、レジスタｒ４のobj2（変数）が指し示すvTabl（v-Table）を入れることを示している。第６行目の「mov r2,FuncB（r2）;」は、レジスタｒ２に、レジスタｒ２のvTablが指し示すメソッドFuncBを入れることを示している。第７行目の「call （r2） ;」は、レジスタｒ２のメソッドFuncBを呼び出すことを示している。
【００６４】
同様に、第１０行目乃至第１３行目は、第９行目の「;obj3->FuncC（）;」がコンパイルされたものであり、ＣＰＵ１１が第９行目の「;obj3->FuncC（）;」のメソッド呼び出しを実現する命令を示している。
【００６５】
第１０行目の「mov r4,obj3（fp）;」は、フレームポインタ（fp）が指すobj3（変数）をレジスタｒ４に入れることを示している。第１１行目の「mov r2,vTbl（r4）;」は、レジスタｒ２に、レジスタｒ４のobj3（変数）が指し示すvTbl（v-Table）を入れることを示している。第１２行目の「mov r2,FuncC（r2）;」は、レジスタｒ２に、レジスタｒ２のvTablが指し示すメソッドFuncCを入れることを示している。第１３行目の「call （r2） ;」は、レジスタｒ２のメソッドFuncCを呼び出すことを示している。
【００６６】
上述した第４行目乃至第７行目について、図６を参照して具体的に説明する。スタック１５１は、ローカル（局所）変数などが一時的に記憶される領域であり、例えば、ＲＡＭ１３などに設けられる。各関数の引数やローカル変数は、このスタック１５１にある取り決めに従って割り当てられ、フレームポインタ（fp）と呼ばれる特定のレジスタに格納されたアドレスを基準にアクセスする。スタック１５１の右側の「＋０，＋４，＋８」は、フレームポインタ（fp）からのオフセット（変位）を表しており、スタック１５１の各オフセットの位置（＋０，＋４，＋８」には、それぞれ「ａ，obj2，ｘ」が格納されている。
【００６７】
したがって、第４行目の「mov r4,obj2（fp）;」は、実際には、「mov r4,4（fp）;」と示されるものであり、スタック１５１において、ローカル変数領域にあるフレームポインタ（fp）に４を加えたアドレスにあるobj2（変数）をレジスタｒ４に入れることを示している。
【００６８】
レジスタｒ４には、各クラスのv-Tableへのポインタが格納されており、レジスタｒ４に入力されたobj2（変数）に応じたクラスのv-Tableへのポインタが指定される。v -tableは、各クラスのメソッド（関数）と実際に配置されたアドレスとの対応表のことであり、クラス毎に存在する。すなわち、obj2（変数）に応じてクラスが決まり、決まったクラスのv-Tableのポインタにより、そのv-Table（例えば、クラスＢのvTbl-B）が求められる。したがって、第５行目の「mov r2,vTbl（r4）;」は、レジスタｒ２に、レジスタｒ４のobj2（変数）に応じて決定されたクラスのv-Table（例えば、クラスＢのv-Table （vTbl-B））を入れることを示している。
【００６９】
所定のクラスのv-Tableには、各メソッド（関数）の実際のアドレスが格納されている。図６の例の場合、クラスＢのv-Table （vTbl-B）には、メソッドFuncA、メソッドFuncB、メソッドFuncC、およびメソッドFuncDのアドレスが格納されている。したがって、第６行目の「mov r2,FuncB（r2）;」は、レジスタｒ２に、レジスタｒ２のクラスＢのv-Table （vTbl-B）が指し示すアドレスにあるメソッドFuncBを入れることを示している。これにより、レジスタｒ２には、クラスＢのメソッドFuncBが格納されるので、クラスＢのメソッドFuncBは、第７行目の「call （r2） ;」の命令により呼び出される。
【００７０】
以上のように、第４行目乃至第７行目の処理を行うことにより、ＣＰＵ１１は、変数に応じて求められるクラスＢのvTbl-Bから、メソッドFuncBのアドレスに基づいて、メソッドFuncBを呼び出すことができる。
【００７１】
なお、図５の第１０行目乃至第１３行目も、上述した第４行目乃至第７行目の処理と基本的に同様な処理であり、繰り返しになるのでその詳細な説明を省略する。
【００７２】
図７は、図３の機能構成図を実現するためのプログラムコードの一例を示している。なお、図７は、Ｃ＋＋言語を用いた場合の例である。
【００７３】
図７の例においては、図５のプログラムコードの第３行目と第４行目の間および第９行目と第１０行目の間に、３つの命令コードがそれぞれ追加されている。
【００７４】
第４行目の「mov r4,obj2（fp）;」は、フレームポインタ（fp）が指すobj2（変数）をレジスタｒ４に入れることを示している。第５行目の「mov r5,#FuncB;」は、レジスタｒ５に、第３行目において呼び出しが指定されたメソッドの名前（メソッド名）FuncBを入れることを示している。なお、FuncBの前の「#」は、後に続く「FuncB」が（実体ではなく）シンボル値そのもの、すなわち、v-Table上でのFuncBのオフセット値を意味することを示す。第６行目の「call GetMethodStatistics ;」は、「GetMethodStatistics」（メソッド呼び出し統計情報収集プログラム）を呼び出すことを示している。
【００７５】
第１３行目の「mov r4,obj3（fp）;」は、フレームポインタ（fp）が指すobj3（変数）をレジスタｒ４に入れることを示している。第１４行目の「mov r5,#FuncC;」は、レジスタｒ５に、第３行目において呼び出しが指定されたメソッドの名前（メソッド名）FuncCを入れることを示している。なお、FuncCの前の「#」は、後に続く「FuncC」が（実体ではなく）シンボル値そのもの、すなわち、v-Table上でのFuncBのオフセット値を意味することを示す。第１５行目の「call GetMethodStatistics ;」は、「GetMethodStatistics」（メソッド呼び出し統計情報収集プログラム）を呼び出すことを示している。
【００７６】
すなわち、ＣＰＵ１１は、第６行目および第１５行目の「call GetMethodStatistics ;」により、例えば、メソッド呼び出し統計情報収集プログラム記憶部４４のメソッド呼び出し統計情報収集プログラムを実行する。これにより、ＣＰＵ１１は、レジスタｒ４から「クラス名」およびレジスタｒ５から「メソッド名」を取得することができるので、対応するメソッド呼び出し元記憶テーブル５１およびメソッド呼び出し先記憶テーブル５２を更新することができる。
【００７７】
以上のように、コンパイラにより実現されるＣ＋＋言語の場合、メソッド呼び出しを実現する命令１つ１つの直前に、統計情報収集を行うルーチンを呼び出す命令コードが追加されることにより、メソッド呼び出しの度に、メソッド呼び出し統計情報を収集することができる。
【００７８】
なお、これらの命令の追加方法としては、コンパイル後のＣＰＵ命令コード列に修正を加え、後処理を行うようにしてもよいし、コンパイラ自体が命令コードを追加するようにしてもよい。
【００７９】
次に、図８のフローチャートを参照して、メソッド呼び出し統計情報収集処理の一例を説明する。ユーザにより入力部１６を構成するマウスやキーボードが操作されることにより、開発ソフトウェアの実行が指示される。これに対応して、ＣＰＵ１１は、記憶部１８に記憶されている開発ソフトウェアを実行するとともに、メソッド呼び出し統計情報収集プログラム記憶部４４のメソッド呼び出し統計情報収集プログラムを実行する。
【００８０】
統計情報収集制御部１０１は、開発ソフトウェア実行中に、メソッドが呼び出されると、ステップＳ１１において、そのソフトウェアにおいて現在実行中のアクティブメソッドのクラスおよびメソッド名を取得し、ステップＳ１２に進む。例えば、図７の例の場合、統計情報収集制御部１０１は、クラスＢおよびメソッド名「FuncB」を取得する。
【００８１】
統計情報収集制御部１０１は、ステップＳ１２において、対象クラス取得部１０２に、アクティブメソッド中において、変数に応じて決定する呼び出しメソッドの対象クラスを取得させ、ステップＳ１３に進む。例えば、図７の例の場合、対象クラス取得部１０２は、レジスタｒ４から、obj2（変数）に応じて決定される対象クラスを取得し、統計情報収集制御部１０１に供給する。
【００８２】
統計情報収集制御部１０１は、ステップＳ１３において、呼び出しメソッド情報取得部１０３を制御し、呼び出しメソッドのメソッド名を取得させ、ステップＳ１４に進む。例えば、図７の例の場合、対象クラス取得部１０２は、レジスタｒ５から、メソッド名「FuncB」を取得する。
【００８３】
統計情報収集制御部１０１は、ステップＳ１４において、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル５２に、対象クラス取得部１０２および呼び出しメソッド情報取得部１０３により取得された呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがあるか否かを判定し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル５２に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがないと判定した場合、ステップＳ１５に進み、呼び出し先テーブル更新部１０４を制御し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル５２に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリを追加させ、呼び出し回数をゼロに設定させ、ステップＳ１６に進む。
【００８４】
統計情報収集制御部１０１は、ステップＳ１４において、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル５２に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがあると判定した場合、ステップＳ１５をスキップし、ステップＳ１６に進む。
【００８５】
統計情報収集制御部１０１は、ステップＳ１６において、呼び出し先テーブル更新部１０４を制御し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル５２の、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリの呼び出し回数を１回増加させ、ステップＳ１７に進む。
【００８６】
ステップＳ１７において、統計情報収集制御部１０１は、対象クラス取得部１０２および呼び出しメソッド情報取得部１０３により取得された呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあるか否かを判定し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがないと判定した場合、ステップＳ１８に進み、呼び出し元テーブル更新部１０５を制御し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリを追加させ、呼び出し回数をゼロに設定させ、ステップＳ１９に進む。
【００８７】
ステップＳ１７において、統計情報収集制御部１０１は、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあると判定した場合、ステップＳ１８をスキップし、ステップＳ１９に進む。
【００８８】
ステップＳ１９において、統計情報収集制御部１０１は、呼び出し元テーブル更新部１０５を制御し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル５１の、アクティブメソッドのクラスおよびメソッド名に対応するエントリの呼び出し回数を１回増加させ、メソッド呼び出し統計情報収集処理を終了する。
【００８９】
以上のようにして、情報処理装置１において開発ソフトウェアが実行される度に、実際に使用されるメソッドの呼び出し統計情報が収集される。なお、上記説明において用いられるメソッド名は、メソッドを識別する数値であってもよい。
【００９０】
次に、図８のメソッド呼び出し統計情報収集処理により収集されたメソッドの呼び出し統計情報を用いる処理を説明する。
【００９１】
図９は、情報処理装置１の機能構成の他の例を示すブロック図である。図９に示される機能ブロックは、情報処理装置１のＣＰＵ１１により、メソッド参照ブラウザ表示制御プログラム記憶部４５のメソッド参照ブラウザ表示制御プログラムが実行されることで実現される。
【００９２】
メソッド参照表示制御部２０１は、開発ソフトウェアのソースコード編集を行っているユーザが、入力部１６を構成するマウスなどを操作することにより、開発ソフトウェア内のメソッドの表示を指示したか否かを判定し、開発ソフトウェア内のメソッドの表示を指示したと判定した場合、メソッド呼び出し先情報取得部２０２、メソッド呼び出し元情報取得部２０３、またはメソッド定義取得部２０４を制御し、指示内容に応じた情報を取得させ、メソッド呼び出し先情報取得部２０２、メソッド呼び出し元情報取得部２０３、またはメソッド定義取得部２０４から取得された情報に基づいた表示情報を生成し、生成した表示情報を、ブラウザとして出力部１７を構成するモニタに表示させる。
【００９３】
メソッド呼び出し先情報取得部２０２は、メソッド参照表示制御部２０１から指示されたクラスおよびメソッド名に対応するメソッド呼び出し先の情報を、メソッド呼び出し先記憶テーブル５２から取得する。メソッド呼び出し元情報取得部２０３は、メソッド参照表示制御部２０１から指示されたクラスおよびメソッド名に対応するメソッド呼び出し元の情報を、メソッド呼び出し元記憶テーブル５１から取得する。メソッド定義取得部２０４は、各ブラウザにおいて、メソッド参照表示制御部２０１から指示されたクラスおよびメソッド名のメソッドの定義情報を、メソッド定義記憶部４２から取得する。
【００９４】
次に、図１０のフローチャートを参照して、呼び出し先メソッド表示処理を詳しく説明する。ユーザは、入力部１６のマウスなどを操作し、開発ソフトウェアの編集を指示する。これに対応して、ＣＰＵ１１は、メソッド参照ブラウザ表示制御プログラム記憶部４５のメソッド参照ブラウザ表示制御プログラムを実行するとともに、指示された開発ソフトウェアのソースコード編集ウィンドウを、出力部１７のモニタに表示させる。
【００９５】
図１１は、モニタに表示されるソースコード編集ウィンドウの例を示している。図１１の例においては、ソースコード編集ウィンドウ２２１には、開発ソフトウェアの一部のソースコードとして、obj1（変数）に応じてメソッドFuncBを呼び出すメソッドであるクラスＡのメソッドFuncA「A：：FuncA（）{… obj1->FuncB（）;}」、および、obj2（変数）に応じてメソッドFuncBを呼び出し、obj3（変数）に応じてメソッドFuncCを呼び出すメソッドであるクラスＢのメソッドFuncB「B：：FuncB（）{… obj2->FuncB（）; obj3->FuncC（）;}が表示されている。
【００９６】
ユーザは、クラスＢのメソッドFuncBにおいて、obj3（変数）に応じて呼び出されるメソッドFuncCの定義を調べるために、ソースコード編集ウィンドウ２２１に表示されるメソッドFuncC上で、入力部１６のマウス（例えば、右ボタン）を操作（矢印Ｐ１）し、その操作に応じて表示されるポップアップメニュー２３１の「メソッド定義表示」を指示（矢印Ｐ２）する。
【００９７】
メソッド参照表示制御部２０１は、図１０のステップＳ３１において、メソッド定義表示が指示されるまで待機しており、入力部１６を介して、メソッド定義表示が指示されたと判定した場合、ステップＳ３２に進み、メソッド呼び出し先情報取得部２０２を制御し、指示されたクラスＢのメソッドFuncBに関連付けられたメソッド呼び出し先記憶テーブル５２から、メソッドFuncCに対応するメソッド呼び出し先の情報を取得させ、ステップＳ３３に進む。
【００９８】
すなわち、上述した図４の例の場合、メソッド呼び出し先情報取得部２０２は、クラスＢのメソッドFuncBに関連付けられたメソッド呼び出し先記憶テーブル５２−２から、メソッドFuncCに対応するメソッド呼び出し先の情報として、クラスＢのメソッドFuncBがメソッドFuncCに対して呼び出した回数が、クラスＤが８回、クラスＦが２回、およびクラスＥが１回であることを取得し、取得した情報を、メソッド参照表示制御部２０１に供給する。
【００９９】
ステップＳ３３において、メソッド参照表示制御部２０１は、メソッドFuncCに対応する呼び出した回数に基づいて、クラス毎に呼び出し回数の割合を求め、呼び出し回数が多いクラス順に、呼び出し先メソッドリストを生成し、呼び出し先メソッドブラウザとして、出力部１７のモニタに表示させる。
【０１００】
図１２は、呼び出し先メソッドブラウザの例を示している。図１２の例においては、呼び出し先メソッドブラウザ２４１は、メソッドリスト表示部２５１およびメソッド定義表示部２５２により構成されている。
【０１０１】
メソッドリスト表示部２５１には、クラスＤのメソッドFuncC「D：：FuncC（）」、クラスＦのメソッドFuncC「F：：FuncC（）」、クラスＥのメソッドFuncC「E：：FuncC（）」、クラスＡのメソッドFuncC「A：：FuncC（）」、クラスＢのメソッドFuncC「B：：FuncC（）」が呼び出し回数の割合の多い順に表示されている。すなわち、メソッドリスト表示部２５１には、メソッドFuncCの、クラスＢのメソッドFuncBが呼び出す可能性のある（候補の）クラスがリスト表示されている。
【０１０２】
なお、クラスＤの呼び出し回数の割合が72.7％であり、クラスＦのメソッドFuncCの呼び出し回数の割合が18.2％であり、クラスＥのメソッドFuncCの呼び出し回数の割合が9.0％であるというように、呼び出し回数が数えられている（すなわち、呼び出しの履歴が存在する）クラスのメソッドについては、視認性が向上するように、ボールドのフォントなどで強調表示され、それぞれ呼び出し回数の割合も表示されているが、クラスＡのメソッドFuncC、クラスＢのメソッドFuncCは、過去の呼び出し回数が数えられていない（呼び出しの履歴が存在しない）ため、細い文字のフォントでアルファベット順に表示されている。
【０１０３】
なお、クラスが多く存在する場合には、呼び出し回数が数えられていないクラスのリストは、まとめてその他として表示させ、ユーザがその他を指示することにより、別ウインドウに表示させるようにしてもよい。
【０１０４】
ここで、ユーザは、例えば、メソッドリスト表示部２５１の上から２番目に表示されているクラスＦのメソッドFuncC「F：：FuncC（）」を、入力部１６のマウス（例えば、左ボタン）を操作して指示（矢印Ｐ３）する。
【０１０５】
ステップＳ３４において、メソッド参照表示制御部２０１は、入力部１６を介して、メソッドリスト表示部２５１のメソッドが指示されたか否かを判定し、メソッドが指示されていないと判定した場合、ステップＳ３５およびＳ３６をスキップし、ステップＳ３７に進む。ステップＳ３４において、メソッドが指示されたと判定された場合、メソッド参照表示制御部２０１は、ステップＳ３５に進み、メソッド定義取得部２０４を制御し、入力部１６を介して指示されたメソッドの定義情報を、メソッド定義記憶部４２から取得させ、ステップＳ３６に進み、取得されたメソッドの定義情報を、メソッド定義表示部２５２に表示させ、ステップＳ３７に進む。
【０１０６】
これにより、呼び出し先メソッドブラウザ２４１のメソッド定義表示部２５２には、図１２に示されるように、メソッドリスト表示部２５１において指示されたクラスＦのメソッドFuncCの定義情報が表示される。
【０１０７】
すなわち、図１２のメソッド定義表示部２５２には、クラスＦのメソッドFuncCが、obj4（変数）に応じてメソッドFuncXを呼び出すメソッド「F：：FuncC（）{… obj4->FuncX（）;}」であることが示される。
【０１０８】
メソッド参照表示制御部２０１は、ステップＳ３７において、入力部１６を介して、ユーザにより終了が指令されたか否かを判定することにより、呼び出し先メソッドブラウザを終了するか否かを判定する。メソッド参照表示制御部２０１は、ステップＳ３７において、呼び出し先メソッドブラウザを終了しないと判定した場合、ステップＳ３４に戻り、それ以降の処理を繰り返す。メソッド参照表示制御部２０１は、ステップＳ３７において、呼び出し先メソッドブラウザを終了すると判定した場合、呼び出し先メソッド表示制御処理を終了する。
【０１０９】
以上のように、呼び出し先メソッドブラウザにおいて、呼び出し回数の多い順にメソッドリストが表示されるので、ユーザにより実際に呼び出されることが多いメソッドを、ユーザのアクセスしやすい位置に表示させることが可能になり、また、実際に呼び出されることのほどんどないメソッドを、リストの下方やメニュー階層の奥などのアクセスしにくい場所に表示させることが可能となる。したがって、ユーザの開発環境の操作性を向上させることが可能となる。
【０１１０】
また、呼び出し回数の割合を表示させることにより、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することが可能となり、ソフトウェアの実行効率を向上させるためのチューニングを支援することができる。
【０１１１】
次に、図１３のフローチャートを参照して、呼び出し元メソッド表示処理を詳しく説明する。ユーザは、入力部１６のマウスなどを操作し、開発ソフトウェアの編集を指示する。これに対応して、ＣＰＵ１１は、メソッド参照ブラウザ表示制御プログラム記憶部４５のメソッド参照ブラウザ表示制御プログラムを実行するとともに、指示された開発ソフトウェアのソースコード編集ウィンドウを、出力部１７のモニタに表示させる。
【０１１２】
図１４は、モニタに表示されるソースコード編集ウィンドウの他の例を示している。図１４の例においては、ソースコード編集ウィンドウ２６１には、図１１と同様に、開発ソフトウェアの一部のソースコードとして、obj1（変数）に応じてメソッドFuncBを呼び出すメソッドであるクラスＡのメソッドFuncA「A：：FuncA（）{… obj1->FuncB（）;}」、および、obj2（変数）に応じてメソッドFuncBを呼び出し、obj3（変数）に応じてメソッドFuncCを呼び出すメソッドであるクラスＢのメソッドFuncB「B：：FuncB（）{… obj2->FuncB（）; obj3->FuncC（）;}が表示されている。
【０１１３】
ユーザは、クラスＢのメソッドFuncBが他のメソッドによりどのように呼び出されているかを調べるために、ソースコード編集ウィンドウ２６１に表示されるクラスＢのメソッドFuncB上で、入力部１６のマウス（例えば、右ボタン）を操作（矢印Ｑ１）し、その操作に応じて表示されるポップアップメニュー２７１の「メソッド呼び出し元表示」を指示（矢印Ｑ２）する。
【０１１４】
メソッド参照表示制御部２０１は、図１３のステップＳ５１において、メソッド呼び出し元表示が指示されるまで待機しており、入力部１６を介して、メソッド呼び出し元表示が指示されたと判定した場合、ステップＳ５２に進み、メソッド呼び出し元情報取得部２０３を制御し、指示されたクラスＢのメソッドFuncBに対応するメソッド呼び出し元記憶テーブル５１から、メソッド呼び出し元の情報を取得させ、ステップＳ５３に進む。
【０１１５】
すなわち、上述した図４の例の場合、メソッド呼び出し元情報取得部２０３は、メソッドFuncBに関連付けられたメソッド呼び出し元記憶テーブル５１から、メソッドFuncBに対応するメソッド呼び出し元の情報として、このメソッドFuncBが呼び出された回数が、クラスＡのメソッドFuncAから５回、およびクラスＦのメソッドFuncGから３回であることを取得し、取得した情報を、メソッド参照表示制御部２０１に供給する。
【０１１６】
ステップＳ５３において、メソッド参照表示制御部２０１は、メソッドFuncBが呼び出された回数に基づいて、各クラス毎からの呼び出された回数の割合を求め、呼び出された回数が多いメソッド順に、呼び出し元メソッドリストを生成し、呼び出し元メソッドブラウザとして、出力部１７のモニタに表示させる。
【０１１７】
図１５は、呼び出し元メソッドブラウザの一例を示している。図１５の例においては、呼び出し元メソッドブラウザ２８１は、メソッドリスト表示部２９１およびメソッド定義表示部２９２により構成されている。
【０１１８】
メソッドリスト表示部２９１には、クラスＡのメソッドFuncA「A：：FuncA（）」、クラスＦのメソッドFuncG「F：：FuncG（）」、クラスＢのメソッドFuncE「B：：FuncE（）」、クラスＣのメソッドFuncF「C：：FuncF（）」、クラスＧのメソッドFuncB「G：：FuncB（）」が呼び出された回数の割合の多い順に表示されている。すなわち、メソッドリスト表示部２９１には、クラスＢのメソッドFuncBを呼び出す可能性のある（候補の）メソッドがリスト表示されている。
【０１１９】
なお、クラスＡのメソッドFuncAからの呼び出された回数の割合が83.3％であり、クラスＦのメソッドFuncGから呼び出された回数の割合が16.6％と示されるように、呼び出され回数が呼び出し回数が数えられている（すなわち、呼び出しの履歴が存在する）ものについては、視認性が向上するように、例えば、ボールドのフォントで強調表示され、それぞれ呼び出された回数の割合が表示される。一方、クラスＢのメソッドFuncE、クラスＣのメソッドFuncF、および、クラスＧのメソッドFuncBは、呼び出された回数が過去の呼び出し回数が数えられていない（呼び出しの履歴が存在しない）ため、細い文字のフォントでアルファベット順に表示されている。
【０１２０】
ここで、ユーザは、例えば、メソッドリスト表示部２９１の上から２番目に表示されているクラスＦのメソッドFuncG「F：：FuncG（）」を、入力部１６のマウス（例えば、左ボタン）を操作して指示（矢印Ｑ３）する。
【０１２１】
ステップＳ５４において、メソッド参照表示制御部２０１は、入力部１６を介して、メソッドリスト表示部２９１のメソッドが指示されたか否かを判定し、メソッドが指示されていないと判定した場合、ステップＳ５５およびＳ５６をスキップし、ステップＳ５７に進む。ステップＳ５４において、メソッドが指示されたと判定された場合、ステップＳ５５に進み、メソッド参照表示制御部２０１は、メソッド定義取得部２０４を制御し、入力部１６を介して指示されたメソッドの定義情報を、メソッド定義記憶部４２から取得させ、ステップＳ５６に進み、取得されたメソッドの定義情報を、メソッド定義表示部２９２に表示させ、ステップＳ５７に進む。
【０１２２】
これにより、呼び出し元メソッドブラウザ２８１のメソッド定義表示部２９２には、図１５に示されるように、メソッドリスト表示部２９１において指示されたクラスＦのメソッドFuncGの定義情報が表示される。
【０１２３】
すなわち、メソッド定義表示部２９２には、クラスＦのメソッドFuncGが、obj5（変数）に応じてメソッドFuncBを呼び出したときに、クラスＢのメソッドFuncBが呼び出されたこと「F：：FuncG（）{… obj5->FuncB（）;}」であることが示されている。なお、メソッド定義表示部２９２においては、メソッドFuncBの呼び出し元が表示されている場合であるので、クラスＦのメソッドFuncGにおいて、「FuncB（）;」がハッチングにより強調表示されている。
【０１２４】
メソッド参照表示制御部２０１は、ステップＳ５７において、入力部１６を介して、ユーザにより終了が指令されたか否かを判定することにより、呼び出し元メソッドブラウザを終了するか否かを判定する。メソッド参照表示制御部２０１は、ステップＳ５７において、呼び出し元メソッドブラウザを終了しないと判定した場合、ステップＳ５４に戻り、それ以降の処理を繰り返す。メソッド参照表示制御部２０１は、ステップＳ５７において、呼び出し元メソッドブラウザを終了すると判定した場合、呼び出し元メソッド表示制御処理を終了する。
【０１２５】
以上のように、呼び出し元メソッドブラウザにおいて、対象となるメソッドが呼び出された回数の多い順にメソッドリストが表示されるので、実際に対象となるメソッドが呼び出されることが多いメソッドがユーザのアクセスしやすい位置に表示させることが可能となり、一方、実際に対象のメソッドが呼び出されることのないメソッドを、リストの下方やメニュー階層の奥などのアクセスしにくい場所に表示させることが可能となる。したがって、ユーザは、簡単に目的のメソッドを見つけることができるようになり、ユーザの開発環境の操作性を向上させることが可能となる。
【０１２６】
また、呼び出され回数の割合を表示させることにより、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することが可能となり、ソフトウェアの実行効率を向上させるためのチューニングを支援することができる。
【０１２７】
なお、上記説明においては、ソフトウェア開発環境が扱う開発言語がコンパイラで実現される場合について説明したが、本発明は、開発言語が、コンパイラではなく、例えば、Smalltalk（スモールトーク）言語に代表されるように、仮想マシンにより実現される場合にも適用される。すなわち、仮想マシンにより実現される場合であっても、１つ１つのメソッド呼び出し毎に統計情報収集ルーチンが起動されて、メソッドに関連付けられたメソッド呼び出し統計情報記憶部の各テーブルが更新されるようにしておくようにすることにより、実際に、開発対象プログラムが実行された時点で、コンパイラで実現される場合と同じように、統計情報が生成される。なお、仮想マシン場合には、メソッド呼び出しを行う仮想マシン命令の実装を変更することで統計情報を収集することが可能であり、メソッドの仮想マシン命令コード列自体には修正を追加する必要がないため、その手間が抑制される。
【０１２８】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
【０１２９】
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図１に示されるように、磁気ディスク２１（フレキシブルディスクを含む）、光ディスク２２（CD-ROM（Compact Disc-Read Only Memory）、DVD（Digital Versatile Disc）を含む）、光磁気ディスク２３（MD（Mini-Disc）（商標）を含む）、もしくは半導体メモリ２４などよりなるパッケージメディア、または、プログラムが一時的もしくは永続的に格納される記憶部１８などにより構成される。
【０１３０】
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【図面の簡単な説明】
【０１３１】
【図１】本発明の情報処理装置の構成例をブロック図である。
【図２】図１の記憶部の構成例を示すブロック図である。
【図３】図１の情報処理装置の機能構成例を示すブロック図である。
【図４】メソッド定義情報とメソッド呼び出しの統計情報の関係を説明する図である。
【図５】プログラムコードの例を示す図である。
【図６】図５のプログラムコードを詳しく説明する図である。
【図７】図３の機能構成図を実現するためのプログラムコードの一例を示す図である。
【図８】メソッド呼び出し統計情報収集処理を説明するフローチャートである。
【図９】図１の情報処理装置の機能構成の他の例を示すブロック図である。
【図１０】呼び出し先メソッド表示制御処理を説明するフローチャートである。
【図１１】ソースコード編集ウィンドウの例を示す図である。
【図１２】呼び出し先メソッドブラウザの例を示す図である。
【図１３】呼び出し元メソッド表示制御処理を説明するフローチャートである。
【図１４】ソースコード編集ウィンドウの他の例を示す図である。
【図１５】呼び出し元メソッドブラウザの例を示す図である。
【符号の説明】
【０１３２】
１  情報処理装置，１１  ＣＰＵ，１２  ＲＡＭ，１６  入力部，１７  出力部，１８  記憶部，４２  メソッド定義記憶部，４３  メソッド呼び出し統計情報記憶部，４４  メソッド呼び出し統計情報収集プログラム記憶部，４５  メソッド参照ブラウザ表示制御プログラム記憶部，５１  メソッド呼び出し元記憶テーブル，５２  メソッド呼び出し先記憶テーブル，１０１  統計情報収集制御部，１０２  対象クラス取得部，１０３  呼び出しメソッド情報取得部，１０４  呼び出し先テーブル更新部，１０５  呼び出し元テーブル更新部，２０１  メソッド参照表示制御部，２０２  メソッド呼び出し先情報取得部，２０３  メソッド呼び出し元情報取得部，２０４  メソッド定義取得部，２４１  呼び出し先メソッドブラウザ，２８１  呼び出し元メソッドブラウザ
【図１】
2005327036.tif 000003
【図２】
2005327036.tif 000004
【図３】
2005327036.tif 000005
【図４】
2005327036.tif 000006
【図５】
2005327036.tif 000007
【図６】
2005327036.tif 000008
【図７】
2005327036.tif 000009
【図８】
2005327036.tif 000010
【図９】
2005327036.tif 000011
【図１０】
2005327036.tif 000012
【図１１】
2005327036.tif 000013
【図１２】
2005327036.tif 000014
【図１３】
2005327036.tif 000015
【図１４】
2005327036.tif 000016
【図１５】
2005327036.tif 000017