(57)【要約】【課題】あるサブルーチンと依存関係にある（影響を受ける）プログラムファイルを容易に把握できるようにする。【解決手段】まず、依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する。次に、前記抽出されたサブルーチンが呼び出しているサブルーチンを検出する。次に、前記検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する。【選択図】図６
2010097474.tif 000002
【特許請求の範囲】
【請求項１】
依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する抽出手段と、
前記抽出されたサブルーチンが呼び出しているサブルーチンを検出するサブルーチン依存関係取得手段と、を備え、
前記検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する装置。
【請求項２】
前記抽出したサブルーチンと、前記特定されたプログラムファイルと、の依存関係をグラフで表示する請求項１に記載の装置。
【請求項３】
前記プログラムファイルとして、少なくともソースコード及びヘッダファイルを解析し、
ソースコード及びヘッダファイルに定義されているサブルーチンと依存関係にあるソースコード又はヘッダファイルを特定する請求項１又は２に記載の装置。
【請求項４】
前記サブルーチン又はプログラムファイルを介して依存関係にある前記プログラムファイル同士又はサブルーチン同士の間接的な依存関係を表示する機能を備えた請求項１乃至３いずれか一に記載の装置。
【請求項５】
依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する抽出ステップと、
前記抽出されたサブルーチンが呼び出しているサブルーチンを検出する検出ステップと、
前記検出ステップにて検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する出力ステップと、を含む依存関係提示方法。
【請求項６】
前記プログラムファイルとして、少なくともソースコード及びヘッダファイルを解析し、
ソースコード及びヘッダファイルに定義されているサブルーチンと依存関係にあるソースコード又はヘッダファイルを特定する請求項５に記載の依存関係提示方法。
【請求項７】
依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する処理と、
前記抽出されたサブルーチンが呼び出しているサブルーチンを検出する処理と、
前記サブルーチンを検出する処理にて検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する処理と、をコンピュータに実行させるプログラム。
【請求項８】
前記コンピュータに、前記プログラムファイルとして、少なくともソースコード及びヘッダファイルを解析させ、
ソースコード及びヘッダファイルに定義されているサブルーチンと依存関係にあるソースコード又はヘッダファイルを特定させる請求項７に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、依存関係提示方法、装置及びプログラムに関し、特に、サブルーチンを含むソフトウェア構成要素間の依存関係を提示する依存関係提示方法、装置及びプログラムに関する。
【背景技術】
【０００２】
一般的に、コンピュータプログラムは、予め作成されたサブルーチンを呼び出すソースコードによって記述される。また、ソースコードの冒頭で宣言されるヘッダファイル内でもサブルーチンを呼び出している場合がある。単一のソースコードやヘッダファイルでなく、複数のソースコードやヘッダファイルが互いに同一のサブルーチンを呼び出している場合もある。
【０００３】
これらソースコードやヘッダファイル等のプログラムファイルとそのプログラムファイルに定義されているサブルーチンとの間には、主従関係があると考えることができる。
【０００４】
非特許文献１のソースコード文書化ツールが知られており、非特許文献２に、非特許文献１のツールを用いて、サブルーチンの集まりであるライブラリファイルの依存関係を表示したサンプルが紹介されている。
【０００５】
また、特許文献１には、入力されたソースプログラムを構文解析し、その結果を出力用中間ファイルに格納するソースプログラム解析手段と、このソースプログラム解析手段で得られた複数の出力用中間ファイルの内容を解析してその関数と広域データのアクセス関係とを上記出力用中間ファイルに格納する出力用中間ファイル解析手段と、上記出力用中間ファイル解析手段で得られた出力用中間ファイルに格納されている関数と広域データのアクセス関係とをソースプログラムに付加して出力する出力手段とを備える文字列出力装置が開示されている。
【０００６】
また、特許文献２には、入力された原始プログラムに対して文法解析を行い、あるモジュールが他のモジュールを呼び出す関係を判別し、そのモジュール呼び出し関係から呼び出しモジュールと呼び出されるモジュールの対である二項モジュール呼び出し関係を抽出するプログラム解析部と、プログラム解析部の解析結果である呼び出しモジュールと呼び出されるモジュールの対を記憶するモジュール呼び出し関係記憶部と、モジュール呼び出し関係記憶部のモジュール呼び出し関係データを、プログラム呼び出し木におけるモジュール相互の呼び出し関係を表すノードデータに変換する呼び出し木変換部と、呼び出し木変換部で変換された呼び出し木のノードデータを記憶する呼び出し木記憶部と、呼び出し木記憶部のノードデータに従って、呼び出し木を描画する呼び出し木描画部とを備えたことを特徴とするプログラム解析装置が開示されている。
【０００７】
更に、プログラムの特許文献３には、プログラムのソースコードからコールフローグラフを生成するコールフロー解析手段と、生成された前記コールフローグラフから注目するサブルーチンを直接あるいは間接に呼び出している複数の注目ルートサブルーチンを抽出するルートサブルーチン選択手段と、抽出されたそれぞれの注目ルートサブルーチンから直接あるいは間接に呼び出されているサブルーチンを前記コールフローグラフに基づいて抽出し、抽出したサブルーチンのうち各注目ルートサブルーチンから共通して呼び出されているサブルーチンを探索対象のサブルーチン候補として抽出する候補サブルーチン選択手段とを備えることを特徴とする従属サブルーチン探索支援装置が開示されている。
【０００８】
【特許文献１】特開平２−６４７３８号公報
【特許文献２】特開平５−２７４１３２号公報
【特許文献３】特許第３６９４８７２号公報
【非特許文献１】“Ｄｏｘｙｇｅｎ“、［平成２０年１０月６日検索］、インターネット〈ＵＲＬ：http://www.stack.nl/~dimitri/doxygen/〉
【非特許文献２】“diagrams_a.h File Reference”、［平成２０年１０月６日検索］、インターネット〈ＵＲＬ： http://skazami.web.infoseek.co.jp/tools/doxygen/doxygen_example_html/diagrams__a_8h.html〉
【発明の開示】
【発明が解決しようとする課題】
【０００９】
プログラムの解析を効率よく行うためには、関連の強いソースコードの集まりやサブルーチンの集まりとのいえるヘッダファイルを漏らさず把握しておくことが望ましい。上記関連の強さは、ソースコードやサブルーチンの依存関係の有無から判断することができる。
【００１０】
しかしながら、上記した各技術では、ソースコードとソースコード、出力用中間ファイルと出力用中間ファイル、モジュールとモジュール、サブルーチンとサブルーチンといった同格同士の関係を抽出することができるが、例えば、あるサブルーチンと、該サブルーチンが呼び出す他のサブルーチンが定義されたソースコードやヘッダファイルといった異なる対象間の依存関係を把握できないという問題点がある。
【００１１】
本発明は、上記した事情に鑑みてなされたものであって、その目的とするところは、プログラムファイルに含まれるサブルーチンと、当該サブルーチンが呼び出す他のサブルーチンを定義するプログラムファイルとの依存関係を表示する依存関係提示方法、装置及びプログラムを提供することにある。
【課題を解決するための手段】
【００１２】
本発明の第１の視点によれば、依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する抽出手段と、前記抽出されたサブルーチンが呼び出しているサブルーチンを検出するサブルーチン依存関係取得手段と、を備え、前記検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する装置が提供される。
【００１３】
本発明の第２の視点によれば、依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する抽出ステップと、前記抽出されたサブルーチンが呼び出しているサブルーチンを検出する検出ステップと、前記検出ステップにて検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する出力ステップと、を含む依存関係提示方法が提供される。
【００１４】
本発明の第３の視点によれば、依存関係の提示対象となるプログラムファイルを読み出して、該プログラムファイルに定義されているサブルーチンを抽出する処理と、前記抽出されたサブルーチンが呼び出しているサブルーチンを検出する処理と、前記サブルーチンを検出する処理にて検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する処理と、をコンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１５】
本発明によれば、プログラムの解析や修正等が容易化される。その理由は、あるサブルーチンと依存関係にある（影響を受ける）プログラムファイルを特定可能としたことにある。
【発明を実施するための最良の形態】
【００１６】
［発明の概要］
始めに本発明の概要について説明する。本発明は、ソースコードやヘッダファイル等のプログラムファイルに定義されているサブルーチンを抽出する抽出手段と、前記抽出したサブルーチンが呼び出しているサブルーチンを検出するサブルーチン依存関係取得手段と、を備え、前記検出されたサブルーチンを定義しているプログラムファイルを特定し、前記抽出したサブルーチンに関連付けて出力する装置により実現される。
【００１７】
前記抽出手段は、依存関係の提示対象となるプログラムファイルから、該ソースコードに定義されているサブルーチンを抽出する（図６左上テーブル参照）。
【００１８】
前記サブルーチン依存関係取得手段は、前記プログラムファイルを参照して、前記抽出したサブルーチンが呼び出しているサブルーチンを検出する（図６左下テーブル参照）。
【００１９】
依存関係を表示する装置は、上記抽出手段及びサブルーチン依存関係取得手段の出力結果を用いて、依存関係の提示対象となるプログラムファイルに定義されているサブルーチンと、各サブルーチンが呼び出しているサブルーチンを定義しているプログラムファイル（ファイル名）とを対応付けて、依存関係として出力する（図６の右側テーブル参照）。
【００２０】
このように作成された依存関係によれば、プログラムファイル中のサブルーチン（例：図６の「ａ１」）と依存関係にあるプログラムファイル（ファイル名）を漏らすことなく把握することが可能になる。
【００２１】
［第１の実施形態］
次に、本発明の第１の実施形態について、図面を参照して詳細に説明する。図１は、本発明の第１の実施形態の構成を表したブロック図である。図１を参照すると、プログラムファイル記憶手段１０１と、サブルーチン抽出手段１０２と、サブルーチン依存関係取得手段１０４と、表示手段１０６とを備える装置構成が示されている。
【００２２】
サブルーチン抽出手段１０２は、プログラムファイル記憶手段１０１に記憶された解析対象のソースコードやヘッダファイル等を分析し、当該ソースコード等が定義するサブルーチンを抽出し、プログラムファイル（ファイル名）と当該ソースコードに含まれるサブルーチンとを対応付けたサブルーチン一覧１０３（図４参照）を出力する。
【００２３】
サブルーチン依存関係取得手段１０４は、サブルーチン抽出手段１０２にて作成されたサブルーチン一覧１０３に記述されたサブルーチンについて、元のプログラムファイルの該当箇所を参照して分析し、各サブルーチンが呼び出す他のサブルーチンを検出し、呼び出し元サブルーチンと、呼び出し先サブルーチンとを対応付けたサブルーチン依存関係一覧１０５（図５参照）を出力する。
【００２４】
表示手段１０６は、サブルーチン一覧１０３と、サブルーチン依存関係一覧１０５と、に基づいて、サブルーチン依存関係一覧１０５で呼び出し先として検出されたサブルーチンを定義するプログラムファイルを、サブルーチン一覧１０３から特定し、前記各抽出されたサブルーチンに関連づけて表示する（図６の右側テーブル、図７参照）。
【００２５】
なお、サブルーチン抽出手段１０２、サブルーチン依存関係取得手段１０４及び表示手段１０６は、コンピュータに、そのＣＰＵ及び記憶装置を用いて上記サブルーチンの抽出処理、サブルーチン依存関係取得処理を実行させるプログラムにより実現することができる。
【００２６】
続いて、本実施形態の動作について図面を参照して詳細に説明する。図２は、本発明の第１の実施形態の装置において実行される処理の流れを表したフローチャートである。
【００２７】
図２を参照すると、まず、サブルーチン抽出手段１０２は、プログラムファイル記憶手段１０１から、解析対象として指定されたプログラムファイルを読み出し、そのプログラムファイルに定義されているサブルーチンを抽出する（ステップＡ１）。
【００２８】
サブルーチン依存関係取得手段１０４は、サブルーチン抽出手段１０２で抽出されたサブルーチンそれぞれについて、そのサブルーチンが含む（即ち、呼び出している）他のサブルーチンを検出し、サブルーチン依存関係一覧として出力する（ステップＡ２）。
【００２９】
表示手段１０６は、サブルーチン抽出手段１０２により作成されたサブルーチン一覧を参照し、サブルーチン依存関係取得手段１０４で検出されたサブルーチンが定義するファイルを特定し各サブルーチンに関連づけて表示する（ステップＡ３）。
【００３０】
以上の本実施形態の動作について具体例を用いて詳細に説明する。図３は、Ｃ言語で書かれたサンプルプログラムである。図３を参照すると、ａ．ｃ、ｂ１．ｃ、ｂ２．ｃとのソースコードファイルと、ｂ．ｈ、ｃ．ｈ、ｄ．ｈ、ｅ．ｈとのヘッダファイル（ライブラリファイル）が示されている。
【００３１】
これらのソースコード等から、サブルーチンを抽出し、サブルーチン一覧を作成する。ここでは、ソースコードやヘッダファイル中の関数を定義している部分から、サブルーチンを抽出している。例えば、図３のソースコードａ．ｃの場合、第３行目「ｖｏｉｄ  ａ１（）｛」で関数型サブルーチンａ１を定義している。従って、サブルーチン抽出手段１０２は、ソースコードａ．ｃの第３行目から、サブルーチン一覧１０３にサブルーチン名「ａ１」、ファイル名「ａ．ｃ」とした行を追加する（図４参照）。なお、このサブルーチンの抽出手法は、プログラム言語に応じて適宜変更される。例えば、サブルーチンを呼び出すコマンドが決められている場合には、当該コマンドを用いて抽出すればよい。
【００３２】
同様に、ソースコードａ．ｃ、ｂ１．ｃ、ｂ２．ｃ及びライブラリファイルｂ．ｈ、ｃ．ｈ、ｄ．ｈ、ｅ．ｈのサブルーチン抽出処理を完了した時点で、図４に示すサブルーチン一覧１０３が得られる。即ち、図４は、解析対象のソースコード等で定義しているサブルーチンを網羅しており、かつ、各サブルーチンを定義しているプログラムファイルを示したものとなっている。
【００３３】
サブルーチン依存関係取得手段１０４は、上記のようにして作成されたサブルーチン一覧１０３に列記されたサブルーチンを解析し、サブルーチン依存関係一覧を作成する。例えば、サブルーチンａ１の場合、図３のソースコードａ．ｃの第４行目でサブルーチンｂを呼び出している。サブルーチン依存関係取得手段１０４は、このような呼び出し関係を読み出して、サブルーチン依存関係一覧のサブルーチンａ１の呼び出し先サブルーチンとしてサブルーチンｂを追加する（図５参照）。
【００３４】
同様に、サブルーチン一覧１０３のすべてのサブルーチンの呼び出し先を検出した時点で、図５に示すサブルーチン依存関係一覧１０５が得られる。
【００３５】
最後に、表示手段１０６は、サブルーチン一覧１０３及びサブルーチン依存関係一覧１０５に基づいて、呼び出しを行っているサブルーチンと、該サブルーチンを定義しているプログラムファイルとの対応関係を表示する。
【００３６】
この対応関係の出力形態としては、例えば、図６の右側のテーブルのように、サブルーチン名と、ファイル名とを対応付けた表を作成、出力する形態が考えられる。
【００３７】
また、例えば、プログラムファイルとサブルーチンをノードとし、ノード間をエッジで結んだ図７に示すようなグラフを作成することで、より視覚的にあるサブルーチンに変更を加えた場合に、影響を受けるプログラムファイル、あるいは、あるプログラムファイルに変更を加えた場合に、影響を受けるサブルーチンを把握することが可能になる。
【００３８】
図７から、例えばサブルーチンａ１とサブルーチンａ２は、共通の間接的な依存関係が存在しない（独立している）こと、サブルーチンａ２とサブルーチンｂは、ヘッダファイルｃ．ｈという共通の間接的な依存関係が存在すること等を直感的に把握することが可能になる。
【００３９】
以上、本発明の好適な実施形態を説明したが、本発明は、上記した実施形態に限定されるものではなく、本発明の基本的技術的思想を逸脱しない範囲で、更なる変形・置換・調整を加えることができる。例えば、上記した図７の例では、プログラムファイルとサブルーチンの依存関係を一般的なグラフにより表示するものとして説明したが、例えば、所定の閾値Ｍ以上のエッジを持つノードを強調表示する、あるいは、所定の閾値Ｎ未満のエッジしか持たないノードを非強調表示とする等の変形実施を施すことが可能である。
【００４０】
またあるいは、上記図７のサブルーチンａ２とサブルーチンｂのように、間接的に依存関係を持つノードについては、これらの間接的な依存関係が視覚的に判るように、色分けしたり、点線で結んだり、破線で囲う（図８参照）といった表現手法も適宜採用することが可能である。あるいは、図６の右側のテーブルに間接的な依存関係を有するサブルーチンを記述する欄を設けるといったことも可能である。
【産業上の利用可能性】
【００４１】
本発明によれば既存のプログラムをリバースエンジニアリングするといった用途に適用できる。
【図面の簡単な説明】
【００４２】
【図１】本発明の第１の実施形態の構成を表したブロック図である。
【図２】本発明の第１の実施形態の動作を説明するためのフローチャートである。
【図３】本発明の具体的動作を説明するためのサンプルプログラムである。
【図４】本発明の第１の実施形態の装置により作成されるサブルーチン一覧の例である。
【図５】本発明の第１の実施形態の装置により作成されるサブルーチン依存関係一覧の例である。
【図６】本発明の第１の実施形態の装置により表示される内容を説明するための図である。
【図７】本発明の第１の実施形態の装置により表示される内容を説明するための図である。
【図８】本発明の第１の実施形態の装置の変形例を説明するための図である。
【符号の説明】
【００４３】
１０１  プログラムファイル記憶手段
１０２  サブルーチン抽出手段
１０３  サブルーチン一覧
１０４  サブルーチン依存関係取得手段
１０５  サブルーチン依存関係一覧
１０６  表示手段
ａ．ｃ、ｂ１．ｃ、ｂ２．ｃ  ソースコードファイル
ｂ．ｈ、ｃ．ｈ、ｄ．ｈ、ｅ．ｈ  ヘッダファイル（ライブラリファイル）
【図１】
2010097474.tif 000003
【図２】
2010097474.tif 000004
【図３】
2010097474.tif 000005
【図４】
2010097474.tif 000006
【図５】
2010097474.tif 000007
【図６】
2010097474.tif 000008
【図７】
2010097474.tif 000009
【図８】
2010097474.tif 000010