(57)【要約】【課題】対象プログラムに対してモデル検査を行った結果得られる反例のパス情報どおりに実行可能なテストプログラムを効果的に生成すること。【解決手段】対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成手段と、前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成手段と、パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成手段と、を備えたことを特徴とする。【選択図】  図１
2012181666.tif 000002
【特許請求の範囲】
【請求項１】
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成手段と、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成手段と、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成手段と、
を備えたことを特徴とする情報処理装置。
【請求項２】
プログラム構造の観点からのカバレッジ基準について、対象プログラムにカバレッジの測定対象の実行の有無を示すトラップを挿入して、トラップ入りプログラムを生成するトラップ挿入手段と、
トラップ入りプログラムに対してソフトウェアモデル検査を行い、トラップで示すカバレッジを行うパスを反例として出力するソフトウェアモデル検査手段と、
を更に備えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記スタブプログラム生成手段、テスト用対象プログラム生成手段及びドライバプログラム生成手段は、前記トラップ挿入手段によって挿入されたトラップ毎に、各種プログラムの生成を行なうことを特徴とする請求項１及び２に記載の情報処理装置。
【請求項４】
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換をソースコードに対して行うことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項５】
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードを解析して得られる抽象構文木に対して行うことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項６】
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードを解析して得られる制御フローグラフに対して行うことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項７】
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードをコンパイルして得られる中間コードに対して行うことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項８】
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードをコンパイルして得られるバイナリコードに対して行うことを特徴とする請求項１乃至３の何れか１項に記載の情報処理装置。
【請求項９】
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
を備えたことを特徴とする情報処理方法。
【請求項１０】
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストの対象プログラムを静的に解析して、対象プログラムをテストするためのテストプログラムを生成するための技術に関する。
【背景技術】
【０００２】
プログラムが検証したい性質（プロパティ property）を満たすか否かをモデル検査法(model checking method)を用いて（プログラムを実行せずに）静的に調べる方法がある。ソフトウェアモデル検査(software model checking)あるいはモダンモデル検査(modern model checking)と呼ばれている。モデル検査法とは、システムやソフトウェアを有限状態遷移システム(finite state transition system)として表し、同システム上の有限状態空間(finite state space)を網羅探索することにより、プロパティが成立するか否かを調べる手法である。プロパティが成立しない場合には、プロパティへの反例(counter-example)として初期状態から、どのような状態遷移を経て、プロパティが成立しない状態に到達したかを示すパス情報を出力する。
【０００３】
とくに、探索の深さを限定した有界モデル検査法(bounded model checking)は、不具合の検出に有効であるとされている。有界モデル検査法を用いたソフトウェアモデル検査においては、検証対象プログラムに出現する全ての変数に関して、変数値の組合せの一つ一つを状態とする。
【０００４】
非特許文献１は、有界モデル検査法をプログラムの検証へ適用した一例である。この例では、プログラムに表れる各変数の値の遷移を制約式Ｃとして表現し、検証したい性質を論理式Ｐとして表現し、Ｃ∧¬Ｐ（∧は論理和、¬は否定）を満たす変数値の推移（パス情報）を網羅探索により検出することを試みる。
【０００５】
検査したい性質Ｐを満たさないようなパス情報はＰへの反例(counter-example)と呼ばれており、反例として示されたパス情報に沿ってプログラムが実行されると、検証したい性質を満たさないような不具合が発生するといえる。パス情報の先頭に出現する変数はプログラムの入力変数であり、パス情報上での入力変数の値を１つのテスト入力の一部として利用できることは、広く知られている。パス情報に含まれない入力変数について固定値やランダムに生成した値などを割り当てることにより、１つのテスト入力の全体を得ることができる。特許文献１にも、モデル検査の反例からテスト入力の生成を行うことが記されている。
【０００６】
非特許文献１では、Ｃ言語のプログラムにassertマクロを用いて、検査したい性質を表明式として記述することにより、表明違反を検出できることが示されている。元のプログラムには存在しないが、検査の都合により、人手で、あるいはツールが自動で挿入する表明式及び表明式で用いられる変数をトラップと呼ぶことがある。
【０００７】
テストが十分であるか否かを判定する考え方として、プログラム構造に着目した構造カバレッジがある。構造カバレッジとは、プログラムの構成する要素のうち、どれだけの要素をテストで実行したかを示すものである。カバレッジ率とは、要素の全件数を分母とし、テストの全件を実施後に一度でも実行された要素の件数を分子とする値である。カバレッジ基準とは、どのような構成要素を測定対象として、その実行の有無を測定するかを示すものであり、ステートメントカバレッジ基準、分岐カバレッジ基準、MC/DC(Modified Condition/Decision Coverage)基準などがある。ステートメントカバレッジ基準では、プログラムを構成する各文を測定対象とする。分岐カバレッジ基準では、ループや分岐の判定条件が真となる場合と偽となる場合を測定対象とする。MC/DC基準では、判定条件（decision）を論理和と論理積を含まない原始論理式(condition)に分解し、他の原始論理式の値を固定した条件下で、ある原始論理式の真偽のみにより判定条件の真偽が決まるような原始論理式の組合せのうち、組合せの総数が最も少なくなるような組合せを測定対象とする。高い信頼性を要するソフトウェアではMC/DC基準を十分満たすようにテストを行うことが求められる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2010-102624号公報
【非特許文献】
【０００９】
【非特許文献１】E. Clarke, D. Kroening, and F. Lerda.A Tool for Checking ANSI-C Programs.Proceedings of TACAS' 04, pages 168-176, 2004（assertを用いた検査の例は頁169-170の節2.1 Generating the Formulaを参照）
【発明の概要】
【発明が解決しようとする課題】
【００１０】
プログラムのテストにおいて、実行パスを決定するのは、対象プログラムへのテスト入力のみではない。対象プログラムから呼び出される外部プログラムによって更新される変数も実行パスに影響する。ソフトウェアモデル検査によって得た反例のパス情報から、変数の初期値を得て、テスト入力とできることが知られているが、テスト入力のみでは必ずしも反例どおりのパスを実行させることはできない。テスト対象プログラムから呼び出される外部プログラムについても、反例のパス情報どおりに振舞うようにする必要がある。さらに、構造カバレッジ基準を満たすようなテストを行うには、カバレッジの測定対象を実行するようなテスト入力と外部プログラムの振舞いが必要となる、すなわち、カバレッジの測定対象を実行し得るようなパス情報が必要となる。
【００１１】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するため、本発明に係る装置は、
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成手段と、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成手段と、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成手段と、
を備えたことを特徴とする。
【００１３】
上記目的を達成するため、本発明に係る方法は、
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
を備えたことを特徴とする。
【００１４】
上記目的を達成するため、本発明に係るプログラムは、
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１５】
本発明によれば、対象プログラムに対してモデル検査を行った結果得られる反例のパス情報どおりに実行可能なテストプログラムを効果的に生成することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の第１実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】本発明の第２実施形態としてのシステムの全体構成を示す概略図である。
【図３】本発明の第２実施形態としてのシステムの全体的な処理の流れを示すフローチャートである。
【図４】本発明の第２実施形態および第３実施形態としてのシステムにおける、テストの対象プログラムの具体例を示す図である。
【図５】本発明の第２実施形態および第３実施形態としてのシステムにおける、対象プログラムについてのパス情報の具体例を示す図である。
【図６】本発明の第２実施形態および第３実施形態としてのシステムにおける、パス情報についての外部プログラム呼出し情報の具体例を示す図である。
【図７】本発明の第２実施形態および第３実施形態としてのシステムにおける、スタブプログラムの雛形と、パス情報についてのスタブプログラムの具体例を示す図である。
【図８】本発明の第２実施形態および第３実施形態としてのシステムにおける、対象プログラムとパス情報についてのテスト用対象プログラムの具体例を示す図である。
【図９】本発明の第２実施形態および第３実施形態としてのシステムにおける、対象プログラムとパス情報についてのドライバプログラムの具体例を示す図である。
【図１０】本発明の第３実施形態としてのシステムの全体構成を示す概略図である。
【図１１】本発明の第３実施形態としてのシステムの全体的な処理の流れを示すフローチャートである。
【図１２】本発明の第３実施形態としてのシステムにおいて、分岐カバレッジを示すためのトラップを挿入する箇所を明確にするために対象プログラムを整形するルールの具体例を示す図である。
【図１３】本発明の第３実施形態としてのシステムにおいて、対象プログラムと、分岐カバレッジを示すためのトラップを挿入する箇所を明確にするために整形されたプログラムと、トラップを挿入されたプログラムとの具体例を示す図である。
【図１４】本発明の他の実施形態としてのシステムの概要を説明するための図である。
【発明を実施するための形態】
【００１７】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素はあくまで例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【００１８】
（第１実施形態）
本発明の第１実施形態としての情報処理装置１００について、図１を用いて説明する。情報処理装置１００は、テストの対象プログラムを静的に解析して、対象プログラムをテストするためのテストプログラムを生成する装置である。
【００１９】
図１に示すように、情報処理装置１００は、スタブプログラム生成部１０１とテスト用対象プログラム生成部１０２とドライバプログラム生成部１０３とを含む。
【００２０】
このうち、スタブプログラム生成部１０１は、対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成する。テスト用対象プログラム生成部１０２は、対象プログラムにおける外部プログラムへの呼出しをスタブプログラムへの呼出しに置換したテスト用対象プログラムを生成する。ドライバプログラム生成部１０３は、パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成する。
【００２１】
本実施形態によれば、対象プログラムに対してモデル検査を行った結果得られる反例のパス情報どおりに実行可能なテストプログラム一式（スタブプログラム、テスト用対象プログラム、ドライバプログラム）を生成できる。
【００２２】
（第２実施形態）
次に本発明の第２実施形態に係るテストプログラム生成装置２００について、図２乃至図９を用いて説明する。
【００２３】
［装置構成］
図２は、本実施形態としてのテストプログラム生成装置２００の概略構成を示す図である。
【００２４】
テストプログラム生成装置２００は、情報処理部２０１とファイル格納部２０２とを含む。情報処理部２０１は、テストプログラム生成モジュール２１１を含む。
【００２５】
テストプログラム生成モジュール２１１は、ファイル格納部から対象プログラムと対象プログラムに関するパス情報を読み込む。そして対象プログラムから呼び出される外部プログラムによって更新される変数について、パス情報に即して、どのように値が変るかを表したスタブプログラムの生成を行なう。対象プログラムにおける外部プログラムへの呼出しをスタブプログラムへの呼出しに置換したテスト用対象プログラムの生成を行なう。さらに、パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成する。つまり、本実施形態のテストプログラム生成モジュール２１１は、図１で示した、スタブプログラム生成部１０１、テスト用対象プログラム生成部１０２、及びドライバプログラム生成部１０３として機能する。
【００２６】
以降では、テストの対象プログラムがＣ言語で記述されている例について説明するが、本発明の適用はＣ言語に限るものではない。また、対象プログラムについて、外部プラグラムへの呼出しをスタブプログラムへの呼出しに置換する、あるいはトラップを挿入する、といった変換をソースコードに対して行う例について説明するが、本発明の適用はソースコードに限るものでもない。ソースコードを解析して得られる抽象構文木や制御フローグラフ、あるいはソースコードをコンパイルして得られる中間コードやバイナリコードに本発明を適用してもよい。
【００２７】
［全体の処理の流れ］
次に、図３のフローチャートとその他の図を参照して本実施形態の全体の動作について詳細に説明する。情報処理部２０１は、利用者から対象プログラムとパス情報の指定を受け付け、他のモジュールに図２で示す一連の処理を実行させる。テストプログラム生成モジュール２１１は、ファイル格納部２０２からパス情報を読み込み、パス情報を調べて、未処理のステップがあれば、当該ステップを処理対象ステップとして、一連のステップ（Ｓ３０２〜Ｓ３０４）の処理を繰り返す（Ｓ３０１）。ここでパス情報は複数のステップを含む。図５は、パス情報５００について説明するための図である。パス情報５００は、ステップの識別子５０１と、モデル検査により走査された対象プログラム上での位置情報（ファイル５０２と行番号５０３の組）と、その位置で実行され得るプログラム５０４とそのプログラムに含まれる式５０５とを含む。また、以降の説明を簡易にするために、図５では各式が、変数の初期化を表すのか、変数への値の代入を表すのか、分岐やループで成立した論理式を表すのか、を示す式区分５０６を記載している。式区分は位置情報と式から導出することができる。
【００２８】
パス情報の処理対象ステップに関する一連の処理では、まず、処理対象ステップにおけるプログラム名が対象プログラム以外であるかを調べる（Ｓ３０２）。
【００２９】
次に、対象プログラム以外であれば、処理対象ステップのプログラム５０４、位置情報５０２、５０３をそれぞれ外部プログラム名６０２、呼出し元の位置情報（呼出し元ファイル６０３と呼出し元行番号６０４)とする外部プログラム呼出し情報６００を生成する（Ｓ３０３）。
【００３０】
外部プログラム呼出し情報６００は、識別子６０１と、外部プログラム名６０２と、呼出し元のプログラムが外部プログラムを呼び出す箇所の位置情報６０３、６０４と、同じ呼出し元プログラムの位置情報に関して何回目の呼出しかを示す呼出し回数６０５と、外部プログラムが更新する変数６０６と更新後の値６０７とを含む。
【００３１】
外部プログラム名６０２と呼出し元の位置情報６０３、６０４の組と同一の項番が既にある場合、既存の項番における呼出し回数の最大値に１を加えた値を、新たに生成された項番の呼出し回数とする。それ以外の場合は、新たに生成された項番の呼出し回数を１とする。
【００３２】
また、処理対象ステップの式の内容を調べ、更新される変数名と更新後の値をそれぞれ外部プログラム呼出し情報の変数名と値に設定する。最後に、処理対象ステップを処理済みとして、Ｓ３０１に戻る（Ｓ３０４）。パス情報に未処理のステップがなくなると、外部プログラム呼出し情報を調べて、未処理の項番があれば、当該項番を処理対象項番として、一連のステップ（Ｓ３０５〜Ｓ３０６）の処理を繰り返す（Ｓ３０７）。
【００３３】
外部プログラム呼出し情報の処理対象項番に関する一連の処理では、まず、外部プログラム毎にスタブプログラムを作成する（Ｓ３０５）。図７は、上段に、スタブプログラムの雛形７０１を示している。＜＞で囲まれた部分は対象プログラムや外部プログラム呼出し情報を調べて具体的な文字列に置換する。＜外部プログラムの戻り値の型＞と＜外部プログラムの引数リスト＞は対象プログラムを調べて、置換に用いる文字列を得る。その他の＜＞で囲まれた部分は外部プログラム呼出し情報の同名の列から文字列を得る。
【００３４】
図７は、また、下段に、対象プログラム（図４）と外部プログラム呼出し情報（図６）を用いて生成されるスタブプログラム７０２を示している。
【００３５】
次に、処理対象項番を処理済みとして（Ｓ３０６）、Ｓ３０７に進む。外部プログラム呼出し情報に未処理の項番がなくなると、生成したスタブプログラムを出力する（Ｓ３０８）。
【００３６】
また、対象プログラムの外部プログラムの呼出しをスタブプログラムの呼出しに置き換えて、テスト用対象プログラムとして出力する（Ｓ３０９）。図８はテスト用対象プログラムの一例を示す図である。
【００３７】
図４の対象プログラム４００と図８のテスト用対象プログラム８００とを見比べると、３５行目において、外部プログラム（external()）の呼出しがスタブプログラム(stub_external(_FILE_,_LINE_))の呼出しに置き換わっていることが分かる。
【００３８】
次に、ステップＳ３１０において、パス情報の式区分が初期値であるステップの式の内容を元に、対象プログラムの実行に必要となる変数への初期値の設定と、テスト用対象プログラムの呼出しと、呼出し結果のチェックと、を行うドライバプログラムを生成する。パス情報に含まれていない変数について初期化が必要な場合、テストプログラム生成モジュール２１１は、ランダムに生成した値や固定値を用いて初期値を設定する。呼出し結果のチェックについては、具体的な内容を人手で記述してもよい。
【００３９】
図９は、ドライバプログラムの一例を示す図である。図９のドライバプログラム９００においては、図４の２８行目に記された事後条件（「戻り値は-10以上かつ10以下」）を用いて、Ｃ言語のassertマクロを用いたチェックを行っている（８行目）。生成されたドライバプログラム９００を実行することにより、テスト用対象プログラム上で、パス情報に対応したパスを実際に実行することができる。
【００４０】
以上、本実施形態によれば、プログラムの単体テストに関して、対象プログラムに対するソフトウェアモデル検査により得られた反例のパス情報に合わせたパスを、実際に実行できるようなテストプログラムを自動生成できる。また、プログラムの構造カバレッジ基準を満たすようなパス情報を得て、さらに前記パス情報から構造カバレッジ基準を満たすようなテストプログラムを自動生成できる。
【００４１】
（第３実施形態）
図１０は、本発明の第３実施形態としてのテストプログラム生成装置１０００の概略構成を示す図である。図２のテストプログラム生成装置２００とは、トラップ挿入モジュール１０１１とソフトウェアモデル検査モジュール１０１２とが追加されている点が異なる。
【００４２】
テストプログラム生成装置１０００は、情報処理部１００１とファイル格納部１００２とを含む。情報処理部１００１は、トラップ挿入モジュール１０１１と、ソフトウェアモデル検査モジュール１０１２と、テストプログラム生成モジュール１０１３と、を含み、これらのモジュールに、それぞれ図１１で示すステップＳ１１０１、Ｓ１１０３、Ｓ１１０５の処理を実行させる。
【００４３】
次に、図１０及び図１１のフローチャートとその他の図を参照して本実施形態の全体の動作について詳細に説明する。トラップ挿入モジュール１０１１は、ファイル格納部１００２から対象プログラムを読み込み、カバレッジの測定対象の実行の有無を示すためのトラップを挿入する箇所を明らかにするために、対象プログラムを整形し、トラップを挿入して、トラップ入りプログラムとして出力する（Ｓ１１０１）。
【００４４】
トラップ挿入モジュール１０１１は、まず、分岐カバレッジ基準用の整形ルール（図１２）を用いて、例えば、対象プログラム１３０１を整形されたプログラム１３０２に変換する。この例では、整形されたプログラムにおいてトラップ挿入モジュールが定義したトラップ変数（d_）に値（真であれば1、偽であれば0）を設定する箇所がトラップ挿入対象箇所である。整形されたプログラム１３０２の行1bは、対象プログラム１３０１の行1の分岐が真になる場合であり、行1dは偽になる場合である。トラップ挿入モジュール１０１１は、ソフトウェアモデル検査による反例の出力を強制するために、トラップ挿入対象箇所毎に、トラップ表明（１３０３、１３０４におけるassert(0);）を挿入し、トラップ入りプログラムとして出力する。
【００４５】
ソフトウェアモデル検査モジュール１０１２は、トラップ入りプログラムをファイル格納部１００２から読み込み、モデル検査を実行して（Ｓ１１０３）、トラップ表明に対する反例、すなわちある分岐が真あるいは偽となる反例を示すパス情報を出力する（Ｓ１１０５）。テストプログラム生成モジュール１０１３は、第２実施形態における一連の処理（図３）を行い、パス情報を実行するようなスタブプログラム、テスト用対象プログラム、ドライバプログラムをファイル格納部１００２に出力する（Ｓ１１０７）。
【００４６】
以上のように、生成された各ドライバプログラムを実行することにより、テスト用対象プログラム上で、構造カバレッジのある測定対象を実行するようなパスを実際に実行することができる。そして、全ての生成されたドライバプログラムを実行することにより、対象プログラムについての構造カバレッジ基準を満たすようなテストを行うことができる。
【００４７】
（他の実施形態）
以上、本発明の実施形態について詳述したが、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステム又は装置も、本発明の範疇に含まれる。
【００４８】
また、本発明は、複数の機器から構成されるシステムに適用されても良いし、単体の装置に適用されても良い。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。
【００４９】
本発明に係る情報処理プログラムを実行するコンピュータの構成例を図１４に示す。コンピュータ１４００は、ＣＰＵ(Central Processing Unit)１４０１、ＲＯＭ(Read Only Memory)１４０２、通信制御部１４０３、ＲＡＭ(Randam Access Memory)１４０４、及びストレージ１４０５を備えている。ＣＰＵ１４０１は中央処理部であって、様々なプログラムを実行することによりコンピュータ１４００全体を制御する。ＲＯＭ１４０２は、不揮発メモリであり、ＣＰＵ１４０１が最初に実行すべきブートプログラムの他、各種のパラメータ等を記憶している。また、ＲＡＭ１４０４は、ランダムアクセスメモリであり、テストプログラム生成モジュール２１１等のアプリケーションの実行領域１４４１及びアプリケーションが扱うデータ（例えば、対象プログラム、スタブプログラム、テスト用プログラム、ドライバプログラム、パス情報など）の記憶領域１４４２を有している。一方、ストレージ１４０５は、各種モジュール１４５１と、各種ファイル１４５２（対象プログラムなど）を保存する装置である。また、通信制御部１４０３は、他の端末とのネットワークを介した通信を制御する。
【００５０】
［実施形態の他の表現］
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００５１】
（付記１）
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成手段と、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成手段と、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成手段と、
を備えたことを特徴とする情報処理装置。
（付記２）
プログラム構造の観点からのカバレッジ基準について、対象プログラムにカバレッジの測定対象の実行の有無を示すトラップを挿入して、トラップ入りプログラムを生成するトラップ挿入手段と、
トラップ入りプログラムに対してソフトウェアモデル検査を行い、トラップで示すカバレッジを行うパスを反例として出力するソフトウェアモデル検査手段と、
を更に備えることを特徴とする付記１に記載の情報処理装置。
（付記３）
前記スタブプログラム生成手段、テスト用対象プログラム生成手段及びドライバプログラム生成手段は、前記トラップ挿入手段によって挿入されたトラップ毎に、各種プログラムの生成を行なうことを特徴とする付記１及び２に記載の情報処理装置。
（付記４）
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換をソースコードに対して行うことを特徴とする付記１乃至３の何れかに記載の情報処理装置。
（付記５）
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードを解析して得られる抽象構文木に対して行うことを特徴とする付記１乃至３の何れかに記載の情報処理装置。
（付記６）
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードを解析して得られる制御フローグラフに対して行うことを特徴とする付記１乃至３の何れかに記載の情報処理装置。
（付記７）
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードをコンパイルして得られる中間コードに対して行うことを特徴とする付記１乃至３の何れかに記載の情報処理装置。
（付記８）
前記テスト用対象プログラムは、前記対象プログラムについて、外部プラグラムへの呼出しからスタブプログラムへの呼出しへの置換を、ソースコードをコンパイルして得られるバイナリコードに対して行うことを特徴とする付記１乃至３の何れかに記載の情報処理装置。
（付記９）
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
を備えたことを特徴とする情報処理方法。
（付記１０）
対象プログラムと対象プログラム上のパスの情報とを入力し、対象プログラムから呼び出される外部プログラムによって更新される変数値のパス情報に即した変化を表したスタブプログラムを生成するスタブプログラム生成ステップと、
前記対象プログラムにおける外部プログラムへの呼出しを前記スタブプログラムへの呼出しに置換したテスト用対象プログラムを生成するテスト用対象プログラム生成ステップと、
パス情報の初期値を用いてテスト用対象プログラムを呼び出すドライバプログラムを生成するドライバプログラム生成ステップと、
をコンピュータに実行させることを特徴とする情報処理プログラム。
【図１】
2012181666.tif 000003
【図２】
2012181666.tif 000004
【図３】
2012181666.tif 000005
【図４】
2012181666.tif 000006
【図５】
2012181666.tif 000007
【図６】
2012181666.tif 000008
【図７】
2012181666.tif 000009
【図８】
2012181666.tif 000010
【図９】
2012181666.tif 000011
【図１０】
2012181666.tif 000012
【図１１】
2012181666.tif 000013
【図１２】
2012181666.tif 000014
【図１３】
2012181666.tif 000015
【図１４】
2012181666.tif 000016