JP3887550B2 - クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム - Google Patents
クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム Download PDFInfo
- Publication number
- JP3887550B2 JP3887550B2 JP2001224416A JP2001224416A JP3887550B2 JP 3887550 B2 JP3887550 B2 JP 3887550B2 JP 2001224416 A JP2001224416 A JP 2001224416A JP 2001224416 A JP2001224416 A JP 2001224416A JP 3887550 B2 JP3887550 B2 JP 3887550B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- alias
- interest
- functions
- program
- 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
Images
Landscapes
- Stored Programmes (AREA)
Description
【発明の属する技術分野】
本発明は、プログラムを構成する変数や関数といったシンボルについて、シンボル間の関係を解析し、クロスリファレンスを構築する技術に関するもので、特に、シンボルの別名を解析することにより解析精度を向上させたクロスリファレンス構築装置及びクロスリファレンス構築方法に関する。
【0002】
【従来の技術】
近年のIT化社会の中で、ITによって提供されるサービスは巨大化、複雑化を増し、それに伴い、IT化社会を実現するプログラムも巨大化、複雑化している。一方、多くの人や会社がグローバルにIT産業に参入するにつれて、プログラムの開発競争が激化している。
【0003】
このような状況においては、プログラムの開発を短期間で効率的に行う必要がある。そのためのひとつの方法としては、過去に作成したプログラムや他者(他社)が作成したプログラムを再利用して、新たなプログラムを開発する方法がある。このように既存のプログラムを再利用する場合、既存のプログラムに変更を加えずにそのまま利用する方法と、なんらかの変更を加えて利用する方法とがある。何も変更を加えずに既存のプログラムを利用することができれば簡単であるが、通常は、新しい機能を追加したり、既存の機能を変更(カスタマイズ)するといった処理が必要となる。
【0004】
このように既存のプログラムを変更するには、変更前にそのプログラムを理解する必要がある。そのためにはそのプログラムの仕様書や設計書を参照してプログラムを理解する必要がある。しかし、仕様書や設計書は、ときにそれらが書かれた後にプログラムが変更され、その記載内容がプログラムと一致していなかったり、仕様書や設計書がそれほど詳細には書かれていなかったりすることもあるため、プログラムを正確に理解するにはプログラムを読む必要がある。
【0005】
ところが、上述したように、プログラムは巨大化、複雑化しており、プログラムすべてに目を通すことは困難である。そこで、プログラムの変更に必要な個所に絞って検討すれば良いのであれば非常に効率的である。プログラムの変更に必要な個所を知るには、まず、全体的な構成の概要が必要であり、その中で変更したい個所がどこであるのかを見つけ出す必要がある。次に、変更したい個所を変更したときに、どこに影響が及ぶのかを確認する必要がある。そのためには、プログラム中に記述されたシンボルにはどのようなものがあるのか、また、各シンボル間にはどのような関係があるのかをあらかじめ解析し、シンボル間の関係をそのプログラムを再利用しようとするユーザに提示することができる環境が必要である。
【0006】
【発明が解決しようとする課題】
このようにシンボル間の関係を解析し、クロスリファレンスを構築するための技術としては、従来、プログラムを解析して、プログラムの構成要素であるシンボルを抽出し、抽出したシンボル間の関連を解析するものがあった。このようなクロスリファレンスとしては、例えば、関数呼び出しによる関連を示すコールグラフ/コールドグラフ、関数とグローバル変数の書込みと参照による関連を示す関数とグローバル変数の関連図、あるシンボルからあるシンボルへのデータの受け渡しによる関連を示すデータフロー図等があった。
【0007】
しかしながら、上記のような従来のクロスリファレンスでは、シンボル間の関係において、同じ実体に対して別の名前が付けられている、いわゆる「別名」についてはなんら考慮されていなかった。そのため、クロスリファレンスの構築にあたって、ポインタ関数やポインタ変数や参照渡しをされた変数等を介して間接的な関連があるシンボル間の関係が欠落してしまう場合があった。
【0008】
本発明は、上述したような従来技術の問題点を解消するために提案されたものであり、その目的は、シンボル間の関係を提示する際に、別名解析の結果を反映させることにより、より精度の高いクロスリファレンスを構築することができるクロスリファレンス構築装置及びクロスリファレンス構築方法を提供することにある。
【0009】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、
プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための装置であって、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部とを備え、
前記別名解析手段が、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部と、を備えたことを特徴とする。
【0010】
また、前記装置により、クロスリファレンスを構築する方法及び前記装置をコンピュータ上に実現するプログラムも本発明の一態様である。
【0011】
上記のような構成を有する本発明によれば、検索対象となる注目する関数と他の関数との間の関連だけでなく、注目する関数の別名である関数をも考慮して、直接的に関連がある関数だけでなく、間接的に関連がある関数間の関係をも網羅することができるので、より精度の高いクロスリファレンスを構築することができる。
【0017】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して具体的に説明する。なお、以下に示す実施形態は、クロスリファレンス構築の例としてコールグラフを構築する場合を例としたものである。
【0018】
なお、以下の実施形態はコンピュータ上に実現され、実施形態の各機能は、所定の手順(プログラム)がこのコンピュータを制御することで実現される。また、本明細書における各手段は、実施形態の各機能に対応する概念的なもので、必ずしも特定のハードウェアやソフトウェア・ルーチンに1対1には対応しない。同一のハードウェア要素が、場合によって異なった手段を構成する。例えば、コンピュータは、ある命令を実行するときにある手段となり、別の命令を実行するときは別の手段となりうる。また、一つの手段が、わずか1命令によって実現さる場合もあれば、多数の命令によって実現される場合もある。したがって、本明細書では、以下、実施形態の各機能を有する仮想的回路ブロック(手段)を想定して実施形態を説明する。また、本実施形態における各手順の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、また、実行ごとに異なった順序で実行してもよい。このような順序の変更は、例えば、ユーザが実行可能な処理を選択するなどメニュー形式のインターフェース手法によって実現することができる。
【0019】
(1)構成
本実施形態のクロスリファレンス構築装置1には、図1の機能ブロック図に示したように、シンボル間の関係取得部12が設けられている。このシンボル間の関係取得部12では、ソースファイル群11からソースファイルを順次読み込み、既存技術である字句解析、構文解析、意味解析を行うことにより、ソースコードの中から関数や変数といったシンボルを抽出すると共に、関数の宣言と、関数呼び出しを見つけ出し、「どの関数がどの関数を呼んでいるか」という関数の呼び出し関係を取得し、シンボル間の関係図13として表す。
【0020】
また、本実施形態のクロスリファレンス構築装置1には、別名有向グラフ作成部14が設けられている。この別名有向グラフ作成部14では、ソースファイル群11からソースファイルを順次読み込み、既存技術である字句解析、構文解析、意味解析を行うことによって、関数や変数といったシンボルについて、あるシンボルが他のどのシンボルと同じメモリ領域を指す可能性があるかを解析し、別名有向グラフ15として表す。
例えば、図2に示したサンプルプログラムを別名有向グラフに表すと図3に示したようになり、図7に示したサンプルプログラムでは、図9に示すような「別名有向グラフ」が得られる。ただし、いずれの例でも、アークがないノードは省略している。
【0021】
このように、別名有向グラフ15では、関数や変数といった各シンボルを一つのノードで表現し、あるシンボルが他のあるシンボルを指す可能性があることを、ノードとノードを結ぶアークで表現する。このアークには向きがあり、指す可能性のあるシンボルから指される可能性のあるシンボルへ向かう場合を「順方向」あるいは「正の方向」といい、その逆を「逆方向」あるいは「負の方向」ということとする。
なお、あるシンボルが他のあるシンボルを指す可能性のある例としては、図4に示したように、ポインタの代入、参照渡しによる代入や仮想関数等があり、同じ実体に対して別の名前が付けられるような、いわゆる「別名」の関係にあることを意味する。
【0022】
また、本実施形態のクロスリファレンス構築装置1には、表示させたいコールグラフの先頭の関数を指定する注目関数指定部16と、指定された関数について、上記シンボル間の関係図13を参照して、「どの関数がどの関数を呼んでいるか」というシンボル間の関係を検索する関係検索部17と、この関係検索部17による検索の結果、関数の呼び出し関係があると判断されたシンボルを関係情報データ18として登録する関係登録部19とが設けられている。
【0023】
また、本実施形態のクロスリファレンス構築装置1には、注目関数指定部16により指定された関数について、上記別名有向グラフ15を参照して、「検索対象として指定されたシンボルが、どのシンボルと同じメモリ領域を指す可能性があるか」という別名検索を行う別名検索部20と、この別名検索部20による検索の結果、別名であると判断されたシンボルを別名情報データ21として登録する別名登録部22とが設けられている。
【0024】
さらに、本実施形態のクロスリファレンス構築装置1には、連結部23と検索の結果を出力する出力部24とが設けられている。そして、連結部23では、上記関係検索部17により得られた「注目する関数が呼び出している関数」を、その注目する関数と関連づけて結びつけると共に、上記別名検索部20により得られた「注目する関数の別名」を、その注目する関数と関連付けて結びつける。
【0025】
なお、本実施形態のクロスリファレンス構築装置1では、ある関数についての一連の検索処理が終了した後、注目するシンボルを、順次、関連するシンボルに替え、後述する処理を繰り返すことにより、コールグラフが構築されるようになっている。
【0026】
また、上記シンボル間の関係取得部12、シンボル間の関係図13、関係検索部17、関係情報データ18及び関係登録部19によって、請求項に示す「シンボル間の関係解析手段」が構成され、別名有向グラフ作成部14、別名有向グラフ15、別名検索部20、別名情報データ21及び別名登録部22によって、請求項に示す「別名解析手段」が構成されている。
なお、本実施形態においては、上記別名検索部20は、別名有向グラフ15を正の向き(順方向)に検索した後、負の向き(逆方向)に検索するように設定されているものとする。
【0027】
(2)作用
続いて、上記のような構成を有する本実施形態のクロスリファレンス構築装置におけるコールグラフ作成処理の流れを、図5及び図6に示したフローチャートにより説明する。
【0028】
(2−1)コールグラフ作成処理
まず、コールグラフの作成の手順を、図5に示したコールグラフ構築のフローチャートを参照して、図7の関数ポインタを用いたサンプルプログラムのコールグラフを構築する例を用いて説明する。
まず、ユーザが注目関数指定部16を介して指定した注目するシンボルを取得し(ステップ501)、このシンボルをコールグラフに追加する(ステップ502)。ここでは、“main”を注目するシンボルに指定したと仮定し、“main”をコールグラフに追加する。最初はコールグラフに何も登録されていないので、この場合、“main”がコールグラフの先頭に登録される(図8の左上)。そして、ステップ503において、注目していないシンボルがあるか否かが判断され、注目するシンボルを1つ選択する(ステップ504)。ここでは、最初なので、注目するシンボルとして“main”が選択される。
【0029】
次に、シンボル間の関係図13を参照して、この注目するシンボル“main”が呼び出しているシンボルがあるか否かを検索し、“main”が呼び出している関数として“*fpLocalFunc”が取得される(ステップ505)。そこで、この“*fpLocalFunc”を注目するシンボルの下位に、「呼び出しているシンボル」として連結する(ステップ506)。その結果、コールグラフとして“*fpLocalFunc”を“main”の下位に登録したものが得られる(図8の右上)。
【0030】
次に、ステップ507で、注目するシンボルに別名があるか否かが判断され、別名がある場合には、後述する別名検索処理(図6のフローチャート)がなされる。一方、注目するシンボルに別名がない場合にはステップ503に戻る。ここでは、“main”に対する別名はないので、次の処理に進む。
【0031】
すなわち、ステップ503で、コールグラフを参照し、登録されているシンボルのうち、まだ注目していないシンボルがあるか否かが判断され、注目していないシンボルがある場合には、その中から注目するシンボルを1つ選択し、これを新たに注目するシンボルとする(ステップ504)。ここでは、“main”の下位に登録されている“*fpLocalFunc”を次の注目するシンボルとする。
【0032】
この新たに注目するシンボルとなった“*fpLocalFunc”について、呼び出しているシンボルがあるか否かが判断されるが(ステップ505)、この“*fpLocalFunc”には呼び出しているシンボルはないので、そのままステップ507に進み、別名があるか否かが判断される。具体的には、この“*fpLocalFunc”が別名有向グラフ15に登録されているか否かが判断される。ここでは、“*fpLocalFunc”は、別名有向グラフ15に図9のように示されているので、図6に示す別名検索処理(ステップ508)に移行する。
【0033】
(2−2)別名検索処理
図5のステップ507で、今注目しているシンボルに別名があると判断された場合には、図6のフローチャートに示す別名検索処理がなされる。すなわち、まず、別名情報データ21を空とする(ステップ601)。そして、今注目しているシンボルを検索対象シンボルとして取得し(ステップ602)、そのシンボル自体を別名情報データ21として登録する(ステップ603)。ここでは、“*fpLocalFunc”を別名情報データ21として登録する。
【0034】
次に、別名情報データ21の中から登録されている別名を1つ選択する(ステップ604)。ここでは、すでに別名として登録されているシンボルとして“*fpLocalFunc”が見つかる。その“*fpLocalFunc”について別名有向グラフ(図9)を参照すると、“*fpLocalFunc”から正の向きのアークとして“*func_table”があるので、“*func_table”を別名情報データ21として追加する(ステップ605、ステップ606)。
【0035】
一方、ステップ605において、正の向きのアークがないと判断された場合には、そのままステップ607に進む。ステップ607において、別名情報データ21として登録されているすべての別名について順方向の検索が終了したか否かが判断され、終了していない場合には、ステップ604に戻り、別名情報データ21の中から未処理の別名を1つ選択し、ステップ605〜ステップ607を繰り返す。ここでは、すでに別名として“*func_table”が追加されているので、この“*func_table”を選択し(ステップ604)、順方向のアークがあるか否かが判断される(ステップ605)。
【0036】
すなわち、別名有向グラフ(図9)を参照すると、“*func_table”からさらに正の向きのアークとして“funcA”と“funcB”があるので、これらを別名に追加する(ステップ605、ステップ606)。これ以上、正の向きのアークはないので、そこで正の向きへの検索は終了する(ステップ607)。この時点で、別名情報データ21として登録されたシンボルは、“*fpLocalFunc”、“*func_table”、“funcA”、“funcB”となる。
【0037】
このように、ステップ607において、別名情報データ21として登録されているすべての別名について順方向の検索が終了したと判断された場合には、ステップ608に進み、逆方向の検索を行う。
すなわち、別名情報データ21の中から登録されている別名を1つ選択する。この別名について、別名有向グラフ(図9)を参照して、その別名のシンボルから負の向き(逆方向)のアークがあるか否かを判断し(ステップ609)、負の向きのアークがあれば、アークの先(アークの基端部)にあるノードのシンボルをすべて別名として別名情報データ21に追加し(ステップ610)、ステップ611に進む。一方、ステップ609において、負の向きのアークがないと判断された場合には、そのままステップ611に進む。ここでは、別名有向グラフ(図9)に示すように負の向きのアークはないので、そのままステップ611に進む。
【0038】
ステップ611において、別名情報データ21として登録されているすべての別名について逆方向の検索が終了したか否かが判断され、終了していない場合には、ステップ608に戻り、別名情報データ21の中から未処理の別名を1つ選択し、ステップ609〜ステップ611を繰り返す。一方、ステップ611において、別名情報データ21として登録されているすべての別名について逆方向の検索が終了したと判断された場合には、その検索対象シンボルについての別名検索処理を終了し、図5のステップ509に戻る。
【0039】
そして、ステップ509において、コールグラフの注目するシンボルの下位に、別名のシンボルを連結する。ここでは、注目するシンボルである“*fpLocalFunc”には、別名として“*func_table”、“funcA”、“funcB”が得られるので、これらのシンボルを“*fpLocalFunc”の下位に連結する(図8の左下)。
【0040】
続いて、ステップ503に戻り、注目していないシンボルがあるか否か、言い換えれば検索がすべて終了したか否かが判断され、注目していないシンボルがなくなるまで、ステップ504〜ステップ509の処理が繰り返される。
そして、以上のようなコールグラフ作成処理及び別名検索処理がすべて終了すると、図8の右下に示したような、別名情報を加味したコールグラフが完成する。なお、図8では、「別名」を「関数呼び出し」と区別するために、別名により登録したシンボルについては、シンボル名の前に“≒”を付加している。
【0041】
(2−3)別名検索の具体例
上記の実施形態では、別名検索処理において負の向きの検索がなされていないので、図3に示した別名有向グラフを例にして、図6に示した別名検索処理の流れをより詳細に説明する。
【0042】
仮に、注目関数指定部16により“p”が指定されたとする(ステップ602)。まず、“p”自身を別名に登録する(ステップ603)。次に、正の向きに検索を行うので、ステップ604に進み、別名情報データ21の中から、すでに別名として登録されているシンボルとして“p”が見つかる(ステップ604)。その“p”について別名有向グラフ(図3)を参照すると、“p”から正の向きのアークとして“a”があるので、“a”を別名に追加する(ステップ605、ステップ606)。
【0043】
次に、別名有向グラフ(図3)を参照すると、“a”から正の向きのアークはないので、そこで正の向きへの検索は終了する。この時点で別名情報データ21として登録されたシンボルは、“p”と“a”となる。
次に、負の向きに検索を行う。別名情報データ21を参照し、すでに別名として登録されているシンボル“p”、“a”からまず“p”を取り出す。別名有向グラフ(図3)を参照して、“p”に向かうアークを負の向きに進むと“r”を得るので、“r”を別名に追加する。“r”から負の向きに進むアークはないので、終了する。
【0044】
同様に、別名情報データ21を参照し、すでに別名として登録されているシンボルとして“a”を取り出す。“a”からアークを負の向きに進むと“p”と“q”があるが、“p”はすでに登録されているので、“q”だけを登録する。“q”へ向かうアークはないので、別名検索は終了する。
その結果、“p”の別名として、“p、r、a、q”が得られる。ここで、“p、r、a、q”はポインタが“p”と同じ実体を指す可能性がある集合であるが、“p”は取得されたシンボル自身であるので、別名から除いてもよい。
【0045】
(3)効果
上述したように、本実施形態のクロスリファレンス構築装置によれば、関数間の関連だけでなく、別名をも考慮して間接的な関連があるシンボル間の関係を網羅することができるので、より精度の高いクロスリファレンスを構築することができる。
【0046】
(4)他の実施形態
本発明は、上述した実施形態に限定されるものではなく、コールグラフを表示する場合に、階層数を限定することも可能である。また、図8の右下に示した完成したコールグラフにおいて、別名である“funcA”の下にぶら下がっている“printf ( )”を改めて先頭シンボルに指定することにより、注目するシンボルを取得して、再度分析を行うことができることは言うまでもない。
【0047】
なお、表示する階層数を限定した場合には、その下にも関連する階層があること、例えばprintf ( )の下に更に関連するシンボルがあること、あるいは、表示したシンボルに別名があること、例えばprintf ( )に別名があることを、マークや色、その他の表示方法を用いて表現することもできる。その場合、表示されたシンボルをクリック(指示)することにより、表示を切り替えて、下の階層や別名を表示させることも可能である。
【0048】
【発明の効果】
以上のように、本発明によれば、シンボル間の関係を提示する際に、別名解析の結果を反映させることにより、より精度の高いクロスリファレンスを構築することができるクロスリファレンス構築装置及びクロスリファレンス構築方法を提供することができる。
【図面の簡単な説明】
【図1】本発明のクロスリファレンス構築装置の一つの実施形態の構成を示す機能ブロック図
【図2】別名解析の実施形態を説明するためのサンプルプログラム
【図3】図2のサンプルプログラムについて作成された別名有向グラフ
【図4】「別名」の関係にあるシンボルの例を示す図
【図5】本発明のクロスリファレンス構築装置におけるコールグラフ作成処理の流れを示すフローチャート
【図6】本発明のクロスリファレンス構築装置における別名検索処理の流れを示すフローチャート
【図7】実施形態を説明するためのサンプルプログラム
【図8】図7のサンプルプログラムに基づいて得られたコールグラフ
【図9】図7のサンプルプログラムについて作成された別名有向グラフ
【符号の説明】
1…クロスリファレンス構築装置
11…ソースファイル群
12…シンボル間の関係取得部
13…シンボル間の関係図
14…別名有向グラフ作成部
15…別名有向グラフ
16…注目関数指定部
17…関係検索部
18…関係情報データ
19…関係登録部
20…別名検索部
21…別名情報データ
22…別名登録部
23…連結部
24…出力部
Claims (3)
- プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための装置であって、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部とを備え、
前記別名解析手段が、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部と、を備えたことを特徴とするクロスリファレンス構築装置。 - コンピュータ上に実現された注目関数指定手段、関数間の関係解析手段、別名解析手段連結手段及び出力部を使用して、プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するための方法であって、
前記注目関数指定手段により、ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する処理と、
前記関数間の関係解析手段により、指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして記録する処理と、
前記別名解析手段により、注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして記録する処理と、
前記連結手段により、前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する処理と、
前記出力部により、連結手段により登録された各関数と別名をコールグラフとして出力する処理とを備え、
前記別名解析手段が、別名有向グラフ作成部、別名登録部及び別名検索部を備え、前記別名を解析する処理が、
前記別名有向グラフ作成部により、ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する処理と、
前記別名検索部により、別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする処理と、を備えたことを特徴とするクロスリファレンス構築方法。 - プログラムを構成する関数について、関数間の関係を解析しクロスリファレンスを構築するためコンピュータを、
ユーザからの指定により解析対象となるプログラム中の注目する関数を取得する注目関数指定手段と、
前記指定された注目する関数に対して呼び出し関係にある関数をプログラム中から検索し、これを関係情報データとして関係登録部に記録する関数間の関係解析手段と、
前記注目する関数の別名の関数を前記プログラム中から検索して、これを別名情報データとして別名登録部に記録する別名解析手段と、
前記注目する関数とその呼び出し関係にある関数、および前記注目する関数とその別名の関数を、それぞれ連結して登録する連結手段と、
前記連結手段により登録された各関数と別名をコールグラフとして出力する出力部として機能させると共に、
前記別名解析手段を、
ある関数が他の関数と同じ実体を指す可能性があるかを、ある関数を示す始点と他の関数を示す終点とを結ぶアークにより表す有向グラフを作成する別名有向グラフ作成部と、
前記別名有向グラフを参照して、前記注目する関数を始点としてその始点から伸びるアークの終点の他の関数に向かって前記別名有向グラフを正の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録すると共に、前記別名登録部に別名として登録されたそれぞれの関数を終点としてその終点に伸びる他の関数からのアークをその始点に向かって負の向きにたどったときに、たどることのできる関数をすべて別名として前記別名登録部に登録し、登録された関数を前記注目する関数の「別名」とする別名検索部として機能させるためのクロスリファレンス構築プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001224416A JP3887550B2 (ja) | 2001-07-25 | 2001-07-25 | クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2001224416A JP3887550B2 (ja) | 2001-07-25 | 2001-07-25 | クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2003036170A JP2003036170A (ja) | 2003-02-07 |
JP3887550B2 true JP3887550B2 (ja) | 2007-02-28 |
Family
ID=19057572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001224416A Expired - Fee Related JP3887550B2 (ja) | 2001-07-25 | 2001-07-25 | クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3887550B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5409039B2 (ja) * | 2009-02-17 | 2014-02-05 | 三菱電機株式会社 | 情報処理装置及び情報処理方法及びプログラム |
US9087151B2 (en) | 2009-02-18 | 2015-07-21 | Mitsubishi Electric Corporation | Program analysis support device |
JP5804898B2 (ja) * | 2011-10-31 | 2015-11-04 | 三菱電機株式会社 | ソフトウェア開発支援装置及びプログラム |
US20140096117A1 (en) * | 2012-01-13 | 2014-04-03 | Panasonic Corporation | Data dependence analysis support device, data dependence analysis support program, and data dependence analysis support method |
-
2001
- 2001-07-25 JP JP2001224416A patent/JP3887550B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2003036170A (ja) | 2003-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Di Lucca et al. | WARE: A tool for the reverse engineering of web applications | |
Kienle et al. | Rigi—An environment for software reverse engineering, exploration, visualization, and redocumentation | |
US6339776B2 (en) | Dynamic semi-structured repository for mining software and software-related information | |
Riva et al. | Combining static and dynamic views for architecture reconstruction | |
CN108762743B (zh) | 一种数据表操作代码生成方法及装置 | |
JPH09212352A (ja) | プログラム開発支援システム | |
US20120110560A1 (en) | Data type provider for a web semantic store | |
US8776010B2 (en) | Data type provider for a data store | |
CN112162751A (zh) | 一种接口文档自动生成方法及系统 | |
US20130185698A1 (en) | Simplifying analysis of software code used in software systems | |
JP3887550B2 (ja) | クロスリファレンス構築装置、クロスリファレンス構築方法及びクロスリファレンス構築用プログラム | |
CN107729015A (zh) | 一种确定工程代码中的无用函数的方法和装置 | |
US20040010780A1 (en) | Method and apparatus for approximate generation of source code cross-reference information | |
CN103744678A (zh) | 基于寄存器传输语言确定静态函数调用关系的方法 | |
JP3999949B2 (ja) | 別名検索装置、別名検索方法及び別名検索用プログラム | |
JP3418544B2 (ja) | プログラムのテストデータ自動生成装置 | |
CN109857462A (zh) | 遥感图像可视化编辑器的后台Docker任务映射方法 | |
CN114116745A (zh) | 一种接口变更的识别及展示方法、装置、设备及介质 | |
Berón et al. | Static and dynamic strategies to understand c programs by code annotation | |
JP2006259805A (ja) | プロセッサ設計装置、プロセッサ設計方法およびプロセッサ設計プログラム | |
Hofmann et al. | HEX: an instruction-driven approach to feature extraction | |
CA2284949C (en) | Dynamic semi-structured repository for mining software and software-related information | |
Bischofberger et al. | Object-Oriented Programming Environments: Requirements and Approaches | |
JP2003177923A (ja) | ポーティング支援システムにおける予約語変換方法 | |
JP2002132502A (ja) | 言語機能解釈による分散オブジェクト自動生成システム及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040319 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060523 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060724 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060829 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061019 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20061121 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061127 |
|
LAPS | Cancellation because of no payment of annual fees |