図面 (/)

技術 テストケース選択装置

出願人 株式会社日立産業制御ソリューションズ
発明者 福田毅篠田北斗成沢文雄
出願日 2015年3月6日 (5年9ヶ月経過) 出願番号 2015-044697
公開日 2016年9月8日 (4年3ヶ月経過) 公開番号 2016-164727
状態 未査定
技術分野 デバッグ/監視
主要キーワード 期待値情報 開発データ 結果グラフ 代入演算子 C言語 回帰テスト 制御依存 テストケース
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2016年9月8日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (12)

課題

回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムテスト工程の効率を向上させることができるテストケース選択装置を提供する。

解決手段

変更前後のプログラムを格納する格納部102、103と、変更前プログラムに実行したテストケースとステートメント実行情報として格納する格納部104と、テストケースで出力される変数である期待値を格納する格納部105と、変更前後のプログラムで異なるステートメントを差異ステートメントとして求める取得部106と、差異ステートメントから影響を受けるステートメントを依存関係分析結果として求める分析部107と、実行情報のステートメントと期待値と差異ステートメントと依存関係分析結果を用いて、変更前後のプログラムで期待値の値を変える可能性のあるテストケースを、回帰テストで実行するテストケースとして選択する選択部109を備える。

概要

背景

プログラム修正した際、修正箇所以外に意図しない影響が波及していないか、すなわち、修正によりプログラムに不具合が生じていないかを確認するテスト回帰テストと呼ぶ。回帰テストの最も単純な実施形態では、事前に用意したテストケースを全て再テストする。しかし、この場合には、ソフトウェア規模が大きくなるほど、テストケースを全て再テストするのに大きな工数が必要となり、回帰テストの効率が低下するという課題がある。また、テスト工数が大きいという理由で、製品リリースまでに繰り返される個々の修正についての再テストを先延ばしにすると、重要な不具合を開発後期まで見落とす可能性が高い。このため、既存のテストケースのうち再テストが必要なもののみを選択して実行することで回帰テストの工数を削減する回帰テスト選択が一般に行われている。

回帰テスト選択手法の一例として、テストケースがプログラムのどのステートメントを実行するかを予め記録しておき、修正箇所を実行するテストケースを自動的に選択する方法がある。特許文献1には、これと同様の方法を用いた回帰テスト選択手法の例が記載されている。特許文献1に記載されたシステムと方法では、修正した箇所に関連のあるステートメントを優先度依存関係の強さ)に応じて抽出し、抽出したステートメントと関連付けられたテストケースを実行することで、回帰テストを効率化している。

概要

回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供する。変更前後のプログラムを格納する格納部102、103と、変更前プログラムに実行したテストケースとステートメントを実行情報として格納する格納部104と、テストケースで出力される変数である期待値を格納する格納部105と、変更前後のプログラムで異なるステートメントを差異ステートメントとして求める取得部106と、差異ステートメントから影響を受けるステートメントを依存関係分析結果として求める分析部107と、実行情報のステートメントと期待値と差異ステートメントと依存関係分析結果を用いて、変更前後のプログラムで期待値の値を変える可能性のあるテストケースを、回帰テストで実行するテストケースとして選択する選択部109を備える。

目的

本発明は、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供する

効果

実績

技術文献被引用数
0件
牽制数
1件

この技術が所属する分野

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備え、前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する、ことを特徴とするテストケース選択装置

請求項2

前記テストケース選択部は、前記テストケース実行情報の前記テストケースから1つのテストケースを選び、選んだ前記テストケースで実行した前記ステートメントに含まれる前記差異ステートメントを求め、前記テストケース期待値情報から、選んだ前記テストケースの前記期待値の変数を取り出し、求めた前記差異ステートメントから影響を受ける前記ステートメントを、前記依存関係分析結果を利用して求め、求めた前記差異ステートメントと前記依存関係分析結果を利用して求めた前記ステートメントとから、取り出した前記期待値の変数の値を変えるステートメントを求めることで、前記期待値の変数の値を変える可能性のあるテストケースを求める請求項1に記載のテストケース選択装置。

請求項3

前記テストケース選択部は、取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、選んだ前記テストケースを実行すると、求めた前記差異ステートメントから影響を受けるか否かを、前記依存関係分析結果を利用して求め、取り出した前記期待値の変数の値を変えるステートメントとして求めた前記ステートメントが、求めた前記差異ステートメントから影響を受ける場合には、選んだ前記テストケースを、前記回帰テストの際に実行する前記テストケースとして選択する請求項2に記載のテストケース選択装置。

請求項4

前記プログラム依存関係分析部は、少なくとも変数による影響と条件分岐による影響とを調べることで、前記差異ステートメントから影響を受けるステートメントを求める請求項1に記載のテストケース選択装置。

技術分野

0001

本発明は、プログラム回帰テストの際に再実行が必要なテストケースを選択することができるテストケース選択装置に関する。

背景技術

0002

プログラムを修正した際、修正箇所以外に意図しない影響が波及していないか、すなわち、修正によりプログラムに不具合が生じていないかを確認するテストを回帰テストと呼ぶ。回帰テストの最も単純な実施形態では、事前に用意したテストケースを全て再テストする。しかし、この場合には、ソフトウェア規模が大きくなるほど、テストケースを全て再テストするのに大きな工数が必要となり、回帰テストの効率が低下するという課題がある。また、テスト工数が大きいという理由で、製品リリースまでに繰り返される個々の修正についての再テストを先延ばしにすると、重要な不具合を開発後期まで見落とす可能性が高い。このため、既存のテストケースのうち再テストが必要なもののみを選択して実行することで回帰テストの工数を削減する回帰テスト選択が一般に行われている。

0003

回帰テスト選択手法の一例として、テストケースがプログラムのどのステートメントを実行するかを予め記録しておき、修正箇所を実行するテストケースを自動的に選択する方法がある。特許文献1には、これと同様の方法を用いた回帰テスト選択手法の例が記載されている。特許文献1に記載されたシステムと方法では、修正した箇所に関連のあるステートメントを優先度依存関係の強さ)に応じて抽出し、抽出したステートメントと関連付けられたテストケースを実行することで、回帰テストを効率化している。

先行技術

0004

特開2008−204405号公報

発明が解決しようとする課題

0005

大規模なソフトウェア開発においては回帰テストの工数が非常に大きくなる傾向があることを鑑みると、回帰テスト選択手法では、再テストするテストケースの数をできる限り削減することが望ましい。とりわけ、ソフトウェアの最終的な品質を確認するテストとは別にプログラムの修正毎に回帰テストを実施する際には、テストケースの数の削減が必須である。

0006

しかしながら、特許文献1に記載の技術のように修正箇所や修正に関連のある箇所(修正の影響を受ける箇所)を実行するテストケースを選択する方法には、プログラムの不具合を発見できないテストケースを多数選択してしまうという課題がある。例えば、プログラムの初期化処理のように多くのテストケースが共通して実行する箇所に修正があった場合には、回帰テストで実行するテストケースの数をほとんど削減することができない。そのうえ、このような修正箇所を実行するテストケースのうち、初期化処理そのものや修正した初期化処理に影響を受ける箇所をテストしているものを除けば、大半のテストケースは、実行してもプログラムの不具合を発見できないテストケースである。

0007

このように、従来の回帰テスト選択手法では、回帰テストで実行するテストケースの数を削減できない場合があり、このような場合にプログラムのテスト工程の効率が低下するという課題がある。

0008

本発明は、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することを目的とする。

課題を解決するための手段

0009

本発明によるテストケース選択装置は、次のような特徴を備える。テストケースを実行した際に出力される変数とこの変数の値を期待値とし、前記期待値は前記テストケース毎に定められており、変更前プログラムと、前記変更前プログラムに変更がされた変更後プログラムとを格納する格納部と、前記変更前プログラムに対して実行した前記テストケースと、実行したこのテストケースで実行したステートメントとを、テストケース実行情報として格納するテストケース実行情報格納部と、前記テストケース毎に、前記期待値の変数をテストケース期待値情報として格納するテストケース期待値情報格納部と、前記変更前プログラムと前記変更後プログラムとで異なるステートメントを差異ステートメントとして求めるプログラム差異取得部と、前記差異ステートメントから影響を受けるステートメントを依存関係分析結果として求めるプログラム依存関係分析部と、前記変更後プログラムの回帰テストの際に実行する前記テストケースを選択するテストケース選択部とを備える。前記テストケース選択部は、前記テストケース実行情報の前記ステートメントと、前記テストケース期待値情報の前記期待値と、前記差異ステートメントとから、前記依存関係分析結果を利用して、前記変更前プログラムと前記変更後プログラムとで前記期待値の変数の値を変える可能性のあるテストケースを求め、求めたこのテストケースを前記回帰テストの際に実行する前記テストケースとして選択する。

発明の効果

0010

本発明によると、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができるテストケース選択装置を提供することができる。

図面の簡単な説明

0011

本発明の実施例によるテストケース選択装置の構成の一例を示す図。
変更前プログラム格納部に格納された変更前プログラムの一例を示す図。
変更後プログラム格納部に格納された変更後プログラムの一例を示す図。
テストケース実行情報格納部に格納されたテストケース実行情報の一例を示す図。
テストケース期待値情報格納部に格納されたテストケース期待値情報の一例を示す図。
プログラム差異取得部が実行する処理手順の一例を示す図。
プログラム依存関係分析部が実行する処理手順の一例を示す図。
依存分析結果格納部に格納された依存関係分析結果の一例を示す図。
図8に示した依存関係を可視化した依存解析結果グラフ
テストケース選択部が実行する処理手順の一例を示す図。
テストケース選択装置のハードウェア構成の一例を示す図。

実施例

0012

本発明によるテストケース選択装置は、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにすることで、再実行が必要として選択するテストケースの数を減らし、回帰テストの効率を高めることができる。

0013

ここで、再実行する価値があるテストケース、つまり、プログラムの修正によって生じた不具合を発見可能なテストケースとは何かについて詳細を述べる。

0014

テストケースは、プログラムが期待されている動作を実行するか否かを調べるために実行され、プログラムを実行する手順(テストケースで実行するステートメントとその実行する順序)と、その手順を実行する際に必要な入力変数とその値と、その手順を実行した際に得られる出力変数とその値(期待値)で定義される。「テストケースを実行する」とは、テストケースで定義されているステートメントを実行することである。通常は、複数のテストケースが予め定義される。

0015

テストケースを実行した際に出力される変数とその値は、「期待値」と呼ばれる。期待値は、テストケース毎に定められる。すなわち、テストケースに応じて、期待値が設定される。

0016

従って、プログラムの修正によって生じた不具合は、テストケースの実行結果すなわち特定のプログラム出力と、そのテストケースに定められた期待値との間に差異があった場合に発見される。このことから、不具合を発見可能なテストケースとは、修正の影響がプログラム出力に及び、その結果、プログラム出力とこれに対応する期待値との間に差異が生じるテストケースである。

0017

従来の方法で不具合を発見できないテストケースを多数選択してしまう理由として、上述した、テストケースに定められた期待値についての情報を利用していないことが挙げられる。

0018

本発明によるテストケース選択装置では、テストケースに定められた期待値についての情報を利用し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)をテストケース選択時の判断基準として用いる。このようにして、本発明によるテストケース選択装置では、プログラムの回帰テストの際に、プログラムの修正によって生じた不具合を発見できないテストケースを再実行が必要なテストケースとして選択しないようにし、回帰テストの効率を高める。

0019

以下、図面を参照し、本発明の実施例によるテストケース選択装置を説明する。

0020

図1は、本発明の実施例によるテストケース選択装置101の構成の一例を示す図である。テストケース選択装置101は、変更前プログラム格納部102、変更後プログラム格納部103、テストケース実行情報格納部104、テストケース期待値情報格納部105、プログラム差異取得部106、プログラム依存関係分析部107、依存分析結果格納部108、テストケース選択部109、及びユーザインターフェイス(I/F)部110を備える。テストケース選択装置101は、例えば、コンピュータで構成することができる。

0021

変更前プログラム格納部102は、変更(修正)される前のプログラムソースコード(変更前プログラム)を格納する。変更後プログラム格納部103は、変更前プログラムの一部に変更がされたプログラムソースコード(変更後プログラム)を格納する。テストケース選択装置101は、変更前プログラムと変更後プログラムを入力し、変更前プログラムを変更前プログラム格納部102に、変更後プログラムを変更後プログラム格納部103に、それぞれ格納する。

0022

テストケース実行情報格納部104は、変更前プログラムに対して実行したテストケースと、各テストケースで実行したステートメントとを、テストケース実行情報Tとして格納する。テストケース実行情報Tは、事前に変更前プログラムに対して各テストケースを実行することで得られ、テストケース実行情報格納部104に予め格納される。

0023

テストケース期待値情報格納部105は、各テストケースに定められた期待値とこの期待値に関連するプログラム出力の情報とを、テストケース期待値情報Eとして格納する。テストケース期待値情報Eは、各テストケースを定義したときに得られる情報であり、テストケース期待値情報格納部105に予め格納される。
プログラム差異取得部106は、変更前プログラムと変更後プログラムを入力し、これらのプログラムを比較、分析して差異ステートメントを求める。差異ステートメントについては、図6を用いて後述する。

0024

プログラム依存関係分析部107は、差異ステートメントを入力し、差異ステートメントに対して依存関係を持つステートメントを求めて、依存関係を分析する。依存関係を持つステートメントとその分析結果は、依存関係分析結果Gとして、依存分析結果格納部108に格納される。依存関係については、図7を用いて後述する。

0025

テストケース選択部109は、変更前プログラムと変更後プログラムとで期待値の変数の値を変える可能性のあるテストケースを、変更後プログラムの回帰テストの際に実行するテストケースとして選択する。具体的には、テストケース選択部109は、テストケース実行情報T、テストケース期待値情報E、及び依存関係分析結果Gを入力し、プログラムの修正の影響が期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)の判断に基づき、再実行が必要なテストケースを選択する。

0026

ユーザインターフェイス部110は、テストケース選択装置101の処理結果やユーザ111からの指示を伝達するための手段を提供する。ユーザインターフェイス部110は、例えば、コンピュータのマウスキーボードなどの入力装置ディスプレイプリンタなどの出力装置、及びこれらを制御するプログラムで構成することができる。

0027

図2は、変更前プログラム格納部102に格納された変更前プログラムの一例を示す図である。図2では、一例として、C言語で書かれたプログラムソースコードの一部を示している。本実施例では、プログラムソースコードの各行のことを「ステートメント」と称する。各ステートメントには、(1)〜(13)のステートメント番号が付けられている。

0028

図3は、変更後プログラム格納部103に格納された変更後プログラムの一例を示す図である。変更後プログラムは、図2に示した変更前プログラムと同じ形式で変更後プログラム格納部103に格納されるが、変更前プログラムの一部に変更が加えられている。ステートメント番号(1)のステートメントは変更され、ステートメント番号(5a)のステートメントは追加され、変更前プログラムのステートメント番号(12)のステートメントは削除されている。以下では、「ステートメント番号(1)のステートメント」のことを「ステートメント(1)」と略称し、他のステートメント番号のステートメントも同様に略称する。

0029

図2図3において、プログラムソースコードの変更箇所には、記号「*」が付けられている。すなわち、ステートメント(1)、(5a)、及び(12)には、記号「*」が付けられている。

0030

図4は、テストケース実行情報格納部104に格納されたテストケース実行情報Tの一例を示す図である。テストケース実行情報Tは、変更前プログラムに対して各テストケースを実行した際に実行したステートメントのステートメント番号についての情報である。図4に示すように、各々のテストケースには、一意に特定可能なように「テストケースNo.」が付けられているとともに、そのテストケースで実行したステートメント番号(「実行ステートメント情報」)が対応付けられている。すなわち、テストケース実行情報Tは、変更前プログラムに対して実行したテストケースと、そのテストケースで実行したステートメントとを対応付けた情報である。

0031

図5は、テストケース期待値情報格納部105に格納されたテストケース期待値情報Eの一例を示す図である。テストケース期待値情報Eは、各テストケースに定められた期待値に対応するプログラム出力(期待値の変数)についての情報である。図5に示すように、各々のテストケースには、そのテストケースの期待値に対応するプログラム出力(期待値の変数)が対応付けられている。このプログラム出力は、各テストケースを定義したときに設定された期待値に基づいて、予め得ることができる。プログラム出力としては、変数の他に、プログラムのRAM領域のアドレス関数へ与えるパラメータ、及び関数の戻り値等を含めることもできる。

0032

なお、図5に示したテストケース期待値情報Eのうち、図2図3に示したプログラムに関連する変数はzとhの2つである。これら2つの変数についてのみ案すると、テストケースNo.1〜3は変数zの出力を、テストケースNo.4〜6は変数hの出力を、それぞれ調べるテストケースと言うことができる。

0033

図6は、プログラム差異取得部106が実行する処理手順の一例を示す図である。

0034

処理601では、変更前プログラムPを変更前プログラム格納部102から入力し、変更後プログラムP’を変更後プログラム格納部103から入力する。

0035

処理602では、変更前プログラムPと変更後プログラムP’とを比較し、これらの間で異なるステートメントを差異ステートメントとして求めて、差異ステートメントの集合である差異ステートメント集合Sを得る。差異ステートメントとは、変更前プログラムPと変更後プログラムP’との間で異なるステートメントであるので、変更前プログラムPで変更又は削除されたステートメントと、変更後プログラムP’に追加されたステートメントのことである。本実施例の場合では、図2図3に示した変更されたステートメント(1)、図2に示した削除されたステートメント(12)、及び図3に示した追加されたステートメント(5a)が差異ステートメントである。すなわち、図2図3において記号「*」が付けられたステートメントの集合が、差異ステートメント集合Sである。

0036

なお、処理602を実施した際に得られた変更前プログラムPと変更後プログラムP’との間で対応するステートメントは、後から調べられるようにしておく。本実施例では、ステートメントのこの対応関係は、ステートメント番号からわかる。図2図3において、同じステートメント番号を持つステートメントは、対応するステートメントである。また、変更後プログラムP’(図3)に追加されたステートメントの番号は、「5a」のように、変更前プログラムP(図2)のステートメントのうち、追加されたステートメントに対応するステートメント(追加されたステートメントの1行前のステートメント)の番号「5」の後にアルファベット「a」を付与し、対応がわかるようにしている。

0037

処理603は、処理602で得られた差異ステートメント集合Sを、続く処理の入力として返す。

0038

図7は、プログラム依存関係分析部107が実行する処理手順の一例を示す図である。

0039

処理701では、変更前プログラムP、変更後プログラムP’、及び差異ステートメント集合Sを、プログラム差異取得部106から入力する。

0040

処理702では、変更前プログラムPと変更後プログラムP’のステートメントを分析し、差異ステートメント集合Sのステートメント(差異ステートメント)に対して依存関係にあるステートメントを求める。求めた依存関係にあるステートメント(依存元ステートメントと依存先ステートメント)は、依存の種類と併せて、依存関係分析結果Gとして出力される。ステートメントの依存の種類は、後述するように、少なくとも「データ依存」と「制御依存」とする。すなわち、プログラム依存関係分析部107は、少なくとも「データ依存」と「制御依存」とを調べることで、依存関係分析結果Gを求める。

0041

依存関係とは、2つのステートメントにおいて、一方が変更、削除、又は追加されたことにより、もう一方がその影響を受ける関係のことである。依存関係には、差異ステートメントからの直接的な依存関係だけでなく、他のステートメントを介した間接的な依存関係も含まれる。すなわち、依存関係にあるステートメントとして、例えば、差異ステートメントに記載された変数を含むステートメント(直接的な依存関係にあるステートメント)だけでなく、差異ステートメントに記載された変数を含まなくても差異ステートメントから影響を受けるステートメント(間接的な依存関係にあるステートメント)も求める。依存関係分析結果Gには、プログラムでのステートメントの実行の流れにおいて、差異ステートメントから辿ることのできる依存関係のみが含まれる。

0042

処理703では、処理702で得られた依存関係分析結果Gを依存分析結果格納部108に格納する。さらに、プログラム差異取得部106から入力した差異ステートメント集合Sを依存分析結果格納部108に格納する。

0043

図8は、依存分析結果格納部108に格納された依存関係分析結果Gの一例を示す図である。図8に示すように、依存関係分析結果Gでは、依存元ステートメント、依存先ステートメント、及び依存の種類が、依存関係として対応付けられている。

0044

依存の種類において、「データ依存」とは、変数による影響(依存関係)があることを意味する。例えば、図2に示した変更前プログラムにおいて、ステートメント(1)での変数xに対しての変更は、変数xを利用しているステートメント(3)に影響するため、これらのステートメント間にはデータ依存の関係がある。

0045

依存の種類において、「制御依存」とは、if文などの条件分岐による影響(依存関係)があることを意味する。例えば、図2に示した変更前プログラムにおいて、ステートメント(8)は、ステートメント(9)を実行するか否かを制御するため、これらのステートメント間には制御依存の関係がある。

0046

依存分析結果格納部108には、変更前プログラムPと変更後プログラムP’とで重複する依存関係を省いて、依存関係分析結果Gを格納する。例えば、図2図3に示すように、ステートメント(1)からステートメント(3)への依存関係は、変更前プログラムPと変更後プログラムP’とで重複するため、一方を省いている。

0047

図9は、図8に示した依存関係をグラフで可視化し、わかりやすく示した依存解析結果グラフである。図9において、角の丸い四角い枠はステートメントを示し、矢印は依存関係を示している。矢印の根元側(tail)のステートメントが依存元ステートメントであり、矢印の先端側(head)のステートメントが依存先ステートメントである。ステートメントには、ステートメント番号が付けられている。矢印の脇に示された文字は、依存の種類を表し、「D」はデータ依存を、「C」は制御依存を示している。ステートメント番号に記号「*」が付与されたステートメントは、差異ステートメントである。

0048

図10は、テストケース選択部109が実行する処理手順の一例を示す図である。

0049

処理1001では、差異ステートメント集合Sと依存関係分析結果Gを依存分析結果格納部108から入力し、テストケース実行情報Tをテストケース実行情報格納部104から入力し、テストケース期待値情報Eをテストケース期待値情報格納部105から入力する。

0050

処理1002では、テストケース実行情報T(図4)から1件のテストケースtを選び出す。テストケース実行情報Tに含まれる全てのテストケースは、重複なく選び出せるものとする。なお、以下では、テストケースtとしてテストケースNo.1(図4を参照)が選択された場合を例に挙げて説明する。

0051

処理1003では、ステートメント集合S’を得る。ステートメント集合S’は、テストケースtで実行した、差異ステートメント集合Sに含まれるステートメントの集合である。すなわち、ステートメント集合S’は、テストケースtに含まれる差異ステートメントである。

0052

例えば、テストケース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)が実行される場合には、実行されるものとする。

0053

処理1004では、ステートメント集合S’が空か否かを判断する。ステートメント集合S’が空である場合は、テストケースtが差異ステートメントを実行しないので、処理1010に遷移する。ステートメント集合S’が空でない場合は、処理1005に遷移する。

0054

処理1005では、テストケース期待値情報E(図5)から、テストケースtにおけるプログラム出力(変数)を取り出し、期待値情報集合eを作成する。テストケースtがテストケースNo.1の場合には、テストケース期待値情報Eから変数zが取り出される。従って、期待値情報集合eは、変数zから成る。

0055

処理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)から依存関係を示す矢印を辿っていくことで容易に得られる。

0056

処理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)から成る。

0057

処理1008では、テストケースtを実行した際に、ステートメント集合S’’に含まれるステートメントのいずれか1つが、ステートメント集合S’(テストケースtに含まれる差異ステートメントの集合)に含まれるステートメントから影響を受けるか否かを調べる。すなわち、テストケースtを実行した際に、ステートメント集合S’’のいずれか1つのステートメントが、テストケースtが実行する差異ステートメントに直接的又は間接的に依存する(すなわち、影響を受ける)か否かを調べる。このとき、依存関係解析結果G(図8)と依存解析結果グラフ(図9)を利用して、影響を受けるか否か(依存するか否か)を調べることができる。

0058

テストケース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)に依存する)ことがわかる。

0059

処理1008で、テストケースtを実行した際に、ステートメント集合S’’に含まれるステートメントのいずれか1つが、ステートメント集合S’に含まれるステートメントから影響を受けると判定された場合は、処理1009に遷移し、影響を受けないと判定された場合は、処理1010に遷移する。

0060

なお、処理1008で、依存関係解析結果G(図8)と依存解析結果グラフ(図9)を利用して影響を受けるか否か(依存するか否か)を調べる際には、ステートメントの依存の種類が「制御依存」の場合は、依存元のステートメントを実行したら、依存先ステートメントを無条件で実行したものと見なす。これは、プログラムの修正の影響により、条件分岐の遷移先が変化する可能性を考慮するためである。例えば、ステートメント(8)を実行したら、ステートメント(8)の制御依存の依存先であるステートメント(9)、(11)及び(12)も実行したものと見なす。

0061

処理1009では、テストケースtを、再実行が必要なテストケースとして選択する。上記の例では、テストケースNo.1が、再実行が必要なテストケースと選択される。

0062

処理1010では、テストケース実行情報Tに含まれる全てのテストケースを調べた否かを判定する。全てのテストケースを調べた場合は、処理1011に遷移し、調べていない場合は、処理1002に遷移する。

0063

処理1011では、処理1009で選択したテストケースを選択結果として、ユーザインターフェイス部110に出力する。ユーザインターフェイス部110は、例えばディスプレイやプリンタなどの出力装置に、選択結果を表示することができる。

0064

以上の例では、処理1002で、テストケースtとしてテストケースNo.1が選択された場合を説明した。次に、処理1002で、テストケースtとしてテストケースNo.2が選択された場合とテストケースNo.5が選択された場合を簡単に説明する。

0065

処理1002で、テストケースtとしてテストケースNo.2が選択された場合は、下記の通りである。

0066

テストケース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)から成る集合を得る。

0067

処理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に遷移する。

0068

処理1002で、テストケースtとしてテストケースNo.5が選択された場合は、下記の通りである。

0069

テストケース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)から成る集合を得る。

0070

処理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に遷移する。

0071

本実施例によるテストケース選択装置は、以上に示したのと同じ処理を、図4に示したNo.1〜No.6のテストケースに対して実施し、テストケースNo.1、No.4、及びNo.5を再実行が必要なテストケースとして選択する。従って、本実施例によるテストケース選択装置では、回帰テストの際に再実行が必要として選択するテストケースの数を削減することができ、プログラムのテスト工程の効率を向上させることができる。一方、従来用いられてきた、プログラムの修正箇所を実行するテストケースを選択する手法の場合では、No.1〜No.6のテストケースの全ては修正したステートメント(1)を実行するため、再実行するテストケースの数を削減することができない。

0072

図11は、テストケース選択装置101のハードウェア構成の一例を示す図である。テストケース選択装置101は、例えばコンピュータで構成することができ、CPU1102、主記憶装置1103、入力装置1104、出力装置1105、補助記憶装置1106、及び光学ドライブ1107を備え、これらはバス1101を介して互いに接続される。

0073

入力装置1104には、例えば、マウスとキーボードの両方または一方を用いることができる。出力装置1105には、例えば、ディスプレイとプリンタの両方または一方を用いることができる。

0074

光学ドライブ1107は、光ディスク1111に記録されたテストケース選択プログラム1108を読み込む。テストケース選択プログラム1108は、テストケース選択装置101を動作させるプログラムであり、補助記憶装置1106に格納される。

0075

補助記憶装置1106は、テストケース選択プログラム1108と、テストケース選択プログラム1108の動作環境であるオペレーションシステム(OS)1110と、変更前プログラムP、変更後プログラムP’、テストケース実行情報T、及びテストケース期待値情報Eなどの開発データ1109とを格納する。開発データ1109は、入力装置1104によって、入力することができる。

0076

CPU1102は、補助記憶装置1106に格納されたテストケース選択プログラム1108を主記憶装置1103にロードして実行する。CPU1102がテストケース選択プログラム1108を実行することにより、テストケース選択装置101が動作する。

0077

テストケース選択プログラム1108を実行するための一連の操作は、入力装置1104によってユーザから入力される。テストケース選択プログラム1108が実行した一連の処理結果は、出力装置1105によって出力され、ユーザに伝えられる。

0078

以上のように、本実施例によるテストケース選択装置は、プログラムの修正の影響がテストケースに定められた期待値に対応するプログラム出力に及ぶか否か(プログラムの修正によりプログラム出力が期待値と異なる可能性があるか否か)をテストケース選択時の判断基準として用いる。このため、本実施例によるテストケース選択装置は、回帰テストの際に再実行するテストケースの数を削減して、プログラムのテスト工程の効率を向上させることができる。

0079

本発明によるテストケース選択装置は、任意のプログラムに対して、回帰テストの際に再実行が必要なテストケースを選択するときに用いることができ、例えば、自動車鉄道、及びエレベータなどの制御システムのプログラムに対して用いることができる。

0080

なお、本発明は、上記の実施例に限定されるものではなく、様々な変形が可能である。例えば、上記の実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明は、必ずしも説明した全ての構成を備える態様に限定されるものではない。また、実施例の構成の一部について、削除したり、他の構成を追加・置換したりすることが可能である。

0081

101…テストケース選択装置、102…変更前プログラム格納部、103…変更後プログラム格納部、104…テストケース実行情報格納部、105…テストケース期待値情報格納部、106…プログラム差異取得部、107…プログラム依存関係分析部、108…依存分析結果格納部、109…テストケース選択部、110…ユーザインターフェイス部、111…ユーザ、1101…バス、1102…CPU、1103…主記憶装置、1104…入力装置、1105…出力装置、1106…補助記憶装置、1107…光学ドライブ、1108…テストケース選択プログラム、1109…開発データ、1110…オペレーションシステム、1111…光ディスク。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

  • 富士通株式会社の「 情報管理装置及び情報管理プログラム」が 公開されました。( 2020/10/29)

    【課題】ログの保管に用いられるディスクサイズの見積もりの労力を削減する情報管理装置及び情報管理プログラムを提供する。【解決手段】ログ情報収集部11は、収集設定にしたがって動作履歴が取得される管理対象装... 詳細

  • ローム株式会社の「 ウォッチドッグタイマ」が 公開されました。( 2020/10/29)

    【課題】適切に周波数異常を検出する。【解決手段】ウォッチドッグタイマ173は、トリガ型の第1周波数異常検出部173aと、通信断絶検知型の第2周波数異常検出部173bと、Q&A型の第3周波数異常検出部1... 詳細

  • ローム株式会社の「 監視装置」が 公開されました。( 2020/10/29)

    【課題】故障検出率の高い監視装置を提供する。【解決手段】監視装置100は、監視対象(例えばDIN1〜DIN4)の異常検出を行う監視部(例えばコンパレータ152〜159)と、監視部が正常であるか否かを診... 詳細

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ