(57)【要約】【課題】  オブジェクト指向プログラムを視覚化して保守、再利用のための理解を助ける。【解決手段】  オブジェクトを検出しノードとして表示エリア内に表示する制御を行うノード制御部２２を備え、作成されるノードごとにデータ蓄積部、評価部、知覚部、ルール部、行為部が対応付けて形成され、データ蓄積部２２ｉは、自己ノードに関する情報および自己ノードと関連のある他のノードに関する情報を蓄積し、評価部２４ｉは、自己ノードと自己ノードと関連のある他のノードとの距離に基づいて評価値を算出し、知覚部２５ｉは、自己ノード付近の表示エリア情報、表示エリア内にある他のノード全体の情報を取得し、ルール部２６ｉは、評価値に基づいて自己ノードの移動ルールを決定し、行為部２７ｉは、知覚部で取得した情報、ルール部で決定したルールに基づいて自己ノードの位置を定めて移動し、各ノードは逐次移動を繰り返すようにして表示画面上の位置を更新する。【選択図】図１
2007323446.tif 000002
【特許請求の範囲】
【請求項１】
トレース対象のオブジェクト指向プログラムを実行するプログラム実行部と、実行中に生成されるオブジェクトを検出し、ノードとして表示画面の表示エリア内に表示する制御を行うノード制御部を備えたオブジェクト指向プログラム視覚化装置であって、
ノード制御部は、作成されるノードごとにデータ蓄積部、評価部、知覚部、ルール部、行為部を対応付けて形成し、
データ蓄積部は、位置情報を含む自己ノードに関する情報および自己ノードと他のノードとの関連性の判断基準に関する関連性基準情報を蓄積し、  
知覚部は、自己ノード付近の表示エリア情報、および、表示エリア内にある他のノードに関する情報を取得し、
評価部は、自己ノードと自己ノードと関連のある他のノードとの距離に基づいて評価値を算出し、
ルール部は、評価値に基づいて自己ノードの移動ルールを決定し、
行為部は、知覚部で取得した情報、および、ルール部で決定した移動ルールに基づいて自己ノードの位置を定めて移動し、
各ノードは逐次移動を繰り返すようにして表示画面上の位置を更新することを特徴とするオブジェクト指向プログラム視覚化装置。
【請求項２】
行為部は、オブジェクト間でのメッセージをノード間のリンクとして表示することを特徴とする請求項１に記載のオブジェクト指向プログラム視覚化装置。
【請求項３】
ルール部は、移動ルールとして、重心位置情報および関連のある他のノードの位置情報とに基づいて移動ルールを決定することを特徴とする請求項１に記載のオブジェクト指向プログラム視覚化装置。
【請求項４】
評価部は、関連のある他のノードとの距離の総和に基づいて、評価値を定めることを特徴とする請求項１に記載のオブジェクト指向プログラム視覚化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行中のオブジェクト指向プログラムをトレースして画面に表示するオブジェクト指向プログラム視覚化装置に関する。
【背景技術】
【０００２】
近年、コンピュータは種々の分野で用いられている。コンピュータを実質的に動かしているのはソフトウェアであるが、そのソフトウェアには、ますます高性能で高信頼性のある大規模なソフトウェアの開発が求められている。その一方で、新規開発だけではなく、ソフトウェアの保守や再利用を活発に行うことも注目されている。
【０００３】
開発中のプログラムのデバッグを始め、プログラムの保守、再利用を行うには、プログラムの理解が必要であるが、プログラムを理解するには多大な時間やコストが必要となる。
例えば、ソフトウェアの保守は、稼動後の修正であり、バグ修正、顧客からの変更要求、システムのグレードアップ等の事由により行われる。保守期間が長期化すると、担当者が何度も交代し、しだいにプログラムの理解が困難になってくる。このような状況から、オブジェクト指向に基づくプログラムが、柔軟な構造を有しているがゆえに、ソフトウェアの信頼性、再利用性、保守性を高めるものとして、注目されている。
【０００４】
すなわち、オブジェクト指向プログラムは、同じメッセージを受け取ったとしても、オブジェクトによって振る舞いが異なるよう定義できる（多態性）。また、メッセージと振る舞いとの結び付きがコンパイル時ではなく、稼動時に動的に決定される（動的結合）。このような特徴によって、プログラムの柔軟性を高め、保守、再利用が容易に行えるようにしている。
【０００５】
反面、これらの特徴は、メッセージと振る舞いとの関係をソースコードから抽出することを困難にし、プログラムの動きをわかりにくくしている。オブジェクト指向プログラムの理解のためには、稼働中に実行内容をトレースし、トレース結果をわかりやすく表現（視覚化）することが望まれる。
【０００６】
このような課題を解決するために、プログラムの試験（トレース）の際に、オブジェクトの生成、消去、オブジェクト間でやりとりされるメッセージを確認でき、オブジェクトの動作を確認できるようにしたプログラム試験方法が開示されている（特許文献１参照）。
この文献によれば、プログラム動作時のオブジェクトの生成および消去、オブジェクト間のメッセージのやりとりが確認でき、視覚による認識性が高まり、プログラム試験効率が向上するという効果を奏している。
【特許文献１】特開平２−２１１５５３号
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記特許文献１に記載の方法では、試験対象（トレース対象）となるソースプログラム中にオブジェクトを生成するメッセージがあるごとに、表示部に所定の図形を表示オブジェクト（ノード）として表示し、以後、同様の動作を繰り返して、表示部に表示オブジェクト（ノード）を次々と表示する。
この場合、ソースプログラムが大規模である場合に、表示オブジェクトの数が増加すると、やがて、レイアウトの問題で、表示部に表示できない事態が発生する。予め、全プログラムを動作して、すべてのオブジェクトを把握した上で表示位置を決定することが考えられるが、膨大な計算が必要であり、処理時間を要し、結果を得るまでに多大な待ち時間を必要とし，表現できたとしても理解が困難であるため現実的ではない。
【０００８】
そこで、本発明は、オブジェクト指向プログラムをトレースする際に、たとえ大規模プログラムであっても、プログラムの進行に応じて、画面上にノードが適切に配置されるようにして、常に、プログラムの状況を把握できる表示形態をとるようにしたオブジェクト指向プログラム視覚化装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するためになされた本発明のオブジェクト指向プログラム視覚化装置は、  トレース対象のオブジェクト指向プログラムを実行するプログラム実行部と、実行中に生成されるオブジェクトを検出し、ノードとして表示画面の表示エリア内に表示する制御を行うノード制御部を備えたオブジェクト指向プログラム視覚化装置であって、ノード制御部は、作成されるノードごとにデータ蓄積部、評価部、知覚部、ルール部、行為部を対応付けて形成し、データ蓄積部は、位置情報を含む自己ノードに関する情報および自己ノードと他のノードとの関連性の判断基準に関する関連性基準情報を蓄積し、知覚部は、自己ノード付近の表示エリア情報、および、表示エリア内にある他のノードに関する情報を取得し、評価部は、自己ノードと自己ノードと関連のある他のノードとの距離に基づいて評価値を算出し、ルール部は、評価値に基づいて自己ノードの移動ルールを決定し、行為部は、知覚部で取得した情報、および、ルール部で決定した移動ルールに基づいて自己ノードの位置を定めて移動し、各ノードは逐次移動を繰り返すようにして表示画面上の位置を更新するようにしている。
【００１０】
本発明によれば、プログラム実行部が、オブジェクト指向プログラムを実行し、実行中にオブジェクトが生成されると、ノード制御部がこれを検出し、表示画面にノードと呼ぶ表示画面上の単位が生成される。ノードは、オブジェクトを表示画面上で表現するものであり、行動の単位となるのでノードエージェントともいう。ノード制御部は、各ノードに対応して、それぞれデータ部、評価部、知覚部、ルール部、行為部を形成する。これらにより画面上の位置が定められるとともに逐次更新される。
【００１１】
すなわち、各ノードは、それぞれ、データ蓄積部が位置情報を含む自己ノードに関する情報、および、自己ノードと他のノードとの関連性の判断基準に関する関連性基準情報を蓄積する。知覚部は、自己ノード付近の表示エリア情報、および、表示エリア内にある他のノードに関する情報を取得する。取得される他のノードに関する情報には、他のノードの位置情報や関連性基準情報が含まれる。これらにより他のノードと自己ノードとの関連を把握できるようになる。また、自己付近の表示エリアの情報についても把握する。評価部は関連する他のノードと自己ノードとの距離から自己ノードと他のノードとの位置関係を評価した値である評価値を算出する。ルール部は、評価値に基づいて移動ルールを決定し、行為部は、知覚部で取得した情報、および、ルール部で決定したルールに基づいて画像エリア内での自己ノードの位置を定めて移動する。各ノードは逐次移動を繰り返すようにして表示画面上の位置を更新する。
【発明の効果】
【００１２】
本発明によれば、オブジェクトに対応して作成された各ノード（ノードエージェント）は、表示エリア情報および他のノード（ノードエージェント）の情報に基づいて、自分の持つルールに従って、より良い位置を探りながら移動することにより、プログラムの進行状況に応じて、逐次位置の更新を行うので、常に、関連性の高いノードを近くに集めて，かつ表示エリアの全体にわたってノードを適切に配置させることができる。
【００１３】
（他の課題を解決するための手段および効果）
行為部は、オブジェクト間でのメッセージをノード間のリンクとして表示するようにしてもよい。これにより、ノード間（すなわちオブジェクト間）でやりとりされるメッセージについても確認することができる。
【００１４】
ルール部は、移動ルールとして、重心位置情報および関連のある他のノードの位置情報とに基づいて移動ルールを決定するようにしてもよい。これにより、表示エリア内でノードをバランスよく配置させることができる。また、近づきすぎてノードが重ならないようにするため、ある程度以上近くなると反発させて見やすい位置に配置させることもできる。
【００１５】
評価部は、関連のある他のノードとの距離の総和に基づいて、評価値を定めるようにしてもよい。これにより、ノードどうしの距離に対応して、ノードどうしの関連性を評価することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の一実施形態について、図面を用いて説明する。なお、本発明は、以下に説明する実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々の態様が含まれることは言うまでもない。
【００１７】
図１は、本発明の一実施形態であるオブジェクト指向プログラム視覚化装置の構成を示すブロック構成図である。
オブジェクト指向プログラム視覚化装置１０は、入力装置１１、表示装置１２、ＣＰＵ１３（コンピュータ装置本体）、メモリ１４を備えたコンピュータ装置２０からなるハードウェア構成を備えている。
【００１８】
入力装置１１は、トレース対象のオブジェクト指向プログラムをロードすることができるものであり、例えば、記憶媒体（フロッピディスク、ＣＤ、ＤＶＤ）に書き込まれたプログラムを読み取る読み取り装置であったり、ネットワーク回線を通じてプログラムを取り込むネットワーク機器（インタフェース機器を含む）であったりする。
【００１９】
表示装置１２は、各種の情報を、画面上の表示エリアに表示する液晶パネル等の表示機器である。本発明に関連しては、後述するＣＰＵ（コンピュータ装置本体）の制御の下で、表示画面上のひとつの表示エリア（ウインドウ画面）にノードが表示される。
【００２０】
ＣＰＵ１３は、オブジェクト指向プログラム視覚化装置１０全体の制御を行い、プログラムに基づいて各種機能の制御を行う。
メモリ１４は、大容量の外部ＨＤＤ、および、内蔵メモリからなり、プログラムを記憶したり各種データを記憶したりするとともに、ＣＰＵ１３による制御や演算を実行する際に、作業領域として作動する。
【００２１】
また、ＣＰＵ１３およびメモリ１４により本発明と関連して実現される機能を説明するため、これら機能をブロック化して説明すると、ＣＰＵ１３は、プログラム実行部２１、ノード制御部２２とを有し、メモリ１４は、トレース対象プログラムローディング領域３１とデータ蓄積領域３２とを有する。
【００２２】
このうちプログラム実行部２１は、入力装置１１からトレース対象プログラムローディング領域３１にロードされたトレース対象のオブジェクト指向プログラムを実行する。
【００２３】
また、ノード制御部２２は、複数のノードがある場合に並列処理が可能にしてある。すなわちノードごとに、ノードエージェントとして、個別に制御が行われる。これは機能上、ノードごとに制御部があることとして扱うことができるので、ノード制御部２２は、各ノード（ノード１、ノード２、・・・ノードｉ、・・・）ごとに対応する制御部であるノード１制御部２２１、ノード２制御部２２２、・・・、ノードｉ制御部２２ｉ、・・・を有し、さらにこれら全体をまとめて制御するものとして機能する。
【００２４】
ノード１制御部２２１、ノード２制御部２２２、・・・、ノードｉ制御部２２ｉ、・・・のそれぞれは、さらに機能ごとに説明すると、データ蓄積部２３１、２３２、・・、２３ｉ、・・評価部２４１、２４２、・・、２４ｉ、・・、知覚部２５１、２５２、・・、２５ｉ、・・、ルール部２６１、２６２、・・、２６ｉ、・・、行為部２７１、２７２、・・、２７ｉ、・・、とにより構成される。
【００２５】
データ蓄積部２３１、２３２、・・、２３ｉは、それぞれが自己ノードに関する情報と、自己ノードと関連のある他のノードに関する情報を、後述するデータ蓄積領域３２（自己ノードがノードｉであればノードｉデータ領域３２ｉ）に蓄積する処理を行う。具体的には  自己ノードに関する情報として、表示エリア内の位置座標（新しく生成されたノードの初期位置は例えば画面中央にする）を蓄積し、自己ノードと他のノードとの関連性の基準となる情報（関連性基準情報）として、自己ノードを生成した親ノードや、受け取ったメッセージの送付先に対応するオブジェクトのクラス情報を蓄積する。すなわち、オブジェクトどうしの関連性をクラス情報で判断することとし、また、オブジェクトの大きさ、形、種類等の属性情報が関連する他のノードとして蓄積されるようにしてもよい。なお、これらの情報は、後述する知覚部により新たな情報が取得されるごとに更新される。
【００２６】
知覚部２５１、２５２、・・、２５ｉ、・・は、他のノードのデータ蓄積領域３２（自己ノードがノードｉのときはノードｉデータ領域３２ｉ以外のデータ領域）から蓄積情報を読み取り、他のノードと自己ノードとの関連性、他のノードの位置情報等を把握する。また、自己ノードの位置座標付近の表示エリアの情報（表示エリアの端部までの距離）についても把握する。具体的には、例えばノード２２１、２２２、２２３が存在するときに、ノード２２１の知覚部２５１は、ノード２２２、２２３のデータ蓄積領域３２２、３２３に蓄積されているクラス情報を参照して、自己ノード２２１のクラス情報に含まれているかを判定することにより、関連性の有無を判断する。
【００２７】
評価部２４１、２４２、・・、２４ｉ、・・は、関連する他のノードと自己ノードとの距離から自己ノードと他のノードとの位置関係を評価した値である評価値を算出する。
評価値の算出は、自己ノードと関連がある他のノードとの距離が近いと評価を高くする。具体的には自己ノードと関連する他のノード（関連する他のノードは複数であってもよい）との位置座標を抽出し、関連する他のノードと自己ノードとの距離の総和が小さい時に、評価が高くなるように設定する。算出された評価値は対応するノードのデータ蓄積領域３２に蓄積される。
【００２８】
ルール部２６１、２６２、・・、２６ｉ、・・は、評価値に基づいて自己ノードの移動ルールを決定する。
ルールは、（Ａ）表示エリア内でノードがバランスよく配置され、（Ｂ）関連があるものが近くに集まることを目標として作成される。
そのため、（Ａ）については指標としてノードの重心を考慮し、さらに、（Ｂ）についてはノードのうち関連するものの代表をリーダ（仲間）として、リーダの位置を考慮する。リーダは、例えば、同じクラスの中で最初に出現したノードをリーダとすればよい。
具体的には、例えば以下のルールにより、目標を達成する。
【００２９】
（１）各ノードの位置座標から重心を算出し、さらに、関連があるノードの１つであるリーダの位置座標を得る。
（２）重心を満たす方向ベクトル（Ｇ１）と、リーダのいる方向ベクトル（Ｇ２）とを計算し、次式の方向ベクトル（Ｇ）を移動方向と設定する。移動距離は、３段階で設定する。
（Ｇ）＝α・（Ｇ１）＋（１−α）・（Ｇ２）
ここで、αは０≦α≦１であり、１に近ければ重心を重視し、０に近ければリーダを重視することになる。
（３）移動により、他のノードのテリトリと衝突すると、反発する。このテリトリはすべてのノードに対して一定の範囲を定めておくか、ノードごとに情報としてノード蓄積領域３２に設定しておく。また、自己ノードと関連のあるノードでは移動距離を小さくし、関連のないノードであるときは移動距離を大きくする。画像エリアの外枠に衝突するときも反発する。
（４）前回の評価値と今回の評価値との差が予め設定した閾値よりも小さければ、移動を停止する。評価値が前回よりも大きくなっていればαの値を増加させ、小さくなっていればαの値を減少させる。
【００３０】
行為部２７１、２７２、・・、２７ｉは、知覚部で取得した情報、および、ルール部で決定したルールに基づいて自己ノードの位置を定めて移動する制御を行う。
【００３１】
トレース対象プログラムローディング領域３１は、トレース対象のオブジェクト指向プログラムをロードしたときに、これを蓄積する。
データ蓄積領域３２は、ノードごとにそれぞれ必要な情報を蓄積するとともに演算作業領域として使用される領域であり、ノード１にはノード１データ領域３２１、ノード２にはノード２データ領域３２２、・・・、ノードｉにはノードｉデータ領域３２ｉ、・・・が対応する。
【００３２】
次に、本発明の動作について説明する。図２は、オブジェクト指向プログラム視覚化装置１０による動作を説明するためのフローチャートである。
入力装置１１からトレース対象となるオブジェクト指向プログラムを読み込んで、トレース対象プログラムローディング領域３１にロードする（Ｓ１０１）。このとき、ノード制御部２２により、図３に示すように、トレース対象プログラム（ソースプログラム）の先頭部分に、トレーサプログラムをコンパイルする前処理を行われる。トレーサプログラムは、対象プログラムにおいてデータ更新の原因となるコンストラクタ、メソッド、ファイナライズ、例外処理の呼び出しイベントがある場合に、これを通知するものである。
【００３３】
キーボード（不図示）からスタート入力を行うことにより、ロードされている対象プログラムがスタートされる（Ｓ１０２）。
【００３４】
プログラムがスタートされることにより、イベントの発生を検出し（Ｓ１０３）、イベント発生に対応してデータが更新される（Ｓ１０４）。例えば図１の表示装置１２に示すように、すでにノードＮ１、ノードＮ２が存在しており、ノードＮ１から他のノードＮ２へメッセージが送られるときは、メッセージが送られることを検出し、これを表示装置上で、リンクＭ１，２にて示す。リンクの表示は、メッセージの方向を示すために矢印で示すようにしてもよい。
【００３５】
ノード制御部２２により、オブジェクトの検出がなされる。オブジェクトの発生がなかったときは、Ｓ１０８に飛び、発生したときはＳ１０６に進む（Ｓ１０５）。
【００３６】
オブジェクトの発生があったときは、新しくノード（例えばＮｉとする）を生成し（Ｓ１０６）、画像エリアＳ内に表示する（最初は中央に表示）。新しく作成したノード（Ｎｉ）のノード制御部（２２ｉ）は、データ蓄積部（２３ｉ）により自己ノードに関する情報として自己の位置座標、および、自己ノードと関連のある他のノードに関する情報としてクラス情報を、データ蓄積領域（例えば３２ｉ）に蓄積する（Ｓ１０７）。
【００３７】
各ノードは、それぞれの知覚部（２５ｉ等）により、他のノードの情報（位置情報、クラス情報等）、表示エリア情報（自己ノードの位置座標近傍のエリア端の位置情報）を読み取り、データ蓄積領域（３２ｉ等）に蓄積する（ｓ１０８）。
【００３８】
各ノードは、それぞれの評価部（２４ｉ等）により、読み取った他のノードの位置情報と自己ノードの位置情報により求めた距離に基づいて評価値を算出する（ｓ１０９）。
【００３９】
各ノードは、それぞれのルール部（２６ｉ等）により、算出した評価値に基づいて移動ルールを決定する（ｓ１１０）。
【００４０】
各ノードは、それぞれの行為部（２７ｉ等）により、知覚部で取得した情報、および、ルール部で決定したルールに基づいて、画像エリア内での自己ノードの位置を定めて移動する（ｓ１１１）。
【００４１】
なお、Ｓ１０８からＳ１１１までの処理は、各ノードが並列的に処理を実行するのが好ましいが、ひとつひとつのノードが順次処理を行うようにしてもよい。
【００４２】
以上、一連の動作が終了すると、再びＳ１０３に戻り、同様の処理を繰り返す。
図４は、表示装置１２の１つの表示エリアに表示されたノードおよびリンクを示す図である。１つのオブジェクトが発生するごとにノードが発生し、１つのメッセージが送られるごとにリンクが発生する。
【産業上の利用可能性】
【００４３】
本発明は、オブジェクト指向プログラムの保守、再利用を行う際に、プログラムをトレースして理解するためのオブジェクト指向プログラム視覚化装置に利用することができる。
【図面の簡単な説明】
【００４４】
【図１】本発明の一実施形態であるオブジェクト指向プログラム視覚化装置の構成を示すブロック図。
【図２】本発明の一実施形態である動作を説明するフローチャート。
【図３】本発明で用いられるトレースプログラムの例を説明する図。
【図４】本発明を実施した結果であるノード配置図。
【符号の説明】
【００４５】
１０：  オブジェクト指向プログラム視覚化装置
１１：  入力装置
１２：  表示装置
１３：  ＣＰＵ
１４：  メモリ
２１：  プログラム実行部
２２：  ノード制御部
２２ｉ：  ノードｉ制御部
２３ｉ：  データ蓄積部
２４ｉ：  評価部
２５ｉ：  知覚部
２６ｉ：  ルール部
２７ｉ：  行為部
３１：  トレース対象プログラムローディング領域
３２：  データ蓄積領域
【図１】
2007323446.tif 000003
【図２】
2007323446.tif 000004
【図３】
2007323446.tif 000005
【図４】
2007323446.tif 000006