(57)【要約】  プログラム単体テスト支援装置１０は、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構文解析部１３と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部１４と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部１５と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部１６とを備える。
2013161195.tif 000002
【特許請求の範囲】
【請求項１】
プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置であって、
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析部と、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部と、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部と、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部とを備えた
ことを特徴とするプログラム単体テスト支援装置。
【請求項２】
構造解析部は、
対象関数を呼び出す上位関数と当該対象関数から呼ばれる下位関数との組を含む呼出関係情報と、前記対象関数における変数の依存関係を示す依存関係情報とを抽出し、当該呼出関係情報および当該依存関係情報に基づいて、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する
請求項１記載のプログラム単体テスト支援装置。
【請求項３】
スタブ関数出力分析部は、
対象関数に、下位関数の出力変数または当該出力変数に依存する変数と他の変数とを比較する判定式が存在し、当該判定式の結果により経路が選択される場合、当該判定式に基づいて経路依存下位事後条件を算出する
請求項１または請求項２記載のプログラム単体テスト支援装置。
【請求項４】
対象関数入力分析部は、
経路依存下位事後条件と、予め定義された下位関数の入力値に関する制約である下位事前条件および当該下位関数の出力値に関する制約である下位事後条件に基づいて、経路に依存した前記下位関数の事前条件を経路依存下位事前条件として算出し、
当該経路依存下位事前条件を満たす、対象関数の開始点における制約条件を経路依存対象最弱事前条件として算出し、
前記経路依存対象最弱事前条件と、前記対象関数の入力値に関する制約である対象事前条件との論理積を計算することにより経路依存対象事前条件を算出する
請求項１から請求項３のうちのいずれか１項に記載のプログラム単体テスト支援装置。
【請求項５】
プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援方法であって、
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定し、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出し、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出し、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成する
ことを特徴とするプログラム単体テスト支援方法。
【請求項６】
コンピュータに、
プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援する処理を実行させるプログラム単体テスト支援プログラムであって、
コンピュータに、
前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析処理と、
前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析処理と、
前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析処理と、
前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成処理とを
実行させるためのプログラム単体テスト支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの単体テストを支援するプログラム単体テスト支援装置に関する。
【背景技術】
【０００２】
Ｃ言語等の高級プログラミング言語で作成された一般的なプログラムは、関数が他の関数を呼び出すことにより実現される。以下、特定の関数を呼び出す関数を上位関数、当該特定の関数から呼び出される関数を下位関数と呼ぶ。【０００３】
また、高級プログラミング言語で記述したプログラムの一般的な単体テスト方法では、テスト対象である関数（対象関数）の上位関数を模擬する関数（ドライバ関数）の実装と、対象関数の下位関数を模擬する関数（スタブ関数）の実装とのうちの少なくとも一方が必要となる。【０００４】
ドライバ関数は、対象関数が実行しうる何通りかの振舞いのうち、検査したい振舞いを実行するような入力変数値を与えて対象関数を実行し、期待どおりの振舞いが行われたことを調べるために、対象関数の実行結果を期待結果と比較する。または、ドライバ関数は、期待どおりの振舞いが行われたことを作業者に確認させるために、対象関数の実行結果を出力する。【０００５】
スタブ関数は、スタブ関数からの復帰後に対象関数が検査したい振舞いの実行を継続できるように、戻り値や引数の値を設定する。関数によって値が設定される戻り値や引数を合わせて、出力変数と呼ぶ。【０００６】
対象関数の内部構造を考慮する単体テスト（ホワイトボックスの単体テスト）では、テストが十分に行われたかどうかが、網羅基準を１００％達成したかどうかによって判断される。例えば、判定網羅（ｄｅｃｉｓｉｏｎ  ｃｏｖｅｒａｇｅ）基準では、条件分岐文や繰り返し文の制御式のそれぞれが、真の場合と偽の場合とを実行することを調べる。全ての制御式の個数を２倍した数を分母とし、実行できた制御式の真・偽の場合の数を分子とした割り算の値が網羅度であり、１（１００％）となることが求められる。【０００７】
単体テストにおいて網羅基準を達成するためには、作業者が、対象関数に、ドライバ関数が与える入力変数値やスタブ関数が与える出力変数値を、対象関数の検査したい振舞いに応じて与える必要がある。以下、ドライバ関数とスタブ関数を合わせて、テストプログラムと呼ぶ。ドライバ関数やスタブ関数等のテストプログラムの作成は、一般的には主に作業者により行われる。【０００８】
特許文献１に記載された技術は、対象関数が下位関数の出力変数値を定数と比較して振舞いを変える場合に、比較に用いた定数値を出力変数値とするスタブ関数を自動生成する。しかし、特許文献１に記載された技術では、対象関数が下位関数の出力変数値を変数と比較する場合を考慮していない。【０００９】
対象関数の内部構造を考慮しない単体テスト（ブラックボックスの単体テスト）では、テストが十分に行われたかどうかが、対象関数の関数仕様に対して入力値の場合分けを尽くしたかどうかによって判断される。関数仕様は、関数の入力値に関する制約を示す論理式である事前条件（ｐｒｅ−ｃｏｎｄｉｔｉｏｎ）、関数が値を設定する変数の情報、関数の出力値に関する制約を示す論理式である事後条件（ｐｏｓｔ−ｃｏｎｄｉｔｉｏｎ）の集まりである。【００１０】
以下、論理式に関して、論理和および論理積の演算子を含まない式を項とし、項を論理積のみでつないだ式を連現節とし、連言説を論理和のみでつないだ式の形式を、選言標準形（ｄｉｓｊｕｎｃｔｉｖｅ  ｎｏｒｍａｌ  ｆｏｒｍ，  ＤＮＦ）と呼ぶ。任意の論理式は選言標準形で表せるので、事後条件は選言標準形であるとする。【００１１】
非特許文献１では、事後条件の連言節において、入力変数のみを含む項の積をガード条件（ｇｕａｒｄ  ｃｏｎｄｉｔｉｏｎ）と呼び、出力変数を含む項の積を定義条件（ｄｅｆｉｎｉｎｇ  ｃｏｎｄｉｔｉｏｎ）と呼ぶ。事前条件をＰ、事後条件の各連言節を添え字ｉで区別し、連言節がガード条件Ｇｉと定義条件Ｄｉの論理積からなるとすると、非特許文献１では、連言節ごとに、事前条件Ｐとガード条件Ｇｉの論理積（Ｐ∧Ｇｉ）であるテスト条件を考え、テスト条件ごとに入力値を生成することによって、事後条件の連言節を尽くすテストが行われる。つまり、非特許文献１に記載された技術の考え方は、テスト条件ごとに、対象関数が特定の振舞いを行い、その出力変数値が期待結果であるＤｉを満たせばよい、という考え方である。【００１２】
非特許文献１に記載された方法を用いると、事後条件の連言節に応じた振舞いを期待する入力変数値を与え、対象関数の出力変数値を前記連言節の定義条件と比較し、期待どおりの振舞いが行われたことを調べるドライバ関数を生成することができる。しかし、非特許文献１では、ドライバ関数の作成に必要となる対象関数の入力変数値は得られるが、スタブ関数の作成に必要となる対象関数の下位関数の出力変数値については何ら情報を得ることができない。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００８−１４０２６３号公報（段落００３９，段落００４０，図８および図１０）
【非特許文献】
【００１４】
【非特許文献１】Shaoying Liu and Shin Nakajima，A Decompositional Approach to Automatic Test Case Generation Based on Formal Specifications，NII Technical Report NII-2010-001E，Januarｙ 2010，p.3
【発明の概要】
【発明が解決しようとする課題】
【００１５】
第１の問題点は、特許文献１に記載されている単体テストにおけるスタブ関数を生成する方法では、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、前記実行経路を選択するようなスタブ関数を生成できない。その理由は、特許文献１に記載されている方法では、下位関数の出力変数値を定数と比較する場合しか考慮していないためである。【００１６】
第２の問題点は、非特許文献１に記載された単体テストにおけるドライバ関数を生成する方法では、対象関数が下位関数の出力変数値を定数値あるいは変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなドライバ関数を生成できない。その理由は、上記非特許文献１に記載された方法では、対象関数の開始箇所から下位関数からの復帰後の前記実行経路までの経路を調べずに、関数仕様だけから対象関数の入力変数値と期待結果を求めるためである。【００１７】
そこで、本発明は、プログラムの内部構造を考慮した網羅度を向上させることができるプログラムの単体テスト支援装置を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明によるプログラム単体テスト支援装置は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置であって、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構文解析部と、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部と、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部と、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部とを備えたことを特徴とする。【００１９】
本発明によるプログラム単体テスト支援方法は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援方法であって、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定し、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出し、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出し、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成することを特徴とする。【００２０】
本発明によるプログラム単体テスト支援プログラムは、コンピュータに、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援する処理を実行させるプログラム単体テスト支援プログラムであって、コンピュータに、前記対象関数において前記下位関数の出力変数値の影響を受ける部分を特定する構造解析処理と、前記対象関数の前記部分において、前記下位関数からの復帰後の経路を分析し、当該経路を実行するために前記下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析処理と、前記経路依存下位事後条件に基づいて、前記対象関数における前記下位関数からの復帰後に前記経路を実行するための前記対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析処理と、前記経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および前記経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成処理とを実行させることを特徴とする。
【発明の効果】
【００２１】
本発明によれば、プログラムの内部構造を考慮した網羅度を向上させることができる。
【図面の簡単な説明】
【００２２】
【図１】本発明によるプログラム単体テスト支援装置の実施形態の構成を示すブロック図である。
【図２】プログラム単体テスト対象の関数（対象関数）の例を示す説明図である。
【図３】本発明によるプログラム単体テスト支援装置の実施形態の動作を示すフローチャートである。
【図４】対象関数を構文解析して生成した制御フローグラフの例を示す説明図である。
【図５】制御フローグラフから抽出した呼出関係情報の例を示す説明図である。
【図６】制御フローグラフから抽出した依存関係情報の例を示す説明図である。
【図７】制御フローグラフから依存関係情報を抽出するためのルールの例を示す図である。
【図８】対象関数全体の制御フローグラフから下位関数の出力変数値が影響する範囲を切り出した部分制御フローグラフの例を示す説明図である。
【図９】部分制御フローグラフにおける経路ごとの情報（経路情報）の例を示す説明図である。
【図１０】出力変数が直接的あるいは間接的に代入される変数を、出力変数を用いて書き換えた経路情報の例を示す説明図である。
【図１１】部分制御フローグラフにおいて経路ごとに下位関数が満たすべき事後条件（経路依存下位事後条件）の例を示す説明図である。
【図１２】論理式を単純な表現に書き換えるルールの例を示す説明図である。
【図１３】経路依存下位事後条件から経路依存対象事前条件を計算する例を示す説明図である。
【図１４】対象関数全体の制御フローグラフから、対象関数の開始から下位関数の呼び出しまでを切り出した部分制御フローグラフの例を示す説明図である。
【図１５】最弱事前条件を計算するルールの例を示す説明図である。
【図１６】テストケースごとに対象関数の入力変数値と下位関数の出力変数値の例を示す説明図である。
【図１７】テストケースごとに生成したドライバ関数とスタブ関数の例を示す説明図である。
【図１８】本発明によるプログラム単体テスト支援装置の実施形態の別の動作例を示すフローチャートである。
【図１９】テストケース全体について生成したドライバ関数とスタブ関数の別の例を示す説明図である。
【図２０】本発明によるプログラム単体テスト支援装置の主要部の構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
以下、本発明の実施の形態について図面を参照して詳細に説明する。
【００２４】
図１は、本発明によるプログラム単体テスト支援装置１０の実施形態の構成を示すブロック図である。図１に示すように、本実施形態のプログラム単体テスト支援装置１０は、入出力装置１１と、処理制御部１２と、構文解析部１３と、スタブ関数出力分析部１４と対象関数入力分析部１５と、テストケース生成部１６と、永続記憶部１７と、一時記憶部１８とを備える。なお、入出力装置１１、処理制御部１２、永続記憶部１７および一時記憶部１８は、プログラム単体テスト支援装置１０の外部に設けられていてもよい。
【００２５】
本実施形態のプログラム単体テスト支援装置１０は、Ｃ言語等の高級プログラミング言語により記述されたプログラムにおける構成単位であるモジュールに対する単体テストを行うものである。以下では、簡単のために関数を用いて説明を行うが、プログラム単体テスト支援装置１０は、一般的なプログラムのモジュールに適用可能であり、明細書中では、Ｃ言語等における関数を明示的に意味する場合を除けば、本発明における関数はモジュールという、より広い概念を意味するものとする。
【００２６】
図２は、プログラム単体テスト対象の関数（対象関数）の例を示す説明図である。本実施形態のプログラム単体テスト支援装置１０に適用する単体テストの対象の関数（以下、対象関数と呼ぶ）は、例えば、図２に例示するようなＣ言語で記述されたプログラム中の関数である。図２に記述されたプログラムには、入力変数としてｘとｙを有し出力変数を持たない関数ｔａｒｇｅｔが、定義されている。関数ｔａｒｇｅｔは、対象関数の一例である。関数ｔａｒｇｅｔは、内部で関数ｆｏｏを呼び出している。関数ｆｏｏは、対象関数の下位関数の一例である。
【００２７】
図２に示すプログラムにおいて、関数の直前のコメント（「／＊＊」と「＊／」との間に記載された文）には、関数仕様が定義されている。関数仕様は、関数の開始時点で上位関数が満たすべき条件（以下、事前条件と呼ぶ）、関数が値を変更する変数（以下、出力変数と呼ぶ）の情報、および関数の終了時点で当該関数が満たすべき条件（以下、事後条件と呼ぶ）を含む。図２に示すプログラムでは、コメント内の＠ｐｒｅに続く論理式が事前条件であり、＠ｐｏｓｔに続く論理式が事後条件である。
【００２８】
また、図２に示すプログラムには使用されていないが、＠ｐａｒａｍ［ｏｕｔ］に続く出力変数名が、出力変数情報である。図２の事後条件では、関数の戻り値が、予約語＿＿ｒｅｔｕｒｎと表されている。なお、戻り値が出力変数であることは自明なので、戻り値について、＠ｐａｒａｍ［ｏｕｔ］  ＿＿ｒｅｔｕｒｎという出力変数情報を記述する必要はない。
【００２９】
入出力装置１１は、プログラム単体テスト支援装置１０と利用者との間のインタフェースであり、入力装置および出力装置を含む。入出力装置１１は、例えば、ディスプレイ、キーボード、およびマウス等により実現される。
【００３０】
永続記憶部１７は、入出力装置１１を介して入力された単体テストの対象プログラムを記憶する。対象プログラムは、対象関数の定義と、下位関数の宣言と、各関数の関数仕様とを含む。また、永続記憶部１７は、テストケース生成部１６によって生成されるスタブ関数とドライバ関数とを記憶する。
【００３１】
一時記憶部１８は、スタブ関数とドライバ関数とを生成するために対象プログラムから生成した、後述する様々な情報を記憶する。これらの情報は、スタブ関数およびドライバ関数が生成された後は不要となる。
【００３２】
構文解析部１３は、対象関数を構文解析して、処理の流れを表す制御フローグラフ（ｃｏｎｔｒｏｌ  ｆｌｏｗ  ｇｒａｐｈ）を作成し、一時記憶部１８に出力する。また、構文解析部１３は、制御フローグラフから、関数呼出しに関して、プログラム上の位置（例えば、行番号）と、呼出関係情報と、依存関係情報とを抽出し、一時記憶部１８に出力する。呼出関係情報は、対象関数を呼出す上位関数と、対象関数から呼ばれる下位関数との組を管理する情報である。依存関係情報は、対象関数の変数の依存関係を管理する情報である。
【００３３】
スタブ関数出力分析部１４は、呼出関係情報の下位関数において、その出力変数値によって選択されるプログラムの実行経路（以下、経路と記載する）を特定し、その経路を実行し得るような下位関数の事後条件（経路依存下位事後条件）を計算し、計算した結果を一時記憶部１８に出力する。
【００３４】
対象関数入力分析部１５は、下位関数の呼出し箇所から対象関数の開始箇所へと制御フローグラフをプログラム実行とは逆向きに辿り、経路依存下位事後条件と下位関数の事前条件の積を元に、逆向きに辿る経路における代入式や制御式を考慮して、対象関数の開始箇所で成立すべき条件（以下、経路依存対象最弱事前条件と呼ぶ）を計算する。また、対象関数入力分析部１５は、経路依存対象最弱事前条件と対象関数の事前条件との論理積（以下、経路依存対象事前条件と呼ぶ）を計算する。そして、対象関数入力分析部１５は、経路依存対象最弱事前条件と、経路依存対象事前条件とを一時記憶部１８に出力する。
【００３５】
テストケース生成部１６は、経路依存対象事前条件を充足する値を計算し、この値を入力変数値として対象関数に与えるドライバ関数を生成する。また、テストケース生成部１６は、経路依存対象事前条件に対応する経路依存下位事後条件を充足する値を計算し、この値を出力変数値とするスタブ関数を生成する。そして、テストケース生成部１６は、ドライバ関数とスタブ関数との組をテストケースとして永続記憶部１７に出力する。
【００３６】
処理制御部１２は、入出力装置１１を介して入力された指示情報をもとに、構文解析部１３、スタブ関数出力分析部１４、対象関数入力分析部１５、およびテストケース生成部１６等に対する制御を行う。
【００３７】
処理制御部１２、構文解析部１３、スタブ関数出力分析部１４、対象関数入力分析部１５、およびテストケース生成部１６は、プログラムにしたがって処理を実行する、コンピュータ内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ：中央処理装置）等の演算装置によって実現される。演算装置により実行されるプログラムは、ハードディスク等の記憶装置に記憶され、演算される際にはメモリ装置等の一時記憶領域に記憶される。永続記憶部１７は、ハードディスク等の記憶装置により実現される。一時記憶部１８はメモリ装置またはハードディスク等の記憶装置により実現される。
【００３８】
次に、本実施形態の動作を説明する。図３は、本実施形態のプログラム単体テスト支援装置の動作を示すフローチャートである。図３を参照して、図２に示すプログラム中に定義されている関数ｔａｒｇｅｔを対象関数として単体テストのテストケースが生成されるまでの流れを説明する。
【００３９】
ステップＳ２０１において、利用者は、単体テストの対象関数と対象関数の定義およびその関数仕様を含むプログラムと、対象関数から呼ばれる下位関数の宣言およびその関数仕様を含むプログラムとを指定する。入出力装置１１は、利用者に指定された、例えば図２に示す対象関数ｔａｒｇｅｔの定義および関数仕様を含むプログラムと、ｔａｒｇｅｔから呼ばれる下位関数ｆｏｏの宣言および関数仕様を含むプログラムとを入力し、これらのプログラムを永続記憶部１７に記憶させる。
【００４０】
ステップＳ２０２において、構文解析部１３は、対象関数を定義したプログラムコードを構文解析し、制御フローグラフを生成し、一時記憶部１８に記憶させる。図４は、対象関数ｔａｒｇｅｔを構文解析して生成した制御フローグラフである。図４に示す制御フローグラフでは、処理の開始および終了を丸みのある矩形ノードで表し、式の実行を矩形ノード（以下、実行ノードと呼ぶ）で表し、式からの値の取得（以下、式の判定と呼ぶ）をひし形ノード（以下、判定ノードと呼ぶ）で表している。
【００４１】
図４に示す各ノード内には、行番号等で示されるプログラム上での位置と、実行または判定すべき式とが「位置：式」という形式で記述されている。ノード間の矢印は、矢尻側のノードの式を実行または判定した後に矢頭側のノードの制御を実行することを示す。判定ノードから出る矢印に書いてある値は、その値と当該判定ノードの式を判定した結果を示す値とが同じである場合にのみ、次のノードの制御を実行することを示す。実行ノードの式に何も書かれていない場合には、何も実行せずに次のノードの制御を実行する。
【００４２】
ステップＳ２０３において、構文解析部１３は、ステップＳ２０２で生成した制御フローグラフを用いて、対象関数における関数呼出しの箇所を特定する。そして、構文解析部１３は、プログラム上における関数呼び出しの位置と、対象関数を呼びだす側である上位関数と、対象関数から呼ばれる側である下位関数との組を呼出関係情報として一時記憶部１８に記憶させる。図５は、制御フローグラフから抽出した呼出関係情報の例を示す説明図である。図５に示す例では、プログラムの３行目で関数ｔａｒｇｅｔが関数ｆｏｏを呼び出すことが示されている。
【００４３】
ステップＳ２０４において、構文解析部１３は、依存関係情報を抽出する。具体的には、構文解析部１３は、ステップＳ２０２で生成した制御フローグラフを終了ノードから開始ノードへと辿り、あるノードを依存元ノードとみなして、依存元ノードにおける代入式の右辺に出現する変数あるいは制御式に出現する変数を依存元変数として特定する。また、構文解析部１３は、依存元ノードよりも矢印を逆に辿って前にあるノードのうち、依存元変数の値が参照あるいは設定されるような最も近いノードを依存先ノードとして特定する。
【００４４】
図６は、制御フローグラフから抽出した依存関係情報の例を示す説明図である。図７は、制御フローグラフから依存関係情報を抽出するためのルールの例を示す図である。構文解析部１３は、各ノードに図７に示す依存関係抽出ルールを適用して依存関係情報を抽出し、一時記憶部１８に記憶させる。例えば、図４に示す制御フローグラフの例では、６：ｚ＝＝ｙと記載された判定ノードがある。その制御式ｚ＝＝ｙに出現する変数のうちｚに着目すると、矢印を１個分逆向きに辿った判定ノードは、５：ｚ＜＝ｙである。そのため、構文解析部１３は、図７に示す番号４のルールにしたがって、６行目のｚが５行目のｚに依存していること（図６の番号１２の依存関係）と、６行目のｚが５行目のｙに依存していること（図６の番号１１の依存関係）を依存関係情報として抽出する。
【００４５】
続くステップＳ２１０からステップＳ２１２までは、構文解析部１３は、呼出関係情報に登録された下位関数の１つを選択して、ステップＳ２１１およびステップＳ２２０からステップＳ２２７の処理を繰り返す。図５に示す呼出関係情報には、下位関数としてｆｏｏが登録されているので、構文解析部１３は、下位関数としてｆｏｏを選択し、ステップＳ２１１の処理を行う。
【００４６】
ステップＳ２１１において、構文解析部１３は、依存関係情報から、選択された下位関数の出力変数および出力変数が代入された変数を依存先変数とし、依存種別が制御であり依存元変数が依存先変数とは異なる依存関係を特定する。そして、構文解析部１３は、下位関数の呼び出しを実行するノードから特定された依存関係情報の依存元変数に対応するノードまでを、ステップＳ２０２で抽出した制御フローグラフから部分グラフ（以下、復帰後部分制御フローグラフ）として抽出する。
【００４７】
さらに、構文解析部１３は、抽出した復帰後部分制御フローグラフの末端のノードから矢印を逆に辿り下位関数の呼び出しを行う実行ノードまでの経路を求める。経路の求める手順を、図６を用いて詳しく説明する。図６に示す番号４の依存関係では、下位関数ｆｏｏの戻り値が変数ｔに代入される。さらに、番号６の依存関係では、変数ｔが変数ｚに代入される。つまり、下位関数ｆｏｏの出力変数値が直接的または間接的に代入される変数は、ｔおよびｚである。
【００４８】
構文解析部１３は、図６に示す依存関係情報から、下位関数ｆｏｏの呼出し後に変数ｔおよび変数ｚが依存先変数であり、依存元変数が依存先変数とは異なり、依存種別が制御である依存関係として、番号１４、番号１６および番号１８の依存関係を抽出する。そして、構文解析部１３は、下位関数ｆｏｏを呼び出す実行ノードから、抽出された依存関係における依存元変数に相当するノードまでを、図４の制御フローグラフから部分的に切り出した制御フローグラフを、部分制御フローグラフとして抽出する。図８は、対象関数全体の制御フローグラフから下位関数の出力変数値が影響する範囲を切り出した部分制御フローグラフの例を示す説明図である。
【００４９】
図８に示すように、関数ｆｏｏを呼び出す実行ノードから矢印の方向に進むと末端のノードが３個あり、それぞれの末端のノードに至る３つの経路ｐａｔｈ−１，ｐａｔｈ−２，ｐａｔｈ−３が存在する。ステップＳ２２０からステップＳ２２７までの処理では、切り出された上記経路のそれぞれに関してステップＳ２２１からステップＳ２２６の処理が実行される。以下、図８で示すｐａｔｈ−１に関するステップＳ２２１からステップＳ２２６の処理を説明する。
【００５０】
ステップＳ２２１において、スタブ関数出力分析部１４は、ステップＳ２２０で選択された経路に関して、下位関数から対象関数への復帰箇所において、出力変数が満足すべき制約条件、すなわち経路に依存した下位関数の事後条件（以下、経路依存下位事後条件と呼ぶ）を以下に記すように算出する。まず、スタブ関数出力分析部１４は、ステップＳ２１１で切り出された部分制御フローグラフから、下位関数の出力変数値が直接的または間接的に代入された変数に関係する実行ノードまたは判定ノードを抽出し、ノードに付されたプログラム上の位置と式を経路毎に抽出する（以下、経路情報と呼ぶ）。制御式についてはその判定結果も含めて抽出する。
【００５１】
スタブ関数出力分析部１４は、例えば、制御式がｘ＝＝０であり、その後の矢印に付された値が偽（ｆａｌｓｅ）であれば、（ｘ＝＝０）＝＝ｆａｌｓｅという式を、ｘ！＝０と置き換える。スタブ関数出力分析部１４は、さらに、経路情報において、プログラム上の位置（行番号）が小さい方から大きい方へと移動し、ある式の変数を、その式より小さい位置で最も近い代入式の右辺で置き換えることを繰り返す。最後に、スタブ関数出力分析部１４は、書き換えた経路情報から制御式を抽出し、これらの論理積をとり、予め用意された書き換えルールを用いて、簡潔な式に直す。
【００５２】
以下、ステップＳ２２１の処理を、図８のｐａｔｈ−１に適用した例を説明する。図９は、部分制御フローグラフにおける経路情報の例を示す図である。図９において、各矩形内の情報は「行番号：式」を表す。下位関数ｆｏｏの出力変数値が直接的または間接的に代入される変数はｔとｚである。スタブ関数出力分析部１４は、図８に示す部分制御フローグラフのノードから、ｔとｚが出現するこれらが出現するノードの式を抽出する。その結果、図９に示すようなｐａｔｈ−１の経路情報が得られる。
【００５３】
図１０は、出力変数が直接的あるいは間接的に代入される変数を、出力変数を用いて書き換えた経路情報の例を示す説明図である。図９に示すｐａｔｈ−１の経路情報において、プログラム上の位置（行番号）がもっとも小さい代入式は番号３のｔ=ｆｏｏである。スタブ関数出力分析部１４は、この右辺ｆｏｏを用いて後続の番号４の式の右辺に出現するｔを書き換える。そして、プログラム上の位置が次に小さい代入式はｚ=ｆｏｏ＋１であるので、スタブ関数出力分析部１４は、この右辺ｆｏｏ＋１を用いて後続の番号５および番号６に出現するｚを書き換える。この結果、図１０に示すｐａｔｈ−１の経路情報が得られる。
【００５４】
図１１は、部分制御フローグラフにおいて経路ごとに下位関数が満たすべき事後条件（経路依存下位事後条件）の例を示す説明図である。図１２は、論理式を単純な表現に書き換えるルールの例を示す図である。図１２において、ｌ，ｍ，ｎは、整数値または整数型の変数または式を表し、ｘ、ｙは変数または定数で表し、ｅは式を表し、ｅ［ｙ／ｘ］はｅに出現するｘをｙで置換した式を表す。また、Ｐ，Ｑは論理式を表し、∧は論理和を表し、¬は論理否定を表し、⇒は論理合意を表す。
【００５５】
スタブ関数出力分析部１４は、図１０に示す書き換えられたｐａｔｈ−１の経路情報にある制御式の論理積を計算し、その結果、ｆｏｏ＋１＜＝ｙ∧ｆｏｏ＋１＝＝ｙが得られる。スタブ関数出力分析部１４は、この式に図１２に示す番号３の書き換えルールを適用し、ｆｏｏ＋１＝＝ｙを得る。そして、スタブ関数出力分析部１４は、下位関数名ｆｏｏを、戻り値を表す＿＿ｒｅｔｕｒｎで書きかえる。その結果、下位関数ｆｏｏからの復帰後に経路ｐａｔｈ−１を実行するようなｆｏｏの事後条件として、図１１に示すｐａｔｈ−１の経路依存下位事後条件＿＿ｒｅｔｕｒｎ＋１＝＝ｙが得られる。
【００５６】
ステップＳ２２２において、対象関数入力分析部１５は、ステップＳ２２１で得た経路依存下位事後条件と、下位関数の事後条件（下位事後条件）から選択した１つの定義条件の論理積を算出し、図１２の書き換えルールを用いて単純な式に書き換える。もし、戻り値＿＿ｒｅｔｕｒｎが残っていれば、対象関数入力分析部１５は、さらに書き換え後の式を真（ｔｒｕｅ）に書き換える。対象関数入力分析部１５は、この書き換え後の式と選択した前記定義条件に対応するガード条件と下位関数の事前条件との論理積を算出し、図１２の書き換えルールを用いて単純な式に書き換えた式を、経路に依存した下位関数の事前条件（以下、経路依存下位事前条件と呼ぶ）を得る。
【００５７】
図１３は、経路依存下位事後条件から経路依存対象事前条件を計算する例を示す説明図である。以下、図１３の見出し行の１つ下の行を参照して、図１１の経路ｐａｔｈ−１に関するステップＳ２２２の計算例を示す。
【００５８】
対象関数入力分析部１５は、図１１のｐａｔｈ−１の経路依存下位事後条件＿＿ｒｅｔｕｒｎ＋１＝＝ｙと図２の下位関数ｆｏｏの定義条件＿＿ｒｅｔｕｒｎ＝＝１との論理積を算出し、図１２の番号９の書き換えルールを用いて式を単純にするとｙ＝＝２を得る。次に、対象関数入力分析部１５は、この式ｙ＝＝２とガード条件ｘ＝＝０とｆｏｏの事前条件ｘ＞=０との論理積を算出し、図１２の番号３の書き換えルールを用いて式を単純にすると、経路依存下位事前条件ｘ＝＝０  ＆＆  ｙ＝＝２を得る。
【００５９】
ステップＳ２２３において、対象関数入力分析部１５は、ステップＳ２２２で得た経路依存下位事前条件を満たす状態に至るような対象関数の開始点における制約条件（以下、経路依存対象最弱事前条件と呼ぶ）を計算し、一時記憶部１８に出力する。以下、ステップＳ２２３の処理を具体的に説明する。
【００６０】
図１４は、図４に示す対象関数全体の制御フローグラフから、対象関数ｔａｒｇｅｔの開始から下位関数ｆｏｏの呼び出しまでの部分制御フローグラフを切り出した例を示す説明図である。図１５は、最弱事前条件を計算するルールの例を示す説明図である。図１５において、式の列は、前のノードに付された式と後のノードで成立する式とを「；」でつないだものを表す。また、Ｐ，Ｑは論理式を表し、Ｑ［ｅ／ｘ］は、Ｑに出現するｘをｅで置換した式を表す。
【００６１】
ステップＳ２２３において対象関数入力分析部１５は、図１４に示すような、対象関数の制御フローグラフから、対象関数の開始箇所から下位関数の呼出箇所までを抽出した部分的な制御フローグラフを作る。そして、対象関数入力分析部１５は、その部分的な制御フローグラフにおいて、下位関数の呼び出しを実行するノードから矢印を逆向きに辿る。そして、対象関数入力分析部１５は、経路依存下位事前条件を初期の式として、各ノードに付された式と図１５に示すような最弱事前条件計算ルールを用いて、各ノードにおいて下位関数の呼び出しに至る制約条件を求め、これを開始箇所のノードまで繰り返す。
【００６２】
以下、図１３の見出し行の１つ下の行の例を参照して、図１４の制御フローグラフに関するステップＳ２２３の計算例を示す。図１４において、下位関数の呼び出しと開始点との間には判定ノードが１個のみであり、その制御式は０＜ｙである（図１３における経路情報）。対象関数入力分析部１５は、前記制御式０＜ｙとステップＳ２２２で得た経路依存下位事前条件ｘ＝＝０  ＆＆  ｙ＝＝２をつないだ式の列に対して、図１５の番号２の最弱事前条件計算ルールを用いると０＜ｙ  ＆＆  ｘ＝＝０  ＆＆  ｙ＝＝２を得る。さらに、対象関数入力分析部１５は、図１２の番号１５と番号８の書き換えルールを用いて式を単純にすると、経路ｐａｔｈ−１に対する経路依存対象最弱事前条件ｘ＝＝０  ＆＆  ｙ＝＝２を得る。
【００６３】
ステップＳ２２４において、対象関数入力分析部１５は、ステップＳ２２３で得た経路依存対象最弱事前条件と対象関数の事前条件との論理積を算出し、経路依存対象事前条件として一時記憶部１８に出力する。また、対象関数入力分析部１５は、経路依存対象事前条件が偽（ｆａｌｓｅ）で無ければ、１つのテストケース番号を付与する。以下、図１３の見出し行の１つ下の行に関して、図１１の経路ｐａｔｈ−１についての経路依存対象事前条件の計算例を示す。経路依存対象最弱事前条件ｘ＝＝０  ＆＆  ｙ＝＝２と図２における対象関数の事前条件ｘ＋ｙ＞０の論理積は、ｘ＝＝０  ＆＆  ｙ＝＝２  ＆＆  ｘ＋ｙ＞０となる。この計算結果に対して、対象関数入力分析部１５は、テストケース番号としてＴｉｄ−１を付与する。
【００６４】
ステップＳ２２５において、テストケース生成部１６は、ステップＳ２２４で得られた経路依存対象事前条件を充足する対象関数の入力変数値と、ステップＳ２２１で得られた経路依存下位事後条件を充足する下位関数の出力変数値とを、一般の制約充足アルゴリズムを用いて計算する。
【００６５】
図１６は、テストケースごとに対象関数の入力変数値と下位関数の出力変数値の例を示す説明図である。テストケース生成部１６は、テストケース番号Ｔｉｄ−１について、経路依存対象事前条件ｘ＝＝０  ＆＆  ｙ＝＝２  ＆＆  ｘ＋ｙ＞０を充足する変数ｘおよびｙの値として、それぞれ０および２を得る。また、テストケース生成部１６は、経路依存事後条件＿＿ｒｅｔｕｒｎ＋１＝＝ｙを充足する下位関数ｆｏｏの戻り値＿＿ｒｅｔｕｒｎとして１を得る。
【００６６】
ステップＳ２２６において、テストケース生成部１６は、ステップＳ２２５で得た対象関数の入力変数値と下位関数の出力変数値を用いて、当該入力変数値を与えて対象関数を呼び出すドライバ関数と、下位関数に代わって当該出力変数値を出力するスタブ関数を生成する。図１７は、テストケースごとに生成したドライバ関数とスタブ関数の例を示す説明図である。図１７は、図１３および図１６に示したテストケース番号Ｔｉｄ−１に対するドライバ関数とスタブ関数の生成例である。
【００６７】
なお、図３のステップＳ２２６におけるテストプログラムの生成は、ステップＳ２１０からステップＳ２１２までの一連の処理の後で行うことができる。図１８は、本発明によるプログラム単体テスト支援装置の実施形態の別の動作例を示すフローチャートである。図１９は、テストケース全体について生成したドライバ関数とスタブ関数の別の例を示す説明図である。図１８のステップＳ１８０１〜ステップＳ１８１２の処理は、図３のステップＳ２０１〜ステップＳ２１２の処理と同様であり、図１８のステップＳ１８２０〜ステップＳ１８２７の処理は、図３のステップＳ２２０〜ステップＳ２２５およびステップＳ２２７の処理と同様である。
【００６８】
図３に示す動作では、ステップＳ２２６において、テストケース生成部１６は、図１７に示すようなテストケース番号ごとのテストプログラムを生成したが、図１８に示す動作では、テストケース生成部１６は、経路毎の一連の処理の後で、テストプログラムを生成する。これにより、図１８に示す動作を行った場合は、テストケース生成部１６は、図１９に示すような全てのテストケース番号をまとめたテストプログラムを生成することができる。
【００６９】
本実施形態のプログラム単体テスト支援装置によれば、対象関数が下位関数の出力変数値を変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなスタブ関数を生成できる。その理由は、本実施形態のプログラム単体テスト支援装置は、下位関数の出力変数値を変数と比較する場合も考慮して、下位関数の出力変数値が充足すべき下位関数の事後条件（経路依存下位事後条件）を計算し、経路依下位事後条件を充足する値を出力変数値とするスタブ関数を生成するからである。
【００７０】
また、本実施形態のプログラム単体テスト支援装置によれば、対象関数が下位関数の出力変数値を定数値あるいは変数値と比較することによって下位関数からの復帰後の特定の実行経路を選択する場合に、その実行経路を選択するようなドライバ関数を生成することができる。その理由は、本実施形態のプログラム単体テスト支援装置は、対象関数の開始箇所から下位関数からの復帰後の前記実行経路までの経路を調べて、この経路を実行するような最弱事前条件（経路依存対象最弱事前条件）を計算し、経路依存対象最弱事前条件と対象関数の事前条件と対象関数のガード条件の論理積を充足する値を対象関数への入力変数値とするドライバ関数を生成するからである。
【００７１】
本実施形態のプログラム単体テスト支援装置によれば、上記のようなスタブ関数およびドライバ関数を生成するので、プログラムの単体テストの作業効率を向上させ、プログラムの内部構造を考慮した網羅度を向上させることできる。
【００７２】
図２０は、本発明によるプログラム単体テスト支援装置の主要部の構成を示すブロック図である。図２０に示すように、本発明によるプログラム単体テスト支援装置１０は、プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置であって、主要な構成要素として、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構造解析部１３と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部１４と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部１５と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部１６とを備える。
【００７３】
また、上記の実施形態では、以下の（１）〜（４）に示すようなプログラム単体テスト支援装置も開示されている。
【００７４】
（１）プログラム単体テストの対象の関数である対象関数に入力変数値を与えて当該対象関数を呼び出すドライバ関数と、当該対象関数が呼び出す下位関数の動作を模擬する関数であって当該下位関数と置き換えられるスタブ関数とを用いて行われるプログラム単体テストを支援するプログラム単体テスト支援装置（例えば、プログラム単体テスト支援装置１０）であって、対象関数において下位関数の出力変数値の影響を受ける部分を特定する構文解析部（例えば、構文解析部１３）と、対象関数の部分において、下位関数からの復帰後の経路を分析し、当該経路を実行するために下位関数の出力変数値が満たすべき制約を経路依存下位事後条件として算出するスタブ関数出力分析部（例えば、スタブ関数出力分析部１４）と、経路依存下位事後条件に基づいて、対象関数における下位関数からの復帰後に経路を実行するための対象関数の入力値に関する制約を経路依存対象事前条件として算出する対象関数入力分析部（例えば、対象関数入力分析部１５）と、経路依存対象事前条件を満たす入力変数値を与えるドライバ関数、および経路依存下位事後条件を満たす出力変数値を出力するスタブ関数を生成するテストケース生成部（例えば、テストケース生成部１６）とを備えたことを特徴とするプログラム単体テスト支援装置。
【００７５】
（２）プログラム単体テスト支援装置は、構文解析部が、対象関数を呼び出す上位関数と当該対象関数から呼ばれる下位関数との組を含む呼出関係情報と、対象関数における変数の依存関係を示す依存関係情報とを抽出し、当該呼出関係情報および当該依存関係情報に基づいて、対象関数において下位関数の出力変数値の影響を受ける部分を特定するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、下位関数や、下位変数の出力変数値に依存する式が複数あっても、全ての下位関数および経路を網羅したテストケースを生成することができる。
【００７６】
（３）プログラム単体テスト支援装置は、スタブ関数出力分析部が、対象関数に、下位関数の出力変数または当該出力変数に依存する変数と他の変数とを比較する判定式が存在し、当該判定式の結果により経路が選択される場合、当該判定式に基づいて経路依存下位事後条件を算出するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、対象関数において、上記判定式の結果により経路が選択される場合であっても、全ての経路を網羅したスタブ関数を生成することができる。
【００７７】
（４）プログラム単体テスト支援装置は、対象関数入力分析部が、経路依存下位事後条件と、予め定義された下位関数の入力値に関する制約である下位事前条件および当該下位関数の出力値に関する制約である下位事後条件に基づいて、経路に依存した下位関数の事前条件を経路依存下位事前条件として算出し、当該経路依存下位事前条件を満たす、対象関数の開始点における制約条件を経路依存対象最弱事前条件として算出し、経路依存対象最弱事前条件と、対象関数の入力値に関する制約である対象事前条件との論理積を計算することにより経路依存対象事前条件を算出するように構成されていてもよい。このようなプログラム単体テスト支援装置によれば、上記スタブ関数に対応し、経路に依存した対象関数の事前条件を満たすドライバ関数を生成することができる。
【００７８】
この出願は、２０１２年４月２６日に出願された日本出願特願２０１２−１０１１８４を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【００７９】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用の可能性】
【００８０】
本発明にかかるプログラムの単体テスト支援装置は、高級プログラミング言語で記述されたプログラムのドライバ関数およびスタブ関数を用いた単体テストに適用できる。
【符号の説明】
【００８１】
１０  プログラム単体テスト支援装置
１１  入出力装置
１２  処理制御部
１３  構文解析部
１４  スタブ関数出力分析部
１５  対象関数入力分析部
１６  テストケース生成部
１７  永続記憶部
１８  一時記憶部
【図１】
2013161195.tif 000003
【図２】
2013161195.tif 000004
【図３】
2013161195.tif 000005
【図４】
2013161195.tif 000006
【図５】
2013161195.tif 000007
【図６】
2013161195.tif 000008
【図７】
2013161195.tif 000009
【図８】
2013161195.tif 000010
【図９】
2013161195.tif 000011
【図１０】
2013161195.tif 000012
【図１１】
2013161195.tif 000013
【図１２】
2013161195.tif 000014
【図１３】
2013161195.tif 000015
【図１４】
2013161195.tif 000016
【図１５】
2013161195.tif 000017
【図１６】
2013161195.tif 000018
【図１７】
2013161195.tif 000019
【図１８】
2013161195.tif 000020
【図１９】
2013161195.tif 000021
【図２０】
2013161195.tif 000022
【国際調査報告】
2013161195.tif 000023
2013161195.tif 000024
2013161195.tif 000025
2013161195.tif 000026