(57)【特許請求の範囲】
【請求項１】
プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための装置であって、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部とを備え、
前記別名解析手段が、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部と、を備えたことを特徴とするクロスリファレンス構築装置。
【請求項２】
コンピュータ上に実現された注目関数指定手段、関数間の関係解析手段、別名解析手段連結手段及び出力部を使用して、プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための方法であって、
前記注目関数指定手段により、ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する処理と、
前記関数間の関係解析手段により、指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして記録する処理と、
前記別名解析手段により、注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして記録する処理と、
前記連結手段により、前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する処理と、
前記出力部により、連結手段により登録された各関数と別名をコールグラフとして出力する処理とを備え、
前記別名解析手段が、別名有向グラフ作成部、別名登録部及び別名検索部を備え、前記別名を解析する処理が、
前記別名有向グラフ作成部により、ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する処理と、
前記別名検索部により、別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする処理と、を備えたことを特徴とするクロスリファレンス構築方法。
【請求項３】
プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するためコンピュータを、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部として機能させると共に、
前記別名解析手段を、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部として機能させるためのクロスリファレンス構築プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラムを構成する変数や関数といったシンボルについて、シンボル間の関係を解析し、クロスリファレンスを構築する技術に関するもので、特に、シンボルの別名を解析することにより解析精度を向上させたクロスリファレンス構築装置及びクロスリファレンス構築方法に関する。
【０００２】
【従来の技術】
近年のＩＴ化社会の中で、ＩＴによって提供されるサービスは巨大化、複雑化を増し、それに伴い、ＩＴ化社会を実現するプログラムも巨大化、複雑化している。一方、多くの人や会社がグローバルにＩＴ産業に参入するにつれて、プログラムの開発競争が激化している。
【０００３】
このような状況においては、プログラムの開発を短期間で効率的に行う必要がある。そのためのひとつの方法としては、過去に作成したプログラムや他者（他社）が作成したプログラムを再利用して、新たなプログラムを開発する方法がある。このように既存のプログラムを再利用する場合、既存のプログラムに変更を加えずにそのまま利用する方法と、なんらかの変更を加えて利用する方法とがある。何も変更を加えずに既存のプログラムを利用することができれば簡単であるが、通常は、新しい機能を追加したり、既存の機能を変更（カスタマイズ）するといった処理が必要となる。
【０００４】
このように既存のプログラムを変更するには、変更前にそのプログラムを理解する必要がある。そのためにはそのプログラムの仕様書や設計書を参照してプログラムを理解する必要がある。しかし、仕様書や設計書は、ときにそれらが書かれた後にプログラムが変更され、その記載内容がプログラムと一致していなかったり、仕様書や設計書がそれほど詳細には書かれていなかったりすることもあるため、プログラムを正確に理解するにはプログラムを読む必要がある。
【０００５】
ところが、上述したように、プログラムは巨大化、複雑化しており、プログラムすべてに目を通すことは困難である。そこで、プログラムの変更に必要な個所に絞って検討すれば良いのであれば非常に効率的である。プログラムの変更に必要な個所を知るには、まず、全体的な構成の概要が必要であり、その中で変更したい個所がどこであるのかを見つけ出す必要がある。次に、変更したい個所を変更したときに、どこに影響が及ぶのかを確認する必要がある。そのためには、プログラム中に記述されたシンボルにはどのようなものがあるのか、また、各シンボル間にはどのような関係があるのかをあらかじめ解析し、シンボル間の関係をそのプログラムを再利用しようとするユーザに提示することができる環境が必要である。
【０００６】
【発明が解決しようとする課題】
このようにシンボル間の関係を解析し、クロスリファレンスを構築するための技術としては、従来、プログラムを解析して、プログラムの構成要素であるシンボルを抽出し、抽出したシンボル間の関連を解析するものがあった。このようなクロスリファレンスとしては、例えば、関数呼び出しによる関連を示すコールグラフ／コールドグラフ、関数とグローバル変数の書込みと参照による関連を示す関数とグローバル変数の関連図、あるシンボルからあるシンボルへのデータの受け渡しによる関連を示すデータフロー図等があった。
【０００７】
しかしながら、上記のような従来のクロスリファレンスでは、シンボル間の関係において、同じ実体に対して別の名前が付けられている、いわゆる「別名」についてはなんら考慮されていなかった。そのため、クロスリファレンスの構築にあたって、ポインタ関数やポインタ変数や参照渡しをされた変数等を介して間接的な関連があるシンボル間の関係が欠落してしまう場合があった。
【０００８】
本発明は、上述したような従来技術の問題点を解消するために提案されたものであり、その目的は、シンボル間の関係を提示する際に、別名解析の結果を反映させることにより、より精度の高いクロスリファレンスを構築することができるクロスリファレンス構築装置及びクロスリファレンス構築方法を提供することにある。
【０００９】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、
プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための装置であって、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部とを備え、
前記別名解析手段が、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部と、を備えたことを特徴とする。
【００１０】
また、前記装置により、クロスリファレンスを構築する方法及び前記装置をコンピュータ上に実現するプログラムも本発明の一態様である。
【００１１】
上記のような構成を有する本発明によれば、検索対象となる注目する関数と他の関数との間の関連だけでなく、注目する関数の別名である関数をも考慮して、直接的に関連がある関数だけでなく、間接的に関連がある関数間の関係をも網羅することができるので、より精度の高いクロスリファレンスを構築することができる。
【００１７】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して具体的に説明する。なお、以下に示す実施形態は、クロスリファレンス構築の例としてコールグラフを構築する場合を例としたものである。
【００１８】
なお、以下の実施形態はコンピュータ上に実現され、実施形態の各機能は、所定の手順（プログラム）がこのコンピュータを制御することで実現される。また、本明細書における各手段は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに１対１には対応しない。同一のハードウェア要素が、場合によって異なった手段を構成する。例えば、コンピュータは、ある命令を実行するときにある手段となり、別の命令を実行するときは別の手段となりうる。また、一つの手段が、わずか１命令によって実現さる場合もあれば、多数の命令によって実現される場合もある。したがって、本明細書では、以下、実施形態の各機能を有する仮想的回路ブロック（手段）を想定して実施形態を説明する。また、本実施形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、また、実行ごとに異なった順序で実行してもよい。このような順序の変更は、例えば、ユーザが実行可能な処理を選択するなどメニュー形式のインターフェース手法によって実現することができる。
【００１９】
（１）構成
本実施形態のクロスリファレンス構築装置１には、図１の機能ブロック図に示したように、シンボル間の関係取得部１２が設けられている。このシンボル間の関係取得部１２では、ソースファイル群１１からソースファイルを順次読み込み、既存技術である字句解析、構文解析、意味解析を行うことにより、ソースコードの中から関数や変数といったシンボルを抽出すると共に、関数の宣言と、関数呼び出しを見つけ出し、「どの関数がどの関数を呼んでいるか」という関数の呼び出し関係を取得し、シンボル間の関係図１３として表す。
【００２０】
また、本実施形態のクロスリファレンス構築装置１には、別名有向グラフ作成部１４が設けられている。この別名有向グラフ作成部１４では、ソースファイル群１１からソースファイルを順次読み込み、既存技術である字句解析、構文解析、意味解析を行うことによって、関数や変数といったシンボルについて、あるシンボルが他のどのシンボルと同じメモリ領域を指す可能性があるかを解析し、別名有向グラフ１５として表す。
例えば、図２に示したサンプルプログラムを別名有向グラフに表すと図３に示したようになり、図７に示したサンプルプログラムでは、図９に示すような「別名有向グラフ」が得られる。ただし、いずれの例でも、アークがないノードは省略している。
【００２１】
このように、別名有向グラフ１５では、関数や変数といった各シンボルを一つのノードで表現し、あるシンボルが他のあるシンボルを指す可能性があることを、ノードとノードを結ぶアークで表現する。このアークには向きがあり、指す可能性のあるシンボルから指される可能性のあるシンボルへ向かう場合を「順方向」あるいは「正の方向」といい、その逆を「逆方向」あるいは「負の方向」ということとする。
なお、あるシンボルが他のあるシンボルを指す可能性のある例としては、図４に示したように、ポインタの代入、参照渡しによる代入や仮想関数等があり、同じ実体に対して別の名前が付けられるような、いわゆる「別名」の関係にあることを意味する。
【００２２】
また、本実施形態のクロスリファレンス構築装置１には、表示させたいコールグラフの先頭の関数を指定する注目関数指定部１６と、指定された関数について、上記シンボル間の関係図１３を参照して、「どの関数がどの関数を呼んでいるか」というシンボル間の関係を検索する関係検索部１７と、この関係検索部１７による検索の結果、関数の呼び出し関係があると判断されたシンボルを関係情報データ１８として登録する関係登録部１９とが設けられている。
【００２３】
また、本実施形態のクロスリファレンス構築装置１には、注目関数指定部１６により指定された関数について、上記別名有向グラフ１５を参照して、「検索対象として指定されたシンボルが、どのシンボルと同じメモリ領域を指す可能性があるか」という別名検索を行う別名検索部２０と、この別名検索部２０による検索の結果、別名であると判断されたシンボルを別名情報データ２１として登録する別名登録部２２とが設けられている。
【００２４】
さらに、本実施形態のクロスリファレンス構築装置１には、連結部２３と検索の結果を出力する出力部２４とが設けられている。そして、連結部２３では、上記関係検索部１７により得られた「注目する関数が呼び出している関数」を、その注目する関数と関連づけて結びつけると共に、上記別名検索部２０により得られた「注目する関数の別名」を、その注目する関数と関連付けて結びつける。
【００２５】
なお、本実施形態のクロスリファレンス構築装置１では、ある関数についての一連の検索処理が終了した後、注目するシンボルを、順次、関連するシンボルに替え、後述する処理を繰り返すことにより、コールグラフが構築されるようになっている。
【００２６】
また、上記シンボル間の関係取得部１２、シンボル間の関係図１３、関係検索部１７、関係情報データ１８及び関係登録部１９によって、請求項に示す「シンボル間の関係解析手段」が構成され、別名有向グラフ作成部１４、別名有向グラフ１５、別名検索部２０、別名情報データ２１及び別名登録部２２によって、請求項に示す「別名解析手段」が構成されている。
なお、本実施形態においては、上記別名検索部２０は、別名有向グラフ１５を正の向き（順方向）に検索した後、負の向き（逆方向）に検索するように設定されているものとする。
【００２７】
（２）作用
続いて、上記のような構成を有する本実施形態のクロスリファレンス構築装置におけるコールグラフ作成処理の流れを、図５及び図６に示したフローチャートにより説明する。
【００２８】
（２−１）コールグラフ作成処理
まず、コールグラフの作成の手順を、図５に示したコールグラフ構築のフローチャートを参照して、図７の関数ポインタを用いたサンプルプログラムのコールグラフを構築する例を用いて説明する。
まず、ユーザが注目関数指定部１６を介して指定した注目するシンボルを取得し（ステップ５０１）、このシンボルをコールグラフに追加する（ステップ５０２）。ここでは、“main”を注目するシンボルに指定したと仮定し、“main”をコールグラフに追加する。最初はコールグラフに何も登録されていないので、この場合、“main”がコールグラフの先頭に登録される（図８の左上）。そして、ステップ５０３において、注目していないシンボルがあるか否かが判断され、注目するシンボルを１つ選択する（ステップ５０４）。ここでは、最初なので、注目するシンボルとして“main”が選択される。
【００２９】
次に、シンボル間の関係図１３を参照して、この注目するシンボル“main”が呼び出しているシンボルがあるか否かを検索し、“main”が呼び出している関数として“*fpLocalFunc”が取得される（ステップ５０５）。そこで、この“*fpLocalFunc”を注目するシンボルの下位に、「呼び出しているシンボル」として連結する（ステップ５０６）。その結果、コールグラフとして“*fpLocalFunc”を“main”の下位に登録したものが得られる（図８の右上）。
【００３０】
次に、ステップ５０７で、注目するシンボルに別名があるか否かが判断され、別名がある場合には、後述する別名検索処理（図６のフローチャート）がなされる。一方、注目するシンボルに別名がない場合にはステップ５０３に戻る。ここでは、“main”に対する別名はないので、次の処理に進む。
【００３１】
すなわち、ステップ５０３で、コールグラフを参照し、登録されているシンボルのうち、まだ注目していないシンボルがあるか否かが判断され、注目していないシンボルがある場合には、その中から注目するシンボルを１つ選択し、これを新たに注目するシンボルとする（ステップ５０４）。ここでは、“main”の下位に登録されている“*fpLocalFunc”を次の注目するシンボルとする。
【００３２】
この新たに注目するシンボルとなった“*fpLocalFunc”について、呼び出しているシンボルがあるか否かが判断されるが（ステップ５０５）、この“*fpLocalFunc”には呼び出しているシンボルはないので、そのままステップ５０７に進み、別名があるか否かが判断される。具体的には、この“*fpLocalFunc”が別名有向グラフ１５に登録されているか否かが判断される。ここでは、“*fpLocalFunc”は、別名有向グラフ１５に図９のように示されているので、図６に示す別名検索処理（ステップ５０８）に移行する。
【００３３】
（２−２）別名検索処理
図５のステップ５０７で、今注目しているシンボルに別名があると判断された場合には、図６のフローチャートに示す別名検索処理がなされる。すなわち、まず、別名情報データ２１を空とする（ステップ６０１）。そして、今注目しているシンボルを検索対象シンボルとして取得し（ステップ６０２）、そのシンボル自体を別名情報データ２１として登録する（ステップ６０３）。ここでは、“*fpLocalFunc”を別名情報データ２１として登録する。
【００３４】
次に、別名情報データ２１の中から登録されている別名を１つ選択する（ステップ６０４）。ここでは、すでに別名として登録されているシンボルとして“*fpLocalFunc”が見つかる。その“*fpLocalFunc”について別名有向グラフ（図９）を参照すると、“*fpLocalFunc”から正の向きのアークとして“*func_table”があるので、“*func_table”を別名情報データ２１として追加する（ステップ６０５、ステップ６０６）。
【００３５】
一方、ステップ６０５において、正の向きのアークがないと判断された場合には、そのままステップ６０７に進む。ステップ６０７において、別名情報データ２１として登録されているすべての別名について順方向の検索が終了したか否かが判断され、終了していない場合には、ステップ６０４に戻り、別名情報データ２１の中から未処理の別名を１つ選択し、ステップ６０５〜ステップ６０７を繰り返す。ここでは、すでに別名として“*func_table”が追加されているので、この“*func_table”を選択し（ステップ６０４）、順方向のアークがあるか否かが判断される（ステップ６０５）。
【００３６】
すなわち、別名有向グラフ（図９）を参照すると、“*func_table”からさらに正の向きのアークとして“funcＡ”と“funcＢ”があるので、これらを別名に追加する（ステップ６０５、ステップ６０６）。これ以上、正の向きのアークはないので、そこで正の向きへの検索は終了する（ステップ６０７）。この時点で、別名情報データ２１として登録されたシンボルは、“*fpLocalFunc”、“*func_table”、“funcＡ”、“funcＢ”となる。
【００３７】
このように、ステップ６０７において、別名情報データ２１として登録されているすべての別名について順方向の検索が終了したと判断された場合には、ステップ６０８に進み、逆方向の検索を行う。
すなわち、別名情報データ２１の中から登録されている別名を１つ選択する。この別名について、別名有向グラフ（図９）を参照して、その別名のシンボルから負の向き（逆方向）のアークがあるか否かを判断し（ステップ６０９）、負の向きのアークがあれば、アークの先（アークの基端部）にあるノードのシンボルをすべて別名として別名情報データ２１に追加し（ステップ６１０）、ステップ６１１に進む。一方、ステップ６０９において、負の向きのアークがないと判断された場合には、そのままステップ６１１に進む。ここでは、別名有向グラフ（図９）に示すように負の向きのアークはないので、そのままステップ６１１に進む。
【００３８】
ステップ６１１において、別名情報データ２１として登録されているすべての別名について逆方向の検索が終了したか否かが判断され、終了していない場合には、ステップ６０８に戻り、別名情報データ２１の中から未処理の別名を１つ選択し、ステップ６０９〜ステップ６１１を繰り返す。一方、ステップ６１１において、別名情報データ２１として登録されているすべての別名について逆方向の検索が終了したと判断された場合には、その検索対象シンボルについての別名検索処理を終了し、図５のステップ５０９に戻る。
【００３９】
そして、ステップ５０９において、コールグラフの注目するシンボルの下位に、別名のシンボルを連結する。ここでは、注目するシンボルである“*fpLocalFunc”には、別名として“*func_table”、“funcＡ”、“funcＢ”が得られるので、これらのシンボルを“*fpLocalFunc”の下位に連結する（図８の左下）。
【００４０】
続いて、ステップ５０３に戻り、注目していないシンボルがあるか否か、言い換えれば検索がすべて終了したか否かが判断され、注目していないシンボルがなくなるまで、ステップ５０４〜ステップ５０９の処理が繰り返される。
そして、以上のようなコールグラフ作成処理及び別名検索処理がすべて終了すると、図８の右下に示したような、別名情報を加味したコールグラフが完成する。なお、図８では、「別名」を「関数呼び出し」と区別するために、別名により登録したシンボルについては、シンボル名の前に“≒”を付加している。
【００４１】
（２−３）別名検索の具体例
上記の実施形態では、別名検索処理において負の向きの検索がなされていないので、図３に示した別名有向グラフを例にして、図６に示した別名検索処理の流れをより詳細に説明する。
【００４２】
仮に、注目関数指定部１６により“ｐ”が指定されたとする（ステップ６０２）。まず、“ｐ”自身を別名に登録する（ステップ６０３）。次に、正の向きに検索を行うので、ステップ６０４に進み、別名情報データ２１の中から、すでに別名として登録されているシンボルとして“ｐ”が見つかる（ステップ６０４）。その“ｐ”について別名有向グラフ（図３）を参照すると、“ｐ”から正の向きのアークとして“ａ”があるので、“ａ”を別名に追加する（ステップ６０５、ステップ６０６）。
【００４３】
次に、別名有向グラフ（図３）を参照すると、“ａ”から正の向きのアークはないので、そこで正の向きへの検索は終了する。この時点で別名情報データ２１として登録されたシンボルは、“ｐ”と“ａ”となる。
次に、負の向きに検索を行う。別名情報データ２１を参照し、すでに別名として登録されているシンボル“ｐ”、“ａ”からまず“ｐ”を取り出す。別名有向グラフ（図３）を参照して、“ｐ”に向かうアークを負の向きに進むと“ｒ”を得るので、“ｒ”を別名に追加する。“ｒ”から負の向きに進むアークはないので、終了する。
【００４４】
同様に、別名情報データ２１を参照し、すでに別名として登録されているシンボルとして“ａ”を取り出す。“ａ”からアークを負の向きに進むと“ｐ”と“ｑ”があるが、“ｐ”はすでに登録されているので、“ｑ”だけを登録する。“ｑ”へ向かうアークはないので、別名検索は終了する。
その結果、“ｐ”の別名として、“ｐ、ｒ、ａ、ｑ”が得られる。ここで、“ｐ、ｒ、ａ、ｑ”はポインタが“ｐ”と同じ実体を指す可能性がある集合であるが、“ｐ”は取得されたシンボル自身であるので、別名から除いてもよい。
【００４５】
（３）効果
上述したように、本実施形態のクロスリファレンス構築装置によれば、関数間の関連だけでなく、別名をも考慮して間接的な関連があるシンボル間の関係を網羅することができるので、より精度の高いクロスリファレンスを構築することができる。
【００４６】
（４）他の実施形態
本発明は、上述した実施形態に限定されるものではなく、コールグラフを表示する場合に、階層数を限定することも可能である。また、図８の右下に示した完成したコールグラフにおいて、別名である“funcＡ”の下にぶら下がっている“printf ( )”を改めて先頭シンボルに指定することにより、注目するシンボルを取得して、再度分析を行うことができることは言うまでもない。
【００４７】
なお、表示する階層数を限定した場合には、その下にも関連する階層があること、例えばprintf ( )の下に更に関連するシンボルがあること、あるいは、表示したシンボルに別名があること、例えばprintf ( )に別名があることを、マークや色、その他の表示方法を用いて表現することもできる。その場合、表示されたシンボルをクリック（指示）することにより、表示を切り替えて、下の階層や別名を表示させることも可能である。
【００４８】
【発明の効果】
以上のように、本発明によれば、シンボル間の関係を提示する際に、別名解析の結果を反映させることにより、より精度の高いクロスリファレンスを構築することができるクロスリファレンス構築装置及びクロスリファレンス構築方法を提供することができる。
【図面の簡単な説明】
【図１】本発明のクロスリファレンス構築装置の一つの実施形態の構成を示す機能ブロック図
【図２】別名解析の実施形態を説明するためのサンプルプログラム
【図３】図２のサンプルプログラムについて作成された別名有向グラフ
【図４】「別名」の関係にあるシンボルの例を示す図
【図５】本発明のクロスリファレンス構築装置におけるコールグラフ作成処理の流れを示すフローチャート
【図６】本発明のクロスリファレンス構築装置における別名検索処理の流れを示すフローチャート
【図７】実施形態を説明するためのサンプルプログラム
【図８】図７のサンプルプログラムに基づいて得られたコールグラフ
【図９】図７のサンプルプログラムについて作成された別名有向グラフ
【符号の説明】
１…クロスリファレンス構築装置
１１…ソースファイル群
１２…シンボル間の関係取得部
１３…シンボル間の関係図
１４…別名有向グラフ作成部
１５…別名有向グラフ
１６…注目関数指定部
１７…関係検索部
１８…関係情報データ
１９…関係登録部
２０…別名検索部
２１…別名情報データ
２２…別名登録部
２３…連結部
２４…出力部
【図１】
0003887550.tif 000002
【図２】
0003887550.tif 000003
【図３】
0003887550.tif 000004
【図４】
0003887550.tif 000005
【図５】
0003887550.tif 000006
【図６】
0003887550.tif 000007
【図７】
0003887550.tif 000008
【図８】
0003887550.tif 000009
【図９】
0003887550.tif 000010