(57)【要約】【課題】テストデータの生成に用いられるスタブの数を抑制するテストプログラム、テスト装置及びテスト方法を提供する。【解決手段】テスト対象のプログラム内の変数に具体値を入力することなくテスト対象のプログラムを実行し、テスト対象のプログラムに含まれる条件節のうち、テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、関数呼び出しに対応する関数を特定のスタブに置き換えたテスト対象のプログラムを再実行する。【選択図】図７
2019053518.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
処理を実行させることを特徴とするテストプログラム。
【請求項２】
請求項１において、
前記実行する処理では、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する１以上のパス条件を特定し、
特定した前記１以上のパス条件のそれぞれを満たす１以上のテストデータを生成し、
生成した前記１以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記１以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテストプログラム。
【請求項３】
請求項２において、
前記特定のスタブは、前記テスト対象のプログラムに対して、前記関数呼び出しに対応する関数と同じ型のシンボル変数を与えるスタブである、
ことを特徴とするテストプログラム。
【請求項４】
請求項３において、
前記置き換える処理では、特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
【請求項５】
請求項４において、
前記置き換える処理では、特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、前記複数の関数呼び出しのうちのいずれかに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
【請求項６】
請求項１において、
前記条件節を特定する処理では、前記テスト対象のプログラムのソースコードに記述された行のうち、前記テスト対象のプログラムの実行時において実行されなかった行を含む条件節を特定する、
ことを特徴とするテストプログラム。
【請求項７】
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行するプログラム実行部と、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する条件節特定部と、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換えるスタブ置換部と、を有し、
前記プログラム実行部は、前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト装置。
【請求項８】
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストプログラム、テスト装置及びテスト方法に関する。
【背景技術】
【０００２】
例えば、利用者にサービスを提供する事業者（以下、単に事業者とも呼ぶ）は、サービスの提供を行うための業務システムを構築して稼働させる。
【０００３】
そして、事業者は、例えば、業務システムを構成する新たなプログラムの生成や既存のプログラムの修正を行った場合、これらのプログラム（以下、テスト対象プログラムとも呼ぶ）の動作についての各種テストを行う。具体的に、事業者は、この場合、予め生成したテストデータを入力とすることによって、テスト対象プログラム自体の単体テストや、テスト対象プログラムと外部プログラム（例えば、既存のプログラム）との結合テスト等を行う（例えば、特許文献１乃至３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１４０２６３号公報
【特許文献２】国際公開第２０１３／１６１１９５号
【特許文献３】特開２０１６−０１８３９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上記のようなテストデータの生成を行う場合、事業者は、例えば、シンボリック実行技術（以下、単にシンボリック実行とも呼ぶ）を活用する。このシンボリック実行は、テスト対象プログラム中の変数値を具体化せず、シンボル変数（記号）のままテスト対象プログラムを実行することにより、条件文などを通過したときにシンボル変数が満たすべき論理的な制約をパス条件として抽出し、抽出したパス条件に対応するテストデータを生成する技術である。
【０００６】
上記のようなシンボリック実行では、テスト対象プログラムを呼び出してテスト対象プログラム内の関数に引数を与えるドライバと、テスト対象プログラムから呼び出される外部プログラムのダミー実装であって、呼び出された際に値を返却するスタブとが用いられる。そして、シンボリック実行では、ドライバから与えられる引数及びスタブから返却される値をシンボル変数とすることにより、テスト対象プログラムのパス条件を網羅するテストデータを生成する。
【０００７】
具体的に、事業者は、例えば、テスト対象プログラムの挙動を確認する単体テストにおいて用いられるテストデータの生成を行う場合、テスト対象プログラムが引数を与える外部プログラムの全てをスタブに置き換えることによるシンボリック実行を行う。
【０００８】
ここで、上記のようなスタブの挙動は、テスト対象プログラムに対して値を返却する外部プログラムの実際の挙動と大きく異なる場合がある。そのため、事業者は、例えば、テスト対象プログラムを含む業務システム全体としての挙動を確認する結合テストを行う場合において、テストデータの生成をシンボリック実行によって行う場合、テスト対象プログラムに対して値を返却する外部プログラムと可能な限り挙動が近いスタブを用いる必要がある。
【０００９】
しかしながら、上記のような外部プログラムと挙動が近いスタブの生成には、多くの工数を要する場合がある。そのため、事業者は、結合テストにおいて用いるテストデータの生成をシンボリック実行によって行う場合、生成するスタブの数を可能な限り抑制することが好ましい。
【００１０】
そこで、一つの側面では、本発明は、テストデータの生成に用いられるスタブの数を抑制するテストプログラム、テスト装置及びテスト方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
実施の形態の一態様では、テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、処理を実行させる。
【発明の効果】
【００１２】
一つの側面によれば、テストデータの生成に用いられるスタブの数を抑制する。
【図面の簡単な説明】
【００１３】
【図１】図１は、情報処理システム１０の構成を示す図である。
【図２】図２は、テスト対象プログラム１３１の具体例を説明する図である。
【図３】図３は、テスト対象プログラム１３１の制御構造の具体例を説明する図である。
【図４】図４は、テスト対象プログラム１３１のテストに用いられるテストデータ１３２の具体例を説明する図である。
【図５】図５は、情報処理装置１のハードウエア構成を説明する図である。
【図６】図６は、情報処理装置１の機能ブロック図である。
【図７】図７は、第１の実施の形態におけるテスト処理の概略を説明するフローチャート図である。
【図８】図８は、第１の実施の形態におけるテスト処理の概略を説明する図である。
【図９】図９は、第１の実施の形態におけるテスト処理の概略を説明する図である。
【図１０】図１０は、第１の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。
【図１１】図１１は、第１の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。
【図１２】図１２は、第１の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。
【図１３】図１３は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１４】図１４は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１５】図１５は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１６】図１６は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１７】図１７は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１８】図１８は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図１９】図１９は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図２０】図２０は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図２１】図２１は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【図２２】図２２は、第１の実施の形態におけるテスト処理の詳細を説明する図である。
【発明を実施するための形態】
【００１４】
［情報処理システムの構成］
初めに、情報処理システム１０の構成について説明を行う。図１は、情報処理システム１０の構成を示す図である。図１に示す情報処理システム１０は、例えば、情報処理装置１（以下、テスト装置１とも呼ぶ）と、記憶部１３０と、操作端末３ａ、３ｂ及び３ｃ（以下、これらを総称して操作端末３とも呼ぶ）とを有する。
【００１５】
記憶部１３０には、例えば、利用者にサービスを提供するための業務システムを構成する各種プログラムが記憶されている。具体的に、記憶部１３０には、例えば、図１に示すように、テスト対象プログラム１３１が記憶されている。また、記憶部１３０には、テスト対象プログラム１３１から呼び出される外部プログラム（図示しない）や、テスト対象プログラム１３１を呼び出す外部プログラム（図示しない）が記憶されている。さらに、記憶部１３０には、テスト対象プログラム１３１に対するシンボリック実行が行われる際に用いられるドライバ（図示しない）やスタブ（図示しない）が記憶されている。
【００１６】
そして、情報処理装置１は、例えば、テスト対象プログラム１３１に対して、記憶部１３０に記憶されたドライバやスタブを用いたシンボリック実行を行うことにより、テスト対象プログラム１３１のパス条件を抽出する。さらに、情報処理装置１は、抽出したパス条件を網羅するテストデータ１３２を生成する。その後、情報処理装置１は、図１に示すように、生成したテストデータ１３２を情報格納領域１３０に記憶する。以下、テスト対象プログラム１３１、テスト対象プログラム１３１のパス条件及びテストデータ１３２の具体例について説明を行う。
【００１７】
［テスト対象プログラム］
図２は、テスト対象プログラム１３１の具体例を説明する図である。
【００１８】
図２に示すテスト対象プログラム１３１では、引数ａが０以外の値であって５よりも大きい値である場合において、さらに、引数ａが０である場合、「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋ１”）」が実行される。一方、図２に示すテスト対象プログラム１３１では、引数ａが０以外の値であって５よりも大きい値である場合において、さらに、引数ａが０以外の値である場合、「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋ２”）」が実行される。
【００１９】
また、図２に示すテスト対象プログラム１３１では、引数ａが０以外の値であって５以下の値である場合、「ｂ＝ｂ＋１」及び「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋ３”）」が実行される。さらに、図２に示すテスト対象プログラム１３１では、引数ａが０である場合、「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋ４”）」が実行される。
【００２０】
その後、図２に示すテスト対象プログラム１３１では、引数ｂが０以下の値である場合、「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋＡ”）」が実行され、引数ｂが０よりも大きい値である場合、「ａ＝ｂ／ａ」及び「ｃｏｎｓｏｌｅ．ｌｏｇ（“ｂｌｏｃｋＢ”）」が実行される。
【００２１】
［テスト対象プログラムにおけるパス条件の抽出］
次に、テスト対象プログラム１３１におけるパス条件の抽出について説明を行う。図３は、テスト対象プログラム１３１の制御構造の具体例を説明する図である。
【００２２】
情報処理装置１は、図２で説明したテスト対象プログラム１３１に渡される引数ａ及び引数ｂをシンボル変数としたシンボリック実行を行うことにより、テスト対象プログラム１３１におけるパス条件の抽出を行う。
【００２３】
具体的に、情報処理装置１は、図３に示す制御構造を参照し、ａが０であってｂが０よりも大きい値である場合に通過するパス条件（以下、パス条件（１）とも呼ぶ）と、ａが０であってｂが０以下の値である場合に通過するパス条件（以下、パス条件（２）とも呼ぶ）とを抽出する。また、情報処理装置１は、図３に示す制御構造を参照し、ａが０以外の値であって５よりも大きい値であり、かつ、ｂが０以上の値である場合に通過するパス条件（以下、パス条件（３）とも呼ぶ）と、ａが０以外の値であって５よりも大きい値であり、かつ、ｂが０より小さい値である場合に通過するパス条件（以下、パス条件（４）とも呼ぶ）とを抽出する。さらに、情報処理装置１は、図３に示す制御構造を参照し、ａが０以外の値であって５以下の値であり、かつ、ｂ＋１が０以下の値である場合に通過するパス条件（以下、パス条件（５）とも呼ぶ）と、ａが０以外の値であって５以下の値であり、かつ、ｂ＋１が０より大きい値である場合に通過するパス条件（以下、パス条件（６）とも呼ぶ）とを抽出する。
【００２４】
なお、図３に示す制御構造において、「ｂｌｏｃｋ１」を通過するパス条件は、ａが０以外の値であって０でもある場合に通過するパス条件である。そのため、情報処理装置１は、このパス条件が実行不可能なパス条件であると判定して抽出を行わない。
【００２５】
［テスト対象プログラムのテストデータ］
図４は、テスト対象プログラム１３１のテストに用いられるテストデータ１３２の具体例を説明する図である。
【００２６】
図４に示す情報は、各パス条件を識別する「項番」と、各パス条件の内容が設定される「パス条件」と、各パス条件を満たすように生成された「テストデータ」とを項目として有する。また、図４に示す情報は、テスト対象プログラム１３１に対するシンボリック実行を行うことによって判明したエラーの内容が設定される「発生エラー」を項目として有する。
【００２７】
具体的に、情報処理装置１は、図４に示すように、「項番」が「１」から「６」である情報における「パス条件」のそれぞれに、パス条件（１）からパス条件（６）の内容に対応する情報を設定する。
【００２８】
また、情報処理装置１は、図４に示すように、各パス条件を満たすテストデータ１３２（各パス条件を通過するテストデータ１３２）を制約ソルバに生成させ、「項番」が「１」から「６」である情報における「テストデータ」のそれぞれに設定する。
【００２９】
さらに具体的に、情報処理装置１は、例えば、図４に示すように、「項番」が「１」である情報の「パス条件」に、ａが０であってｂが０よりも大きい値であることを示す「（ａ＝＝０）∧（ｂ＞０）」を設定する。そして、情報処理装置１は、例えば、「項番」が「２」である情報の「パス条件」に、ａが０であってｂが０以下の値であることを示す「（ａ＝＝０）∧（ｂ＜＝０）」を設定する。
【００３０】
また、情報処理装置１は、例えば、「項番」が「１」である情報の「テストデータ」に、「ａ＝０」及び「ｂ＝１」を設定し、「項番」が「２」である情報の「テストデータ」に、「ａ＝０」及び「ｂ＝０」を設定する。
【００３１】
なお、図２で説明したパス条件（１）は、引数ａが０であるときに通過するパス条件であり、引数ｂの値を０で除算する演算が行われるパス条件である。そのため、情報処理装置１は、例えば、「項番」が「１」である情報（パス条件（１）に対応する情報）の「発生エラー」に、「０除算」を設定する。図４に含まれる他の情報についての説明は省略する。
【００３２】
これにより、情報処理装置１は、ドライバやスタブを用いたシンボリック実行を行うことで、テスト対象プログラム１３１のパス条件を抽出することが可能になる。そして、情報処理装置１は、抽出したパス条件を網羅するテストデータ１３２（例えば、テスト対象プログラム１３１の挙動を確認する単体テストにおいて用いられるテストデータ１３２）を生成することが可能になる。
【００３３】
ここで、上記のようなスタブの挙動は、テスト対象プログラム１３１に対して値を返却する外部プログラムの実際の挙動と大きく異なる場合がある。そのため、例えば、テスト対象プログラム１３１を含む複数のプログラムを組み合わせた業務システム全体としての挙動を確認する結合テストを行う場合、事業者は、テスト対象プログラム１３１に対して値を返却する外部プログラムと可能な限り挙動が近いスタブを生成する必要がある。
【００３４】
しかしながら、上記のような外部プログラムと挙動が近いスタブの生成には、多くの工数を要する場合がある。そのため、事業者は、例えば、シンボリック実行によって結合テストにおいて用いるテストデータ１３２の生成を行う場合、生成するスタブの数を可能な限り抑制することが好ましい。
【００３５】
そこで、本実施の形態における情報処理装置１は、テスト対象プログラム１３１に含まれる変数に対する具体値の入力を伴わないテスト対象プログラム１３１の実行（シンボリック実行）を行う。そして、情報処理装置１は、テスト対象プログラム１３１に含まれる条件節のうち、テスト対象プログラム１３１の実行時において実行されなかった処理を含む条件節を特定する。
【００３６】
その後、情報処理装置１は、特定した条件節の条件式に含まれる関数呼び出しに対応する関数をスタブ（以下、特定のスタブとも呼ぶ）に置き換え、置き換えたテスト対象プログラム１３１を再実行する。
【００３７】
すなわち、情報処理装置１は、導入する必要があるスタブを１つずつ特定する。そして、情報処理装置１は、特定したスタブを導入するごとに、さらなるスタブの導入が必要であるか否かを判定する。その結果、情報処理装置１は、さらなるスタブの導入が必要なくなったと判定した場合、スタブの導入を終了する。
【００３８】
これにより、情報処理装置１は、例えば、テスト対象プログラム１３１を含む複数のプログラムの結合テストを行う場合において、テストデータの生成をシンボリック実行によって行う場合、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置１は、テスト対象プログラム１３１に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。また、情報処理装置１は、導入したスタブの挙動についての妥当性判断に要する工数を抑制することが可能になる。
【００３９】
［情報処理システムのハードウエア構成］
次に、情報処理システム１０のハードウエア構成について説明する。図５は、情報処理装置１のハードウエア構成を説明する図である。
【００４０】
情報処理装置１は、図５に示すように、プロセッサであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００４１】
記憶媒体１０４は、例えば、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。そして、記憶媒体１０４は、記憶媒体１０４内のプログラム格納領域（図示しない）に、テスト対象プログラム１３１に対するスタブの導入等を行う処理（以下、テスト処理とも呼ぶ）を行うためのプログラム１１０（以下、テストプログラム１１０とも呼ぶ）を記憶する。また、記憶媒体１０４は、テスト処理を行う際に用いられる情報を記憶する記憶部１３０（以下、情報格納領域１３０とも呼ぶ）を有する。
【００４２】
ＣＰＵ１０１は、記憶媒体１０４からメモリ１０２にロードされたプログラム１１０と協働することによってテスト処理を行う。
【００４３】
また、外部インターフェース１０３は、操作端末３との通信を行う。
【００４４】
［情報処理システムの機能］
次に、情報処理システム１０の機能について説明する。図６は、情報処理装置１の機能ブロック図である。
【００４５】
情報処理装置１のＣＰＵ１０１は、プログラム１１０と協働することにより、例えば、プログラム実行部１１１と、条件節特定部１１２と、関数特定部１１３と、スタブ生成部１１４と、スタブ置換部１１５と、実行判定部１１６として動作する。
【００４６】
また、情報格納領域１３０には、例えば、テスト対象プログラム１３１と、テストデータ１３２とが記憶されている。
【００４７】
プログラム実行部１１１は、情報格納領域１３０に記憶されたテスト対象プログラム１３１を、変数に具体値を入力することなく実行する。具体的に、プログラム実行部１１１は、テスト対象プログラム１３１に対してシンボル変数によるシンボリック実行を行うことにより、テスト対象プログラム１３１のパス条件を抽出する。そして、プログラム実行部１１１は、抽出したパス条件に対応するテストデータ１３２をそれぞれ生成する。その後、プログラム実行部１１１は、生成したテストデータ１３２を入力としてテスト対象プログラム１３１を実行する。
【００４８】
条件節特定部１１２は、テスト対象プログラム１３１に含まれる条件節のうち、プログラム実行部１１１によるテスト対象プログラム１３１の実行時において実行されなかった処理を含む条件節を特定する。
【００４９】
関数特定部１１３は、条件節特定部１１２が特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定する。
【００５０】
スタブ生成部１１４は、関数特定部１１３が特定した関数と置き換える特定のスタブを生成する。特定のスタブは、例えば、テスト対象プログラム１３１に対して、関数特定部１１３が特定した関数と同じ型のシンボル変数を与えるスタブである。
【００５１】
スタブ置換部１１５は、関数特定部１１３が特定した関数を特定のスタブに置き換える。
【００５２】
その後、プログラム実行部１１１は、スタブ置換部１１５が特定のスタブに置き換えた後のテスト対象プログラム１３１に対してシンボル変数によるシンボリック実行を行うことにより、テスト対象プログラム１３１のパス条件を再抽出する。そして、プログラム実行部１１１は、抽出したパス条件に対応するテストデータ１３２をそれぞれ再生成する。さらに、プログラム実行部１１１は、生成したテストデータ１３２を入力としてテスト対象プログラム１３１を再実行する。
【００５３】
また、実行判定部１１６は、プログラム実行部１１１によるテスト対象プログラム１３１の再実行時において、テスト対象プログラム１３１の条件節に含まれる全ての処理が実行されたか否かを判定する。
【００５４】
［第１の実施の形態の概略のフローチャート図］
次に、第１の実施の形態の概略のフローチャート図について説明を行う。図７は、第１の実施の形態におけるテスト処理の概略を説明するフローチャート図である。図８及び図９は、第１の実施の形態におけるテスト処理の概略を説明する図である。図８及び図９を参照しながら、図７に示すテスト処理の概略について説明を行う。
【００５５】
情報処理装置１は、図８に示すように、テスト対象プログラム１３１の変数に具体値を入力することなくテスト対象プログラム１３１を実行する（Ｓ１）。具体的に、情報処理装置１は、例えば、事業者がテスト処理を開始する旨の情報を情報処理装置１に入力したことに応じて、Ｓ１の処理を開始する。
【００５６】
そして、情報処理装置１は、図８に示すように、テスト対象プログラム１３１に含まれる条件節のうち、Ｓ１の処理におけるテスト対象プログラム１３１の実行時において実行されなかった処理を含む条件節を特定する（Ｓ２）。
【００５７】
続いて、情報処理装置１は、図９に示すように、Ｓ２の処理で特定した条件節の条件式に含まれる関数呼び出しに対応する関数を、特定のスタブに置き換える（Ｓ３）。
【００５８】
その後、情報処理装置１は、図９に示すように、Ｓ３の処理で関数を特定のスタブに置き換えたテスト対象プログラム１３１を再実行する（Ｓ４）。
【００５９】
すなわち、情報処理装置１は、例えば、導入する必要があるスタブを１つずつ特定する。そして、情報処理装置１は、例えば、特定したスタブを導入するごとに、スタブが導入された後のテスト対象プログラム１３１を再度実行することによって、テスト対象プログラム１３１に対してスタブの導入をさらに行う必要であるか否かを判定する。その結果、情報処理装置１は、さらなるスタブの導入が必要ないと判定した場合、スタブの導入を終了する。
【００６０】
これにより、情報処理装置１は、例えば、テスト対象プログラム１３１と外部プログラムとの結合テストを行う場合において、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置１は、テスト対象プログラム１３１に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。
【００６１】
［第１の実施の形態の詳細］
次に、第１の実施の形態の詳細について説明する。図１０から図１２は、第１の実施の形態におけるテスト処理の詳細を説明するフローチャート図である。また、図１３から図２２は、第１の実施の形態におけるテスト処理の詳細を説明する図である。図１３から図２２を参照しながら、図１０から図１２に示すテスト処理の詳細を説明する。
【００６２】
情報処理装置１のプログラム実行部１１１は、図１０に示すように、テスト対象プログラム１３１に対して、シンボル変数を用いたシンボリック実行を行うことにより、テスト対象プログラム１３１が実行される際に通過する１以上のパス条件を抽出する（Ｓ１１）。
【００６３】
続いて、プログラム実行部１１１は、Ｓ１１の処理で特定した１以上のパス条件のそれぞれを満たす１以上のテストデータ１３２を生成する（Ｓ１２）。具体的に、プログラム実行部１１１は、制約ソルバを用いることによって１以上のテストデータ１３２の生成を行う。
【００６４】
そして、プログラム実行部１１１は、Ｓ１２の処理で生成した１以上のテストデータ１３２を入力としてテスト対象プログラム１３１を実行する（Ｓ１３）。
【００６５】
その後、情報処理装置１の条件節特定部１１２は、テスト対象プログラム１３１のソースコードに記述された行のうち、Ｓ１３の処理におけるテスト対象プログラム１３１の実行によって実行されなかった行を含む条件節を特定する（Ｓ１４）。以下、Ｓ１２からＳ１４の処理の具体例について説明を行う。
【００６６】
［Ｓ１２からＳ１４の処理の具体例］
図１３から図１６は、テスト処理の具体例を説明する図である。具体的に、図１３及び図１５は、テスト対象プログラム１３１の具体例を説明する図である。また、図１４及び図１６は、パス条件とテストデータ１３２とが設定された情報の具体例を説明する図である。なお、図１４及び図１６に示す情報は、図４で説明した情報と同様に、「項番」、「パス条件」及び「テストデータ」を項目として有している。
【００６７】
図１３に示すテスト対象プログラム１３１において、「ｉｓＡｄｕｌｔ（ａｇｅ）」は、外部プログラムに含まれる関数であり、「ａｇｅ」の値が２０以上である場合に「ｔｒｕｅ」を返却し、「ａｇｅ」の値が２０未満である場合に「ｆａｌｓｅ」を返却する関数である。また、図１３に示すテスト対象プログラム１３１において、「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」は、外部プログラムに含まれる関数であり、例えば、「ｅｍａｉｌ」に「＠」が含まれる場合に「ｔｒｕｅ」を返却し、「ｅｍａｉｌ」に「＠」が含まれない場合に「ｆａｌｓｅ」を返却する関数である。
【００６８】
そして、図１３に示すテスト対象プログラム１３１では、「ｉｓＡｄｕｌｔ（ａｇｅ）」の戻り値が「ｔｒｕｅ」であって、「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」の戻り値が「ｆａｌｓｅ」である場合に、「ｆｏｏ（）」が実行される。
【００６９】
そのため、プログラム実行部１１１は、図１４に示すように、例えば、「項番」が「１」である情報の「パス条件」に、「ｉｓＡｄｕｌｔ（ａｇｅ）」の戻り値が「ｔｒｕｅ」であって、「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」の戻り値が「ｔｒｕｅ」である場合に通過するパス条件を設定する。また、プログラム実行部１１１は、図１４に示すように、例えば、「項番」が「２」である情報の「パス条件」に、「ｉｓＡｄｕｌｔ（ａｇｅ）」の戻り値が「ｔｒｕｅ」であって、「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」の戻り値が「ｆａｌｓｅ」である場合に通過するパス条件を設定する。さらに、プログラム実行部１１１は、図１４に示すように、例えば、「項番」が「３」である情報の「パス条件」に、「ｉｓＡｄｕｌｔ（ａｇｅ）」の戻り値が「ｆａｌｓｅ」である場合に通過するパス条件を設定する。
【００７０】
ここで、パス条件に非線形な演算（例えば、乗算）や正規表現が含まれている場合、テストデータ１３２の生成を行う制約ソルバは、パス条件に対応するテストデータ１３２の生成を行うことができない場合がある。また、制約ソルバは、テストデータ１３２の生成を行うことができる時間や式のサイズ等によって、パス条件に対応するテストデータ１３２の生成を行うことができない場合がある。
【００７１】
具体的に、図１４に示す例において、「項番」が「１」から「３」である情報の「パス条件」には、それぞれ正規表現が含まれている。そのため、制約ソルバは、図１４に示す例において、「項番」が「１」である情報に対応するテストデータ１３２（「ｅｍａｉｌ」に対応するテストデータ１３２）の生成に失敗している。
【００７２】
したがって、条件節特定部１１２は、この場合、図１３で説明したテスト対象プログラム１３１のうち、「項番」が「１」である情報に対応するテストデータ１３２が生成されないことによって実行されない行である「ｆｏｏ（）」を含む条件節を特定する。
【００７３】
図１１に戻り、Ｓ１４の処理において条件節の特定が行われた場合（Ｓ２１のＹＥＳ）、条件節特定部１１２は、Ｓ１４の処理で特定した条件節のうちの１つを特定する（Ｓ２２）。すなわち、条件節特定部１１２は、Ｓ１４の処理において複数の条件節が特定された場合、特定された複数の条件節のうちのいずれかを特定する。
【００７４】
一方、Ｓ１４の処理において条件節の特定が行われなかった場合（Ｓ２１のＮＯ）、条件節特定部１１２は、テスト処理を終了する。
【００７５】
そして、Ｓ２２の処理の後、情報処理装置１の関数特定部１１３は、Ｓ２２で特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定する（Ｓ２３）。
【００７６】
具体的に、関数特定部１１３は、図１３及び図１４で説明した例において、Ｓ１４の処理で特定した条件節に含まれる条件式として「ｉｆ（ｉｓＥｍａｉｌ（ｅｍａｉｌ））」を特定する。そして、関数特定部１１３は、この場合、特定した条件式に含まれる関数として「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」を特定する。
【００７７】
続いて、関数特定部１１３は、Ｓ２３の処理で特定した関数のうちの１つを特定する（Ｓ２４）。すなわち、条件節特定部１１２は、Ｓ２３の処理において複数の関数が特定された場合、特定された複数の関数のうちのいずれかを特定する。
【００７８】
そして、情報処理装置１のスタブ生成部１１４は、Ｓ２４の処理で特定した関数と置き換えるスタブを生成する（Ｓ２５）。その後、情報処理装置１のスタブ置換部１１５は、テスト対象プログラム１３１に含まれる関数のうち、Ｓ２４の処理で特定した関数を、Ｓ２５の処理で生成したスタブに置き換える（Ｓ２６）。以下、Ｓ２５及びＳ２６の処理の具体例について説明を行う。
【００７９】
［Ｓ２５及びＳ２６の処理の具体例］
図１５は、Ｓ２５及びＳ２６の処理の具体例を説明する図である。
【００８０】
スタブ生成部１１４は、Ｓ２５の処理において、Ｓ２４の処理で特定した関数である「ｉｓＥｍａｉｌ」を、論理型のシンボル変数（以下、論理型のｉｓＥｍａｉｌ（）返却値とも呼ぶ）を返却する関数に変更するスタブを生成する。そして、スタブ置換部１１５は、Ｓ２６の処理において、図１５に示すように、Ｓ２２の処理で特定した条件節の直前に、スタブ生成部１１４が生成したスタブを挿入する。すなわち、スタブ置換部１１５は、正規表現を含まないパス条件が抽出されるように、「ｉｓＥｍａｉｌ」の内容を置き換える。
【００８１】
これにより、情報処理装置１は、制約ソルバがパス条件に対応するテストデータ１３２を生成することができないという状況の発生を防止することが可能になる。そのため、情報処理装置１は、テスト対象プログラム１３１の条件節に含まれる全ての処理（全ての行）が実行されるテストデータ１３２を生成することが可能になる。
【００８２】
図１２に戻り、プログラム実行部１１１は、テスト対象プログラム１３１に対して、シンボル変数を用いたシンボリック実行を再度行うことにより、テスト対象プログラム１３１が実行される際に通過する１以上のパス条件を再抽出する（Ｓ３１）。そして、プログラム実行部１１１は、Ｓ３１の処理で再抽出した１以上のパス条件のそれぞれを満たす１以上のテストデータを再生成する（Ｓ３２）。
【００８３】
具体的に、プログラム実行部１１１は、例えば、図１６に示すように、Ｓ２６の処理においてスタブの置き換えが行われた後のテスト対象プログラム１３１に対してシンボリック実行を行うことにより、スタブの置き換えが行われた後のテスト対象プログラム１３１のパス条件を特定する。そして、プログラム実行部１１１は、特定したパス条件に対応するテストデータ１３２をそれぞれ生成する。
【００８４】
続いて、プログラム実行部１１１は、Ｓ３２の処理で再生成した１以上のテストデータ１３２を入力としてテスト対象プログラム１３１を再実行する（Ｓ３３）。
【００８５】
その後、情報処理装置１の実行判定部１１６は、Ｓ３２の処理で再生成されたテストデータ１３２が、Ｓ２２の処理で特定した条件節に含まれる全ての処理を実行するテストデータ１３２であるか否かを判定する（Ｓ３４）。具体的に、実行判定部１１６は、テスト対象プログラム１３１のソースコードに記述された行のうち、Ｓ２３の処理におけるテスト対象プログラム１３１の再実行によって実行されなかった行を含む条件節が存在するか否かを判定する。
【００８６】
すなわち、Ｓ２２の処理で特定した条件節に含まれる関数の一部のみをスタブに置き換えることによって、Ｓ２２の処理で特定した条件節に含まれる全ての処理を実行するテストデータ１３２が生成されるようになる可能性がある。そのため、実行判定部１１６は、Ｓ３４の処理において、Ｓ２３の処理で特定した関数をスタブに置き換えるごとに、Ｓ２２の処理で特定した条件節に含まれる全ての処理が網羅されるようになったか否かの判定を行う。
【００８７】
その結果、Ｓ２２の処理で特定した条件節に含まれる全ての処理を実行するテストデータ１３２が生成されていないと判定した場合（Ｓ３５のＮＯ）、条件節特定部１１２は、Ｓ２４以降の処理を行う。
【００８８】
一方、Ｓ２２の処理で特定した条件節に含まれる全ての処理を実行するテストデータ１３２が生成されたと判定した場合（Ｓ３５のＹＥＳ）、条件節特定部１１２は、Ｓ１４の処理で特定された全ての条件節が、Ｓ２２の処理において特定済であるか否かの判定を行う（Ｓ３６）。
【００８９】
その結果、Ｓ１４の処理で特定された全ての条件節が特定済でないと判定した場合（Ｓ３６のＮＯ）、条件節特定部１１２は、Ｓ２２以降の処理を行う。
【００９０】
一方、Ｓ１４の処理で特定された全ての条件節が特定済であると判定した場合（Ｓ３６のＹＥＳ）、情報処理装置１は、テスト処理を終了する。
【００９１】
これにより、情報処理装置１は、例えば、テスト対象プログラム１３１を含む複数のプログラムについての結合テストを行う場合において、最低限導入する必要があるスタブのみの導入を行うことが可能になる。そのため、情報処理装置１は、導入する必要があるスタブ（テスト対象プログラム１３１に対して値を返却する外部プログラムと挙動が近いスタブ）の生成に要する工数を抑制することが可能になる。以下、テスト処理の他の具体例について説明を行う。
【００９２】
［テスト処理の具体例（１）］
図１７から図２０は、テスト処理の具体例を説明する図である。具体的に、図１７から図２０は、テスト対象プログラム１３１の具体例を説明する図である。
【００９３】
図１７に示すテスト対象プログラム１３１において、「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）」は、外部プログラムに含まれる関数であり、例えば、「ｗｉｄｔｈ」の値と「ｈｅｉｇｈｔ」の値とを乗算した値を返却する関数（非線形な演算が含まれる関数）である。また、図１７に示すテスト対象プログラム１３１における「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」は、図１３等で説明した「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」と同じ関数である。
【００９４】
そして、図１７に示すテスト対象プログラム１３１では、「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」の戻り値が「ｆａｌｓｅ」であって、「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）」の戻り値が「１００」以上の値である場合、「ｆｏｏ（）」が実行される。
【００９５】
そのため、条件節特定部１１２は、この場合、Ｓ１４の処理において、条件節として「ｉｆ（ｉｓＥｍａｉｌ（ｅｍａｉｌ）＆＆ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」を特定する。
【００９６】
そして、条件節特定部１１２が特定した条件節である「ｉｆ（ｉｓＥｍａｉｌ（ｅｍａｉｌ）＆＆ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」には、関数呼び出しに対応する関数として「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」と「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」とが含まれている。
【００９７】
そのため、関数特定部１１３は、Ｓ２４の処理において、例えば、関数として「ｉｓＥｍａｉｌ（ｅｍａｉｌ）」を特定する。そして、スタブ生成部１１４は、Ｓ２５の処理において、Ｓ２４の処理で特定した関数である「ｉｓＥｍａｉｌ」を、論理型のｉｓＥｍａｉｌ（）返却値（シンボル変数）を返却する関数に変更するスタブを生成する。その後、スタブ置換部１１５は、Ｓ２６の処理において、図１８に示すように、Ｓ２２の処理で特定した条件節の直前に、スタブ生成部１１４が生成したスタブを挿入する。
【００９８】
ここで、Ｓ２２の処理で特定した条件節には、Ｓ２４の処理で特定されていない関数である「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」がさらに含まれている。そして、「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」には、非線形な演算が含まれている。そのため、プログラム実行部１１１は、スタブ置換部１１５が上記のようにスタブの挿入を行った場合であっても、Ｓ２２の処理で特定した条件節に含まれる全ての処理を実行するテストデータ１３２を生成することができない（Ｓ３５のＮＯ）。
【００９９】
したがって、関数特定部１１３は、Ｓ２４の処理において、関数として「ａｒｅａ（ｗｉｄｔｈ，ｈｅｉｇｈｔ）＞＝１００」を特定する。そして、スタブ生成部１１４は、Ｓ２５の処理において、Ｓ２４の処理で特定した関数である「ａｒｅａ」を、整数型のａｒｅａ（）の返却値（シンボル変数）を返却する関数に変更するスタブを生成する。その後、スタブ置換部１１５は、Ｓ２６の処理において、図１９に示すように、Ｓ２２の処理で特定した条件節の直前に、スタブ生成部１１４が生成したスタブをさらに挿入する。
【０１００】
これにより、情報処理装置１は、複数の関数が含まれる条件節が存在する場合であっても、テストデータ１３２を生成することが可能になる。
【０１０１】
なお、スタブ置換部１１５は、「ｉｓＥｍａｉｌ」を変更するスタブを挿入して後続処理を行った後、「ａｒｅａ」を変更するスタブの挿入をさらに行う前に、図２０に示すように、「ｉｓＥｍａｉｌ」を変更するスタブに代えて「ａｒｅａ」を変更するスタブを挿入して後続処理を行うものであってもよい。
【０１０２】
これにより、情報処理装置１は、導入する必要があるスタブの数をより抑制することが可能になる。
【０１０３】
［テスト処理の具体例（２）］
図２１及び図２２は、テスト処理の具体例を説明する図である。具体的に、図２１及び図２２は、テスト対象プログラム１３１の具体例を説明する図である。
【０１０４】
Ｓ１４の処理で特定された条件節には、テスト対象プログラム１３１の実行環境によって実行されない条件節が含まれている場合がある。そのため、情報処理装置１は、例えば、テスト対象プログラム１３１の実行環境に依存することなくテストデータ１３２が生成されるように、必要なスタブの導入を行う。以下、Ｓ１４の処理においてテスト対象プログラム１３１の実行環境によって実行されない条件節が存在する場合の具体例について説明を行う。
【０１０５】
図２１に示すテスト対象プログラム１３１において、「ｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ（“ＡＡＡ”）！＝−１」は、外部プログラムに含まれる関数であり、例えば、テスト対象プログラム１３１の実行環境のブラウザが「ＡＡＡ」である場合に「０」を返却し、テスト対象プログラム１３１の実行環境のブラウザが「ＡＡＡ」でない場合に「−１」を返却する関数である。
【０１０６】
そして、図２１に示すテスト対象プログラム１３１では、「ｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ（“ＡＡＡ”）」が「−１」でない場合、「ｆｏｏ（）」が実行される。
【０１０７】
ここで、例えば、テスト対象プログラム１３１の実行環境が「ＡＡＡ」と異なる実行環境である「ＢＢＢ」である場合、「ｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ（“ＡＡＡ”）」から返却される値は、常に「−１」になる。そのため、この場合、「ｆｏｏ（）」を含む行は、テスト対象プログラム１３１の実行時において常に実行されない行になる。
【０１０８】
そのため、関数特定部１１３は、Ｓ２４の処理において、関数として「ｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ（“ＡＡＡ”）」を特定する。そして、スタブ生成部１１４は、Ｓ２５の処理において、Ｓ２４の処理で特定した関数である「ｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ」を、シンボル変数である整数型のｎａｖｉｇａｔｏｒ．ｕｓｅｒＡｇｅｎｔ．ｉｎｄｅｘＯｆ（）返却値（以下、整数型のｉｎｄｅｘＯｆ（）返却値とも呼ぶ）を返却する関数に変更するスタブを生成する。その後、スタブ置換部１１５は、Ｓ２６の処理において、図２２に示すように、Ｓ２２の処理で特定した条件節の直前に、スタブ生成部１１４が生成したスタブを挿入する。
【０１０９】
これにより、情報処理装置１は、テスト対象プログラム１３１の実行環境に依存することなく、テストデータ１３２を生成することが可能になる。
【０１１０】
このように、本実施の形態における情報処理装置１は、テスト対象プログラム１３１に含まれる変数に具体値を入力することなくテスト対象プログラム１３１を実行する。そして、情報処理装置１は、テスト対象プログラム１３１に含まれる条件節のうち、テスト対象プログラム１３１の実行時において実行されなかった処理を含む条件節を特定する。
【０１１１】
その後、情報処理装置１は、特定した条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、置き換えたテスト対象プログラム１３１を再実行する。
【０１１２】
すなわち、情報処理装置１は、テスト対象プログラム１３１に含まれる各処理を実行するために、最低限用いる必要があるスタブのみを導入する。具体的に、情報処理装置１は、例えば、用いる必要があるスタブを１つずつ特定する。そして、情報処理装置１は、特定したスタブを導入するごとに、さらなるスタブの導入が必要であるか否かを判定する。その結果、情報処理装置１は、さらなるスタブの導入が必要なくなったと判定した場合、スタブの導入を終了する。
【０１１３】
これにより、情報処理装置１は、例えば、テスト対象プログラム１３１と外部プログラムとの結合テストを行う場合において、導入するスタブの数を抑制することが可能になる。そのため、情報処理装置１は、テスト対象プログラム１３１に対して値を返却する外部プログラムと挙動が近いスタブの生成に要する工数を抑制することが可能になる。また、情報処理装置１は、導入したスタブの挙動について行われる妥当性判断に要する工数を抑制することが可能になる。
【０１１４】
以上の実施の形態をまとめると、以下の付記のとおりである。
【０１１５】
（付記１）
コンピュータに、
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
処理を実行させることを特徴とするテストプログラム。
【０１１６】
（付記２）
付記１において、
前記実行する処理では、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する１以上のパス条件を特定し、
特定した前記１以上のパス条件のそれぞれを満たす１以上のテストデータを生成し、
生成した前記１以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記１以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテストプログラム。
【０１１７】
（付記３）
付記２において、
前記特定のスタブは、前記テスト対象のプログラムに対して、前記関数呼び出しに対応する関数と同じ型のシンボル変数を与えるスタブである、
ことを特徴とするテストプログラム。
【０１１８】
（付記４）
付記３において、
前記置き換える処理では、特定した前記条件節が複数存在する場合、特定した前記条件節のうちのいずれかの条件式に含まれる関数呼び出しに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、複数存在した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
複数存在した前記条件節に、実行されていない処理を含む前記条件節が存在すると判定した場合、存在すると判定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
【０１１９】
（付記５）
付記４において、
前記置き換える処理では、特定した前記条件節の条件式に複数の関数呼び出しが含まれている場合、前記複数の関数呼び出しのうちのいずれかに対応する関数を前記特定のスタブに置き換え、さらに、
前記再実行する処理の後、再実行された前記テスト対象のプログラムの実行時において、特定した前記条件節に含まれる全ての処理が実行されたか否かを判定し、
特定した前記条件節に含まれる全ての処理が実行されていないと判定した場合、特定した前記条件節に含まれる全ての処理が実行されるようになるまで、前記置き換える処理、前記再実行する処理及び前記判定する処理を繰り返す、
処理を実行させることを特徴とするテストプログラム。
【０１２０】
（付記６）
付記１において、
前記条件節を特定する処理では、前記テスト対象のプログラムのソースコードに記述された行のうち、前記テスト対象のプログラムの実行時において実行されなかった行を含む条件節を特定する、
ことを特徴とするテストプログラム。
【０１２１】
（付記７）
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行するプログラム実行部と、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する条件節特定部と、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換えるスタブ置換部と、を有し、
前記プログラム実行部は、前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト装置。
【０１２２】
（付記８）
付記７において、
前記プログラム実行部は、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する１以上のパス条件を特定し、
特定した前記１以上のパス条件のそれぞれを満たす１以上のテストデータを生成し、
生成した前記１以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記１以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテスト装置。
【０１２３】
（付記９）
テスト対象のプログラム内の変数に具体値を入力することなく前記テスト対象のプログラムを実行し、
前記テスト対象のプログラムに含まれる条件節のうち、前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定し、
特定した前記条件節の条件式に含まれる関数呼び出しに対応する関数を特定のスタブに置き換え、
前記関数呼び出しに対応する関数を前記特定のスタブに置き換えた前記テスト対象のプログラムを再実行する、
ことを特徴とするテスト方法。
【０１２４】
（付記１０）
付記９において、
前記実行する工程では、
前記テスト対象のプログラムに対してシンボル変数を用いたシンボリック実行を行うことにより、前記テスト対象のプログラムが実行される際に通過する１以上のパス条件を特定し、
特定した前記１以上のパス条件のそれぞれを満たす１以上のテストデータを生成し、
生成した前記１以上のテストデータを入力として前記テスト対象のプログラムを実行し、
前記条件節を特定する処理では、前記テスト対象のプログラムに含まれる条件節のうち、前記１以上のテストデータを入力とした場合における前記テスト対象のプログラムの実行時において実行されなかった処理を含む条件節を特定する、
ことを特徴とするテスト方法。
【符号の説明】
【０１２５】
１：情報処理装置            ３ａ：操作端末
３ｂ：操作端末              ３ｃ：操作端末
１３０：記憶部              １３１：テスト対象プログラム
１３２：テストデータ
【図１】
2019053518.tif 000003
【図２】
2019053518.tif 000004
【図３】
2019053518.tif 000005
【図４】
2019053518.tif 000006
【図５】
2019053518.tif 000007
【図６】
2019053518.tif 000008
【図７】
2019053518.tif 000009
【図８】
2019053518.tif 000010
【図９】
2019053518.tif 000011
【図１０】
2019053518.tif 000012
【図１１】
2019053518.tif 000013
【図１２】
2019053518.tif 000014
【図１３】
2019053518.tif 000015
【図１４】
2019053518.tif 000016
【図１５】
2019053518.tif 000017
【図１６】
2019053518.tif 000018
【図１７】
2019053518.tif 000019
【図１８】
2019053518.tif 000020
【図１９】
2019053518.tif 000021
【図２０】
2019053518.tif 000022
【図２１】
2019053518.tif 000023
【図２２】
2019053518.tif 000024