JP2005327036A - 情報処理装置および方法、記録媒体、並びにプログラム - Google Patents
情報処理装置および方法、記録媒体、並びにプログラム Download PDFInfo
- Publication number
- JP2005327036A JP2005327036A JP2004143792A JP2004143792A JP2005327036A JP 2005327036 A JP2005327036 A JP 2005327036A JP 2004143792 A JP2004143792 A JP 2004143792A JP 2004143792 A JP2004143792 A JP 2004143792A JP 2005327036 A JP2005327036 A JP 2005327036A
- Authority
- JP
- Japan
- Prior art keywords
- class
- call
- information
- software
- source code
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
【課題】メソッドの呼び出し関係のリストアップにおいて、呼び出し回数の多いメソッドリストをユーザのアクセスしやすい位置に表示させる。
【解決手段】ソースコード121に示されるクラスAのメソッドFuncAの実行により、例えば、クラスBのFuncBが呼び出される場合、クラスAのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル52−1において、呼び出し先「B::FuncB()」の呼び出した回数が1回増加され、クラスBのFuncB()に関連付けられたメソッド呼び出し元記憶テーブル51において、呼び出し元「A::FuncA()」の回数が1回増加される。これにより、クラスAのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル52−1、およびクラスBのFuncBに関連付けられたメソッド呼び出し元記憶テーブル51が更新される。メソッド参照表示部は呼び出された回数に基づいて多いメソッド順にリストを生成し表示する。
【選択図】図4
【解決手段】ソースコード121に示されるクラスAのメソッドFuncAの実行により、例えば、クラスBのFuncBが呼び出される場合、クラスAのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル52−1において、呼び出し先「B::FuncB()」の呼び出した回数が1回増加され、クラスBのFuncB()に関連付けられたメソッド呼び出し元記憶テーブル51において、呼び出し元「A::FuncA()」の回数が1回増加される。これにより、クラスAのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル52−1、およびクラスBのFuncBに関連付けられたメソッド呼び出し元記憶テーブル51が更新される。メソッド参照表示部は呼び出された回数に基づいて多いメソッド順にリストを生成し表示する。
【選択図】図4
Description
本発明は、情報処理装置および方法、記録媒体、並びにプログラムに関し、特に、オブジェクト指向言語を用いたソフトウェア開発環境における操作性を向上することができるようにした情報処理装置および方法、記録媒体、並びにプログラムに関する。
ソフトウェアの開発作業を支援することを目的として、特許文献1に示されるように、開発されたソフトウェアのソースコードで定義されたオブジェクト、クラスまたは関数などの定義を簡単に参照する機能が、さまざまなソフトウェアプログラミング環境で提供されている。
例えば、関数(メソッド)の呼び出し関係をリストアップし、呼び出し先、または呼び出し元の関数の定義を簡単に参照し、修正できるようなツール機能としては、Visual C++(登録商標)開発環境において、ソースブラウザ機能がある。このソースブラウザ機能により、あるC++の関数が他のどの関数から呼び出されているか、または、ある関数呼び出しの関数の定義はどの関数の何行目にあるかといったことが画面上に表示されるので、ユーザは、即座に確認し、それらに基づいて、ソフトウェアの修正などを行っていた。
また、Smalltalk(スモールトーク)言語環境においては、システムブラウザが現在参照しているメソッド呼び出し元メソッドのブラウザや、呼び出し先メソッドのブラウザを簡単に表示させることができるようになっている。
しかしながら、このオブジェクト指向言語と呼ばれるC++やSmalltalkにおいて、仮想(virtual)関数やメソッドの呼び出し先は、対象となるオブジェクトを動的に変更することで、動的に決定されるようになっている。したがって、ユーザ(プログラマ)が特定の関数名やメソッド名で呼び出しを記述しても、そこで実際に呼び出される関数やメソッドは、対象となるオブジェクトのクラスが決まるまで、決定されない。
すなわち、対象となるオブジェクトは、実行時に動的に変更することが可能なため、このような関数と関数、あるいは、メソッドとメソッドのリンクは、動的リンクまたは遅延結合と呼ばれ、ソフトウェアのインタフェースと実装の分離を実行時に可能とさせることができる。したがって、例えば、関数名やメソッド名に同じものを用いることにより、さまざまなクラスのインタフェースを統一させ、ソフトウェアの再利用を図ることができる。しかしながら、その半面、同一の関数名やメソッド名を持つ関数やメソッドが同一プログラム内、同一システム内に多数存在するような性質をソフトウェアが持つようになってしまう。
以上により、上述したソースブラウザツールやブラウザを用いてしまうと、同一の関数名やメソッド名がリストに連なってしまうだけでなく、実際に呼び出されることがない関数やメソッドまでリストに表示されてしまい、ユーザが目的とする関数やメソッドが見つけ出し難い課題があった。
本発明は、このような状況に鑑みてなされたものであり、ソフトウェア開発環境における操作性を向上することができるようにするものである。
本発明の情報処理装置は、ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、第2のメソッドのクラスを取得するクラス情報取得手段と、クラス情報取得手段により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録手段と、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、呼び出し情報登録手段により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示を制御する表示制御手段とを備えることを特徴とする。
ソフトウェアを構成する第2のメソッドのソースコードが表示され、第2のメソッドのソースコード上において、第2のメソッドが選択された場合、表示制御手段は、呼び出し情報登録手段により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第2メソッドを呼び出す第1のメソッドのリスト表示を、さらに制御するようにすることができる。
第1のメソッドからの第2のメソッドの呼び出し統計情報は、第1のメソッドが第2のメソッドを呼び出した呼び出し回数であり、表示制御手段は、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、第2のメソッドの呼び出し回数の多いクラス順に、第1のメソッドから呼び出される第2のメソッドのリスト表示を制御し、第2のメソッドのソースコード上において、第2のメソッドが選択された場合、第2のメソッドの呼び出し回数の多い順に、第2メソッドを呼び出す第1のメソッドのリスト表示を制御するようにすることができる。
呼び出し情報登録手段は、第1のメソッドに関連付けて、クラス情報取得手段により取得されたクラス毎に、かつ、第1のメソッドからの第2のメソッドの呼び出し毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する第1の登録手段と、クラス情報取得手段により取得されたクラスの第2のメソッドに関連付けて、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する第2の登録手段とを備えるようにすることができる。
本発明の情報処理方法は、ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、第2のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
本発明のプログラムが記録されている記録媒体は、ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、第2のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
本発明のプログラムは、ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、第2のメソッドのクラスを取得するクラス情報取得ステップと、クラス情報取得ステップの処理により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示を制御する表示制御ステップとを含むことを特徴とする。
本発明においては、ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、第2のメソッドのクラスが取得され、取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報が登録される。そして、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示が制御される。
本発明によれば、ソフトウェア開発環境における操作性を向上することができる。また、本発明によれば、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することができる。
以下に本発明の実施の形態を説明するが、請求項に記載の構成要件と、発明の実施の形態における具体例との対応関係を例示すると、次のようになる。この記載は、請求項に記載されている発明をサポートする具体例が、発明の実施の形態に記載されていることを確認するためのものである。したがって、発明の実施の形態中には記載されているが、構成要件に対応するものとして、ここには記載されていない具体例があったとしても、そのことは、その具体例が、その構成要件に対応するものではないことを意味するものではない。逆に、具体例が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その具体例が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
さらに、この記載は、発明の実施の形態に記載されている具体例に対応する発明が、請求項に全て記載されていることを意味するものではない。換言すれば、この記載は、発明の実施の形態に記載されている具体例に対応する発明であって、この出願の請求項には記載されていない発明の存在、すなわち、将来、分割出願されたり、補正により追加される発明の存在を否定するものではない。
請求項1に記載の情報処理装置(例えば、図1の情報処理装置1)は、ソフトウェアを構成する第1のメソッド(例えば、図7の第1行目のクラスBのメソッドFuncB())の実行中に、第2のメソッド(例えば、図7の第3行目のメソッドFuncB())が呼び出される場合、第2のメソッドのクラス(例えば、図7の第4行目のobj2(fp)により決まるクラス)を取得するクラス情報取得手段(例えば、図3の対象クラス取得部102)と、クラス情報取得手段により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報(例えば、図4のメソッド呼び出し先記憶テーブル52−2)を登録する呼び出し情報登録手段(例えば、図3の呼び出し先テーブル更新部104)と、ソフトウェアを構成する第1のメソッドのソースコード(例えば、図11のクラスBのメソッドFuncB())が表示され、第1のメソッドのソースコード上において、第2のメソッド(例えば、メソッドFuncC())が選択された場合、呼び出し情報登録手段により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示(例えば、図12のメソッドリスト表示251)を制御する表示制御手段(例えば、図9のメソッド参照表示制御部201)とを備えることを特徴とする。
請求項2に記載の情報処理装置は、ソフトウェアを構成する第2のメソッドのソースコード(例えば、図14のクラスBのメソッドFuncB())が表示され、第2のメソッドのソースコード上において、第2のメソッド(例えば、図14のクラスBのメソッドFuncB())が選択された場合、表示制御手段は、呼び出し情報登録手段により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報(例えば、図4のメソッド呼び出し元記憶テーブル51)に基づいて、第2メソッドを呼び出す第1のメソッドのリスト表示(例えば、図15のメソッドリスト表示291)を、さらに制御することを特徴とする。
請求項4に記載の情報処理装置は、呼び出し情報登録手段は、第1のメソッド(例えば、図4のクラスBのメソッドFuncB())に関連付けて、クラス情報取得手段により取得されたクラス(例えば、図4のクラスA,クラスD,クラスF,クラスE)毎に、かつ、第1のメソッドからの第2のメソッドの呼び出し(例えば、図4のFuncB(),FuncC())毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報(例えば、図4のメソッド呼び出し先記憶テーブル52−2)を登録する第1の登録手段と、クラス情報取得手段により取得されたクラスの第2のメソッド(例えば、図4のクラスBのメソッドFuncB)に関連付けて、第1のメソッドからの第2のメソッドの呼び出し統計情報(例えば、図4のメソッド呼び出し元記憶テーブル51)を登録する第2の登録手段(例えば、図3の呼び出し元テーブル更新部105)とを備えるようにすることができる。
請求項5に記載の情報処理方法は、ソフトウェアを構成する第1のメソッド(例えば、図7の第1行目のクラスBのメソッドFuncB())の実行中に、第2のメソッド(例えば、図7の第3行目のメソッドFuncB())が呼び出される場合、第2のメソッドのクラス(例えば、図7の第4行目のobj2(fp) により決まるクラス)を取得するクラス情報取得ステップ(例えば、図8のステップS12)と、クラス情報取得ステップの処理により取得されたクラス毎に、第1のメソッドからの第2のメソッドの呼び出し統計情報(例えば、図4のメソッド呼び出し先記憶テーブル52−2)を登録する呼び出し情報登録ステップ(例えば、図8のステップS16)と、ソフトウェアを構成する第1のメソッドのソースコードが表示され、第1のメソッドのソースコード上において、第2のメソッドが選択された場合、呼び出し情報登録ステップの処理により登録された第1のメソッドからの第2のメソッドの呼び出し統計情報に基づいて、第1のメソッドから呼び出される第2のメソッドのリスト表示(例えば、図12のメソッドリスト表示251)を制御する表示制御ステップ(例えば、図10のステップS33)とを含むことを特徴とする。
なお、請求項6に記載の記録媒体および請求項7に記載のプログラムは、上述した請求項5に記載の情報処理方法と基本的に同様の構成であるため、繰り返しになるのでその説明は省略する。
以下、図を参照して本発明の実施の形態について説明する。
図1は、本発明を適用した情報処理装置1のハードウェア構成例を表している。図1においては、情報処理装置1は、例えば、コンピュータをベースに構成されている。
CPU(Central Processing Unit)11は、ROM(Read Only Memory)12に記憶されているプログラム、または記憶部18からRAM(Random Access Memory)13にロードされたプログラムに従って各種の処理を実行する。RAM13にはまた、CPU11が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU11、ROM12、およびRAM13は、バス14を介して相互に接続されている。このバス14にはまた、入出力インタフェース15も接続されている。
入出力インタフェース15には、キーボード、マウスなどよりなる入力部16、CRT(Cathode Ray Tube)、LCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部17、ハードディスクなどより構成される記憶部18、モデム、ターミナルアダプタなどより構成される通信部19が接続されている。通信部19は、図示せぬネットワークを介しての通信処理を行う。
入出力インタフェース15にはまた、必要に応じてドライブ20が接続され、磁気ディスク21、光ディスク22、光磁気ディスク23、或いは半導体メモリ24などが適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部18にインストールされる。
すなわち、CPU11が、各種のプログラムを実行することにより、図1のコンピュータは、後述する各種の処理を実行する。この場合、プログラムは、図1のコンピュータに内蔵されている記録媒体としてのROM12や記憶部18に予め記録しておくことができる。あるいはまた、プログラムは、磁気ディスク21や、光ディスク22、光磁気ディスク23、半導体メモリ24などのリムーバブル記録媒体に、一時的あるいは永続的に格納(記録)し、いわゆるパッケージソフトウェアとして提供することができる。
なお、プログラムは、上述したようなリムーバブル記録媒体から図1のコンピュータにインストールする他、ダウンロードサイトから、デジタル衛星放送用の人工衛星を介して、図1のコンピュータに無線で転送したり、LAN(Local Area Network)、図示せぬネットワークを介して、図1のコンピュータに有線で転送してインストールすることもできる。
ここで、情報処理装置1は、ユーザによりオブジェクト指向プログラミング言語によって記述されたソフトウェアの開発が行われるソフトウェア開発環境を有している。以下、ユーザにより開発されたソフトウェアを、開発ソフトウェアと称する。このソフトウェア開発環境においては、例えば、オブジェクト指向プログラミング言語として、コンパイラで実現されるC++言語が用いられるものとする。
オブジェクト指向プログラミングは、関連するデータの集合と、それに対する手続き(メソッド)を「オブジェクト」と呼ばれる一つのまとまりとして管理し、その組み合わせによってソフトウェアを構築するプログラミングである。メソッドは、オブジェクト指向プログラミングにおいて、各オブジェクトが持っている自身に対する操作(手続き)であり、以降、その操作に対応する関数も含めて、メソッドと称する。
また、オブジェクト指向プログラミングにおいて、オブジェクトは、同種のオブジェクトをまとめて扱うためのクラスにより定義されており、実行時にメソッド呼び出しの対象となるオブジェクトを動的に変更させることが可能なため、さまざまなクラスのインタフェースを統一させ、ソフトウェアの再利用を図る目的により、同一プログラム内や同一記憶部18内には、同一のメソッド名(関数名)を持つメソッド(関数)が多数記憶されている。
図2は、図1の記憶部18の構成例を示すブロック図である。この記憶部18には、上述したように、オブジェクト指向プログラミング言語によるソフトウェアの開発に用いられるメソッドに関する情報や、ソフトウェアに用いられるメソッドの情報を収集、あるいは参照するためのプログラムなどが記憶されている。なお、記憶部18には、図示は省略するが、C++言語をコンパイラするためのコンパイラプログラムも記憶されている。
図2の例の場合、記憶部18は、メソッド定義記憶部42、メソッド呼び出し統計情報記憶部43、メソッド呼び出し統計情報収集プログラム記憶部44、および、メソッド参照ブラウザ表示制御プログラム記憶部45により構成されている。
メソッド定義記憶部42には、ソフトウェア開発において用いられるメソッド(関数)の定義情報が記憶されている。例えば、クラスAのメソッド名aのメソッドの定義情報、クラスBのメソッド名aのメソッドの定義情報、クラスBのメソッド名bのメソッドの定義情報というように、クラスおよびメソッド名毎のメソッドの定義情報が記憶されている。
メソッド呼び出し統計情報記憶部43には、メソッド定義記憶部42にクラスおよびメソッド名毎に記憶されているメソッドの定義情報に関連付けられて、メソッド呼び出し元記憶テーブル51およびメソッド呼び出し先記憶テーブル52からなるメソッド呼び出しの統計情報が記憶されている。
メソッド呼び出し元記憶テーブル51は、メソッド定義記憶部42に記憶されているメソッドの定義情報が対応するメソッドが、どの呼び出し元から(すなわち、どのクラスに属するどのメソッド名のメソッドから)何回呼び出されているかなどのメソッド呼び出し元に関する情報で構成される。メソッド呼び出し先記憶テーブル52は、メソッド定義記憶部42に記憶されているメソッドの定義情報が対応するメソッドから呼び出されるメソッドは、どのクラスのメソッドで、何回呼び出しているかなどのメソッド呼び出し先に関する情報で構成される。
メソッド呼び出し統計情報収集プログラム記憶部44には、情報処理装置1において開発ソフトウェアが実行される度に起動される、メソッド呼び出しの統計情報を収集する処理を行うメソッド呼び出し統計情報収集プログラムが記憶されている。CPU11は、メソッド呼び出し統計情報収集プログラム記憶部44から、メソッド呼び出し統計情報収集プログラムをRAM13にロードすることにより、メソッド呼び出し統計情報収集処理を実行する。
メソッド参照ブラウザ表示制御プログラム記憶部45には、情報処理装置1において開発ソフトウェアを構成するメソッドを参照するためのブラウザを表示する処理を行うメソッド参照ブラウザ表示制御プログラムが記憶されている。CPU11は、メソッド参照ブラウザ表示制御プログラム記憶部45から、メソッド参照ブラウザ表示制御プログラムをRAM13にロードすることにより、メソッド参照ブラウザ表示制御処理を実行する。
図3は、情報処理装置1の機能構成の一例を示すブロック図である。図3に示される機能ブロックは、情報処理装置1のCPU11により、メソッド呼び出し統計情報収集プログラム記憶部44のメソッド呼び出し統計情報収集プログラムが実行されることで実現される。
統計情報収集制御部101は、開発ソフトウェアが実行され、メソッドが呼び出される場合に、開発ソフトウェアにおいて現在実行中のメソッド(以降、アクティブメソッドとも称する)のクラスおよびメソッド名を取得し、対象クラス取得部102、呼び出しメソッド情報取得部103、呼び出し先テーブル更新部104、および呼び出し元テーブル更新部105の各処理を制御する。
対象クラス取得部102は、統計情報収集制御部101の制御のもと、アクティブメソッドから呼び出されるメソッド(以降、呼び出しメソッドとも称する)の対象クラスを取得する。すなわち、開発ソフトウェアの実行によりメソッドを呼び出すための変数の値が求められるので、対象クラス取得部102は、求められた変数の値に基づいて、呼び出しメソッドの対象クラスを取得し、取得した対象クラスを、統計情報収集制御部101に供給する。呼び出しメソッド情報取得部103は、呼び出しメソッドのメソッド名などの情報を取得し、取得したメソッド名を、統計情報収集制御部101に供給する。
呼び出し先テーブル更新部104は、統計情報収集制御部101の制御のもと、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル52に、対象クラス取得部102により取得された呼び出しメソッドの対象クラス、および呼び出しメソッド情報取得部103により取得された呼び出しメソッドのメソッド名に対応するエントリがあれば、そのエントリの呼び出し回数を1回増加させる。すなわち、メソッド呼び出し先記憶テーブル52のエントリは、対象クラス取得部102により取得された呼び出しメソッドの対象クラス毎に、かつ、呼び出しメソッド情報取得部103により取得された呼び出しメソッドのメソッド名毎に(換言すると、クラスとメソッドのマトリックスで)登録されている。
また、呼び出し先テーブル更新部104は、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル52に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがなければ、そのメソッド呼び出し先記憶テーブル52に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリを登録し、そのエントリの呼び出し回数を1回に設定する。
呼び出し元テーブル更新部105は、統計情報収集制御部101の制御のもと、対象クラス取得部102および呼び出しメソッド情報取得部103により取得された呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあれば、そのエントリの呼び出し回数を1回増加させる。また、呼び出し元テーブル更新部105は、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがなければ、そのメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリを登録し、そのエントリの呼び出し回数を1回に設定する。
図4を参照して、メソッドの定義情報とメソッド呼び出しの統計情報の関係の一例を説明する。図4の例の場合、クラスAのメソッドFuncAの定義情報を表すソースコード121と、クラスAのメソッドFuncAの定義情報に関連付けて、メソッド呼び出し統計情報記憶部43に記憶されているメソッド呼び出し先記憶テーブル52−1が示されている。また、クラスBのメソッドFuncBの定義情報を表すソースコード122と、クラスBのメソッドFuncBのメソッドの定義情報に関連付けて、メソッド呼び出し統計情報記憶部43に記憶されているメソッド呼び出し先記憶テーブル52−2およびメソッド呼び出し元記憶テーブル51が示されている。
ソースコード121は、第1行目の「A::FuncA()」(クラスAのメソッドFuncA)が、第2行目乃至第4行目の「{… obj1->FuncB(); }」を実行する、すなわち、obj1(変数)に基づいて、メソッドFuncBを呼び出す関数であることを定義している。
メソッド呼び出し先記憶テーブル52−1には、クラスAのメソッドFuncAが呼び出すメソッドFuncBの呼び出し先の情報として、クラスAのメソッドFuncA(の実行)が、クラスB「B::FuncB()」であるメソッドFuncBを、呼び出した回数が5回であり、クラスC「C::FuncB()」であるメソッドFuncBを、呼び出した回数が1回であることが記憶されている。
ソースコード122は、第1行目の「B::FuncB()」(クラスBのメソッドFuncB)が、第2行目乃至第5行目の「{… obj2->FuncB(); obj3->FuncC(); }」を実行する、すなわち、obj2(変数)に基づいて、メソッドFuncBを呼び出し、obj3(変数)に基づいて、メソッドFuncCを呼び出す関数であることを定義している。
メソッド呼び出し先記憶テーブル52−2には、クラスBのメソッドFuncBが呼び出すメソッドFuncBの呼び出し先の情報として、クラスBのメソッドFuncB(の実行)が、クラスA「A::FuncB()」であるメソッドFuncBを、呼び出した回数が6回であることが記憶されており、クラスBのメソッドFuncBが呼び出すメソッドFuncCの呼び出し先の情報として、クラスBのメソッドFuncB(の実行)が、クラスD「D::FuncC()」であるメソッドFuncCを、呼び出した回数が8回であり、クラスF「F::FuncC()」であるメソッドFuncCを、呼び出した回数が2回であり、クラスE「E::FuncC()」であるメソッドFuncCを、呼び出した回数が1回であることが記憶されている。
メソッド呼び出し元記憶テーブル51には、クラスBのメソッドFuncBを呼び出す元の情報として、クラスBのメソッドFuncBが、クラスAであるメソッドFuncA「A::FuncA()」から呼び出された回数が5回あり、クラスFであるメソッドFuncG「F::FuncG()」から呼び出された回数が3回あることが記憶されている。
以上のように構成されるメソッド呼び出し元記憶テーブル51、メソッド呼び出し先記憶テーブル52−1、およびメソッド呼び出し先記憶テーブル52−2は、開発ソフトウェアの実行の際、呼び出し先テーブル更新部104または呼び出し元テーブル更新部105により更新される。
具体的には、ソースコード121に示されるクラスAのメソッドFuncAの実行により、例えば、クラスBのFuncBが呼び出される場合、呼び出し先テーブル更新部104は、クラスAのメソッドFuncAに関連付けられたメソッド呼び出し先記憶テーブル52−1において、呼び出し先「B::FuncB()」の呼び出した回数を1回増加させる。また、呼び出し元テーブル更新部105は、クラスBのFuncB()に関連付けられたメソッド呼び出し元記憶テーブル51において、呼び出し元「A::FuncA()」の回数を1回増加させる。
これにより、クラスAのメソッドFuncA(アクティブメソッド)に関連付けられたメソッド呼び出し先記憶テーブル52−1、およびクラスBのFuncB(呼び出しメソッド)に関連付けられたメソッド呼び出し元記憶テーブル51が更新される。
同様に、ソースコード122に示されるクラスBのメソッドFuncBの実行により、例えば、クラスAのFuncBが呼び出され、クラスDのFuncCが呼び出された場合、呼び出し先テーブル更新部104は、クラスBのFuncBに関連付けられたメソッド呼び出し先記憶テーブル52−2において、呼び出し先「A::FuncB()」の回数を1回増加させ、呼び出し先「D::FuncC()」の回数を1回増加させる。また、呼び出し元テーブル更新部105は、図示せぬクラスAのFuncBに関連付けられたメソッド呼び出し元記憶テーブルにおいて、「B::FuncB()」の回数を1回増加させ、図示せぬクラスDのメソッドFuncCに関連付けられたメソッド呼び出し元記憶テーブルにおいて、「B::FuncB()」の回数を1回増加させる。
これにより、クラスBのメソッドFuncB(アクティブメソッド)に関連付けられたメソッド呼び出し先記憶テーブル52−2、並びに、クラスAのFuncBおよびクラスDのメソッドFuncC(呼び出しメソッド)に関連付けられたメソッド呼び出し元記憶テーブルが更新される。
図5は、図4のソースコード122がコンパイルされたプログラムコードの例を示している。ここで、C++言語で開発されたソースコードは、例えば、CPU11によりコンパイラプログラムが実行されることにより、コンパイルされてから各プログラムなどで利用される。
したがって、図5の第4行目乃至第7行目は、第3行目の「;obj2->FuncB();」がコンパイルされたものであり、CPU11が第3行目の「;obj2->FuncB();」のメソッド呼び出しを実現する命令を示している。
第4行目の「mov r4,obj2(fp);」は、フレームポインタ(fp)が指すobj2(変数)をレジスタr4に入れることを示している。第5行目の「mov r2,vTbl(r4);」は、レジスタr2に、レジスタr4のobj2(変数)が指し示すvTabl(v-Table)を入れることを示している。第6行目の「mov r2,FuncB(r2);」は、レジスタr2に、レジスタr2のvTablが指し示すメソッドFuncBを入れることを示している。第7行目の「call (r2) ;」は、レジスタr2のメソッドFuncBを呼び出すことを示している。
同様に、第10行目乃至第13行目は、第9行目の「;obj3->FuncC();」がコンパイルされたものであり、CPU11が第9行目の「;obj3->FuncC();」のメソッド呼び出しを実現する命令を示している。
第10行目の「mov r4,obj3(fp);」は、フレームポインタ(fp)が指すobj3(変数)をレジスタr4に入れることを示している。第11行目の「mov r2,vTbl(r4);」は、レジスタr2に、レジスタr4のobj3(変数)が指し示すvTbl(v-Table)を入れることを示している。第12行目の「mov r2,FuncC(r2);」は、レジスタr2に、レジスタr2のvTablが指し示すメソッドFuncCを入れることを示している。第13行目の「call (r2) ;」は、レジスタr2のメソッドFuncCを呼び出すことを示している。
上述した第4行目乃至第7行目について、図6を参照して具体的に説明する。スタック151は、ローカル(局所)変数などが一時的に記憶される領域であり、例えば、RAM13などに設けられる。各関数の引数やローカル変数は、このスタック151にある取り決めに従って割り当てられ、フレームポインタ(fp)と呼ばれる特定のレジスタに格納されたアドレスを基準にアクセスする。スタック151の右側の「+0,+4,+8」は、フレームポインタ(fp)からのオフセット(変位)を表しており、スタック151の各オフセットの位置(+0,+4,+8」には、それぞれ「a,obj2,x」が格納されている。
したがって、第4行目の「mov r4,obj2(fp);」は、実際には、「mov r4,4(fp);」と示されるものであり、スタック151において、ローカル変数領域にあるフレームポインタ(fp)に4を加えたアドレスにあるobj2(変数)をレジスタr4に入れることを示している。
レジスタr4には、各クラスのv-Tableへのポインタが格納されており、レジスタr4に入力されたobj2(変数)に応じたクラスのv-Tableへのポインタが指定される。v -tableは、各クラスのメソッド(関数)と実際に配置されたアドレスとの対応表のことであり、クラス毎に存在する。すなわち、obj2(変数)に応じてクラスが決まり、決まったクラスのv-Tableのポインタにより、そのv-Table(例えば、クラスBのvTbl-B)が求められる。したがって、第5行目の「mov r2,vTbl(r4);」は、レジスタr2に、レジスタr4のobj2(変数)に応じて決定されたクラスのv-Table(例えば、クラスBのv-Table (vTbl-B))を入れることを示している。
所定のクラスのv-Tableには、各メソッド(関数)の実際のアドレスが格納されている。図6の例の場合、クラスBのv-Table (vTbl-B)には、メソッドFuncA、メソッドFuncB、メソッドFuncC、およびメソッドFuncDのアドレスが格納されている。したがって、第6行目の「mov r2,FuncB(r2);」は、レジスタr2に、レジスタr2のクラスBのv-Table (vTbl-B)が指し示すアドレスにあるメソッドFuncBを入れることを示している。これにより、レジスタr2には、クラスBのメソッドFuncBが格納されるので、クラスBのメソッドFuncBは、第7行目の「call (r2) ;」の命令により呼び出される。
以上のように、第4行目乃至第7行目の処理を行うことにより、CPU11は、変数に応じて求められるクラスBのvTbl-Bから、メソッドFuncBのアドレスに基づいて、メソッドFuncBを呼び出すことができる。
なお、図5の第10行目乃至第13行目も、上述した第4行目乃至第7行目の処理と基本的に同様な処理であり、繰り返しになるのでその詳細な説明を省略する。
図7は、図3の機能構成図を実現するためのプログラムコードの一例を示している。なお、図7は、C++言語を用いた場合の例である。
図7の例においては、図5のプログラムコードの第3行目と第4行目の間および第9行目と第10行目の間に、3つの命令コードがそれぞれ追加されている。
第4行目の「mov r4,obj2(fp);」は、フレームポインタ(fp)が指すobj2(変数)をレジスタr4に入れることを示している。第5行目の「mov r5,#FuncB;」は、レジスタr5に、第3行目において呼び出しが指定されたメソッドの名前(メソッド名)FuncBを入れることを示している。なお、FuncBの前の「#」は、後に続く「FuncB」が(実体ではなく)シンボル値そのもの、すなわち、v-Table上でのFuncBのオフセット値を意味することを示す。第6行目の「call GetMethodStatistics ;」は、「GetMethodStatistics」(メソッド呼び出し統計情報収集プログラム)を呼び出すことを示している。
第13行目の「mov r4,obj3(fp);」は、フレームポインタ(fp)が指すobj3(変数)をレジスタr4に入れることを示している。第14行目の「mov r5,#FuncC;」は、レジスタr5に、第3行目において呼び出しが指定されたメソッドの名前(メソッド名)FuncCを入れることを示している。なお、FuncCの前の「#」は、後に続く「FuncC」が(実体ではなく)シンボル値そのもの、すなわち、v-Table上でのFuncBのオフセット値を意味することを示す。第15行目の「call GetMethodStatistics ;」は、「GetMethodStatistics」(メソッド呼び出し統計情報収集プログラム)を呼び出すことを示している。
すなわち、CPU11は、第6行目および第15行目の「call GetMethodStatistics ;」により、例えば、メソッド呼び出し統計情報収集プログラム記憶部44のメソッド呼び出し統計情報収集プログラムを実行する。これにより、CPU11は、レジスタr4から「クラス名」およびレジスタr5から「メソッド名」を取得することができるので、対応するメソッド呼び出し元記憶テーブル51およびメソッド呼び出し先記憶テーブル52を更新することができる。
以上のように、コンパイラにより実現されるC++言語の場合、メソッド呼び出しを実現する命令1つ1つの直前に、統計情報収集を行うルーチンを呼び出す命令コードが追加されることにより、メソッド呼び出しの度に、メソッド呼び出し統計情報を収集することができる。
なお、これらの命令の追加方法としては、コンパイル後のCPU命令コード列に修正を加え、後処理を行うようにしてもよいし、コンパイラ自体が命令コードを追加するようにしてもよい。
次に、図8のフローチャートを参照して、メソッド呼び出し統計情報収集処理の一例を説明する。ユーザにより入力部16を構成するマウスやキーボードが操作されることにより、開発ソフトウェアの実行が指示される。これに対応して、CPU11は、記憶部18に記憶されている開発ソフトウェアを実行するとともに、メソッド呼び出し統計情報収集プログラム記憶部44のメソッド呼び出し統計情報収集プログラムを実行する。
統計情報収集制御部101は、開発ソフトウェア実行中に、メソッドが呼び出されると、ステップS11において、そのソフトウェアにおいて現在実行中のアクティブメソッドのクラスおよびメソッド名を取得し、ステップS12に進む。例えば、図7の例の場合、統計情報収集制御部101は、クラスBおよびメソッド名「FuncB」を取得する。
統計情報収集制御部101は、ステップS12において、対象クラス取得部102に、アクティブメソッド中において、変数に応じて決定する呼び出しメソッドの対象クラスを取得させ、ステップS13に進む。例えば、図7の例の場合、対象クラス取得部102は、レジスタr4から、obj2(変数)に応じて決定される対象クラスを取得し、統計情報収集制御部101に供給する。
統計情報収集制御部101は、ステップS13において、呼び出しメソッド情報取得部103を制御し、呼び出しメソッドのメソッド名を取得させ、ステップS14に進む。例えば、図7の例の場合、対象クラス取得部102は、レジスタr5から、メソッド名「FuncB」を取得する。
統計情報収集制御部101は、ステップS14において、アクティブメソッドのクラスおよびメソッド名に関連付けられたメソッド呼び出し先記憶テーブル52に、対象クラス取得部102および呼び出しメソッド情報取得部103により取得された呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがあるか否かを判定し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル52に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがないと判定した場合、ステップS15に進み、呼び出し先テーブル更新部104を制御し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル52に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリを追加させ、呼び出し回数をゼロに設定させ、ステップS16に進む。
統計情報収集制御部101は、ステップS14において、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル52に、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリがあると判定した場合、ステップS15をスキップし、ステップS16に進む。
統計情報収集制御部101は、ステップS16において、呼び出し先テーブル更新部104を制御し、アクティブメソッドに関連付けられたメソッド呼び出し先記憶テーブル52の、呼び出しメソッドの対象クラスおよびメソッド名に対応するエントリの呼び出し回数を1回増加させ、ステップS17に進む。
ステップS17において、統計情報収集制御部101は、対象クラス取得部102および呼び出しメソッド情報取得部103により取得された呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあるか否かを判定し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがないと判定した場合、ステップS18に進み、呼び出し元テーブル更新部105を制御し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリを追加させ、呼び出し回数をゼロに設定させ、ステップS19に進む。
ステップS17において、統計情報収集制御部101は、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51に、アクティブメソッドのクラスおよびメソッド名に対応するエントリがあると判定した場合、ステップS18をスキップし、ステップS19に進む。
ステップS19において、統計情報収集制御部101は、呼び出し元テーブル更新部105を制御し、呼び出しメソッドの対象クラスおよびメソッド名に関連付けられたメソッド呼び出し元記憶テーブル51の、アクティブメソッドのクラスおよびメソッド名に対応するエントリの呼び出し回数を1回増加させ、メソッド呼び出し統計情報収集処理を終了する。
以上のようにして、情報処理装置1において開発ソフトウェアが実行される度に、実際に使用されるメソッドの呼び出し統計情報が収集される。なお、上記説明において用いられるメソッド名は、メソッドを識別する数値であってもよい。
次に、図8のメソッド呼び出し統計情報収集処理により収集されたメソッドの呼び出し統計情報を用いる処理を説明する。
図9は、情報処理装置1の機能構成の他の例を示すブロック図である。図9に示される機能ブロックは、情報処理装置1のCPU11により、メソッド参照ブラウザ表示制御プログラム記憶部45のメソッド参照ブラウザ表示制御プログラムが実行されることで実現される。
メソッド参照表示制御部201は、開発ソフトウェアのソースコード編集を行っているユーザが、入力部16を構成するマウスなどを操作することにより、開発ソフトウェア内のメソッドの表示を指示したか否かを判定し、開発ソフトウェア内のメソッドの表示を指示したと判定した場合、メソッド呼び出し先情報取得部202、メソッド呼び出し元情報取得部203、またはメソッド定義取得部204を制御し、指示内容に応じた情報を取得させ、メソッド呼び出し先情報取得部202、メソッド呼び出し元情報取得部203、またはメソッド定義取得部204から取得された情報に基づいた表示情報を生成し、生成した表示情報を、ブラウザとして出力部17を構成するモニタに表示させる。
メソッド呼び出し先情報取得部202は、メソッド参照表示制御部201から指示されたクラスおよびメソッド名に対応するメソッド呼び出し先の情報を、メソッド呼び出し先記憶テーブル52から取得する。メソッド呼び出し元情報取得部203は、メソッド参照表示制御部201から指示されたクラスおよびメソッド名に対応するメソッド呼び出し元の情報を、メソッド呼び出し元記憶テーブル51から取得する。メソッド定義取得部204は、各ブラウザにおいて、メソッド参照表示制御部201から指示されたクラスおよびメソッド名のメソッドの定義情報を、メソッド定義記憶部42から取得する。
次に、図10のフローチャートを参照して、呼び出し先メソッド表示処理を詳しく説明する。ユーザは、入力部16のマウスなどを操作し、開発ソフトウェアの編集を指示する。これに対応して、CPU11は、メソッド参照ブラウザ表示制御プログラム記憶部45のメソッド参照ブラウザ表示制御プログラムを実行するとともに、指示された開発ソフトウェアのソースコード編集ウィンドウを、出力部17のモニタに表示させる。
図11は、モニタに表示されるソースコード編集ウィンドウの例を示している。図11の例においては、ソースコード編集ウィンドウ221には、開発ソフトウェアの一部のソースコードとして、obj1(変数)に応じてメソッドFuncBを呼び出すメソッドであるクラスAのメソッドFuncA「A::FuncA(){… obj1->FuncB();}」、および、obj2(変数)に応じてメソッドFuncBを呼び出し、obj3(変数)に応じてメソッドFuncCを呼び出すメソッドであるクラスBのメソッドFuncB「B::FuncB(){… obj2->FuncB(); obj3->FuncC();}が表示されている。
ユーザは、クラスBのメソッドFuncBにおいて、obj3(変数)に応じて呼び出されるメソッドFuncCの定義を調べるために、ソースコード編集ウィンドウ221に表示されるメソッドFuncC上で、入力部16のマウス(例えば、右ボタン)を操作(矢印P1)し、その操作に応じて表示されるポップアップメニュー231の「メソッド定義表示」を指示(矢印P2)する。
メソッド参照表示制御部201は、図10のステップS31において、メソッド定義表示が指示されるまで待機しており、入力部16を介して、メソッド定義表示が指示されたと判定した場合、ステップS32に進み、メソッド呼び出し先情報取得部202を制御し、指示されたクラスBのメソッドFuncBに関連付けられたメソッド呼び出し先記憶テーブル52から、メソッドFuncCに対応するメソッド呼び出し先の情報を取得させ、ステップS33に進む。
すなわち、上述した図4の例の場合、メソッド呼び出し先情報取得部202は、クラスBのメソッドFuncBに関連付けられたメソッド呼び出し先記憶テーブル52−2から、メソッドFuncCに対応するメソッド呼び出し先の情報として、クラスBのメソッドFuncBがメソッドFuncCに対して呼び出した回数が、クラスDが8回、クラスFが2回、およびクラスEが1回であることを取得し、取得した情報を、メソッド参照表示制御部201に供給する。
ステップS33において、メソッド参照表示制御部201は、メソッドFuncCに対応する呼び出した回数に基づいて、クラス毎に呼び出し回数の割合を求め、呼び出し回数が多いクラス順に、呼び出し先メソッドリストを生成し、呼び出し先メソッドブラウザとして、出力部17のモニタに表示させる。
図12は、呼び出し先メソッドブラウザの例を示している。図12の例においては、呼び出し先メソッドブラウザ241は、メソッドリスト表示部251およびメソッド定義表示部252により構成されている。
メソッドリスト表示部251には、クラスDのメソッドFuncC「D::FuncC()」、クラスFのメソッドFuncC「F::FuncC()」、クラスEのメソッドFuncC「E::FuncC()」、クラスAのメソッドFuncC「A::FuncC()」、クラスBのメソッドFuncC「B::FuncC()」が呼び出し回数の割合の多い順に表示されている。すなわち、メソッドリスト表示部251には、メソッドFuncCの、クラスBのメソッドFuncBが呼び出す可能性のある(候補の)クラスがリスト表示されている。
なお、クラスDの呼び出し回数の割合が72.7%であり、クラスFのメソッドFuncCの呼び出し回数の割合が18.2%であり、クラスEのメソッドFuncCの呼び出し回数の割合が9.0%であるというように、呼び出し回数が数えられている(すなわち、呼び出しの履歴が存在する)クラスのメソッドについては、視認性が向上するように、ボールドのフォントなどで強調表示され、それぞれ呼び出し回数の割合も表示されているが、クラスAのメソッドFuncC、クラスBのメソッドFuncCは、過去の呼び出し回数が数えられていない(呼び出しの履歴が存在しない)ため、細い文字のフォントでアルファベット順に表示されている。
なお、クラスが多く存在する場合には、呼び出し回数が数えられていないクラスのリストは、まとめてその他として表示させ、ユーザがその他を指示することにより、別ウインドウに表示させるようにしてもよい。
ここで、ユーザは、例えば、メソッドリスト表示部251の上から2番目に表示されているクラスFのメソッドFuncC「F::FuncC()」を、入力部16のマウス(例えば、左ボタン)を操作して指示(矢印P3)する。
ステップS34において、メソッド参照表示制御部201は、入力部16を介して、メソッドリスト表示部251のメソッドが指示されたか否かを判定し、メソッドが指示されていないと判定した場合、ステップS35およびS36をスキップし、ステップS37に進む。ステップS34において、メソッドが指示されたと判定された場合、メソッド参照表示制御部201は、ステップS35に進み、メソッド定義取得部204を制御し、入力部16を介して指示されたメソッドの定義情報を、メソッド定義記憶部42から取得させ、ステップS36に進み、取得されたメソッドの定義情報を、メソッド定義表示部252に表示させ、ステップS37に進む。
これにより、呼び出し先メソッドブラウザ241のメソッド定義表示部252には、図12に示されるように、メソッドリスト表示部251において指示されたクラスFのメソッドFuncCの定義情報が表示される。
すなわち、図12のメソッド定義表示部252には、クラスFのメソッドFuncCが、obj4(変数)に応じてメソッドFuncXを呼び出すメソッド「F::FuncC(){… obj4->FuncX();}」であることが示される。
メソッド参照表示制御部201は、ステップS37において、入力部16を介して、ユーザにより終了が指令されたか否かを判定することにより、呼び出し先メソッドブラウザを終了するか否かを判定する。メソッド参照表示制御部201は、ステップS37において、呼び出し先メソッドブラウザを終了しないと判定した場合、ステップS34に戻り、それ以降の処理を繰り返す。メソッド参照表示制御部201は、ステップS37において、呼び出し先メソッドブラウザを終了すると判定した場合、呼び出し先メソッド表示制御処理を終了する。
以上のように、呼び出し先メソッドブラウザにおいて、呼び出し回数の多い順にメソッドリストが表示されるので、ユーザにより実際に呼び出されることが多いメソッドを、ユーザのアクセスしやすい位置に表示させることが可能になり、また、実際に呼び出されることのほどんどないメソッドを、リストの下方やメニュー階層の奥などのアクセスしにくい場所に表示させることが可能となる。したがって、ユーザの開発環境の操作性を向上させることが可能となる。
また、呼び出し回数の割合を表示させることにより、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することが可能となり、ソフトウェアの実行効率を向上させるためのチューニングを支援することができる。
次に、図13のフローチャートを参照して、呼び出し元メソッド表示処理を詳しく説明する。ユーザは、入力部16のマウスなどを操作し、開発ソフトウェアの編集を指示する。これに対応して、CPU11は、メソッド参照ブラウザ表示制御プログラム記憶部45のメソッド参照ブラウザ表示制御プログラムを実行するとともに、指示された開発ソフトウェアのソースコード編集ウィンドウを、出力部17のモニタに表示させる。
図14は、モニタに表示されるソースコード編集ウィンドウの他の例を示している。図14の例においては、ソースコード編集ウィンドウ261には、図11と同様に、開発ソフトウェアの一部のソースコードとして、obj1(変数)に応じてメソッドFuncBを呼び出すメソッドであるクラスAのメソッドFuncA「A::FuncA(){… obj1->FuncB();}」、および、obj2(変数)に応じてメソッドFuncBを呼び出し、obj3(変数)に応じてメソッドFuncCを呼び出すメソッドであるクラスBのメソッドFuncB「B::FuncB(){… obj2->FuncB(); obj3->FuncC();}が表示されている。
ユーザは、クラスBのメソッドFuncBが他のメソッドによりどのように呼び出されているかを調べるために、ソースコード編集ウィンドウ261に表示されるクラスBのメソッドFuncB上で、入力部16のマウス(例えば、右ボタン)を操作(矢印Q1)し、その操作に応じて表示されるポップアップメニュー271の「メソッド呼び出し元表示」を指示(矢印Q2)する。
メソッド参照表示制御部201は、図13のステップS51において、メソッド呼び出し元表示が指示されるまで待機しており、入力部16を介して、メソッド呼び出し元表示が指示されたと判定した場合、ステップS52に進み、メソッド呼び出し元情報取得部203を制御し、指示されたクラスBのメソッドFuncBに対応するメソッド呼び出し元記憶テーブル51から、メソッド呼び出し元の情報を取得させ、ステップS53に進む。
すなわち、上述した図4の例の場合、メソッド呼び出し元情報取得部203は、メソッドFuncBに関連付けられたメソッド呼び出し元記憶テーブル51から、メソッドFuncBに対応するメソッド呼び出し元の情報として、このメソッドFuncBが呼び出された回数が、クラスAのメソッドFuncAから5回、およびクラスFのメソッドFuncGから3回であることを取得し、取得した情報を、メソッド参照表示制御部201に供給する。
ステップS53において、メソッド参照表示制御部201は、メソッドFuncBが呼び出された回数に基づいて、各クラス毎からの呼び出された回数の割合を求め、呼び出された回数が多いメソッド順に、呼び出し元メソッドリストを生成し、呼び出し元メソッドブラウザとして、出力部17のモニタに表示させる。
図15は、呼び出し元メソッドブラウザの一例を示している。図15の例においては、呼び出し元メソッドブラウザ281は、メソッドリスト表示部291およびメソッド定義表示部292により構成されている。
メソッドリスト表示部291には、クラスAのメソッドFuncA「A::FuncA()」、クラスFのメソッドFuncG「F::FuncG()」、クラスBのメソッドFuncE「B::FuncE()」、クラスCのメソッドFuncF「C::FuncF()」、クラスGのメソッドFuncB「G::FuncB()」が呼び出された回数の割合の多い順に表示されている。すなわち、メソッドリスト表示部291には、クラスBのメソッドFuncBを呼び出す可能性のある(候補の)メソッドがリスト表示されている。
なお、クラスAのメソッドFuncAからの呼び出された回数の割合が83.3%であり、クラスFのメソッドFuncGから呼び出された回数の割合が16.6%と示されるように、呼び出され回数が呼び出し回数が数えられている(すなわち、呼び出しの履歴が存在する)ものについては、視認性が向上するように、例えば、ボールドのフォントで強調表示され、それぞれ呼び出された回数の割合が表示される。一方、クラスBのメソッドFuncE、クラスCのメソッドFuncF、および、クラスGのメソッドFuncBは、呼び出された回数が過去の呼び出し回数が数えられていない(呼び出しの履歴が存在しない)ため、細い文字のフォントでアルファベット順に表示されている。
ここで、ユーザは、例えば、メソッドリスト表示部291の上から2番目に表示されているクラスFのメソッドFuncG「F::FuncG()」を、入力部16のマウス(例えば、左ボタン)を操作して指示(矢印Q3)する。
ステップS54において、メソッド参照表示制御部201は、入力部16を介して、メソッドリスト表示部291のメソッドが指示されたか否かを判定し、メソッドが指示されていないと判定した場合、ステップS55およびS56をスキップし、ステップS57に進む。ステップS54において、メソッドが指示されたと判定された場合、ステップS55に進み、メソッド参照表示制御部201は、メソッド定義取得部204を制御し、入力部16を介して指示されたメソッドの定義情報を、メソッド定義記憶部42から取得させ、ステップS56に進み、取得されたメソッドの定義情報を、メソッド定義表示部292に表示させ、ステップS57に進む。
これにより、呼び出し元メソッドブラウザ281のメソッド定義表示部292には、図15に示されるように、メソッドリスト表示部291において指示されたクラスFのメソッドFuncGの定義情報が表示される。
すなわち、メソッド定義表示部292には、クラスFのメソッドFuncGが、obj5(変数)に応じてメソッドFuncBを呼び出したときに、クラスBのメソッドFuncBが呼び出されたこと「F::FuncG(){… obj5->FuncB();}」であることが示されている。なお、メソッド定義表示部292においては、メソッドFuncBの呼び出し元が表示されている場合であるので、クラスFのメソッドFuncGにおいて、「FuncB();」がハッチングにより強調表示されている。
メソッド参照表示制御部201は、ステップS57において、入力部16を介して、ユーザにより終了が指令されたか否かを判定することにより、呼び出し元メソッドブラウザを終了するか否かを判定する。メソッド参照表示制御部201は、ステップS57において、呼び出し元メソッドブラウザを終了しないと判定した場合、ステップS54に戻り、それ以降の処理を繰り返す。メソッド参照表示制御部201は、ステップS57において、呼び出し元メソッドブラウザを終了すると判定した場合、呼び出し元メソッド表示制御処理を終了する。
以上のように、呼び出し元メソッドブラウザにおいて、対象となるメソッドが呼び出された回数の多い順にメソッドリストが表示されるので、実際に対象となるメソッドが呼び出されることが多いメソッドがユーザのアクセスしやすい位置に表示させることが可能となり、一方、実際に対象のメソッドが呼び出されることのないメソッドを、リストの下方やメニュー階層の奥などのアクセスしにくい場所に表示させることが可能となる。したがって、ユーザは、簡単に目的のメソッドを見つけることができるようになり、ユーザの開発環境の操作性を向上させることが可能となる。
また、呼び出され回数の割合を表示させることにより、開発ソフトウェアの実行時統計情報をユーザに付随的に提供することが可能となり、ソフトウェアの実行効率を向上させるためのチューニングを支援することができる。
なお、上記説明においては、ソフトウェア開発環境が扱う開発言語がコンパイラで実現される場合について説明したが、本発明は、開発言語が、コンパイラではなく、例えば、Smalltalk(スモールトーク)言語に代表されるように、仮想マシンにより実現される場合にも適用される。すなわち、仮想マシンにより実現される場合であっても、1つ1つのメソッド呼び出し毎に統計情報収集ルーチンが起動されて、メソッドに関連付けられたメソッド呼び出し統計情報記憶部の各テーブルが更新されるようにしておくようにすることにより、実際に、開発対象プログラムが実行された時点で、コンパイラで実現される場合と同じように、統計情報が生成される。なお、仮想マシン場合には、メソッド呼び出しを行う仮想マシン命令の実装を変更することで統計情報を収集することが可能であり、メソッドの仮想マシン命令コード列自体には修正を追加する必要がないため、その手間が抑制される。
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図1に示されるように、磁気ディスク21(フレキシブルディスクを含む)、光ディスク22(CD-ROM(Compact Disc-Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク23(MD(Mini-Disc)(商標)を含む)、もしくは半導体メモリ24などよりなるパッケージメディア、または、プログラムが一時的もしくは永続的に格納される記憶部18などにより構成される。
なお、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
1 情報処理装置,11 CPU,12 RAM,16 入力部,17 出力部,18 記憶部,42 メソッド定義記憶部,43 メソッド呼び出し統計情報記憶部,44 メソッド呼び出し統計情報収集プログラム記憶部,45 メソッド参照ブラウザ表示制御プログラム記憶部,51 メソッド呼び出し元記憶テーブル,52 メソッド呼び出し先記憶テーブル,101 統計情報収集制御部,102 対象クラス取得部,103 呼び出しメソッド情報取得部,104 呼び出し先テーブル更新部,105 呼び出し元テーブル更新部,201 メソッド参照表示制御部,202 メソッド呼び出し先情報取得部,203 メソッド呼び出し元情報取得部,204 メソッド定義取得部,241 呼び出し先メソッドブラウザ,281 呼び出し元メソッドブラウザ
Claims (7)
- ソフトウェアのソースコードの表示を制御する情報処理装置において、
前記ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、前記第2のメソッドのクラスを取得するクラス情報取得手段と、
前記クラス情報取得手段により取得された前記クラス毎に、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録手段と、
前記ソフトウェアを構成する前記第1のメソッドのソースコードが表示され、前記第1のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記呼び出し情報登録手段により登録された前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報に基づいて、前記第1のメソッドから呼び出される前記第2のメソッドのリスト表示を制御する表示制御手段と
を備えることを特徴とする情報処理装置。 - 前記ソフトウェアを構成する前記第2のメソッドのソースコードが表示され、前記第2のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記表示制御手段は、前記呼び出し情報登録手段により登録された前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報に基づいて、前記第2メソッドを呼び出す前記第1のメソッドのリスト表示を、さらに制御する
ことを特徴とする請求項1に記載の情報処理装置。 - 前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報は、前記第1のメソッドが前記第2のメソッドを呼び出した呼び出し回数であり、
前記表示制御手段は、前記第1のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記第2のメソッドの前記呼び出し回数の多いクラス順に、前記第1のメソッドから呼び出される前記第2のメソッドのリスト表示を制御し、
前記第2のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記第2のメソッドの呼び出し回数の多い順に、前記第2メソッドを呼び出す前記第1のメソッドのリスト表示を制御する
ことを特徴とする請求項2に記載の情報処理装置。 - 前記呼び出し情報登録手段は、
前記第1のメソッドに関連付けて、前記クラス情報取得手段により取得された前記クラス毎に、かつ、前記第1のメソッドからの前記第2のメソッドの呼び出し毎に、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する第1の登録手段と、
前記クラス情報取得手段により取得された前記クラスの前記第2のメソッドに関連付けて、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する第2の登録手段と
を備えることを特徴とする請求項1に記載の情報処理装置。 - ソフトウェアのソースコードの表示を制御する情報処理装置の情報処理方法において、
前記ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、前記第2のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第1のメソッドのソースコードが表示され、前記第1のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報に基づいて、前記第1のメソッドから呼び出される前記第2のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とする情報処理方法。 - ソフトウェアのソースコードの表示を制御する処理をコンピュータに行わせるプログラムが記録されている記録媒体であって、
前記ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、前記第2のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第1のメソッドのソースコードが表示され、前記第1のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報に基づいて、前記第1のメソッドから呼び出される前記第2のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とするプログラムが記録されている記録媒体。 - ソフトウェアのソースコードの表示を制御する処理をコンピュータに行わせるプログラムであって、
前記ソフトウェアを構成する第1のメソッドの実行中に、第2のメソッドが呼び出される場合、前記第2のメソッドのクラスを取得するクラス情報取得ステップと、
前記クラス情報取得ステップの処理により取得された前記クラス毎に、前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報を登録する呼び出し情報登録ステップと、
前記ソフトウェアを構成する前記第1のメソッドのソースコードが表示され、前記第1のメソッドのソースコード上において、前記第2のメソッドが選択された場合、前記呼び出し情報登録ステップの処理により登録された前記第1のメソッドからの前記第2のメソッドの呼び出し統計情報に基づいて、前記第1のメソッドから呼び出される前記第2のメソッドのリスト表示を制御する表示制御ステップと
を含むことを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004143792A JP2005327036A (ja) | 2004-05-13 | 2004-05-13 | 情報処理装置および方法、記録媒体、並びにプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004143792A JP2005327036A (ja) | 2004-05-13 | 2004-05-13 | 情報処理装置および方法、記録媒体、並びにプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005327036A true JP2005327036A (ja) | 2005-11-24 |
Family
ID=35473358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004143792A Withdrawn JP2005327036A (ja) | 2004-05-13 | 2004-05-13 | 情報処理装置および方法、記録媒体、並びにプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2005327036A (ja) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001026883A (ja) * | 1999-07-15 | 2001-01-30 | Canon Inc | 膜形成方法および膜形成装置 |
JP2007241426A (ja) * | 2006-03-06 | 2007-09-20 | Hitachi Software Eng Co Ltd | アプリケーションの障害原因の特定作業支援システム |
JP2011008535A (ja) * | 2009-06-25 | 2011-01-13 | Mitsubishi Electric Corp | ソースコード管理装置 |
JP2012048342A (ja) * | 2010-08-25 | 2012-03-08 | Nec Corp | ライブラリ実行管理システム、ライブラリ実行管理方法およびプログラム |
CN103176905A (zh) * | 2013-04-12 | 2013-06-26 | 北京邮电大学 | 一种缺陷关联方法及装置 |
US8892682B2 (en) | 2008-12-26 | 2014-11-18 | Nec Corporation | Download system, information processing terminal, management device, and method and program used therefor |
JP2014232372A (ja) * | 2013-05-28 | 2014-12-11 | 富士通株式会社 | アプリケーション配信装置、アプリケーション配信方法、アプリケーション配信プログラム、アプリケーション実行装置、アプリケーション実行方法、アプリケーション実行プログラム、及びアプリケーション配信システム |
JP2015005077A (ja) * | 2013-06-20 | 2015-01-08 | 株式会社日立製作所 | 障害情報管理方法、障害情報管理装置及びプログラム |
US9336531B2 (en) | 2009-03-25 | 2016-05-10 | Nec Corporation | Downloading system, and unit, method and program for the same |
-
2004
- 2004-05-13 JP JP2004143792A patent/JP2005327036A/ja not_active Withdrawn
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001026883A (ja) * | 1999-07-15 | 2001-01-30 | Canon Inc | 膜形成方法および膜形成装置 |
JP2007241426A (ja) * | 2006-03-06 | 2007-09-20 | Hitachi Software Eng Co Ltd | アプリケーションの障害原因の特定作業支援システム |
US8892682B2 (en) | 2008-12-26 | 2014-11-18 | Nec Corporation | Download system, information processing terminal, management device, and method and program used therefor |
US9336531B2 (en) | 2009-03-25 | 2016-05-10 | Nec Corporation | Downloading system, and unit, method and program for the same |
JP2011008535A (ja) * | 2009-06-25 | 2011-01-13 | Mitsubishi Electric Corp | ソースコード管理装置 |
JP2012048342A (ja) * | 2010-08-25 | 2012-03-08 | Nec Corp | ライブラリ実行管理システム、ライブラリ実行管理方法およびプログラム |
CN103176905A (zh) * | 2013-04-12 | 2013-06-26 | 北京邮电大学 | 一种缺陷关联方法及装置 |
JP2014232372A (ja) * | 2013-05-28 | 2014-12-11 | 富士通株式会社 | アプリケーション配信装置、アプリケーション配信方法、アプリケーション配信プログラム、アプリケーション実行装置、アプリケーション実行方法、アプリケーション実行プログラム、及びアプリケーション配信システム |
JP2015005077A (ja) * | 2013-06-20 | 2015-01-08 | 株式会社日立製作所 | 障害情報管理方法、障害情報管理装置及びプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6185728B1 (en) | Development system with methods for type-safe delegation of object events to event handlers of other objects | |
EP1643435B1 (en) | An extensible framework for designing workflows | |
US6792595B1 (en) | Source editing in a graphical hierarchical environment | |
US5812847A (en) | Rule-based method for designing user interfaces for applications | |
US8170901B2 (en) | Extensible framework for designing workflows | |
US6314445B1 (en) | Native function calling | |
JPH09101897A (ja) | オブジェクト指向c++言語のソースコードから実行可能コードを生成する方法および装置 | |
JPH02272627A (ja) | デイジタル・コンピユータ・システムとその手続呼び出し方法 | |
JPH06290084A (ja) | 記号定義を再構成する方法と装置及びそれらに使用するコンピュータシステム | |
US20120110560A1 (en) | Data type provider for a web semantic store | |
JP2005327036A (ja) | 情報処理装置および方法、記録媒体、並びにプログラム | |
JP4726519B2 (ja) | 画面定義データ差分抽出方法、装置及びプログラム | |
US6421740B1 (en) | Dynamic error lookup handler hierarchy | |
Biere et al. | The visual task model builder | |
JPH05257669A (ja) | データ処理装置 | |
JP2009048259A (ja) | プログラム変換方法及び変換用プログラム | |
US8745575B2 (en) | Pattern based adminstration of an operation in a component based computing solution | |
JP4925514B2 (ja) | 内外イベントドリブン方式によるプログラム実行制御方法、プログラム、実行制御装置および記録媒体 | |
US8762943B1 (en) | Runtime component hosting | |
Lyu et al. | A procedure-based dynamic software update | |
JP4939007B2 (ja) | システム設計支援プログラム | |
JP5207008B2 (ja) | プログラム再編成システム、及びプログラム再編成方法 | |
Harrison et al. | GANGA: a user-Grid interface for Atlas and LHCb | |
JP2009053767A (ja) | プログラム解析装置、および、プログラム解析方法 | |
JP7380635B2 (ja) | プログラム修正支援装置及びプログラム修正支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20070807 |