(57)【特許請求の範囲】
【請求項１】
プログラムのソースコードからコールフローグラフを生成するコールフロー解析手段と、生成された前記コールフローグラフから注目するサブルーチンを直接あるいは間接に呼び出している複数の注目ルートサブルーチンを抽出するルートサブルーチン選択手段と、抽出されたそれぞれの注目ルートサブルーチンから直接あるいは間接に呼び出されているサブルーチンを前記コールフローグラフに基づいて抽出し、抽出したサブルーチンのうち各注目ルートサブルーチンから共通して呼び出されているサブルーチンを探索対象のサブルーチン候補として抽出する候補サブルーチン選択手段とを備えることを特徴とする従属サブルーチン探索支援装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、サブルーチンの従属関係の分析を支援する従属サブルーチン探索支援装置に関する。
【０００２】
【従来の技術】
コンピュータのプログラムは通常互いに呼び出し合うサブルーチンの集まりとして定義される。サブルーチンの中には、あるサブルーチンに従属した機能を持つものがある。例えば、データベースをアクセスするためのサブルーチンＡを呼び出すときには、排他処理を目的としたサブルーチンＢを前後に呼ぶ必要がある。このような関係のサブルーチンＢはサブルーチンＡに従属していると考えることができる。
【０００３】
コンピュータプログラムのメンテナンス作業では、このように注目しているサブルーチンに従属しているサブルーチンを知っておくことが重要となる。しかし、古いプログラムに関しては、こうした情報を記載しておくドキュメントがプログラムの実体とずれていたり、あるいは記載漏れや紛失などによって十分揃っていない場合がある。そのような場合、従来はサブルーチン間の従属関係を調べるためにプログラムの膨大なソースコードを手作業で分析する必要があった。
【０００４】
【発明が解決しようとする課題】
上記のようにドキュメントが不十分なプログラムのサブルーチンの従属関係を手作業で分析することは、作業効率が悪く、しかも分析誤りが生じ易く、信頼性に欠けるという問題がある。
【０００５】
本発明の目的は、ドキュメントが不十分なプログラムのサブルーチンの従属関係分析を半自動化し、注目しているサブルーチンに従属するサブルーチンを探索する際の作業効率を向上させ、かつ信頼性の高い分析結果を得、プログラムのメンテナンス等の効率化に貢献することができる従属サブルーチン探索支援装置を提供することにある。
【０００６】
【課題を解決するための手段】
上記の目的を達成するため、本発明は、プログラムのソースコードからコールフローグラフと逆コールフローグラフを生成するコールフロー解析手段と、生成されたコールフローグラフと逆コールフローグラフから注目するサブルーチンに対して従属するサブルーチンの候補を抽出する候補サブルーチン抽出手段とを備えることを特徴とする。
【０００７】
【発明の実施の形態】
以下、本発明の従属サブルーチン探索支援装置について図面に示す実施形態に基づいて詳細に説明する。
図１は、本発明の従属サブルーチン探索支援装置の実施形態を示す機能ブロック図である。この実施形態の従属サブルーチン探索支援装置は、プログラムのソースコード１０３からコールフローグラフ１０４と逆コールフローグラフ１０５を生成するコールフロー解析装置１０１と、生成されたコールフローグラフ１０４と逆コールフローグラフ１０５から、注目するサブルーチンに対して従属するサブルーチンの候補１０６を抽出する候補サブルーチン抽出装置１０２とから構成されている。
【０００８】
図２は、コールフロー解析装置１０１の詳細を示すブロック図である。
図２に示すようにコールフロー解析装置１０１は、プログラムソースコード１０３の構文を解析するための構文解析装置１０１１、この構文解析装置１０１１による構文解析結果からサブルーチンの呼び出し関係を分析し、コールフローグラフを生成するコールフローグラフ生成装置１０１２、生成されたコールフローグラフから逆コールフローグラフを生成する逆コールフローグラフ生成装置１０１３を備える。
【０００９】
図３は、候補サブルーチン抽出装置１０２の詳細を示すブロック図である。図３に示すように候補サブルーチン抽出装置１０２は、ルートサブルーチン選択装置１０２１、候補サブルーチン刻印装置１０２２、候補サブルーチン選別装置１０２３を備える。
【００１０】
図４は、コールフロー解析装置１０１の動作の詳細を示すフローチャートである。このフローチャートに示すように、コールフロー解析装置１０１は、まず、分析対象のプログラムソースコード１０３を構文解析する（ステップ４０１）。その解析結果は、プログラムソースコード１０３に含まれるサブルーチンの構文木となる。このステップは構文解析装置１０１１によって実行される。続いて、分析対象のソースプログラム１０３に含まれる各サブルーチンの構文木からサブルーチン呼び出し文を抽出し、サブルーチンを頂点とし、呼び出し関係を辺とする有向グラフ（コールフローグラフ）の隣接行列を作成する（ステップ４０２）。このステップはコールフローグラフ生成装置１０１２によって実行される。さらに、生成したコールフローグラフの各辺の始点と終点を逆にした有向グラフ（逆コールフローグラフ）の隣接行列を作成する（ステップ４０３）。このステップは逆コールフローグラフ生成装置１０１３によって実行される。
【００１１】
図５は、プログラムソースコード１０３の一例であり、サブルーチンＰ００，ｐ１０、Ｐ２０，Ｐ０１，Ｐ０２，Ｐ０３，Ｐ０４，Ｐ０５ＰＥＸ，ＰＤＢを含んでいる。この例で示すプログラムは、データベースアクセスに伴う排他処理を行っているものとする。ＰＤＢがデータベースアクセスのサブルーチンであり、ＰＥＸが排他処理サブルーチンである。ここでは、不十分なドキュメントしか揃っていないため、ＰＤＢがデータベースアクセスのサブルーチンであることが分かっているが、ＰＥＸが排他処理サブルーチンであることは分かっていないものとする。また、排他処理サブルーチンは１つであることは分かっているものと仮定する。
【００１２】
図６は、図５に示したプログラムソースコード１０３から、図４のステップ４０１と４０２の処理によって作成したコールフローグラフを表す隣接行列である。図６の行と列の交点に○があるところに辺がある。
【００１３】
図７は同じコールフローグラフ７０１をダイアグラム形式で記述したものである。さらに図８は、図４のステップ４０３の処理によって作成した逆コールフローグラフ８０１をダイアグラム形式で記述したものである。
【００１４】
図９は、候補サブルーチン抽出装置１０２の動作の詳細を示すフローチャートである。候補サブルーチン抽出装置１０２では、まず、ユーザが注目サブルーチンを指定する（ステップ９０１）。続いて、注目サブルーチンを直接あるいは間接に呼んでいるルートサブルーチン（注目ルートサブルーチン）の一覧を作成する（ステップ９０２）。この２つのステップの処理はルートサブルーチン選択装置１０２１によって実行される。次に、各注目ルートサブルーチンから直接あるいは間接に呼び出されているコールフローグラフ上のサブルーチンに印を付ける（ステップ９０３）。このステップの処理は候補サブルーチン刻印装置１０２２によって実行される。最後に、全てのルートサブルーチンの刻印が付いているサブルーチンを選別し、候補サブルーチンとする（ステップ９０４）。このステップの処理は候補サブルーチン選別装置１０２３によって実行される。
【００１５】
図１０は、図７のコールフローグラフ７０１から、図９の処理によって、排他処理サブルーチンである可能性があるサブルーチンを絞り込んだ様子を表している。まず、ステップ９０１において、注目サブルーチンとしてデータベースアクセスサブルーチンＰＤＢを指定する。続いて、ステップ９０２において、ルートサブルーチン選択装置１０２１が、ＰＤＢを直接あるいは間接に呼び出している注目ルートサブルーチンＰ００とＰ２０を選択する。続いて、ステップ９０３において、まず、注目ルートサブルーチンＰ００によって直接あるいは間接に呼び出されているコールフローグラフ上のサブルーチンに印を付け（図１０では実線の下線で示している）、また注目ルートサブルーチンＰ２０によって直接あるいは間接に呼び出されているコールフローグラフ上のサブルーチンに印を付ける（図１０では点線の下線で示している）。最後に、ステップ９０４において、ルートサブルーチンＰ００とＰ２０の両方の刻印が付いているサブルーチンを選別し、ＰＥＸ、Ｐ０５を候補サブルーチンとする。ここで、注目サブルーチンであるＰＤＢは既知であるので除外される。この後は、ＰＥＸ、Ｐ０５の各々のソースコードを目視で調べることにより、ＰＥＸが求める排他処理サブルーチンであることが確認される。
【００１６】
なお、探索の対象となる従属サブルーチンの数が不明であり、複数の可能性がある場合、図９のフローチャートのステップ９０４において、いずれか１つの注目ルートサブルーチンの刻印が付いているサブルーチンを候補サブルーチンとして抽出すればよい。
【００１７】
また、上記実施形態において、コールフローグラフあるいは逆コールフローグラフは解析担当者が確認可能な形態で表示装置または印刷装置に出力されることは言うまでもない。また、注目サブルーチンについても下線でなく、網掛け表示、フリッカ表示、色分け表示などの各種の形態で報知することができる。
【００１８】
【発明の効果】
以上説明したように本発明によれば、プログラムのソースコード中の注目するサブルーチンに従属するサブルーチンの候補を効率的に絞り込むことができ、信頼性の高い分析結果を得ることができる。したがって、ドキュメント等が不十分なプログラムの保守作業の効率向上を図ることができる。
【図面の簡単な説明】
【図１】本発明の実施形態を示す機能ブロック図である。
【図２】コールフロー解析装置の詳細構成を示すブロック図である。
【図３】候補サブルーチン抽出装置の詳細構成を示すブロック図である。
【図４】コールフロー解析装置の動作の詳細を示すフローチャートである。
【図５】プログラムのソースコードの一例を示す図である。
【図６】コールフローグラフを表す隣接行列の一例を示す図である。
【図７】ダイアグラム形式で記述したコールフローグラフの一例を示す図である。
【図８】ダイアグラム形式で記述した逆コールフローグラフの一例を示す図である。
【図９】候補サブルーチン抽出装置の動作の詳細を示すフローチャートである。
【図１０】コールフローグラフへの従属サブルーチン候補の刻印の一例を示す図である。
【符号の説明】
１０１…コールフロー解析装置、１０２…候補サブルーチン抽出装置、１０３…プログラムソースコード、１０４…コールフローグラフ、１０５…逆コールフローグラフ、１０６…従属するサブルーチンの候補、１０１１…構文解析装置、１０１２…コールフローグラフ生成装置、１０１３…逆コールフローグラフ生成装置、１０２１…ルートサブルーチン選択装置、１０２２…候補サブルーチン刻印装置、１０２３…候補サブルーチン選別装置。
【図１】
0003694872.tif 000002
【図２】
0003694872.tif 000003
【図３】
0003694872.tif 000004
【図４】
0003694872.tif 000005
【図５】
0003694872.tif 000006
【図６】
0003694872.tif 000007
【図７】
0003694872.tif 000008
【図８】
0003694872.tif 000009
【図９】
0003694872.tif 000010
【図１０】
0003694872.tif 000011