(57)【特許請求の範囲】
【請求項１】
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成する生成部と、
前記生成部により抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定する決定部と、
前記決定部により型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成するように前記生成部を制御する制御部と、
を含むテストデータ生成装置。
【請求項２】
前記決定部は、前記パス条件を充足するテストデータが生成されていないパス条件に含まれるシンボル変数以外の定数の型を、前記シンボル変数の変更後の型として決定する請求項１記載のテストデータ生成装置。
【請求項３】
前記決定部は、パス条件を充足するテストデータが生成されるまで、複数種類の型から未選択の型を順次選択して、前記シンボル変数の変更後の型として決定する請求項２記載のテストデータ生成装置。
【請求項４】
前記制御部は、前記テスト対象のプログラムに対してシンボリック実行を行い、かつ該シンボリック実行の際に、前記決定部で決定された型のシンボル変数を与えるドライバ及びスタブを生成する請求項１〜請求項３のいずれか１項記載のテストデータ生成装置。
【請求項５】
コンピュータに、
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成し、
抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定し、
型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成する
ことを含む処理を実行させるテストデータ生成方法。
【請求項６】
コンピュータに、
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成し、
抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定し、
型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成する
ことを含む処理を実行させるテストデータ生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、テストデータ生成装置、テストデータ生成方法、及びテストデータ生成プログラムに関する。
【背景技術】
【０００２】
テスト対象のプログラム中の変数値を具体化せず、記号（シンボル変数）のままプログラムを実行し、条件文などを通過したときにシンボル変数が満たすべき論理的な制約をパス条件として抽出するシンボリック実行技術が存在する。シンボリック実行では、テスト対象プログラムを呼び出し、テスト対象プログラム内の関数に引数を与えるドライバと、テスト対象から呼び出される関数のダミー実装であり、呼び出された際に値を返却するスタブとが用いられる。ドライバから与えられる引数、及びスタブから返却される値をシンボル変数とすると、テスト対象プログラムのパスを網羅するテストデータを生成することができる。
【０００３】
ここで、プログラムは、プログラムに含まれる変数に適切な型が定義されていない場合には、正しく動作しない。これは、上述のシンボリック実行に用いられるドライバ及びスタブも同様であり、ドライバは、適切な型の値を引数として与える必要があり、スタブは、適切な型の値を返却する必要がある。
【０００４】
プログラムのテストデータの生成に関し、変数の型を考慮した技術として、プログラムに特定の処理パスを実行させる条件の情報から，制約ソルバに入力する記述のデータを生成する方法が提案されている。この方法では、数値型の変数に対応する比較用の変数を定義し、数値型の変数と文字列型の変数との比較条件の制約については、数値型の変数の代わりに比較用の変数を用いた制約を設定する。
【０００５】
また、テスト対象のプログラムへ入力されるオブジェクト型変数の状態を示す制御変数を含むシンボル変数を用いたシンボリック実行により第１のテストケースを生成する方法が提案されている。この方法では、第１のテストケースのパス条件から制御変数が満たすべき条件を省き、オブジェクト型変数が状態として満たすべき条件を加えた第２のテストケースを生成し、同義である第２のテストケースの省いた第３のテストケースを抽出する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−２５４４１２号公報
【特許文献２】特開２０１４−６６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、例えば、動的に型付けを行う言語で記述されたプログラムや、既定の変数の型が与えられていないか、又は誤った変数の型が与えられたプログラムでは、期待する型とは異なる型の値が入力される場合がある。このような場合には、従来技術では、テストデータを生成することができない。
【０００８】
開示の技術は、一つの側面として、シンボル変数の型を考慮した網羅性の高いテストデータを生成することを目的とする。
【課題を解決するための手段】
【０００９】
開示の技術は、一つの態様として、テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成する生成部を備える。また、開示の技術は、前記生成部により抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定する決定部を備える。さらに、開示の技術は、前記決定部により型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成するように前記生成部を制御する制御部を備える。
【発明の効果】
【００１０】
開示の技術は、一つの側面として、シンボル変数の型を考慮した網羅性の高いテストデータを生成することができる、という効果を有する。
【図面の簡単な説明】
【００１１】
【図１】本実施形態に係るテストデータ生成装置の概略構成を示す機能ブロック図である。
【図２】変数の型に関するコメントが記述されたプログラムの一例を示す図である。
【図３】コメントに基づいて変数の型を定義したドライバ、及びｎｕｌｌを考慮したドライバの一例を示す図である。
【図４】型の不一致により実行されない条件文を含むプログラムの一例を示す図である。
【図５】本実施形態に係るテストデータ生成装置として機能するコンピュータの概略構成を示す機能ブロック図である。
【図６】本実施形態におけるテストデータ生成処理の一例を示すフローチャートである。
【図７】テスト対象プログラムの一例を示す図である。
【図８】初期のドライバ及びテストデータの生成結果を示す図である。
【図９】シンボル変数の型変更後のドライバ及びテストデータの生成結果を示す図である。
【図１０】シンボル変数の型変更後のドライバ及びテストデータの生成結果を示す図である。
【発明を実施するための形態】
【００１２】
まず、実施形態の詳細を説明する前に、シンボリック実行技術におけるシンボル変数の型について説明する。
【００１３】
プログラムが適切に動作するためには、変数に適切な型が定義されていることが必要である。シンボリック実行時においては、ドライバから与える引数、及びスタブから返却される値に、適切な型が定義されている必要がある。そこで、テスト対象プログラム内のソースコード内のコメント（アノテーション）に記述された内容から変数の型を取得して、適切な型が定義された変数を与えることができるドライバ及びスタブを生成することが考えられる。例えば、図２に示すようなテスト対象プログラム１３１Ａのコメント部分（図２中の破線Ｐの部分）から、変数ｓ１及びｓ２は文字列（Ｓｔｒｉｎｇ型）であると言うことを読み取り、図３の上段に示すようなドライバ１２２Ａを生成する。
【００１４】
しかし、図２に示すテスト対象プログラム１３１Ａでは、変数ｓ１及びｓ２がｎｕｌｌの場合についても考慮する必要があるが、ドライバ１２２Ａから与えられる変数ｓ１及びｓ２の型は文字列である。そのため、変数ｓ１及びｓ２がｎｕｌｌであることを考慮したテストデータを生成することができない。
【００１５】
この問題に対し、例えば、図３の下段に示すドライバ１２２Ｂのように、変数ｓ１及びｓ２がｎｕｌｌの場合に真となるシンボル変数（＊＿ｉｓＮｕｌｌ）を定義することが考えられる。ドライバ１２２Ｂでは、ｓ？＿ｉｓＮｕｌｌが真ならｎｕｌｌを、偽ならｓ？＿ｂｏｄｙを代入することが定義されている。これにより、シンボル変数がｎｕｌｌである場合も含めたテストデータを生成することができる。
【００１６】
しかし、例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）などの動的に型付けを行う言語で記述されたプログラムでは、プログラムの実行時に変数の型を決める。また、プログラム設計の早期段階では、入力される値の型が確定していない場合もある。そのため、図２に示すようなテスト対象プログラム１３１Ａ内のコメントを利用して、適切な型が定義された値を与えるドライバ及びスタブを生成することは困難である。例えば、図４に示すテスト対象プログラム１３１Ｂでは、破線Ｑで示す条件文は、変数ｓ２が数値の場合にのみ実行可能である。しかし、上述したドライバ１２２Ａを用いた場合には、変数ｓ２の型は文字列で設定されているため、この条件文を実行することができず、この条件文を通過するテストデータを生成することができない。また、ドライバ１２２Ｂについても、ｎｕｌｌ値を考慮してシンボル変数の型を定義しているが、期待する型とは全く違う型の値が入力された場合には、テストデータを生成することができず、テストを実行できないパスが存在することになってしまう。
【００１７】
そこで、本実施形態では、テストデータが生成されないパス条件に含まれるシンボル変数の型を変更することで、網羅性の高いテストデータを生成する。
【００１８】
以下、図面を参照して、開示の技術に関する実施形態の一例を詳細に説明する。
【００１９】
図１に示すように、本実施形態に係るテストデータ生成装置１０は、テスト対象プログラム３１を入力として受け付け、シンボリック実行によりテストデータ３５を生成して出力する。
【００２０】
テストデータ生成装置１０は、図１に示すように、機能的には、シンボリック実行部１１と、決定部１２と、ドライバ・スタブ生成部１３とを含む。なお、シンボリック実行部１１は、開示の技術の生成部の一例であり、ドライバ・スタブ生成部１３は、開示の技術の制御部の一例である。
【００２１】
シンボリック実行部１１は、テスト対象プログラム３１に対して、ドライバ・スタブ生成部１３で生成されたドライバ及びスタブを用いてシンボリック実行を行い、パス条件を抽出して、抽出したパス条件を充足するテストデータを生成する。また、シンボリック実行部１１は、テストデータを生成することができなかったパス条件（以下、「未網羅のパス条件」という）を、決定部１２に通知する。
【００２２】
決定部１２は、未網羅のパス条件に基づいて、その未網羅のパス条件に含まれるシンボル変数の変更後の型を決定する。シンボル変数のとりうる型は、シンボル変数型集合１５として予め定めておく。本実施形態では、説明を簡単にするため、シンボル変数の取りうる型は、文字列（Ｓｔｒｉｎｇ型）、数値（Ｎｕｍｂｅｒ型）、及びｎｕｌｌの３つである場合について説明する。
【００２３】
決定部１２は、具体的には、未網羅のパス条件に含まれるシンボル変数を、型を変更するシンボル変数として特定する。そして、決定部１２は、未網羅のパス条件に含まれるシンボル変数以外の定数の型を、特定したシンボル変数の変更後の型として決定する。例えば、未網羅のパス条件が、「ｓ１＝＝１（数値）」の場合、決定部１２は、型を変更するシンボル変数として「ｓ１」を特定し、変更後の型を「数値」に決定する。
【００２４】
また、決定部１２は、シンボル変数の型変更後もテストデータが生成できない場合には、シンボル変数の型の変更を繰り返すように、シンボル変数型集合１５から１つずつ型を選択して、特定したシンボル変数の変更後の型として決定する。例えば、決定部１２は、シンボル変数型集合１５に含まれる型について、例えば、文字列→数値→ｎｕｌｌのように予め定めた順番に従って、未選択の型を選択して、特定したシンボル変数の変更後の型を決定することができる。また、決定部１２は、未網羅のパス条件から複数のシンボル変数を特定した場合には、各シンボル変数の型の組み合わせを順次変更する。例えば、特定したシンボル変数がｓ１及びｓ２の２つの場合、（ｓ１の型，ｓ２の型）として、（文字列，文字列）→（文字列，数値）→（文字列，ｎｕｌｌ）→（数値，文字列）→・・・→（ｎｕｌｌ，ｎｕｌｌ）のような型の組み合わせの順番を予め定めておく。そして、決定部１２は、この順番に従って、未選択の型の組合せを選択して、特定したシンボル変数の変更後の型を決定することができる。
【００２５】
また、決定部１２は、型を変更するシンボル変数、及び変更後の型を、ドライバ・スタブ生成部１３に通知する。
【００２６】
ドライバ・スタブ生成部１３は、テスト対象プログラム３１を解析して、テスト対象プログラム３１のシンボリック実行に用いるドライバ及びスタブを生成する。また、ドライバ・スタブ生成部１３は、決定部１２からの通知に基づいて、シンボル変数の型を変更したドライバ及びスタブを生成する。ドライバ・スタブ生成部１３は、生成したドライバ及びスタブをシンボリック実行部１１へ受け渡す。
【００２７】
テストデータ生成装置１０は、例えば、図５に示すコンピュータ４０で実現することができる。コンピュータ４０はＣＰＵ４１、一時記憶領域としてのメモリ４２、及び不揮発性の記憶部４３を備える。また、コンピュータ４０は、表示装置及び入力装置等の入出力装置４４、記録媒体４９に対するデータの読み込みと書き込みとを制御するｒｅａｄ／ｗｒｉｔｅ（Ｒ／Ｗ）部４５、及びインターネット等のネットワークに接続されるネットワークＩ／Ｆ４６を備える。ＣＰＵ４１、メモリ４２、記憶部４３、入出力装置４４、Ｒ／Ｗ部４５、及びネットワークＩ／Ｆ４６は、バス４７を介して互いに接続される。
【００２８】
記憶部４３は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（solid state drive）、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部４３には、コンピュータ４０をテストデータ生成装置１０として機能させるためのテストデータ生成プログラム５０が記憶される。
【００２９】
ＣＰＵ４１は、テストデータ生成プログラム５０を記憶部４３から読み出してメモリ４２に展開し、テストデータ生成プログラム５０が有するプロセスを順次実行する。テストデータ生成プログラム５０は、シンボリック実行プロセス５１と、決定プロセス５２と、ドライバ・スタブ生成プロセス５３とを有する。ＣＰＵ４１は、シンボリック実行プロセス５１を実行することで、図１に示すシンボリック実行部１１として動作する。また、ＣＰＵ４１は、決定プロセス５２を実行することで、図１に示す決定部１２として動作する。また、ＣＰＵ４１は、ドライバ・スタブ生成プロセス５３を実行することで、図１に示すドライバ・スタブ生成部１３として動作する。これにより、テストデータ生成プログラム５０を実行したコンピュータ４０が、テストデータ生成装置１０として機能することになる。
【００３０】
なお、テストデータ生成プログラム５０により実現される機能は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【００３１】
次に、本実施形態に係るテストデータ生成装置１０の作用について説明する。テストデータ生成装置１０にテスト対象プログラム３１が入力されると、テストデータ生成装置１０において、図６に示すテストデータ生成処理が実行される。なお、ここでは、図７に示すようなテスト対象プログラム３１が入力されるものとする。図７に示すテスト対象プログラム３１では、変数ｓ１及びｓ２の型は文字列（Ｓｔｒｉｎｇ型）である旨のコメントが記述されている（図７中の破線Ｒ）。
【００３２】
図６に示すテストデータ生成処理のステップＳ１１で、ドライバ・スタブ生成部１３が、テスト対象プログラム３１から、初期のドライバ及びスタブｄ（０）を生成する。ここでは、テスト対象プログラム３１のコメントに基づいて、ドライバ・スタブ生成部１３は、図８の上段に示すように、変数ｓ１及びｓ２の各々を、文字列（Ｓｔｒｉｎｇ型）のシンボル変数として定義したドライバ２２Ａを生成する。なお、スタブについては図示を省略する。そして、ドライバ・スタブ生成部１３は、生成した初期のドライバ・スタブｄ（０）をシンボリック実行部１１へ受け渡す。シンボリック実行部１１では、初期のドライバ・スタブｄ（０）を用いて、テスト対象プログラム３１に対してシンボリック実行を行い、パス条件を抽出して、抽出したパス条件を充足するテストデータを生成する。
【００３３】
図８の下段に、ドライバ２２Ａを用いたシンボリック実行によるテストデータの生成結果２３Ａを示す。この生成結果２３Ａが示すように、テスト対象プログラム３１からは、４つのパス条件（Ｎｏ．１〜４）が抽出される。現段階では、シンボル変数ｓ１及びｓ２の各々の型は文字列であるため、シンボリック実行部１１は、Ｎｏ．２及びＮｏ．３のパス条件の各々を充足するテストデータを生成することができる。しかし、Ｎｏ．１の「ｓ２＝＝１（数値）」とのパス条件は、現段階のシンボル変数ｓ２の型が文字列であることから、型不一致となり、シンボリック実行部１１は、パス条件を充足するテストデータを生成することができない。同様に、Ｎｏ．４の「ｓ１＝＝ｎｕｌｌ」とのパス条件も、現段階のシンボル変数ｓ１の型が文字列であることから、型不一致となり、シンボリック実行部１１は、パス条件を充足するテストデータを生成することができない。すなわち、Ｎｏ．１及びＮｏ．４のパス条件の各々が「未網羅のパス条件」となる。シンボリック実行部１１は、Ｎｏ．１及びＮｏ．４のパス条件の各々が未網羅のパス条件であることを決定部１２に通知する。
【００３４】
なお、図８に示すテストデータの生成結果２３Ａを、図７に示すテスト対象プログラム３１に対応させると、Ｎｏ．２及びＮｏ．３の部分のテストを実行するためのテストデータが生成されたことを示す。一方、Ｎｏ．１及びＮｏ．４の部分のテストを実行するためのテストデータは生成されていないことを示す。
【００３５】
次に、ステップＳ１２で、決定部１２が、シンボリック実行部１１から通知された未網羅のパス条件のうち、後述するシンボル変数の型変更の処理を未実施の未網羅のパス条件が存在するか否かを判定する。シンボル変数の型変更の処理が未実施の未網羅のパス条件が存在する場合には、処理はステップＳ１３へ移行する。
【００３６】
ステップＳ１３では、決定部１２が、シンボル変数の型変更の処理が未実施の未網羅のパス条件から１つを処理対象のパス条件として選択する。ここでは、Ｎｏ．１のパス条件が選択されるものとする。次に、ステップＳ１４で、決定部１２が、シンボル変数の型の変更回数を示す変数ｉを０に設定し、次に、ステップＳ１５で、決定部１２が、変数ｉを１インクリメントする。
【００３７】
次に、ステップＳ１６で、決定部１２が、処理対象のパス条件に含まれるシンボル変数を、型を変更するシンボル変数として特定する。ここでは、Ｎｏ．１のパス条件に含まれる「ｓ２」が型を変更するシンボル変数として特定される。そして、決定部１２は、処理対象のパス条件に含まれるシンボル変数「ｓ２」以外の定数である「１」の型「数値（Ｎｕｍｂｅｒ型）」を、シンボル変数「ｓ２」の変更後の型として決定する。決定部１２は、型を変更するシンボル変数、及び決定した変更後の型を、ドライバ・スタブ生成部１３に通知する。
【００３８】
次に、ステップＳ１７で、ドライバ・スタブ生成部１３が、決定部１２からの通知に基づいて、シンボル変数の型を変更したドライバ・スタブｄ（ｉ）を生成する。なお、ｄ（ｉ）は、シンボル変数の型がｉ回変更されたドライバ・スタブであることを表す。シンボル変数の数をｊ、シンボル変数がとりうる型の種類数（シンボル変数型集合１５に含まれる型の数）をｋとした場合、ｉは、ｉ＝０，１，・・・，Ｎ−１（Ｎ＝ｊ×ｋ）である。
【００３９】
ここでは、ドライバ・スタブ生成部１３が、決定部１２からの通知に基づいて、図９の上段に示すように、シンボル変数ｓ２の型を、文字列（Ｓｔｒｉｎｇ型）から数値（Ｎｕｍｂｅｒ型）に変更したドライバ２２Ｂを生成する。そして、ドライバ・スタブ生成部１３は、生成したドライバ２２Ｂをシンボリック実行部１１へ受け渡す。シンボリック実行部１１では、ドライバ２２Ｂを用いて、処理対象のパス条件を充足するテストデータを生成する。
【００４０】
図９の下段に、ドライバ２２Ｂによるテストデータの生成結果２３Ｂを示す。シンボル変数ｓ２の型を数値に変更したことにより、Ｎｏ．１のパス条件を充足するテストデータが生成できる。これにより、図７に示すテスト対象プログラム３１のＮｏ．２及びＮｏ．３の部分に加え、Ｎｏ．１の部分のテストを実行するためのテストデータが生成されたことを示す。
【００４１】
次に、ステップＳ１８で、シンボリック実行部１１が、処理対象のパス条件を充足するテストデータが生成された否かを判定する。処理対象のパス条件を充足するテストデータが生成された場合には、処理はステップＳ１２に戻り、生成されていない場合には、処理はステップＳ１９へ移行する。ステップＳ１９では、決定部１２が、ｉがＮ−１より小さいか否か、すなわち、さらに変更可能な型が存在するか否かを判定する。ｉ＜Ｎ−１の場合には、処理はステップＳ１５に戻り、ｉ≧Ｎ−１の場合には、処理はステップＳ１２に戻る。ここでは、処理対象のＮｏ．１のパス条件を充足するテストデータが生成されたため、処理はステップＳ１２に戻り、次のステップＳ１３で、Ｎｏ．４のパス条件が、次の処理対象のパス条件として選択される。
【００４２】
そして、ステップＳ１６で、決定部１２が、処理対象のＮｏ．４のパス条件に含まれる「ｓ１」を、型を変更するシンボル変数として特定し、処理対象のパス条件から、「ｎｕｌｌ」を、シンボル変数「ｓ１」の変更後の型として決定する。決定部１２は、型を変更するシンボル変数、及び決定した変更後の型を、ドライバ・スタブ生成部１３に通知する。
【００４３】
次に、ステップＳ１７で、ドライバ・スタブ生成部１３が、決定部１２からの通知に基づいて、図１０の上段に示すように、シンボル変数ｓ１の型を、文字列（Ｓｔｒｉｎｇ型）からｎｕｌｌに変更したドライバ２２Ｃを生成する。そして、ドライバ・スタブ生成部１３は、生成したドライバ２２Ｃをシンボリック実行部１１へ受け渡す。シンボリック実行部１１では、ドライバ２２Ｃを用いて、処理対象のパス条件を充足するテストデータを生成する。
【００４４】
図１０の下段に、ドライバ２２Ｃによるテストデータの生成結果２３Ｃを示す。シンボル変数ｓ１の型をｎｕｌｌに変更したことにより、Ｎｏ．４のパス条件を充足するテストデータが生成できる。これにより、図７に示すテスト対象プログラム３１のＮｏ．１〜Ｎｏ．３の部分に加え、Ｎｏ．４の部分のテストを実行するためのテストデータが生成されたことを示す。すなわち、テスト対象プログラム３１に含まれる全てのパスを網羅するテストデータが生成されたことを示す。
【００４５】
ステップＳ１２で否定判定されると、処理はステップＳ２０へ移行し、シンボリック実行部１１が、生成されたテストデータ３５を出力して、テストデータ生成処理は終了する。
【００４６】
なお、上記のテストデータ生成処理では、処理対象のパス条件についてテストデータが生成されるまで、シンボル変数がとりうる型の各々への変更を試みる場合について説明したが、これに限定されない。型の変更処理の実施回数を所定回数に制限してもよい。
【００４７】
以上説明したように、本実施形態に係るテストデータ生成装置によれば、パス条件を充足するテストデータが生成されなかった場合には、そのパス条件に含まれるシンボル変数の型を、そのパス条件に含まれる他の定数の型に変更する。それでもテストデータが生成されなかった場合には、シンボル変数の型を、シンボル変数がとりうる型の中から選択した型に順次変更していく。これにより、予め決められた型のシンボル変数を用いたシンボリック実行によりテストデータを生成する場合に比べ、網羅性の高いテストデータを生成することができる。
【００４８】
特に、動的に型付けが行われる言語で記述され、変数の型が変更されるプログラムをテスト対象プログラムとする場合に有効である。また、既定の変数の型が与えられていないか、又は誤った変数の型が与えられたプログラムを対象とする場合にも、未網羅のパス条件からシンボル変数の型を変更するため、網羅性の高いテストデータを生成することができる。したがって、変数の型が確定していないプログラム設計の早期段階からシンボリック実行によるテストを行うことが可能となる。
【００４９】
また、図３に示すドライバ１２２Ｂのようにｎｕｌｌ値を考慮したドライバの場合、どのような場合もｎｕｌｌか否かを考慮してシンボル変数の型を定義する。そのため、シンボリック実行時に必要なメモリや、ドライバ及びスタブのコードが大きくなるという問題もある。本実施形態によれば、一回毎のシンボリック実行では、１つのシンボル変数の型について、ｎｕｌｌか否かを判定したり、その判定結果に応じて複数の型を考慮したりしないため、一度に必要なメモリや、ドライバ及びスタブのコードサイズを抑えることができる。
【００５０】
また、上記では、テストデータ生成プログラム５０が記憶部４３に予め記憶（インストール）されている態様を説明したが、これに限定されない。開示の技術に係るプログラムは、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＵＳＢメモリ等の記録媒体に記録された形態で提供することも可能である。
【００５１】
以上の実施形態に関し、更に以下の付記を開示する。
【００５２】
（付記１）
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成する生成部と、
前記生成部により抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定する決定部と、
前記決定部により型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成するように前記生成部を制御する制御部と、
を含むテストデータ生成装置。
【００５３】
（付記２）
前記決定部は、前記パス条件を充足するテストデータが生成されていないパス条件に含まれるシンボル変数以外の定数の型を、前記シンボル変数の変更後の型として決定する付記１記載のテストデータ生成装置。
【００５４】
（付記３）
前記決定部は、パス条件を充足するテストデータが生成されるまで、複数種類の型から未選択の型を順次選択して、前記シンボル変数の変更後の型として決定する付記２記載のテストデータ生成装置。
【００５５】
（付記４）
前記制御部は、前記テスト対象のプログラムに対してシンボリック実行を行い、かつ該シンボリック実行の際に、前記決定部で決定された型のシンボル変数を与えるドライバ及びスタブを生成する付記１〜付記３のいずれか１項記載のテストデータ生成装置。
【００５６】
（付記５）
コンピュータに、
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成し、
抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定し、
型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成する
ことを含む処理を実行させるテストデータ生成方法。
【００５７】
（付記６）
前記シンボル変数の変更後の型を決定する処理では、前記パス条件を充足するテストデータが生成されていないパス条件に含まれるシンボル変数以外の定数の型を、前記シンボル変数の変更後の型として決定する付記５記載のテストデータ生成方法。
【００５８】
（付記７）
前記シンボル変数の変更後の型を決定する処理では、パス条件を充足するテストデータが生成されるまで、複数種類の型から未選択の型を順次選択して、前記シンボル変数の変更後の型として決定する付記６記載のテストデータ生成方法。
【００５９】
（付記８）
再度テストデータを生成する処理では、前記テスト対象のプログラムに対してシンボリック実行を行い、かつ該シンボリック実行の際に、決定された型のシンボル変数を与えるドライバ及びスタブを生成することを含む付記５〜付記７のいずれか１項記載のテストデータ生成方法。
【００６０】
（付記９）
コンピュータに、
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成し、
抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定し、
型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成する
ことを含む処理を実行させるテストデータ生成プログラム。
【００６１】
（付記１０）
前記シンボル変数の変更後の型を決定する処理では、前記パス条件を充足するテストデータが生成されていないパス条件に含まれるシンボル変数以外の定数の型を、前記シンボル変数の変更後の型として決定する付記９記載のテストデータ生成プログラム。
【００６２】
（付記１１）
前記シンボル変数の変更後の型を決定する処理では、パス条件を充足するテストデータが生成されるまで、複数種類の型から未選択の型を順次選択して、前記シンボル変数の変更後の型として決定する付記１０記載のテストデータ生成プログラム。
【００６３】
（付記１２）
再度テストデータを生成する処理では、前記テスト対象のプログラムに対してシンボリック実行を行い、かつ該シンボリック実行の際に、決定された型のシンボル変数を与えるドライバ及びスタブを生成することを含む付記９〜付記１１のいずれか１項記載のテストデータ生成プログラム。
【００６４】
（付記１３）
コンピュータに、
テスト対象のプログラムに対して、シンボル変数を用いたシンボリック実行により、パス条件を抽出すると共に、抽出したパス条件を充足するテストデータを生成し、
抽出されたパス条件のうち、該パス条件を充足するテストデータが生成されていないパス条件に基づいて、該パス条件に含まれるシンボル変数の変更後の型を決定し、
型が変更されたシンボル変数を用いて、前記パス条件を充足するテストデータが生成されていないパス条件について、再度テストデータを生成する
ことを含む処理を実行させるテストデータ生成プログラムを記憶した記憶媒体。
【符号の説明】
【００６５】
１０   テストデータ生成装置
１１   シンボリック実行部
１２   決定部
１３   ドライバ・スタブ生成部
１５   シンボル変数型集合
２２Ａ、２２Ｂ、２２Ｃ      ドライバ
３１   テスト対象プログラム
３５   テストデータ
４０   コンピュータ
４１   ＣＰＵ
４２   メモリ
４３   記憶部
４９   記録媒体
５０   テストデータ生成プログラム
【図１】
0006497271.tif 000002
【図２】
0006497271.tif 000003
【図３】
0006497271.tif 000004
【図４】
0006497271.tif 000005
【図５】
0006497271.tif 000006
【図６】
0006497271.tif 000007
【図７】
0006497271.tif 000008
【図８】
0006497271.tif 000009
【図９】
0006497271.tif 000010
【図１０】
0006497271.tif 000011