(57)【要約】【課題】静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができる対象範囲抽出装置を提供する。【解決手段】第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと第２のモジュールの差分の有無を示す差分情報とに基づいて、第２のモジュールのうちの差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段とを備える。【選択図】      図１
2015069332.tif 000002
【特許請求の範囲】
【請求項１】
第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、前記複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと前記第２のモジュールの差分の有無を示す差分情報とに基づいて、前記第２のモジュールのうちの前記差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段、
を備えることを特徴とする対象範囲抽出装置。
【請求項２】
前記依存関係情報は、前記複数の第１のモジュール間の直接及び間接の依存関係を示すすべての情報を含み、
前記対象範囲生成手段は、前記依存関係情報である依存構造マトリックスに、前記差分情報である変化ベクトルを乗じることにより、前記対象範囲情報である影響ベクトルを生成する
ことを特徴とする請求項１に記載の対象範囲抽出装置。
【請求項３】
前記依存関係情報は、前記複数の第１のモジュール間の直接の依存関係を示すすべての直接依存関係情報を含み、前記複数の第１のモジュール間の間接の依存関係を示す間接依存関係情報を含まず、
前記対象範囲生成手段は、前記直接依存関係情報である依存構造マトリックスの２乃至（ｍ−１）乗（ｍは前記第１のモジュールの個数）に、前記差分情報である変化ベクトルを乗じることにより、前記対象範囲情報である影響ベクトルを生成する
ことを特徴とする請求項１に記載の対象範囲抽出装置。
【請求項４】
前記モジュールはファイルであり、且つ前記差分は前記ファイルの内容の差分である
ことを特徴とする請求項１乃至３のいずれか１項に記載の対象範囲抽出装置。
【請求項５】
前記モジュールは手続型プログラミング言語における手続きであり、且つ前記差分は前記手続きのコードの差分である
ことを特徴とする請求項１乃至３のいずれか１項に記載の対象範囲抽出装置。
【請求項６】
複数の第１のモジュールを含む第１の全体ソースファイル、及び前記複数の第１のモジュールのうちの第２のモジュールと共通の名称を有する第３のモジュールを含む第２の全体ソースファイルに含まれる、部分ソースファイル及びビルドファイルを保持し、前記第３のモジュールと前記第２のモジュールの差分の有無を示す差分情報を生成する構成管理装置と、
前記複数の第１のモジュールの相互の依存関係を示す依存関係情報を生成する影響分析装置と、
前記第１の全体ソースファイルに含まれるビルドファイルから静的検証の実行条件を示す実行条件情報を生成するビルド解析装置と、
前記依存関係情報と、前記差分情報とに基づいて、前記第２のモジュールのうちの前記差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段を含む対象範囲抽出装置と、
前記対象範囲情報及び前記実行条件情報に基づいて前記静的検証のためのコマンドを生成するコマンド生成装置と、
前記コマンドを実行する静的検証装置と、
を備えることを特徴とする静的検証システム。
【請求項７】
第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、前記複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと前記第２のモジュールの差分の有無を示す差分情報とに基づいて、前記第２のモジュールのうちの前記差分により定義の差分を生じうる第４のモジュールを限定する
ことを特徴とする対象範囲抽出方法。
【請求項８】
対象範囲抽出装置が備えるコンピュータを、
第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、前記複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと前記第２のモジュールの差分の有無を示す差分情報とに基づいて、前記第２のモジュールのうちの前記差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段と
して機能させるための対象範囲抽出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、静的検証装置に静的検証を実行させる対象範囲を抽出する、対象範囲抽出装置、静的検証システム、対象範囲抽出方法、及び対象範囲抽出プログラムに関する。
【背景技術】
【０００２】
ソフトウェアの静的解析（「静的検証」、「静的コード解析」、「静的プログラム解析」ともいう。）とは、コンピュータのソフトウェア（プログラム）の解析手法の一種であり、実行ファイルを動作させることなく解析を行うことである。
【０００３】
ソフトウェア開発において、ソフトウェアの品質を高めるために、ソフトウェアのコードの静的解析が行われる。一般に、ソースコードファイルは、バグの修正や、ソフトウェアの機能変更、機能追加等の理由で、繰り返し変更される。
【０００４】
ソースコードの静的解析工程では、ソースコードの一部しか変更されない場合であっても、ソフトウェアの品質を高めるために、全てのソースコードファイルに対して静的解析が行なわれることが多い。このとき、前回の静的解析の実行後に、内容が変更されていないソースコードファイルにおいては、前回と同様の静的解析結果が表示される。特に、ソースコードの規模が大きい場合等には、静的解析結果における指摘事項が大量に表示され、確認作業が煩雑である。ソースコードの静的解析において、静的解析システムのユーザが、前回の静的解析結果において確認済みの指摘項目を、同じ指摘項目であると判別できないことにより、再度、確認しなければならないことは非効率である。
【０００５】
特許文献１のソースコード解析支援装置は、変更前のソースコードと、変更後のソースコードの差分を抽出して自動解析を実施すべき範囲を特定し、特定した部分に対してのみ自動解析を行う。このとき、特許文献１のソースコード解析支援装置は、変更のないソースコード箇所に対する同一指摘項目を再表示しない。
【０００６】
上記の動作の結果、特許文献１のソースコード解析支援装置は、静的解析結果における指摘事項の表示量を低減する。
【０００７】
静的解析技術は、コンパイラ言語に限らず、インタプリタ言語やアセンブラ言語等、任意の言語で記述されたプログラムに対しても適用可能である。そこで、以下では、任意の言語により記述されたプログラムコードを「ソースコード」という。又、「ソースコード」を含むファイルを「ソースコードファイル」又は「ソースファイル」という。更に、１つの実行可能プログラムを記述するソースファイルの全体を「全体ソースファイル」といい、１つの「全体ソースファイル」に含まれる個々のソースファイルを「部分ソースファイル」という。１つの全体ソースファイルの構成要素を「モジュール」という。モジュールは、例えば、部分ソースファイル、又は手続型プログラミング言語における手続き（以下、単に「手続き」という。）である。モジュールは、モジュールの名称（以下、「モジュール名」という。）により識別される。モジュール名は、例えば、部分ソースファイルのファイル名、又は手続き名（例えば、関数名）である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１４６２０７号公報（第９ページ、図１、１１）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
変更されたソースコードと、変更されていないソースコードとの依存関係によっては、変更されていないソースコードに対しても、追加の指摘事項が必要になる場合がある。尚、ソースコードの「依存関係」とは、あるソースコードの一部（例えば、手続き、部分ソースファイル等のモジュール）が、他のソースコードから参照（例えば、手続きの呼び出し、部分ソースファイルの取り込み）されることを意味する。特許文献１のソースコード解析支援装置は、静的解析を実行する対象を、差分のあったソースコード箇所に限定する。つまり、差分のない箇所については、追加すべき指摘事項があったとしもそれらは表示されない。従って、特許文献１のソースコード解析支援装置では、ソースコードの変更により必要になった指摘事項のすべてが表示されない可能性があるという問題がある。
（発明の目的）
本発明の目的は、静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができる、対象範囲抽出装置、静的検証システム、対象範囲抽出方法、及び対象範囲抽出プログラムを提供することにある。
【課題を解決するための手段】
【００１０】
本発明の対象範囲抽出装置は、第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと第２のモジュールの差分の有無を示す差分情報とに基づいて、第２のモジュールのうちの差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段と、を備えることを特徴とする。
【００１１】
本発明の静的検証システムは、複数の第１のモジュールを含む第１の全体ソースファイル、及び複数の第１のモジュールのうちの第２のモジュールと共通の名称を有する第３のモジュールを含む第２の全体ソースファイルに含まれる、部分ソースファイル及びビルドファイルを保持し、第３のモジュールと第２のモジュールの差分の有無を示す差分情報を生成する構成管理装置と、複数の第１のモジュールの相互の依存関係を示す依存関係情報を生成する影響分析装置と、第１の全体ソースファイルに含まれるビルドファイルから静的検証の実行条件を示す実行条件情報を生成するビルド解析装置と、依存関係情報と、差分情報とに基づいて、第２のモジュールのうちの差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段を含む対象範囲抽出装置と、対象範囲情報及び実行条件情報に基づいて静的検証のためのコマンドを生成するコマンド生成装置と、コマンドを実行する静的検証装置と、を備えることを特徴とする。
【００１２】
本発明の対象範囲抽出方法は、第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと第２のモジュールの差分の有無を示す差分情報とに基づいて、第２のモジュールのうちの差分により定義の差分を生じうる第４のモジュールを限定することを特徴とする。
【００１３】
本発明の対象範囲抽出プログラムは、対象範囲抽出装置が備えるコンピュータを、第１の全体ソースファイルに含まれる複数の第１のモジュールの相互の依存関係を示す依存関係情報と、複数の第１のモジュールのうちの第２のモジュールと共通の名称を有し、第２の全体ソースファイルに含まれる第３のモジュールと第２のモジュールの差分の有無を示す差分情報とに基づいて、第２のモジュールのうちの差分により定義の差分を生じうる第４のモジュールを限定する対象範囲情報を生成する対象範囲生成手段として機能させることを特徴とする。
【発明の効果】
【００１４】
本発明によれば、静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができるという効果がある。
【図面の簡単な説明】
【００１５】
【図１】本発明の第１の実施形態における対象範囲抽出装置の構成の一例を示すブロック図である。
【図２】本発明の第１の実施形態における対象範囲抽出装置のハードウェア構成の一例を示すブロック図である。
【図３】本発明の第１の実施形態における対象範囲抽出装置の動作を示すフローチャートである。
【図４】本発明の第１の実施形態における対象範囲抽出装置の処理手順の具体例を説明するための図である。
【図５】本発明の第１の実施形態における対象範囲抽出装置の対象範囲抽出手段の動作を説明するための図である。
【図６】本発明の第２の実施形態における対象範囲抽出装置の対象範囲抽出手段の処理手順の別の具体例を説明するための図である。
【図７】本発明の第２の実施形態における対象範囲抽出装置の構成の一例を示すブロック図である。
【図８】本発明の第２の実施形態における静的検証システムの動作を示すフローチャートである。
【図９】本発明の第２の実施形態における静的検証システムの処理手順の具体例を説明するための図である。
【図１０】本発明の第２の実施形態における静的検証システムの処理手順の別の具体例を説明するための図の前半部分である。
【図１１】本発明の第２の実施形態における静的検証システムの処理手順の別の具体例を説明するための図の後半部分である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態について図面を参照して詳細に説明する。尚、すべての図面において、同等の構成要素には同じ符号を付し、適宜説明を省略する。
（第１の実施形態）
図１は、本実施形態における対象範囲抽出装置１００の構成の一例を示すブロック図である。
【００１７】
対象範囲抽出装置１００は、例えば、コンピュータ等の情報処理機器である。
【００１８】
対象範囲抽出装置１００は、対象範囲抽出手段１４０を含む。
【００１９】
対象範囲抽出手段１４０は、ソース差分情報２１０及び影響範囲情報４１０に基づいて、対象範囲情報５１０を生成する。
【００２０】
ソース差分情報２１０は、共通するモジュール名を有する２つの全体ソースファイル（以下、一方を「第１の全体ソースファイル」、他方を「第２の全体ソースファイル」という。）における、モジュール毎の違いの有無を示す情報である。ソース差分情報２１０は、例えば、新旧２時点の全体ソースファイルにおける、部分ソースファイル毎のファイル内容の差分の有無を示す情報である。あるいは、ソース差分情報２１０は、例えば、プログラムの２つの変種に対応する２つの全体ソースファイルにおける、手続き毎のコードの差分の有無を示す情報である。
【００２１】
影響範囲情報４１０は、静的検証の対象を含む１つの全体ソースファイル（以下、「第１の全体ソースファイル」とする。）における、モジュール間の依存関係を示す情報である。尚、モジュールの「依存関係」とは、あるモジュール（例えば、手続き、部分ソースファイル等）が、他のモジュールから参照（例えば、手続きの呼び出し、部分ソースファイルの取り込み）されることを意味する。影響範囲情報４１０は、例えば、第１の全体ソースファイルにおける、２つのソースファイルの組毎の、一方のソースファイルから他方のソースファイルへの手続き又はマクロの呼び出しの有無を示す情報である。あるいは、影響範囲情報４１０は、例えば、第１の全体ソースファイルにおける、２つの手続きの組毎の、一方の手続きから他方の手続きの呼び出しの有無を示す情報である。
【００２２】
対象範囲情報５１０は、第１の全体ソースファイルにおける、モジュール毎の影響の有無を示す情報である。対象範囲情報５１０は、例えば、新しい１時点に対応する第１の全体ソースファイルにおける、古い１時点に対応する第２の全体ソースファイルからの、部分ソースファイル毎のファイル内容の変更の有無を示す情報である。あるいは、対象範囲情報５１０は、例えば、静的検証の対象である１つのプログラムの変種に対応する第１の全体ソースファイルにおける、プログラムの別の変種に対応する第２の全体ソースファイルからの、手続き毎の定義（手続きの動作）の変更の有無を示す情報である。
【００２３】
つまり、対象範囲抽出手段１４０は、ソース差分情報２１０及び影響範囲情報４１０に基づいて、差分が第１の全体ソースファイルにおける各モジュールに影響を及ぼす範囲を限定することにより、対象範囲情報５１０を生成する。尚、「差分がモジュールに及ぼす影響」とは、差分により生じるモジュールの定義の差分を意味する。つまり、あるモジュールにおける他のモジュールへの参照（例えば、手続き（コード）の呼び出し、部分ソースファイルの取り込み）を含めた、モジュールを定義するコード全体の差分を意味する。
【００２４】
図２は、本実施形態における対象範囲抽出装置のハードウェア構成の一例を示すブロック図である。
【００２５】
対象範囲抽出装置１０１は、記憶装置１０２と、ＣＰＵ（Central Processing Unit）１０３と、キーボード１０４と、モニタ１０５と、Ｉ／Ｏ（Input/Output）１０８とを備え、これらが内部バス１０６で接続されている。記憶装置１０２は、対象範囲抽出手段１４０等のＣＰＵ１０３の動作プログラムを格納する。ＣＰＵ１０３は、対象範囲抽出装置１０１全体を制御し、記憶装置１０２に格納された動作プログラムを実行し、Ｉ／Ｏ１０８を介して対象範囲抽出手段１４０等のプログラムの実行やデータの送受信を行なう。なお、上記の対象範囲抽出装置１０１の内部構成は一例である。対象範囲抽出装置１０１は、ＣＰＵ１０３、記憶装置１０２、及びＩ／Ｏ１０８のみを備え、外部に備えられた、キーボード１０４、及びモニタ１０５を用いて動作してもよい。
【００２６】
次に、本実施形態の動作を説明する。
【００２７】
図３は、本実施形態における対象範囲抽出装置１００の動作を示すフローチャートである。
【００２８】
対象範囲抽出手段１４０は、ソース差分情報２１０及び影響範囲情報４１０に基づいて、対象範囲情報５１０を生成する（ステップＳ１１）。
【００２９】
次に、本実施形態の処理手順の具体例を説明する。
【００３０】
図４は、本実施形態における対象範囲抽出装置１００の処理手順の具体例を説明するための図である。
【００３１】
まず、本実施形態における対象範囲抽出装置１００の処理手順の具体例を説明するための前提について説明する。
（前提１）全体ソースファイルは、モジュールである手続き“ｍａｉｎ”、“ｓｕｂ”を含む。
（前提２）全体ソースファイルには、２つの全体ソースファイルが存在する。
（前提３）第１の全体ソースファイルに含まれる手続きのうち、“ｓｕｂ”のみが、第２の全体ソースファイルからの差分を有する。
（前提４）第１の全体ソースファイルに含まれる手続きのうち、“ｍａｉｎ”は、“ｓｕｂ”の手続きを呼び出す。この関係は、第１の全体ソースファイルにおける関係を示せばよく、第２の全体ソースファイルにおける関係は任意である。
（前提５）第１の全体ソースファイルに含まれる手続きのうち、“ｓｕｂ”は、他の手続きを呼び出さない。この関係も、第１の全体ソースファイルにおける関係を示せばよく、第２の全体ソースファイルにおける関係は任意である。
【００３２】
以上が、本実施形態における対象範囲抽出装置１００の処理手順の具体例を説明するための前提である。
【００３３】
ソース差分情報２１０は、前提１により２つのモジュールを持ち、前提２―３により“ｓｕｂ”にのみ２つの全体ソースファイルの間で差分が存在することを示す。尚、図４の表においては、差分が存在することを「真」を表す論理値“１”で、存在しないことを「偽」を表す論理値“０”で示す。以下、「真」を表す論理値を“１”で、「偽」を表す論理値を“０”で示す。
【００３４】
影響範囲情報４１０は、前提１により２つのモジュールに関する情報を持つ。又、前提４―５により、影響範囲情報４１０が示すモジュール間の呼び出し関係は、図４の表に示したとおりである。尚、表の行は呼び出し側のモジュールを、表の列は呼び出される側のモジュールを示し、呼び出しが存在することを“１”で、呼び出しが存在しないことを“０”で示す。又、あるモジュールからそのモジュール自身への呼び出しは、常に存在するものとみなす。
【００３５】
対象範囲抽出手段１４０は、ソース差分情報２１０及び影響範囲情報４１０に基づいて、対象範囲情報５１０を生成する（ステップＳ１１、詳細は後述）。
【００３６】
対象範囲情報５１０は、前提１により２つのモジュールを持ち、“ｍａｉｎ”及び“ｓｕｂ”にソース差分２１０の影響が及ぶこと、つまり静的検証の対象であることを示す。尚、図４の表においては、影響が及ぶことを“１”で、及ばないことを“０”で示す。
【００３７】
図５は、本実施形態における対象範囲抽出装置１００の対象範囲抽出手段１４０の処理手順の具体例を説明するための図である。
【００３８】
図中の行列は、依存構造マトリックス（ＤＳＭ：Dependency Structure Matrix）と呼ばれる。依存構造マトリックスは、モジュール数に一致する次元（図では、次元が“４”である例を示す。）を持つ。マトリックスの行は依存先のモジュールを、表の列は依存元のモジュールを示し、モジュール間に依存関係が存在することを“１”で、モジュール間に依存関係が存在しないことを“０”で示す。
【００３９】
図中の右側の列ベクトル（以下、「変化ベクトル」という。）は、モジュール数に一致する次元（例えば、“４”）を持つ。尚、表においては、モジュールに変化が存在することを“１”で、モジュールに変化が存在しないことを“０”で示す。
【００４０】
図中の左側の列ベクトル（以下、「影響ベクトル」という。）は、モジュール数に一致する次元（例えば、“４”）を持つ。尚、表においては、モジュールに変化の影響が存在することを“１”で、モジュールに変化の影響が存在しないことを“０”で示す。
【００４１】
影響ベクトルは、依存構造マトリックスに変化ベクトルを乗算することにより得られる。依存構造マトリックスと変化ベクトルの乗算は、通常の行列同士の乗算と同じ規則により計算される。つまり、変化ベクトルのｊ番目（j＝０，１，・・・，ｍ。ｍは第１の全体ソースファイル中のモジュールの個数）の成分をｂｊ、影響ベクトルのｉ番目（ｉ＝０，１，・・・，ｍ）の成分をｃｉ、依存構造マトリックスのｉ行ｊ列の成分をａｉｊとすると、影響ベクトルはｃｉ＝Σａｉｊ＊ｂｊにより計算される。ここで、“＊”は論理積を意味し、“Σ”は全てのｊ番目の成分についての総和を意味する。総和は、全成分についての論理和である。
【００４２】
ここで、ａｉｊ＊ｂｊは、依存元のｊ番目のモジュールの変化が依存先のｉ番目のモジュールに実際に影響を与えるか否かを示す。従って、ｃｉ＝Σａｉｊ＊ｂｊは、影響ベクトルのｉ番目の要素が影響を受けるか否かを示す。すなわち、対象範囲情報の各要素は、部分ソースコードの差分によって、一部でも影響を受けた場合には、必ず、静的検証の対象であることを示す“１”になる。
【００４３】
尚、影響ベクトルの代わりに、変化ベクトルの転置ベクトルに依存構造マトリックスの転置マトリックスを乗じることにより、影響ベクトルの転置ベクトルが計算されてもよい。
【００４４】
対象範囲抽出手段１４０は、各モジュールに所定の順番を与え、影響範囲情報４１０を依存構造マトリックスとみなし、ソース差分情報２１０を変化ベクトルとみなして、依存構造マトリックスに変化ベクトルを乗算することにより、影響ベクトルである対象範囲情報５１０を生成する（ステップＳ１１）。尚、前述のように、対象範囲抽出手段１４０は、変化ベクトルの転置ベクトルに依存構造マトリックスの転置マトリックスを乗じて影響ベクトルの転置ベクトルを限定することにより、対象範囲情報５１０を生成してもよい。
【００４５】
図４において、影響範囲情報４１０（依存構造マトリックス）にソース差分情報２１０（変化ベクトル）を乗じることによって、対象範囲情報５００（影響ベクトル）が得られる。
【００４６】
尚、第１の全体ソースファイルのあるモジュールが、第２の全体ソースファイルに含まれない場合には、対象範囲抽出手段１４０は、第２の全体ソースファイルに含まれないモジュールにも所定の順番（例えば、ｋ（ｋは自然数））を与える。対象範囲抽出手段１４０は、影響範囲情報４１０を依存構造マトリックスに、ソース差分情報２１０を変化ベクトルに、影響ベクトルを対象範囲情報５１０に対応付ける。ここで、変化ベクトルの第ｋ行成分ｂｋは“１”とみなす。
【００４７】
依存構造マトリックスはモジュール間の間接的な依存関係を含む依存関係を示す。仮に、依存構造マトリックスが、モジュール間の直接の依存関係のみを含み、間接的な依存関係を含まない場合には、依存構造マトリックスを冪乗（例えば、Ｍ乗（Ｍは自然数））することにより、モジュール間の直接的な依存関係のＭ回までの連鎖を考慮した間接的な依存関係を含む依存関係を示す間接依存構造マトリックスが得られる。なぜなら、前述の場合には、影響ベクトルは、変化ベクトルが直接的な依存関係のみの影響をＭ回受けた結果を示すからである。従って、第１の全体ソースファイル中にモジュールがｍ個ある場合は、連鎖は（ｍ−１）回起きうるので、Ｍはｍ−１に等しい。前述の場合には、対象範囲抽出手段１４０は、依存構造マトリックスの２乗以上の冪乗に、さらに変化ベクトルを乗算することにより、影響ベクトルを生成してもよい。尚、依存構造マトリックスの冪乗は、複数個の依存構造マトリックスを行列として乗算した結果の行列である。依存構造マトリックスの行列としての乗算において、成分間の積は論理積を、成分間の和は論理和である。
【００４８】
例えば、３つのモジュール間に、以下の直接的な依存関係があり、他の直接的な依存関係は存在しない場合を考える。モジュール“１”は、モジュール“２”に直接的に依存する。モジュール“２”は、モジュール“３”に直接的に依存する。上記の場合、モジュール“１”は、モジュール“２”を介して、モジュール“３”に依存する。このことを依存構造マトリックスで表現すると、依存構造マトリックスのｉ行ｊ列の成分ａｉｊは、
ａ１２＝ａ２３＝ａ１１＝ａ２２＝ａ３３＝１
ａｉｊ＝０（上記以外のすべての要素）
である。
【００４９】
上記の依存構造マトリックスを２乗して得られる間接依存構造マトリックスのｉ行ｊ列の成分ｄｉｊは、
ｄｉｊ＝Σａｉm＊ａmｊ（ｍ＝１，２，３）
＝ａｉ１＊ａ１ｊ＋ａｉ２＊ａ２ｊ＋ａｉ３＊ａ３ｊ
であるから、例えば、
ｄ１３＝ａ１１＊ａ１３＋ａ１２＊ａ２３＋ａ１３＊ａ３３
＝１＊０＋１＊１＋０＊１
＝１
である。
【００５０】
このように、依存構造マトリックスを２乗することによって、直接的依存関係の１回の連鎖により、あるモジュールが他のモジュールに間接的に依存するか否かを示す間接依存構造マトリックスが得られる。なぜなら、例えば、モジュール“１”のモジュール“３”への依存関係に着目すると、モジュール“１”のモジュール“３”への間接的依存の有無を示す要素ｄ１３に、モジュール“１”のモジュール“２”への直接的依存の有無を示す要素ａ１２と、モジュール“２”のモジュール“３”への直接的依存の有無を示すａ２３の積が含まれるからである。上記の２つの直接的依存関係が存在するときは、２つの要素の積は”１”になり、モジュール“１”のモジュール“３”への間接的依存が存在することを示す。２つの直接的依存関係の一方でも存在しないときは、２つの要素の積は”０”になり、モジュール“１”のモジュール“３”への間接的依存は存在しないことを示す。
【００５１】
モジュールの個数が４以上の場合についても同様である。すなわち、直接的依存関係の１回の連鎖による、あるモジュールの他のモジュールへの間接的依存の有無は、上記の方法によって求められた間接依存構造マトリックスによって示される。従って、求められた間接依存構造マトリックスにさらに依存構造マトリックスを乗算することによって、直接的依存関係の２回の連鎖による、あるモジュールの他のモジュールへの間接的依存の有無を示す間接依存構造マトリックスを求めることができる。このように、間接依存構造マトリックスへの依存構造マトリックスの乗算の繰り返し、すなわち依存構造マトリックスの（ｍ−１）乗を求めることによって、モジュール“１”、…、モジュール“ｍ”相互間の間接的依存の有無を示す間接依存構造マトリックスを求めることができる。尚、依存構造マトリックスの（Ｍ−１）乗がＭ乗に等しいならば、依存構造マトリックスの（Ｍ−１）乗以上の冪乗はすべて同一であるので、依存構造マトリックスの（Ｍ＋１）乗以上の計算は不要である。
【００５２】
図６は、本実施形態における対象範囲抽出装置１００の対象範囲抽出手段１４０の処理手順の別の具体例を説明するための図である。
【００５３】
影響範囲情報４２０は、モジュール間の直接の呼び出し関係のみを含む呼び出し関係を示す例である。影響範囲情報４２０は、“ｍａｉｎ”が“ｓｕｂ”を直接呼び出し、“ｓｕｂ”が“ｓｕｂ２”を直接呼び出し、それ以外には直接の呼び出し関係がないことを示す。
【００５４】
一方、影響範囲情報４３０は、モジュール間の間接の呼び出し関係を含む呼び出し関係を示す例である。影響範囲情報４３０は、影響範囲情報４２０が示す呼び出し関係に加えて、“ｍａｉｎ”は”ｓｕｂ”を介して“ｓｕｂ２”を間接的に呼び出すことを示す。影響範囲情報４３０に対応する依存構造マトリックスは、影響範囲情報４２０に対応する依存構造マトリックスの２乗以上の冪乗である。
【００５５】
第１の全体ソースファイルに対する静的検証が行われる以前に、第２の全体ソースファイルに対する静的検証が行われるものとする。第２の全体ソースファイルと第１の全体ソースファイルと間で差分があるモジュール“ｓｕｂ”については、第１の全体ソースファイルにおいて、静的検証が必要である。
【００５６】
一方、第２の全体ソースファイルと第１の全体ソースファイルと間で差分がないモジュール“ｍａｉｎ”については、“ｍａｉｎ”は“ｓｕｂ”を呼び出すので、“ｓｕｂ”の動作の変化により、動作が変わる可能性がある。そのため、“ｍａｉｎ”については、第２の全体ソースファイルと第１の全体ソースファイルと間で差分はないが、改めて静的検証することが必要である。対象範囲抽出装置１００は、静的検証の対象範囲として、“ｍａｉｎ”と“ｓｕｂ”の両方を抽出する。従って、検証結果には、静的検証の対象として指定された、第１の全体ソースコード及び第２の全体ソースコード間で差分の無い手続き“ｍａｉｎ（）”と、第１の全体ソースコード及び第２の全体ソースコード間で差分のある手続き“ｓｕｂ（）”に関する指摘事項が含まれる。
【００５７】
以上説明したように、本実施形態における対象範囲抽出装置１００では、２つの全体ソースファイル間で差分がない手続き（例えば、“ｍａｉｎ”）についても、別の手続き（例えば、“ｓｕｂ”）の差分により差分の影響が及ぶならば、静的検証の対象に指定する。従って、本実施形態における対象範囲抽出装置１００は、静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができる。
【００５８】
尚、上述の説明では、影響範囲情報４１０が手続型プログラミング言語における手続き間の依存関係である場合について説明した。しかしながら、本実施形態の影響範囲情報４１０は手続き間の依存関係を示す情報である必要はない。すなわち、本実施形態の影響範囲情報４１０は部分ソースファイル間の依存関係を示す情報であってもよい。対象範囲抽出装置１００の対象範囲抽出手段１４０は、部分ソースファイル毎のソース差分情報２１０及び部分ソースファイル毎の影響範囲情報４１０に基づいて、部分ソースファイル毎の対象範囲情報５１０を生成する。外部の静的検証装置が手続き毎に検証範囲を限定することができるならば、対象範囲抽出装置１００は、静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができる。
（第２の実施形態）
本実施形態の説明においては、第１の実施形態と本実施形態とで共通する説明は省略し、第１の実施形態に対する本実施形態の相違点のみについて説明する。
【００５９】
尚、本実施形態では、本実施形態における対象範囲抽出装置１９０を含む、静的検証システム全体の構成を説明する。
【００６０】
図７は、本実施形態における対象範囲抽出装置１９０の構成の一例を示すブロック図である。本実施形態における対象範囲抽出装置１９０の構成は、図１に示した第１の実施形態における対象範囲抽出装置１００の構成と同じであるが、入力である、ソース差分情報２１５、及び影響範囲情報４１５のデータ形式が異なる。
【００６１】
本実施形態における対象範囲抽出装置１９０を含む静的検証システムについて説明する。静的検証システムは、構成管理装置１１０と、影響分析装置１３０と、ビルド解析装置１２０と、対象範囲抽出装置１９０と、コマンド生成装置４００と、静的検証装置５００とを含む。
【００６２】
構成管理装置１１０は、例えば、コンピュータ等の情報処理機器である。構成管理装置１１０は、「構成管理システム」とも呼ばれる。構成管理システムには、例えば、「Ｓｕｂｖｅｒｓｉｏｎ（登録商標）」がある。構成管理装置１１０は、第１の全体ソースファイル２２０における部分ソースファイル２２１−２２４及びビルドファイル２２５、並びに第２の全体ソースファイル２３０における部分ソースファイル２３１−２３４及びビルドファイル２３５を保持する。構成管理装置１１０は、更に、第１の全体ソースファイル２２０における部分ソースファイル２２１−２２４及びビルドファイル２２５を出力する。構成管理装置１１０は、更に、第１の全体ソースファイル２２０における部分ソースファイル２２１−２２４及びビルドファイル２２５、並びに第２の全体ソースファイル２３０における部分ソースファイル２３１−２３４及びビルドファイル２３５に基づき、第１の全体ソースファイル２２０と第２の全体ソースファイル２３０間の部分ソースファイル毎の差分を示すソース差分情報２１５を生成する。
【００６３】
影響分析装置１３０は、例えば、コンピュータ等の情報処理機器である。影響分析装置１３０は、「影響分析システム」とも呼ばれる。影響分析システムには、例えば、ＴｅｃｈＭａｔｒｉｘ（登録商標）社の「Ｌａｔｔｉｘ」がある。影響分析装置１３０は、第１の全体ソースファイル２２０における、部分ソースファイル２２１−２２４及びビルドファイル２２５に基づき、部分ソースファイル２２１−２２４間の依存関係を示す影響範囲情報４１５を生成する。
【００６４】
ビルド解析装置１２０は、例えば、コンピュータ等の情報処理機器である。ビルド解析装置１２０は、「ビルド解析システム」とも呼ばれる。ビルド解析システムには、例えば、ＴｅｃｈＭａｔｒｉｘ社の「Ｌａｔｔｉｘ」がある。ビルド解析装置１２０は、第１の全体ソースファイル２２０におけるビルドファイル２２５から静的検証の実行条件を示す実行条件情報３１０を生成する。
【００６５】
対象範囲抽出装置１９０は、対象範囲生成手段１４５を含む。対象範囲生成手段１４５は、ソース差分情報２１５及び影響範囲情報４１５に基づいて、差分が第１の全体ソースファイル２２０における各モジュールに影響を及ぼす範囲を限定することにより、第１の全体ソースファイル２２０における静的検証の対象モジュールを示す対象範囲情報５１０を生成する。
【００６６】
コマンド生成装置４００は、対象範囲情報５１０及び実行条件情報３１０に基づいて、静的検証を実行させるための静的検証コマンド５２０を生成する。
【００６７】
実行条件情報３１０は、静的検証時の検証条件（プログラムの動作を指定するための情報）である。ソースファイルがコンパイラ言語で記述される場合、実行ファイルはソースファイルがコンパイルされることにより生成される。実行条件情報３１０は、コンパイル時に指定されるオプション（以下、「コンパイル時オプション」という。）の一部を含む。コンパイル時オプションは、ビルドファイルに記述される。又、実行条件情報３１０は、実行ファイルの実行時に指定されるオプション（以下、「実行時オプション」という。）の一部を含んでもよい。実行時オプションは、例えば、実行ファイルのコマンドラインオプションを含み、スクリプトファイル（シェルスクリプト、コマンドファイル）やテスト実行ファイル等に記述されることがある。
【００６８】
静的検証コマンド５２０は、静的検証装置５００に静的検証を実行させるためのコマンドラインである。静的検証コマンド５２０は、一群のソースファイルから静的検証の対象として選択されたソースファイルと、静的検証時のプログラムの動作を指定するためのコマンドラインオプション（以下、「静的検証時オプション」という。）とを含む。
【００６９】
静的検証装置５００は、例えば、コンピュータ等の情報処理機器である。静的検証装置５００は、「静的検証システム」とも呼ばれる。静的検証システムに、例えば、ＴｅｃｈＭａｔｒｉｘ社の「Ｃ＋＋ｔｅｓｔ」、「Ｊｔｅｓｔ」がある。静的検証装置５００は、静的検証の対象として選択された部分ソースファイルと静的検証時オプションとが指定された静的検証コマンド５２０を実行し、検証結果５３０を生成する。検証結果５３０には、静的検証の対象として指定された部分ソースファイルに関する指摘事項が含まれ、静的検証の対象として指定されない部分ソースファイルに関する指摘事項は含まれない。
【００７０】
次に、本実施形態の動作を説明する。
【００７１】
図８は、本実施形態における静的検証システムの動作を示すフローチャートである。
【００７２】
構成管理装置１１０は、第１の全体ソースファイル２２０における部分ソースファイル２２１−２２４及びビルドファイル２２５、並びに第２の全体ソースファイル２３０における部分ソースファイル２３１−２３４及びビルドファイル２３５からソース差分情報２１５を生成する（ステップＳ２１）。
【００７３】
影響分析装置１３０は、第１の全体ソースファイル２２０における、部分ソースファイル２２１−２２４及びビルドファイル２２５から、部分ソースファイル２２１−２２４間の依存関係を示す影響範囲情報４１５を生成する（ステップＳ２２）。
【００７４】
ビルド解析装置１２０は、第１の全体ソースファイル２２０におけるビルドファイル２２５から静的検証の実行条件を示す実行条件情報３１０を生成する（ステップＳ２３）。
【００７５】
対象範囲抽出装置１９０の対象範囲生成手段１４５は、影響範囲情報４１５と、ソース差分情報２１５とに基づいて、第１の全体ソースファイル２２０における静的検証の対象モジュール（部分ソースファイル）を示す対象範囲情報５１０を生成する（ステップＳ２４）。
【００７６】
コマンド生成装置４００は、対象範囲情報５１０及び実行条件情報３１０に基づいて、静的検証コマンド５２０を生成する（ステップＳ２５）。
【００７７】
静的検証装置５００は、静的検証の対象として選択された部分ソースファイルと静的検証時オプションとが指定された静的検証コマンド５２０を実行し、検証結果５３０を生成する（ステップＳ２６）。
【００７８】
次に、本実施形態の処理手順の具体例を説明する。
【００７９】
図９は、本実施形態における静的検証システムの処理手順の具体例を説明するための図である。
【００８０】
全体ソースファイルには、２つの全体ソースファイル２２０、２３０が存在する。ビルドファイル２３５及び部分ソースファイル２３１−２３４は、第２の時点（例えば、古い時点）のビルドファイル及び部分ソースファイルである。ビルドファイル２２５及び部分ソースファイル２２１−２２４は、第１の時点（例えば、新しい時点）のビルドファイル及び部分ソースファイルである。全体ソースファイル２２０、２３０は、Ｃ言語により記述され、部分ソースファイル“ｍａｉｎ．ｃ”２２１、２３１、“ｓｕｂ．ｃ”２２２、２３２、“ｓｕｂ２．ｃ”２２３、２３３、“ｃｏｍ．ｈ”２２４、２３４を含む。ヘッダファイル（“ｃｏｍ．ｈ”）２２４、２３４を除く２つの全体ソースファイル２２０、２３０は、それぞれ異なるディレクトリ（フォルダ。例えば、「ｎｅｗ」、「ｏｌｄ」。）に格納される。ヘッダファイル２２４、２３４は、ヘッダファイルを除く部分ソースファイルが格納されるディレクトリ配下の“ｉｎｃｌｕｄｅ”ディレクトリに格納される。
【００８１】
第１の全体ソースファイル２２０に含まれる部分ソースファイルのうち、“ｓｕｂ．ｃ”２２２のみが、第２の全体ソースファイル２３０からの差分を有する。部分ソースファイル２２２には、部分ソースファイル２３２に対し、第６行に１行追加されている。ビルドファイル２２５には、ビルドファイル２３５に対する差分はない。部分ソースファイル２２１、２２２、２２４には、それぞれ、部分ソースファイル２３１、２３２、２３４に対する差分はない。
【００８２】
第１の全体ソースファイル２２０に含まれる部分ソースファイルのうち、“ｍａｉｎ．ｃ”２２１は、“ｓｕｂ．ｃ”２２２の手続き、及び“ｃｏｍ．ｈ”２２４のマクロを呼び出す。この関係は、第１の全体ソースファイル２２０における関係を示せばよく、第２の全体ソースファイル２３０における関係は任意である。
【００８３】
第１の全体ソースファイル２２０に含まれる部分ソースファイルのうち、“ｓｕｂ．ｃ”２２２は、“ｓｕｂ２．ｃ”２２３の手続き、及び“ｃｏｍ．ｈ”２２４のマクロを呼び出す。この関係も、第１の全体ソースファイル２２０における関係を示せばよく、第２の全体ソースファイル２３０における関係は任意である。
【００８４】
第１の全体ソースファイル２２０に含まれる部分ソースファイルのうち、“ｓｕｂ２．ｃ”２２３は、他のソースファイルの手続き、及び“ｃｏｍ．ｈ”２２４のマクロの双方とも呼び出さない。この関係も、第１の全体ソースファイル２２０における関係を示せばよく、第２の全体ソースファイル２３０における関係は任意である。
【００８５】
図１０は、本実施形態における静的検証システムの処理手順の別の具体例を説明するための図の前半部分である。
【００８６】
構成管理装置１１０は、第１の全体ソースファイル２２０における部分ソースファイル２２１−２２４及び第２の全体ソースファイル２３０における部分ソースファイル２３１−２３４からソース差分情報２１５を生成する（ステップＳ２１）。
【００８７】
ソース差分情報２１５は、第１の全体ソースファイル２２０及び第２の全体ソースファイル２３０間における、部分ソースファイル毎の差分の有無を示す。“ｓｕｂ．ｃ”にのみ２つの全体ソースファイルの間で差分が存在することを示す。
【００８８】
ソース差分情報２２５は、一般的な“ｄｉｆｆ”コマンドの実行結果の例である。第１の全体ソースファイル及び第２の全体ソースファイル間における部分ソースファイル及びビルドファイルのうち、部分ソースファイル“ｓｕｂ．ｃ”２２２と部分ソースファイル“ｓｕｂ．ｃ”２３２との間にのみ差分がある。そのため、ソース差分情報２２５には、部分ソースファイル２２２と部分ソースファイル２３２との間に差分がある旨と差分の内容が示される。本ソース差分情報２２５は、ソース差分情報２１５に示す内容に一致する。
【００８９】
影響分析装置１３０は、第１の全体ソースファイル２２０における、部分ソースファイル２２１−２２４及びビルドファイル２２５から、部分ソースファイル２２１−２２４間の依存関係を示す影響範囲情報４１５を生成する（ステップＳ２２）。
【００９０】
影響範囲情報４１５は、４つの部分ソースファイル２２１−１１４間の依存関係に関する情報を持つ。影響範囲情報４１５が示すモジュール間の呼び出し関係は、図１０の表に示すとおりである。影響範囲情報４１５は、モジュール間の直接及び間接のすべての呼び出し関係を含む呼び出し関係を示す。尚、あるモジュールからそのモジュール自身への呼び出しは、常に存在するものとみなす。
【００９１】
部分ソースファイル“ｍａｉｎ．ｃ”２２１は、関数“ｓｕｂ（）”を介して部分ソースファイル“ｓｕｂ．ｃ”２２２に依存し、関数“ｓｕｂ（）”及び“ｓｕｂ２（）”を介して部分ソースファイル“ｓｕｂ２．ｃ”２２３に依存し、“ｉｎｃｌｕｄｅ”行を介して部分ソースファイル“ｃｏｍ．ｈ”２２４に依存する。すなわち、部分ソースファイル“ｍａｉｎ．ｃ２２１”は、部分ソースファイル“ｓｕｂ．ｃ”２２２、部分ソースファイル“ｓｕｂ２．ｃ”２２３、及び部分ソースファイル“ｃｏｍ．ｈ”２２４に直接的又は間接的に依存する。
【００９２】
部分ソースファイル“ｓｕｂ．ｃ”２２２は、関数“ｓｕｂ２（）”を介して部分ソースファイル“ｓｕｂ２．ｃ”２２３に依存し、“ｉｎｃｌｕｄｅ”行を介して部分ソースファイル“ｃｏｍ．ｈ”２２４に依存する。すなわち、部分ソースファイル“ｓｕｂ．ｃ”２２２は、部分ソースファイル“ｓｕｂ２．ｃ”２２３、部分ソースファイル“ｃｏｍ．ｈ”２２４に直接的又は間接的に依存する。
【００９３】
部分ソースファイル“ｓｕｂ２．ｃ”２２３、“ｃｏｍ．ｈ”２２４は、関数を介しても、“ｉｎｃｌｕｄｅ”行を介しても、他の部分ソースファイルに依存しない。
【００９４】
影響範囲情報４２５は、４つの部分ソースファイル２２１−１１４間の直接の呼び出し関係のみを含む呼び出し関係を示す。部分ソースファイル“ｍａｉｎ．ｃ”２２１は、関数“ｓｕｂ（）”及び“ｓｕｂ２（）”を介して部分ソースファイル“ｓｕｂ２．ｃ”２２３に間接的に依存するが、直接的には依存しない。影響範囲情報４２５の依存構造マトリックスの２乗以上の冪乗は、影響範囲情報４１５の依存構造マトリックスに一致する。
【００９５】
４つのモジュール間の直接的な依存関係は以下に示すとおりである。モジュール“１”は、モジュール“２”及びモジュール“４”に直接的に依存する。モジュール“２”は、モジュール“３”及びモジュール“４”に直接的に依存する。上記の場合、モジュール“１”は、モジュール“２”を介して、モジュール“３”に依存する。このことを依存構造マトリックスで表現すると、依存構造マトリックスのｉ行ｊ列の成分ａｉｊは、
ａ１２＝ａ１４＝ａ２３＝ａ２４＝ａ１１＝ａ２２＝ａ３３＝ａ４４＝１
ａｉｊ＝“０”（上記以外のすべての要素）
である。
【００９６】
上記の依存構造マトリックスを２乗して得られる間接依存構造マトリックスのｉ行ｊ列の成分ｄｉｊは、
ｄｉｊ＝Σａｉm＊ａmｊ（ｍ＝１，２，３，４）
＝ａｉ１＊ａ１ｊ＋ａｉ２＊ａ２ｊ＋ａｉ３＊ａ３ｊ＋ａｉ４＊ａ４ｊ
であるから、例えば、
ｄ１３＝ａ１１＊ａ１３＋ａ１２＊ａ２３＋ａ１３＊ａ３３＋ａ１４＊ａ４３
＝１＊０＋１＊１＋０＊１＋１＊０
＝１
である。つまり、モジュール“１”は、モジュール“３”に間接的に依存する。本実施形態の場合は、モジュール“１”は、モジュール“２”に直接的に依存し、モジュール“２”は、モジュール“３”に直接的に依存するため、ａ１２＝ａ２３＝１となっている。そのため、モジュールの個数は４個であるが、依存構造マトリックスを２乗するだけで、モジュール“１”のモジュール“３”への間接的依存の有無が判明する。
【００９７】
対象範囲生成手段１４５は、影響範囲情報４１５及びソース差分情報２１５に基づいて、第１の全体ソースファイル２２０における静的検証の対象モジュールを示す対象範囲情報５１５を生成する（ステップＳ２４）。対象範囲情報５１５は、影響範囲情報４１５に対応する依存構造マトリックスに、ソース差分情報２１５に対応する変化ベクトルを乗算した結果である影響ベクトルに一致する。
【００９８】
尚、影響範囲情報が、部分ソースファイル間の直接の呼び出し関係のみを含み、間接的な呼び出し関係を含まない場合には、対象範囲抽出手段１４５は、影響範囲情報４２５に対応する依存構造マトリックスの２乗以上の冪乗に、ソース差分情報２１５に対応する変化ベクトルを乗算することにより、対象範囲情報５１５に対応する影響ベクトルを生成してもよい。
【００９９】
図１１は、本実施形態における静的検証システムの処理手順の別の具体例を説明するための図の後半部分である。
【０１００】
ビルド解析装置１２０は、第１の全体ソースファイル２２０におけるビルドファイル２２５から静的検証の実行条件を示す実行条件情報３１５を生成する（ステップＳ２３）。ビルドファイル２２５の第２行には、“ｍａｉｎ．ｃ”のコンパイルオプションとして、“−Ｉ．／ｉｎｃｌｕｄｅ”が含まれる。ビルドファイル２２５の第３行には、“ｓｕｂ．ｃ”のコンパイルオプションとして、“−Ｉ．／ｉｎｃｌｕｄｅ”が含まれる。ビルドファイル２２５の第４行には、“ｓｕｂ２．ｃ”のコンパイルオプションとして、有効なオプションは含まれない。前述のコンパイルオプション情報は、図１１のビルド情報３１５に示した内容に含まれる。図１１のビルド情報３１５において、“ｍａｉｎ．ｃ”、“ｓｕｂ．ｃ”のオプションであることは第５行に、“ｍａｉｎ．ｃ”、“ｓｕｂ．ｃ”のオプションの内容は第９行に、“ｓｕｂ２．ｃ”のオプションであることは第２５行に、“ｓｕｂ２．ｃ”のオプションの内容は第２９行に示される。尚、図１１のビルド情報３１５において、ディレクトリは絶対パスで示されているが、相対パスに読み替え可能である。
【０１０１】
コマンド生成装置４００は、対象範囲情報５１５及び実行条件情報３１５に基づいて、静的検証コマンド５２０を生成する（ステップＳ２５）。
【０１０２】
実行条件情報３１０は、“ｍａｉｎ．ｃ”２２１及び“ｓｕｂ．ｃ”２２２のみが“ｃｏｍ．ｈ”２２５を呼び出すので、“ｍａｉｎ．ｃ”及び“ｓｕｂ．ｃ”のみが値“−Ｉ．／ｉｎｃｌｕｄｅ”（一般的なＣコンパイラのコマンドラインオプション）を持つことを示す。尚、“−Ｉ．／ｉｎｃｌｕｄｅ”は、“ｃｏｍ．ｈ”の呼び出し先ディレクトリが“．／ｉｎｃｌｕｄｅ”であることを示す。
【０１０３】
コマンド生成装置４００は、例えば、コマンド名を“ｔｏｏｌ”に指定し、対象範囲情報５１０により“ｍａｉｎ．ｃ”及び“ｓｕｂ．ｃ”を検証対象に指定する。そして、コマンド生成装置４００は、実行条件情報３１０により“ｍａｉｎ．ｃ”及び“ｓｕｂ．ｃ”に対応するＣコンパイラのコマンドラインオプション“−Ｉ．／ｉｎｃｌｕｄｅ”を検証条件に指定して、静的検証コマンド５２０を生成する。
【０１０４】
尚、上述の説明では、静的検証時オプションとして、ヘッダファイルを指定する“−Ｉ”オプションの例を示した。静的検証時オプションは、マクロを追加定義する“−Ｄ”オプション、又はマクロを未定義にする“−Ｕ”オプション、又は標準ヘッダファイルを検索しない“−ｎｏｓｔｄｉｎｃ” オプション等を含んでもよい。
【０１０５】
静的検証装置５００は、対象範囲情報と実行条件情報とが指定された静的検証コマンド５２０を実行し、検証結果５３０を生成する（ステップＳ２６）。
【０１０６】
第１の全体ソースファイルに対する静的検証が行われる以前に、第２の全体ソースファイルに対する静的検証が行われるものとする。第２の全体ソースファイルと第１の全体ソースファイルと間で差分があるモジュール“ｓｕｂ．ｃ”については、第１の全体ソースファイルにおいて、静的検証が必要である。
【０１０７】
一方、第２の全体ソースファイルと第１の全体ソースファイルと間で差分がないモジュール“ｍａｉｎ．ｃ”については、“ｍａｉｎ．ｃ”は“ｓｕｂ．ｃ”を呼び出すので、“ｓｕｂ．ｃ”の動作の変化により、動作が変わる可能性がある。そのため、“ｍａｉｎ．ｃ”については、第２の全体ソースファイルと第１の全体ソースファイルと間で差分はないが、改めて静的検証することが必要である。第２の全体ソースファイルと第１の全体ソースファイルと間で差分がないモジュール“ｓｕｂ２．ｃ”、“ｃｏｍ．ｈ”は、他の部分ソースファイルを呼び出さないので、改めての静的検証は必要ない。対象範囲抽出装置１９０は、静的検証の対象範囲として、“ｍａｉｎ．ｃ”と“ｓｕｂ．ｃ”の両方を抽出する。従って、検証結果５３０には、静的検証の対象として指定された、第１の全体ソースコード及び第２の全体ソースコード間で差分の無い部分ソースファイル“ｍａｉｎ．ｃ”と、第１の全体ソースコード及び第２の全体ソースコード間で差分のある部分ソースファイル“ｓｕｂ．ｃ”に関する指摘事項が含まれる。
【０１０８】
以上説明したように、本実施形態における対象範囲抽出装置１９０では、２つの全体ソースファイル間で差分がないソースファイル（例えば、”ｍａｉｎ．ｃ”）についても、別のソースファイル（例えば、”ｓｕｂ．ｃ”）の差分により差分の影響が及ぶならば、静的検証の対象に指定する。従って、本実施形態における対象範囲抽出装置１９０は、静的検証において、２つの全体ソースファイル間の差分に起因して指摘することが必要になる事項に関し、２つの全体ソースファイル間で差分があるモジュール以外についても必要な指摘事項を表示することができる。
【０１０９】
第１及び第２の実施形態では、対象範囲抽出装置が、独立した装置である場合について説明した。しかしながら、本発明の対象範囲抽出装置は、必ずしも独立した装置である必要はない。すなわち、構成管理装置１１０、影響分析装置１３０、ビルド解析装置１２０、静的検証装置５００、又は静的検証装置のうちの１台以上、及び対象範囲抽出装置が、１台の装置に統合されてもよい。
【０１１０】
尚、図３の対象範囲抽出装置の各処理は、ソフトウェアによって実行されてもよい。すなわち、各処理を行うためのコンピュータプログラムが、対象範囲抽出装置が備えるＣＰＵ（図２：９０３）によって読み込まれ、実行されてもよい。プログラムを用いて各処理を行っても、上述の実施形態の処理と同内容の処理を行うことができる。そして、上記のプログラムは、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、フラッシュメモリ等の半導体記憶装置、光ディスク、磁気ディスク、光磁気ディスク等、非一時的な媒体に格納されてもよい。
【０１１１】
あるいは、各処理は、個別の回路等の構成要素によって実行されてもよい。
【０１１２】
尚、本願発明は、上述の実施形態に限定されるものではなく、本願発明の要旨を逸脱しない範囲で種々変更、変形して実施することができる。
【図１】
2015069332.tif 000003
【図２】
2015069332.tif 000004
【図３】
2015069332.tif 000005
【図４】
2015069332.tif 000006
【図５】
2015069332.tif 000007
【図６】
2015069332.tif 000008
【図７】
2015069332.tif 000009
【図８】
2015069332.tif 000010
【図９】
2015069332.tif 000011
【図１０】
2015069332.tif 000012
【図１１】
2015069332.tif 000013