(57)【要約】【課題】ソースコードの変更による影響範囲を容易に知ることができる。【解決手段】構造解析部１０１は、プログラムのソースコードからブロックを抽出する。変数判別部１０２は、抽出したブロック毎に、ブロックでの処理によって値が参照される参照変数と値が変更される変更変数とを判別する。ブロック関係判別部１０４は、ブロック間で共通の変数を含み、一方のブロックでこの変数が変更変数であり、他方のブロックでこの変数が参照変数である場合に、このブロック間は依存関係にあると判別する。【選択図】図２
2016076080.tif 000002
【特許請求の範囲】
【請求項１】
予め定められた識別子に基づいて、プログラムのソースコードを構成するブロックを特定する構造解析手段と、
前記特定されたブロックごとに、前記ブロックに含まれる変数であって値が変更される変更変数と値が参照される参照変数とを判別する変数判別手段と、
ブロック間で共通の変数を含み、当該変数が一方のブロックで変更変数であり、他方のブロックで参照変数である場合に、前記ブロック間が依存関係にあると判別するブロック関係判別手段と、
を備えるソースコード解析装置。
【請求項２】
前記構造解析手段は、さらに、ブロックの階層構造を特定し、
前記ブロック関係判別手段は、前記特定された階層構造における特定のブロックの下位の各ブロックについて、前記依存関係を判別する、
請求項１に記載のソースコード解析装置。
【請求項３】
前記特定のブロックの指定を受け付けるブロック指定部を備える、
請求項２に記載のソースコード解析装置。
【請求項４】
前記ブロック関係判別手段が判別したブロック間の依存関係を表すブロック構成図を作成する構成図作成手段を備える、
請求項１から３の何れか１項に記載のソースコード解析装置。
【請求項５】
前記構成図作成手段は、
前記依存関係にあると判別したブロックに対応する図形間を矢印線で結んだブロック構成図を作成する、
請求項４に記載のソースコード解析装置。
【請求項６】
前記構成図作成手段は、依存関係にあるブロック間で共通に含み、一方で変更変数、他方で参照変数である変数の変数名を前記矢印線に付したブロック構成図を作成する、
請求項５に記載のソースコード解析装置。
【請求項７】
前記構成図作成手段が作成したブロック構成図を表示する表示手段を備える、
請求項４から６の何れか１項に記載のソースコード解析装置。
【請求項８】
前記表示手段は、前記ブロック構成図に表示されているブロックの指定を受け付けた際に、前記指定されたブロックに対応するソースコードの部分を表示する、
請求項７に記載のソースコード解析装置。
【請求項９】
構造解析手段が、予め定められた識別子に基づいて、プログラムのソースコードを構成するブロックを特定し、
変数判別手段が、特定したブロックごとに、前記ブロックに含まれる変数であって値が変更される変更変数と値が参照される参照変数とを判別し、
ブロック関係判別手段が、ブロック間で共通の変数を含み、当該変数が一方のブロックで変更変数であり、他方のブロックで参照変数である場合に、前記ブロック間が依存関係にあると判別する、
ソースコード解析方法。
【請求項１０】
コンピュータを、
プログラムのソースコードを解析して、当該ソースコードを構成するブロックを特定する構造解析手段、
前記特定されたブロックごとに、前記ブロックに含まれる変数であって値が変更される変更変数と値が参照される参照変数とを判別する変数判別手段、
前記変数判別手段による判別結果に基づいて、一方の変更が他方に影響を及ぼす関係にあるブロック間を判別するブロック関係判別手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのソースコードを解析するソースコード解析装置、ソースコード解析方法、及びプログラムに関する。
【背景技術】
【０００２】
ソースコードを解析して、プログラムの構造を把握する技術が知られている。例えば、特許文献１には、ソースコードを解析して、予約語をノードとする抽象構造木データを作成することについて記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−２５７６３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ソフトウェアの開発において、ソースコードは頻繁に変更される場合がある。ソースコードが変更された場合、ユーザは、ソースコードを目視で確認して記載されている処理を辿り、この変更に伴って変更する必要がある他の部分（影響範囲）を特定する必要がある。
【０００５】
特許文献１に記載の技術では、抽象構造木データからプログラムの構造は把握できるものの、ソースコードの変更による影響範囲を知るには不十分である。
【０００６】
本発明は上記実情に鑑みてなされたものであり、ソースコードの変更による影響範囲を知ることができる、ソースコード解析装置等を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明のソースコード解析装置は、
予め定められた識別子に基づいて、プログラムのソースコードを構成するブロックを特定する構造解析手段と、
前記特定されたブロックごとに、前記ブロックに含まれる変数であって値が変更される変更変数と値が参照される参照変数とを判別する変数判別手段と、
ブロック間で共通の変数を含み、当該変数が一方のブロックで変更変数であり、他方のブロックで参照変数である場合に、前記ブロック間が依存関係にあると判別するブロック関係判別手段と、
を備える。
【発明の効果】
【０００８】
本発明によれば、プログラムのソースコードからブロックが特定され、ブロック間の依存関係が判別される。従って、ソースコードの変更による影響範囲を知ることが可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係るソースコード解析装置の構成を示す図である。
【図２】本発明の実施形態に係るソースコード解析装置の機能構成を示す図である。
【図３】ブロック構成図の例を示す図である。
【図４】ブロック構成表示処理の手順を示すフローチャートである。
【図５】ソースコードの例を示す図である。
【図６】ソースコードからブロックが抽出される例を示す図である。
【図７】ブロック構成データの例を示す図である。
【図８】ブロック値データの例を示す図である。
【図９】ブロック値データの例を示す図である。
【図１０】ブロック構成図の例を示す図である。
【図１１】ブロック構成図の例を示す図である。
【図１２】ブロック構成図にソースコードの部分が表示される例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。なお、図中同一または相当部分には同一符号を付す。また、特に言及が無い場合、例示するプログラムのソースコードは、Ｃ言語で記載されているものとする。また、例示するソースコードには、説明を容易にするため左側に行番号を付す。
【００１１】
本発明の実施形態に係るソースコード解析装置１は、プログラムのソースコードの構成を解析して、解析結果をブロック構成図として表示する装置である。ソースコード解析装置１は、図１に示すように、通信部１１と、操作部１２と、表示部１３と、記憶部１４と、入出力Ｉ／Ｆ部１５と、制御部１６と、を備える。各部はバス１７を介して互いに接続されている。
【００１２】
通信部１１は、通信インタフェース等を備え、通信ネットワーク２を介して、ネットワーク２上の図示せぬ情報処理装置等と通信する。例えば、通信部１１は、解析するソースコードを、これら通信ネットワーク２上の情報処理装置から受信してもよい。
【００１３】
操作部１２は、ソースコード解析装置１に様々な情報を入力するために使用するものであり、キーボード等の入力装置を備える。例えば、ユーザは、操作部１２を操作して、後述するブロック構成図の作成を指示する。
【００１４】
表示部１３は、液晶ディスプレイ等の表示装置を備え、ブロック構成図や各種の画面等を表示する。
【００１５】
記憶部１４は、ハードディスクドライブ等の補助記憶装置を備え、制御プログラムや様々なデータを記憶する。例えば、記憶部１４には、解析するソースコード１４１や、後述するブロック構成データ１４２やブロック値データ１４３が記憶される。
【００１６】
入出力Ｉ／Ｆ部１５は、入出力機器３を接続するためのインタフェースである。例えば、入出力Ｉ／Ｆ部１５を介して、解析するソースコード１４１をＣＤ−ＲＯＭドライブ等の入出力機器３から取り込んでもよい。
【００１７】
制御部１６は、データの演算処理を行うと共に、バス１７を介して通信部１１、操作部１２、表示部１３、記憶部１４、入出力Ｉ／Ｆ部１５を制御するものであり、ＣＰＵ（Central Processing Unit）１６ａ、ＲＯＭ（Read Only Memory）１６ｂ、ＲＡＭ（Random Access  Memory）１６ｃ等を備える。制御部１６における演算処理及び制御処理は、具体的には、ＣＰＵ１６ａが、ＲＡＭ１６ｃを作業領域として使用して各種データを一時的に記憶させながら、ＲＯＭ１６ｂに記憶されている制御プログラムを実行することにより行われる。
【００１８】
ソースコード解析装置１は、機能的には、図２に示すように、構造解析部１０１と、変数判別部１０２と、ブロック指定部１０３と、ブロック関係判別部１０４と、構成図作成部１０５と、構成図表示部１０６と、を備える。なお、これらの各部は、図１に示した制御部１６が、同じく図１に示した通信部１１、操作部１２、表示部１３、記憶部１４、又は入出力Ｉ／Ｆ部１５を制御することにより実現される。
【００１９】
構造解析部１０１は、解析対象とするプログラムのソースコード１４１から、波括弧（｛｝）でくくられる部分を１つの処理の単位であるブロックとして特定する。また、構造解析部１０１は、特定した各ブロックに、識別用のＩＤ（ブロックＩＤ）を付す。また、構造解析部１０１は、特定したブロックの種類や、ブロック間の呼出関係や包含関係等の階層構造等を解析し、解析結果をブロック構成データ１４２として記録する。
【００２０】
なお、ブロックの種類は、例えば、関数の処理について記載されているブロック（関数ブロック）、ＩＦ文やＳＷＩＴＣＨ文等の分岐処理について記載されているブロック（分岐処理ブロック）、等がある。
【００２１】
なお、ブロック間の呼出関係は、あるブロックから別の関数ブロックを呼び出しているブロック間の関係を意味する。また、ブロック間の包含関係は、あるブロック内に、別のブロックが含まれているブロック間の関係を意味する。
【００２２】
変数判別部１０２は、構造解析部１０１が特定したブロック毎に、変更変数と参照変数とを判別し、判別結果をブロック値データ１４３として記録する。ここで、変更変数は、ブロックに含まれていて、このブロックでの処理により値が変更される変数である。また、参照変数は、ブロックに含まれていて、このブロックでの処理により値が参照される変数である。
【００２３】
例えば、変数判別部１０２は、ソースコード１４１の構文を解析して、関数ブロックの引数として用いられている変数、分岐処理ブロックの条件式で用いられている変数、及びブロックに記載されている代入式の右辺で用いられている変数を参照変数と判別する。
【００２４】
また、例えば、変数判別部１０２は、ソースコード１４１の構文を解析して、関数ブロックの戻り値として用いられている変数、及びブロックに記載されている代入式の左辺で用いられている変数を変更変数と判別する。
【００２５】
ブロック指定部１０３は、ブロック構成図を表示するブロックの指定をユーザから受け付ける。
【００２６】
ブロック関係判別部１０４は、ブロック構成データ１４２を参照して、ブロック指定部１０３が指定を受け付けたブロックを構成する下位のブロックを判別する。そして、ブロック関係判別部１０４は、判別した下位の各ブロックにおいて、一方のブロックのソースコード１４１の変更が他方のブロックへ影響を及ぼすブロック間の依存関係を判別する。具体的には、ブロック関係判別部１０４は、ブロック間で共通の変数を含み、この変数が一方のブロックで変更変数であり、他方のブロックで参照変数である場合に、このブロック間は、一方のブロックが他方のブロックに依存する依存関係にあると判別する。
【００２７】
構成図作成部１０５は、ブロック関係判別部１０４の判別結果に基づいて、ブロック指定部１０３が受け付けたブロックがどのような下位のブロックから構成されているか、及びそのブロック間の依存関係を表すブロック構成図を作成する。なお、構成図作成部１０５が作成するブロック構成図は、画像データ等のデータである。
【００２８】
ここで、構成図作成部１０５によって作成されるブロック構成図の例を図３に示す。なお、このブロック構成図はブロックＸの構成を表し、各ブロックは、矩形の図形で表されている。この図から、ブロックＸは、下位のブロックＡ、Ｂ、Ｃ、Ｄを含むことがわかる。
【００２９】
また、この図において、ブロックＡとブロックＢとは矢印線αで結ばれている。このことは、ブロックＡで変数αの値が変更され、ブロックＢで参照されることを示す。即ち、ブロックＡのソースコード１４１の変更はブロックＢへ影響を及ぼし、ブロックＡ、Ｂ間は依存関係にあることがわかる。
【００３０】
また、この図において、ブロックＡとブロックＣは矢印線βで結ばれている。このことは、ブロックＡで変数βの値が変更され、ブロックＣで参照されることを示す。即ち、ブロックＡのソースコード１４１の変更はブロックＣへ影響を及ぼし、ブロックＡ、Ｃ間は依存関係にあることがわかる。
【００３１】
一方、この図において、ブロックＤは、他のブロックＡ、Ｂ、Ｃと矢印線で結ばれていない。そのため、ブロックＤは、ブロックＡ、Ｂ、Ｃの変更による影響を受けない関係（非依存関係）であることがわかる。
【００３２】
図２に戻り、構成図表示部１０６は、構成図作成部１０５が作成したブロック構成図を表示する。
【００３３】
（ブロック構成表示処理）
続いて、ソースコード解析装置１の動作について、図４のフローチャートを用いて説明する。ユーザは、ソースコード解析装置１の操作部１２を操作して対象のソースコード１４１を指定し、ブロック構成図の作成を指示する。この指示に応答して、ソースコード解析装置１は、指定されたソースコード１４１を対象にしたブロック構成表示処理を開始する。なお、ユーザは、複数のソースコード１４１を指定してもよい。
【００３４】
まず、ソースコード解析装置１の構造解析部１０１は、解析対象のソースコード１４１から、特定の識別子に基づいて、ブロックを抽出する（ステップＳ１０）。また、この際、構造解析部１０１は、抽出した各ブロックに識別用のブロックＩＤを付与する。
【００３５】
続いて、構造解析部１０１は、抽出したブロックの階層構造を解析し、ブロック構成データ１４２として記録する（ステップＳ２０）。
【００３６】
続いて、変数判別部１０２は、抽出したブロック毎に、ブロックに含まれる各変数が参照変数と変更変数との何れかであるかを判別し、ブロック値データ１４３として記録する（ステップＳ３０）。
【００３７】
続いて、ブロック指定部１０３は、ブロック選択用の画面を表示する等して、ステップＳ１０で抽出したブロックの中から構成を表示したいブロックの指定をユーザから受け付ける（ステップＳ４０）。なお、以下の説明では、ステップＳ４０で受け付けたブロックを指定ブロックとも表記する。
【００３８】
続いて、ブロック関係判別部１０４は、ブロック構成データ１４２が示すブロック間の階層構造から、指定ブロックに含まれる下位のブロックを判別する（ステップＳ５０）。
【００３９】
続いて、ブロック関係判別部１０４は、ブロック値データ１４３を参照して、ステップＳ５０で判別した各ブロックにおける、ブロック間の依存関係を判別する（ステップＳ６０）。例えば、ブロック値データ１４３から、ブロックＡで変数ａの値が変更され、ブロックＢで変数ａの値が参照されることが分かった場合、ブロック関係判別部１０４は、ブロックＡの変更はブロックＢに影響を与えるため、ブロックＡ、Ｂ間は依存関係にあると判別する。
【００４０】
続いて、構成図作成部１０５は、ステップＳ５０の結果に基づいて、指定ブロックがどのようなブロックから構成されているかを表すとともに、ステップＳ６０で判別したブロック間の依存関係も表すブロック構成図を作成する（ステップＳ７０）。例えば、ステップＳ５０、Ｓ６０の結果から、指定ブロックに含まれるブロックはブロックＡ、Ｂであり、ブロックＡで変数ａの値が変更され、ブロックＢで変数ａの値が参照される依存関係にあることが分かった場合を考える。この場合、構成図作成部１０５は、ブロック構成図として、ブロックＡ、Ｂに対応する図形を横に並べ、ブロックＡからブロックＢに向かう変数ａが付された矢印線で両図形を結んだブロック構成図を作成する。
【００４１】
続いて、構成図表示部１０６は、作成したブロック構成図を表示する（ステップＳ８０）。以上でブロック構成表示処理は終了する。
【００４２】
（具体例）
続いて、図５に示すソースコード１４１を対象にブロック構成表示処理を行った場合の具体例について説明する。
【００４３】
この場合、ステップＳ１０の処理により、図６の破線で示すように、ソースコード１４１から波括弧（｛｝）でくくられている９つのブロックが抽出される。なお、各ブロックには、Ｂ１、Ｂ１１、Ｂ１１１、Ｂ１１２、Ｂ１１３、Ｂ１２、Ｂ１２１、Ｂ１２２、Ｂ１２３のブロックＩＤが付されたものとする。また、以下の説明では、ブロックＩＤがＢｎのブロックをブロックＢｎとも表記する。
【００４４】
なお、構造解析部１０１は、分岐処理の条件式部分と処理部分とのように、同じ波括弧（｛｝）でくくられていない部分であっても、同じブロックとして抽出するものとする。例えば、図６に示すソースコード１４１の８行目のＩＦ文の条件式部分「ｉｆ  （ｉｎｔ  ａ２  ＞  ０）」は、直後の８〜１０行目に記載された処理部分と同じ波括弧（｛｝）でくくられていないが、同じブロックＢ１１１として抽出されている。
【００４５】
続いて、ブロックが抽出された後、ステップＳ２０の処理により、ブロックの階層構造が解析され、図７に示すブロック構成データ１４２が作成される。
【００４６】
なお、このブロック構成データ１４２は、ＸＭＬ（Extensible Markup Language）で記載されており、各ブロックに「Ｂｌｏｃｋ」タグが付与されることにより、ブロック間の階層構造が記録される。なお、「Ｂｌｏｃｋ」タグの要素「ｉｄ」はこのブロックのブロックＩＤを示す。また、要素「ｆｉｌｅ」は、このブロックが記載されているソースファイルのファイル名を示し、要素「ｌｉｎｅ」は、このブロックが記載されているソースファイルの行数を示す。また、要素「ｔｙｐｅ」は、このブロックの種類を示す。
【００４７】
続いて、ステップＳ３０の処理により、ブロック毎に、参照変数、変更変数が判別されて、図８、９に示すようなブロック値データ１４３が作成される。なお、このブロック値データ１４３は、ＸＭＬで作成されており、参照変数には「ＵｓｅｄＶａｌｕｅ」タグ、変更変数には「ＣｈａｎｇｅｄＶａｌｕｅ」タグが付される。
【００４８】
例えば、図６に示すソースコード１４１の８〜１０行目に記載されているブロックＢ１１１では、８行目のＩＦ文の条件式で変数ａ２の値が参照されている。そのため、ａ２は参照変数と判別される。また、９行目では、変数ａ１の値が１０に変更（代入）されている。そのため、変更変数はａ１と判別される。そして、これらの判別結果を表すブロック値データ１４３が、図８（Ａ）に示すように作成される。
【００４９】
同様に、図６に示すブロックＢ１１２、Ｂ１１３からは、図８（Ｂ）、（Ｃ）に示すブロック値データ１４３が作成される。また、図８（Ｄ）に示すように、ブロックＢ１１のブロック値データ１４３は、下位のブロックＢ１１１〜Ｂ１１３の参照変数と変更変数とを全て含むように作成される。
【００５０】
同様に、ブロックＢ１２１〜Ｂ１２３、Ｂ１２からは、それぞれ、図９（Ａ）〜（Ｄ）に示すブロック値データ１４３が作成される。なお、図６に示すブロックＢ１２２の２６行目では、変数ｂ１の値が参照されるとともに代入（変更）されている。そのため、図９（Ｂ）に示すブロック値データ１４３では、変数ｂ１は参照変数及び変更変数として記録されている。
【００５１】
続いて、ステップＳ４０の処理で、ブロックＢ１１が指定された場合を考える。
【００５２】
この場合、図７に示すブロック構成データ１４２から、指定されたブロックＢ１１に含まれる下位のブロックＢ１１１、Ｂ１１２、１１３が特定される（ステップＳ５０）。また、図８（Ａ）に示すブロックＢ１１１のブロック値データ１４３と図８（Ｂ）に示すブロックＢ１１２のブロック値データ１４３とから、ブロックＢ１１１とブロックＢ１１２との間には、共通の変数ａ１があり、ブロックＢ１１１では変更変数、ブロックＢ１１２では参照変数であるため、このブロック間は依存関係にあると判別される（ステップＳ６０）。そして、図１０に示すようなブロックＢ１１のブロック構成図が作成されて、表示される（ステップＳ７０、Ｓ８０）。
【００５３】
ユーザは、このブロック構成図から、ブロックＢ１１は、３つのブロックＢ１１１、Ｂ１１２、Ｂ１１３から構成されていることがわかる。また、ブロックＢ１１１とブロックＢ１１２とは横に並べて配置され、矢印線ａ１で結ばれている。そのため、ブロックＢ１１１で値が変更された変数ａがブロックＢ１１２で参照されるため、ブロックＢ１１１を変更するとブロックＢ１１２に影響することがわかる。また、ブロックＢ１１３は、ブロックＢ１１１、Ｂ１１２と矢印線で結ばれていない。そのため、ブロックＢ１１３は、ブロックＢ１１１、Ｂ１１２の変更による影響は受けないことがわかる。
【００５４】
続いて、ステップＳ４０の処理で、ブロックＢ１２が指定された場合を考える。この場合、同様にブロックＢ１２の下位のブロック、およびブロック間の依存関係が特定され（ステップＳ５０、Ｓ６０）、図１１に示すようなブロックＢ１２のブロック構成図が作成されて、表示される（ステップＳ７０、Ｓ８０）。
【００５５】
ユーザは、この図から、ブロックＢ１２は、３つのブロックＢ１２１、Ｂ１２２、Ｂ１２３から構成されていることがわかる。また、ブロックＢ１２１、Ｂ１２２、Ｂ１２３は横に並べて配置され、ブロックＢ１２１、Ｂ１２２間、及びブロックＢ１２２、Ｂ１２３間は、同じ矢印線ｂ１で結ばれている。そのため、ブロックＢ１２１で値が変更された変数ｂ１がブロックＢ１２２で参照及び変更され、さらにブロックＢ１２３で参照されることがわかる。そのため、ブロックＢ１２１の変更はブロックＢ１２２に影響し、さらに、ブロックＢ１２２の変更はブロックＢ１２３に影響することがわかる。
【００５６】
このように、本発明によれば、ソースコードからブロックが特定され、ブロック毎に値が変更される変更変数と値が参照される参照変数とが判別される。そして、ブロック間で共通の変数を含み、この変数が一方のブロックで変更変数であり、他方のブロックで参照変数である場合に、このブロック間は依存関係にあると判別される。そのため、判別された依存関係から、ブロックのソースコードの変更によって影響を及ぼす他のブロックがわかるため、ユーザは、ソースコードの変更による影響範囲を容易に知ることが可能となる。
【００５７】
また、本発明によれば、判別された依存関係を表すブロック構成図が作成されて表示される。より具体的には、本発明では、依存関係にあるブロック間が、共通に参照、変更される変数名が付された矢印線で結ばれた形のブロック構成図が作成されて表示される。従って、ユーザは、作成されたブロック構成図から、ブロックの変更による影響範囲をより容易に知ることが可能となる。
【００５８】
また、本発明によれば、ブロック間の階層構造が特定されて、ユーザが指定した特定のブロック（指定ブロック）に含まれる下位のブロックの構成と、ブロック間の依存関係と、を表すブロック構成図が作成される。従って、ユーザは、多くのブロックから構成される大規模なソースプログラムであっても、構成を知りたいブロックのみを指定して、その構成や依存関係を容易に知ることが可能となる。
【００５９】
なお、本発明は、上記実施形態に限定されず、本発明の要旨を逸脱しない部分での種々の修正は勿論可能である。
【００６０】
例えば、図１２に示すように、操作部１２を介して、表示したブロック構成図からブロックの指定を受け付けた際に、ブロック構成データ１４２を参照して対応するソースコードの部分を特定して表示してもよい。この例では、ブロックＢ１１１が指定された場合に、図７に示すブロック構成データ１４２に示すブロックＢ１１１の「Ｂｌｏｃｋ」タグの要素「ｌｉｎｅ」の値から、対応するソースコードの部分（図６に示すソースコードの８〜１０行目）が特定されて、吹き出しで表示されている。
【００６１】
また、上記実施形態では、ＸＭＬで記載されているブロック構成データ１４２やブロック値データ１４３の例を示したが、他のマークアップ言語や、他のフォーマットでブロック構成データ１４２やブロック値データ１４３を作成してもよい。例えば、表形式のテーブル等でブロック構成データ１４２やブロック値データ１４３を作成してもよい。
【００６２】
また、上記実施形態では、図１０に示すように、ブロック構成図のブロックを表す図形にブロックＩＤを付して表示した。しかしながら、ブロックＩＤ以外の情報を表示してもよい。例えば、そのブロックが示す処理名や関数名や対応するソースコードの一部やコメント文等を表示してもよい。
【００６３】
また、上記実施形態では、ブロック構成表示処理において、ブロック指定部１０３が指定を受け付けたブロック（指定ブロック）の構成図を作成したが、ソースコードから抽出した全てのブロックのブロック構成図を作成したり、予め設定されているブロックの構成図を作成してもよい。なお、この場合、ブロック指定部１０３を設けなくともよい。
【００６４】
また、上記実施形態では、ブロック構成表示処理において、構造解析部１０１がブロックの階層構造を特定し、ブロック構成図で指定ブロックの構成（指定ブロックに含まれる下位のブロック）を示した。しかしながら、構造解析部１０１がソースコードからのブロックの特定のみを行い、特定したブロック間の依存関係を示すブロック構成図を作成してもよい。
【００６５】
また、上記実施形態で示したブロック構成図は一例にすぎず、ソースコードのブロック構成を表示できるあらゆる種類のブロック構成図の作成に本発明は適用可能である。例えば、テキスト形式でブロックの構造やブロック間の依存関係を表示する図等も、本発明のブロック構成図に含まれる。
【００６６】
また、上記実施形態では、Ｃ言語で記載されたソースコードを例に説明したが、ＪＡＶＡ（登録商標）やＣ＋＋等の他の言語で記載されたソースコードにも、本発明は適用可能である。なお、その場合、各言語の書式に合った規則で、ソースコードからブロックを抽出すればよい。
【００６７】
また、例えば、本実施形態に係るソースコード解析装置１の動作を規定する動作プログラムを既存のパーソナルコンピュータや情報端末機器等に適用することで、当該パーソナルコンピュータ等を本発明に係るソースコード解析装置１として機能させることも可能である。
【００６８】
また、このようなプログラムの配布方法は任意であり、例えば、ＣＤ−ＲＯＭ（Compact Disk Read-Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＭＯ（Magneto Optical Disk）、メモリカードなどのコンピュータで読み取り可能な記録媒体に格納して配布してもよいし、インターネットなどの通信ネットワークを介して配布してもよい。
【符号の説明】
【００６９】
１  ソースコード解析装置、２  通信ネットワーク、３  入出力機器、１１  通信部、１２  操作部、１３  表示部、１４  記憶部、１５  入出力Ｉ／Ｆ部、１６  制御部、１６ａ  ＣＰＵ、１６ｂ  ＲＯＭ、１６ｃ  ＲＡＭ、１７  バス、１０１  構造解析部、１０２  変数判別部、１０３  ブロック指定部、１０４  ブロック関係判別部、１０５  構成図作成部、１０６  構成図表示部、１４１  ソースコード、１４２  ブロック構成データ、１４３  ブロック値データ
【図１】
2016076080.tif 000003
【図２】
2016076080.tif 000004
【図３】
2016076080.tif 000005
【図４】
2016076080.tif 000006
【図５】
2016076080.tif 000007
【図６】
2016076080.tif 000008
【図７】
2016076080.tif 000009
【図８】
2016076080.tif 000010
【図９】
2016076080.tif 000011
【図１０】
2016076080.tif 000012
【図１１】
2016076080.tif 000013
【図１２】
2016076080.tif 000014