(57)【特許請求の範囲】
【請求項１】
オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置であって、
前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、
前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する契約定義関数抽出手段と、
前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する検証用ソースコード生成手段と、
を備えること、を特徴とする契約定義関数検証装置。
【請求項２】
前記検証用ソースコード生成手段は、前記契約定義箇所と、前記表明埋め込みスタブファイルの名称と、前記表明埋め込みスタブファイルにおいて前記契約条件が記載されている行番号と、の関係を示す表明生成情報を更に作成し、
前記検証結果ファイル及び前記表明生成情報に基づいた検証結果を表示する検証結果表示部を、更に備えたこと、を特徴とする請求項１に記載の契約定義関数検証装置。
【請求項３】
前記検証用ソースコード生成手段は、
前記表明埋め込みスタブファイルを作成する表明埋め込みスタブ作成手段と、
前記関数呼び出し置換ファイルを作成する関数呼び出し置換ソース作成手段と、
前記表明生成情報を作成する表明生成情報出力手段と、
を備えること、を特徴とする請求項１又は２に記載の契約定義関数検証装置。
【請求項４】
前記表明埋め込みスタブ作成手段は、前記契約定義関数情報を参照して、前記契約定義関数の呼び出しに対応した前記スタブ関数を作成すること、を特徴とする請求項３に記載の契約定義関数検証装置。
【請求項５】
前記オブジェクトファイルはソースコードであること、を特徴とする請求項１乃至４のいずれか１項に記載の契約定義関数検証装置。
【請求項６】
前記オブジェクトファイルはバイナリファイルであること、を特徴とする請求項１乃至４のいずれか１項に記載の契約定義関数検証装置。
【請求項７】
オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置が行う、契約定義関数検証方法であって、
前記契約定義関数検証装置が備える契約定義関数抽出手段が、前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、
前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する手順と、
前記契約定義関数検証装置が備える検証用ソースコード生成手段が、前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する手順と、
を備えること、を特徴とする契約定義関数検証方法。
【請求項８】
前記検証用ソースコード生成手段が、前記契約定義箇所と、前記表明埋め込みスタブファイルの名称と、前記表明埋め込みスタブファイルにおいて前記契約条件が記載されている行番号と、の関係を示す表明生成情報を更に作成する手順と、
前記契約定義関数検証装置が備える検証結果表示部が、前記検証結果ファイル及び前記表明生成情報に基づいた検証結果を表示する手順と、
を更に備えること、を特徴とする請求項７に記載の契約定義関数検証方法。
【請求項９】
前記検証用ソースコード生成手段が備える表明埋め込みスタブ作成手段が、前記表明埋め込みスタブファイルを作成する手順と、
前記検証用ソースコード生成手段が備える関数呼び出し置換ソース作成手段が、前記関数呼び出し置換ファイルを作成する手順と、
前記検証用ソースコード生成手段が備える表明生成情報出力手段が、前記表明生成情報を作成する手順と、
を更に備えること、を特徴とする請求項７又は８に記載の契約定義関数検証方法。
【請求項１０】
前記表明埋め込みスタブ作成手段が、前記契約定義関数情報を参照して、前記契約定義関数の呼び出しに対応した前記スタブ関数を作成すること、を特徴とする請求項９に記載の契約定義関数検証方法。
【請求項１１】
前記オブジェクトファイルはソースコードであること、を特徴とする請求項７乃至１０のいずれか１項に記載の契約定義関数検証方法。
【請求項１２】
前記オブジェクトファイルはバイナリファイルであること、を特徴とする請求項７乃至１０のいずれか１項に記載の契約定義関数検証方法。
【請求項１３】
オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置に組み込まれる契約定義関数検証プログラムであって、
前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、
前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する契約定義関数抽出手段と、
前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する検証用ソースコード生成手段と、
を備える契約定義関数検証装置としてコンピュータを機能させることを特徴とする契約定義関数検証プログラム。
【請求項１４】
前記検証用ソースコード生成手段は、前記契約定義箇所と、前記表明埋め込みスタブファイルの名称と、前記表明埋め込みスタブファイルにおいて前記契約条件が記載されている行番号と、の関係を示す表明生成情報を更に作成し、
前記検証結果ファイル及び前記表明生成情報に基づいた検証結果を表示する検証結果表示部を、更に備えたこと、を特徴とする請求項１３に記載の契約定義関数検証プログラム。
【請求項１５】
前記検証用ソースコード生成手段は、
前記表明埋め込みスタブファイルを作成する表明埋め込みスタブ作成手段と、
前記関数呼び出し置換ファイルを作成する関数呼び出し置換ソース作成手段と、
前記表明生成情報を作成する表明生成情報出力手段と、
を備えること、を特徴とする請求項１３又は１４に記載の契約定義関数検証プログラム。
【請求項１６】
前記表明埋め込みスタブ作成手段は、前記契約定義関数情報を参照して、前記契約定義関数の呼び出しに対応した前記スタブ関数を作成すること、を特徴とする請求項１５に記載の契約定義関数検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム中にアノテーションとして記述された「関数の契約条件」の充足性をチェッカが検証するソースコード検証方法において、契約条件が定義された関数の呼び出し毎に対応するスタブ関数を自動生成することにより、一度の検証実行で複数箇所からの呼び出しすべての検証を可能にすることを特徴とする契約定義関数検証装置、その方法及びそのプログラムに関するものである。
【背景技術】
【０００２】
プログラムにおいて、「契約条件」とは、一般的には、プログラムが満たすべき仕様を事前・事後及び不変条件として定義したものを意味し、本発明においては、特に断りがない場合は、関数インタフェース仕様に対する事前・事後・不変条件を意味する。また、契約条件をアノテーションとして付加した関数を「契約定義関数」と呼ぶ。
【０００３】
また、「アノテーション」とは、一般的には、プログラムに関連するメタ情報を注釈として記述したものであり、本発明においては、関数の契約条件をソースコード中のコメント部分に規定の文法に従って記述したものを指す。
【０００４】
更に、定義された契約条件を、ソースコード検証装置で検証可能な形式に変換したうえで、検証箇所の処理定義中に埋め込んだものを、表明（アサーション）と呼ぶ。
【０００５】
このソースコードを検証する従来の方法は、反例が見付かった時点で検証を終了するため、１度の検証で示すことができる反例の実行パスは一通りだけであり（参考文献：情報処理 ３５（８）「論理関数処理に基づく形式的検証方法」 平石裕実、浜口清治著）、検証対象の契約定義関数が検証対象のソースコード中の複数個所から呼び出されている場合、一度の検証で、そのすべての呼び出し箇所からの呼び出しを検証できるとは限らないという課題があった。
【０００６】
一方で、このソースコード検証において、ソースコードを検査可能な記号モデルに変換して検証を行う技術がある。
【特許文献１】特表２００７−５２８０５９号公報
【特許文献２】特開２００３−２９６１３９号公報
【特許文献３】特開平０２−１０３６４４号公報
【特許文献４】特開平０６−２５０８８４号公報
【非特許文献１】コンピュータソフトウェア 24「Cプログラムの検証ツール Caduceus」南出靖彦著
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１及び非特許文献１のソースコード検証技術は、ユーザが指定した検証条件に対し1つの表明を挿入する。このため、一度の検証で全ての違反箇所を特定することができないという問題があった。
【０００８】
特許文献２、特許文献３及び特許文献４では、ソースコード中のコメント部分に記述された契約条件が定義された関数の呼び出し毎に対応するスタブを自動生成することができないという問題があった。
【０００９】
本発明は上記に鑑みてなされたものであって、一度の検証で契約定義条件に反した呼び出し処理を特定する契約定義関数検証装置、その方法及びそのプログラムを得ることを目的とする。
【課題を解決するための手段】
【００１０】
上述の課題を解決するため、本発明に係る契約定義関数検証装置は、オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置であって、前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する契約定義関数抽出手段と、前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する検証用ソースコード生成手段と、を備えること、を特徴とする。
【００１１】
上述の課題を解決するため、本発明に係る契約定義関数検証方法は、オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置が行う、契約定義関数検証方法であって、前記契約定義関数検証装置が備える契約定義関数抽出手段が、前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する手順と、前記契約定義関数検証装置が備える検証用ソースコード生成手段が、前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する手順と、を備えること、を特徴とする。
【００１２】
上述の課題を解決するため、本発明に係る契約定義関数検証プログラムは、オブジェクトファイル中にアノテーションとして記述された契約定義関数の契約条件の充足性を検証用ソースコードに基づいて検証し、該検証の結果を検証結果ファイルとして出力する契約定義関数検証装置に組み込まれる契約定義関数検証プログラムであって、前記オブジェクトファイルから前記契約定義関数の定義を抽出し、かつ、前記契約定義関数の定義と、前記契約条件と、前記契約定義関数のファイルの名称及び前記契約定義関数のファイルにおいて前記契約条件が記載されている行番号を記した契約定義箇所と、を含む契約定義関数情報を作成する契約定義関数抽出手段と、前記検証用ソースコードとして、前記契約条件を検証可能な形式に変換した表明を前記契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を有する表明埋め込みスタブファイルと、前記契約定義関数の呼び出し処理を、前記表明埋め込みスタブ関数の呼び出しに置き換えた、関数呼び出し置換ファイルと、を作成する検証用ソースコード生成手段と、を備える契約定義関数検証装置としてコンピュータを機能させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、検証用ソースコード生成手段が、契約条件を検証可能な形式に変換した表明を契約定義箇所の処理を定義したスタブ関数に挿入した表明埋め込みスタブ関数を作成し、契約定義関数の呼び出し処理を表明埋め込みスタブ関数の呼び出しに置き換えることにより、契約定義関数の呼び出し処理のすべてに表明を埋め込むことができ、一度の検証で契約定義条件に反した呼び出し処理を特定する契約定義関数検証装置、その方法及びそのプログラムを得ることができる。
【発明を実施するための最良の形態】
【００１４】
次に、本発明の実施の形態の構成について図面を参照して詳細に説明する。図１は、本発明の実施の形態に係る契約定義関数検証装置の構成図である。
【００１５】
この図１において、本発明の実施の形態に係る契約定義関数検証装置は、プログラム制御により動作するデータ処理装置である表明検証装置２と、検証結果表示装置６と、情報を記憶する記憶装置３０と、を備える。
【００１６】
表明検証装置２は入力ソースコード１から契約定義関数を抽出し、抽出した契約定義関数の関数定義情報を契約定義関数情報記憶部３１に記憶する契約定義関数抽出手段２１と、入力ソースコードを読み込みながら検証用ソースコード４０を生成する検証用ソースコード生成手段２２と、検証用ソースコード中に埋め込まれた表明に基づいて検証を行う表明検証手段２６と、を備える。なお、表明検証手段２６及び検証結果表示装置６は、既存のソースコード検証技術に係るものである。
【００１７】
検証用ソースコード生成手段２２は、表明埋め込みスタブ作成手段２３と、関数呼び出し置換ソース作成手段２４と、表明生成情報出力手段２５と、を備える。
【００１８】
表明埋め込みスタブ作成手段２３は、契約定義関数の呼び出し処理ごとに、契約条件に対応する表明を挿入した表明埋め込みスタブファイル４１を作成し、関数呼び出し置換ソース作成手段２４は、ソースコード中の契約定義関数の呼び出し処理を表明が埋め込まれたスタブ関数の呼び出しに置き換えた関数呼び出し置換ファイル４２を作成し、表明生成情報出力手段２５は、契約定義箇所と表明挿入箇所の関係を表明生成情報３２として作成する。
【００１９】
表明検証手段２６は、検証用ソース作成手段２２で作成した表明埋め込みスタブファイル４１及び関数呼び出し置換ファイル４２が入力され、表明埋め込みスタブファイル４１に埋め込まれた表明の充足性について検証を行い、その検証結果を検証結果ファイル５として出力する。
【００２０】
検証結果表示装置６は、検証結果ファイル５及び表明生成情報２５に基づいて利用者に表明検証装置２６による検証結果を対話的に表示し、プログラムのデバッグを支援する装置であり、利用者の指示に応じて、表明の違反箇所の検索と表示、及び対応する契約条件の定義箇所を表示する。
【００２１】
検証結果表示装置６に表示された内容は、必要に応じてプリンタ５０等に出力される。
【００２２】
次に、本発明の実施の形態の動作について図面を参照しながら詳細に説明する。
【００２３】
ここで、図２は、契約定義関数抽出手段２１の処理を示すフローチャートである。
【００２４】
この図２において、契約定義関数抽出手段２１は、ユーザが検証対象として指定した入力ソースコード１を順に読み込み（ステップＳ１０１）、読み込んだソースコード１を解析し、関数定義の記述を検索する（ステップＳ１０２）。
【００２５】
ステップＳ１０３において取得した関数定義に契約条件の定義が存在した場合（ＹＥＳ）、関数定義情報から関数名、引数、契約条件とその記述箇所（ファイル名、行番号）をそれぞれ取得し、契約定義関数情報として契約定義関数情報記憶部３１に記憶する（ステップＳ１０４）。
【００２６】
一方で、ステップＳ１０３において取得した関数定義に契約条件の定義が存在しない場合（ＮＯ）、手順はステップＳ１０２に戻り、再度、関数定義の記述が検索される。
【００２７】
ステップＳ１０５では、入力ソースコード１に係るファイル中の全ての関数定義を取得したか否かがチェックされ、取得している場合（ＹＥＳ）、次のステップＳ１０６において入力ソースコード１に係る全てのファイルが読み込まれたか否かがチェックされる。
【００２８】
ステップＳ１０６において、入力ソースコード１に係る全てのファイルが読み込まれた場合（ＹＥＳ）、契約定義関数抽出手段２１での処理は終了する。
【００２９】
一方で、ステップＳ１０５において、入力ソースコード１に係るファイル中の全ての関数定義を取得していない場合（ＮＯ）、手順はステップＳ１０２に戻り、再度、関数定義の記述が検索される。
【００３０】
又、ステップＳ１０６において、全てのソースコード１のファイルが読み込まれていない場合（ＮＯ）、手順はステップＳ１０１に戻り、再度、入力ソースコード１が読み込まれる。
【００３１】
ここで、図３は、検証対象となるＣ言語で書かれた入力ソースコード１の例である。
【００３２】
図４は、図３のソースコード１から契約定義関数抽出手段２１が出力した、契約定義関数情報の例である。
【００３３】
次に、検証用ソースコードの作成処理について、図５のフローチャートを用いて説明する。図５は、検証用ソースコード生成手段２２による検証用ソースコードの作成処理を示すフローチャートである。
【００３４】
まず、検証用ソースコード生成手段２２はユーザが検証対象として指定した入力ソースコード１を順に読み込み（ステップＳ２０１）、読み込んだ入力ソースコードに対し、関数呼び出し処理を取得する（ステップＳ２０２）。
【００３５】
続いて、契約定義関数抽出手段２１で作成した契約定義関数情報を参照しながら、呼び出し先の関数名が契約定義関数として定義されたものであるかを判定する（ステップＳ２０３）。契約定義関数の呼び出しであった場合（ＹＥＳ）、表明埋め込みスタブ作成手段２３により、関数呼び出しに対応する表明埋め込みスタブファイル４１を作成し、検証用ソースコードに追加する（ステップＳ２０４）。
【００３６】
一方で、ステップＳ２０３において、契約定義関数の呼び出しではなかった場合（ＮＯ）、手順はステップＳ２０２に戻される。
【００３７】
次に、図５のステップＳ２０４における処理については、図６のフローチャートを用いて詳しく説明する。図６は、表明埋め込みスタブ作成手段２３及び表明生成情報出力手段２５による処理を示すフローチャートである。
【００３８】
まず、表明埋め込みスタブ作成手段２３は検証用ソースコード生成手段２２から、契約定義関数の呼び出し記述に対する処理を引き継ぎ（ステップＳ３０１）、契約定義関数情報記憶部３１から呼び出し処理に対応した契約定義関数情報を取得し、この契約定義関数情報を参照しながら（ステップＳ３０２）、契約定義関数の呼び出しに対応したスタブ関数を作成する（ステップＳ３０３）。
【００３９】
このとき、それぞれの関数呼び出しすべてに対して、関数名を検証用ソースコード中で重複のない（一意となる）ように命名する。
【００４０】
更に、契約定義関数情報から契約条件に関する情報を参照しながら、対応する表明記述をスタブ関数に挿入することによって追加する（ステップＳ３０４）。
【００４１】
次に、表明生成情報出力手段２５は、契約条件の記述箇所（ファイル名、行番号）と、表明を挿入した箇所（ファイル名、行番号）の関係を表明生成情報３２として作成し、出力する（ステップＳ３０５）。
【００４２】
ここで、図７は、契約定義関数fooの呼び出し処理に対する表明埋め込みスタブの作成例であり、図３のmain.cの関数fooの呼び出し(10行目)に対して、図４の契約定義関数情報から取得した契約条件”@pre x > 0”、”@pre y!= 0”を基に、”assert(x > 0)”、”assert(y != 0)”という表明が埋め込まれている。
【００４３】
更に、stub_foo_1という関数名を生成し、stub_foo_1.cというファイル名で検証用ソースコードとして出力される。
【００４４】
図８は表明生成情報の例であり、表明埋め込み箇所のファイル名、行番号(stub_foo_1.c 2,3行目)、対応する契約条件定義箇所のファイル名、行番号（foo.c 7,8行目）の関係を出力する。
【００４５】
次に、図５のフローチャートのステップＳ２０５以降の処理について説明する。まず、関数呼び出し置換ソース生成手段２１によって、ソースコード中の関数呼び出し処理をステップＳ２０４で作成したスタブ関数の呼び出しに置き換える（ステップＳ２０５）。
【００４６】
ステップＳ２０６では、入力ソースコード１に係るファイル中の全ての関数呼び出し処理を取得したか否かがチェックされ、取得している場合（ＹＥＳ）、次のステップＳ２０７において入力ソースコード１に係るファイル中に契約定義関数の呼び出し処理が存在するか否かがチェックされる。
【００４７】
ステップＳ２０６において、入力ソースコード１に係るファイル中の全ての関数呼び出し処理を取得していない場合（ＮＯ）、手順はステップＳ２０２に戻される。
【００４８】
ステップＳ２０７では、入力ソースコード１に係るファイル中に契約定義関数の呼び出し処理が存在する場合（ＹＥＳ）、呼び出し処理を置き換えたソースコードを検証用ソースコードに追加する（ステップＳ２０８）。
【００４９】
一方で、ソースコード中に契約定義関数の呼び出し処理が存在しない場合（ＮＯ）、読み込んだソースコードをそのまま検証用ソースコードとしてコピーする（ステップＳ２０９）。
【００５０】
ステップＳ２１０において、入力ソースコード１に係る全てのファイルが読み込まれた場合（ＹＥＳ）、検証用ソースコード生成手段２２による検証用ソースコードの作成処理は終了する。
【００５１】
一方で、ステップＳ２１０において、全てのソースコード１のファイルが読み込まれていない場合（ＮＯ）、手順はステップＳ２０１に戻り、再度、入力ソースコード１が読み込まれる。
【００５２】
ここで、図９は、図３の入力ソースコードに対する関数呼び出し置換ファイルの例である。契約定義関数fooの呼び出し処理（図３のmain.c 10,20,30行目）を、表明挿入スタブ作成手段２３で作成したスタブ関数stub_foo_1, stub_foo_2, stub_foo_3に置き換える。
【００５３】
次に、表明検証手段２６は、これまで説明した検証用ソースコード生成手段２２で出力された検証用ソースコード４０を入力し、表明に対する検証を行い、検証結果を検証結果ファイルとして生成し出力する。
【００５４】
この場合、図９の例では、main.cの10行目と30行目の1箇所の関数呼び出しで契約条件に反する呼び出し(y != 0 の条件に反する)が行われているが、本発明によれば2箇所の違反箇所を、一度の検証により検出することができる。
【００５５】
最後に、検証結果表示装置６は、利用者からの対話的な処理により検証結果を検索及び表示する装置であり、検証結果ファイル５、表明生成情報３１を入力とし検証結果の表示を行う。
【００５６】
検証結果表示装置６では、表明生成情報３２を参照することで、利用者が指定した表明箇所に対する契約定義条件の記述箇所を特定することができる。
【００５７】
又、本実施の形態では、検証する対象をソースコードとしたが、検証する対象をバイナリファイルとしてもよい。
【００５８】
なお、本発明は、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。
【産業上の利用可能性】
【００５９】
本発明は、ソースコード検証装置を使った関数の契約条件の検証技術といった用途に利用することができる。
【図面の簡単な説明】
【００６０】
【図１】本発明の実施の形態に係る契約定義関数検証装置の構成図である。
【図２】契約定義関数抽出手段の処理を示すフローチャートである。
【図３】検証対象となるＣ言語で書かれた入力ソースコード１の例である。
【図４】ソースコードから契約定義関数抽出手段が出力した、契約定義関数情報の例である。
【図５】検証用ソースコード生成手段による検証用ソースコードの作成処理を示すフローチャートである。
【図６】表明埋め込みスタブ作成手段２３の処理を示すフローチャートである。
【図７】契約定義関数fooの呼び出し処理に対する表明埋め込みスタブの作成例である。
【図８】表明生成情報の例である。
【図９】図３の入力ソースコードに対する関数呼び出し置換ファイルの例である。
【符号の説明】
【００６１】
１  入力ソースコード
２  表明検証装置
５  検証結果ファイル
６  検証結果表示装置
２１  契約定義関数抽出手段
２２  検証用ソースコード生成手段
２３  表明埋め込みスタブ作成手段
２４  関数呼び出し置換ソース作成手段
２５  表明生成情報出力手段
２６  表明検証手段
３０  記憶装置
３１  契約定義関数情報記憶部
３２  表明生成情報
４０  検証用ソースコード
４１  表明埋め込みスタブファイル
４２  関数呼び出し置換ファイル
５０  プリンタ
【図１】
0004888790.tif 000002
【図２】
0004888790.tif 000003
【図３】
0004888790.tif 000004
【図４】
0004888790.tif 000005
【図５】
0004888790.tif 000006
【図６】
0004888790.tif 000007
【図７】
0004888790.tif 000008
【図８】
0004888790.tif 000009
【図９】
0004888790.tif 000010