(57)【要約】  テストケース生成装置（１０）は、値が入力される度に１ステップの処理を実行するソフトウェアであるテスト対象ソフトウェアを解析して、当該ソフトウェアのテストのために入力される値の系列をテストケースとして生成する。その際に、等価ステップ検査部（１９）は、状態変数について、状態変数を共用する複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定する。テストケース生成部（２０）は、等価ステップ検査部（１９）により等価ステップであると判定された２ステップの一方を除き、テスト対象ソフトウェアを解析してテストケースに含める値を生成する。
2019142266.tif 000002
【特許請求の範囲】
【請求項１】
値が入力される度に１ステップの処理を実行するソフトウェアを解析して、前記ソフトウェアのテストのために入力される値の系列をテストケースとして生成するテストケース生成装置において、
複数ステップの処理で共用され、前記複数ステップの処理が順次実行されていく中で、各ステップの処理の実行結果に応じた値を保持する状態変数について、前記複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定する等価ステップ検査部と、
前記等価ステップ検査部により等価ステップであると判定された２ステップの一方を除き、前記ソフトウェアを解析して前記テストケースに含める値を生成するテストケース生成部と
を備えるテストケース生成装置。
【請求項２】
前記ソフトウェアを解析して、前記複数ステップの処理で共用され、各ステップの処理の実行結果に応じた値を保持する複数の変数のうち、閾値に達しているかどうかによって次ステップの処理を異にする第１変数を除く第２変数を前記状態変数として抽出する状態変数抽出部をさらに備える請求項１に記載のテストケース生成装置。
【請求項３】
前記第１変数の仕様を示す情報が入力されるプログラム情報入力部をさらに備え、
前記状態変数抽出部は、前記プログラム情報入力部に入力された情報に基づいて前記第１変数を判別する請求項２に記載のテストケース生成装置。
【請求項４】
前記状態変数抽出部は、前記ソフトウェアを解析して前記第１変数を判別する請求項２に記載のテストケース生成装置。
【請求項５】
前記テストケース生成部は、前記ソフトウェアのテストの網羅基準が満たされるまで、前記ソフトウェアを、前記等価ステップ検査部により等価ステップであると判定された２ステップの一方を除き１ステップずつ順番に解析して前記テストケースに含める値を生成する請求項１から４のいずれか１項に記載のテストケース生成装置。
【請求項６】
前記等価ステップ検査部は、前記複数ステップのうち連続する２ステップの各組み合わせが等価ステップであるかどうかを判定し、
前記テストケース生成部は、前記等価ステップ検査部により等価ステップであると判定された２ステップのうち後に処理が実行されるステップを除き、前記ソフトウェアを解析して前記テストケースに含める値を生成する請求項１から５のいずれか１項に記載のテストケース生成装置。
【請求項７】
前記等価ステップ検査部は、前記状態変数と、閾値に達しているかどうかによって次ステップの処理を異にする変数との両方について、前記複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが完全等価ステップであると判定し、
前記テストケース生成部は、前記等価ステップ検査部により完全等価ステップであると判定された２ステップのうち後に処理が実行されるステップに到達するまで、前記ソフトウェアを、前記等価ステップ検査部により等価ステップであると判定された２ステップの一方を除き１ステップずつ順番に解析して前記テストケースに含める値を生成する請求項１から５のいずれか１項に記載のテストケース生成装置。
【請求項８】
値が入力される度に１ステップの処理を実行するソフトウェアを解析して、前記ソフトウェアのテストのために入力される値の系列をテストケースとして生成するテストケース生成方法において、
等価ステップ検査部が、複数ステップの処理で共用され、前記複数ステップの処理が順次実行されていく中で、各ステップの処理の実行結果に応じた値を保持する状態変数について、前記複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定し、
テストケース生成部が、前記等価ステップ検査部により等価ステップであると判定された２ステップの一方を除き、前記ソフトウェアを解析して前記テストケースに含める値を生成するテストケース生成方法。
【請求項９】
値が入力される度に１ステップの処理を実行するソフトウェアを解析して、前記ソフトウェアのテストのために入力される値の系列をテストケースとして生成するテストケース生成プログラムにおいて、
コンピュータに、
複数ステップの処理で共用され、前記複数ステップの処理が順次実行されていく中で、各ステップの処理の実行結果に応じた値を保持する状態変数について、前記複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定する等価ステップ検査手順と、
前記等価ステップ検査手順により等価ステップであると判定された２ステップの一方を除き、前記ソフトウェアを解析して前記テストケースに含める値を生成するテストケース生成手順と
を実行させるテストケース生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケース生成装置、テストケース生成方法およびテストケース生成プログラムに関するものである。
【背景技術】
【０００２】
自動車および産業用ロボット等の制御機器には、様々な制御を行うための組込リアルタイムソフトウェアが搭載されている。このようなソフトウェアが誤動作すると人命に関わる事故につながる。そのため、出荷前に十分なテストを実施する必要がある。例えば、自動車向けの機能安全規格のＩＳＯ２６２６２、および、航空機向けの機能安全規格のＤＯ−１７８Ｃでは、テスト工程ごとに採用すべきテスト手法等をテスト要件として定め、これらのテスト要件に従ってテストを実施することを求めている。単体テストのテスト要件の例としては、同値分割または境界値分析に基づきテストケースを作成することで要求を網羅するようにテストを実行すると同時に、そのテストケースがテスト対象ソフトウェアのソースコードの構造を網羅することを求めている。ソースコードの構造としては、処理を記述した各命令行、または、ｉｆ文およびｆｏｒ文等の分岐箇所等を基準とする。テスト対象ソフトウェアに応じて用いる基準は異なる。この基準のことを構造網羅基準と呼ぶ。命令行を構造網羅基準とした場合には、テストケースによってテスト対象ソフトウェアに含まれるコードをどれだけ実行したかを示す命令網羅率を測定する。ｉｆ文等の分岐を構造網羅基準とした場合には、コードに含まれる分岐先をすべて実行したかを示す分岐網羅率を測定する。命令網羅率または分岐網羅率が十分に高ければ、テストとして十分であると判断する。【０００３】
組込リアルタイムソフトウェアでは、初期状態、実行状態および終了準備状態等の複数の状態を持つことが一般的である。そのようなソフトウェアでは、１回分のテストケースの入力だけではソースコードの構造を網羅することができず、複数回分のテストケースの入力が必要となる場合がある。テスト対象ソフトウェアの実行単位をステップと呼ぶ。例えば、テストケースの入力１回が１ステップとなる。【０００４】
近年、組込リアルタイムソフトウェアのソースコードは大規模複雑化している。そのため、ソフトウェアの要求仕様を満たしつつ、ソースコードの構造を網羅する、複数ステップにわたるテストケースを手動で作成する工数の増加が問題となっている。【０００５】
特許文献１では、工数増加に対応するため、単体テスト用の複数ステップ分のテストケースを自動で生成する方法が開示されている。【０００６】
特許文献２では、ベンチマークプログラム内の同一の処理が繰り返し行われる箇所において、その繰り返しによって処理の変化がない場合には繰り返し回数を削減する方法が開示されている。【０００７】
特許文献３では、ある処理ブロックの実行前に、プロセッサの内部状態がその処理ブロックが以前処理対象となったときと同じである場合には、その処理ブロックに関する処理は行わず、前回情報を流用することでシミュレーションを高速化する方法が開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１４−０６３４１５号公報
【特許文献２】特開２００３−３１６６１２号公報
【特許文献３】国際公開第２０１５／０４５４７２号
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１の方法では、あらかじめ設定した最大ステップ数に到達するまで１ステップ目から順にテスト要件を満たすテストケースを生成可能かを有界モデル検査を用いて解析する。未網羅の要求または分岐がある場合には、ステップ数をインクリメントしてテストケース生成用の解析を繰り返す。この方法を、状態が遷移するまで一定時間待機するようなソフトウェアに適用したとする。その場合、待機の間はどのような入力があっても状態が変化しないため、新たな構造を網羅しない。結果として、待機に相当するステップでは、テストケース生成用の解析を行っても新たなテストケースが生成されない。有界モデル検査による解析時間は、ステップ数の増加によって指数関数的に長くなる傾向にある。そのため、新たなテストケースを生成しないにもかかわらず、解析時間が増加し、テストケース生成時間が実用時間に収まらないことがある。この解析時間を削減するために、待機時間をカウントしているカウンタ値を意図的に小さな値に変更してテストケース生成に必要なステップ数を削減する方法が考えられる。しかし、カウンタ値を状態遷移が発生する前の適切な値に変更するには、仕様情報の詳細を把握しなければならない。複数の待機時間が設けられている場合に、カウンタ値を誤った値に設定してしまい、その結果、実際とは異なる振る舞いに変更されたソフトウェアに対するテストケースが生成されてしまう可能性がある。【００１０】
特許文献２の方法では、特定の実行環境下において内部状態の変化があるか否かを判断している。外部入力が変化するような環境において、ある処理が常に内部状態の変化がないと判断されるか否かについては考慮されていない。【００１１】
特許文献３の方法では、処理ブロックの実行前の内部状態に入力値を含んでいたとしても、特定の入力値の内部状態のときのみ、その処理ブロックによる処理を同一と判断する。そのため、前回ステップと今回ステップとの入力値が異なるような場合には、前回ステップと今回ステップとの処理を同一と判断することができない。【００１２】
このように、従来の方法は、組込リアルタイムソフトウェアのように外部装置からの入力がステップ間で変化するソフトウェアを対象とする、複数ステップにわたるテストケースの生成には適用できない。【００１３】
本発明は、複数ステップにわたるテストケースの生成にかかる時間を削減することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一態様に係るテストケース生成装置は、
値が入力される度に１ステップの処理を実行するソフトウェアを解析して、前記ソフトウェアのテストのために入力される値の系列をテストケースとして生成するテストケース生成装置において、
複数ステップの処理で共用され、前記複数ステップの処理が順次実行されていく中で、各ステップの処理の実行結果に応じた値を保持する状態変数について、前記複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定する等価ステップ検査部と、
前記等価ステップ検査部により等価ステップであると判定された２ステップの一方を除き、前記ソフトウェアを解析して前記テストケースに含める値を生成するテストケース生成部と
を備える。
【発明の効果】
【００１５】
本発明では、等価ステップであると判定された２ステップの一方について、ソフトウェアを解析してテストケースに含める値を生成する処理が省かれる。そのため、複数ステップにわたるテストケースの生成にかかる時間を削減することができる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に係るテストケース生成装置の構成を示すブロック図。
【図２】実施の形態１に係るテストケース生成装置の動作を示すフローチャート。
【図３】実施の形態１に係るテストケース生成装置の動作を示すフローチャート。
【図４】実施の形態１に係るテスト対象ソフトウェアのプログラムを示す図。
【図５】実施の形態１に係るテスト対象ソフトウェアのプログラムに含まれる網羅対象箇所を示す図。
【図６】実施の形態１に係るテストケース生成装置のラッパ関数生成部が生成するラッパ関数を示す図。
【図７】実施の形態２に係るテストケース生成装置の動作を示すフローチャート。
【図８】実施の形態２に係るテストケース生成装置の動作を示すフローチャート。
【図９】実施の形態２に係るテスト対象ソフトウェアのプログラムを示す図。
【図１０】実施の形態２に係るテスト対象ソフトウェアのプログラムに含まれる網羅対象箇所を示す図。
【図１１】実施の形態２に係るテストケース生成装置のラッパ関数生成部が生成するラッパ関数を示す図。
【図１２】実施の形態２に係るテストケース生成装置のラッパ関数生成部が生成するラッパ関数を示す図。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について、図を用いて説明する。各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。なお、本発明は、以下に説明する実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。例えば、以下に説明する実施の形態のうち、２つ以上の実施の形態が組み合わせられて実施されても構わない。あるいは、以下に説明する実施の形態のうち、１つの実施の形態または２つ以上の実施の形態の組み合わせが部分的に実施されても構わない。
【００１８】
実施の形態１．
本実施の形態について、図１から図６を用いて説明する。
【００１９】
＊＊＊構成の説明＊＊＊
図１を参照して、本実施の形態に係るテストケース生成装置１０の構成を説明する。
【００２０】
テストケース生成装置１０は、コンピュータである。テストケース生成装置１０は、プロセッサ１１を備えるとともに、メモリ１２、通信装置１３および入出力装置１４といった他のハードウェアを備える。プロセッサ１１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００２１】
テストケース生成装置１０は、機能要素として、プログラム情報入力部１５と、状態変数抽出部１６と、構造抽出部１７と、ラッパ関数生成部１８と、等価ステップ検査部１９と、テストケース生成部２０とを備える。プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能は、ソフトウェアにより実現される。
【００２２】
プロセッサ１１は、テストケース生成プログラムを実行する装置である。テストケース生成プログラムは、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能を実現するプログラムである。プロセッサ１１は、例えば、ＣＰＵである。「ＣＰＵ」は、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略語である。
【００２３】
メモリ１２は、テストケース生成プログラムを記憶する装置である。メモリ１２は、例えば、ＲＡＭ、フラッシュメモリまたはこれらの組み合わせである。「ＲＡＭ」は、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略語である。メモリ１２には、テスト対象ソフトウェアのプログラム、および、テスト対象ソフトウェアの仕様情報も記憶される。テスト対象ソフトウェアは、任意の種類のソフトウェアでよいが、本実施の形態では組込ソフトウェアである。
【００２４】
通信装置１３は、テストケース生成プログラムに入力されるデータを受信するレシーバと、テストケース生成プログラムから出力されるデータを送信するトランスミッタとを含む。通信装置１３は、例えば、通信チップまたはＮＩＣである。「ＮＩＣ」は、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄの略語である。
【００２５】
入出力装置１４は、テストケース生成プログラムへのデータの入力のためにユーザにより操作される入力機器と、テストケース生成プログラムから出力されるデータを画面に表示するディスプレイとに接続される。入力機器は、例えば、マウス、キーボード、タッチパネル、または、これらのうちいくつか、もしくは、すべての組み合わせである。ディスプレイは、例えば、ＬＣＤである。「ＬＣＤ」は、Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙの略語である。ディスプレイは、特に、テストケース生成部２０が生成したテストケースを表示するために用いられる。
【００２６】
テストケース生成プログラムは、メモリ１２からプロセッサ１１に読み込まれ、プロセッサ１１によって実行される。メモリ１２には、テストケース生成プログラムだけでなく、ＯＳも記憶されている。「ＯＳ」は、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍの略語である。プロセッサ１１は、ＯＳを実行しながら、テストケース生成プログラムを実行する。なお、テストケース生成プログラムの一部または全部がＯＳに組み込まれていてもよい。
【００２７】
テストケース生成プログラムおよびＯＳは、補助記憶装置に記憶されていてもよい。補助記憶装置は、例えば、ＨＤＤ、フラッシュメモリまたはこれらの組み合わせである。「ＨＤＤ」は、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略語である。テストケース生成プログラムおよびＯＳは、補助記憶装置に記憶されている場合、メモリ１２にロードされ、プロセッサ１１によって実行される。
【００２８】
テストケース生成装置１０は、プロセッサ１１を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、テストケース生成プログラムの実行を分担する。それぞれのプロセッサは、例えば、ＣＰＵである。
【００２９】
テストケース生成プログラムにより利用、処理または出力されるデータ、情報、信号値および変数値は、メモリ１２、補助記憶装置、または、プロセッサ１１内のレジスタまたはキャッシュメモリに記憶される。
【００３０】
テストケース生成プログラムは、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０により行われる手順をそれぞれプログラム情報入力手順、状態変数抽出手順、構造抽出手順、ラッパ関数生成手順、等価ステップ検査手順およびテストケース生成手順としてコンピュータに実行させるプログラムである。テストケース生成プログラムは、コンピュータ読取可能な媒体に記録されて提供されてもよいし、記録媒体に格納されて提供されてもよいし、プログラムプロダクトとして提供されてもよい。
【００３１】
テストケース生成装置１０は、１台のコンピュータで構成されていてもよいし、複数台のコンピュータで構成されていてもよい。テストケース生成装置１０が複数台のコンピュータで構成されている場合は、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能が、各コンピュータに分散されて実現されてもよい。
【００３２】
＊＊＊動作の説明＊＊＊
図１を参照して、本実施の形態に係るテストケース生成装置１０の動作の概要を説明する。テストケース生成装置１０の動作は、本実施の形態に係るテストケース生成方法に相当する。
【００３３】
プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、カウンタ仕様情報、入力仕様情報および最大ステップ数の情報をメモリ１２から、または、通信装置１３もしくは入出力装置１４を介して外部から読み込む。
【００３４】
状態変数抽出部１６は、プログラム情報入力部１５が読み込んだプログラムを解析し、そのプログラムに含まれる状態変数を抽出してメモリ１２に記憶する。状態変数とは、大域変数等のプログラムを複数ステップにわたって実行した場合にもステップ間で保持される変数のことである。すなわち、状態変数とは、複数ステップの処理で共用され、複数ステップの処理が順次実行されていく中で、各ステップの処理の実行結果に応じた値を保持する変数のことである。この状態変数は、初期状態または通常状態といったモードを示す値を格納する。状態変数抽出部１６は、プログラム情報入力部１５が読み込んだカウンタ仕様情報に基づき、抽出した状態変数のうち、カウンタの役割を持つ変数を区別する。以降、カウンタを除く状態変数を検査対象状態変数ＶＡＲと呼ぶ。なお、状態変数の数は２つ以上でもよい。複数の検査対象状態変数が存在する場合には、ＶＡＲは複数の変数の集合を指す。
【００３５】
本実施の形態では、状態変数抽出部１６にてテスト対象ソフトウェアのプログラムを解析して状態変数を抽出するが、外部から状態変数のリスト情報が読み込まれてもよい。
【００３６】
構造抽出部１７は、テストに使用する構造網羅基準に応じて、プログラム情報入力部１５が読み込んだプログラムに含まれる網羅すべき対象箇所を抽出する。
【００３７】
ラッパ関数生成部１８は、テスト対象プログラムを呼び出すとともに、各ステップ実行後の検査対象状態変数の値をステップごとに異なる変数へ格納するラッパ関数を生成する。本実施の形態では、Ｘステップ実行後の検査対象状態変数の値を格納した変数をＶＡＲ＿Ｘとする。
【００３８】
等価ステップ検査部１９は、形式手法により、あるステップの実行と、その前のステップの実行とが、機能として等価であるかを検査する。あるステップＸ実行後のＶＡＲ＿Ｘと、ステップ（Ｘ−１）実行後のＶＡＲ＿（Ｘ−１）とが常に同値であれば、等価ステップ検査部１９は、ステップＸとステップ（Ｘ−１）とを等価ステップであると判定する。ただし、Ｘは２以上かつ最大ステップ数以下の値とする。
【００３９】
テストケース生成部２０は、等価ステップ検査部１９の結果に応じて、形式手法を用いて構造抽出部１７が抽出した網羅対象を網羅するようなテストケースを生成し、出力する。
【００４０】
図２および図３を参照して、本実施の形態に係るテストケース生成装置１０の動作の詳細を説明する。
【００４１】
ステップＳ１０１において、プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、カウンタ仕様情報、入力仕様情報および最大ステップ数の情報を読み込み、ステップＳ１０２へ進む。カウンタ仕様情報および入力仕様情報は、ソフトウェア仕様に基づき使用者が手動で設定したり、定められた形式で記述された仕様から自動で設定したり、プログラムを解析して状態遷移のトリガとして使用されている変数を自動で選択し設定したりすることが可能である。最大ステップ数は、テスト対象ソフトウェアのプログラムを網羅するのに必要なステップ数であり、本実施の形態では、カウンタ仕様情報等と同様に抽出するものとする。
【００４２】
ステップＳ１０２において、状態変数抽出部１６は、読み込んだプログラムを解析し、プログラムに含まれる状態変数を抽出し、ステップＳ１０３へ進む。
【００４３】
ステップＳ１０３において、状態変数抽出部１６は、抽出した状態変数のうち、カウンタ仕様情報が示すカウンタを除く変数を検査対象状態変数とし、ステップＳ１０４へ進む。
【００４４】
ステップＳ１０４において、構造抽出部１７は、使用する構造網羅基準に従って、テスト対象ソフトウェアのプログラムに含まれる網羅対象箇所を抽出し、ステップＳ１０５へ進む。テスト実行時に構造網羅基準として分岐を用い、分岐網羅率を測定する場合には、構造抽出部１７は、ステップＳ１０４ではプログラムに含まれる分岐箇所を抽出する。例えば、ｉｆ文であれば、ＴＲＵＥと判定された場合とＦＡＬＳＥと判定された場合との２箇所が網羅対象として抽出される。なお、ステップＳ１０４は、ステップＳ１０２、ステップＳ１０３およびステップＳ１０５と依存関係がないため、実行順序を入れ替えたり並行して実行したりすることができる。
【００４５】
ステップＳ１０５において、ラッパ関数生成部１８は、等価ステップ検査用のラッパ関数を生成し、ステップＳ１０６へ進む。
【００４６】
ステップＳ１０６において、等価ステップ検査部１９は、形式手法を用いて、ラッパ関数をエントリ関数としてステップ間の等価性を検査する。具体的には、等価ステップ検査部１９は、ステップＸ実行後の検査対象状態変数ＶＡＲ＿Ｘとステップ（Ｘ−１）実行後の検査対象状態変数ＶＡＲ＿（Ｘ−１）との値が、入力仕様情報に含まれる入力変数の値がいかなる値であっても、常に同値であるか否かを検査する。Ｘは２から最大ステップ数までの間のステップ数を示す値をとる。そして、等価ステップ検査部１９は、ＶＡＲ＿ＸとＶＡＲ＿（Ｘ−１）とが同値であれば、ステップＸとステップ（Ｘ−１）とを等価ステップと判定する。等価ステップ検査部１９は、同値でない場合があれば、不等価と判定する。等価ステップ検査部１９は、１ステップ目から最大ステップ数に到達するまで検査を実行後、ステップＳ１０７へ進む。
【００４７】
ステップＳ１０７において、テストケース生成部２０は、変数ｉを１に設定し、ステップＳ１０８へ進む。
【００４８】
ステップＳ１０８において、テストケース生成部２０は、変数ｉの値が最大ステップ数より大きいか、または、網羅対象箇所が存在するかを判定する。変数ｉの値が最大ステップ数より大きい場合には、テストケース生成対象のステップは終了しているため、テストケース生成部２０は、処理を終了する。変数ｉの値が最大ステップ数以下であっても網羅対象箇所がなければ、テストケース生成部２０は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、テストケース生成部２０は、ステップＳ１０９へ進む。
【００４９】
ステップＳ１０９において、テストケース生成部２０は、ステップＳ１０６における等価ステップ検査の結果を参照する。テストケース生成部２０は、ステップｉとステップ（ｉ−１）とが等価ステップと判定されている場合には、ステップＳ１１０およびステップＳ１１１の処理は不要であるため、ステップＳ１１２へ進む。テストケース生成部２０は、ステップｉとステップ（ｉ−１）とが等価ステップではない、すなわち、不等価ステップである場合には、ステップＳ１１０へ進む。ただし、テストケース生成部２０は、ｉ＝１の場合には等価ステップ検査結果がないため、常に不等価としてステップＳ１１０へ進む。
【００５０】
ステップＳ１１０において、テストケース生成部２０は、ステップ（ｉ−１）まで未網羅となっている網羅対象箇所あるいはｉ＝１の場合にはステップＳ１０４において抽出した網羅対象箇所を、形式手法を用いて解析してテストケースを生成する。具体的には、テストケース生成部２０は、プログラム情報入力部１５が読み込んだ入力変数が、網羅対象箇所を通過するような入力値を取り得るかを解析し、そのような入力値があれば、その入力値をテストケースとして出力する。解析の結果、入力値がなければ、そのステップでテストケースが生成されない場合もある。テストケース生成部２０は、続いてステップＳ１１１へ進む。
【００５１】
ステップＳ１１１において、テストケース生成部２０は、ステップＳ１１０でテストケースが生成された場合には、そのテストケースによって通過した箇所を網羅対象箇所から除外する。テストケース生成部２０は、続いてステップＳ１１２へ進む。
【００５２】
ステップＳ１１２において、テストケース生成部２０は、変数ｉを１インクリメントし、ステップＳ１０８へ戻る。
【００５３】
本実施の形態では、ステップＳ１０６において、等価ステップ検査部１９は、１ステップ目から最大ステップ数に到達するまで、等価ステップ検査を一度に実行する。変形例として、ステップＳ１０８とステップＳ１０９との間で、等価ステップ検査部１９が、ステップｉとステップ（ｉ−１）とが等価であるかを検査し、１ステップごとに等価ステップ検査と網羅対象箇所の解析およびテストケースの生成とが繰り返されてもよい。
【００５４】
このように、本実施の形態では、テストケース生成装置１０は、値が入力される度に１ステップの処理を実行するソフトウェアであるテスト対象ソフトウェアを解析して、当該ソフトウェアのテストのために入力される値の系列をテストケースとして生成する。その際に、等価ステップ検査部１９は、状態変数ＶＡＲについて、状態変数ＶＡＲを共用する複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが等価ステップであると判定する。テストケース生成部２０は、等価ステップ検査部１９により等価ステップであると判定された２ステップの一方を除き、テスト対象ソフトウェアを解析してテストケースに含める値を生成する。
【００５５】
本実施の形態では、等価ステップ検査部１９は、複数ステップのうち連続する２ステップの各組み合わせが等価ステップであるかどうかを判定する。「等価ステップ検査部１９により等価ステップであると判定された２ステップの一方」は、等価ステップ検査部１９により等価ステップであると判定された２ステップのうち後に処理が実行されるステップである。すなわち、テストケース生成部２０は、等価ステップ検査部１９により等価ステップであると判定された２ステップのうち後に処理が実行されるステップを除き、テスト対象ソフトウェアを解析してテストケースに含める値を生成する。
【００５６】
本実施の形態では、テストケース生成部２０は、テスト対象ソフトウェアのテストの網羅基準が満たされるまで、テスト対象ソフトウェアを、等価ステップ検査部１９により等価ステップであると判定された２ステップの一方を除き１ステップずつ順番に解析してテストケースに含める値を生成する。
【００５７】
本実施の形態では、状態変数抽出部１６は、テスト対象ソフトウェアを解析して、複数ステップの処理で共用され、各ステップの処理の実行結果に応じた値を保持する複数の変数のうち、閾値に達しているかどうかによって次ステップの処理を異にする第１変数を除く第２変数を状態変数ＶＡＲとして抽出する。その際に、状態変数抽出部１６は、プログラム情報入力部１５に入力された、第１変数の仕様を示す情報に基づいて第１変数を判別する。変形例として、状態変数抽出部１６は、テスト対象ソフトウェアを解析して第１変数を判別してもよい。本実施の形態では、カウンタ変数が第１変数に相当し、状態変数ＶＡＲが第２変数に相当する。また、カウンタ仕様情報が第１変数の仕様を示す情報に相当する。
【００５８】
具体例を用いてテストケース生成装置１０の動作を説明する。
【００５９】
以下の例では、図４に示すテスト対象ソフトウェアのプログラムの一部を用いる。このプログラムでは、仕様上、カウンタがｃｎｔ、入力変数がｂおよびｃ、最大ステップ数が４であるとする。テスト実行時の構造網羅基準として分岐網羅を用いるものとする。
【００６０】
プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、カウンタ仕様情報、入力仕様情報および最大ステップ数を読み込む。プログラムは、本例では２つの関数ｆｕｎｃとｆｕｎｃ＿ｉｎｉｔのみを含むが、１つの関数を記述した１ファイルだけではなく、複数の関数または複数ファイルの集合であってもよい。カウンタ仕様情報には、状態遷移まで待機するための１ステップの実行で１インクリメントされるカウンタの情報として、状態変数ｃｎｔが含まれている。入力仕様情報には、テスト対象ソフトウェアのプログラムの入力変数ｂおよびｃの情報が含まれている。最大ステップ数は４に設定されている。
【００６１】
これらの情報が読み込まれると、状態変数抽出部１６は、テスト対象プログラムに含まれる状態変数を抽出する。ここでは、ｄおよびｃｎｔを抽出するものとする。状態変数抽出部１６は、これらの状態変数のうち、カウンタ仕様情報に基づいて検査対象状態変数ＶＡＲがｄであると識別する。
【００６２】
構造抽出部１７は、テスト対象ソフトウェアのプログラムから網羅すべき分岐箇所として、ｉｆ文が２箇所あり、それぞれＴＲＵＥおよびＦＡＬＳＥの２分岐であることから計４箇所を抽出する。図５は、図４に示したプログラムに対し網羅すべき分岐箇所をＰ１からＰ４で示している。
【００６３】
ラッパ関数生成部１８は、等価ステップ検査のためのラッパ関数を生成する。このラッパ関数の例を図６に示す。Ｘ＝１，２，３，４、テスト対象ソフトウェアのプログラムの入力変数ｂおよびｃへの入力値はｂ＿Ｘおよびｃ＿Ｘとしてステップごとに区別している。各ステップ実施後の検査対象状態変数の値は変数ＶＡＲ＿Ｘへ格納される。最後の３行のＡＳＳＥＲＴ文は、等価ステップ検査用の命令の一例である。これらのＡＳＳＥＲＴ文は、入力変数ｂおよびｃがあらゆる値をとり得る場合において、検査対象状態変数ＶＡＲ＿ＸとＶＡＲ＿（Ｘ−１）とが等しいかを検査するための命令である。
【００６４】
このラッパ関数をエントリ関数として等価ステップ検査部１９は形式手法を用いて検査を実行する。ＡＳＳＥＲＴ文に対し反例が見つかった場合には、等価ステップ検査部１９は、そのステップは等価ではないと判定する。例えば、ＡＳＳＥＲＴ文の最終行は、３ステップ目実行後と４ステップ目実行後の検査対象状態変数の値が等しいことを検査する文である。すなわち、ＡＳＳＥＲＴ文の最終行は、３ステップ目と４ステップ目の実行時に入力変数ｂ＿１からｂ＿４およびｃ＿１からｃ＿４に対していかなる値を与えても検査対象状態変数の値が変わらないことを検査する文である。この検査に対して反例が出力された場合には、検査対象状態変数の値が変わることがあるため、３ステップ目と４ステップ目は等価ではないと判定される。反例が出力されなければ、３ステップ目と４ステップ目は等価であると判定できる。本例では、１ステップ目と２ステップ目とが等価、その他は不等価であるとする。
【００６５】
テストケース生成部２０は、１ステップ目として、等価ステップ検査部１９の検査結果を用いて、テストケース生成のための解析を行うか否かを判断する。１ステップ目は常に不等価と判断されるため、テストケース生成部２０は、構造抽出部１７が抽出した網羅対象箇所を対象とした解析とテストケースの生成とを行う。これによりテストケースを生成できる。生成したテストケースが、図５に示した網羅対象箇所のうちＰ４を満たすとすると、テストケース生成部２０は、Ｐ４を網羅対象箇所から除外し、２ステップ目へ進む。等価ステップ検査結果から、２ステップ目は１ステップ目と等価であるため、解析とテストケース生成は不要であり、テストケース生成部２０は、直ちに３ステップ目へ進む。３ステップ目は２ステップ目と不等価なステップであるため、テストケース生成部２０は、１ステップ目と同様に網羅対象箇所Ｐ１からＰ３を対象として解析とテストケース生成とを行う。これにより、テストケースを生成でき、Ｐ１とＰ３とを網羅したとすると、網羅対象箇所の残りはＰ２となる。テストケース生成部２０は、４ステップ目へ進み、３ステップ目と同様に解析とテストケース生成とを行う。最大ステップ数４であるため、テストケース生成部２０は、これ以上の処理は行わず処理を終了する。
【００６６】
このように、ステップ間の等価性を判定する等価ステップ検査を実行し、その結果に応じて解析とテストケース生成とを行うことで、２ステップ目においてはテストケース生成用の解析を行わず、次のステップへ進むことができ、解析時間を削減することができる。これと比較して等価ステップ検査を行わない場合には、１ステップ目から４ステップ目まで毎回解析とテストケース生成とを実行し、結果的に２ステップ目においては、網羅対象箇所を新たに通過するような入力値が存在しないためにテストケースが生成されず、無駄な解析時間がかかってしまう。
【００６７】
また、このようにステップ間の等価性を形式手法を用いて自動で判定することで、手動でカウンタの閾値を変更するといった操作をする必要がなくなり、テスト対象ソフトウェアの振る舞いを変更することなく、テストケース生成時間を実用時間内に収めることができる。さらにカウンタ値を手動で変更した場合に、誤った値としてしまうことにより実際とは異なる振る舞いをするプログラムを対象としてテストケースを生成し、結果的に適切なテストケースを生成できないという問題を回避することができる。
【００６８】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、等価ステップであると判定された２ステップの一方について、ソフトウェアを解析してテストケースに含める値を生成する処理が省かれる。そのため、複数ステップにわたるテストケースの生成にかかる時間を削減することができる。
【００６９】
本実施の形態では、複数のステップ間にわたるテストケースを生成するテストケース生成装置１０が、等価ステップ検査部１９と、テストケース生成部２０とを備える。等価ステップ検査部１９は、入力に任意の値を与えても、内部状態がステップ間で等価であるかを検査する。テストケース生成部２０は、１ステップ目から最大ステップ数に到達するまで順に、等価ステップ検査部１９の結果に基づき、そのステップが前のステップと等価である場合には、テストケース生成のための解析とテストケース生成とを行わず、次のステップへ進み、等価でない場合には、解析とテストケース生成とを行う。
【００７０】
本実施の形態によれば、あるステップの実行後と別のステップの実行後とでそれぞれ内部状態が等価であると判定された場合には、そのステップ用のテストケース自動生成のための解析を行わないことでテストケース自動生成にかかる時間を削減することができる。さらにテスト対象ソフトウェアの振る舞いを変更することなくテストケースを自動生成することで、テスト対象ソフトウェアに適したテストを実行することが可能となる。
【００７１】
本実施の形態では、複数ステップにわたるテストケースを自動生成する際に、各ステップでテスト対象ソフトウェアのプログラムの入力に任意の値を与えても、あるステップの実行後と別のステップの実行後とで内部状態が変化しない場合には、それらの２つのステップが等価であると判定される。そして、そのステップのテストケース自動生成のための解析が省かれる。
【００７２】
本実施の形態では、ステップごとのテストケース生成用解析の前に、そのステップと前のステップでの、カウンタを除く内部状態変数が、あらゆる入力値において常に等価であるか否かを検査し、前のステップと等価と判定されたステップにおいては時間を要するテストケース生成用解析と生成を行わないようにする。これにより、必要なテストケースを生成する時間を削減することができる。
【００７３】
本実施の形態では、あるステップとその前のステップとが等価であるか否かを形式手法を用いて自動で判定することで、手動による変更にかかるコストを削減すると同時に、手動による誤った変更の結果、十分なテストケースが生成できず、適切にテストを実行できないという問題を解決することができる。
【００７４】
本実施の形態では、状態変数には、閾値に到達することでテスト対象ソフトウェアの処理が変化するような変数を含めない。具体的には、等価ステップ検査対象として、カウンタを除いた状態変数を用いることで、状態遷移まで一定時間待機させるために毎ステップ変化するような状態変数を含むプログラムにおいても、その待機中のステップ間は等価ステップであると判定することができ、テストケース生成にかかる時間を削減することができる。
【００７５】
本実施の形態では、閾値に到達することでテスト対象ソフトウェアの処理が変化するような変数が、形式的に記述された仕様情報から自動で抽出されるか、テスト対象ソフトウェアのプログラムの動作を解析することで自動で抽出される。具体的には、等価ステップ検査対象から除外する状態変数であるカウンタを含むカウンタ仕様情報を、形式的に書かれた仕様を参照することによって、または、テスト対象ソフトウェアのプログラムを解析することによって抽出することで、手動で設定する作業を省き、テストケース生成にかかる時間を削減することができる。
【００７６】
＊＊＊他の構成＊＊＊
本実施の形態では、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能がソフトウェアにより実現されるが、変形例として、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能がソフトウェアとハードウェアとの組み合わせにより実現されてもよい。すなわち、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能の一部が専用のハードウェアにより実現され、残りがソフトウェアにより実現されてもよい。
【００７７】
専用のハードウェアは、例えば、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＦＰＧＡ、ＡＳＩＣ、または、これらのうちいくつか、もしくは、すべての組み合わせである。「ＩＣ」は、Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。「ＧＡ」は、Ｇａｔｅ  Ａｒｒａｙの略語である。「ＦＰＧＡ」は、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。「ＡＳＩＣ」は、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。
【００７８】
プロセッサ１１および専用のハードウェアは、いずれも処理回路である。すなわち、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の機能がソフトウェアにより実現されるか、ソフトウェアとハードウェアとの組み合わせにより実現されるかに関わらず、プログラム情報入力部１５、状態変数抽出部１６、構造抽出部１７、ラッパ関数生成部１８、等価ステップ検査部１９およびテストケース生成部２０の動作は、処理回路により行われる。
【００７９】
実施の形態２．
本実施の形態について、主に実施の形態１との差異を、図７から図１２を用いて説明する。
【００８０】
＊＊＊構成の説明＊＊＊
本実施の形態に係るテストケース生成装置１０の構成は、図１に示した実施の形態１のものと同じであるため、説明を省略する。
【００８１】
＊＊＊動作の説明＊＊＊
図１２を参照して、本実施の形態に係るテストケース生成装置１０の動作の概要を説明する。テストケース生成装置１０の動作は、本実施の形態に係るテストケース生成方法に相当する。
【００８２】
プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、フィードバック制御仕様情報、入力仕様情報および最大ステップ数の情報をメモリ１２から、または、通信装置１３もしくは入出力装置１４を介して外部から読み込む。
【００８３】
状態変数抽出部１６は、プログラム情報入力部１５が読み込んだプログラムを解析し、そのプログラムに含まれる状態変数を抽出してメモリ１２に記憶する。状態変数抽出部１６は、プログラム情報入力部１５が読み込んだフィードバック制御仕様情報に基づき、抽出した状態変数のうち、フィードバック制御量を示す変数を区別する。以降、この変数を状態変数ＣＴＲＬと呼ぶ。状態変数ＣＴＲＬを除く状態変数を状態変数ＶＡＲと呼ぶ。
【００８４】
ラッパ関数生成部１８は、テスト対象プログラムを呼び出すとともに、各ステップ実行後の状態変数ＶＡＲの値と状態変数ＣＴＲＬの値とをステップごとに異なる変数へ格納するラッパ関数を生成する。本実施の形態では、Ｘステップ実行後の状態変数ＶＡＲの値を格納した変数をＶＡＲ＿Ｘ、状態変数ＣＴＲＬの値を格納した変数をＣＴＲＬ＿Ｘとする。
【００８５】
等価ステップ検査部１９は、形式手法により、あるステップの実行と、別のステップの実行とが、機能として等価であるかを検査する。あるステップＸ実行後のＶＡＲ＿Ｘと、ステップＹ実行後のＶＡＲ＿Ｙとが常に同値であれば、等価ステップ検査部１９は、ステップＸとステップＹとが状態変数ＶＡＲについて等価ステップであると判定する。ただし、ＸおよびＹは互いに異なる１以上かつ最大ステップ数以下の値であるとする。等価ステップ検査部１９は、状態変数ＣＴＲＬについても同様に検査する。等価ステップ検査部１９は、ステップＸとステップＹとの実行後、すべての状態変数、すなわち状態変数ＶＡＲと状態変数ＣＴＲＬとについてＶＡＲ＿ＸとＶＡＲ＿Ｙとが等しく、かつ、ＣＴＲＬ＿ＸとＣＴＲＬ＿Ｙとが等しければ、ステップＸとステップＹとが完全等価ステップであると判定する。
【００８６】
テストケース生成部２０は、等価ステップ検査部１９の結果に応じて、形式手法を用いて構造抽出部１７が抽出した網羅対象を網羅するようなテストケースを生成し、出力する。
【００８７】
図７および図８を参照して、本実施の形態に係るテストケース生成装置１０の動作の詳細を説明する。
【００８８】
ステップＳ２０１において、プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、フィードバック制御仕様情報、入力仕様情報および最大ステップ数を読み込み、ステップＳ２０２へ進む。フィードバック制御仕様情報は、ソフトウェア仕様に基づき使用者が手動で設定したり、定められた形式で記述された仕様から自動で設定したり、プログラムを解析して状態遷移のトリガとして使用されている変数を自動で選択し設定したりすることが可能である。
【００８９】
ステップＳ２０２において、状態変数抽出部１６は、読み込んだプログラムを解析し、プログラムに含まれる状態変数を抽出し、ステップＳ２０３へ進む。
【００９０】
ステップＳ２０３において、状態変数抽出部１６は、抽出した状態変数のうち、フィードバック制御仕様情報が示す状態変数ＣＴＲＬを除く状態変数を状態変数ＶＡＲとし、ステップＳ２０４へ進む。状態変数ＣＴＲＬは、フィードバック制御量を示す変数である。例えば、状態変数ＣＴＲＬは、制御対象のモータの制御量等を演算するプログラムにおいて、その演算結果を格納する変数である。状態変数ＣＴＲＬは、あるステップにおいて制御量を演算する際に、前のステップでの制御量を用いる場合等に使われる。これは、モータ制御量の急激な変化等を抑制し、滑らかな制御を実現するため等に用いられる。
【００９１】
ステップＳ２０４において、構造抽出部１７は、使用する構造網羅基準に従って、テスト対象ソフトウェアのプログラムに含まれる網羅対象箇所を抽出し、ステップＳ２０５へ進む。なお、ステップＳ２０４は、ステップＳ２０２、ステップＳ２０３およびステップＳ２０５と依存関係がないため、実行順序を入れ替えたり並行して実行したりすることができる。
【００９２】
ステップＳ２０５において、ラッパ関数生成部１８は、等価ステップ検査用のラッパ関数を生成し、ステップＳ２０６へ進む。
【００９３】
ステップＳ２０６において、等価ステップ検査部１９は、形式手法を用いて、ラッパ関数をエントリ関数として状態変数ＶＡＲに関してステップ間の等価性を検査する。具体的には、等価ステップ検査部１９は、ステップＸ実行後の状態変数ＶＡＲ＿ＸとステップＹ実行後の状態変数ＶＡＲ＿Ｙとの値が、入力仕様情報に含まれる入力変数の値がいかなる値であっても、常に同値であるか否かを検査する。ＸとＹは互いに異なる１から最大ステップ数までの間のステップ数を示す値をとる。そして、等価ステップ検査部１９は、ＶＡＲ＿ＸとＶＡＲ＿Ｙとが同値であれば、ステップＸとステップＹとを状態変数ＶＡＲに関して等価ステップと判定する。等価ステップ検査部１９は、同値でない場合があれば、不等価と判定する。等価ステップ検査部１９は、１ステップ目から最大ステップ数に到達するまで検査を実行後、ステップＳ２０７へ進む。
【００９４】
ステップＳ２０７において、等価ステップ検査部１９は、状態変数ＶＡＲに関して等価であると判定したステップに対し、状態変数ＣＴＲＬに関しても等価であるか、すなわち完全等価ステップであるかを検査する。例えば、ＶＡＲ＿ＸとＶＡＲ＿Ｙとが等しく、ステップＸとステップＹとが状態変数ＶＡＲに関して等価であると判定されている場合には、等価ステップ検査部１９は、ＣＴＲＬ＿ＸとＣＴＲＬ＿Ｙとについても同値になり完全等価ステップとなるかを検査する。その後、等価ステップ検査部１９は、ステップＳ２０８へ進む。
【００９５】
ステップＳ２０８において、テストケース生成部２０は、変数ｉを１に設定し、ステップＳ２０９へ進む。
【００９６】
ステップＳ２０９において、テストケース生成部２０は、変数ｉの値が最大ステップ数より大きいか、または、網羅対象箇所が存在するかを判定する。変数ｉの値が最大ステップ数より大きい場合には、テストケース生成対象のステップは終了しているため、テストケース生成部２０は、処理を終了する。変数ｉの値が最大ステップ数以下であっても網羅対象箇所がなければ、テストケース生成部２０は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、テストケース生成部２０は、ステップＳ２１０へ進む。
【００９７】
ステップＳ２１０において、テストケース生成部２０は、ステップＳ２０７における等価ステップ検査の結果を参照する。テストケース生成部２０は、ステップｉと完全等価なステップｊが存在するかを確認する。ｊはｉよりも小さい値である。テストケース生成部２０は、ステップｉと完全等価なステップｊが存在する場合には、すべての状態遷移が実行されたと判断し、処理を終了する。テストケース生成部２０は、ステップｉと完全等価なステップｊが存在しない場合には、未到達の状態があると判断し、ステップＳ２１１へ進む。
【００９８】
ステップＳ２１１において、テストケース生成部２０は、ステップＳ２０６における状態変数ＶＡＲに関する等価ステップ検査の結果を参照する。テストケース生成部２０は、ステップｉとステップ（ｉ−１）とが等価ステップと判定されている場合には、ステップＳ２１２およびステップＳ２１３の処理は不要であるため、ステップＳ２１４へ進む。テストケース生成部２０は、ステップｉとステップ（ｉ−１）とが状態変数ＶＡＲに関しても等価ステップではない、すなわち、不等価ステップである場合には、ステップＳ２１２へ進む。ただし、テストケース生成部２０は、ｉ＝１の場合には等価ステップ検査結果がないため、常に不等価としてステップＳ２１２へ進む。
【００９９】
ステップＳ２１２において、テストケース生成部２０は、ステップ（ｉ−１）まで未網羅となっている網羅対象箇所あるいはｉ＝１の場合にはステップＳ２０４において抽出した網羅対象箇所を、形式手法を用いて解析してテストケースを生成する。具体的には、テストケース生成部２０は、プログラム情報入力部１５が読み込んだ入力変数が、網羅対象箇所を通過するような入力値を取り得るかを解析し、そのような入力値があれば、その入力値をテストケースとして出力する。解析の結果、入力値がなければ、そのステップでテストケースが生成されない場合もある。テストケース生成部２０は、続いてステップＳ２１３へ進む。
【０１００】
ステップＳ２１３において、テストケース生成部２０は、ステップＳ２１２でテストケースが生成された場合には、そのテストケースによって通過した箇所を網羅対象箇所から除外する。テストケース生成部２０は、続いてステップＳ２１４へ進む。
【０１０１】
ステップＳ２１４において、テストケース生成部２０は、変数ｉを１インクリメントし、ステップＳ２０９へ進む。
【０１０２】
このように、本実施の形態では、実施の形態１と同様に、状態変数抽出部１６は、テスト対象ソフトウェアを解析して、複数ステップの処理で共用され、各ステップの処理の実行結果に応じた値を保持する複数の変数のうち、閾値に達しているかどうかによって次ステップの処理を異にする第１変数を除く第２変数を状態変数ＶＡＲとして抽出する。その際に、状態変数抽出部１６は、プログラム情報入力部１５に入力された、第１変数の仕様を示す情報に基づいて第１変数を判別する。変形例として、状態変数抽出部１６は、テスト対象ソフトウェアを解析して第１変数を判別してもよい。本実施の形態では、状態変数ＣＴＲＬが第１変数に相当し、状態変数ＶＡＲが第２変数に相当する。また、フィードバック制御仕様情報が第１変数の仕様を示す情報に相当する。
【０１０３】
本実施の形態では、等価ステップ検査部１９は、状態変数ＶＡＲと状態変数ＣＴＲＬとの両方について、複数ステップのうちいずれか１ステップの処理が実行された後の値と他の１ステップの処理が実行された後の値とが等しい場合に、それら２ステップが完全等価ステップであると判定する。すなわち、等価ステップ検査部１９は、複数ステップから得られる２ステップの全組み合わせがそれぞれ完全等価ステップであるかどうかを判定する。テストケース生成部２０は、等価ステップ検査部１９により完全等価ステップであると判定された２ステップのうち後に処理が実行されるステップに到達するまで、テスト対象ソフトウェアを、等価ステップ検査部１９により等価ステップであると判定された２ステップの一方を除き１ステップずつ順番に解析してテストケースに含める値を生成する。
【０１０４】
具体例を用いてテストケース生成装置１０の動作を説明する。
【０１０５】
以下の例では、図９に示すテスト対象ソフトウェアのプログラムの一部を用いる。このプログラムでは、仕様上、フィードバック制御量を示す変数がａ、入力変数がｂおよびｃ、最大ステップ数が５であるとする。テスト実行時の構造網羅基準として分岐網羅を用いるものとする。
【０１０６】
プログラム情報入力部１５は、テスト対象ソフトウェアのプログラム、フィードバック制御仕様情報、入力仕様情報および最大ステップ数を読み込む。フィードバック制御仕様情報には、状態変数ａが含まれている。入力仕様情報には、テスト対象ソフトウェアのプログラムの入力変数ｂおよびｃの情報が含まれている。最大ステップ数は５が設定されている。
【０１０７】
これらの情報が読み込まれると、状態変数抽出部１６は、テスト対象プログラムに含まれる状態変数を抽出する。ここでは、ａおよびｄを抽出するものとする。状態変数抽出部１６は、これらの状態変数のうち、フィードバック制御仕様情報に基づいて状態変数ＶＡＲがｄ、状態変数ＣＴＲＬがａであると識別する。
【０１０８】
構造抽出部１７は、テスト対象ソフトウェアのプログラムから網羅すべき分岐箇所として、ｉｆ文が１箇所あり、ＴＲＵＥおよびＦＡＬＳＥの２分岐であることから、少なくともこれら２箇所を抽出する。図１０は、図９に示したプログラムに対し網羅すべき分岐箇所をＰ１およびＰ２で示している。なお、省略しているプログラム中には他の網羅対象箇所も含まれているものとする。
【０１０９】
ラッパ関数生成部１８は、等価ステップ検査のためのラッパ関数を生成する。このラッパ関数の例を図１１および図１２に示す。Ｘ＝１，２，３，４，５、テスト対象ソフトウェアのプログラムの入力変数ｂおよびｃへの入力値はｂ＿Ｘおよびｃ＿Ｘとしてステップごとに区別している。最後の２０行のＡＳＳＥＲＴ文は、各ステップ間の状態変数ＶＡＲに関する等価ステップ検査と、状態変数ＣＴＲＬに関する等価ステップ検査とを実行するための命令である。ここではラッパ関数の生成を１回にするため、命令をすべて記述している。
【０１１０】
このラッパ関数をエントリ関数として等価ステップ検査部１９は形式手法を用いて、ＡＳＳＥＲＴ文のうち最初の１０行の状態変数ＶＡＲに関する等価ステップ検査を実行する。本例では、ＶＡＲ＿３を含むＡＳＳＥＲＴ文に関する検査では反例があり、不等価と判定され、残りはすべて反例がないとする。すなわち、１ステップ目と２ステップ目と４ステップ目と５ステップ目とが状態変数ＶＡＲに関して等価であり、３ステップ目のみが不等価であるとする。等価ステップ検査部１９は、これらの４つのステップに関し、状態変数ＣＴＲＬに関しても等価であり、完全等価なステップであるかを検査する。この検査に用いるＡＳＳＥＲＴ文は最後の１０行のうち、ＣＴＲＬ＿３を含まない文である。本例では、ＣＴＲＬ＿１がＣＴＲＬ＿４と、ＣＴＲＬ＿２がＣＴＲＬ＿５と常に等しいことを検査するＡＳＳＥＲＴ文に関する検査では反例がなく、残りはすべて反例があるとする。すなわち、１ステップ目と４ステップ目、２ステップ目と５ステップ目はあらゆる入力値を入力して実行しても、すべての状態変数が等価である完全等価なステップである。
【０１１１】
テストケース生成部２０は、１ステップ目として、等価ステップ検査部１９の検査結果を用いて、テストケース生成のための解析を行うか否かを判断する。１ステップ目は常に不等価と判断されるため、テストケース生成部２０は、構造抽出部１７が抽出した網羅対象箇所を対象とした解析とテストケースの生成とを行う。これによりテストケースを生成できる。生成したテストケースが、図１０に示した網羅対象箇所のうちいずれかを通過するのであれば、それを網羅対象箇所から除外し、２ステップ目へ進む。本例では、網羅対象箇所Ｐ２のみが除外され、Ｐ１が網羅対象箇所として残っているとする。テストケース生成部２０は、等価ステップ検査の結果を参照して２ステップ目が１ステップ目と完全等価なステップであるかを確認する。２ステップ目が１ステップ目と完全等価ではないため、テストケース生成部２０は、状態変数ＶＡＲに関して２ステップ目が１ステップ目と等価であるかを確認する。状態変数ＶＡＲに関して２ステップ目が１ステップ目と等価であるため、解析とテストケース生成は不要であり、テストケース生成部２０は、直ちに３ステップ目へ進む。３ステップ目では、完全等価なステップも状態変数ＶＡＲに関する等価なステップもない。そのため、テストケース生成部２０は、解析とテストケース生成とを行う。これによりテストケースを生成できる。生成したテストケースが、図１０に示した網羅対象箇所のうちいずれかを通過するのであれば、それを網羅対象箇所から除外し、４ステップ目へ進む。本例では、網羅対象箇所Ｐ１は３ステップ目で網羅されたが、他の未網羅の網羅対象箇所が残っているとする。テストケース生成部２０は、等価ステップ検査結果を参照して４ステップ目が１ステップ目から３ステップ目と完全等価であるかを確認する。４ステップ目が１ステップ目と等価であることが確認できるため、テストケース生成部２０は、遷移可能な状態をすべて実行したと判断し、処理を終了する。
【０１１２】
＊＊＊実施の形態の効果の説明＊＊＊
本実施の形態では、状態がループしているようなテスト対象ソフトウェアにおいて、最大ステップ数に到達する前にすべての状態に到達したと判断した場合には、未網羅の網羅対象箇所が残っていても処理を終了する。すなわち、あるステップの処理を実行した後、そのステップが、そのステップより前のステップと等価である場合には、最大ステップに到達する前に処理を終了する。これにより、不要なテストケース生成用の解析を行わず、最大ステップ数まで実行する場合と比較して解析時間を削減することができる。未網羅の網羅対象箇所とは、デッドコード等、いかなる値を入力しても実行不能なコード等が存在する場合に含まれる箇所である。
【符号の説明】
【０１１３】
１０  テストケース生成装置、１１  プロセッサ、１２  メモリ、１３  通信装置、１４  入出力装置、１５  プログラム情報入力部、１６  状態変数抽出部、１７  構造抽出部、１８  ラッパ関数生成部、１９  等価ステップ検査部、２０  テストケース生成部。
【図１】
2019142266.tif 000003
【図２】
2019142266.tif 000004
【図３】
2019142266.tif 000005
【図４】
2019142266.tif 000006
【図５】
2019142266.tif 000007
【図６】
2019142266.tif 000008
【図７】
2019142266.tif 000009
【図８】
2019142266.tif 000010
【図９】
2019142266.tif 000011
【図１０】
2019142266.tif 000012
【図１１】
2019142266.tif 000013
【図１２】
2019142266.tif 000014
【国際調査報告】
2019142266.tif 000015
2019142266.tif 000016