(57)【要約】【課題】回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供する。【解決手段】変更前後のプログラムを格納する格納部１０２、１０３と、変更前プログラムに実行したテストケースとステートメントを実行情報として格納する格納部１０４と、テストケースで出力される変数である期待値を格納する格納部１０５と、変更前後のプログラムで異なるステートメントを差異ステートメントとして求める取得部１０６と、差異ステートメントから影響を受けるステートメントを依存関係分析結果として求める分析部１０７と、実行情報のステートメントと期待値と差異ステートメントと依存関係分析結果を用いて、変更前後のプログラムで期待値の値を変える可能性のあるテストケースを、回帰テストで実行するテストケースとして選択する選択部１０９を備える。【選択図】図１
2016164727.tif 000002
【特許請求の範囲】
【請求項１】
テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、
変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、
前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、
前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、
前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、
前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、
前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備え、
前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する、
ことを特徴とするテストケース選択装置。
【請求項２】
前記テストケース選択部は、
前記テストケース実行情報の前記テストケースから１つのテストケースを選び、
選んだ前記テストケースで実行した前記ステートメントに含まれる前記差異ステートメントを求め、
前記テストケース期待値情報から、選んだ前記テストケースの前記期待値の変数を取り出し、
求めた前記差異ステートメントから影響を受ける前記ステートメントを、前記依存関係分析結果を利用して求め、
求めた前記差異ステートメントと前記依存関係分析結果を利用して求めた前記ステートメントとから、取り出した前記期待値の変数の値を変えるステートメントを求めることで、
前記期待値の変数の値を変える可能性のあるテストケースを求める請求項１に記載のテストケース選択装置。
【請求項３】
前記テストケース選択部は、
取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、選んだ前記テストケースを実行すると、求めた前記差異ステートメントから影響を受けるか否かを、前記依存関係分析結果を利用して求め、
取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、求めた前記差異ステートメントから影響を受ける場合には、選んだ前記テストケースを、前記回帰テストの際に実行する前記テストケースとして選択する請求項２に記載のテストケース選択装置。
【請求項４】
前記プログラム依存関係分析部は、少なくとも変数による影響と条件分岐による影響とを調べることで、前記差異ステートメントから影響を受けるステートメントを求める請求項１に記載のテストケース選択装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの回帰テストの際に再実行が必要なテストケースを選択することができるテストケース選択装置に関する。
【背景技術】
【０００２】
プログラムを修正した際、修正箇所以外に意図しない影響が波及していないか、すなわち、修正によりプログラムに不具合が生じていないかを確認するテストを回帰テストと呼ぶ。回帰テストの最も単純な実施形態では、事前に用意したテストケースを全て再テストする。しかし、この場合には、ソフトウェアの規模が大きくなるほど、テストケースを全て再テストするのに大きな工数が必要となり、回帰テストの効率が低下するという課題がある。また、テスト工数が大きいという理由で、製品リリースまでに繰り返される個々の修正についての再テストを先延ばしにすると、重要な不具合を開発後期まで見落とす可能性が高い。このため、既存のテストケースのうち再テストが必要なもののみを選択して実行することで回帰テストの工数を削減する回帰テスト選択が一般に行われている。
【０００３】
回帰テスト選択手法の一例として、テストケースがプログラムのどのステートメントを実行するかを予め記録しておき、修正箇所を実行するテストケースを自動的に選択する方法がある。特許文献１には、これと同様の方法を用いた回帰テスト選択手法の例が記載されている。特許文献１に記載されたシステムと方法では、修正した箇所に関連のあるステートメントを優先度（依存関係の強さ）に応じて抽出し、抽出したステートメントと関連付けられたテストケースを実行することで、回帰テストを効率化している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２０４４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
大規模なソフトウェア開発においては回帰テストの工数が非常に大きくなる傾向があることを鑑みると、回帰テスト選択手法では、再テストするテストケースの数をできる限り削減することが望ましい。とりわけ、ソフトウェアの最終的な品質を確認するテストとは別にプログラムの修正毎に回帰テストを実施する際には、テストケースの数の削減が必須である。
【０００６】
しかしながら、特許文献１に記載の技術のように修正箇所や修正に関連のある箇所（修正の影響を受ける箇所）を実行するテストケースを選択する方法には、プログラムの不具合を発見できないテストケースを多数選択してしまうという課題がある。例えば、プログラムの初期化処理のように多くのテストケースが共通して実行する箇所に修正があった場合には、回帰テストで実行するテストケースの数をほとんど削減することができない。そのうえ、このような修正箇所を実行するテストケースのうち、初期化処理そのものや修正した初期化処理に影響を受ける箇所をテストしているものを除けば、大半のテストケースは、実行してもプログラムの不具合を発見できないテストケースである。
【０００７】
このように、従来の回帰テスト選択手法では、回帰テストで実行するテストケースの数を削減できない場合があり、このような場合にプログラムのテスト工程の効率が低下するという課題がある。
【０００８】
本発明は、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明によるテストケース選択装置は、次のような特徴を備える。テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備える。前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する。
【発明の効果】
【００１０】
本発明によると、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施例によるテストケース選択装置の構成の一例を示す図。
【図２】変更前プログラム格納部に格納された変更前プログラムの一例を示す図。
【図３】変更後プログラム格納部に格納された変更後プログラムの一例を示す図。
【図４】テストケース実行情報格納部に格納されたテストケース実行情報の一例を示す図。
【図５】テストケース期待値情報格納部に格納されたテストケース期待値情報の一例を示す図。
【図６】プログラム差異取得部が実行する処理手順の一例を示す図。
【図７】プログラム依存関係分析部が実行する処理手順の一例を示す図。
【図８】依存分析結果格納部に格納された依存関係分析結果の一例を示す図。
【図９】図８に示した依存関係を可視化した依存解析結果グラフ。
【図１０】テストケース選択部が実行する処理手順の一例を示す図。
【図１１】テストケース選択装置のハードウェア構成の一例を示す図。
【発明を実施するための形態】
【００１２】
本発明によるテストケース選択装置は、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにすることで、再実行が必要として選択するテストケースの数を減らし、回帰テストの効率を高めることができる。
【００１３】
ここで、再実行する価値があるテストケース、つまり、プログラムの修正によって生じた不具合を発見可能なテストケースとは何かについて詳細を述べる。
【００１４】
テストケースは、プログラムが期待されている動作を実行するか否かを調べるために実行され、プログラムを実行する手順（テストケースで実行するステートメントとその実行する順序）と、その手順を実行する際に必要な入力変数とその値と、その手順を実行した際に得られる出力変数とその値（期待値）で定義される。「テストケースを実行する」とは、テストケースで定義されているステートメントを実行することである。通常は、複数のテストケースが予め定義される。
【００１５】
テストケースを実行した際に出力される変数とその値は、「期待値」と呼ばれる。期待値は、テストケース毎に定められる。すなわち、テストケースに応じて、期待値が設定される。
【００１６】
従って、プログラムの修正によって生じた不具合は、テストケースの実行結果すなわち特定のプログラム出力と、そのテストケースに定められた期待値との間に差異があった場合に発見される。このことから、不具合を発見可能なテストケースとは、修正の影響がプログラム出力に及び、その結果、プログラム出力とこれに対応する期待値との間に差異が生じるテストケースである。
【００１７】
従来の方法で不具合を発見できないテストケースを多数選択してしまう理由として、上述した、テストケースに定められた期待値についての情報を利用していないことが挙げられる。
【００１８】
本発明によるテストケース選択装置では、テストケースに定められた期待値についての情報を利用し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か（プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か）をテストケース選択時の判断基準として用いる。このようにして、本発明によるテストケース選択装置では、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにし、回帰テストの効率を高める。
【００１９】
以下、図面を参照し、本発明の実施例によるテストケース選択装置を説明する。
【００２０】
図１は、本発明の実施例によるテストケース選択装置１０１の構成の一例を示す図である。テストケース選択装置１０１は、変更前プログラム格納部１０２、変更後プログラム格納部１０３、テストケース実行情報格納部１０４、テストケース期待値情報格納部１０５、プログラム差異取得部１０６、プログラム依存関係分析部１０７、依存分析結果格納部１０８、テストケース選択部１０９、及びユーザインターフェイス（Ｉ／Ｆ）部１１０を備える。テストケース選択装置１０１は、例えば、コンピュータで構成することができる。
【００２１】
変更前プログラム格納部１０２は、変更（修正）される前のプログラムソースコード（変更前プログラム）を格納する。変更後プログラム格納部１０３は、変更前プログラムの一部に変更がされたプログラムソースコード（変更後プログラム）を格納する。テストケース選択装置１０１は、変更前プログラムと変更後プログラムを入力し、変更前プログラムを変更前プログラム格納部１０２に、変更後プログラムを変更後プログラム格納部１０３に、それぞれ格納する。
【００２２】
テストケース実行情報格納部１０４は、変更前プログラムに対して実行したテストケースと、各テストケースで実行したステートメントとを、テストケース実行情報Ｔとして格納する。テストケース実行情報Ｔは、事前に変更前プログラムに対して各テストケースを実行することで得られ、テストケース実行情報格納部１０４に予め格納される。
【００２３】
テストケース期待値情報格納部１０５は、各テストケースに定められた期待値とこの期待値に関連するプログラム出力の情報とを、テストケース期待値情報Ｅとして格納する。テストケース期待値情報Ｅは、各テストケースを定義したときに得られる情報であり、テストケース期待値情報格納部１０５に予め格納される。
プログラム差異取得部１０６は、変更前プログラムと変更後プログラムを入力し、これらのプログラムを比較、分析して差異ステートメントを求める。差異ステートメントについては、図６を用いて後述する。
【００２４】
プログラム依存関係分析部１０７は、差異ステートメントを入力し、差異ステートメントに対して依存関係を持つステートメントを求めて、依存関係を分析する。依存関係を持つステートメントとその分析結果は、依存関係分析結果Ｇとして、依存分析結果格納部１０８に格納される。依存関係については、図７を用いて後述する。
【００２５】
テストケース選択部１０９は、変更前プログラムと変更後プログラムとで期待値の変数の値を変える可能性のあるテストケースを、変更後プログラムの回帰テストの際に実行するテストケースとして選択する。具体的には、テストケース選択部１０９は、テストケース実行情報Ｔ、テストケース期待値情報Ｅ、及び依存関係分析結果Ｇを入力し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か（プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か）の判断に基づき、再実行が必要なテストケースを選択する。
【００２６】
ユーザインターフェイス部１１０は、テストケース選択装置１０１の処理結果やユーザ１１１からの指示を伝達するための手段を提供する。ユーザインターフェイス部１１０は、例えば、コンピュータのマウスやキーボードなどの入力装置、ディスプレイやプリンタなどの出力装置、及びこれらを制御するプログラムで構成することができる。
【００２７】
図２は、変更前プログラム格納部１０２に格納された変更前プログラムの一例を示す図である。図２では、一例として、Ｃ言語で書かれたプログラムソースコードの一部を示している。本実施例では、プログラムソースコードの各行のことを「ステートメント」と称する。各ステートメントには、（１）〜（１３）のステートメント番号が付けられている。
【００２８】
図３は、変更後プログラム格納部１０３に格納された変更後プログラムの一例を示す図である。変更後プログラムは、図２に示した変更前プログラムと同じ形式で変更後プログラム格納部１０３に格納されるが、変更前プログラムの一部に変更が加えられている。ステートメント番号（１）のステートメントは変更され、ステートメント番号（５ａ）のステートメントは追加され、変更前プログラムのステートメント番号（１２）のステートメントは削除されている。以下では、「ステートメント番号（１）のステートメント」のことを「ステートメント（１）」と略称し、他のステートメント番号のステートメントも同様に略称する。
【００２９】
図２、図３において、プログラムソースコードの変更箇所には、記号「＊」が付けられている。すなわち、ステートメント（１）、（５ａ）、及び（１２）には、記号「＊」が付けられている。
【００３０】
図４は、テストケース実行情報格納部１０４に格納されたテストケース実行情報Ｔの一例を示す図である。テストケース実行情報Ｔは、変更前プログラムに対して各テストケースを実行した際に実行したステートメントのステートメント番号についての情報である。図４に示すように、各々のテストケースには、一意に特定可能なように「テストケースＮｏ．」が付けられているとともに、そのテストケースで実行したステートメント番号（「実行ステートメント情報」）が対応付けられている。すなわち、テストケース実行情報Ｔは、変更前プログラムに対して実行したテストケースと、そのテストケースで実行したステートメントとを対応付けた情報である。
【００３１】
図５は、テストケース期待値情報格納部１０５に格納されたテストケース期待値情報Ｅの一例を示す図である。テストケース期待値情報Ｅは、各テストケースに定められた期待値に対応するプログラム出力（期待値の変数）についての情報である。図５に示すように、各々のテストケースには、そのテストケースの期待値に対応するプログラム出力（期待値の変数）が対応付けられている。このプログラム出力は、各テストケースを定義したときに設定された期待値に基づいて、予め得ることができる。プログラム出力としては、変数の他に、プログラムのＲＡＭ領域のアドレス、関数へ与えるパラメータ、及び関数の戻り値等を含めることもできる。
【００３２】
なお、図５に示したテストケース期待値情報Ｅのうち、図２と図３に示したプログラムに関連する変数はｚとｈの２つである。これら２つの変数についてのみ勘案すると、テストケースＮｏ．１〜３は変数ｚの出力を、テストケースＮｏ．４〜６は変数ｈの出力を、それぞれ調べるテストケースと言うことができる。
【００３３】
図６は、プログラム差異取得部１０６が実行する処理手順の一例を示す図である。
【００３４】
処理６０１では、変更前プログラムＰを変更前プログラム格納部１０２から入力し、変更後プログラムＰ’を変更後プログラム格納部１０３から入力する。
【００３５】
処理６０２では、変更前プログラムＰと変更後プログラムＰ’とを比較し、これらの間で異なるステートメントを差異ステートメントとして求めて、差異ステートメントの集合である差異ステートメント集合Ｓを得る。差異ステートメントとは、変更前プログラムＰと変更後プログラムＰ’との間で異なるステートメントであるので、変更前プログラムＰで変更又は削除されたステートメントと、変更後プログラムＰ’に追加されたステートメントのことである。本実施例の場合では、図２と図３に示した変更されたステートメント（１）、図２に示した削除されたステートメント（１２）、及び図３に示した追加されたステートメント（５ａ）が差異ステートメントである。すなわち、図２、図３において記号「＊」が付けられたステートメントの集合が、差異ステートメント集合Ｓである。
【００３６】
なお、処理６０２を実施した際に得られた変更前プログラムＰと変更後プログラムＰ’との間で対応するステートメントは、後から調べられるようにしておく。本実施例では、ステートメントのこの対応関係は、ステートメント番号からわかる。図２と図３において、同じステートメント番号を持つステートメントは、対応するステートメントである。また、変更後プログラムＰ’（図３）に追加されたステートメントの番号は、「５ａ」のように、変更前プログラムＰ（図２）のステートメントのうち、追加されたステートメントに対応するステートメント（追加されたステートメントの１行前のステートメント）の番号「５」の後にアルファベット「ａ」を付与し、対応がわかるようにしている。
【００３７】
処理６０３は、処理６０２で得られた差異ステートメント集合Ｓを、続く処理の入力として返す。
【００３８】
図７は、プログラム依存関係分析部１０７が実行する処理手順の一例を示す図である。
【００３９】
処理７０１では、変更前プログラムＰ、変更後プログラムＰ’、及び差異ステートメント集合Ｓを、プログラム差異取得部１０６から入力する。
【００４０】
処理７０２では、変更前プログラムＰと変更後プログラムＰ’のステートメントを分析し、差異ステートメント集合Ｓのステートメント（差異ステートメント）に対して依存関係にあるステートメントを求める。求めた依存関係にあるステートメント（依存元ステートメントと依存先ステートメント）は、依存の種類と併せて、依存関係分析結果Ｇとして出力される。ステートメントの依存の種類は、後述するように、少なくとも「データ依存」と「制御依存」とする。すなわち、プログラム依存関係分析部１０７は、少なくとも「データ依存」と「制御依存」とを調べることで、依存関係分析結果Ｇを求める。
【００４１】
依存関係とは、２つのステートメントにおいて、一方が変更、削除、又は追加されたことにより、もう一方がその影響を受ける関係のことである。依存関係には、差異ステートメントからの直接的な依存関係だけでなく、他のステートメントを介した間接的な依存関係も含まれる。すなわち、依存関係にあるステートメントとして、例えば、差異ステートメントに記載された変数を含むステートメント（直接的な依存関係にあるステートメント）だけでなく、差異ステートメントに記載された変数を含まなくても差異ステートメントから影響を受けるステートメント（間接的な依存関係にあるステートメント）も求める。依存関係分析結果Ｇには、プログラムでのステートメントの実行の流れにおいて、差異ステートメントから辿ることのできる依存関係のみが含まれる。
【００４２】
処理７０３では、処理７０２で得られた依存関係分析結果Ｇを依存分析結果格納部１０８に格納する。さらに、プログラム差異取得部１０６から入力した差異ステートメント集合Ｓを依存分析結果格納部１０８に格納する。
【００４３】
図８は、依存分析結果格納部１０８に格納された依存関係分析結果Ｇの一例を示す図である。図８に示すように、依存関係分析結果Ｇでは、依存元ステートメント、依存先ステートメント、及び依存の種類が、依存関係として対応付けられている。
【００４４】
依存の種類において、「データ依存」とは、変数による影響（依存関係）があることを意味する。例えば、図２に示した変更前プログラムにおいて、ステートメント（１）での変数ｘに対しての変更は、変数ｘを利用しているステートメント（３）に影響するため、これらのステートメント間にはデータ依存の関係がある。
【００４５】
依存の種類において、「制御依存」とは、ｉｆ文などの条件分岐による影響（依存関係）があることを意味する。例えば、図２に示した変更前プログラムにおいて、ステートメント（８）は、ステートメント（９）を実行するか否かを制御するため、これらのステートメント間には制御依存の関係がある。
【００４６】
依存分析結果格納部１０８には、変更前プログラムＰと変更後プログラムＰ’とで重複する依存関係を省いて、依存関係分析結果Ｇを格納する。例えば、図２と図３に示すように、ステートメント（１）からステートメント（３）への依存関係は、変更前プログラムＰと変更後プログラムＰ’とで重複するため、一方を省いている。
【００４７】
図９は、図８に示した依存関係をグラフで可視化し、わかりやすく示した依存解析結果グラフである。図９において、角の丸い四角い枠はステートメントを示し、矢印は依存関係を示している。矢印の根元側（ｔａｉｌ）のステートメントが依存元ステートメントであり、矢印の先端側（ｈｅａｄ）のステートメントが依存先ステートメントである。ステートメントには、ステートメント番号が付けられている。矢印の脇に示された文字は、依存の種類を表し、「Ｄ」はデータ依存を、「Ｃ」は制御依存を示している。ステートメント番号に記号「＊」が付与されたステートメントは、差異ステートメントである。
【００４８】
図１０は、テストケース選択部１０９が実行する処理手順の一例を示す図である。
【００４９】
処理１００１では、差異ステートメント集合Ｓと依存関係分析結果Ｇを依存分析結果格納部１０８から入力し、テストケース実行情報Ｔをテストケース実行情報格納部１０４から入力し、テストケース期待値情報Ｅをテストケース期待値情報格納部１０５から入力する。
【００５０】
処理１００２では、テストケース実行情報Ｔ（図４）から１件のテストケースｔを選び出す。テストケース実行情報Ｔに含まれる全てのテストケースは、重複なく選び出せるものとする。なお、以下では、テストケースｔとしてテストケースＮｏ．１（図４を参照）が選択された場合を例に挙げて説明する。
【００５１】
処理１００３では、ステートメント集合Ｓ’を得る。ステートメント集合Ｓ’は、テストケースｔで実行した、差異ステートメント集合Ｓに含まれるステートメントの集合である。すなわち、ステートメント集合Ｓ’は、テストケースｔに含まれる差異ステートメントである。
【００５２】
例えば、テストケースｔがテストケースＮｏ．１の場合には、テストケースＮｏ．１が実行するステートメントは、図４に示すように、ステートメント（１）、（２）、（３）、（６）、（７）、（８）、（９）及び（１３）である。図２、図３において記号「＊」が付けられたステートメントの集合が差異ステートメント集合Ｓであるので、差異ステートメント集合Ｓには、ステートメント（１）、（５ａ）、（１２）が含まれる。従って、ステートメント集合Ｓ’は、ステートメント（１）から成る。なお、変更後プログラムＰ’（図３）に追加されたステートメント（５ａ）は、変更前プログラムＰ（図２）のステートメントのうち、ステートメント（５ａ）に対応するステートメント（５）が実行される場合には、実行されるものとする。
【００５３】
処理１００４では、ステートメント集合Ｓ’が空か否かを判断する。ステートメント集合Ｓ’が空である場合は、テストケースｔが差異ステートメントを実行しないので、処理１０１０に遷移する。ステートメント集合Ｓ’が空でない場合は、処理１００５に遷移する。
【００５４】
処理１００５では、テストケース期待値情報Ｅ（図５）から、テストケースｔにおけるプログラム出力（変数）を取り出し、期待値情報集合ｅを作成する。テストケースｔがテストケースＮｏ．１の場合には、テストケース期待値情報Ｅから変数ｚが取り出される。従って、期待値情報集合ｅは、変数ｚから成る。
【００５５】
処理１００６では、ステートメント集合Ｓ’に含まれるステートメントとステートメント集合Ｓ’に含まれるステートメントから影響を受けるステートメントとから成る集合Ｓ’２を得る。ステートメント集合Ｓ’に含まれるステートメントから影響を受けるステートメントとは、ステートメント集合Ｓ’に含まれるステートメントに直接的又は間接的に依存するステートメントであり、依存関係解析結果Ｇ（図８）と依存解析結果グラフ（図９）を利用して得られる。テストケースｔがテストケースＮｏ．１の場合には、ステートメント集合Ｓ’はステートメント（１）から成るので、集合Ｓ’２は、ステートメント（１）、（３）、（８）、（９）、（１１）、及び（１２）から成る。これは、図９に示した依存解析結果グラフにおいて、ステートメント（１）から依存関係を示す矢印を辿っていくことで容易に得られる。
【００５６】
処理１００７では、集合Ｓ’２の中で、期待値情報集合ｅに含まれる変数の値を変えるステートメントの集合Ｓ’’を得る。変数の値を変えるステートメントとは、例えばＣ言語でいう代入演算子「＝」及びインクリメント演算子「＋＋」等の演算子によって、期待値情報集合ｅに含まれる変数の値が直接変わるステートメントのことである。テストケースｔがテストケースＮｏ．１の場合には、集合Ｓ’２にステートメント（１）、（３）、（８）、（９）、（１１）、及び（１２）が含まれ、期待値情報集合ｅに含まれる変数はｚである。ステートメント（１）、（３）、（８）、（９）、（１１）、及び（１２）のうち、ステートメント（９）が変数ｚの値を変えるので、ステートメントの集合Ｓ’’は、ステートメント（９）から成る。
【００５７】
処理１００８では、テストケースｔを実行した際に、ステートメント集合Ｓ’’に含まれるステートメントのいずれか１つが、ステートメント集合Ｓ’（テストケースｔに含まれる差異ステートメントの集合）に含まれるステートメントから影響を受けるか否かを調べる。すなわち、テストケースｔを実行した際に、ステートメント集合Ｓ’’のいずれか１つのステートメントが、テストケースｔが実行する差異ステートメントに直接的又は間接的に依存する（すなわち、影響を受ける）か否かを調べる。このとき、依存関係解析結果Ｇ（図８）と依存解析結果グラフ（図９）を利用して、影響を受けるか否か（依存するか否か）を調べることができる。
【００５８】
テストケースｔがテストケースＮｏ．１の場合には、ステートメント集合Ｓ’’にはステートメント（９）が含まれ、ステートメント集合Ｓ’にはステートメント（１）が含まれる。例えば依存解析結果グラフ（図９）を利用すると、ステートメント（１）からステートメント（３）と（８）を経由してステートメント（９）に辿ることができるので、ステートメント（９）は、ステートメント（１）からステートメント（３）と（８）を介して影響を受ける（ステートメント（９）は、ステートメント（３）と（８）を介してステートメント（１）に間接的に依存する）ことがわかる。テストケースｔがテストケースＮｏ．１の場合には、ステートメント（１）、（２）、（３）、（６）、（７）、（８）、（９）及び（１３）が実行される（図４）。従って、テストケースＮｏ．１を実行すると、ステートメント（１）からステートメント（９）に辿ることができる、すなわち、ステートメント（９）は、ステートメント（１）から影響を受ける（ステートメント（１）に依存する）ことがわかる。
【００５９】
処理１００８で、テストケースｔを実行した際に、ステートメント集合Ｓ’’に含まれるステートメントのいずれか１つが、ステートメント集合Ｓ’に含まれるステートメントから影響を受けると判定された場合は、処理１００９に遷移し、影響を受けないと判定された場合は、処理１０１０に遷移する。
【００６０】
なお、処理１００８で、依存関係解析結果Ｇ（図８）と依存解析結果グラフ（図９）を利用して影響を受けるか否か（依存するか否か）を調べる際には、ステートメントの依存の種類が「制御依存」の場合は、依存元のステートメントを実行したら、依存先ステートメントを無条件で実行したものと見なす。これは、プログラムの修正の影響により、条件分岐の遷移先が変化する可能性を考慮するためである。例えば、ステートメント（８）を実行したら、ステートメント（８）の制御依存の依存先であるステートメント（９）、（１１）及び（１２）も実行したものと見なす。
【００６１】
処理１００９では、テストケースｔを、再実行が必要なテストケースとして選択する。上記の例では、テストケースＮｏ．１が、再実行が必要なテストケースと選択される。
【００６２】
処理１０１０では、テストケース実行情報Ｔに含まれる全てのテストケースを調べた否かを判定する。全てのテストケースを調べた場合は、処理１０１１に遷移し、調べていない場合は、処理１００２に遷移する。
【００６３】
処理１０１１では、処理１００９で選択したテストケースを選択結果として、ユーザインターフェイス部１１０に出力する。ユーザインターフェイス部１１０は、例えばディスプレイやプリンタなどの出力装置に、選択結果を表示することができる。
【００６４】
以上の例では、処理１００２で、テストケースｔとしてテストケースＮｏ．１が選択された場合を説明した。次に、処理１００２で、テストケースｔとしてテストケースＮｏ．２が選択された場合とテストケースＮｏ．５が選択された場合を簡単に説明する。
【００６５】
処理１００２で、テストケースｔとしてテストケースＮｏ．２が選択された場合は、下記の通りである。
【００６６】
テストケースＮｏ．２が実行するステートメントは、図４に示すように、ステートメント（１）、（２）、（４）、（５）、（６）、（７）、（８）、（９）及び（１３）である。処理１００３では、差異ステートメント（１）及び（５ａ）から成るステートメント集合Ｓ’が得られる。ステートメント集合Ｓ’が空でないので、処理１００５に遷移し、変数ｚから成る期待値情報集合ｅを得る。処理１００６では、ステートメント集合Ｓ’に含まれるステートメントとステートメント集合Ｓ’に含まれるステートメントから影響を受けるステートメントとから成る集合Ｓ’２として、ステートメント（１）、（３）、（５ａ）、（８）、（９）、（１１）及び（１２）から成る集合を得る。処理１００７では、集合Ｓ’２の中で、期待値情報集合ｅに含まれる変数ｚの値を変えるステートメントの集合Ｓ’’として、ステートメント（９）から成る集合を得る。
【００６７】
処理１００８では、テストケースｔとしてテストケースＮｏ．２を実行した際に、ステートメント集合Ｓ’’に含まれるステートメント（９）が、ステートメント集合Ｓ’に含まれるステートメント（１）又は（５ａ）から影響を受けるか否かを調べる。図９に示した依存解析結果グラフから、ステートメント（９）は、ステートメント（５ａ）から影響を受けないことと、ステートメント（９）は、ステートメント（３）と（８）を介してステートメント（１）から影響を受けることがわかる。図４に示すように、テストケースＮｏ．２はステートメント（３）を実行しないので、ステートメント（９）は、ステートメント（１）から影響を受けない。従って、テストケースＮｏ．２を実行すると、ステートメント（９）は、ステートメント（１）と（５ａ）のどちらからも影響を受けない。このため、処理１００９を実行せず（テストケースＮｏ．２を、再実行が必要なテストケースとして選択せず）、処理１０１０に遷移する。
【００６８】
処理１００２で、テストケースｔとしてテストケースＮｏ．５が選択された場合は、下記の通りである。
【００６９】
テストケースＮｏ．５が実行するステートメントは、図４に示すように、ステートメント（１）、（２）、（４）、（５）、（６）、（７）、（８）、（１１）、（１２）及び（１３）である。処理１００３では、差異ステートメント（１）、（５ａ）及び（１２）から成るステートメント集合Ｓ’が得られる。ステートメント集合Ｓ’が空でないので、処理１００５に遷移し、変数ｈから成る期待値情報集合ｅを得る。処理１００６では、ステートメント集合Ｓ’に含まれるステートメントとステートメント集合Ｓ’に含まれるステートメントから影響を受けるステートメントとから成る集合Ｓ’２として、ステートメント（１）、（３）、（５ａ）、（８）、（９）、（１１）及び（１２）から成る集合を得る。処理１００７では、集合Ｓ’２の中で、期待値情報集合ｅに含まれる変数ｈの値を変えるステートメントの集合Ｓ’’として、ステートメント（１１）から成る集合を得る。
【００７０】
処理１００８では、テストケースｔとしてテストケースＮｏ．５を実行した際に、ステートメント集合Ｓ’’に含まれるステートメント（１１）が、ステートメント集合Ｓ’に含まれるステートメント（１）、（５ａ）又は（１２）から影響を受けるか否かを調べる。図９に示した依存解析結果グラフから、ステートメント（１１）は、ステートメント（１）からステートメント（３）と（８）を介して間接的に影響を受けることと、ステートメント（５ａ）から直接的に影響を受けることがわかる。図４に示すように、テストケースＮｏ．５はステートメント（３）を実行しないので、テストケースＮｏ．５を実行すると、ステートメント（１１）は、ステートメント（１）から影響を受けない。しかし、テストケースＮｏ．５はステートメント（５）を実行するので、テストケースＮｏ．５を実行すると、ステートメント（５ａ）が実行されることになり、ステートメント（１１）は、ステートメント（５ａ）から影響を受ける（上述したように、ステートメント（５ａ）は、変更前プログラムＰのステートメント（５ａ）に対応するステートメント（５）が実行される場合には、実行されるものとする）。従って、テストケースＮｏ．５を実行すると、ステートメント（１１）は、ステートメント（５ａ）から影響を受ける。このため、処理１００９では、テストケースＮｏ．５を、再実行が必要なテストケースとして選択し、処理１０１０に遷移する。
【００７１】
本実施例によるテストケース選択装置は、以上に示したのと同じ処理を、図４に示したＮｏ．１〜Ｎｏ．６のテストケースに対して実施し、テストケースＮｏ．１、Ｎｏ．４、及びＮｏ．５を再実行が必要なテストケースとして選択する。従って、本実施例によるテストケース選択装置では、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができる。一方、従来用いられてきた、プログラムの修正箇所を実行するテストケースを選択する手法の場合では、Ｎｏ．１〜Ｎｏ．６のテストケースの全ては修正したステートメント（１）を実行するため、再実行するテストケースの数を削減することができない。
【００７２】
図１１は、テストケース選択装置１０１のハードウェア構成の一例を示す図である。テストケース選択装置１０１は、例えばコンピュータで構成することができ、ＣＰＵ１１０２、主記憶装置１１０３、入力装置１１０４、出力装置１１０５、補助記憶装置１１０６、及び光学ドライブ１１０７を備え、これらはバス１１０１を介して互いに接続される。
【００７３】
入力装置１１０４には、例えば、マウスとキーボードの両方または一方を用いることができる。出力装置１１０５には、例えば、ディスプレイとプリンタの両方または一方を用いることができる。
【００７４】
光学ドライブ１１０７は、光ディスク１１１１に記録されたテストケース選択プログラム１１０８を読み込む。テストケース選択プログラム１１０８は、テストケース選択装置１０１を動作させるプログラムであり、補助記憶装置１１０６に格納される。
【００７５】
補助記憶装置１１０６は、テストケース選択プログラム１１０８と、テストケース選択プログラム１１０８の動作環境であるオペレーションシステム（ＯＳ）１１１０と、変更前プログラムＰ、変更後プログラムＰ’、テストケース実行情報Ｔ、及びテストケース期待値情報Ｅなどの開発データ１１０９とを格納する。開発データ１１０９は、入力装置１１０４によって、入力することができる。
【００７６】
ＣＰＵ１１０２は、補助記憶装置１１０６に格納されたテストケース選択プログラム１１０８を主記憶装置１１０３にロードして実行する。ＣＰＵ１１０２がテストケース選択プログラム１１０８を実行することにより、テストケース選択装置１０１が動作する。
【００７７】
テストケース選択プログラム１１０８を実行するための一連の操作は、入力装置１１０４によってユーザから入力される。テストケース選択プログラム１１０８が実行した一連の処理結果は、出力装置１１０５によって出力され、ユーザに伝えられる。
【００７８】
以上のように、本実施例によるテストケース選択装置は、プログラムの修正の影響がテストケースに定められた期待値に対応するプログラム出力に及ぶか否か（プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か）をテストケース選択時の判断基準として用いる。このため、本実施例によるテストケース選択装置は、回帰テストの際に再実行するテストケースの数を削減して、プログラムのテスト工程の効率を向上させることができる。
【００７９】
本発明によるテストケース選択装置は、任意のプログラムに対して、回帰テストの際に再実行が必要なテストケースを選択するときに用いることができ、例えば、自動車、鉄道、及びエレベータなどの制御システムのプログラムに対して用いることができる。
【００８０】
なお、本発明は、上記の実施例に限定されるものではなく、様々な変形が可能である。例えば、上記の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備える態様に限定されるものではない。また、実施例の構成の一部について、削除したり、他の構成を追加・置換したりすることが可能である。
【符号の説明】
【００８１】
１０１…テストケース選択装置、１０２…変更前プログラム格納部、１０３…変更後プログラム格納部、１０４…テストケース実行情報格納部、１０５…テストケース期待値情報格納部、１０６…プログラム差異取得部、１０７…プログラム依存関係分析部、１０８…依存分析結果格納部、１０９…テストケース選択部、１１０…ユーザインターフェイス部、１１１…ユーザ、１１０１…バス、１１０２…ＣＰＵ、１１０３…主記憶装置、１１０４…入力装置、１１０５…出力装置、１１０６…補助記憶装置、１１０７…光学ドライブ、１１０８…テストケース選択プログラム、１１０９…開発データ、１１１０…オペレーションシステム、１１１１…光ディスク。
【図１】
2016164727.tif 000003
【図２】
2016164727.tif 000004
【図３】
2016164727.tif 000005
【図４】
2016164727.tif 000006
【図５】
2016164727.tif 000007
【図６】
2016164727.tif 000008
【図７】
2016164727.tif 000009
【図８】
2016164727.tif 000010
【図９】
2016164727.tif 000011
【図１０】
2016164727.tif 000012
【図１１】
2016164727.tif 000013