(57)【要約】      （修正有）【課題】ループ内のモデル検査におけるループ最適化方法を提供する。【解決手段】モデル検査技法を利用してソースコードの検証を行う処理において、ソースコードから自動的にモデルを生成し、ソースコードに対し、モデル検査による検証を行うモデル検査制御部１０と、モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図る任意値ループ制御部３０とを具備する。【効果】ループ内のモデル検査のうち、繰り返しで重複する検査分の検証時間を短縮する。【選択図】図１
2010097328.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードから自動的にモデルを生成し、前記ソースコードに対し、モデル検査による検証を行うモデル検査制御部と、
前記モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図る任意値ループ制御部と
を具備する
ループ最適化システム。
【請求項２】
請求項１に記載のループ最適化システムであって、
前記モデル検査制御部は、
前記ソースコード及び検査仕様を読み込み、コンパイラ最適化処理を実施した上でＣＦＧ（コントロールフローグラフ）モデルを作成し、前記任意値ループ制御部に提供するＣＦＧモデル作成部と、
前記任意値ループ制御部から提供されたＣＦＧモデルを読み込み、計算木論理（Ｃｏｍｐｕｔａｔｉｏｎ  Ｔｒｅｅ  Ｌｏｇｉｃ：ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成する検査モデル作成部と、
前記検査モデルを読み込み、前記計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査を実行するモデル検査実行部と、
前記実行された検査の結果を出力する検査結果出力部と
を具備する
ループ最適化システム。
【請求項３】
請求項２に記載のループ最適化システムであって、
前記任意値ループ制御部は、
前記モデル検査制御部から提供されたＣＦＧモデルを読み込み、前記ＣＦＧモデル中のループを検出するループ検出部と、
前記検出されたループ中に出現する値のデータ依存グラフを作成するデータ依存グラフ作成部と、
前記データ依存グラフ中の各変数のうち、前記検出されたループ以降で利用されている変数にマークするループ外利用変数マーク部と、
前記データ依存グラフの中から、前記任意値を要素に含み、前記マークされた変数を含む部分グラフを検出する部分グラフ検出部と、
前記検出された部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフに含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加して、前記モデル検査制御部に提供するＣＦＧモデル変換部と
を具備する
ループ最適化システム。
【請求項４】
請求項３に記載のループ最適化システムであって、
前記ＣＦＧモデル作成部から変換前のＣＦＧモデルを取得して保持し、前記変換前のＣＦＧモデルを前記ループ検出部に前記提供するための変換前ＣＦＧモデル記憶部と、
前記ＣＦＧモデル変換部から変換後のＣＦＧモデルを取得して保持し、前記変換後のＣＦＧモデルを前記検査モデル作成部に提供するための変換後ＣＦＧモデル記憶部と、
前記検査モデル作成部から前記検査モデルを取得して保持し、前記検査モデルを前記モデル検査実行部に提供するための検査モデル記憶部と
を更に具備する
ループ最適化システム。
【請求項５】
請求項３又は４に記載のループ最適化システムであって、
前記部分グラフ検出部は、前記データ依存グラフの中から、前記任意値を含む変数の代入式を要素に含み、前記マークされた変数をただ一つ含む部分グラフを検出し、
前記ＣＦＧモデル変換部は、前記任意値を含む変数の代入式に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフにただ一つ含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加し、前記モデル検査制御部に提供する
ループ最適化システム。
【請求項６】
請求項５に記載のループ最適化システムであって、
前記部分グラフ検出部は、前記マークされた変数が二つ以上含まれる部分グラフに対しては、前記ＣＦＧモデルの変換を制限し、
前記ＣＦＧモデル変換部は、前記ＣＦＧモデルを前記モデル検査制御部に提供する
ループ最適化システム。
【請求項７】
ソースコードから自動的にモデルを生成し、前記ソースコードに対し、モデル検査による検証を行うステップと、
前記モデルの生成の過程で、前記モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図るステップと
を含む
ループ最適化方法。
【請求項８】
請求項７に記載のループ最適化方法であって、
前記ソースコード及び検査仕様を読み込み、コンパイラ最適化処理を実施した上でＣＦＧ（コントロールフローグラフ）モデルを作成するステップと、
前記ＣＦＧモデルを読み込み、前記ＣＦＧモデル中のループを検出するステップと、
前記検出されたループ中に出現する値のデータ依存グラフを作成するステップと、
前記データ依存グラフ中の各変数のうち、前記検出されたループ以降で利用されている変数にマークするステップと、
前記データ依存グラフの中から、前記任意値を要素に含み、前記マークされた変数を含む部分グラフを検出するステップと、
前記検出された部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフに含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加し、前記ＣＦＧモデルを変換するステップと
前記変換されたＣＦＧモデルを読み込み、計算木論理（Ｃｏｍｐｕｔａｔｉｏｎ  Ｔｒｅｅ  Ｌｏｇｉｃ：ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成するステップと、
前記検査モデルを読み込み、前記計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査を実行するステップと、
前記実行された検査の結果を出力するステップと
を更に含む
ループ最適化方法。
【請求項９】
請求項８に記載のループ最適化方法であって、
前記データ依存グラフの中から、前記任意値を含む変数の代入式を要素に含み、前記マークされた変数をただ一つ含む部分グラフを検出するステップと、
前記任意値を含む変数の代入式に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフにただ一つ含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加し、前記ＣＦＧモデルを変換するステップと
を更に含む
ループ最適化方法。
【請求項１０】
請求項９に記載のループ最適化方法であって、
前記マークされた変数が二つ以上含まれる部分グラフに対しては、前記ＣＦＧモデルの変換を制限するステップと、
前記ＣＦＧモデルを読み込み、前記計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成するステップと
を更に含む
ループ最適化方法。
【請求項１１】
ソースコードから自動的にモデルを生成し、前記ソースコードに対し、モデル検査による検証を行うステップと、
前記モデルの生成の過程で、前記モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図るステップと
をコンピュータに実行させるための
プログラム。
【請求項１２】
請求項１１に記載のプログラムであって、
前記ソースコード及び検査仕様を読み込み、コンパイラ最適化処理を実施した上でＣＦＧ（コントロールフローグラフ）モデルを作成するステップと、
前記ＣＦＧモデルを読み込み、前記ＣＦＧモデル中のループを検出するステップと、
前記検出されたループ中に出現する値のデータ依存グラフを作成するステップと、
前記データ依存グラフ中の各変数のうち、前記検出されたループ以降で利用されている変数にマークするステップと、
前記データ依存グラフの中から、前記任意値を要素に含み、前記マークされた変数を含む部分グラフを検出するステップと、
前記検出された部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフに含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加し、前記ＣＦＧモデルを変換するステップと
前記変換されたＣＦＧモデルを読み込み、計算木論理（Ｃｏｍｐｕｔａｔｉｏｎ  Ｔｒｅｅ  Ｌｏｇｉｃ：ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成するステップと、
前記検査モデルを読み込み、前記計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査を実行するステップと、
前記実行された検査の結果を出力するステップと
を更にコンピュータに実行させるための
プログラム。
【請求項１３】
請求項１２に記載のプログラムであって、
前記データ依存グラフの中から、前記任意値を含む変数の代入式を要素に含み、前記マークされた変数をただ一つ含む部分グラフを検出するステップと、
前記任意値を含む変数の代入式に対応するＣＦＧモデル要素を前記ＣＦＧモデルから削除し、前記検出されたループの直後に、前記検出された部分グラフにただ一つ含まれる前記マークされた変数に対して、前記削除されたＣＦＧモデル要素を前記ＣＦＧモデルに追加し、前記ＣＦＧモデルを変換するステップと
を更にコンピュータに実行させるための
プログラム。
【請求項１４】
請求項１３に記載のプログラムであって、
前記マークされた変数が二つ以上含まれる部分グラフに対しては、前記ＣＦＧモデルの変換を制限するステップと、
前記ＣＦＧモデルを読み込み、前記計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成するステップと
を更にコンピュータに実行させるための
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ループ最適化システムに関し、特にループ内のモデル検査におけるループ最適化システムに関する。
【背景技術】
【０００２】
Ｃ言語等のプログラミング言語で記述されたソースコードを、形式検証の一手法であるモデル検査法で検証する方法として、従来からいくつかの方法が知られている。
【０００３】
一般に、ソースコードから自動的にモデルを構築しモデル検査による検証を行う場合、生成されるモデルの状態数が膨大になり、計算量が非常に多くなるため、モデル化の過程で様々な最適化を行う必要がある。制御構造や処理の流れを表したコントロールフローグラフ（ＣＦＧ）と呼ばれる中間モデルの生成過程においても、複数の最適化が行われるが、ループ制御構造の解析においては、「ループ不変計算除去」等のコンパイラ最適化技法による最適化処理しか行われていなかった。
【０００４】
ここで、「ループ不変計算除去」とは、ループ制御変数の影響を受けないループ不変計算の検出、及びコード移動の処理により、ループ内変数の計算処理をループ外に移動することによって、ループ内での計算処理量を軽減し、検証時間を短縮するというものである。
【０００５】
モデル検査において、ループ内に任意値を含む計算処理がある場合に、その計算処理がコンパイラ最適化の対象とならない場合は、モデル検査の過程において、ループによる繰り返し処理の回数分、任意値が取り得る値の全てに対して網羅的な検証が行われるため、計算量が非常に大きくなり、結果として検証時間が長くなるという課題があった。
【０００６】
ここで、「任意値」とは、モデル検査の処理において、与えられた条件からは特定の値をとることが計算できない変数や、処理の実体が定義されていない関数を、生成されたモデルの中で特別に表現するための要素を意味する。
【０００７】
モデル検査においては、式の中で任意値が参照されると、取り得る値の全ての状態が存在する可能性があるものとして、虱潰し（網羅的）に全ての状態について検査を行う。例えば、任意値が８ビット符号あり整数型である場合には、「−１２８、−１２７、…、０、…、１２７」（−１２８〜１２７）のいずれの値も取り得る可能性があるとして、全ての場合について検査を行う。
【０００８】
関連する技術として、特表２００７−５２８０５９号公報（特許文献１）にソフトウェアのモデル化、抽象、及び分析のためのシステムと方法が記載されている。
この関連技術は、ソースコード検証においてソースコードをモデル検査可能なモデルに変換し検証を行う技術である。しかし、この関連技術では、ループ内に任意値を含む変数の計算処理があっても特別な処理は行わず、そのままモデル検査を行っている。このため、ループ内で繰り返し任意値に関わる検証を行い、重複する部分の検査の検証時間が必要となっていた。
【０００９】
【特許文献１】特表２００７−５２８０５９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
モデル検査技法を利用してソースコードの検証を行う処理において、モデル検査を実施する前に任意値に関連する計算処理を削除し、ループ外で任意値を代入する処理を追加する。
【課題を解決するための手段】
【００１１】
本発明のループ最適化システムは、ソースコードから自動的にモデルを生成し、ソースコードに対し、モデル検査による検証を行うモデル検査制御部と、モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図る任意値ループ制御部とを具備する。
【００１２】
本発明のループ最適化方法は、ソースコードから自動的にモデルを生成し、ソースコードに対し、モデル検査による検証を行うステップと、モデルの生成の過程で、モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図るステップとを含む。
【００１３】
本発明のプログラムは、ソースコードから自動的にモデルを生成し、ソースコードに対し、モデル検査による検証を行うステップと、モデルの生成の過程で、モデル中のループ内に存在する任意値を含む変数の代入式をループ外に移動し、検証時間の短縮を図るステップとをコンピュータに実行させるためのプログラムである。
【発明の効果】
【００１４】
ループ内のモデル検査のうち、繰り返しで重複する検査分の検証時間を短縮する。
【発明を実施するための最良の形態】
【００１５】
以下に、本発明の実施形態について添付図面を参照して説明する。
【００１６】
図１を参照すると、本発明のループ最適化システムは、モデル検査制御部１０と、記憶部２０と、任意値ループ制御部３０を備える。
【００１７】
本発明のループ最適化システムの例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等のコンピュータや、携帯電話機、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、カーナビ（カーナビゲーションシステム）、携帯ゲーム機、又は同様の無線通信機能を有する電子機器等の携帯端末が考えられる。但し、実際には、これらの例に限定されない。
【００１８】
モデル検査制御部１０、及び任意値ループ制御部３０の例として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やマイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）等の処理装置、又は同様の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＩＣ）等が考えられる。なお、モデル検査制御部１０、及び任意値ループ制御部３０は、各々の機能をコンピュータに実行させるためのプログラムでも良い。但し、実際には、これらの例に限定されない。
【００１９】
記憶部２０の例として、メモリ等の半導体記憶装置、ハードディスク等の外部記憶装置（ストレージ）、又は、記憶媒体（メディア）等が考えられる。また、記憶部２０は、中継機器や周辺機器でも良い。更に、記憶部２０は、複数のモデル検査制御部１０や任意値ループ制御部３０により共有されていても良い。但し、実際には、これらの例に限定されない。
【００２０】
また、モデル検査制御部１０、記憶部２０、及び任意値ループ制御部３０の各々は、物理的に独立したコンピュータでも良い。例えば、モデル検査制御部１０を端末とし、記憶部２０や任意値ループ制御部３０をサーバとするネットワークシステムが考えられる。但し、実際には、これらの例に限定されない。
【００２１】
モデル検査制御部１０は、ＣＦＧモデル作成部１１と、検査モデル作成部１２と、モデル検査実行部１３と、検査結果出力部１４を含む。
【００２２】
記憶部２０は、変換前ＣＦＧモデル記憶部２１と、変換後ＣＦＧモデル記憶部２２と、検査モデル記憶部２３を含む。
【００２３】
任意値ループ制御部３０は、ループ検出部３１と、データ依存グラフ作成部３２と、ループ外利用変数マーク部３３と、部分グラフ検出部３４と、ＣＦＧモデル変換部３５を含む。
【００２４】
ＣＦＧモデル作成部１１は、検査仕様１と検査対象コード２を読み込み、コンパイラ最適化処理を実施した上でＣＦＧモデルを作成し、記憶部２０の変換前ＣＦＧモデル記憶部２１に出力する。なお、検査仕様１は、モデル検査法を定義した情報である。検査対象コード２は、検査対象となるソースコードである。
【００２５】
検査モデル作成部１２は、記憶部２０の変換後ＣＦＧモデル記憶部２１からＣＦＧモデルを読み込み、計算木論理（Ｃｏｍｐｕｔａｔｉｏｎ  Ｔｒｅｅ  Ｌｏｇｉｃ：ＣＴＬ）を用いた記号モデル検査法に基づいて検査モデルを作成し、記憶部２０の検査モデル記憶部２３に出力する。
【００２６】
モデル検査実行部１３は、記憶部２０の検査モデル記憶部２３から検査モデルを読み込み、上記の計算木論理（ＣＴＬ）を用いた記号モデル検査法に基づいて検査を実行する。
【００２７】
検査結果出力部１４は、記号モデル検査実行部１２が実行した検査の結果を検査結果３に出力する。
【００２８】
変換前ＣＦＧモデル記憶部２１は、ＣＦＧモデル作成部１１から変換前のＣＦＧモデルを取得して保持し、変換前のＣＦＧモデルをループ検出部３１に提供する。
【００２９】
変換後ＣＦＧモデル記憶部２２は、ＣＦＧモデル変換部３５から変換後のＣＦＧモデルを取得して保持し、変換後のＣＦＧモデルを検査モデル作成部１２に提供する。
【００３０】
検査モデル記憶部２３は、検査モデル作成部１２から検査モデルを取得して保持し、検査モデルをモデル検査実行部１３に提供する。
【００３１】
ループ検出部３１は、記憶部２０の変換前ＣＦＧモデル記憶部２１に保持されたＣＦＧモデルを読み込み、ＣＦＧモデル中のループ処理を検出する。
【００３２】
データ依存グラフ作成部３２は、データ依存グラフ作成法に基づいて、ループ検出部３１が検出したループ中に出現する値のデータ依存グラフを作成する。
【００３３】
ループ外利用変数マーク部３３は、データ依存グラフ作成部３２が作成したデータ依存グラフ中の各変数に対し、その変数（データ依存グラフ中の各変数）がループ以降で利用されていればマークを付ける。すなわち、ループ外利用変数マーク部３３は、データ依存グラフ中の各変数のうち、ループ以降で利用されている変数にマークする。
【００３４】
部分グラフ検出部３４は、データ依存グラフ作成部３２が作成したデータ依存グラフの中から、任意値を要素に含み、ループ外利用変数マーク部３３がマークした変数をただ一つ含む部分グラフを検出する。
【００３５】
ＣＦＧモデル変換部３５は、部分グラフ検出部３４が検出した部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素をＣＦＧモデルから削除し、当該ループの直後に、部分グラフ検出部３４が検出した部分グラフにただ一つ含まれる、ループ外利用変数マーク部３３がマークした変数に対して、任意値を代入する計算処理に対応するＣＦＧモデル要素をＣＦＧモデルに追加する。
【００３６】
次に、図２のフローチャートを参照して、本発明のループ最適化システムの動作について詳細に説明する。
【００３７】
（１）ステップＳ１０１
まず、ＣＦＧモデル作成部１１は、検査対象コード２をコンパイラ最適化処理を施した上で、検査仕様１を踏まえてＣＦＧモデルを作成し、変換前ＣＦＧモデル記憶部２１に記憶する。
【００３８】
（２）ステップＳ１０２
次に、ループ検出部３１は、変換前ＣＦＧモデル記憶部２１に記憶されたＣＦＧモデルの中に処理対象のループがあるか確認する。ここでは、ループ検出部３１は、変換前ＣＦＧモデル記憶部２１に記憶されたＣＦＧモデルの中にある処理対象のループを検出する。処理対象のループとは、以降のステップＳ１０３からステップＳ１０７までの処理を実施していない（未実施の）ループである。
【００３９】
（３）ステップＳ１０３
データ依存グラフ作成部３２は、ループ検出部３１により処理対象のループが検出された場合、ループ検出部３１により検出されたループ中に出現する値のデータ依存グラフを作成する。
【００４０】
（４）ステップＳ１０４
次に、ループ外利用変数マーク部３３は、データ依存グラフ作成部３２が作成したデータ依存グラフ中の各変数に対し、その変数がループ以降で利用されていればマークを付ける。
【００４１】
（５）ステップＳ１０５
次に、部分グラフ検出部３４は、データ依存グラフ作成部３２が作成したデータ依存グラフの中から、任意値を要素に含み、ループ外利用変数マーク部３３がマークした変数をただ一つ含む部分グラフが存在するか確認する。ここでは、部分グラフ検出部３４は、データ依存グラフ作成部３２が作成したデータ依存グラフの中から、任意値を要素に含み、ループ外利用変数マーク部３３がマークした変数をただ一つ含む部分グラフを検出する。
【００４２】
（６）ステップＳ１０６
ＣＦＧモデル変換部３５は、任意値を要素に含み、ループ外利用変数マーク部３３がマークした変数をただ一つ含む部分グラフが存在する場合、すなわち、部分グラフ検出部３４により該当する部分グラフが検出された場合、部分グラフ検出部３４により検出された部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素をＣＦＧモデルから削除する。
【００４３】
（７）ステップＳ１０７
更に、ＣＦＧモデル変換部３５は、当該ループの直後に、部分グラフ検出部３４が検出した部分グラフにただ一つ含まれる、ループ外利用変数マーク部３３がマークした変数に対して、任意値を代入する計算処理に対応するＣＦＧモデル要素をＣＦＧモデルに追加する。
【００４４】
（８）ステップＳ１０８
上記の（ステップＳ１０２からステップＳ１０７までの）処理を処理対象のループがなくなるまで実施した後、検査モデル作成部１２は、一連の処理で変換されたＣＦＧモデルを記憶する変換後ＣＦＧモデル記憶部２２のＣＦＧモデルから検査モデルを作成し、検査モデル記憶部２３に記憶する。検査モデル作成処理は、従来技術で行うようにしても良い。
【００４５】
（９）ステップＳ１０９
モデル検査実行部１３は、検査モデル記憶部２３に記憶された検査モデルを読み込み、モデル検査を実施する。
【００４６】
（１０）ステップＳ１１０
最後に、検査結果出力部１４は、結果を検査結果３に出力する。
【００４７】
以下に、任意値ループ制御部３０の動作を具体的に説明する。
【００４８】
まず、図３Ａ，図３Ｂを参照して、ＣＦＧモデルが変換される場合の例を説明する。ここでは、図３Ａは、ＣＦＧモデルの変換前の手順を示す。図３Ｂは、ＣＦＧモデルの変換後の手順を示す。
【００４９】
ループ検出部３１は、変換前のＣＦＧモデルを参照し、図３Ａに示すように、「ｉｆ  （ｉ  ＜  １０）」から「ｔ  ＝  ｆ（）」へのループを検出する。
【００５０】
データ依存グラフ作成部３２は、当該ループ中に出現する値のデータ依存グラフを作成する。
【００５１】
ループ外利用変数マーク部３３は、データ依存グラフ作成部３２が作成したデータ依存グラフ中の各変数に対し、その変数がループ以降で利用されていればマークを付ける。この例では、図４に示すように、「ｘ」と「ｙ」がループ以降で利用されているとし、「＊」マークを付ける。
【００５２】
部分グラフ検出部３４は、データ依存グラフの中で、任意値を持つ「ｆ（）」を要素に含み、図４の左側（「ｘ」側）に示すような、ループ外利用変数マーク部３３がマークした変数「ｘ」をただ一つ含む部分グラフを検出する。
【００５３】
ＣＦＧモデル変換部３５は、図３Ｂに示すように、部分グラフ作成部３４が検出した部分グラフに含まれる変数の計算処理に対応するＣＦＧモデル要素をＣＦＧから削除し、当該ループの直後に、部分グラフ検出部３４が検出した部分グラフにただ一つ含まれる、ループ外利用変数マーク部３３がマークした変数「ｘ」に対して、任意値を代入する計算処理に対応するＣＦＧモデル要素をＣＦＧモデルに追加する。ＣＦＧモデル要素を追加されたＣＦＧモデルが、変換後のＣＦＧモデルである。
【００５４】
次に、図５を参照して、ＣＦＧモデルが変換されない場合の例を説明する。
【００５５】
ループ検出部３１は、「ｉｆ  （ｉ  ＜  １０）」から「ｔ  ＝  ｆ（）」へのループを検出する。このとき、「ｘ  ＝  ｔ  ＋  ｉ」と「ｙ  ＝  ｔ」という計算処理があり、「ｔ」が「ｘ」と「ｙ」の両方と依存関係がある点が図３との違いである。
【００５６】
データ依存グラフ作成部３２は、当該ループ中に出現する値のデータ依存グラフを作成する。ループ外利用変数マーク部３３は、データ依存グラフ作成部３２が作成したデータ依存グラフ中の各変数に対し、その変数がループ以降で利用されていればマークを付ける。この例では、図６に示すように、「ｘ」と「ｙ」がループ以降で利用されているとし、「＊」マークを付ける。
【００５７】
部分グラフ検出部３４は、データ依存グラフの中で、任意値を持つ「ｆ（）」を要素に含み、ループ外利用変数マーク部３３がマークした変数をただ一つ含む部分グラフを検出しようとするが、この部分グラフ中には「ｘ」と「ｙ」の二つが含まれるので条件に合致しない。従って、この部分グラフに対しては、ＣＦＧモデルの変換は行われない。すなわち、部分グラフ検出部３４は、データ依存グラフの中で、ループ外利用変数マーク部３３がマークした変数が二つ以上含まれる部分グラフに対しては、ＣＦＧモデルの変換を制限する。この場合、部分グラフ検出部３４は、ＣＦＧモデル変換部３５の動作を制限する。ＣＦＧモデル変換部３５は、ＣＦＧモデルを変更せずに変換後ＣＦＧモデル記憶部２２に出力する。
【００５８】
もし、この判定を行わなかった場合、ループ内ならびにループから出た後に保持されているべき「ｘ  ＝  ｙ  ＋  ｉ」（ループから出た後は、「ｉ」はループの最後に使用された値（図５の例では、ｉ＝９）となる）という関係が成立しなくなってしまう。従って、このように部分グラフの中に複数のマークされた変数がある場合には、ＣＦＧモデルを変換することはできない。
【００５９】
以上のように、本発明では、モデル検査技法を利用してソースコードの検証を行う処理において、モデル生成の過程で、ループ内に存在する任意値を含む変数の代入式をループ外に移動することにより、検証時間を短縮する。
【００６０】
本発明のループ最適化システムは、検査仕様と、検査対象コードと、検査結果と、モデル検査制御部と、記憶部と、任意値ループ制御部を含む。ここで、モデル検査制御部は、コンパイラ最適化処理、及び計算木論理（ＣＴＬ）を用いた記号モデル検査法等の従来技術で構成するようにしても良い。
【００６１】
本発明の効果は、ループ内のモデル検査の検証時間を短縮できることにある。その理由は、任意値ループ制御部３０により、ループ内に存在する、任意値を含み、ループ内の他の計算処理とは独立した計算処理をループ外に移動するためである。
【００６２】
例えば、従来のモデル検査では、ループ内に任意値が存在した場合、ループの各回において、任意値をしらみつぶしに全ての状態について検査を行う。従って、図３の変換前の例の場合、第１回目のループの検査で変数ｔが表せる最小値から最大値までの場合が生成されて検査され、第２回目のループの検査で、先に生成された場合のそれぞれから、更に変数ｔが表せる最小値から最大値までの場合が生成されて検査される。従って、第９回目までに生成される場合の数は、最小値から最大値までの場合の数の９乗となる。
【００６３】
これに対し、本発明では、任意値の計算処理をループ外に移動するため、ループ後に最小値から最大値までの場合の数の検査を行うだけで良い。この場合の数の差が計算量に影響し、検証時間を短くするという効果を持つ。
【００６４】
任意値は「取り得る値の全ての状態」を意味するため、任意値に対する計算処理の結果は、任意値の状態に含まれる。従って、任意値を持つ場合の検査を行えば、ある変数の全ての場合の検査を行ったことに相当する。
【００６５】
本発明によれば、モデル検査を利用したソースコードの検証ツールの処理時間の効率化といった用途に適用できる。
【００６６】
以上、本発明の実施形態を詳述してきたが、実際には上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００６７】
【図１】図１は、本発明のループ最適化システムの構成例を示すブロック図である。
【図２】図２は、本発明のループ最適化システムの動作を示すフローチャートである。
【図３Ａ】図３Ａは、ＣＦＧモデルが変換される場合の変換前の手順を示す図である。
【図３Ｂ】図３Ｂは、ＣＦＧモデルが変換される場合の変換後の手順を示す図である。
【図４】図４は、ＣＦＧモデルが変換される場合のデータ依存グラフの例を示す図である。
【図５】図５は、ＣＦＧモデルが変換されない場合の手順を示す図である。
【図６】図６は、ＣＦＧモデルが変換されない場合のデータ依存グラフの例を示す図である。
【符号の説明】
【００６８】
１０…モデル検査制御部
１１…ＣＦＧモデル作成部
１２…検査モデル作成部
１３…モデル検査実行部
１４…検査結果出力部
２０…記憶部
２１…変換前ＣＦＧモデル記憶部
２２…変換後ＣＦＧモデル記憶部
２３…検査モデル記憶部
３０…任意値ループ制御部
３１…ループ検出部
３２…データ依存グラフ作成部
３３…ループ外利用変数マーク部
３４…部分グラフ検出部
３５…ＣＦＧモデル変換部
【図１】
2010097328.tif 000003
【図２】
2010097328.tif 000004
【図３Ａ】
2010097328.tif 000005
【図３Ｂ】
2010097328.tif 000006
【図４】
2010097328.tif 000007
【図５】
2010097328.tif 000008
【図６】
2010097328.tif 000009