(57)【要約】【課題】プログラムの変更に伴うテストケース生成作業の負荷の低減を図ること。【解決手段】テストケース生成装置１００は、シンボリック実行結果１０１−１とシンボリック実行結果１０１−２とを取得する。次に、テストケース生成装置１００は、入力変数“ｘ”が取り得る値のうちの、パス条件式１０２−１とパス条件式１０２−２との論理積を真とする値の有無に基づいて、パスｐ２がパスｐ１に関連するか否かを判断する。また、テストケース生成装置１００は、パス出力数式１０３−１と、パス出力数式１０３−２とを比較する。そして、テストケース生成装置１００は、判断結果と比較結果とに基づいて、パスｐ２の動作をテストするテストケースを生成すべきか否かを判定する。【選択図】図１
2014191652.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、
前記入力変数が取り得る値のうちの、取得した前記第１の条件式と取得した前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断し、
取得した前記第１の数式と、取得した前記第２の数式とが一致するか否かを判定し、
判断結果と判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する、
処理を実行することを特徴とするテストケース生成方法。
【請求項２】
前記コンピュータが、
前記第２のパスの動作をテストするテストケースを生成すべきであると判定した場合、前記第２の条件式を真とする前記入力変数の値を算出し、
算出した前記値を前記入力変数の値とする前記第２のパスの動作をテストするテストケースを生成する、
処理を実行することを特徴とする請求項１に記載のテストケース生成方法。
【請求項３】
前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断し、かつ、前記第１の数式と前記第２の数式とが一致すると判定した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定する、処理を実行し、
前記テストケースを生成すべきか否かを判定する処理は、
特定結果に基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定することを特徴とする請求項１または２に記載のテストケース生成方法。
【請求項４】
前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断し、かつ、前記第１の数式と前記第２の数式とが一致すると判定した場合、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定する、処理を実行し、
前記テストケースを生成すべきか否かを判定する処理は、
前記第１の条件式の否定と前記第２の条件式との論理積を真とする値が有ると特定した場合、前記第２のパスの動作をテストするテストケースを生成すべきであると判定し、
前記算出する処理は、
前記第２のパスの動作をテストするテストケースを生成すべきであると判定した場合、前記第１の条件式の否定と前記第２の条件式との論理積を真とする前記入力変数の値を算出することを特徴とする請求項２に記載のテストケース生成方法。
【請求項５】
前記判断する処理は、
前記第１のパスの動作をテストするテストケースの入力値を、前記第２のパスの条件式に与えた場合に前記第２の条件式が真となるか否かに基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断することを特徴とする請求項１〜４のいずれか一つに記載のテストケース生成方法。
【請求項６】
前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定し、
特定結果に基づいて、前記第２のパスが前記第１のプログラムに含まれるパス群のうちの前記第１のパスとは異なるパスに関連しないことを判断する、
処理を実行することを特徴とする請求項１〜５のいずれか一つに記載のテストケース生成方法。
【請求項７】
前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定し、
特定結果に基づいて、前記第２のプログラムに含まれるパス群のうちの前記第２のパスとは異なるパスが前記第１のパスに関連しないことを判断する、
処理を実行することを特徴とする請求項１〜６のいずれか一つに記載のテストケース生成方法。
【請求項８】
第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得する第１取得部と、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得する第２取得部と、
前記入力変数が取り得る値のうちの、前記第１取得部によって取得された前記第１の条件式と前記第２取得部によって取得された前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断するパス関連判断部と、
前記第１取得部によって取得された前記第１の数式と、前記第２取得部によって取得された前記第２の数式とが一致するか否かを判定する数式判定部と、
前記パス関連判断部による判断結果と前記数式判定部による判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する生成判定部と、
を有することを特徴とするテストケース生成装置。
【請求項９】
コンピュータに、
第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、
前記入力変数が取り得る値のうちの、取得した前記第１の条件式と取得した前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断し、
取得した前記第１の数式と、取得した前記第２の数式とが一致するか否かを判定し、
判断結果と判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する、
処理を実行させることを特徴とするテストケース生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケース生成方法、テストケース生成装置、およびテストケース生成プログラムに関する。
【背景技術】
【０００２】
従来、プログラム開発において、テストケースを用いて、プログラムの動作をテストする技術がある。テストケースは、プログラムに与える入力値と、入力値を与えた結果出力される値の期待値とを有する。関連する先行技術として、たとえば、過去に行われたテストケースについての情報を保存しておき、テストケースについての情報と対象プログラムを解析して得られた依存関係を組み合わせることにより、テストを行うリグレッションシステムを構築するものがある。また、分析対象プログラムに定義される全ての変数をカバーするようにシンボル化対象の変数を変化させつつ繰り返しシンボリック実行し、分析対象プログラムのコード網羅率が所定の基準を満たせば、分析対象プログラムのテストが完了したこととする技術がある。（たとえば、下記特許文献１、２を参照。）
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２０４４０５号公報
【特許文献２】特開２０１２−０６８８６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、変更前プログラムの一部が変更された変更後プログラムをテストする際に、変更前プログラムをテストした時に使用されたテストケースをそのまま流用可能か、またはテストケースを新たに生成すべきか、を判定することが難しい。
【０００５】
１つの側面では、本発明は、プログラムの変更に伴うテストケース生成作業の負荷の低減を図るテストケース生成方法、テストケース生成装置、およびテストケース生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、第１のプログラムをシンボリック実行することにより、第１のプログラムに含まれる入力変数が取り得る値のうちの第１のプログラムに含まれる第１のパスが実行される条件となる入力変数の値を表す第１の条件式と、第１のパスが実行された場合に出力される第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、入力変数の取り得る値のうちの第２のプログラムに含まれる第２のパスが実行される条件となる入力変数の値を表す第２の条件式と、第２のパスが実行された場合に出力される第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、入力変数が取り得る値のうちの、取得した第１の条件式と取得した第２の条件式との論理積を真とする値の有無に基づいて、第２のパスが第１のパスに関連するか否かを判断し、取得した第１の数式と、取得した第２の数式とが一致するか否かを判定し、判断結果と判定結果とに基づいて、第２のパスの動作をテストするテストケースを生成すべきか否かを判定するテストケース生成方法、テストケース生成装置、およびテストケース生成プログラムが提案される。
【発明の効果】
【０００７】
本発明の一態様によれば、プログラムの変更に伴うテストケース生成作業の負荷の低減を図ることができるという効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施の形態１におけるテストケース生成装置の動作例を示す説明図である。
【図２】図２は、テストケース生成装置のハードウェアの一例を示すブロック図である。
【図３】図３は、テストケースの実行手順の一例を示す説明図である。
【図４】図４は、変更前後のプログラムとテストケースの関係の一例を示す説明図である。
【図５】図５は、変更前プログラムと変更後プログラムとの一例を示す説明図である。
【図６】図６は、シンボリック実行ドライバのプログラムの一例を示す説明図である。
【図７】図７は、変更前プログラムのシンボリック実行の結果の一例を示す説明図である。
【図８】図８は、変更後プログラムのシンボリック実行の結果の一例を示す説明図である。
【図９】図９は、テストケース生成装置の機能例を示すブロック図である。
【図１０】図１０は、実施の形態１における変更前後のパスを関連付けた結果の一例を示す説明図である。
【図１１】図１１は、パス条件式変更種別の分類例を示す説明図である。
【図１２】図１２は、実施の形態１におけるパス条件式変更種別の分類結果の一例を示す説明図である。
【図１３】図１３は、パス出力数式変更種別の判定ルールの一例を示す説明図である。
【図１４】図１４は、判定ルール２を適用した場合の一例を示す説明図である。
【図１５】図１５は、判定ルール３を適用した場合の一例を示す説明図である。
【図１６】図１６は、判定ルール４を適用した場合の一例を示す説明図である。
【図１７】図１７は、パス出力数式変更判定の分類結果の一例を示す説明図である。
【図１８】図１８は、テストケース分類ルールの一例を示す説明図である。
【図１９】図１９は、テストケース分類結果の一例を示す説明図である。
【図２０】図２０は、変更後プログラムのテストケースの入力値生成の一例を示す説明図である。
【図２１】図２１は、テストケース生成処理手順の一例を示すフローチャートである。
【図２２】図２２は、変更前後パス関連付け処理手順の一例を示すフローチャートである。
【図２３】図２３は、パス条件式変更種別分類処理手順の一例を示すフローチャートである。
【図２４】図２４は、パス出力数式変更種別分類処理手順の一例を示すフローチャートである。
【図２５】図２５は、テストケース分類処理手順の一例を示すフローチャートである。
【図２６】図２６は、変更後プログラムのテストケースの入力値生成処理手順の一例を示すフローチャートである。
【図２７】図２７は、実施の形態２におけるテストケース生成装置の機能例を示すブロック図である。
【図２８】図２８は、実施の形態２における変更前後のパスを関連付けた結果の一例を示す説明図である。
【図２９】図２９は、実施の形態２におけるパス条件式変更種別の分類結果の一例を示す説明図である。
【図３０】図３０は、未生成の変更前後のパス関連付けの作成手順の一例を示す説明図である。
【図３１】図３１は、実施の形態２におけるテストケース生成処理手順の一例を示すフローチャート（その１）である。
【図３２】図３２は、実施の形態２におけるテストケース生成処理手順の一例を示すフローチャート（その２）である。
【図３３】図３３は、テスト入力値による変更前後パス関連付け処理手順の一例を示すフローチャートである。
【図３４】図３４は、未検出の変更前後パス関連付け処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示のテストケース生成方法、テストケース生成装置、およびテストケース生成プログラムの実施の形態を詳細に説明する。
【００１０】
（実施の形態１の説明）
図１は、実施の形態１におけるテストケース生成装置の動作例を示す説明図である。テストケース生成装置１００は、第１のプログラムの一部が変更された第２のプログラムのテストケースを生成すべきか否かを判定するコンピュータである。ここで、プログラムのテストについて説明を行う。また、以下、第１のプログラムを、「変更前プログラム」と呼称する。また、第２のプログラムを、「変更後プログラム」と呼称する。
【００１１】
変更前プログラムがリリースされた後、変更前プログラムが稼働して、変更前プログラムの利用が開始された後、変更前プログラムの機能の変更や追加、あるいは、機能の障害や不具合などに対応するため、変更前プログラムの一部を変更することが行われる。変更前プログラムの一部を変更する場合、変更前プログラムの変更が原因となって、変更前プログラムの一部が変更された変更後プログラム全体において、仕様外の機能障害が発生しないか、および仕様通りに部分変更が実装されたか、を確認することが行われる。機能障害は、デグレード、退行と呼ばれる。
【００１２】
したがって、確認のため、変更前プログラムの部分変更が終了した後、変更後プログラムに対して再度テストが行われる。テストには、テストケースが利用される。テストケースは、テスト対象となるプログラムに与えるテスト入力値と、テスト入力値をプログラムに与えた場合に、プログラムから出力される値の期待値とを有する。テストケースは、プログラムの機能ごとに用意される。
【００１３】
また、具体的な、変更後プログラムのテストの確認内容としては、以下の２つとなる。１つ目の確認内容は、変更後プログラムの機能のうちの変更されていない機能が、プログラム開発者の意図に反して変更されていないことを確認する内容である。１つ目の確認内容を行うテストは、「リグレッションテスト」と呼称される。２つ目の確認内容は、変更後プログラムの機能のうちの変更および追加の機能が、プログラム開発者の意図通り、変更および追加されていることを確認する内容である。
【００１４】
ここで、プログラムの機能ごとのテストケースを１つ目の確認内容に関連するテストケースと、２つ目の確認内容に関連するテストケースとに分類することと、追加された機能に関連するテストケースを生成することとは、手間がかかる。したがって、この２つの作業は、プログラム開発プロジェクトにおいて、テストの工数を増大させる要因となる。
【００１５】
テストケースを分類する技術として、テストケース実行時の実行トレースの動的解析などを利用して、プログラムとテストケースの関係を構築し、構築した関係を利用して、プログラム変更に対応するテストケースを選択するものがある。プログラム変更に対応するテストケースだけを選択して再実行することにより、リグレッションテストの手間を削減することができる。
【００１６】
また、追加された機能に関連するテストケースのテスト入力値を生成する技術として、プログラムや設計書や設計モデルを分析することにより、テスト入力値を生成するものがある。
【００１７】
しかしながら、上述したテストケースを分類する技術は、ある機能を追加するためにプログラムの部分変更を行うと、今回追加した機能のテストケースは、既存のテストケースの中には存在しないため、追加した機能に関連するテストケースを選択することが難しい。また、上述した追加された機能に関連するテストケースのテスト入力値を生成する技術は、あるバージョンのプログラム等を部分変更して次のバージョンを開発すると、変更に起因する変更および追加の部分を対象としたテストケースを特定することが難しい。
【００１８】
そこで、テストケース生成装置１００は、プログラムの一部変更時に、変更前後のパスが実行される条件式が充足可能となるパス同士の出力変数を比較してテストケースを生成すべきか否かを判断する。これにより、テストケース生成装置１００は、プログラムの一部変更に伴うテストケース生成作業の負荷を削減する。
【００１９】
ここで、図１に表示する変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとについて説明する。変更後プログラムＰｏｓｔＰｒｇは、変更前プログラムＰｒｅＰｒｇの一部が変更されたプログラムである。変更前プログラムＰｒｅＰｒｇは、ｉｆ文の条件が真のときに実行する処理を経由するパスｐ１とｅｌｓｅ  ｉｆ文とを経由するパスとの２つのパスがある。ここで、ｐ１を第１のパスとする。また、変更後プログラムＰｏｓｔＰｒｇは、ｉｆ文の条件が真のときに実行する処理を経由するパスｐ２とｅｌｓｅ  ｉｆ文とを経由するパスとの２つのパスがある。ここで、ｐ２を第２のパスとする。また、パスとは、プログラムに含まれる一連の命令文である。一連の命令文が実行されることにより、何らかの機能を実現する可能性がある。
【００２０】
本実施の形態にかかるテストケース生成装置１００は、あるパスが実行される条件となる入力変数の値を表す条件式と、パスが実行された場合に出力されるプログラムに含まれる出力変数を表す数式と、を含むシンボリック実行の実行結果を取得する。シンボリック実行の実行結果を、以下、「シンボリック実行結果」と称する。なお、シンボリック実行を行う装置は、テストケース生成装置１００でもよいし、他の装置であってもよい。
【００２１】
パスが実行される条件となる入力変数の値を表す条件式を、以下、「パス条件式」と呼称する。また、パスが実行された場合に出力されるプログラムに含まれる出力変数を表す数式を、「パス出力数式」と呼称する。入力変数とは、あるプログラムに含まれる変数であり、プログラムパスに与えられる値が格納される変数である。また、出力変数は、あるプログラムに含まれる変数であり、プログラムから出力される値が格納される変数である。図１の変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇでは、入力変数は“ｘ”となり、出力変数は、“ｒｔｎ”となる。本実施の形態では、入力変数と出力変数との数が、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとでそれぞれ一致することを前提とする。
【００２２】
シンボリック実行とは、プログラムＰの変数に具体的な確定値を入力する代わりにシンボル値と呼ばれる記号値を入力して、シンボル値のままプログラムを模擬的に実行し、プログラムの実行結果を評価する技術である。図１に示す変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとは、Ｊａｖａ（登録商標）により記述されているが、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとは、シンボリック実行が行える他の言語で記述されていてもよい。
【００２３】
図１では、テストケース生成装置１００は、パスｐ２をテストするテストケースについて、テストケースを生成すべきか否かを判定する。具体的に、テストケース生成装置１００は、パスｐ１をテストするテストケースをそのまま流用できて、テストケースの生成が不要であるのか、または、流用できず、パスｐ２のテストするテストケースを生成すべきなのかを判定することを行う。
【００２４】
図１の例では、テストケース生成装置１００は、パスｐ１が実行される条件となるパス条件式１０２−１と、パスｐ１が実行された場合に出力されるパス出力数式１０３−１とを含むシンボリック実行結果１０１−１を取得する。さらに、テストケース生成装置１００は、パスｐ２が実行される条件となるパス条件式１０２−２とパスｐ２が実行された場合に出力されるパス出力数式１０３−２とを含むシンボリック実行結果１０１−２を取得する。
【００２５】
次に、テストケース生成装置１００は、入力変数“ｘ”が取り得る値のうちの、パス条件式１０２−１とパス条件式１０２−２との論理積を真とする値の有無に基づいて、パスｐ２がパスｐ１に関連するか否かを判断する。ここで、ある条件式と別の条件式との論理積を真とする値の有無を特定することを、以下、“充足可能性の判定”と呼称する。ある条件式と別の条件式との論理積を真とする値が有る場合、“充足可能”であるとし、ある条件式と別の条件式との論理積を真とする値が無い場合、“充足不可能”であるとする。テストケース生成装置１００は、論理積が充足可能となる場合、パスｐ２がパスｐ１に関連すると判断し、論理積が充足不可能となる場合、パスｐ２がパスｐ１に関連しないと判断する。
【００２６】
グラフ１１０は、入力変数“ｘ”に対して、パス条件式１０２−１とパス条件式１０２−２とが真となる範囲を示す。グラフ１１０が示すように、ｉｎｔ型の入力変数“ｘ”が取り得る値のうちのｘ＜１０の値が与えられる場合、パスｐ１のパス条件式とパスｐ２のパス条件式との論理積が真となる。したがって、パス条件式１０２−１とパス条件式１０２−２との論理積を真とする値があるため、充足可能となり、テストケース生成装置１００は、パスｐ２がパスｐ１に関連すると判断する。
【００２７】
また、テストケース生成装置１００は、パス出力数式１０３−１と、パス出力数式１０３−２とを比較する。具体的な比較方法としては、図１３〜図１６にて後述する。図１の例では、比較結果が一致しなかったことを示すこととする。
【００２８】
テストケース生成装置１００は、判断結果と比較結果とに基づいて、パスｐ２の動作をテストするテストケースを生成すべきか否かを判定する。具体的に、テストケース生成装置１００は、判断結果がパスｐ２がパスｐ１に関連することを示し、かつ、比較結果が一致することを示す場合、パスｐ１の動作をテストするテストケースがそのまま流用できるため、テストケースを生成しなくてよいと判定する。また、テストケース生成装置１００は、判断結果がパスｐ２がパスｐ１に関連することを示し、かつ、比較結果が一致しないことを示す場合、パスｐ１の動作をテストするテストケースがそのまま流用できないため、テストケースを生成すべきであると判定する。
【００２９】
図１の例では、テストケース生成装置１００は、パスｐ２の動作をテストするテストケースを生成すべきであると判定する。以下、図２〜図２６を用いて、実施の形態１にかかるテストケース生成装置１００の説明を行う。
【００３０】
（テストケース生成装置のハードウェア）
図２は、テストケース生成装置のハードウェアの一例を示すブロック図である。図２において、テストケース生成装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、テストケース生成装置１００は、ディスクドライブ２０４と、ディスク２０５と、通信インターフェース２０６と、を含む。また、テストケース生成装置１００は、ディスプレイ２０７と、キーボード２０８と、マウス２０９とを含む。また、ＣＰＵ２０１〜マウス２０９はバス２１０によってそれぞれ接続される。
【００３１】
ＣＰＵ２０１は、テストケース生成装置１００の全体の制御を司る演算処理装置である。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される揮発性メモリである。
【００３２】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ２０４には、たとえば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発性メモリである。たとえばディスクドライブ２０４が磁気ディスクドライブである場合、ディスク２０５には、磁気ディスクを採用することができる。また、ディスクドライブ２０４が光ディスクドライブである場合、ディスク２０５には、光ディスクを採用することができる。また、ディスクドライブ２０４がソリッドステートドライブである場合、ディスク２０５には、半導体素子メモリを採用することができる。
【００３３】
通信インターフェース２０６は、ネットワーク２１１と内部とのインターフェースを司り、外部装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース２０６は、通信回線を通じてネットワーク２１１となるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどに接続され、ネットワーク２１１を介して他の装置に接続される。通信インターフェース２０６には、たとえば、モデムやＬＡＮアダプタなどを採用することができる。
【００３４】
ディスプレイ２０７は、マウスカーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する装置である。ディスプレイ２０７には、たとえば、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３５】
キーボード２０８は、文字、数字、各種指示などの入力のためのキーを有し、データの入力を行う装置である。また、キーボード２０８は、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０９は、マウスカーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う装置である。マウス２０９は、ポインティングデバイスとして同様に機能を有するものであれば、トラックボールやジョイスティックなどであってもよい。次に、図３を用いて、テストケースの実行手順の一例を示す。
【００３６】
図３は、テストケースの実行手順の一例を示す説明図である。テストケースが実行される時に入力されるデータは、テスト対象プログラムＰｒｇ、テスト入力値Ｉｎｖ、および、期待値Ｅｐｖである。テスト入力値Ｉｎｖは、テスト対象プログラムＰｒｇの様々な動作のうち、仕様通りであるか確認したい動作をテスト対象プログラムＰｒｇに実行させる値である。テストケースは、テスト対象プログラムの動作が想定通りか確認したい事柄である。また、様々な確認事項をテストするテストケースを作成して、テストケースらを集合させたものを、「テストスィート」と呼称する。期待値Ｅｐｖは、仕様通りにテスト対象プログラムＰｒｇが動作した場合のテスト対象プログラムＰｒｇの望ましい動作結果であり、たとえば、注目する変数の出力値などである。
【００３７】
テスト対象プログラムＰｒｇは、プログラム実行環境が構築された装置によって実行される。プログラム実行環境が構築された装置は、テストケース生成装置１００でもよいし、他の装置でもよい。図３では、説明の簡略化のため、テストケース生成装置１００がテスト対象プログラムＰｒｇを実行するものとする。
【００３８】
テストケース生成装置１００は、テスト入力値Ｉｎｖをテスト対象プログラムＰｒｇに与えて、プログラム実行結果Ｐｒｓを得る。そして、テストケース生成装置１００は、プログラム実行結果Ｐｒｓと期待値Ｅｐｖとを比較することによりテスト結果判定を行い、テスト結果Ｔｒｓを出力する。具体的に、プログラム実行結果Ｐｒｓと期待値Ｅｐｖとが一致する場合、テスト結果Ｔｒｓは、成功となる。また、プログラム実行結果Ｐｒｓと期待値Ｅｐｖとが一致しない場合、テスト結果Ｔｒｓは、失敗となる。次に、図４を用いてプログラム変更前後でのプログラムとテストケースの関係を説明する。
【００３９】
図４は、変更前後のプログラムとテストケースの関係の一例を示す説明図である。変更前プログラムＰｒｅＰｒｇは、機能ＰｒｅＦ１と、機能ＰｒｅＦ２と、…、機能ＰｒｅＦＭとを含む。また、変更前プログラムＰｒｅＰｒｇが変更された変更後プログラムＰｏｓｔＰｒｇは、機能ＰｏｓｔＦ１と、機能ＰｏｓｔＦ２と、…、機能ＰｏｓｔＦＭと、機能ＰｏｓｔＦＸとを含む。変更後プログラムＰｏｓｔＰｒｇの各機能のうち、機能ＰｏｓｔＦ１は変更されておらず、機能ＰｏｓｔＦ２は変更されており、…、機能ＰｏｓｔＦＭは変更されておらず、機能ＰｏｓｔＦＸは追加された機能である。
【００４０】
また、変更前プログラムＰｒｅＰｒｇのテストスィートＰｒｅＴｓは、テストケース１と、テストケース２と、…、テストケースＮとを有する。テストケース１は、機能ＰｒｅＦ１をテストするテストケースである。テストケース２は、機能ＰｒｅＦ２をテストするテストケースである。テストケースＮは、機能ＰｒｅＦＭをテストするテストケースである。
【００４１】
テストケース生成装置１００は、既存のテストケースとなるテストケース１〜テストケースＮが、変更前プログラムＰｒｅＰｒｇの変更の結果、変更しなくてよいのか、それとも変更すべきであるのかを分類する。また、テストケース生成装置１００は、変更前プログラムＰｒｅＰｒｇの変更の結果、対応するテストケースが既存のテストケースになく、追加された機能があるかを判断する。さらに、テストケース生成装置１００は、追加された機能に対するテストケースを生成する。
【００４２】
具体的に、図４の例では、機能ＰｏｓｔＦ１と、機能ＰｏｓｔＦＭとに対して、テストケース生成装置１００は、テストケース１〜テストケースＮから対応するテストケースを特定する。そして、テストケース生成装置１００は、機能ＰｏｓｔＦ１と、機能ＰｏｓｔＦＭの動作をテストするテストケースとして用いることができると判定する。
【００４３】
また、機能ＰｏｓｔＦ２に対して、テストケース生成装置１００は、テストケース１〜テストケースＮから対応するテストケースを特定する。そして、テストケース生成装置１００は、特定したテストケースを用いて、機能ＰｏｓｔＦ２をテストするテストケースを生成すべきであると判定する。さらに、機能ＰｏｓｔＦＸに対して、テストケース生成装置１００は、テストケースを追加すべきであることを判定する。そして、テストケース生成装置１００は、機能ＰｏｓｔＦＸに対する追加テストケースを生成する。
【００４４】
機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応するテストケースを特定する際には、テストケース生成装置１００は、機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応する機能ＰｒｅＦ１〜機能ＰｒｅＦＭを特定する。機能ＰｒｅＦ１〜機能ＰｒｅＦＭは、テストケース１〜テストケースＮのいずれかに関連付けられている。したがって、機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応する機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸをそれぞれ特定することにより、機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応するテストケースも特定することができる。機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応する機能ＰｒｅＦ１〜機能ＰｒｅＦＭを特定する手順の詳細については、図１０〜図１２にて後述する。
【００４５】
また、機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸに対応する機能ＰｒｅＦ１〜機能ＰｒｅＦＭを特定したのち、機能ＰｏｓｔＦ１〜機能ＰｏｓｔＦＸの動作をテストするテストケースを生成の要否についての手順の詳細は、図１３〜図１９にて後述する。
【００４６】
次に、図５を用いて、本実施の形態における、変更前プログラムＰｒｅＰｒｇの一例と変更後プログラムＰｏｓｔＰｒｇの一例とを説明する。
【００４７】
図５は、変更前プログラムと変更後プログラムとの一例を示す説明図である。図５に示す変更前プログラムＰｒｅＰｒｇのソースコードである変更前ソースコードＰｒｅＰｒｇＳｒｃは、“ＴｅｓｔＴａｒｇｅｔ”クラスの“ｔａｒｇｅｔＦｕｎｃ”メソッドについて規定したものである。変更前ソースコードＰｒｅＰｒｇＳｒｃが示すように、変更前プログラムＰｒｅＰｒｇは、変数「ｘ」を入力値として、変数「ｒｔｎ」を出力結果とする。
【００４８】
また、変更前ソースコードＰｒｅＰｒｇＳｒｃは、ｉｆ文５０１と、ｅｌｓｅ  ｉｆ文５０２と、ｅｌｓｅ文５０３とを有する。そして、変更前ソースコードＰｒｅＰｒｇＳｒｃは、ｉｆ文５０１の条件を満たすと実行される更新文５０４と、ｅｌｓｅ  ｉｆ文５０２の条件を満たすと実行される更新文５０５と、ｅｌｓｅ文５０３に制御が到達した際に実行される更新文５０６とを有する。
【００４９】
また、変更後プログラムＰｏｓｔＰｒｇのソースコードである変更後ソースコードＰｏｓｔＰｒｇＳｒｃは、ｉｆ文５１１と、ｅｌｓｅ  ｉｆ文５１２と、ｅｌｓｅ  ｉｆ文５１３と、ｅｌｓｅ文５１４とを有する。そして、変更後ソースコードＰｏｓｔＰｒｇＳｒｃは、ｉｆ文５１１の条件を満たすと実行される更新文５１５と、ｅｌｓｅ  ｉｆ文５１２の条件を満たすと実行される更新文５１６とを有する。さらに、変更後ソースコードＰｏｓｔＰｒｇＳｒｃは、ｅｌｓｅ  ｉｆ文５１３の条件を満たすと実行される更新文５１７と、ｅｌｓｅ文５１４に制御が到達した際に実行される更新文５１８とを有する。
【００５０】
ｉｆ文５１１は、ｉｆ文５０１の条件式が変更された文である。ｅｌｓｅ  ｉｆ文５１２は、ｅｌｓｅ  ｉｆ文５０２の条件式が変更された文である。ｅｌｓｅ  ｉｆ文５１３は、新たに追加された条件文である。ｅｌｓｅ文５１４は、ｉｆ文５１１〜ｅｌｓｅ  ｉｆ文５１３の変更により、制御が到達する条件がｅｌｓｅ文５０３と比較して変更されている。更新文５１５は、更新文５０４と同一内容である。更新文５１６は、更新文５０５と同一内容である。更新文５１７は、追加された文である。更新文５１８は、更新文５０６と比較して出力結果が変更されている。
【００５１】
次に、変更前プログラムＰｒｅＰｒｇと、変更後プログラムＰｏｓｔＰｒｇとをシンボリック実行するシンボリック実行ドライバのプログラムの一例を示す。
【００５２】
図６は、シンボリック実行ドライバのプログラムの一例を示す説明図である。図６に示すシンボリック実行用ドライバのソースコードＳｙｍＤｒｖＳｒｃは、“ＴｅｓｔＤｒｉｖｅｒ”クラスを規定したものである。ソースコードＳｙｍＤｒｖＳｒｃは、コード群６０１〜コード群６０３を含む。また、図６では、テスト対象プログラムのソースコードＰｒｇＳｒｃを図示する。
【００５３】
コード群６０１は、シンボリック変数を指定したコードである。ここで、シンボリック変数とは、変数ｘを具体的な値ではなくｘという文字として扱う変数のことである。コード群６０２は、出力変数を指定したコードである。コード群６０３は、パス結果の記録対象を指定したコードである。
【００５４】
“ＴｅｓｔＤｒｉｖｅｒ”クラスの“ｔｅｓｔＦｕｎｃ”メソッドが実行されることにより、ソースコードＰｒｇＳｒｃの実行オブジェクトが実行される。次に、図７と図８とを用いて、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとのシンボリック実行の結果について説明する。
【００５５】
図７は、変更前プログラムのシンボリック実行の結果の一例を示す説明図である。テストケース生成装置１００は、変更前プログラムＰｒｅＰｒｇに対してシンボリック実行用ドライバを実行することにより、変更前プログラムのシンボリック実行結果７０１を得る。
【００５６】
シンボリック実行結果７０１は、３つのパスについてのシンボリック実行結果を示す。図７に示すシンボリック実行結果７０１は、レコード７０１−１〜レコード７０１−３を有する。シンボリック実行結果７０１は、パスＩＤと、パス条件式と、パス出力数式という３つのフィールドを有する。パスＩＤは、パスを識別するＩＤである。パス条件式は、該当のパスが実行される条件となる入力変数の値を表す条件式である。パス出力数式は、該当のパスが実行された場合に出力される出力変数を表す数式である。
【００５７】
本実施の形態において、変更前プログラムＰｒｅＰｒｇは、Ｍ個のパスを含むものとする。Ｍは、１以上の整数である。図７に示すシンボリック実行結果７０１は、Ｍ＝３の場合の例を示す。また、ｘを１以上Ｍ以下の整数として、変更前プログラムＰｒｅＰｒｇのパスｘのパス条件式を、“ＰｒｅｘＰＣ”と呼称する。また、変更前プログラムＰｒｅＰｒｇのパスｘのパス出力数式を、“ＰｒｅｘＲ”と呼称する。
【００５８】
図８は、変更後プログラムのシンボリック実行の結果の一例を示す説明図である。テストケース生成装置１００は、変更後プログラムＰｏｓｔＰｒｇに対してシンボリック実行用ドライバを実行することにより、変更後プログラムのシンボリック実行結果８０１を得る。
【００５９】
シンボリック実行結果８０１は、４つのパスについてのシンボリック実行結果を示す。図８に示すシンボリック実行結果８０１は、レコード８０１−１〜レコード８０１−４を有する。
【００６０】
本実施の形態において、変更後プログラムＰｏｓｔＰｒｇは、Ｎ個のパスを含むものとする。Ｎは、１以上の整数である。図８に示すシンボリック実行結果８０１は、Ｎ＝４の場合の例を示す。また、ｘを１以上Ｎ以下の整数として、変更後プログラムＰｏｓｔＰｒｇのパスｘのパス条件式を、“ＰｏｓｔｘＰＣ”と呼称する。また、変更後プログラムＰｏｓｔＰｒｇのパスｘのパス出力数式を、“ＰｏｓｔｘＲ”と呼称する。
【００６１】
（テストケース生成装置１００の機能）
次に、テストケース生成装置１００の機能について説明する。図９は、テストケース生成装置の機能例を示すブロック図である。テストケース生成装置１００は、第１取得部９０１と、第２取得部９０２と、パス関連判断部９０３と、関連情報作成部９０４と、特定部９０５と、数式判定部９０６と、生成判定部９０７と、算出部９０８と、テストケース生成部９０９を含む。制御部となる第１取得部９０１〜テストケース生成部９０９は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、第１取得部９０１〜テストケース生成部９０９の機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。または、通信インターフェース２０６を経由して他のＣＰＵが実行することにより、第１取得部９０１〜テストケース生成部９０９の機能を実現してもよい。
【００６２】
第１取得部９０１は、変更前プログラムＰｒｅＰｒｇをシンボリック実行することにより、変更前プログラムＰｒｅＰｒｇに含まれる第１のパスの第１のパス条件式と、第１のパスの第１のパス出力数式と、を含む第１のシンボリック実行結果を取得する。
【００６３】
また、第１のシンボリック実行結果は、変更前プログラムＰｒｅＰｒｇに含まれるパス群の各々のパスごとの、パス条件式と、パス出力数式とを含んでもよい。なお、取得された第１のシンボリック実行結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００６４】
第２取得部９０２は、変更後プログラムＰｏｓｔＰｒｇをシンボリック実行することにより、変更後プログラムＰｏｓｔＰｒｇに含まれる第２のパスの第２のパス条件式と、第２のパスの第２のパス出力数式と、を含む第２のシンボリック実行結果を取得する。
【００６５】
また、第２のシンボリック実行結果は、変更後プログラムＰｏｓｔＰｒｇに含まれるパス群の各々のパスごとの、パス条件式と、パス出力数式とを含んでもよい。なお、取得された第２のシンボリック実行結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００６６】
パス関連判断部９０３は、入力変数が取り得る値のうちの、第１取得部９０１によって取得された第１のパス条件式と第２取得部９０２によって取得された第２のパス条件式との充足可能性に基づいて、第２のパスが第１のパスに関連するか否かを判断する。
【００６７】
また、パス関連判断部９０３は、第１のシンボリック実行結果に含まれるパスと第２のパスとの組ごとに、前述のパスのパス条件式と第２の条件式との充足可能性に基づいて、第２のパスが第１の実行結果に含まれるパスに関連するか否かを判断してもよい。
【００６８】
また、パス関連判断部９０３は、第１のシンボリック実行結果に含まれるパスと第２のシンボリック実行結果に含まれるパスとの組ごとに、２つのパスの条件式の論理積を真とする値の有無に基づいて、２つのパスが関連するか否かを判断してもよい。なお、判断結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００６９】
関連情報作成部９０４は、パス関連判断部９０３によって第２のパスが第１のシンボリック実行結果に含まれるパスに関連すると判断された場合、第２のパスが第１のシンボリック実行結果に含まれるパスに関連することを示す関連情報を作成する。関連情報の作成については、図１０にて後述する。
【００７０】
また、関連情報作成部９０４は、次の条件を満たすと判断された場合、第２のシンボリック実行結果に含まれるパスが第１のシンボリック実行結果に含まれるパスに関連することを示す関連情報を作成してもよい。次の条件とは、パス関連判断部９０３によって第２のシンボリック実行結果に含まれるパスが第１のシンボリック実行結果に含まれるパスに関連すると判断された場合である。なお、関連情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００７１】
特定部９０５は、パス関連判断部９０３によって第２のパスが第１のパスに関連すると判断した場合、第１のパス条件式と第２のパス条件式の否定との充足可能性を特定するとともに、第１のパス条件式の否定と第２の条件式との充足可能性を特定する。２つの充足可能性の特定については、具体的には、図１１にて説明する。
【００７２】
また、特定部９０５は、関連情報が示す第１の実行結果に含まれる各パスに対応するパス条件式と関連情報が示す第２の実行結果に含まれる各パスに対応するパス条件式の否定との充足可能性を関連情報ごとに特定する。さらに、特定部９０５は、関連情報が示す第１の実行結果に含まれる各パスに対応するパス条件式の否定と関連情報が示す第１の実行結果に含まれる各パスに対応する条件式との充足可能性を関連情報ごとに特定してもよい。なお、特定結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００７３】
数式判定部９０６は、第１取得部９０１によって取得された第１のパス出力数式と、第２取得部９０２によって取得された第２のパス出力数式とが一致するか否かを判定する。具体的な判定の方法としては、図１３〜図１６にて後述する。また、数式判定部９０６は、関連情報作成部９０４によって作成された関連情報が示す第１のパス出力数式と第２のパス出力数式とが一致するか否かを判定してもよい。
【００７４】
また、数式判定部９０６は、第１のシンボリック実行結果に含まれる各パスと第２のパスとの組合せの組ごとに、第１のシンボリック実行結果に含まれるパス出力数式と、第２のパス出力数式とが一致するか否かを判定してもよい。
【００７５】
また、数式判定部９０６は、第１のシンボリック実行結果に含まれるパス出力数式と、取得した第２のシンボリック実行結果に含まれるパス出力数式とが一致するか否かを判定してもよい。数式判定部９０６は、第１のシンボリック実行結果に含まれる各パスと第２のシンボリック実行結果に含まれる各パスとの組合せの組ごとに一致するか否かを判定する。なお、判定結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００７６】
生成判定部９０７は、パス関連判断部９０３による判断結果と数式判定部９０６による判定結果とに基づいて、第２のパスの動作をテストするテストケースを生成すべきか否かを判定する。また、生成判定部９０７は、特定部９０５による特定結果と数式判定部９０６による判定結果とに基づいて、第２のパスの動作をテストするテストケースを生成すべきか否かを判定してもよい。具体的な判定方法は、図１８にて後述する。
【００７７】
また、生成判定部９０７は、次に示す条件を満たす場合、第２のパスの動作をテストするテストケースを生成すべきであると判定してもよい。次に示す条件とは、特定部９０５が第１のパス条件式の否定と第２のパス条件式とが充足可能であると特定し、かつ、数式判定部９０６による判定結果が第１のパス出力数式と第２のパス出力数式とが一致することを示す場合である。
【００７８】
また、生成判定部９０７は、次の情報に基づいて、第２のパスの動作をテストするテストケースを生成すべきか否かを判定してもよい。次の情報とは、関連情報作成部９０４によって作成された関連情報と、数式判定部９０６による第１の実行結果に含まれるパスと第２のパスとの組ごとの判定結果とである。
【００７９】
また、生成判定部９０７は、次に示す情報に基づいて、第２のシンボリック実行結果に含まれる各パスの動作をテストするテストケースを生成すべきか否かを判定してもよい。次に示す情報は、関連情報作成部９０４によって作成された関連情報と、数式判定部９０６による第１のシンボリック実行結果に含まれるパスと第２のシンボリック実行結果に含まれるパスとの組ごとの判定結果とになる。
【００８０】
また、生成判定部９０７は、次に示す情報に基づいて、第２のシンボリック実行結果に含まれる各パスの動作をテストするテストケースを生成すべきか否かを判定してもよい。次に示す情報は、特定部９０５による関連情報ごとの特定結果と、数式判定部９０６による第１のシンボリック実行結果に含まれるパスと第２の実行結果に含まれる各パスとの組ごとの判定結果とになる。なお、判定結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００８１】
算出部９０８は、生成判定部９０７によって第２のパスの動作をテストするテストケースを生成すべきであると判定された場合、第２のパス条件式を真とする入力変数の値を算出する。具体的な算出例は、図２０にて後述する。
【００８２】
また、算出部９０８は、生成判定部９０７によって第２のパスの動作をテストするテストケースを生成すべきであると判定された場合、第１のパス条件式の否定と第２のパス条件式との論理積を真とする値を算出してもよい。なお、算出した値は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【００８３】
テストケース生成部９０９は、算出部９０８によって算出された値を入力変数の値とする第２のパスの動作をテストするテストケースを生成する。なお、生成したテストケースは、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶されてもよいし、ディスプレイ２０７に表示されてもよいし、通信インターフェース２０６を経由して外部装置へ送信されてもよい。
【００８４】
図１０は、実施の形態１における変更前後のパスを関連付けた結果の一例を示す説明図である。テストケース生成装置１００は、シンボリック実行結果７０１と、シンボリック実行結果８０１と、を受け付けて、パス関連付け結果１００１を出力する。具体的に、テストケース生成装置１００は、変更前後プログラムのパス条件式を、それぞれ、ＰｒｅＰＣ、ＰｏｓｔＰＣとすると、下記条件式（１）を作成し、条件式（１）の充足可能性を判定する。
【００８５】
ＰｒｅＰＣ∧ＰｏｓｔＰＣ  …（１）
【００８６】
テストケース生成装置１００は、Ｐｒｅ１ＰＣ〜Ｐｒｅ３ＰＣと、Ｐｏｓｔ１ＰＣ〜Ｐｏｓｔ４ＰＣとの全ての組合せに対して、条件式（１）の充足可能性を判定する。そして、テストケース生成装置１００は、充足可能となったパスの組合せを関連付ける。
【００８７】
条件式の充足可能性の判定は、たとえばＳＭＴ（Ｓａｔｉｓｆｉａｂｉｌｉｔｙ  Ｍｏｄｕｌｏ  Ｔｈｅｏｒｙ）ソルバやＳＡＴ（ＳＡＴｉｓｆｉａｂｉｌｉｔｙ）ソルバなどの制約ソルバが利用される。
【００８８】
図１０の例では、Ｐｒｅ２ＰＣとＰｏｓｔ１ＰＣ、Ｐｒｅ２ＰＣとＰｏｓｔ２ＰＣ、Ｐｒｅ２ＰＣとＰｏｓｔ３ＰＣ、Ｐｒｅ２ＰＣとＰｏｓｔ４ＰＣ、という４つの組合せについての条件式（１）の充足可能性を図示する。Ｐｒｅ２ＰＣ∧Ｐｏｓｔ１ＰＣは、１０≦ｘ＜２０となるｘによって真となるため、条件式（１）が充足可能である。Ｐｒｅ２ＰＣ∧Ｐｏｓｔ２ＰＣは、２０≦ｘ＜３０となるｘによって真となるため、条件式（１）が充足可能である。Ｐｒｅ２ＰＣ∧Ｐｏｓｔ３ＰＣは、３０≦ｘ＜４０となるｘによって真となるため、条件式（１）が充足可能である。Ｐｒｅ２ＰＣ∧Ｐｏｓｔ４ＰＣは、真となるｘが存在しないため、条件式（１）が充足不可能である。
【００８９】
したがって、テストケース生成装置１００は、条件式（１）が充足可能となった、Ｐｒｅ２ＰＣとＰｏｓｔ１ＰＣとを関連付け、Ｐｒｅ２ＰＣとＰｏｓｔ２ＰＣとを関連付け、Ｐｒｅ２ＰＣとＰｏｓｔ３ＰＣとを関連付ける。以下、関連付けた組合せを含む情報を、関連情報とする。関連情報は、パス関連付け結果１００１のレコード１つ分の情報である。
【００９０】
パス関連付け結果１００１は、テストケース組番号と、変更前プログラムのパスＩＤと、変更後プログラムのパスＩＤという３つのフィールドを有する。パス関連付け結果１００１は、レコード１００１−１〜レコード１００１−６を有する。テストケース組番号フィールドには、関連付けられた組合せを一意に特定する番号が格納される。変更前プログラムのパスＩＤフィールドは、関連情報の変更前プログラムのパスＩＤが格納される。変更後プログラムのパスＩＤフィールドは、関連情報の変更後プログラムのパスＩＤが格納される。
【００９１】
以下、関連情報の変更前プログラムのパス条件式を、“ＰｒｅＰＣ＿ＴＣ”と呼称する。同様に、関連情報の変更後プログラムのパス条件式を、“ＰｏｓｔＰＣ＿ＴＣ”と呼称する。また、関連情報の変更前プログラムのパス出力数式を、“ＰｒｅＲ＿ＴＣ”と呼称する。同様に、関連情報の変更後プログラムのパス出力数式を、“ＰｏｓｔＲ＿ＴＣ”と呼称する。
【００９２】
また、本実施の形態において、関連情報は、Ｌ個作成されるものとする。Ｌは、１以上の整数である。図１０に示すパス関連付け結果１００１は、Ｌ＝６の場合の例を示す。
【００９３】
図１１は、パス条件式変更種別の分類例を示す説明図である。テストケース生成装置１００は、図１０により関連付けられた関連情報のそれぞれに対して、パス条件式がどのように変更されたかを示す種別に分類する。具体的に、テストケース生成装置１００は、条件式（２−１）と条件式（２−２）の充足可能性を、制約ソルバを用いて判定する。
【００９４】
ＰｒｅＰＣ＿ＴＣ（ｉ）∧¬ＰｏｓｔＰＣ＿ＴＣ（ｉ）  …（２−１）
¬ＰｒｅＰＣ＿ＴＣ（ｉ）∧ＰｏｓｔＰＣ＿ＴＣ（ｉ）  …（２−２）
【００９５】
ただし、“（ｉ）”は、関連情報のｉ番目の組であることを示す。テストケース生成装置１００は、条件式（２−１）と条件式（２−２）の充足可能性の結果に基づいて、パス条件式変更種別を４つに分類する。
【００９６】
１つ目の分類として、条件式（２−１）と条件式（２−２）が共に充足不可能である場合、ＰｒｅＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る集合とＰｏｓｔＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る集合が一致することを示す。この場合、テストケース生成装置１００は、パス条件式変更種別を“不変”に特定する。特定したパス条件式変更種別は、関連情報に付与される。
【００９７】
２つ目の分類として、条件式（２−１）が充足可能であり、条件式（２−２）が充足不可能である場合、ＰｏｓｔＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る値の集合が、ＰｒｅＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る値の集合に含まれることを示す。この場合、テストケース生成装置１００は、パス条件式変更種別を“縮小”に特定する。特定したパス条件式変更種別は、関連情報に付与される。
【００９８】
３つ目の分類として、条件式（２−１）が充足不可能であり、条件式（２−２）が充足可能である場合、ＰｏｓｔＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る値の集合が、ＰｒｅＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る値の集合を含むことを示す。この場合、テストケース生成装置１００は、パス条件式変更種別を“拡大”に特定する。特定したパス条件式変更種別は、関連情報に付与される。
【００９９】
４つ目の分類として、条件式（２−１）と条件式（２−２）が共に充足可能である場合、ＰｒｅＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る集合とＰｏｓｔＰＣ＿ＴＣ（ｉ）を真とする入力変数が取り得る集合とが一部重なることを示す。この場合、テストケース生成装置１００は、パス条件式変更種別を“重複”に特定する。特定したパス条件式変更種別は、関連情報に付与される。
【０１００】
図１２は、実施の形態１におけるパス条件式変更種別の分類結果の一例を示す説明図である。図１２では、テストケース生成装置１００が、図１１にて示したパス条件式変更種別の分類手順に従って、関連情報のパス条件式変更種別を分類した結果となるパス条件式変更種別結果１２０１を示す。
【０１０１】
パス条件式変更種別結果１２０１は、パス関連付け結果１００１が有するフィールドと、パス条件式変更種別フィールドとを有する。パス条件式変更種別フィールドには、該当の関連情報のパス条件式変更種別が格納される。図１２に示すパス条件式変更種別結果１２０１は、レコード１２０１−１〜レコード１２０１−６を有する。たとえば、レコード１２０１−１は、Ｐｒｅ１とＰｏｓｔ１の関連情報のパス条件式変更種別が、“拡大”であることを示す。
【０１０２】
図１３は、パス出力数式変更種別の判定ルールの一例を示す説明図である。図１３では、パス出力数式変更種別の判定ルールを表１３０１として示す。表１３０１は、ルール番号と、パス出力数式変更種別判定ルールとを有する。パス出力数式変更種別判定ルールを、以下、単に、「判定ルール」と称する。表１３０１は、レコード１３０１−１〜１３０１−４を有する。レコード１３０１−１〜１３０１−４のそれぞれが１つの判定ルールを示す。以下、レコード１３０１−１〜レコード１３０１−４がそれぞれ示す判定ルールを、「判定ルール１」〜「判定ルール４」と呼称する。
【０１０３】
テストケース生成装置１００は、関連情報のＰｒｅＲ＿ＴＣ（ｉ）とＰｏｓｔＲ＿ＴＣ（ｉ）とが、レコード１３０１−１が示す判定ルール１を満たす場合、パス出力数式変更種別を“不変”と判定する。判定したパス出力数式変更種別は、関連情報に付与される。
【０１０４】
一方、テストケース生成装置１００は、ＰｒｅＲ＿ＴＣ（ｉ）とＰｏｓｔＲ＿ＴＣ（ｉ）とが判定ルール１を満たさない場合、判定ルール２〜判定ルール４のいずれかを適用する。適用手順の第１の例として、テストケース生成装置１００は、判定ルール２を適用して、判定ルール２による判定結果を出力する。また、適用手順の第２の例として、テストケース生成装置１００は、適用手順の第１の例に従って判定ルール２を適用して、判定ルール２による判定結果が“判定不能”となった場合、判定ルール３を適用し、判定ルール３による判定結果を出力してもよい。さらに、適用手順の第３の例として、テストケース生成装置１００は、適用手順の第２の例に従って、判定ルール３を適用して、判定ルール３による判定結果が“判定不能”となった場合、判定ルール４を適用し、判定ルール４による判定結果を出力してもよい。
【０１０５】
判定ルール１は、ＰｒｅＲ＿ＴＣ（ｉ）とＰｏｓｔＲ＿ＴＣ（ｉ）とを、文字列として比較し、一致した場合、パス出力数式変更種別を“不変”と判断するルールである。文字列として比較する場合に、テストケース生成装置１００は、ＰｒｅＲ＿ＴＣ（ｉ）の文字列と、ＰｏｓｔＲ＿ＴＣ（ｉ）の文字列をそのまま比較してもよいし、スペースやタブを除いて比較してもよい。
【０１０６】
判定ルール２については、図１４にて説明する。判定ルール３のパス出力数式変更種別判定ルールについては、図１５にて説明する。判定ルール４のパス出力数式変更種別判定ルールについては、図１６にて説明する。
【０１０７】
図１４は、判定ルール２を適用した場合の一例を示す説明図である。判定ルール２は、下記条件式（３−１）、下記条件式（３−２）、下記条件式（３−３）の充足可能性を判定した結果を用いて、パス出力数式変更種別を判定するルールである。
【０１０８】
（Ｒ＝ＰｒｅＲ＿ＴＣ（ｉ））∧（Ｒ＝ＰｏｓｔＲ＿ＴＣ（ｉ））  …（３−１）
¬（Ｒ＝ＰｒｅＲ＿ＴＣ（ｉ））∧（Ｒ＝ＰｏｓｔＲ＿ＴＣ（ｉ））  …（３−２）
（Ｒ＝ＰｒｅＲ＿ＴＣ（ｉ））∧¬（Ｒ＝ＰｏｓｔＲ＿ＴＣ（ｉ））  …（３−３）
【０１０９】
具体的に、判定ルール２を適用した場合、テストケース生成装置１００は、条件式（３−１）、条件式（３−２）、条件式（３−３）の順に、充足可能、充足不可能、充足不可能となる場合、パス出力数式変更種別を“不変”と判定する。また、条件式（３−１）、条件式（３−２）、条件式（３−３）の順に、充足可能、充足不可能、充足不可能の順とならない場合、テストケース生成装置１００は、パス出力数式変更種別を“変更”と判定する。さらに、制約ソルバが充足可能性を判定できない場合、テストケース生成装置１００は、パス出力数式変更種別を“判定不能”と判定する。判定したパス出力数式変更種別は、関連情報に付与される。
【０１１０】
表１４０１は、判定ルール２を適用しようとする関連情報ＴＣ１〜ＴＣ３について表示する。表１４０１は、レコード１４０１−１〜レコード１４０１−３を有する。関連情報ＴＣ１〜ＴＣ３に対して、判定ルール２を適用した際の判定結果が表１４０２である。表１４０２は、レコード１４０２−１〜レコード１４０２−３を有する。たとえば、レコード１４０２−１は、条件式（３−１）、条件式（３−２）、条件式（３−３）の順に、充足可能、充足不可能、充足不可能となったため、判定結果が“不変”であると判定されたことを示す。
【０１１１】
また、レコード１４０２−２とレコード１４０２−３は、制約ソルバが、条件式（３−１）、条件式（３−２）、条件式（３−３）の充足可能性を判定不能であったため、判断結果が“判定不能”であると判定されたことを示す。なお、制約ソルバが判定不能となる場合として、たとえば、条件式に、非線形の関数が含まれる場合である。
【０１１２】
図１５は、判定ルール３を適用した場合の一例を示す説明図である。判定ルール３は、交換法則、分配法則などを利用してパス出力数式変更種別を判定するルールである。具体的に、判定ルール３を適用した場合、テストケース生成装置１００は、ＰｒｅＲ＿ＴＣ（ｉ）とＰｏｓｔＲ＿ＴＣ（ｉ）を展開し、変数のアルファベット順に並べた式とした後、文字列として比較し、一致した場合、パス出力数式変更種別を“不変”と判定する。一方、一致しない場合、テストケース生成装置１００は、パス出力数式変更種別を“変更”と判定する。また、交換法則、分配法則などが利用できない場合、テストケース生成装置１００は、パス出力数式変更種別を“判定不能”と判定する。また、交換法則と分配法則以外として、テストケース生成装置１００は、結合法則を利用してもよい。
【０１１３】
表１４０１は、判定ルール３を適用しようとする関連情報ＴＣ１〜ＴＣ３について表示する。関連情報ＴＣ１〜ＴＣ３に対して、判定ルール３を適用した際の判定結果が表１５０１である。表１５０１は、レコード１５０１−１〜レコード１５０１−３を有する。
【０１１４】
たとえば、レコード１５０１−１は、交換法則をＰｒｅＲ＿ＴＣとＰｏｓｔＲ＿ＴＣとに適用した結果の文字列が共に“ｘ＋２＊ｙ”となり、パス出力数式変更種別が“不変”であると判定されたことを示す。また、レコード１５０１−２は、分配法則と交換法則とをＰｒｅＲ＿ＴＣとＰｏｓｔＲ＿ＴＣとに適用した結果の文字列が共に“ｆ（ｘ）＊ｚ（ｘ，ｙ）＋ｇ（ｙ）＊ｚ（ｘ，ｙ）”となり、パス出力数式変更種別が“不変”であると判定されたことを示す。一方、レコード１５０１−３は、分配法則と交換法則とがＰｒｅＲ＿ＴＣとＰｏｓｔＲ＿ＴＣとに適用できず、パス出力数式変更種別が“判定不能”であると判定されたことを示す。
【０１１５】
図１６は、判定ルール４を適用した場合の一例を示す説明図である。判定ルール４は、パス条件式が真となる入力値を用いて、パス出力数式変更種別を判定するルールである。具体的に、判定ルール４を適用した場合、テストケース生成装置１００は、ＰｒｅＰＣ＿ＴＣ（ｉ）と、ＰｏｓｔＰＣ＿ＴＣ（ｉ）とが真となる入力値を指定数個生成する。図１６の例では、指定数を、２とする。そして、テストケース生成装置１００は、生成した入力値全てに対して、ＰｒｅＲ＿ＴＣ（ｉ）の値と、ＰｏｓｔＲ＿ＴＣ（ｉ）の値とが一致した場合、パス出力数式変更種別を“不変”と判定する。また、一致しない場合、テストケース生成装置１００は、パス出力数式変更種別を“変更”と判定する。
【０１１６】
表１６０１は、判定ルール４を適用しようとする関連情報ＴＣ３、ＴＣ４について表示する。表１６０１は、レコード１６０１−１、レコード１６０１−２を有する。関連情報ＴＣ３、ＴＣ４に対して、判定ルール４を適用した際の判定結果が表１６０２である。表１６０２は、レコード１６０２−１、レコード１６０２−２を有する。
【０１１７】
たとえば、レコード１６０２−１は、ＰｒｅＲ＿ＴＣとＰｏｓｔＲ＿ＴＣのそれぞれに入力値ｘ＝Ｘ１、ｙ＝Ｙ１を入力した結果が一致し、入力値ｘ＝Ｘ２、ｙ＝Ｙ２を入力した結果が一致して、判定結果が“不変”であると判定されたことを示す。また、レコード１６０２−２は、ＰｒｅＲ＿ＴＣとＰｏｓｔＲ＿ＴＣのそれぞれに入力値ｘ＝Ｘ３、ｙ＝Ｙ３を入力した結果が一致しないため、判定結果が“変更”であると判定されたことを示す。
【０１１８】
図１７は、パス出力数式変更判定の分類結果の一例を示す説明図である。図１７では、テストケース生成装置１００が、図１３〜図１６にて示したパス出力数式変更種別の分類手順に従って、関連情報のパス出力数式変更種別を分類した結果となるパス出力数式変更種別結果１７０１を示す。
【０１１９】
パス出力数式変更種別結果１７０１は、パス関連付け結果１００１が有するフィールドと、パス出力数式変更種別フィールドとを有する。パス出力数式変更種別フィールドには、該当の関連情報のパス出力数式変更種別が格納される。図１７に示すパス出力数式変更種別結果１７０１は、レコード１７０１−１〜レコード１７０１−６を有する。たとえば、レコード１７０１−１は、Ｐｒｅ１とＰｏｓｔ１の関連情報のパス出力数式変更種別が、“不変”であることを示す。
【０１２０】
図１８は、テストケース分類ルールの一例を示す説明図である。図１８に示すテストケース分類ルールテーブル１８０１は、パス条件式変更種別とパス出力数式変更種別とに応じて、テストケース種別の分類ルールを示す。テストケース種別は、テストケースを生成すべきか否かを示す。さらに、テストケース種別は、テストケースを生成すべき際に新たな機能に対するテストケースである可能性があるか否かを示す。テストケース分類ルールを、以下、単に、「分類ルール」と呼称する。テストケース分類ルールテーブル１８０１は、レコード１８０１−１〜レコード１８０１−１３を有する。
【０１２１】
テストケース分類ルールテーブル１８０１は、分類ルール、パス条件式変更種別、パス出力数式変更種別、テストケースパス条件式、テストケース種別という５つのフィールドを含む。分類ルールフィールドには、分類ルールを識別する番号が格納される。以下、レコード１８０１−１〜レコード１８０１−１３がそれぞれ示す分類ルールを、「分類ルール１」〜「分類ルール９」と呼称する。
【０１２２】
パス条件式変更種別フィールドには、該当の分類ルールが適用される条件の１つとなるパス条件式変更種別が格納される。パス出力数式変更種別フィールドには、該当の分類ルールが適用される条件の１つとなるパス出力数式変更種別が格納される。テストケースパス条件式フィールドには、該当の分類ルールが適用された場合のテストケースの入力値が満たす条件式が格納される。テストケース種別フィールドには、該当の分類ルールが適用された場合のテストケースの変更要否種別が格納される。テストケース種別は、“不変”と、“回帰”と、“変更”と、“追加”と、“確認”がある。
【０１２３】
“不変”と“回帰”とは、変更後プログラムＰｏｓｔＰｒｇのパスの機能が、変更前プログラムＰｒｅＰｒｇのパスの機能から変更されておらず、変更前プログラムＰｒｅＰｒｇのパスをテストするテストケースを生成しなくてよいことを示す。また、“回帰”は、変更後プログラムＰｏｓｔＰｒｇのパス条件式が、変更前プログラムＰｒｅＰｒｇのパス条件式から変更されており、該当のテストケースが、変更後プログラムＰｏｓｔＰｒｇの動作を確認するテストケースとして実行された方がよいことも示す。
【０１２４】
“変更”と“追加”とは、変更後プログラムＰｏｓｔＰｒｇのパスの機能が、変更前プログラムＰｒｅＰｒｇのパスの機能から変更されており、変更後プログラムＰｏｓｔＰｒｇのパスをテストするテストケースを生成すべきであることを示す。さらに、“追加”は、変更後プログラムＰｏｓｔＰｒｇのパスの機能が新しい機能である可能性も示す。
【０１２５】
“確認”は、変更後プログラムＰｏｓｔＰｒｇのパスの機能が、変更前プログラムＰｒｅＰｒｇのパスの機能から変更されたか否かを判断できず、変更後プログラムＰｏｓｔＰｒｇのパスをテストするテストケースを生成すべきか否か判断できないことを示す。テストケース生成装置１００の利用者は、テストケース種別が“確認”となったテストケースに対して、たとえば、該当のパスの処理内容の確認を行う。
【０１２６】
レコード１８０１−１は、パス条件式変更種別が“不変”であり、パス出力数式変更種別が“不変”である関連情報についての分類ルールである分類ルール１について示す。分類ルール１の条件が満たされた関連情報は、テストケース種別が“不変”となり、テストケースパス条件式がＰｏｓｔＰＣ＿ＴＣとなることを示す。
【０１２７】
レコード１８０１−２は、パス条件式変更種別が“不変”であり、パス出力数式変更種別が“変更”である関連情報についての分類ルールである分類ルール２について示す。分類ルール２の条件が満たされた関連情報は、テストケース種別が“変更”となり、テストケースパス条件式がＰｏｓｔＰＣ＿ＴＣとなることを示す。
【０１２８】
レコード１８０１−３は、パス条件式変更種別が“縮小”であり、パス出力数式変更種別が“不変”である関連情報についての分類ルールである分類ルール３について示す。分類ルール３の条件が満たされた関連情報は、テストケース種別が“回帰”となり、テストケースパス条件式がＰｏｓｔＰＣ＿ＴＣとなることを示す。
【０１２９】
レコード１８０１−４は、パス条件式変更種別が“縮小”であり、パス出力数式変更種別が“変更”である関連情報についての分類ルールである分類ルール４について示す。分類ルール４の条件が満たされた関連情報は、テストケース種別が“追加”となり、テストケースパス条件式がＰｏｓｔＰＣ＿ＴＣとなることを示す。テストケース種別を“追加”とする根拠として、パス条件式変更種別が“縮小”であり、機能が変更しているということは、新しい機能を提供するために、パス条件式を細分化して、新しい機能となるソースコードを記述した可能性が高いからである。
【０１３０】
レコード１８０１−５とレコード１８０１−６とは、パス条件式変更種別が“拡大”であり、パス出力数式変更種別が“不変”である関連情報についての分類ルールである分類ルール５について示す。分類ルール５の条件が満たされた関連情報は、テストケースパス条件式に応じて２つに分割することになる。分類ルール５の条件が満たされた関連情報のうちのテストケースパス条件式ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“回帰”となることを示す。
【０１３１】
一方、分類ルール５の条件が満たされた関連情報のうちのテストケースパス条件式¬ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“追加”となる。テストケース種別を“追加”とする根拠として、パス条件式変更種別が“拡大”であるということは、新しい入力値に対応するために、パス条件式を拡大した可能性が高いからである。
【０１３２】
レコード１８０１−７とレコード１８０１−８とは、パス条件式変更種別が“拡大”であり、パス出力数式変更種別が“変更”である関連情報についての分類ルールである分類ルール６について示す。分類ルール６の条件が満たされた関連情報は、テストケースパス条件式に応じて２つに分割することになる。分類ルール６の条件が満たされた関連情報のうちのテストケースパス条件式ｐｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“変更”となる。一方、分類ルール６の条件が満たされた関連情報のうちのテストケースパス条件式¬ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“変更”となる。
【０１３３】
レコード１８０１−９とレコード１８０１−１０とは、パス条件式変更種別が“重複”であり、パス出力数式変更種別が“不変”である関連情報についての分類ルールである分類ルール７について示す。分類ルール７の条件が満たされた関連情報は、テストケースパス条件式に応じて２つに分割することになる。分類ルール７の条件が満たされた関連情報のうちのテストケースパス条件式ｐｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“回帰”となることを示す。
【０１３４】
一方、分類ルール７の条件が満たされた関連情報のうちのテストケースパス条件式¬ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“追加”となる。テストケース種別を“追加”とする根拠として、パス条件式変更種別が“重複”であるということは、パス条件式を縮小した箇所と拡大した箇所があることになり、新しい入力値に対応するために、パス条件式を拡大した可能性が高いからである。
【０１３５】
レコード１８０１−１１とレコード１８０１−１２とは、パス条件式変更種別が“重複”であり、パス出力数式変更種別が“変更”である関連情報についての分類ルールである分類ルール８について示す。分類ルール８の条件が満たされた関連情報は、テストケースパス条件式に応じて２つに分割することになる。分類ルール８の条件が満たされた関連情報のうちのテストケースパス条件式ｐｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“変更”となる。一方、分類ルール８の条件が満たされた関連情報のうちのテストケースパス条件式¬ｐｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣを満たす関連情報のテストケース種別は、“変更”となる。
【０１３６】
レコード１８０１−１３は、パス出力数式変更種別が“判定不能”である関連情報についての分類ルールである分類ルール９について示す。分類ルール９の条件が満たされた関連情報は、テストケース種別が“確認”となり、テストケースパス条件式がＰｏｓｔＰＣ＿ＴＣとなることを示す。
【０１３７】
図１９は、テストケース分類結果の一例を示す説明図である。図１９では、図１８にて示したテストケース分類ルールに従って、テストケース生成要否を分類した結果となる結果を示す。
【０１３８】
図１９に示す表１９０１は、パス条件式変更種別結果１２０１が有するフィールドと、パス出力数式変更種別フィールドとを有する。テストケース生成装置１００は、表１９０１から、テストケース生成要否分類結果１９０２を出力する。テストケース生成要否分類結果１９０２は、レコード１９０２−１〜レコード１９０２−１０を有する。たとえば、レコード１９０２−１は、Ｐｒｅ１とＰｏｓｔ１の関連情報のテストケースパス条件式が、ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣであり、テストケース種別が“回帰”であることを示す。
【０１３９】
図２０は、変更後プログラムのテストケースの入力値生成の一例を示す説明図である。図２０では、図１９にて得たテストケース生成要否分類結果１９０２から、変更後プログラムＰｏｓｔＰｒｇのテストケースの入力値を生成する例を示す。具体的に、図２０では、テストケース生成要否分類結果１９０２のうちの、利用者が指定したテストケース種別が“追加”となったレコード１９０２−２とレコード１９０２−６とについてのテストケースの入力値を生成する。
【０１４０】
テストケース生成装置１００は、テストケースパス条件式を満たす値を、制約ソルバを利用して算出する。算出した結果を、表２００１として示す。表２００１は、レコード２００１−１とレコード２００１−２を有する。
【０１４１】
表２００１は、テストケース組番号と、テストケース種別と、テストケースパス条件式と、テスト入力値の条件式と、テスト入力値という５つのフィールドを有する。テストケース組番号と、テストケース種別と、テストケースパス条件式とは、テストケース生成要否分類結果１９０２の同名のフィールドと同じである。テスト入力値の条件式フィールドには、テストケースパス条件式から得られるテスト入力値の条件式が格納される。テスト入力値フィールドには、算出した値が格納される。
【０１４２】
テストケース生成装置１００は、入力値として算出した値を設定したテストケースを、変更後プログラムＰｏｓｔＰｒｇのテストケースとして生成する。なお、テストケースの期待値に関しては、テストケース生成装置１００の利用者等により設定される。
【０１４３】
次に、図２１〜図２６を用いて、テストケース生成装置１００が実行するフローチャートの説明を行う。
【０１４４】
図２１は、テストケース生成処理手順の一例を示すフローチャートである。テストケース生成処理は、変更後プログラムＰｏｓｔＰｒｇに対するテストケースを生成する処理である。テストケース生成装置１００は、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとのシンボリック実行結果を取得する（ステップＳ２１０１）。次に、テストケース生成装置１００は、変更前後パス関連付け処理を実行する（ステップＳ２１０２）。変更前後パス関連付け処理の詳細は、図２２にて後述する。なお、変更前後パス関連付け処理によって、Ｌ個の関連情報が生成されたものとする。
【０１４５】
続けて、テストケース生成装置１００は、１をｉに代入する（ステップＳ２１０３）。次に、テストケース生成装置１００は、ｉ番目の関連情報に対して、パス条件式変更種別分類処理を実行する（ステップＳ２１０４）。パス条件式変更種別分類処理の詳細は、図２３にて説明する。続けて、テストケース生成装置１００は、ｉ番目の関連情報に対して、パス出力数式変更種別分類処理を実行する（ステップＳ２１０５）。パス出力数式変更種別分類処理の詳細は、図２４にて説明する。
【０１４６】
なお、ステップＳ２１０４の処理と、ステップＳ２１０５の処理には依存関係がないことから、テストケース生成装置１００は、ステップＳ２１０４の処理とステップＳ２１０５の処理とを並列に実行してもよい。また、ステップＳ２１０５の処理は、関連情報に対してでなく、変更前後のパスの全ての組合せに対して行ってもよい。
【０１４７】
次に、テストケース生成装置１００は、ｉ番目の関連情報に対して、テストケース分類処理を実行する（ステップＳ２１０６）。テストケース分類処理の詳細は、図２５にて後述する。なお、ステップ２１０６の処理について、ステップＳ２１０５の処理において、パス出力数式変更種別が“変更”となった場合、図１８を参照すると、テストケース種別は、テストケースを生成すべきことを示す“変更”か“追加”となる。
【０１４８】
したがって、利用者がテストケースを生成すべきか否かを知りたい場合、テストケース生成装置１００は、関連情報に対して、ステップＳ２１０４の処理を行わず、ステップＳ２１０５の処理を行ってもよい。そして、テストケース生成装置１００は、パス出力数式変更種別が“不変”となった場合に、ステップＳ２１０４の処理を行ってもよい。ステップＳ２１０４の結果が “拡大”または“重複”である場合、テストケース生成装置１００は、¬ＰｒｅＰＣ＿ＴＣ∧ＰｏｓｔＰＣ＿ＴＣとなるテストケースパス条件式において、テストケース種別を“変更”か“追加”と判定する。
【０１４９】
続けて、テストケース生成装置１００は、ｉ＋１をｉに代入する（ステップＳ２１０７）。次に、テストケース生成装置１００は、ｉがＬより大きいか否かを判断する（ステップＳ２１０８）。ｉがＬ以下である場合（ステップＳ２１０８：Ｎｏ）、テストケース生成装置１００は、ステップＳ２１０４の処理に移行する。ｉがＬより大きい場合（ステップＳ２１０８：Ｙｅｓ）、テストケース生成装置１００は、テストケース分類結果を出力する（ステップＳ２１０９）。出力先として、テストケース生成装置１００は、テストケース分類結果をＲＡＭ２０３、ディスク２０５等の記憶装置に格納してもよいし、テストケース分類結果をディスプレイ２０７に表示してもよい。
【０１５０】
次に、テストケース生成装置１００は、変更後プログラムのテストケースの入力値生成処理を実行する（ステップＳ２１１０）。変更後プログラムのテストケースの入力値生成処理の詳細は、図２６にて後述する。続けて、テストケース生成装置１００は、テスト入力値を生成したテストケースを出力する（ステップＳ２１１１）。
【０１５１】
ステップＳ２１１１の処理終了後、テストケース生成装置１００は、テストケース生成処理を終了する。テストケース生成処理を実行することにより、テストケース生成装置１００は、変更後プログラムＰｏｓｔＰｒｇの動作をテストするテストケースを生成することができる。
【０１５２】
図２２は、変更前後パス関連付け処理手順の一例を示すフローチャートである。変更前後パス関連付け処理は、変更前プログラムＰｒｅＰｒｇの各パスと変更後プログラムＰｏｓｔＰｒｇの各パスとのうち、関連するパス同士を検出して関連情報を作成する処理である。また、図２２では、変更前プログラムＰｒｅＰｒｇのｉ番目のパスをＰｒｅ（ｉ）と表現し、ｉ番目のパスの条件式をＰｒｅＰＣ（ｉ）と表現する。同様に、変更後プログラムＰｏｓｔＰｒｇのｊ番目のパスをＰｏｓｔ（ｊ）と表現し、ｊ番目のパスの条件式を、ＰｏｓｔＰＣ（ｊ）と表現する。
【０１５３】
テストケース生成装置１００は、ｉに１を代入し、ｊに１を代入する（ステップＳ２２０１）。次に、テストケース生成装置１００は、ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｊ）が充足可能か否かを判断する（ステップＳ２２０２）。ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｊ）が充足可能である場合（ステップＳ２２０２：Ｙｅｓ）、テストケース生成装置１００は、Ｐｒｅ（ｉ）とＰｏｓｔ（ｊ）とをテストケース組とする関連情報を作成する（ステップＳ２２０３）。ステップＳ２２０３の処理終了後、または、ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｊ）が充足不可能である場合（ステップＳ２２０２：Ｎｏ）、テストケース生成装置１００は、ｊ＋１をｊに代入する（ステップＳ２２０４）。
【０１５４】
続けて、テストケース生成装置１００は、ｊがＮより大きいか否かを判断する（ステップＳ２２０５）。ｊがＮ以下である場合（ステップＳ２２０５：Ｎｏ）、テストケース生成装置１００は、ステップＳ２２０２の処理に移行する。ｊがＮより大きい場合（ステップＳ２２０５：Ｙｅｓ）、テストケース生成装置１００は、ｉ＋１をｉに代入し、１をｊに代入する（ステップＳ２２０６）。
【０１５５】
続けて、テストケース生成装置１００は、ｉがＭより大きいか否かを判断する（ステップＳ２２０７）。ｉがＭ以下である場合（ステップＳ２２０７：Ｎｏ）、テストケース生成装置１００は、ステップＳ２２０２の処理に移行する。ｉがＭより大きい場合（ステップＳ２２０７：Ｙｅｓ）、テストケース生成装置１００は、作成した関連情報を出力する（ステップＳ２２０８）。ステップＳ２２０８の処理終了後、テストケース生成装置１００は、変更前後パス関連付け処理を終了する。変更前後パス関連付け処理を実行することにより、テストケース生成装置１００は、関連するパス同士を検出して関連情報を作成することができる。
【０１５６】
図２３は、パス条件式変更種別分類処理手順の一例を示すフローチャートである。パス条件式変更種別分類処理は、関連情報のパス条件式変更種別を分類する処理である。図２３では、ｉ番目の関連情報が示す変更前プログラムＰｒｅＰｒｇのパス条件式をＰｒｅＰＣ＿ＴＣ（ｉ）と表現する。また、ｉ番目の関連情報が示す変更後プログラムＰｏｓｔＰｒｇのパス条件式をＰｏｓｔＰＣ＿ＴＣ（ｉ）と表現する。
【０１５７】
テストケース生成装置１００は、条件式（２−１）の充足可能性と条件式（２−２）の充足可能性とを判定する（ステップＳ２３０１）。次に、テストケース生成装置１００は、条件式（２−１）と条件式（２−２）とが共に充足不可能であると判定したか否かを判断する（ステップＳ２３０２）。条件式（２−１）と条件式（２−２）とが共に充足不可能であると判定した場合（ステップＳ２３０２：Ｙｅｓ）、テストケース生成装置１００は、パス条件式変更種別を“不変”に特定する（ステップＳ２３０３）。
【０１５８】
条件式（２−１）と条件式（２−２）とのうち少なくとも一方の条件式が充足不可能でないと判定した場合（ステップＳ２３０２：Ｎｏ）、テストケース生成装置１００は、条件式（２−１）が充足可能であり、かつ条件式（２−２）が充足不可能であると判定したか否かを判断する（ステップＳ２３０４）。条件式（２−１）が充足可能であり、かつ条件式（２−２）が充足不可能である場合（ステップＳ２３０４：Ｙｅｓ）、テストケース生成装置１００は、パス条件式変更種別を“縮小”に特定する（ステップＳ２３０５）。
【０１５９】
条件式（２−１）が充足可能でない、または条件式（２−２）が充足不可能でない場合（ステップＳ２３０４：Ｎｏ）、テストケース生成装置１００は、条件式（２−１）が充足不可能であり、かつ条件式（２−２）が充足可能であると判定したか否かを判断する（ステップＳ２３０６）。条件式（２−１）が充足不可能であり、かつ条件式（２−２）が充足可能である場合（ステップＳ２３０６：Ｙｅｓ）、テストケース生成装置１００は、パス条件式変更種別を“拡大”に特定する（ステップＳ２３０７）。
【０１６０】
一方、条件式（２−１）と条件式（２−２）が共に充足可能である場合（ステップＳ２３０６：Ｎｏ）、テストケース生成装置１００は、パス条件式変更種別を“重複”に特定する（ステップＳ２３０８）。ステップＳ２３０３、ステップＳ２３０５、ステップＳ２３０７、ステップＳ２３０８、のうちのいずれかの処理終了後、テストケース生成装置１００は、特定したパス条件式変更種別を出力する（ステップＳ２３０９）。出力されたパス条件式変更種別は、ｉ番目の関連情報に付与される。
【０１６１】
ステップＳ２３０９の処理終了後、テストケース生成装置１００は、パス条件式変更種別分類処理を終了する。パス条件式変更種別分類処理を実行することにより、テストケース生成装置１００は、ｉ番目の関連情報が示す変更後プログラムＰｏｓｔＰｒｇのパス条件式が、変更前プログラムＰｒｅＰｒｇのパス条件式からどのように変更されたかを取得することができる。
【０１６２】
図２４は、パス出力数式変更種別分類処理手順の一例を示すフローチャートである。パス出力数式変更種別分類処理は、関連情報のパス出力数式変更種別を分類する処理である。図２４では、ｉ番目の関連情報が示す変更前プログラムＰｒｅＰｒｇのパス出力数式をＰｒｅＲ＿ＴＣ（ｉ）と表現する。また、ｉ番目の関連情報が示す変更後プログラムＰｏｓｔＰｒｇのパス出力数式をＰｏｓｔＲ＿ＴＣ（ｉ）と表現する。
【０１６３】
テストケース生成装置１００は、判定ルール１として、ＰｒｅＲ＿ＴＣ（ｉ）とＰｏｓｔＲ＿ＴＣ（ｉ）とが文字列として比較して一致するか否かを判断する（ステップＳ２４０１）。一致しない場合（ステップＳ２４０１：Ｎｏ）、テストケース生成装置１００は、判定ルール２〜４を適用する（ステップＳ２４０２）。続けて、テストケース生成装置１００は、判定ルール２〜４を適用した結果、“不変”であると判断したか否かを判断する（ステップＳ２４０３）。
【０１６４】
文字列として比較して一致した場合（ステップＳ２４０１：Ｙｅｓ）、または、判定ルール２〜４を適用した結果、“不変”であると判断した場合（ステップＳ２４０３：Ｙｅｓ）、テストケース生成装置１００は、パス出力数式変更種別を“不変”と判断する（ステップＳ２４０４）。
【０１６５】
判定ルール２〜４を適用した結果、“不変”でないと判断した場合（ステップＳ２４０３：Ｎｏ）、テストケース生成装置１００は、判定ルール２〜４を適用した結果、“変更”であると判断したか否かを判断する（ステップＳ２４０５）。判定ルール２〜４を適用した結果、“変更”であると判断した場合（ステップＳ２４０５：Ｙｅｓ）、テストケース生成装置１００は、パス出力数式変更種別を“変更”と判断する（ステップＳ２４０６）。
【０１６６】
一方、判定ルール２〜４を適用した結果、“判定不能”であると判断した場合（ステップＳ２４０５：Ｎｏ）、テストケース生成装置１００は、パス出力数式変更種別を“判定不能”と判断する（ステップＳ２４０７）。ステップＳ２４０４、ステップＳ２４０６、ステップＳ２４０７、のうちのいずれかの処理終了後、テストケース生成装置１００は、判断したパス出力数式変更種別を出力する（ステップＳ２４０８）。出力されたパス出力数式変更種別は、ｉ番目の関連情報に付与される。
【０１６７】
ステップＳ２４０８の処理終了後、テストケース生成装置１００は、パス出力数式変更種別分類処理を終了する。パス出力数式変更種別分類処理を実行することにより、テストケース生成装置１００は、ｉ番目の関連情報が示す変更後プログラムＰｏｓｔＰｒｇのパスの機能が、変更前プログラムＰｒｅＰｒｇのパスの機能から変更されたか否かを特定することができる。
【０１６８】
図２５は、テストケース分類処理手順の一例を示すフローチャートである。テストケース分類処理は、関連情報のテストケース分類を特定する処理である。テストケース生成装置１００は、関連情報のパス条件式変更種別とパス出力数式変更種別とを取得する（ステップＳ２５０１）。次に、テストケース生成装置１００は、テストケース分類ルールテーブル１８０１を参照して、取得したパス条件式変更種別とパス出力数式変更種別とに応じたテストケース分類を判定する（ステップＳ２５０２）。続けて、テストケース生成装置１００は、判定したテストケース分類を出力する（ステップＳ２５０３）。ステップＳ２５０３の処理終了後、テストケース生成装置１００は、テストケース分類処理を終了する。テストケース分類処理を実行することにより、テストケース生成装置１００は、テストケース分類を特定することができる。
【０１６９】
図２６は、変更後プログラムのテストケースの入力値生成処理手順の一例を示すフローチャートである。変更後プログラムのテストケースの入力値生成処理は、変更後プログラムＰｏｓｔＰｒｇのテストケースの入力値を生成する処理である。
【０１７０】
テストケース生成装置１００は、テストケース種別の指定を受け付ける（ステップＳ２６０１）。次に、テストケース生成装置１００は、指定されたテストケース種別の関連情報を選択する（ステップＳ２６０２）。続けて、テストケース生成装置１００は、選択した関連情報のテストケースパス条件式を取得する（ステップＳ２６０３）。次に、テストケース生成装置１００は、取得したテストケースパス条件式を満たす値を、制約ソルバを利用して算出する（ステップＳ２６０４）。続けて、テストケース生成装置１００は、算出した値をテスト入力値とするテストケースを生成する（ステップＳ２６０５）。
【０１７１】
ステップＳ２６０５において、テストケース生成装置１００は、たとえば、関連情報の変更前プログラムＰｒｅＰｒｇのパスの動作をテストするテストケースをコピーして、コピー先のテストケースのテスト入力値を算出した値に上書きしてもよい。コピー先のテストケースが、変更後プログラムＰｏｓｔＰｒｇのパスの動作をテストするテストケースとして生成されたこととなる。また、変更前プログラムＰｒｅＰｒｇの試験を今後行わないのであれば、テストケース生成装置１００は、関連情報の変更前プログラムＰｒｅＰｒｇのパスの動作をテストするテストケースのテスト入力値を、算出した値で上書きしてもよい。上書きされたテストケースが、変更後プログラムＰｏｓｔＰｒｇのパスの動作をテストするテストケースとして生成されたこととなる。
【０１７２】
ステップＳ２６０５の処理終了後、テストケース生成装置１００は、変更後プログラムのテストケースの入力値生成処理を終了する。変更後プログラムのテストケースの入力値生成処理を実行することにより、テストケース生成装置１００は、変更後プログラムのテストケースの入力値を用意することができる。
【０１７３】
以上説明したように、テストケース生成装置１００によれば、プログラムの一部が変更された場合、変更前後のパスが実行される条件式が充足可能となるパス同士の出力変数を比較してテストケースを生成すべきか否かを判断する。これにより、テストケース生成装置１００の利用者は、第２のパスの動作をテストするテストケースを生成すべきか否かを知ることができ、テストケースを生成すべきか否かを利用者が判断しなくてよい分、テストケース生成作業の負荷を削減することができる。
【０１７４】
また、テストケース生成装置１００によれば、第２のパスの動作をテストするテストケースを生成すべきであると判定した際、第２のパス条件式を真とする入力変数の値を算出し、算出した値を入力変数の値とする第２のパスのテストケースを生成してもよい。変更されたテストケースが第２のパスの動作をテストするテストケースとなり、テストケース生成装置１００の利用者は、変更部分および追加部分のテストケースを生成せずに済み、テストケース生成作業の負荷を削減することができる。
【０１７５】
また、テストケース生成装置１００によれば、条件式（２−１）と条件式（２−２）との充足可能性とに基づいて、第２のパスの動作をテストするテストケースを生成すべきか否かを判定してもよい。
【０１７６】
これにより、テストケース生成装置１００の利用者は、テストケース種別が“不変”か“回帰”であれば、テストケースを生成しなくてよいことを知ることができ、また、“変更”か“追加”であれば、テストケースを生成すべきであることを知ることができる。また、テストケース種別が“回帰”である場合、出力される値は同一であるがパス条件式が変更したため、たとえば、第１のパス条件式を真とするテスト入力値を有するテストケースのうち、第２のパス条件式を真としないテストケースがある可能性がある。第２のパス条件式を真としないテストケースは実行しなくてよいため、テストケース種別が“回帰”であると知ったテストケース生成装置１００の利用者は、テストケースの実行の要否を検討することができる。
【０１７７】
また、テストケース生成装置１００の利用者は、条件式（２−２）が充足可能であると特定し、かつ、第１のパス出力数式と第２のパス出力数式とが一致する場合、第１のパス条件式の否定と第２のパス条件式を真とする入力変数の値を算出してもよい。条件式（２−２）が充足可能となる場合とは、パス条件式変更種別が“拡大”または“重複”となる場合である。テストケース生成装置１００は、第１のパス条件式の否定と第２のパス条件式を真とする入力変数の値を算出して、変更前プログラムには含まれていないパス条件式に対する、テストケースのテスト入力値を生成することができる。
【０１７８】
また、テストケース生成装置１００によれば、変更前プログラムＰｒｅＰｒｇに含まれるパスごとのパス条件式とパス出力数式と第２のパスのパス条件式とパス出力数式とに基づき、第２のパスの動作をテストするテストケースを生成すべきか否かを判定してもよい。これにより、テストケース生成装置１００の利用者は、変更前プログラムＰｒｅＰｒｇに含まれるパスのうち、第２のパスに関連するパスのテストケースがそのまま流用できるか、または第２のパス用にテストケースを生成すべきかを知ることができる。
【０１７９】
また、テストケース生成装置１００によれば、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとのパスごとのパス条件式とパス出力数式とに基づき、変更後プログラムＰｏｓｔＰｒｇの各パスのテストケースを生成すべきか否かを判定してもよい。これにより、テストケース生成装置１００の利用者は、変更後プログラムＰｏｓｔＰｒｇに含まれるパス全てに対して、テストケースを生成すべきか否かを知ることができる。
【０１８０】
また、テストケース生成装置１００によれば、関連情報ごとに、パス条件式変更種別を特定し、パス条件式変更種別と、パス出力数式とに基づいて、変更後プログラムＰｏｓｔＰｒｇの各パスのテストケース種別を判定してもよい。たとえば、テストケース生成装置１００の利用者は、出力された変更後プログラムＰｏｓｔＰｒｇの各パスのテストケース種別のうちの“不変”と“回帰”とを指定することにより、リグレッションテストを実行するテストケースを選択することができる。また、テストケース生成装置１００の利用者は、出力された変更後プログラムＰｏｓｔＰｒｇの各パスのテストケース種別のうちの“変更”と“追加”とを指定することにより、変更部分および追加部分を実行するテストケースを選択することができる。
【０１８１】
（実施の形態２の説明）
実施の形態１にかかるテストケース生成装置１００は、変更前後のパスの関連付けにおける条件式（１）の充足可能性の判定と、パス条件式変更種別の分類における条件式（２−１）と条件式（２−２）の充足可能性の判定とにおいて、制約ソルバを利用する。しかしながら、制約ソルバによる充足可能性の判定は時間を要する。そこで、実施の形態２にかかるテストケース生成装置は、制約ソルバによる充足可能性の判定の回数を削減する。以下、図２７〜図３４を用いて、実施の形態２にかかるテストケース生成装置２７００について説明する。なお、実施の形態１において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【０１８２】
図２７は、実施の形態２におけるテストケース生成装置の機能例を示すブロック図である。テストケース生成装置２７００は、第１取得部２７０１と、第２取得部２７０２と、テスト入力値判断部２７０３と、関連情報生成部２７０４と、特定部２７０５と、組作成部２７０６と、パス関連判断部２７０７と、関連情報作成部２７０８と、を含む。さらに、テストケース生成装置２７００は、数式判定部２７０９と、生成判定部２７１０と、算出部９０８と、テストケース生成部９０９を含む。
【０１８３】
制御部となる第１取得部２７０１〜生成判定部２７１０と、算出部９０８と、テストケース生成部９０９は、記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、各機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、ディスク２０５などである。または、通信インターフェース２０６を経由して他のＣＰＵが実行することにより、第１取得部２７０１〜生成判定部２７１０と、算出部９０８と、テストケース生成部９０９の機能を実現してもよい。
【０１８４】
第１取得部２７０１は、第１のシンボリック実行結果と、第１のシンボリック実行結果に含まれる各パスの動作をテストするテストケースのテスト入力値とを取得する。なお、取得された情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１８５】
第２取得部２７０２は、第２のシンボリック実行結果と、第２のシンボリック実行結果に含まれる各パスのパス条件式を満たすテスト入力値とを取得する。第２のパス条件式を満たすテスト入力値の取得例として、第２取得部２７０２は、制約ソルバを利用して、第２のパス条件式を満たす値を取得する。なお、取得された情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１８６】
テスト入力値判断部２７０３は、第１のパスの動作をテストするテストケースの入力値を、第２のパスのパス条件式に与えた場合に第２の条件式が真となるか否かを判断する。また、テスト入力値判断部２７０３は、第２取得部２７０２によって取得されたテスト入力値を、第１のパスのパス条件式に与えた場合に第１の条件式が真となるか否かを判断してもよい。
【０１８７】
また、テスト入力値判断部２７０３は、第１取得部２７０１によって取得されたテストケースごとに、テストケースのテスト入力値を、第２のシンボリック実行結果に含まれる各パスのパス条件式に与える。そして、テスト入力値判断部２７０３は、テスト入力値を与えた場合に第２のシンボリック実行結果に含まれる各パスのパス条件式が真となるか否かを判断してもよい。
【０１８８】
また、テスト入力値判断部２７０３は、第２取得部２７０２によって取得されたテスト入力値ごとに、テスト入力値を第１のシンボリック実行結果に含まれる各パスのパス条件式に与える。そして、テスト入力値判断部２７０３は、テスト入力値を与えた場合に第１のシンボリック実行結果に含まれる各パスのパス条件式が真となるか否かを判断してもよい。具体的な判断方法については、図２８にて後述する。なお、判断結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１８９】
関連情報生成部２７０４は、次に示す場合、第２のシンボリック実行結果に含まれる各パスが、前述の各パスの条件式が真となる入力値に対応する第１のシンボリック実行結果に含まれるパスに関連することを示す第１の関連情報を生成する。次に示す場合とは、テスト入力値判断部２７０３が第２のシンボリック実行結果に含まれる各パスの条件式が真となると判断した場合である。
【０１９０】
また、関連情報生成部２７０４は、次に示す場合、真となった第２のシンボリック実行結果に含まれるパスが、第１のシンボリック実行結果に含まれるパスに関連することを示す第１の関連情報を生成してもよい。次に示す場合とは、テスト入力値判断部２７０３が第１のシンボリック実行結果に含まれる各パスの条件式が真となると判断した場合である。具体的な生成方法については、図２８にて後述する。なお、生成された関連情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１９１】
特定部２７０５は、第１の関連情報が示す第１のシンボリック実行結果に含まれるパスに対応するパス条件式と第２のシンボリック実行結果に含まれる各パスに対応するパス条件式の否定との充足可能性を第１の関連情報ごとに特定する。さらに、特定部２７０５は、第１の関連情報が示す第１のシンボリック実行結果に含まれるパスに対応するパス条件式の否定と第２のシンボリック実行結果に含まれる各パスに対応するパス条件式との充足可能性を第１の関連情報ごとに特定する。
【０１９２】
また、特定部２７０５は、第２の関連情報が示す第１のシンボリック実行結果に含まれるパスに対応する条件式と第２のシンボリック実行結果に含まれるパスに対応するパス条件式の否定との充足可能性を第２の関連情報ごとに特定する。さらに、特定部２７０５は、第２の関連情報が示す第１のシンボリック実行結果に含まれるパスに対応する条件式の否定と第２のシンボリック実行結果に含まれるパスに対応するパス条件式との充足可能性を第２の関連情報ごとに特定する。なお、生成された関連情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１９３】
組作成部２７０６は、第１のシンボリック実行結果に含まれるパスと第２のシンボリック実行結果に含まれるパスとの組から、第１の関連情報ごとの特定結果に基づいて特定される組を除く残余の組を作成する。第１の関連情報ごとの特定結果に基づいて特定される組については、図３０について後述する。なお、作成された組を示す情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１９４】
パス関連判断部２７０７は、テスト入力値判断部２７０３による判断結果に基づいて、第２のパスが前記第１のパスに関連するか否かを判断する。たとえば、テスト入力値判断部２７０３が、第１のパスの動作をテストするテストケースの入力値を、第２のパスのパス条件式に与えた場合に第２の条件式が真となったと判断したとする。このとき、パス関連判断部２７０７は、第２のパスが前記第１のパスに関連すると判断する。
【０１９５】
また、パス関連判断部２７０７は、特定部２７０５による特定結果に基づいて、第２のパスが変更前プログラムＰｒｅＰｒｇに含まれるパス群のうちの第１のパスとは異なるパスに関連しないことを判断してもよい。たとえば、特定部２７０５が、第１のパスのパス条件式の否定と第２のパスのパス条件式との論理積が充足可能であり、かつ、第１のパスのパス条件式と第２のパスのパス条件式の否定との論理積が充足不可能であると特定したとする。このとき、パス関連判断部２７０７は、第２のパスが変更前プログラムＰｒｅＰｒｇに含まれるパス群のうちの第１のパスとは異なるパスに関連しないと判断する。なお、関連しないと判断されたパス同士の組が、組生成部２７０６にて説明した、第１の関連情報ごとの特定結果に基づいて特定される組のこととなる。
【０１９６】
また、パス関連判断部２７０７は、特定部２７０５による特定結果に基づいて、変更後プログラムＰｏｓｔＰｒｇに含まれるパス群のうちの第２のパスとは異なるパスが第１のパスに関連しないことを判断してもよい。たとえば、特定部２７０５が、第１のパスのパス条件式の否定と第２のパスのパス条件式との論理積が充足不可能であり、かつ、第１のパスのパス条件式と第２のパスのパス条件式の否定との論理積が充足可能であると特定したとする。このとき、パス関連判断部２７０７は、第２のパスが変更前プログラムＰｒｅＰｒｇに含まれるパス群のうちの第１のパスとは異なるパスに関連しないと判断する。
【０１９７】
また、パス関連判断部２７０７は、組作成部２７０６によって作成された残余の組ごとに、次に示す情報に基づいて、第２の実行結果に含まれる各パスが第１の実行結果に含まれる各パスに関連するか否かを判断してもよい。次に示す情報は、第１のシンボリック実行結果に含まれる各パスの条件式と第２のシンボリック実行結果に含まれる各パスとの充足可能性である。なお、判断結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１９８】
関連情報作成部２７０８は、次に示す場合、第２のシンボリック実行結果に含まれる各パスが第１のシンボリック実行結果に含まれる各パスに関連することを示す第２の関連情報を作成する。次に示す場合は、パス関連判断部２７０７によって第２のシンボリック実行結果に含まれる各パスが第１の実行結果に含まれる各パスに関連すると判断された場合である。なお、作成された第２の関連情報は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０１９９】
数式判定部２７０９は、第１のシンボリック実行結果に含まれるパス出力数式と、取得した第２のシンボリック実行結果に含まれるパス出力数式とが一致するか否かを判断する。数式判定部２７０９は、第１のシンボリック実行結果に含まれる各パスと第２のシンボリック実行結果に含まれる各パスとの組合せの組ごとに比較する。また、数式判定部２７０９は、関連情報生成部２７０４によって生成された第１の関連情報および関連情報作成部２７０８によって作成された第２の関連情報が示す第１のパス出力数式と第２のパス出力数式とを比較してもよい。なお、比較結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０２００】
生成判定部２７１０は、次に示す情報に基づいて、第２の実行結果に含まれる各パスの動作をテストするテストケースを生成すべきか否かを判定する。次に示す情報は、特定部２７０５による第１の関連情報ごとの特定結果および第２の関連情報ごとの特定結果と、数式判定部２７０９による第１の実行結果に含まれる各パスと第２の実行結果に含まれる各パスとの組合せの組ごとの判定結果とである。なお、判定結果は、ＲＡＭ２０３、ディスク２０５などの記憶領域に記憶される。
【０２０１】
図２８は、実施の形態２における変更前後のパスを関連付けた結果の一例を示す説明図である。表２８０１は、変更前プログラムＰｒｅＰｒｇのパス条件式とテスト入力値とを示す。表２８０１は、レコード２８０１−１〜レコード２８０１−３を有する。また、表２８０２は、変更後プログラムＰｏｓｔＰｒｇのパス条件式とテスト入力値とを示す。表２８０２は、レコード２８０２−１〜レコード２８０２−４を有する。表２８０１と表２８０２とは、パスＩＤと、入力変数と、テスト入力値と、パス条件式という、４つのフィールドを有する。
【０２０２】
テストケース生成装置２７００は、変更前プログラムＰｒｅＰｒｇの各パスのテスト入力値を、変更後プログラムＰｏｓｔＰｒｇのパス条件式ＰｏｓｔＰＣに与える。値を与えたパス条件式が真となった場合、テストケース生成装置２７００は、該当のパスＰｒｅと、与えられたパス条件式ＰｏｓｔＰＣに対応するパスＰｏｓｔとを関連付けて、関連情報とする。なお、変更前プログラムＰｒｅＰｒｇの各パスのテスト入力値は、変更前プログラムをテストする際に生成されており、本実施の形態を実行するために改めて用意しなくてよい。
【０２０３】
さらに、テストケース生成装置２７００は、変更後プログラムＰｏｓｔＰｒｇの各パスのテスト入力値を、変更前プログラムＰｒｅＰｒｇのパス条件式ＰｒｅＰＣに与える。値を与えたパス条件式が真となった場合、テストケース生成装置２７００は、該当のパスＰｏｓｔと、与えられたパス条件式ＰｏｓｔＰＣに対応するパスＰｒｅとを関連付けて、関連情報とする。なお、変更後プログラムＰｏｓｔＰｒｇの各パスのテスト入力値は、制約ソルバを利用することにより生成できる。この時の制約ソルバによるテスト入力値の算出については、条件式が論理積でないために処理量が多くなく、算出にかかる時間は短く済む。
【０２０４】
たとえば、テストケース生成装置２７００は、Ｐｒｅ１のテスト入力値“０”を、Ｐｏｓｔ１のパス条件式〜Ｐｏｓｔ４のパス条件式のそれぞれに与える。図２８の例では、Ｐｏｓｔ１ＰＣにＸ＝０を与えると真となるため、テストケース生成装置２７００は、テストケース組番号１として、Ｐｒｅ１とＰｏｓｔ１とを有する関連情報を生成する。
【０２０５】
関連情報が生成された結果として、図２８では、パス関連付け結果２８０３を示す。パス関連付け結果２８０３は、パス関連付け結果１００１と同一のフィールドを有する。パス関連付け結果２８０３は、レコード２８０３−１〜レコード２８０３−５を有する。ここで、図２８で示した関連付け手順では、パス関連付け結果１００１のレコード１００１−３が示すＰｒｅ３とＰｏｓｔ３との関連情報が生成できていない。Ｐｒｅ３とＰｏｓｔ３との関連情報を検出して生成する手順については、図３０にて後述する。
【０２０６】
図２９は、実施の形態２におけるパス条件式変更種別の分類結果の一例を示す説明図である。図２９では、テストケース生成装置２７００が、図１１にて示したパス条件式変更種別の分類手順に従って、関連情報のパス条件式変更種別を分類した結果となるパス条件式変更種別結果２９０１を示す。パス条件式変更種別結果２９０１は、レコード２９０１−１〜レコード２９０１−５を有する。パス条件式変更種別結果２９０１の各フィールドは、パス条件式変更種別結果１２０１と同一であるため、説明を省略する。
【０２０７】
図３０は、未生成の変更前後のパス関連付けの作成手順の一例を示す説明図である。図３０では、図２９から得たパス条件式変更種別結果２９０１を用いて、未生成の変更前後のパス関連付けを検出して、関連情報を生成する手順について説明する。
【０２０８】
表３００１は、Ｐｒｅ１ＰＣ〜Ｐｒｅ３ＰＣと、Ｐｏｓｔ１ＰＣ〜Ｐｏｓｔ４ＰＣとの組合せを示す。まず、Ｐｒｅ１ＰＣ〜Ｐｒｅ３ＰＣはそれぞれ排他の関係となる。同様に、Ｐｏｓｔ１ＰＣ〜Ｐｏｓｔ４ＰＣもそれぞれ排他の関係となる。また、テストケース生成装置２７００は、パス条件式変更種別結果２９０１から特定される組を取り除いた残余の組に対して、充足可能性を判定する。たとえば、パス条件式変更種別が“重複”を示すレコード２９０１−２とレコード２９０１−４とについて、既にテストケース組となった組合せは、充足可能であることが明らかであるため、制約ソルバを使用しなくてよい。
【０２０９】
たとえば、パス条件式変更種別が“拡大”を示すレコード２９０１−１より、Ｐｏｓｔ１ＰＣがＰｒｅ１ＰＣの拡大の関係となることから、Ｐｒｅ１ＰＣが、Ｐｏｓｔ２ＰＣ〜Ｐｏｓｔ４ＰＣと関連することはない。したがって、Ｐｒｅ１ＰＣ∧Ｐｏｓｔ２ＰＣの充足可能性と、Ｐｒｅ１ＰＣ∧Ｐｏｓｔ３ＰＣの充足可能性と、Ｐｒｅ１ＰＣ∧Ｐｏｓｔ４ＰＣの充足可能性とは、全て充足不可能であることが明らかである。これにより、表３００１の（１）の矢印が示すように、Ｐｒｅ１ＰＣと、Ｐｏｓｔ１ＰＣ〜Ｐｏｓｔ４ＰＣとの制約ソルバによる充足可能性の判定を行わなくてよい。
【０２１０】
また、パス条件式変更種別が“縮小”を示すレコード２９０１−３より、Ｐｏｓｔ２ＰＣがＰｒｅ２ＰＣの縮小の関係となることから、Ｐｏｓｔ２ＰＣが、Ｐｒｅ１ＰＣとＰｒｅ３ＰＣと関連することはない。したがって、Ｐｒｅ２ＰＣ∧Ｐｏｓｔ１ＰＣの充足可能性と、Ｐｒｅ２ＰＣ∧Ｐｏｓｔ３ＰＣの充足可能性とは、全て充足不可能であることが明らかである。これにより、表３００１の（２）の矢印が示すように、Ｐｏｓｔ２ＰＣと、Ｐｒｅ１ＰＣ〜Ｐｒｅ３ＰＣとの制約ソルバによる充足可能性の判定を行わなくてよい。
【０２１１】
さらに、パス条件式変更種別が“縮小”を示すレコード２９０１−５より、Ｐｏｓｔ４ＰＣがＰｒｅ３ＰＣの縮小の関係となることから、Ｐｏｓｔ４ＰＣが、Ｐｒｅ１ＰＣとＰｒｅ２ＰＣと関連することはない。したがって、Ｐｒｅ１ＰＣ∧Ｐｏｓｔ４ＰＣの充足可能性と、Ｐｒｅ２ＰＣ∧Ｐｏｓｔ４ＰＣの充足可能性とは、全て充足不可能であることが明らかである。これにより、表３００１の（３）の矢印が示すように、Ｐｏｓｔ４ＰＣと、Ｐｒｅ１ＰＣ〜Ｐｒｅ３ＰＣとの制約ソルバによる充足可能性の判定を行わなくてよい。
【０２１２】
以上より、充足可能か否かを判定できていない組合せは、表３００１にて、ハッチを付与した、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ１ＰＣと、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ３ＰＣとなる。テストケース生成装置２７００は、制約ソルバを利用して、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ１ＰＣの充足可能性と、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ３ＰＣの充足可能性を判定する。判定した結果、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ１ＰＣが充足不可能となり、Ｐｒｅ３ＰＣ∧Ｐｏｓｔ３ＰＣが充足可能となったため、テストケース生成装置２７００は、Ｐｒｅ３ＰＣとＰｏｓｔ３ＰＣとの関連情報を作成し、パス条件式変更種別を分類する。
【０２１３】
図３０では示さなかったが、パス条件式変更種別が“不変”となった、あるＰｒｅＰＣとあるＰｏｓｔＰＣがある場合には、あるＰｒｅＰＣと他のＰｏｓｔＰＣとが関連することはないし、他のＰｒｅＰＣとあるＰｏｓｔＰＣとが関連することもない。したがって、あるＰｒｅＰＣ∧他のＰｏｓｔＰＣの充足可能性と、他のＰｒｅＰＣ∧あるＰｏｓｔＰＣとは、全て充足不可能であることが明らかであり、制約ソルバを使用しなくてよい。また、上述にて、パス条件式変更種別が“不変”、“拡大”、“縮小”、“重複”それぞれの場合に取り除く組を示したが、取り除く組は、“不変”、“拡大”、“縮小”、“重複”のうちの少なくともいずれか一つであってもよい。
【０２１４】
ここで、実施の形態１における制約ソルバの実行回数と、実施の形態２における制約ソルバの実行回数とを比較する。実施の形態１における制約ソルバは、変更前後のパスの関連付け時に行われる条件式（１）と、作成した関連情報に対する条件式（２−１）、（２−２）と、の充足可能性の判定に使用される。具体的に、テストケース生成装置２７００は、制約ソルバを、条件式（１）の充足可能性の判定に３×４＝１２［回］使用し、６つの関連情報に対して、条件式（２−１）と条件式（２−２）の充足可能性の判定に、６×２＝１２［回］使用する。以上より、実施の形態１における制約ソルバの合計の使用回数は、１２＋１２＝２４［回］となる。
【０２１５】
一方、実施の形態２における制約ソルバは、テスト入力値を用いて生成した関連情報に対する条件式（２−１）、（２−２）と、残余の組に対する条件式（１）と、作成した関連情報に対する条件式（２−１）、（２−２）と、の充足可能性の判定に使用される。具体的に、テストケース生成装置２７００は、制約ソルバを、生成した関連情報に対する条件式（２−１）、（２−２）の充足可能性の判定に、５×２＝１０［回］使用する。そして、テストケース生成装置２７００は、制約ソルバを、残余の組に対する条件式（１）の充足可能性の判定に２［回］使用し、作成した関連情報に対する条件式（２−１）と、（２−２）の充足可能性の判定に、１×２＝２［回］使用する。以上より、実施の形態２における制約ソルバの合計の使用回数は、１０＋２＋２＝１４［回］となる。
【０２１６】
したがって、実施の形態２における制約ソルバの合計の使用回数は、実施の形態１における制約ソルバの合計の使用回数より１０回分少なくなる。次に、図３１〜図３４を用いて、実施の形態２におけるテストケース生成処理のフローチャートを説明する。
【０２１７】
図３１は、実施の形態２におけるテストケース生成処理手順の一例を示すフローチャート（その１）である。また、図３２は、実施の形態２におけるテストケース生成処理手順の一例を示すフローチャート（その２）である。
【０２１８】
テストケース生成装置２７００は、変更前プログラムＰｒｅＰｒｇと変更後プログラムＰｏｓｔＰｒｇとのシンボリック実行結果を取得する（ステップＳ３１０１）。次に、テストケース生成装置２７００は、変更前プログラムＰｒｅＰｒｇのテストケースから、テスト入力値を取得する（ステップＳ３１０２）。続けて、テストケース生成装置２７００は、変更後プログラムＰｏｓｔＰｒｇのパス条件式を制約ソルバに与えることにより、テスト入力値を生成する（ステップＳ３１０３）。次に、テストケース生成装置２７００は、テスト入力値による変更前後パス関連付け処理を実行する（ステップＳ３１０４）。テスト入力値による変更前後パス関連付け処理の詳細は、図３３にて後述する。また、テスト入力値による変更前後パス関連付け処理により、Ｌ１個の関連情報を作成したものとする。
【０２１９】
続けて、テストケース生成装置２７００は、１をｉに代入する（ステップＳ３１０５）。次に、テストケース生成装置２７００は、ｉ番目の関連情報のパス条件式を、文字列として比較する（ステップＳ３１０６）。続けて、テストケース生成装置２７００は、比較結果が文字列の一致を示すか否かを判断する（ステップＳ３１０７）。
【０２２０】
比較結果が文字列の一致を示す場合（ステップＳ３１０７：Ｙｅｓ）、テストケース生成装置２７００は、ｉ番目の関連情報のパス条件式の変更種別を、“不変”に特定する（ステップＳ３１０８）。比較結果が文字列の不一致を示す場合（ステップＳ３１０７：Ｎｏ）、テストケース生成装置２７００は、ｉ番目の関連情報に対して、パス条件式の変更種別特定処理を実行する（ステップＳ３１０９）。
【０２２１】
ステップＳ３１０８、またはステップＳ３１０９の処理終了後、テストケース生成装置２７００は、ｉ＋１をｉに代入する（ステップＳ３１１０）。次に、テストケース生成装置２７００は、ｉがＬ１より大きいか否かを判断する（ステップＳ３１１１）。ｉがＬ１以下である場合（ステップＳ３１１１：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３１０６の処理に移行する。
【０２２２】
ｉがＬ１より大きい場合（ステップＳ３１１１：Ｙｅｓ）、テストケース生成装置２７００は、未検出の変更前後パス関連付け処理を実行する（ステップＳ３１１２）。未検出の変更前後パス関連付け処理の詳細は、図３４にて後述する。また、未検出の変更前後パス関連付け処理により、Ｌ２個の関連情報を作成したものとする。また、Ｌ１＋Ｌ２が、図２２で作成した関連情報の個数Ｌと同一の値となる。ステップＳ３１１２の処理終了後、テストケース生成装置２７００は、図３２に示すステップＳ３２０１の処理を実行する。
【０２２３】
ステップＳ３１１２の処理終了後、テストケース生成装置２７００は、１をｉに代入する（ステップＳ３２０１）。次に、テストケース生成装置２７００は、新たに追加されたＬ２個の関連情報のうちのｉ番目の関連情報に対して、パス条件式変更種別分類処理を実行する（ステップＳ３２０２）。続けて、テストケース生成装置２７００は、ｉ＋１をｉに代入する（ステップＳ３２０３）。次に、テストケース生成装置２７００は、ｉがＬ２より大きいか否かを判断する（ステップＳ３２０４）。ｉがＬ２以下である場合（ステップＳ３２０４：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３２０２の処理に移行する。ｉがＬ２より大きい場合（ステップＳ３２０４：Ｙｅｓ）、テストケース生成装置２７００は、１をｉに代入する（ステップＳ３２０５）。
【０２２４】
次に、テストケース生成装置２７００は、Ｌ１＋Ｌ２個の関連情報のうちのｉ番目の関連情報に対して、パス出力数式変更種別分類処理を実行する（ステップＳ３２０６）。続けて、テストケース生成装置２７００は、Ｌ１＋Ｌ２個の関連情報のうちのｉ番目の関連情報に対して、テストケース分類処理を実行する（ステップＳ３２０７）。次に、テストケース生成装置２７００は、ｉ＋１をｉに代入する（ステップＳ３２０８）。続けて、テストケース生成装置２７００は、ｉがＬ１＋Ｌ２より大きいか否かを判断する（ステップＳ３２０９）。ｉがＬ１＋Ｌ２以下である場合（ステップＳ３２０９：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３２０６の処理に移行する。
【０２２５】
ｉがＬ１＋Ｌ２より大きい場合（ステップＳ３２０９：Ｙｅｓ）、テストケース生成装置２７００は、テストケース分類結果を出力する（ステップＳ３２１０）。次に、テストケース生成装置２７００は、テストケースのテスト入力値生成処理を実行する（ステップＳ３２１１）。続けて、テストケース生成装置２７００は、テスト入力値を生成したテストケースを出力する（ステップＳ３２１２）。
【０２２６】
ステップＳ３２１２の終了後、テストケース生成装置２７００は、実施の形態２におけるテストケース生成処理を終了する。実施の形態２におけるテストケース生成処理を実行することにより、テストケース生成装置２７００は、変更後プログラムＰｏｓｔＰｒｇの動作をテストするテストケースを生成することができる。さらに、実施の形態２におけるテストケース生成処理を実行することにより、テストケース生成装置２７００は、制約ソルバの実行回数を実施の形態２におけるテストケース生成処理より少なくすることができる。
【０２２７】
図３３は、テスト入力値による変更前後パス関連付け処理手順の一例を示すフローチャートである。テスト入力値による変更前後パス関連付け処理は、テスト入力値を利用して、関連するパス同士を検出して関連情報を生成する処理である。また、図３３では、変更前プログラムＰｒｅＰｒｇのｉ番目のパスをＰｒｅ（ｉ）と表現し、ｉ番目のパスの条件式をＰｒｅＰＣ（ｉ）と表現し、ｉ番目のパスをテストするテストケースの入力値をＰｒｅＩｎ（ｉ）と表現する。同様に、変更後プログラムＰｏｓｔＰｒｇのｋ番目のパスをＰｏｓｔ（ｋ）と表現し、ｋ番目のパスの条件式を、ＰｏｓｔＰＣ（ｋ）と表現し、ｋ番目のパスをテストするテストケースの入力値をＰｏｓｔＩｎ（ｋ）と表現する。
【０２２８】
テストケース生成装置２７００は、１をｉに代入し、１をｋに代入する（ステップＳ３３０１）。次に、テストケース生成装置２７００は、ＰｒｅＩｎ（ｉ）を与えたＰｏｓｔＰＣ（ｋ）が真となるか否かを判断する（ステップＳ３３０２）。ＰｒｅＩｎ（ｉ）を与えたＰｏｓｔＰＣ（ｋ）が真となる場合（ステップＳ３３０２：Ｙｅｓ）、テストケース生成装置２７００は、Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）とをテストケース組とする関連情報を生成する（ステップＳ３３０３）。
【０２２９】
ステップＳ３３０３の処理終了後、または、ＰｒｅＩｎ（ｉ）を与えたＰｏｓｔＰＣ（ｋ）が偽となる場合（ステップＳ３３０２：Ｎｏ）、テストケース生成装置２７００は、ＰｏｓｔＩｎ（ｋ）を与えたＰｒｅＰＣ（ｉ）が真となるか否かを判断する（ステップＳ３３０４）。ＰｏｓｔＩｎ（ｋ）を与えたＰｒｅＰＣ（ｉ）が真となる場合（ステップＳ３３０４：Ｙｅｓ）、テストケース生成装置２７００は、Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）とをテストケース組とする関連情報を生成する（ステップＳ３３０５）。
【０２３０】
ステップＳ３３０５の処理終了後、または、ＰｏｓｔＩｎ（ｋ）を与えたＰｒｅＰＣ（ｉ）が偽となる場合（ステップＳ３３０４：Ｎｏ）、テストケース生成装置２７００は、ｋ＋１をｋに代入する（ステップＳ３３０６）。次に、テストケース生成装置２７００は、ｋがＮより大きいか否かを判断する（ステップＳ３３０７）。ｋがＮ以下である場合（ステップＳ３３０７：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３３０２の処理に移行する。ｋがＮより大きい場合（ステップＳ３３０７：Ｙｅｓ）、テストケース生成装置２７００は、ｉ＋１をｉに代入し、１をｋに代入する（ステップＳ３３０８）。次に、テストケース生成装置２７００は、ｉがＭより大きいか否かを判断する（ステップＳ３３０９）。
【０２３１】
ｉがＭ以下である場合（ステップＳ３３０９：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３３０２の処理に移行する。ｉがＭより大きい場合（ステップＳ３３０９：Ｙｅｓ）、テストケース生成装置２７００は、関連情報を出力する（ステップＳ３３１０）。ステップＳ３３１０の処理終了後、テストケース生成装置２７００は、テスト入力値による変更前後パス関連付け処理を終了する。テスト入力値による変更前後パス関連付け処理を実行することにより、テストケース生成装置２７００は、制約ソルバを用いずに、関連情報を作成することができる。
【０２３２】
図３４は、未検出の変更前後パス関連付け処理手順の一例を示すフローチャートである。未検出の変更前後パス関連付け処理は、テスト入力値によるテストケース関連付け処理により検出されなかった関連情報を検出して、関連情報を生成する処理である。また、図３４では、変更前プログラムＰｒｅＰｒｇのｉ番目のパスをＰｒｅ（ｉ）と表現し、ｉ番目のパスの条件式をＰｒｅＰＣ（ｉ）と表現する。同様に、変更後プログラムＰｏｓｔＰｒｇのｋ番目のパスをＰｏｓｔ（ｋ）と表現し、ｋ番目のパスの条件式を、ＰｏｓｔＰＣ（ｋ）と表現する。
【０２３３】
テストケース生成装置２７００は、１をｉに代入する（ステップＳ３４０１）。次に、テストケース生成装置２７００は、ＰｒｅＰＣ（ｉ）が、ＰｏｓｔＰＣ（ｋ）、ｋ＝１，…，Ｎのいずれかと“不変”または“拡大”の関係か否かを判断する（ステップＳ３４０２）。ＰｒｅＰＣ（ｉ）が、ＰｏｓｔＰＣ（ｋ）、ｋ＝１，…，Ｎのいずれかと“不変”または“拡大”の関係でない場合（ステップＳ３４０２：Ｎｏ）、テストケース生成装置２７００は、１をｋに代入する（ステップＳ３４０３）。
【０２３４】
次に、テストケース生成装置２７００は、ＰｒｅＰＣを先頭から末尾まで走査するための変数ｊを使って、ＰｒｅＰＣ（ｊ），ｊ＝１，…，Ｍのいずれかが、ＰｏｓｔＰＣ（ｋ）と“不変”または“縮小”の関係か否かを判断する（ステップＳ３４０４）。ＰｒｅＰＣ（ｊ），ｊ＝１，…，Ｍのいずれかが、ＰｏｓｔＰＣ（ｋ）と“不変”または“縮小”の関係でない場合（ステップＳ３４０４：Ｎｏ）、テストケース生成装置２７００は、Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）が既にテストケース組か否かを判断する（ステップＳ３４０５）。Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）が既にテストケース組でない場合（ステップＳ３４０５：Ｎｏ）、テストケース生成装置２７００は、ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｋ）が充足可能か否かを判断する（ステップＳ３４０６）。
【０２３５】
ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｋ）が充足可能である場合（ステップＳ３４０６：Ｙｅｓ）、テストケース生成装置２７００は、Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）とをテストケース組とする関連情報を作成する（ステップＳ３４０７）。
【０２３６】
ステップＳ３４０７の実行後、または、ＰｒｅＰＣ（ｉ）∧ＰｏｓｔＰＣ（ｋ）が充足可能でない場合（ステップＳ３４０６：Ｎｏ）、テストケース生成装置２７００は、ｋ＋１をｋに代入する（ステップＳ３４０８）。また、ＰｒｅＰＣ（ｊ），ｊ＝１，…，Ｍのいずれかが、ＰｏｓｔＰＣ（ｋ）と“不変”または“縮小”の関係である場合（ステップＳ３４０４：Ｙｅｓ）、Ｐｒｅ（ｉ）とＰｏｓｔ（ｋ）が既にテストケース組である場合（ステップＳ３４０５：Ｙｅｓ）、テストケース生成装置２７００は、ステップＳ３４０８の処理を実行する。
【０２３７】
ステップＳ３４０８の処理終了後、テストケース生成装置２７００は、ｋがＮより大きいか否かを判断する（ステップＳ３４０９）。ｋがＮ以下である場合（ステップＳ３４０９：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３４０４の処理に移行する。
【０２３８】
ＰｒｅＰＣ（ｉ）が、ＰｏｓｔＰＣ（ｋ）、ｋ＝１，…，Ｎのいずれかと“不変”または“拡大”の関係である場合（ステップＳ３４０２：Ｙｅｓ）、または、ｋがＮより大きい場合（ステップＳ３４０９：Ｙｅｓ）、テストケース生成装置２７００は、ｉ＋１をｉに代入する（ステップＳ３４１０）。次に、テストケース生成装置２７００は、ｉがＭより大きいか否かを判断する（ステップＳ３４１１）。
【０２３９】
ｉがＭ以下である場合（ステップＳ３４１１：Ｎｏ）、テストケース生成装置２７００は、ステップＳ３４０２の処理に移行する。ｉがＭより大きい場合（ステップＳ３４１１：Ｙｅｓ）、テストケース生成装置２７００は、生成した関連情報を新たな関連情報として追加する（ステップＳ３４１２）。ステップＳ３４１２の処理終了後、テストケース生成装置２７００は、未検出の変更前後パス関連付け処理を終了する。未検出の変更前後パス関連付け処理を実行することにより、テストケース生成装置２７００は、テスト入力値による変更前後パス関連付け処理により検出されなかった関連情報を検出することができる。
【０２４０】
以上説明したように、テストケース生成装置２７００によれば、テスト入力値を用いて関連情報を作成してもよい。これにより、テストケース生成装置２７００は、制約ソルバを用いずに、関連情報を作成することができ、制約ソルバの実行回数を削減することができる。
【０２４１】
また、テストケース生成装置２７００によれば、変更前プログラムＰｒｅＰｒｇに含まれる各パスと変更後プログラムＰｏｓｔＰｒｇに含まれる各パスとの組合せの組から、関連情報のパス条件式変更種別から特定される組を取り除く。続けて、テストケース生成装置２７００は、取り除いた残余の組に対して、変更前プログラムＰｒｅＰｒｇに含まれる各パスと変更後プログラムＰｏｓｔＰｒｇに含まれる各パスが関連するか否かを判断してもよい。これにより、テストケース生成装置２７００は、テストケース生成装置１００が制約ソルバを利用する回数よりも少ない回数で、関連情報を特定することができる。
【０２４２】
なお、本実施の形態で説明したテストケース生成方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本テストケース生成プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本テストケース生成プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２４３】
上述した実施の形態１、２に関し、さらに以下の付記を開示する。
【０２４４】
（付記１）コンピュータが、
第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、
前記入力変数が取り得る値のうちの、取得した前記第１の条件式と取得した前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断し、
取得した前記第１の数式と、取得した前記第２の数式とが一致するか否かを判定し、
判断結果と判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する、
処理を実行することを特徴とするテストケース生成方法。
【０２４５】
（付記２）前記コンピュータが、
前記第２のパスの動作をテストするテストケースを生成すべきであると判定した場合、前記第２の条件式を真とする前記入力変数の値を算出し、
算出した前記値を前記入力変数の値とする前記第２のパスの動作をテストするテストケースを生成する、
処理を実行することを特徴とする付記１に記載のテストケース生成方法。
【０２４６】
（付記３）前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断し、かつ、前記第１の数式と前記第２の数式とが一致すると判定した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定する、処理を実行し、
前記テストケースを生成すべきか否かを判定する処理は、
特定結果に基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定することを特徴とする付記１または２に記載のテストケース生成方法。
【０２４７】
（付記４）前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断し、かつ、前記第１の数式と前記第２の数式とが一致すると判定した場合、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定する、処理を実行し、
前記テストケースを生成すべきか否かを判定する処理は、
前記第１の条件式の否定と前記第２の条件式との論理積を真とする値が有ると特定した場合、前記第２のパスの動作をテストするテストケースを生成すべきであると判定し、
前記算出する処理は、
前記第２のパスの動作をテストするテストケースを生成すべきであると判定した場合、前記第１の条件式の否定と前記第２の条件式との論理積を真とする前記入力変数の値を算出することを特徴とする付記２に記載のテストケース生成方法。
【０２４８】
（付記５）前記判断する処理は、
前記第１のパスの動作をテストするテストケースの入力値を、前記第２のパスの条件式に与えた場合に前記第２の条件式が真となるか否かに基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断することを特徴とする付記１〜４のいずれか一つに記載のテストケース生成方法。
【０２４９】
（付記６）前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定し、
特定結果に基づいて、前記第２のパスが前記第１のプログラムに含まれるパス群のうちの前記第１のパスとは異なるパスに関連しないことを判断する、
処理を実行することを特徴とする付記１〜５のいずれか一つに記載のテストケース生成方法。
【０２５０】
（付記７）前記コンピュータが、
前記第２のパスが前記第１のパスに関連すると判断した場合、前記入力変数が取り得る値のうちの前記第１の条件式と前記第２の条件式の否定との論理積を真とする値の有無を特定するとともに、前記入力変数が取り得る値のうちの前記第１の条件式の否定と前記第２の条件式との論理積を真とする値の有無を特定し、
特定結果に基づいて、前記第２のプログラムに含まれるパス群のうちの前記第２のパスとは異なるパスが前記第１のパスに関連しないことを判断する、
処理を実行することを特徴とする付記１〜６のいずれか一つに記載のテストケース生成方法。
【０２５１】
（付記８）前記入力変数が取り得る値のうちの前記各々のパスが実行される条件となる前記入力変数の値を表す条件式と、前記各々のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す数式とを含み、
前記コンピュータが、
前記第１の実行結果に含まれるパスと前記第２のパスとの組ごとに、前記入力変数が取り得る値のうちの前記パスの条件式と前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記パスに関連するか否かを判断する、処理を実行し、
前記数式を判定する処理は、
前記組ごとに、取得した前記第１の実行結果に含まれる数式と、取得した前記第２の数式とが一致するか否かを判定し、
前記テストケースを生成すべきか否かを判定する処理は、
前記組ごとの判断情報と前記組ごとの判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定することを特徴とする付記１〜４のいずれか一つに記載のテストケース生成方法。
【０２５２】
（付記９）前記第２の実行結果は、前記第２のプログラムに含まれるパス群の各々のパスごとの、前記入力変数が取り得る値のうちの前記各々のパスが実行される条件となる前記入力変数の値を表す条件式と、前記各々のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す数式とを含み、
前記判断する処理は、
前記第１の実行結果に含まれるパスと前記第２の実行結果に含まれる各パスとの組ごとに、前記入力変数が取り得る値のうちの前記第１の実行結果に含まれるパスの条件式と前記第２の実行結果に含まれるパスとの論理積を真とする値の有無に基づいて、前記第２の実行結果に含まれるパスが前記第１の実行結果に含まれるパスに関連するか否かを判断し、
前記数式を判定する処理は、
前記第１の実行結果に含まれる各パスと前記第２の実行結果に含まれる各パスとの組合せの組ごとに、取得した前記第１の実行結果に含まれる数式と、取得した前記第２の実行結果に含まれる数式とが一致するか否かを判定し、
前記テストケースを生成すべきか否かを判定する処理は、
前記組ごとの判断結果と、前記組ごとの判定結果と、に基づいて、前記第２の実行結果に含まれるパスの動作をテストするテストケースを生成すべきか否かを判定することを特徴とする付記８に記載のテストケース生成方法。
【０２５３】
（付記１０）第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得する第１取得部と、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得する第２取得部と、
前記入力変数が取り得る値のうちの、前記第１取得部によって取得された前記第１の条件式と前記第２取得部によって取得された前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断するパス関連判断部と、
前記第１取得部によって取得された前記第１の数式と、前記第２取得部によって取得された前記第２の数式とが一致するか否かを判定する数式判定部と、
前記パス関連判断部による判断結果と前記数式判定部による判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する生成判定部と、
を有することを特徴とするテストケース生成装置。
【０２５４】
（付記１１）第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得する第１取得部と、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得する第２取得部と、
前記入力変数が取り得る値のうちの、前記第１取得部によって取得された前記第１の条件式と前記第２取得部によって取得された前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断するパス関連判断部と、
前記第１取得部によって取得された前記第１の数式と、前記第２取得部によって取得された前記第２の数式とが一致するか否かを判定する数式判定部と、
前記パス関連判断部による判断結果と前記数式判定部による判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する生成判定部と、
を有するコンピュータを含むことを特徴とするテストケース生成装置。
【０２５５】
（付記１２）コンピュータに、
第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、
前記入力変数が取り得る値のうちの、取得した前記第１の条件式と取得した前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断し、
取得した前記第１の数式と、取得した前記第２の数式とが一致するか否かを判定し、
判断結果と判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する、
処理を実行させることを特徴とするテストケース生成プログラム。
【０２５６】
（付記１３）第１のプログラムをシンボリック実行することにより、前記第１のプログラムに含まれる入力変数が取り得る値のうちの前記第１のプログラムに含まれる第１のパスが実行される条件となる前記入力変数の値を表す第１の条件式と、前記第１のパスが実行された場合に出力される前記第１のプログラムに含まれる出力変数を表す第１の数式と、を含む第１の実行結果を取得し、
前記第１のプログラムの一部が変更された第２のプログラムをシンボリック実行することにより、前記入力変数の取り得る値のうちの前記第２のプログラムに含まれる第２のパスが実行される条件となる前記入力変数の値を表す第２の条件式と、前記第２のパスが実行された場合に出力される前記第２のプログラムに含まれる出力変数を表す第２の数式と、を含む第２の実行結果を取得し、
前記入力変数が取り得る値のうちの、取得した前記第１の条件式と取得した前記第２の条件式との論理積を真とする値の有無に基づいて、前記第２のパスが前記第１のパスに関連するか否かを判断し、
取得した前記第１の数式と、取得した前記第２の数式とが一致するか否かを判定し、
判断結果と判定結果とに基づいて、前記第２のパスの動作をテストするテストケースを生成すべきか否かを判定する、
処理をコンピュータに実行させるテストケース生成プログラムを記録したことを特徴する記録媒体。
【符号の説明】
【０２５７】
１００、２７００  テストケース生成装置
７０１、８０１  シンボリック実行結果
９０１、２７０１  第１取得部
９０２、２７０２  第２取得部
９０３、２７０７  パス関連判断部
９０４、２７０８  関連情報作成部
９０５、２７０５  特定部
９０６、２７０９  数式判定部
９０７、２７１０  生成判定部
９０８  算出部
９０９  テストケース生成部
２７０３  テスト入力値判断部
２７０４  関連情報生成部
２７０６  組作成部
【図１】
2014191652.tif 000003
【図２】
2014191652.tif 000004
【図３】
2014191652.tif 000005
【図４】
2014191652.tif 000006
【図５】
2014191652.tif 000007
【図６】
2014191652.tif 000008
【図７】
2014191652.tif 000009
【図８】
2014191652.tif 000010
【図９】
2014191652.tif 000011
【図１０】
2014191652.tif 000012
【図１１】
2014191652.tif 000013
【図１２】
2014191652.tif 000014
【図１３】
2014191652.tif 000015
【図１４】
2014191652.tif 000016
【図１５】
2014191652.tif 000017
【図１６】
2014191652.tif 000018
【図１７】
2014191652.tif 000019
【図１８】
2014191652.tif 000020
【図１９】
2014191652.tif 000021
【図２０】
2014191652.tif 000022
【図２１】
2014191652.tif 000023
【図２２】
2014191652.tif 000024
【図２３】
2014191652.tif 000025
【図２４】
2014191652.tif 000026
【図２５】
2014191652.tif 000027
【図２６】
2014191652.tif 000028
【図２７】
2014191652.tif 000029
【図２８】
2014191652.tif 000030
【図２９】
2014191652.tif 000031
【図３０】
2014191652.tif 000032
【図３１】
2014191652.tif 000033
【図３２】
2014191652.tif 000034
【図３３】
2014191652.tif 000035
【図３４】
2014191652.tif 000036