JP2016164727A - テストケース選択装置 - Google Patents
テストケース選択装置 Download PDFInfo
- Publication number
- JP2016164727A JP2016164727A JP2015044697A JP2015044697A JP2016164727A JP 2016164727 A JP2016164727 A JP 2016164727A JP 2015044697 A JP2015044697 A JP 2015044697A JP 2015044697 A JP2015044697 A JP 2015044697A JP 2016164727 A JP2016164727 A JP 2016164727A
- Authority
- JP
- Japan
- Prior art keywords
- test case
- statement
- program
- expected value
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供する。【解決手段】変更前後のプログラムを格納する格納部102、103と、変更前プログラムに実行したテストケースとステートメントを実行情報として格納する格納部104と、テストケースで出力される変数である期待値を格納する格納部105と、変更前後のプログラムで異なるステートメントを差異ステートメントとして求める取得部106と、差異ステートメントから影響を受けるステートメントを依存関係分析結果として求める分析部107と、実行情報のステートメントと期待値と差異ステートメントと依存関係分析結果を用いて、変更前後のプログラムで期待値の値を変える可能性のあるテストケースを、回帰テストで実行するテストケースとして選択する選択部109を備える。【選択図】図1
Description
本発明は、プログラムの回帰テストの際に再実行が必要なテストケースを選択することができるテストケース選択装置に関する。
プログラムを修正した際、修正箇所以外に意図しない影響が波及していないか、すなわち、修正によりプログラムに不具合が生じていないかを確認するテストを回帰テストと呼ぶ。回帰テストの最も単純な実施形態では、事前に用意したテストケースを全て再テストする。しかし、この場合には、ソフトウェアの規模が大きくなるほど、テストケースを全て再テストするのに大きな工数が必要となり、回帰テストの効率が低下するという課題がある。また、テスト工数が大きいという理由で、製品リリースまでに繰り返される個々の修正についての再テストを先延ばしにすると、重要な不具合を開発後期まで見落とす可能性が高い。このため、既存のテストケースのうち再テストが必要なもののみを選択して実行することで回帰テストの工数を削減する回帰テスト選択が一般に行われている。
回帰テスト選択手法の一例として、テストケースがプログラムのどのステートメントを実行するかを予め記録しておき、修正箇所を実行するテストケースを自動的に選択する方法がある。特許文献1には、これと同様の方法を用いた回帰テスト選択手法の例が記載されている。特許文献1に記載されたシステムと方法では、修正した箇所に関連のあるステートメントを優先度(依存関係の強さ)に応じて抽出し、抽出したステートメントと関連付けられたテストケースを実行することで、回帰テストを効率化している。
大規模なソフトウェア開発においては回帰テストの工数が非常に大きくなる傾向があることを鑑みると、回帰テスト選択手法では、再テストするテストケースの数をできる限り削減することが望ましい。とりわけ、ソフトウェアの最終的な品質を確認するテストとは別にプログラムの修正毎に回帰テストを実施する際には、テストケースの数の削減が必須である。
しかしながら、特許文献1に記載の技術のように修正箇所や修正に関連のある箇所(修正の影響を受ける箇所)を実行するテストケースを選択する方法には、プログラムの不具合を発見できないテストケースを多数選択してしまうという課題がある。例えば、プログラムの初期化処理のように多くのテストケースが共通して実行する箇所に修正があった場合には、回帰テストで実行するテストケースの数をほとんど削減することができない。そのうえ、このような修正箇所を実行するテストケースのうち、初期化処理そのものや修正した初期化処理に影響を受ける箇所をテストしているものを除けば、大半のテストケースは、実行してもプログラムの不具合を発見できないテストケースである。
このように、従来の回帰テスト選択手法では、回帰テストで実行するテストケースの数を削減できない場合があり、このような場合にプログラムのテスト工程の効率が低下するという課題がある。
本発明は、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することを目的とする。
本発明によるテストケース選択装置は、次のような特徴を備える。テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備える。前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する。
本発明によると、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することができる。
本発明によるテストケース選択装置は、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにすることで、再実行が必要として選択するテストケースの数を減らし、回帰テストの効率を高めることができる。
ここで、再実行する価値があるテストケース、つまり、プログラムの修正によって生じた不具合を発見可能なテストケースとは何かについて詳細を述べる。
テストケースは、プログラムが期待されている動作を実行するか否かを調べるために実行され、プログラムを実行する手順(テストケースで実行するステートメントとその実行する順序)と、その手順を実行する際に必要な入力変数とその値と、その手順を実行した際に得られる出力変数とその値(期待値)で定義される。「テストケースを実行する」とは、テストケースで定義されているステートメントを実行することである。通常は、複数のテストケースが予め定義される。
テストケースを実行した際に出力される変数とその値は、「期待値」と呼ばれる。期待値は、テストケース毎に定められる。すなわち、テストケースに応じて、期待値が設定される。
従って、プログラムの修正によって生じた不具合は、テストケースの実行結果すなわち特定のプログラム出力と、そのテストケースに定められた期待値との間に差異があった場合に発見される。このことから、不具合を発見可能なテストケースとは、修正の影響がプログラム出力に及び、その結果、プログラム出力とこれに対応する期待値との間に差異が生じるテストケースである。
従来の方法で不具合を発見できないテストケースを多数選択してしまう理由として、上述した、テストケースに定められた期待値についての情報を利用していないことが挙げられる。
本発明によるテストケース選択装置では、テストケースに定められた期待値についての情報を利用し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)をテストケース選択時の判断基準として用いる。このようにして、本発明によるテストケース選択装置では、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにし、回帰テストの効率を高める。
以下、図面を参照し、本発明の実施例によるテストケース選択装置を説明する。
図1は、本発明の実施例によるテストケース選択装置101の構成の一例を示す図である。テストケース選択装置101は、変更前プログラム格納部102、変更後プログラム格納部103、テストケース実行情報格納部104、テストケース期待値情報格納部105、プログラム差異取得部106、プログラム依存関係分析部107、依存分析結果格納部108、テストケース選択部109、及びユーザインターフェイス(I/F)部110を備える。テストケース選択装置101は、例えば、コンピュータで構成することができる。
変更前プログラム格納部102は、変更(修正)される前のプログラムソースコード(変更前プログラム)を格納する。変更後プログラム格納部103は、変更前プログラムの一部に変更がされたプログラムソースコード(変更後プログラム)を格納する。テストケース選択装置101は、変更前プログラムと変更後プログラムを入力し、変更前プログラムを変更前プログラム格納部102に、変更後プログラムを変更後プログラム格納部103に、それぞれ格納する。
テストケース実行情報格納部104は、変更前プログラムに対して実行したテストケースと、各テストケースで実行したステートメントとを、テストケース実行情報Tとして格納する。テストケース実行情報Tは、事前に変更前プログラムに対して各テストケースを実行することで得られ、テストケース実行情報格納部104に予め格納される。
テストケース期待値情報格納部105は、各テストケースに定められた期待値とこの期待値に関連するプログラム出力の情報とを、テストケース期待値情報Eとして格納する。テストケース期待値情報Eは、各テストケースを定義したときに得られる情報であり、テストケース期待値情報格納部105に予め格納される。
プログラム差異取得部106は、変更前プログラムと変更後プログラムを入力し、これらのプログラムを比較、分析して差異ステートメントを求める。差異ステートメントについては、図6を用いて後述する。
プログラム差異取得部106は、変更前プログラムと変更後プログラムを入力し、これらのプログラムを比較、分析して差異ステートメントを求める。差異ステートメントについては、図6を用いて後述する。
プログラム依存関係分析部107は、差異ステートメントを入力し、差異ステートメントに対して依存関係を持つステートメントを求めて、依存関係を分析する。依存関係を持つステートメントとその分析結果は、依存関係分析結果Gとして、依存分析結果格納部108に格納される。依存関係については、図7を用いて後述する。
テストケース選択部109は、変更前プログラムと変更後プログラムとで期待値の変数の値を変える可能性のあるテストケースを、変更後プログラムの回帰テストの際に実行するテストケースとして選択する。具体的には、テストケース選択部109は、テストケース実行情報T、テストケース期待値情報E、及び依存関係分析結果Gを入力し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)の判断に基づき、再実行が必要なテストケースを選択する。
ユーザインターフェイス部110は、テストケース選択装置101の処理結果やユーザ111からの指示を伝達するための手段を提供する。ユーザインターフェイス部110は、例えば、コンピュータのマウスやキーボードなどの入力装置、ディスプレイやプリンタなどの出力装置、及びこれらを制御するプログラムで構成することができる。
図2は、変更前プログラム格納部102に格納された変更前プログラムの一例を示す図である。図2では、一例として、C言語で書かれたプログラムソースコードの一部を示している。本実施例では、プログラムソースコードの各行のことを「ステートメント」と称する。各ステートメントには、(1)〜(13)のステートメント番号が付けられている。
図3は、変更後プログラム格納部103に格納された変更後プログラムの一例を示す図である。変更後プログラムは、図2に示した変更前プログラムと同じ形式で変更後プログラム格納部103に格納されるが、変更前プログラムの一部に変更が加えられている。ステートメント番号(1)のステートメントは変更され、ステートメント番号(5a)のステートメントは追加され、変更前プログラムのステートメント番号(12)のステートメントは削除されている。以下では、「ステートメント番号(1)のステートメント」のことを「ステートメント(1)」と略称し、他のステートメント番号のステートメントも同様に略称する。
図2、図3において、プログラムソースコードの変更箇所には、記号「*」が付けられている。すなわち、ステートメント(1)、(5a)、及び(12)には、記号「*」が付けられている。
図4は、テストケース実行情報格納部104に格納されたテストケース実行情報Tの一例を示す図である。テストケース実行情報Tは、変更前プログラムに対して各テストケースを実行した際に実行したステートメントのステートメント番号についての情報である。図4に示すように、各々のテストケースには、一意に特定可能なように「テストケースNo.」が付けられているとともに、そのテストケースで実行したステートメント番号(「実行ステートメント情報」)が対応付けられている。すなわち、テストケース実行情報Tは、変更前プログラムに対して実行したテストケースと、そのテストケースで実行したステートメントとを対応付けた情報である。
図5は、テストケース期待値情報格納部105に格納されたテストケース期待値情報Eの一例を示す図である。テストケース期待値情報Eは、各テストケースに定められた期待値に対応するプログラム出力(期待値の変数)についての情報である。図5に示すように、各々のテストケースには、そのテストケースの期待値に対応するプログラム出力(期待値の変数)が対応付けられている。このプログラム出力は、各テストケースを定義したときに設定された期待値に基づいて、予め得ることができる。プログラム出力としては、変数の他に、プログラムのRAM領域のアドレス、関数へ与えるパラメータ、及び関数の戻り値等を含めることもできる。
なお、図5に示したテストケース期待値情報Eのうち、図2と図3に示したプログラムに関連する変数はzとhの2つである。これら2つの変数についてのみ勘案すると、テストケースNo.1〜3は変数zの出力を、テストケースNo.4〜6は変数hの出力を、それぞれ調べるテストケースと言うことができる。
図6は、プログラム差異取得部106が実行する処理手順の一例を示す図である。
処理601では、変更前プログラムPを変更前プログラム格納部102から入力し、変更後プログラムP’を変更後プログラム格納部103から入力する。
処理602では、変更前プログラムPと変更後プログラムP’とを比較し、これらの間で異なるステートメントを差異ステートメントとして求めて、差異ステートメントの集合である差異ステートメント集合Sを得る。差異ステートメントとは、変更前プログラムPと変更後プログラムP’との間で異なるステートメントであるので、変更前プログラムPで変更又は削除されたステートメントと、変更後プログラムP’に追加されたステートメントのことである。本実施例の場合では、図2と図3に示した変更されたステートメント(1)、図2に示した削除されたステートメント(12)、及び図3に示した追加されたステートメント(5a)が差異ステートメントである。すなわち、図2、図3において記号「*」が付けられたステートメントの集合が、差異ステートメント集合Sである。
なお、処理602を実施した際に得られた変更前プログラムPと変更後プログラムP’との間で対応するステートメントは、後から調べられるようにしておく。本実施例では、ステートメントのこの対応関係は、ステートメント番号からわかる。図2と図3において、同じステートメント番号を持つステートメントは、対応するステートメントである。また、変更後プログラムP’(図3)に追加されたステートメントの番号は、「5a」のように、変更前プログラムP(図2)のステートメントのうち、追加されたステートメントに対応するステートメント(追加されたステートメントの1行前のステートメント)の番号「5」の後にアルファベット「a」を付与し、対応がわかるようにしている。
処理603は、処理602で得られた差異ステートメント集合Sを、続く処理の入力として返す。
図7は、プログラム依存関係分析部107が実行する処理手順の一例を示す図である。
処理701では、変更前プログラムP、変更後プログラムP’、及び差異ステートメント集合Sを、プログラム差異取得部106から入力する。
処理702では、変更前プログラムPと変更後プログラムP’のステートメントを分析し、差異ステートメント集合Sのステートメント(差異ステートメント)に対して依存関係にあるステートメントを求める。求めた依存関係にあるステートメント(依存元ステートメントと依存先ステートメント)は、依存の種類と併せて、依存関係分析結果Gとして出力される。ステートメントの依存の種類は、後述するように、少なくとも「データ依存」と「制御依存」とする。すなわち、プログラム依存関係分析部107は、少なくとも「データ依存」と「制御依存」とを調べることで、依存関係分析結果Gを求める。
依存関係とは、2つのステートメントにおいて、一方が変更、削除、又は追加されたことにより、もう一方がその影響を受ける関係のことである。依存関係には、差異ステートメントからの直接的な依存関係だけでなく、他のステートメントを介した間接的な依存関係も含まれる。すなわち、依存関係にあるステートメントとして、例えば、差異ステートメントに記載された変数を含むステートメント(直接的な依存関係にあるステートメント)だけでなく、差異ステートメントに記載された変数を含まなくても差異ステートメントから影響を受けるステートメント(間接的な依存関係にあるステートメント)も求める。依存関係分析結果Gには、プログラムでのステートメントの実行の流れにおいて、差異ステートメントから辿ることのできる依存関係のみが含まれる。
処理703では、処理702で得られた依存関係分析結果Gを依存分析結果格納部108に格納する。さらに、プログラム差異取得部106から入力した差異ステートメント集合Sを依存分析結果格納部108に格納する。
図8は、依存分析結果格納部108に格納された依存関係分析結果Gの一例を示す図である。図8に示すように、依存関係分析結果Gでは、依存元ステートメント、依存先ステートメント、及び依存の種類が、依存関係として対応付けられている。
依存の種類において、「データ依存」とは、変数による影響(依存関係)があることを意味する。例えば、図2に示した変更前プログラムにおいて、ステートメント(1)での変数xに対しての変更は、変数xを利用しているステートメント(3)に影響するため、これらのステートメント間にはデータ依存の関係がある。
依存の種類において、「制御依存」とは、if文などの条件分岐による影響(依存関係)があることを意味する。例えば、図2に示した変更前プログラムにおいて、ステートメント(8)は、ステートメント(9)を実行するか否かを制御するため、これらのステートメント間には制御依存の関係がある。
依存分析結果格納部108には、変更前プログラムPと変更後プログラムP’とで重複する依存関係を省いて、依存関係分析結果Gを格納する。例えば、図2と図3に示すように、ステートメント(1)からステートメント(3)への依存関係は、変更前プログラムPと変更後プログラムP’とで重複するため、一方を省いている。
図9は、図8に示した依存関係をグラフで可視化し、わかりやすく示した依存解析結果グラフである。図9において、角の丸い四角い枠はステートメントを示し、矢印は依存関係を示している。矢印の根元側(tail)のステートメントが依存元ステートメントであり、矢印の先端側(head)のステートメントが依存先ステートメントである。ステートメントには、ステートメント番号が付けられている。矢印の脇に示された文字は、依存の種類を表し、「D」はデータ依存を、「C」は制御依存を示している。ステートメント番号に記号「*」が付与されたステートメントは、差異ステートメントである。
図10は、テストケース選択部109が実行する処理手順の一例を示す図である。
処理1001では、差異ステートメント集合Sと依存関係分析結果Gを依存分析結果格納部108から入力し、テストケース実行情報Tをテストケース実行情報格納部104から入力し、テストケース期待値情報Eをテストケース期待値情報格納部105から入力する。
処理1002では、テストケース実行情報T(図4)から1件のテストケースtを選び出す。テストケース実行情報Tに含まれる全てのテストケースは、重複なく選び出せるものとする。なお、以下では、テストケースtとしてテストケースNo.1(図4を参照)が選択された場合を例に挙げて説明する。
処理1003では、ステートメント集合S’を得る。ステートメント集合S’は、テストケースtで実行した、差異ステートメント集合Sに含まれるステートメントの集合である。すなわち、ステートメント集合S’は、テストケースtに含まれる差異ステートメントである。
例えば、テストケースtがテストケースNo.1の場合には、テストケースNo.1が実行するステートメントは、図4に示すように、ステートメント(1)、(2)、(3)、(6)、(7)、(8)、(9)及び(13)である。図2、図3において記号「*」が付けられたステートメントの集合が差異ステートメント集合Sであるので、差異ステートメント集合Sには、ステートメント(1)、(5a)、(12)が含まれる。従って、ステートメント集合S’は、ステートメント(1)から成る。なお、変更後プログラムP’(図3)に追加されたステートメント(5a)は、変更前プログラムP(図2)のステートメントのうち、ステートメント(5a)に対応するステートメント(5)が実行される場合には、実行されるものとする。
処理1004では、ステートメント集合S’が空か否かを判断する。ステートメント集合S’が空である場合は、テストケースtが差異ステートメントを実行しないので、処理1010に遷移する。ステートメント集合S’が空でない場合は、処理1005に遷移する。
処理1005では、テストケース期待値情報E(図5)から、テストケースtにおけるプログラム出力(変数)を取り出し、期待値情報集合eを作成する。テストケースtがテストケースNo.1の場合には、テストケース期待値情報Eから変数zが取り出される。従って、期待値情報集合eは、変数zから成る。
処理1006では、ステートメント集合S’に含まれるステートメントとステートメント集合S’に含まれるステートメントから影響を受けるステートメントとから成る集合S’2を得る。ステートメント集合S’に含まれるステートメントから影響を受けるステートメントとは、ステートメント集合S’に含まれるステートメントに直接的又は間接的に依存するステートメントであり、依存関係解析結果G(図8)と依存解析結果グラフ(図9)を利用して得られる。テストケースtがテストケースNo.1の場合には、ステートメント集合S’はステートメント(1)から成るので、集合S’2は、ステートメント(1)、(3)、(8)、(9)、(11)、及び(12)から成る。これは、図9に示した依存解析結果グラフにおいて、ステートメント(1)から依存関係を示す矢印を辿っていくことで容易に得られる。
処理1007では、集合S’2の中で、期待値情報集合eに含まれる変数の値を変えるステートメントの集合S’’を得る。変数の値を変えるステートメントとは、例えばC言語でいう代入演算子「=」及びインクリメント演算子「++」等の演算子によって、期待値情報集合eに含まれる変数の値が直接変わるステートメントのことである。テストケースtがテストケースNo.1の場合には、集合S’2にステートメント(1)、(3)、(8)、(9)、(11)、及び(12)が含まれ、期待値情報集合eに含まれる変数はzである。ステートメント(1)、(3)、(8)、(9)、(11)、及び(12)のうち、ステートメント(9)が変数zの値を変えるので、ステートメントの集合S’’は、ステートメント(9)から成る。
処理1008では、テストケースtを実行した際に、ステートメント集合S’’に含まれるステートメントのいずれか1つが、ステートメント集合S’(テストケースtに含まれる差異ステートメントの集合)に含まれるステートメントから影響を受けるか否かを調べる。すなわち、テストケースtを実行した際に、ステートメント集合S’’のいずれか1つのステートメントが、テストケースtが実行する差異ステートメントに直接的又は間接的に依存する(すなわち、影響を受ける)か否かを調べる。このとき、依存関係解析結果G(図8)と依存解析結果グラフ(図9)を利用して、影響を受けるか否か(依存するか否か)を調べることができる。
テストケースtがテストケースNo.1の場合には、ステートメント集合S’’にはステートメント(9)が含まれ、ステートメント集合S’にはステートメント(1)が含まれる。例えば依存解析結果グラフ(図9)を利用すると、ステートメント(1)からステートメント(3)と(8)を経由してステートメント(9)に辿ることができるので、ステートメント(9)は、ステートメント(1)からステートメント(3)と(8)を介して影響を受ける(ステートメント(9)は、ステートメント(3)と(8)を介してステートメント(1)に間接的に依存する)ことがわかる。テストケースtがテストケースNo.1の場合には、ステートメント(1)、(2)、(3)、(6)、(7)、(8)、(9)及び(13)が実行される(図4)。従って、テストケースNo.1を実行すると、ステートメント(1)からステートメント(9)に辿ることができる、すなわち、ステートメント(9)は、ステートメント(1)から影響を受ける(ステートメント(1)に依存する)ことがわかる。
処理1008で、テストケースtを実行した際に、ステートメント集合S’’に含まれるステートメントのいずれか1つが、ステートメント集合S’に含まれるステートメントから影響を受けると判定された場合は、処理1009に遷移し、影響を受けないと判定された場合は、処理1010に遷移する。
なお、処理1008で、依存関係解析結果G(図8)と依存解析結果グラフ(図9)を利用して影響を受けるか否か(依存するか否か)を調べる際には、ステートメントの依存の種類が「制御依存」の場合は、依存元のステートメントを実行したら、依存先ステートメントを無条件で実行したものと見なす。これは、プログラムの修正の影響により、条件分岐の遷移先が変化する可能性を考慮するためである。例えば、ステートメント(8)を実行したら、ステートメント(8)の制御依存の依存先であるステートメント(9)、(11)及び(12)も実行したものと見なす。
処理1009では、テストケースtを、再実行が必要なテストケースとして選択する。上記の例では、テストケースNo.1が、再実行が必要なテストケースと選択される。
処理1010では、テストケース実行情報Tに含まれる全てのテストケースを調べた否かを判定する。全てのテストケースを調べた場合は、処理1011に遷移し、調べていない場合は、処理1002に遷移する。
処理1011では、処理1009で選択したテストケースを選択結果として、ユーザインターフェイス部110に出力する。ユーザインターフェイス部110は、例えばディスプレイやプリンタなどの出力装置に、選択結果を表示することができる。
以上の例では、処理1002で、テストケースtとしてテストケースNo.1が選択された場合を説明した。次に、処理1002で、テストケースtとしてテストケースNo.2が選択された場合とテストケースNo.5が選択された場合を簡単に説明する。
処理1002で、テストケースtとしてテストケースNo.2が選択された場合は、下記の通りである。
テストケースNo.2が実行するステートメントは、図4に示すように、ステートメント(1)、(2)、(4)、(5)、(6)、(7)、(8)、(9)及び(13)である。処理1003では、差異ステートメント(1)及び(5a)から成るステートメント集合S’が得られる。ステートメント集合S’が空でないので、処理1005に遷移し、変数zから成る期待値情報集合eを得る。処理1006では、ステートメント集合S’に含まれるステートメントとステートメント集合S’に含まれるステートメントから影響を受けるステートメントとから成る集合S’2として、ステートメント(1)、(3)、(5a)、(8)、(9)、(11)及び(12)から成る集合を得る。処理1007では、集合S’2の中で、期待値情報集合eに含まれる変数zの値を変えるステートメントの集合S’’として、ステートメント(9)から成る集合を得る。
処理1008では、テストケースtとしてテストケースNo.2を実行した際に、ステートメント集合S’’に含まれるステートメント(9)が、ステートメント集合S’に含まれるステートメント(1)又は(5a)から影響を受けるか否かを調べる。図9に示した依存解析結果グラフから、ステートメント(9)は、ステートメント(5a)から影響を受けないことと、ステートメント(9)は、ステートメント(3)と(8)を介してステートメント(1)から影響を受けることがわかる。図4に示すように、テストケースNo.2はステートメント(3)を実行しないので、ステートメント(9)は、ステートメント(1)から影響を受けない。従って、テストケースNo.2を実行すると、ステートメント(9)は、ステートメント(1)と(5a)のどちらからも影響を受けない。このため、処理1009を実行せず(テストケースNo.2を、再実行が必要なテストケースとして選択せず)、処理1010に遷移する。
処理1002で、テストケースtとしてテストケースNo.5が選択された場合は、下記の通りである。
テストケースNo.5が実行するステートメントは、図4に示すように、ステートメント(1)、(2)、(4)、(5)、(6)、(7)、(8)、(11)、(12)及び(13)である。処理1003では、差異ステートメント(1)、(5a)及び(12)から成るステートメント集合S’が得られる。ステートメント集合S’が空でないので、処理1005に遷移し、変数hから成る期待値情報集合eを得る。処理1006では、ステートメント集合S’に含まれるステートメントとステートメント集合S’に含まれるステートメントから影響を受けるステートメントとから成る集合S’2として、ステートメント(1)、(3)、(5a)、(8)、(9)、(11)及び(12)から成る集合を得る。処理1007では、集合S’2の中で、期待値情報集合eに含まれる変数hの値を変えるステートメントの集合S’’として、ステートメント(11)から成る集合を得る。
処理1008では、テストケースtとしてテストケースNo.5を実行した際に、ステートメント集合S’’に含まれるステートメント(11)が、ステートメント集合S’に含まれるステートメント(1)、(5a)又は(12)から影響を受けるか否かを調べる。図9に示した依存解析結果グラフから、ステートメント(11)は、ステートメント(1)からステートメント(3)と(8)を介して間接的に影響を受けることと、ステートメント(5a)から直接的に影響を受けることがわかる。図4に示すように、テストケースNo.5はステートメント(3)を実行しないので、テストケースNo.5を実行すると、ステートメント(11)は、ステートメント(1)から影響を受けない。しかし、テストケースNo.5はステートメント(5)を実行するので、テストケースNo.5を実行すると、ステートメント(5a)が実行されることになり、ステートメント(11)は、ステートメント(5a)から影響を受ける(上述したように、ステートメント(5a)は、変更前プログラムPのステートメント(5a)に対応するステートメント(5)が実行される場合には、実行されるものとする)。従って、テストケースNo.5を実行すると、ステートメント(11)は、ステートメント(5a)から影響を受ける。このため、処理1009では、テストケースNo.5を、再実行が必要なテストケースとして選択し、処理1010に遷移する。
本実施例によるテストケース選択装置は、以上に示したのと同じ処理を、図4に示したNo.1〜No.6のテストケースに対して実施し、テストケースNo.1、No.4、及びNo.5を再実行が必要なテストケースとして選択する。従って、本実施例によるテストケース選択装置では、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができる。一方、従来用いられてきた、プログラムの修正箇所を実行するテストケースを選択する手法の場合では、No.1〜No.6のテストケースの全ては修正したステートメント(1)を実行するため、再実行するテストケースの数を削減することができない。
図11は、テストケース選択装置101のハードウェア構成の一例を示す図である。テストケース選択装置101は、例えばコンピュータで構成することができ、CPU1102、主記憶装置1103、入力装置1104、出力装置1105、補助記憶装置1106、及び光学ドライブ1107を備え、これらはバス1101を介して互いに接続される。
入力装置1104には、例えば、マウスとキーボードの両方または一方を用いることができる。出力装置1105には、例えば、ディスプレイとプリンタの両方または一方を用いることができる。
光学ドライブ1107は、光ディスク1111に記録されたテストケース選択プログラム1108を読み込む。テストケース選択プログラム1108は、テストケース選択装置101を動作させるプログラムであり、補助記憶装置1106に格納される。
補助記憶装置1106は、テストケース選択プログラム1108と、テストケース選択プログラム1108の動作環境であるオペレーションシステム(OS)1110と、変更前プログラムP、変更後プログラムP’、テストケース実行情報T、及びテストケース期待値情報Eなどの開発データ1109とを格納する。開発データ1109は、入力装置1104によって、入力することができる。
CPU1102は、補助記憶装置1106に格納されたテストケース選択プログラム1108を主記憶装置1103にロードして実行する。CPU1102がテストケース選択プログラム1108を実行することにより、テストケース選択装置101が動作する。
テストケース選択プログラム1108を実行するための一連の操作は、入力装置1104によってユーザから入力される。テストケース選択プログラム1108が実行した一連の処理結果は、出力装置1105によって出力され、ユーザに伝えられる。
以上のように、本実施例によるテストケース選択装置は、プログラムの修正の影響がテストケースに定められた期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)をテストケース選択時の判断基準として用いる。このため、本実施例によるテストケース選択装置は、回帰テストの際に再実行するテストケースの数を削減して、プログラムのテスト工程の効率を向上させることができる。
本発明によるテストケース選択装置は、任意のプログラムに対して、回帰テストの際に再実行が必要なテストケースを選択するときに用いることができ、例えば、自動車、鉄道、及びエレベータなどの制御システムのプログラムに対して用いることができる。
なお、本発明は、上記の実施例に限定されるものではなく、様々な変形が可能である。例えば、上記の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備える態様に限定されるものではない。また、実施例の構成の一部について、削除したり、他の構成を追加・置換したりすることが可能である。
101…テストケース選択装置、102…変更前プログラム格納部、103…変更後プログラム格納部、104…テストケース実行情報格納部、105…テストケース期待値情報格納部、106…プログラム差異取得部、107…プログラム依存関係分析部、108…依存分析結果格納部、109…テストケース選択部、110…ユーザインターフェイス部、111…ユーザ、1101…バス、1102…CPU、1103…主記憶装置、1104…入力装置、1105…出力装置、1106…補助記憶装置、1107…光学ドライブ、1108…テストケース選択プログラム、1109…開発データ、1110…オペレーションシステム、1111…光ディスク。
Claims (4)
- テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、
変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、
前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、
前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、
前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、
前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、
前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備え、
前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する、
ことを特徴とするテストケース選択装置。 - 前記テストケース選択部は、
前記テストケース実行情報の前記テストケースから1つのテストケースを選び、
選んだ前記テストケースで実行した前記ステートメントに含まれる前記差異ステートメントを求め、
前記テストケース期待値情報から、選んだ前記テストケースの前記期待値の変数を取り出し、
求めた前記差異ステートメントから影響を受ける前記ステートメントを、前記依存関係分析結果を利用して求め、
求めた前記差異ステートメントと前記依存関係分析結果を利用して求めた前記ステートメントとから、取り出した前記期待値の変数の値を変えるステートメントを求めることで、
前記期待値の変数の値を変える可能性のあるテストケースを求める請求項1に記載のテストケース選択装置。 - 前記テストケース選択部は、
取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、選んだ前記テストケースを実行すると、求めた前記差異ステートメントから影響を受けるか否かを、前記依存関係分析結果を利用して求め、
取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、求めた前記差異ステートメントから影響を受ける場合には、選んだ前記テストケースを、前記回帰テストの際に実行する前記テストケースとして選択する請求項2に記載のテストケース選択装置。 - 前記プログラム依存関係分析部は、少なくとも変数による影響と条件分岐による影響とを調べることで、前記差異ステートメントから影響を受けるステートメントを求める請求項1に記載のテストケース選択装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015044697A JP2016164727A (ja) | 2015-03-06 | 2015-03-06 | テストケース選択装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015044697A JP2016164727A (ja) | 2015-03-06 | 2015-03-06 | テストケース選択装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016164727A true JP2016164727A (ja) | 2016-09-08 |
Family
ID=56876833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015044697A Pending JP2016164727A (ja) | 2015-03-06 | 2015-03-06 | テストケース選択装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016164727A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018097785A (ja) * | 2016-12-16 | 2018-06-21 | 株式会社東芝 | テスト支援装置、テスト支援プログラム |
WO2018150507A1 (ja) | 2017-02-16 | 2018-08-23 | 三菱電機株式会社 | テストケース選択装置およびテストケース選択プログラム |
JP2019057118A (ja) * | 2017-09-21 | 2019-04-11 | 株式会社東芝 | デバッグ支援装置、デバッグ支援プログラム |
WO2023058611A1 (ja) * | 2021-10-07 | 2023-04-13 | 株式会社日立製作所 | ソフトウェア不具合分析装置及びソフトウェア不具合分析方法 |
-
2015
- 2015-03-06 JP JP2015044697A patent/JP2016164727A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018097785A (ja) * | 2016-12-16 | 2018-06-21 | 株式会社東芝 | テスト支援装置、テスト支援プログラム |
WO2018150507A1 (ja) | 2017-02-16 | 2018-08-23 | 三菱電機株式会社 | テストケース選択装置およびテストケース選択プログラム |
JP2019057118A (ja) * | 2017-09-21 | 2019-04-11 | 株式会社東芝 | デバッグ支援装置、デバッグ支援プログラム |
WO2023058611A1 (ja) * | 2021-10-07 | 2023-04-13 | 株式会社日立製作所 | ソフトウェア不具合分析装置及びソフトウェア不具合分析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7681180B2 (en) | Parameterized test driven development | |
Yilmaz et al. | Moving forward with combinatorial interaction testing | |
US9317399B2 (en) | Policy evaluation based upon dynamic observation, static analysis and code change history | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
US20070006037A1 (en) | Automated test case result analyzer | |
Kalinowski et al. | Evidence-based guidelines to defect causal analysis | |
US8327191B2 (en) | Automatically populating symptom databases for software applications | |
US8448147B2 (en) | Heterogenic Coverage Analysis | |
JP2016164727A (ja) | テストケース選択装置 | |
JP5451034B2 (ja) | テスト計画表作成装置及びそのプログラム | |
Kadry | A new proposed technique to improve software regression testing cost | |
JP2015011372A (ja) | デバッグ支援システム、方法、プログラム及び記録媒体 | |
US8589898B2 (en) | Method and apparatus for analyzing software including a calibrated value | |
JP7215501B2 (ja) | 依存関係検出装置および依存関係検出方法 | |
JP6723483B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
US20150007139A1 (en) | Optimizing error parsing in an integrated development environment | |
Qu | Testing of configurable systems | |
JP6320269B2 (ja) | ソフトウェア試験支援装置およびソフトウェア試験支援プログラム | |
JP4957521B2 (ja) | ソフトウェア部分テストシステム、それに用いる方法およびプログラム | |
JP2009104490A (ja) | プログラムのテスト装置 | |
JP2023000907A (ja) | ソースコード修正支援装置及びソースコード修正支援方法 | |
JPH11224211A (ja) | ソフトウェア検査支援装置 | |
JP2009048291A (ja) | システム解析装置及びプログラム | |
JP4853998B2 (ja) | デバッガ装置及びそのデバッガ装置を使用したデバッグ方法 | |
KR102519639B1 (ko) | 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치 |