WO2020194455A1 - テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム - Google Patents

テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム Download PDF

Info

Publication number
WO2020194455A1
WO2020194455A1 PCT/JP2019/012548 JP2019012548W WO2020194455A1 WO 2020194455 A1 WO2020194455 A1 WO 2020194455A1 JP 2019012548 W JP2019012548 W JP 2019012548W WO 2020194455 A1 WO2020194455 A1 WO 2020194455A1
Authority
WO
WIPO (PCT)
Prior art keywords
test case
generation
test
generator
symbol
Prior art date
Application number
PCT/JP2019/012548
Other languages
English (en)
French (fr)
Inventor
まどか 馬場
Original Assignee
三菱電機株式会社
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 三菱電機株式会社 filed Critical 三菱電機株式会社
Priority to EP19920777.0A priority Critical patent/EP3929751B1/en
Priority to PCT/JP2019/012548 priority patent/WO2020194455A1/ja
Priority to CN201980094049.9A priority patent/CN113574511A/zh
Priority to JP2021508428A priority patent/JP6903249B2/ja
Publication of WO2020194455A1 publication Critical patent/WO2020194455A1/ja
Priority to US17/394,743 priority patent/US20210365355A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Abstract

生成制御部(130)は、1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されている場合、第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式(M1)を選択する。テスト生成部(170)は、第1の生成方式(M1)にしたがって、第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成する。テスト生成部(170)は、第(i-1)テストケースとiステップ目のテストケースとを連結することにより第iテストケースを生成する。

Description

テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
 本発明は、テストケース生成装置、テストケース生成方法、およびテストケース生成プログラムに関する。特に、組込みソフトウェアのテストケースを自動生成するテストケース生成装置、テストケース生成方法、およびテストケース生成プログラムに関する。
 自動車および産業用ロボットといった制御機器には、様々な制御を行うための組込みリアルタイムソフトウェアが搭載されている。このようなソフトウェアが誤動作すると人命に関わる事故につながる。そのため、出荷前に十分なテストを実施する必要がある。例えば、自動車向けの機能安全規格のISO26262、および、航空機向けの機能安全規格のDO-178Cでは、テスト工程ごとに採用すべきテスト手法といったテスト要件を定め、これらのテスト要件に従ってテストを実施することを求めている。単体テストのテスト要件の例としては、同値分割または境界値分析に基づきテストケースを作成することで要求を網羅するようにテストを実行する。また、同時に、そのテストケースがテスト対象ソフトウェアのソースコードの構造を網羅することが求められる。ソースコードの構造としては、処理を記述した各命令行、または、if文およびfor文といった分岐箇所を基準とする。テスト対象ソフトウェアに応じて用いる基準は異なる。この基準のことを構造網羅基準と呼ぶ。命令行を構造網羅基準とした場合には、テストケースによってテスト対象ソフトウェアに含まれるコードをどれだけ実行したかを示す命令網羅率を測定する。if文といった分岐を構造網羅基準とした場合には、コードに含まれる分岐先をすべて実行したかを示す分岐網羅率を測定する。命令網羅率または分岐網羅率が十分に高ければ、テストとして十分であると判断される。
 組込みリアルタイムソフトウェアでは、初期状態、実行状態および終了準備状態といった複数の状態を持つことが一般的である。そのようなソフトウェアでは、1回分のテストケースの入力だけではソースコードの構造を網羅することができない。複数回分のテストケースの入力が必要となる場合がある。ここではテスト対象ソフトウェアの実行単位をステップと呼ぶ。例えば、テストケースの入力1回が1ステップとなる。
 近年、組込みリアルタイムソフトウェアのソースコードは大規模複雑化している。そのため、ソフトウェアの要求仕様を満たしつつ、ソースコードの構造を網羅する、複数ステップにわたるテストケースを手動で作成する工数の増加が問題となっている。
 特許文献1では、工数増加に対応するため、有界モデル検査を用いて単体テスト用の複数ステップ分のテストケースを自動で生成する方法が開示されている。
 特許文献2では、脆弱性分析のための入力値生成に、記号実行を用いる方法のほか、ホワイトボックスファジングといった非記号実行を用いる方法が開示されている。
 特許文献3では、モジュール毎の記号実行によるパス解析を行った後、各モジュールの情報を用いて、複数モジュールの合成実行パス求める方法が開示されている。
特開2014-063415号公報 特開2016-167262号公報 特開2017-204164号公報
 特許文献1の方法では、あらかじめ設定した最大ステップ数に到達するまで、1回目から順にテスト要件を満たすテストケースを生成することが可能かについて有界モデル検査を用いて解析する。そして、未網羅の要求あるいは分岐がある場合にはステップ数をインクリメントしてテストケース生成用の解析を繰り返す。この方法では、ステップ数が増加すると有界モデル検査対象の状態数が増加するために、テストケース生成時間が実用時間に収まらない可能性があるという課題がある。
 特許文献2の方法では、有界モデル検査といった記号実行によるテストケース生成と、ホワイトボックスファジングといった非記号実行によるテストケース生成の両方を組み合わせている。これにより高速な非記号実行による生成方法を用いてできるだけ網羅対象を網羅したうえで、残った網羅対象を確実な記号実行による生成方法を用いて網羅し、全テストケース生成時間を削減することが可能である。しかしステップ数が増加した場合にはステップ数分の解析と生成を行うため、ステップ数の増加に伴ってテストケース生成時間が増加するという課題が残る。
 特許文献3の方法では、ステップ毎に実行パスを抽出した後、ステップを跨いで保存される変数の情報を結び付けることでテストケース生成時の全ステップにわたる実行パスの抽出時間を短縮する。しかし、テストケース生成のための解析対象となる実行パスのサイズはステップ数分増加するため、他の方法と同様、テストケース生成時間が実用時間に収まらない可能性がある。
 このように、従来の方法は、組込みリアルタイムソフトウェアのように入力がステップ間で変化するソフトウェアを対象とする、複数ステップにわたるテストケースの生成には適用できない。
 本発明は、複数ステップにわたるテストケースの生成にかかる時間を削減することを目的とする。
 本発明に係るテストケース生成装置は、値が入力される度に1ステップの処理を実行するプログラムに入力されるテストケースであって、順次実行されるi(iは2以上の整数)ステップの処理の各々に入力されるテストケース入力個の値から成るテストケースを生成するテストケース生成装置において、
 データを記憶するメモリと、
 前記メモリに1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されている場合、前記第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式を選択する生成制御部と、
 前記第1の生成方式にしたがって、前記第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成し、前記第(i-1)テストケースと前記iステップ目のテストケースとを連結することにより前記第iテストケースを生成し、前記メモリに記憶するテスト生成部とを備えた。
 本発明に係るテストケース生成装置では、ステップ数がインクリメントされた場合においても、まず1ステップ分だけの非記号実行あるいは記号実行によるテストケース生成のみを実行する。そのため、複数ステップにわたる非記号実行あるいは記号実行によるテストケースの生成にかかる時間を削減することができる。
実施の形態1に係るテストケース生成装置の構成を示すブロック図。 実施の形態1に係るテストケース生成装置の動作を示すフローチャート。 実施の形態1に係るテストケース生成装置の動作を示すフローチャート。 実施の形態1に係るテストケース生成装置の動作を示すフローチャート。 実施の形態1に係るテスト対象ソフトウェアのプログラムを示す図。 実施の形態1に係るテスト対象ソフトウェアのプログラムに含まれる網羅箇所を示す図。 実施の形態1に係るテストケース生成装置の関数生成部が生成する1ステップのテストケースを生成するためのテストケース生成用関数を示す図。 実施の形態1に係るテストケース生成装置の関数生成部が生成する1ステップのテストケースを使用して2ステップ目のテストケースを生成するためのテストケース生成用関数を示す図。 実施の形態1に係るテストケース生成装置の関数生成部が生成する2ステップのテストケースを生成するためのテストケース生成用関数を示す図。 実施の形態1に係るテストケース生成装置の関数生成部が生成する2ステップのテストケースを使用して3ステップ目のテストケースを生成するためのテストケース生成用関数を示す図。 実施の形態1の変形例に係るテストケース生成装置の構成を示すブロック図。
 以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
 実施の形態1.
***構成の説明***
 図1を参照して、本実施の形態に係るテストケース生成装置100の構成を説明する。
 テストケース生成装置100は、コンピュータである。テストケース生成装置100は、プロセッサ910を備えるとともに、メモリ920および入出力装置930といった他のハードウェアを備える。プロセッサ910は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
 テストケース生成装置100は、機能要素として、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160を備える。なお、非記号生成部150と記号生成部160とをテスト生成部170ともいう。各機能要素は、ソフトウェアにより実現される。
 プロセッサ910は、テストケース生成プログラムを実行する装置である。テストケース生成プログラムは、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能を実現するプログラムである。プロセッサ910は、例えば、CPUである。「CPU」は、Central Processing Unitの略語である。
 メモリ920は、テストケース生成プログラムを記憶する装置である。メモリ920は、例えば、RAM、フラッシュメモリまたはこれらの組み合わせである。「RAM」は、Random Access Memoryの略語である。メモリ920には、テスト対象ソフトウェアのプログラム、テスト対象ソフトウェアの仕様情報、および、生成したテストケースといった情報も記憶される。
 入出力装置930は、テストケース生成プログラムへのデータの入力のためにユーザにより操作される入力機器と、テストケース生成プログラムから出力されるデータを画面に表示するディスプレイとに接続される。入力機器は、例えば、マウス、キーボード、タッチパネル、または、これらのうちいくつか、もしくは、すべての組み合わせである。ディスプレイは、例えば、LCDである。「LCD」は、Liquid Crystal Displayの略語である。ディスプレイは、特に、テスト生成部170が生成したテストケースを表示するために用いられる。
 テストケース生成プログラムは、メモリ920からプロセッサ910に読み込まれ、プロセッサ910によって実行される。メモリ920には、テストケース生成プログラムだけでなく、OSも記憶されている。「OS」は、Operating Systemの略語である。プロセッサ910は、OSを実行しながら、テストケース生成プログラムを実行する。なお、テストケース生成プログラムの一部または全部がOSに組み込まれていてもよい。
 テストケース生成プログラムおよびOSは、補助記憶装置に記憶されていてもよい。補助記憶装置は、例えば、HDD、フラッシュメモリまたはこれらの組み合わせである。「HDD」は、Hard Disk Driveの略語である。テストケース生成プログラムおよびOSは、補助記憶装置に記憶されている場合、メモリ920にロードされ、プロセッサ910によって実行される。
 テストケース生成装置100は、プロセッサ910を代替する複数のプロセッサ910を備えていてもよい。これら複数のプロセッサ910は、テストケース生成プログラムの実行を分担する。それぞれのプロセッサ910は、例えば、CPUである。
 テストケース生成プログラムにより利用、処理または出力されるデータ、情報、信号値および変数値は、メモリ920、補助記憶装置、または、プロセッサ910内のレジスタまたはキャッシュメモリに記憶される。
 プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、記号生成部160、およびテスト生成部170の各部の「部」を「処理」、「手順」あるいは「工程」に読み替えてもよい。またプログラム取得処理、網羅対象抽出処理、生成制御処理、関数生成処理、非記号生成処理、記号生成処理、およびテスト生成処理の「処理」を「プログラム」、「プログラムプロダクト」または「プログラムを記録したコンピュータ読取可能な記録媒体」に読み替えてもよい。
 テストケース生成プログラムは、上記の各部の「部」を「処理」、「手順」あるいは「工程」に読み替えた各処理、各手順あるいは各工程を、コンピュータに実行させる。また、テストケース生成方法は、テストケース生成装置100がテストケース生成プログラムを実行することにより行われる方法である。
 テストケース生成プログラムは、コンピュータ読取可能な記録媒体に格納されて提供されてもよい。また、テストケース生成プログラムは、プログラムプロダクトとして提供されてもよい。
 テストケース生成装置100は、1台のコンピュータで構成されていてもよいし、複数台のコンピュータで構成されていてもよい。テストケース生成装置100が複数台のコンピュータで構成されている場合は、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能が、各コンピュータに分散されて実現されてもよい。
***機能の説明***
 ここで、図1を参照して、本実施の形態に係るテストケース生成装置100の動作の概要を説明する。テストケース生成装置100の動作は、本実施の形態に係るテストケース生成方法に相当する。
 テストケース生成装置100は、値が入力される度に1ステップの処理を実行するプログラム20に入力されるテストケース23を生成する。テストケース23は、順次実行されるi(iは2以上の整数)ステップの処理の各々に入力されるテストケース入力個の値から成る。なお、テストケースは1ステップのみ(すなわち、i=1)であっても本実施の形態は適用可能である。
 プログラム取得部110は、テスト対象ソフトウェアのプログラム20、仕様情報および最大ステップ数の情報を、メモリ920もしくは入出力装置930を介して外部から読み込む。
 網羅箇所抽出部120は、プログラム20のソースコードからテストにより網羅する網羅箇所21を抽出する。
 生成制御部130は、メモリ920に、1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されているかを判定する。第(i-1)テストケースが記憶されている場合、生成制御部130は、第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式M1を選択する。また、メモリ920に第(i-1)テストケースが記憶されていない場合、生成制御部130は、1ステップからiステップまでの各々のテストケースを生成する第2の生成方式M2を選択する。
 このように、生成制御部130は、テストケース生成対象ステップを判定し、そのステップにおけるテストケース生成方式を選択するといったテストケース生成手順を制御する。
 関数生成部140は、生成制御部130が決定したテストケースの生成方式に応じて、ステップ間での状態を保持しながらテスト対象ソフトウェアのプログラムを呼び出すテストケース生成用関数22を生成する。関数生成部140は、テストケース生成用関数生成部ともいう。関数生成部140は、第iテストケースが、第1から第(i-1)テストケースにより網羅されていない網羅箇所である未網羅箇所を網羅するように、テストケース生成条件とプログラムの呼び出しとを含むテストケース生成用関数22を生成する。
 関数生成部140は、第1の生成方式M1にしたがって、第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成するテストケース生成用関数22を生成する。
 また、関数生成部140は、第2の生成方式M2にしたがって、第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、1ステップ目からiステップ目までのテストケースを各々生成するテストケース生成用関数22を生成する。
 ここでの説明において、「iステップのテストケース」あるいは「iステップで生成されたテストケース」は、1からiステップまでのiステップ分のテストケース入力値を指す。また、1からiステップまでのiステップ分のテストケース入力値を、第iテストケースともいう。同様に、1ステップから(i-1)ステップまでのテストケース入力値は、第(i-1)テストケースともいう。
 また、「iステップ目のテストケース」は、iステップを対象とする1ステップ分のテストケース入力値を指す。
 テスト生成部170は、第1の生成方式M1にしたがって、第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成する。そして、テスト生成部170は、第(i-1)テストケースとiステップ目のテストケースとを連結することにより第iテストケースを生成し、メモリ920に記憶する。あるいは、テスト生成部170は、第2の生成方式M2にしたがって、テストケース生成用関数を用いて1ステップ目からiステップ目までのテストケースの各々を生成する。そして、テスト生成部170は、1ステップ目からiステップ目までのテストケースを連結することにより第iテストケースを生成し、メモリ920に記憶する。このように、テスト生成部170は、テストケース生成用関数21を用いて第iテストケースを生成する。
 また、テスト生成部170は、非記号実行によりテストケースを生成する非記号生成部150と、記号実行によりテストケースを生成する記号生成部とを備える。テスト生成部170は、第1の生成方式M1が選択されると、非記号生成部150により第iテストケースを生成する。そして、テスト生成部170は、非記号生成部150により生成された第iテストケースを用いたテストの実行により、未網羅箇所が存在するか否かを判定する。未網羅箇所が存在する場合、テスト生成部170は、未網羅箇所の少なくともいずれかを網羅するように記号生成部160により第iテストケースを生成する。そして、テスト生成部170は、記号生成部160により生成された第iテストケースをメモリ920に記憶する。また、テスト生成部170は、第1の生成方式M1にしたがって、第(i-1)テストケースを利用して第iテストケースを生成した場合には、利用した第(i-1)テストケースを破棄する。
 非記号生成部150は、プログラム取得部110が読み込んだ仕様情報に応じて、テストケース候補となる入力値をランダムに生成する。そして、関数生成部140は、生成した関数を用いてステップ間での状態を保持しながら、網羅対象を網羅する入力を抽出し、テストケースとして決定する。非記号生成部150は、非記号実行によるテスト生成部ともいう。
 また、記号生成部160は、プログラム取得部110が読み込んだ仕様情報に応じて、関数生成部140が生成した関数を用いてステップ間での状態を保持しながら、有界モデル検査手法によりテストケースを生成する。記号生成部160は、記号実行によるテスト生成部ともいう。
***動作の説明***
 次に、図2から図4を参照して、本実施の形態に係るテストケース生成装置100の動作の詳細を説明する。
 ステップS1において、プログラム取得部110は、テスト対象ソフトウェアのプログラム20、仕様情報および最大ステップ数の情報を読み込む。そして、ステップS2へ進む。仕様情報および最大ステップ数は、ソフトウェア仕様に基づき使用者が手動で設定可能である。また、仕様情報および最大ステップ数は、定められた形式で記述された仕様から自動で設定可能である。仕様情報には、テスト対象ソフトウェアのプログラム20の入力変数の情報が含まれる。
 ステップS2において、網羅箇所抽出部120は、使用する網羅基準に従ってテスト対象ソフトウェアのプログラムに含まれる網羅箇所を抽出し、それらが未網羅であるとしてステップS3へ進む。テスト実行時に網羅基準として分岐を用い分岐網羅率を測定する場合には、網羅箇所抽出部120は分岐箇所を抽出する。例えば、if文であれば、TRUEと判定された場合とFALSEと判定された場合との2箇所が網羅対象として抽出される。なお、ステップS2は、ステップS3と依存関係がないため、実行順序を入れ替えたり並行して実行したりすることができる。
 ステップS3において、生成制御部130は、変数iを1に設定し、ステップS4へ進む。
 ステップS4において、生成制御部130は、変数iの値が最大ステップ数より大きいか、または、網羅箇所が存在するかを判定する。変数iの値が最大ステップ数より大きい場合には、テストケース生成対象のステップは終了しているため、生成制御部130は、処理を終了する。変数iの値が最大ステップ数以下であっても未網羅の網羅箇所がなければ、生成制御部130は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、ステップS5へ進む。
 ステップS5において、生成制御部130は、(i-1)ステップで生成されたテストケースが存在するか確認する。存在する場合には、ステップS6へ進む。存在しない場合には、ステップS17へ進む。
 ステップS6において、非記号生成部150は、(i-1)ステップで生成されたテストケースと、ステップS1で読み込んだ仕様情報に基づきランダムに生成したiステップ目のテストケース候補を連結する。そして、非記号生成部150は、連結されたテストケースをiステップのテストケース候補として、ステップS7へ進む。
 ステップS7において、関数生成部140は、非記号生成部150が生成したiステップのテストケース候補を入力とし、iステップ分実行するテストケース生成用関数を生成する。この関数は、テスト対象ソフトウェアのプログラムをiステップ分、各ステップ終了時の内部状態を保持しながら次のステップを実行するための関数である。
 ステップS8において、非記号生成部150は、ステップS6で生成したiステップのテストケース候補を入力として、ステップ間での状態を保持しながらテスト対象ソフトウェアのプログラムをiステップ分実行する。そして、非記号生成部150は、未網羅の網羅箇所を網羅するか確認する。未網羅の網羅箇所を網羅した場合には、非記号生成部150は、そのiステップのテストケース候補をiステップのテストケースとしてメモリ920へ格納し、ステップS9へ進む。
 ステップS9において、非記号生成部150は、ステップS8で決定したiステップのテストケースが網羅した箇所を、網羅箇所から除外し、ステップS10へ進む。
 ステップS10において、生成制御部130は、未網羅の網羅箇所が存在するかを判定する。未網羅の網羅箇所がなければ、生成制御部130は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、ステップS11へ進む。
 ステップS11において、関数生成部140は、テスト対象ソフトウェアのプログラムの1から(i-1)ステップの入力として(i-1)ステップで生成されたテストケースを取得する。そして、関数生成部140は、(i-1)ステップで生成されたテストケースを用いて、未網羅の網羅箇所を網羅するiステップ目のテストケースを有界モデル検査で求めるためのテストケース生成用関数を生成し、ステップS12へ進む。
 ステップS12において、記号生成部160は、ステップS11で生成したテストケース生成用関数を用いてステップ間での状態を保持しながら有界モデル検査を実行し、iステップ目のテストケース生成を試行し、ステップS13へ進む。
 ステップS13において、記号生成部160は、ステップS12でテストケースが生成された場合に、ステップS11で使用した(i-1)ステップで生成されたテストケースと、ステップS12で生成されたiステップ目のテストケースを連結する。そして、記号生成部160は、連結したテストケースを、iステップのテストケースとしてメモリ920へ格納し、ステップS14へ進む。
 ステップS14において、記号生成部160は、ステップS12で生成されたテストケースによって網羅した箇所を、網羅箇所から除外し、ステップS15へ進む。
 ステップS15において、生成制御部130は、ステップS8またはステップS13において、iステップのテストケースがメモリ920へ格納された場合には、そのテストケースの生成に用いた(i-1)ステップのテストケースをメモリ920から除外する。
 ステップS16において、生成制御部130は、網羅箇所が存在するかを判定する。未網羅の網羅箇所がなければ、生成制御部130は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、ステップS17へ進む。
 ステップS17において、非記号生成部150は、ステップS1で読み込んだ仕様情報に基づき、iステップのテストケース候補をランダムに生成し、ステップS18へ進む。
 ステップS18において、関数生成部140は、非記号生成部150が生成したiステップのテストケース候補を取得する。そして、関数生成部140は、テスト対象ソフトウェアのプログラムをiステップ分、各ステップ終了時の内部状態を保持しながら次のステップを実行するためのテストケース生成用関数を生成する。
 ステップS19において、非記号生成部150は、ステップS17で生成したiステップのテストケース候補を取得する。非記号生成部150は、iステップのテストケース候補を入力として、ステップ間での状態を保持しながらテスト対象ソフトウェアのプログラムをiステップ分実行し、未網羅の網羅箇所を網羅するか確認する。未網羅の網羅箇所を網羅した場合には、そのiステップのテストケース候補をiステップのテストケースとしてメモリ920へ格納し、ステップS20へ進む。
 ステップS20において、非記号生成部150は、ステップS19で決定したiステップのテストケースが網羅した箇所を、網羅箇所から除外し、ステップS21へ進む。
 ステップS21において、生成制御部130は、網羅箇所が存在するかを判定する。未網羅の網羅箇所がなければ、生成制御部130は、テストケース生成は不要と判断して処理を終了する。それ以外の場合は、ステップS22へ進む。
 ステップS22において、関数生成部140は、テスト対象ソフトウェアのプログラムの未網羅の網羅対象を網羅するiステップのテストケースを有界モデル検査で求めるための、テストケース生成用関数を生成し、ステップS23へ進む。
 ステップS23において、記号生成部160は、ステップS22で生成したテストケース生成用関数を用いて、ステップ間での状態を保持しながら有界モデル検査を実行し、iステップのテストケース生成を試行し、ステップS24へ進む。
 ステップS24において、記号生成部160は、ステップS23でテストケースが生成された場合に、それをiステップのテストケースとしてメモリ920へ格納し、ステップS25へ進む。
 ステップS25において、記号生成部160は、ステップS23で生成されたテストケースによって網羅した箇所を網羅箇所から除外し、ステップS26へ進む。
 ステップS26において、生成制御部130は、変数iを1だけインクリメントし、ステップS4へ進む。
 以上のテストケース生成処理において、ステップS6からステップS15までの処理は、第(i-1)テストケースが存在する場合に、第(i-1)テストケースを使用して、第iテストケースを生成する第1の生成方式M1の例である。
 ステップS6からステップS9までの処理は、非記号実行により第iテストケースを生成する処理である。ステップS11からステップS15までの処理は、ステップS6からステップS9までの処理でも、未網羅箇所がある場合に実行される記号実行により第iテストケースを生成する処理である。
 また、ステップS17からステップS25までの処理は、第(i-1)テストケースが存在しない場合に、1ステップからiステップまでの各々のテストケースを生成することにより、第iテストケースを生成する第2の生成方式M2の例である。
 ステップS17からステップS20までの処理は、非記号実行により第iテストケースを生成する処理である。ステップS22からステップS25までの処理は、ステップS17からステップS20までの処理でも、未網羅箇所がある場合に実行される記号実行により第iテストケースを生成する処理である。
 また、ステップS6からステップS26までの一連の処理は、第1の生成方式で、第(i-1)テストケースを用いて生成される第iテストケースでも未網羅箇所がある場合の処理となる。このとき、ステップS17から、第2の生成方式で全てのステップのテストケースを生成して、再度第iテストケースを生成する処理となる。
 (i-1)ステップで生成されたテストケースが複数ある場合には、ステップS7からからステップS15を、(i-1)ステップで生成されたテストケースそれぞれについて行う。これらは順番に行ったり並列に行ったりしてもよい。また、(i-1)ステップで生成された複数のテストケースを用いて生成した複数のiステップのテストケースが、同じ網羅箇所のみを網羅する場合には、そのいずれか一つをiステップのテストケースとしてメモリ920に格納してもよい。
 非記号生成部150は、1つの(i-1)ステップのテストケースに対して、複数のiステップ目のテストケース候補を生成し、複数のiステップのテストケース候補としてもよい。
 生成制御部130は、網羅箇所をどのステップで網羅可能かを予め判断してから、ステップS5からステップS25を実行してもよい。例えば、ステップS4とステップS5の間において、ステップS2で抽出した網羅箇所のうち、iステップで網羅可能な網羅箇所を他の手法を用いて抽出する。そして、ステップS10、ステップS16、およびステップS21においては、そのiステップで網羅可能な網羅箇所のうち、未網羅な箇所が無いかを判断するものであってもよい。
 本実施の形態では、記号生成部160は、有界モデル検査を用いてテストケース生成を試行する。しかし、記号生成部160は、コンコリックテスティングといった他の記号実行によるテストケース生成手法を用いてもよい。
 本実施の形態では、非記号生成部150は、テストケース候補として値をランダムに生成する。しかし、非記号生成部150は、遺伝的アルゴリズム、あるいはその他の機械学習といった記号実行以外のテストケース生成手法であってもよい。また、その生成手法は(i-1)ステップのテストケースの値を用いるものであっても良い。
 次に、具体例を用いてテストケース生成装置100の動作を説明する。
 図5は、本実施の形態1のテスト対象ソフトウェアのプログラム20の一部を示す図である。以下の例では、図5に示すテスト対象ソフトウェアのプログラムの一部を用いる。そしてテスト実行時の構造網羅基準として分岐網羅を用いるものとする。また、以下の説明において、カッコ内のステップは、図2から図4のステップに対応する。
 プログラム取得部110は、テスト対象ソフトウェアのプログラム、仕様情報、および最大ステップ数を読み込む(ステップS1)。本例では、1つの関数funcのみ読み込むが、複数の関数または複数ファイルの集合であってもよい。仕様情報には、テスト対象ソフトウェアのプログラムの入力変数sigAの情報が含まれている。最大ステップ数は4に設定されている。入力変数の数はテスト対象ソフトウェアのプログラムに依存し、複数あってもよい。
 これらの情報が読み込まれると網羅箇所抽出部120は、テスト対象ソフトウェアのプログラムから網羅すべき分岐箇所として各if文のTRUEおよびFALSEの分岐を探索して計7か所を抽出する(ステップS2)。そして、網羅箇所抽出部120は、抽出した箇所を未網羅であるとする。図6は、図5に示したプログラムに対し網羅すべき分岐箇所をP1からP7で示している。
 生成制御部130は、変数iを1に設定する(ステップS3)。そして変数iの値が最大ステップ数4よりも小さい1であり、かつ、網羅箇所P1からP7が未網羅であることからテストケース生成が必要と判断する(ステップS4)。次に、生成制御部130は、前のステップで生成されたテストケースが存在するか確認する。1ステップ目では前のステップがないため、テストケースなしとして判断する(ステップS5)。
 非記号生成部150は、仕様情報から入力変数sigAに対し、1ステップのテストケース候補としてランダムな値50を生成する(ステップS17)。
 関数生成部140は、テストケース候補である値50をsigAの入力としてテスト対象ソフトウェアのプログラムを1ステップ分実行するテストケース生成用関数を生成する(ステップS18)。
 非記号生成部150は、テストケース生成用関数を実行して未網羅の網羅箇所を網羅するか確認する(ステップS19)。その結果、P1、P7を網羅するため、50を1ステップのテストケースとしてメモリ920へ格納する。そして網羅した網羅箇所P1とP7を網羅箇所から除外する(ステップS20)。
 生成制御部130は、網羅箇所としてP2からP6が存在するため次の処理へ進む(ステップS21)。
 関数生成部140は、テスト対象ソフトウェアのプログラムの未網羅の網羅箇所21を網羅する1ステップのテストケースを有界モデル検査で求めるための、テストケース生成用関数を生成する(ステップS22)。
 図7は、生成されたテストケース生成用関数22の例である。
 記号生成部160は、図7の関数を用いて有界モデル検査を実行し、1ステップのテストケース生成を試行する(ステップS23)。ここでは、1ステップ目に網羅できる網羅箇所は存在しないため、新たな1ステップのテストケースは生成されない(ステップS24,S25)。
 次に、生成制御部130は、次のステップi=2へ進む(ステップS26)。そして依然として最大ステップ数に到達せず、また未網羅の分岐P2からP6が存在することを確認する。そこで、生成制御部130は、1ステップで生成されたテストケースが存在するか確認する。ここで、1ステップで生成されたテストケースとして50が存在していることから、これを活用したテストケース生成へ進む(ステップS5)。
 非記号生成部150は、2ステップ目のテストケース候補を非記号実行によりランダムに値50と生成する(ステップS6)。非記号生成部150は、1ステップのテストケース50を使用し、入力変数sigAの1ステップ目の値を50とし、2ステップ目のテストケース候補である値50を連結して2ステップのテストケース候補(50、50)とする。
 関数生成部140は、テストケース候補(50、50)をsigAの入力としてテスト対象ソフトウェアのプログラムを2ステップ分実行するテストケース生成用関数を生成する(ステップS7)。
 非記号生成部150は、テストケース生成用関数を用いて1ステップ実行完了時に状態を保持しながら2ステップ目を実行する、というようにステップ間での状態を保持しながら実行する。そして、非記号生成部150は、未網羅の網羅箇所P2からP6を網羅するか確認する(ステップS8)。その結果、2ステップ目において、値50であり網羅箇所P2を網羅することから、2ステップのテストケースとして(50、50)をメモリ920へ格納し、またP2を網羅箇所から除外する(ステップS9)。
 生成制御部130は、網羅箇所としてP3からP6が存在するため次の処理へ進む(ステップS10)。
 関数生成部140は、1ステップのテストケースの値50を1ステップ目のテストケースとして用い、未網羅の網羅箇所を網羅する2ステップ目のテストケースを有界モデル検査で求めるための、テストケース生成用関数を生成する(ステップS11)。
 図8は、生成されたテストケース生成用関数22の例である。
 記号生成部160は、図8の関数を用いて有界モデル検査を1ステップ目の状態を保持しながら2ステップ分検査するように実行し、2ステップ目のテストケース生成を試行する(ステップS12)。その結果、2ステップ目のテストケース、すなわち2ステップ目の入力変数sigAの値として、網羅箇所P3を網羅するような10未満の値、例えば0が生成される。従って、記号生成部160は、2ステップのテストケースとして(50、0)をメモリ920へ格納し、またP3を網羅箇所から除外する(ステップS13,S14)。
 生成制御部130は、2ステップのテストケースの生成に用いた1ステップのテストケース50をメモリから除外する(ステップS15)。その結果、メモリ920上にはテストケースとして2ステップのテストケース(50、50)と(50、0)のみが存在することになる。次に生成制御部130は、網羅箇所P4からP6が存在するため次の処理へ進む(ステップS16)。
 非記号生成部150は、2ステップのテストケース候補としてランダムな値(0、0)を生成したとする(ステップS17)。
 関数生成部140は、テストケース候補(0、0)をsigAの入力としてテスト対象ソフトウェアのプログラムを2ステップ分実行するテストケース生成用関数を生成する(ステップS18)。
 非記号生成部150は、テストケース生成用関数を用いて1ステップ実行完了時に状態を保持しながら2ステップ目を実行する、というようにステップ間での状態を保持しながら実行する(ステップS19)。非記号生成部150は、未網羅の網羅箇所を網羅するか確認する。しかしこの場合未網羅の網羅箇所を網羅することはないため、このテストケース候補(0、0)は廃棄される(ステップS20,S21)。
 生成制御部130は、依然として網羅箇所P4からP6が存在するため次の処理へ進む。
 関数生成部140は、未網羅の網羅箇所を網羅する2ステップのテストケースを有界モデル検査で求めるためのテストケース生成用関数を生成する(ステップS22)。
 図9は、生成されたテストケース生成用関数22の例である。
 記号生成部160は、図9の関数を用いて有界モデル検査を1ステップ目の状態を保持しながら2ステップ分検査するように実行し、2ステップのテストケース生成を試行する(ステップS23)。その結果、網羅箇所P6を網羅するような2ステップのテストケースとして、例えば(150、0)が生成される。従って、記号生成部160は、これをメモリ920へ格納するとともに、P6を網羅箇所から除外する(ステップS24)。
 次に生成制御部130は、次のステップi=3へ進む(ステップS26)。そして依然として最大ステップ数に到達せず、また未網羅の分岐P4とP5が存在することを確認する。そこで2ステップで生成されたテストケースが存在するか確認する。ここで、2ステップで生成されたテストケースとして(50、50)、(50、0)、(150、0)が存在することから、これを活用したテストケース生成へ進む(ステップS4,S5)。
 非記号生成部150は、2ステップのテストケース(50、50)、(50、0)、(150、0)を使用し、2ステップ目の場合と同様に3ステップ目のテストケース候補をランダムに生成する。そして、非記号生成部150は、3ステップ目のテストケース候補を用いて、3ステップのテストケース候補を生成する(ステップS6)。これを例えば(50、50、50)、(50、0、50)、(150、0、50)であったとする。
 関数生成部140は、テストケース候補(50、50、50)、(50、0、50)、(150、0、50)をsigAの入力としてテスト対象ソフトウェアのプログラムを3ステップ分実行するテストケース生成用関数を生成する(ステップS7)。
 非記号生成部150は、テストケース生成用関数を用いて、ステップ間での状態を保持しながら実行する(ステップS8)。つまり、非記号生成部150は、1ステップ実行完了時に状態を保持しながら2ステップ目を実行し、2ステップ実行完了時に状態を保持しながら3ステップ目を実行する、というようにステップ間での状態を保持しながら実行する。そして、非記号生成部150は、未網羅の網羅箇所P4とP5を網羅するか確認する。その結果、これらいずれにおいても網羅箇所P4を網羅できるが、ここではそのうち1つ(50、50、50)を3ステップのテストケースとして格納する。そして、非記号生成部150は、P4を網羅対象から除外する(ステップS8,S9)。
 生成制御部130は、網羅箇所としてP5が存在するため次の処理へ進む(ステップS10)。
 関数生成部140は、2ステップのテストケースを1ステップ目と2ステップ目のテストケースとして用いて、テストケース生成用関数を生成する(ステップS11)。関数生成部140は、未網羅の網羅箇所P5を網羅する3ステップ目のテストケースを有界モデル検査で求めるための、テストケース生成用関数を生成する。ここでは、2ステップのテストケースは、(50、50)、(50、0)、(150、0)である。
 図10は、2ステップのテストケース(50、50)を用いたテストケース生成用関数22の例である。
 例えば、図10で示したテストケース生成用関数では、1ステップ目実行後に初期化をせずに、続けて2ステップ目を呼び出している。このため、2ステップ目実行完了後のテスト対象関数funcが使用する大域変数あるいは静的変数の値は変更されないまま、2ステップ目の関数funcの処理が進むことになる。したがって、例えば記号実行を行うテスト生成部170は、1ステップ目の関数funcの解析に続いて、2ステップ目の初期化されていない関数funcの解析を行う。このような動作が、内部状態を保持したうえでテストケースを生成する動作となる。
 記号生成部160は、図10の関数を用いて有界モデル検査を1ステップ目と2ステップ目の状態を保持しながら3ステップ分検査するように実行し、3ステップ目のテストケース生成を試行する(ステップS11)。その結果、3ステップ目の入力変数sigAの値として、網羅箇所P5を網羅するような30未満の値、例えば0が生成される。従ってテスト生成部は、3ステップのテストケースとして(50、50、0)をメモリ920へ格納し、またP5を網羅箇所から除外する(ステップS13,S14,S15)。
 続いて生成制御部130は、3ステップのテストケースの生成に用いた2ステップのテストケース(50、50)をメモリ920から除外する。その結果、メモリ920上にはテストケースとして(50、0)、(150、0)、(50、50、50)、(50、50、0)が存在することになる。そして生成制御部130は、網羅箇所がこれ以上存在しないため、テストケース生成は不要と判断して処理を終了する(ステップS16)。
 以上のように、本実施の形態に係るテストケース生成装置100は、値が入力される度に1ステップの処理を実行するソフトウェアを解析して、ソフトウェアのテストのために入力される値の系列をテストケースとして生成する。
 生成制御部130は、(i-1)ステップのテストケースが存在する場合には、(i-1)ステップのテストケースを使用して、テストケースを生成する方法を選択する。その際、生成制御部は、そのテストケース実行による(i-1)ステップ終了時点での内部状態を保持した上でiステップ目のテストケースを生成する方法を選択する。生成制御部は、(i-1)ステップのテストケースが、存在しない場合には、1からiステップまでのテストケースを生成するためのテストケースの生成方法を選択する。
 関数生成部140は、生成制御部の選択したテストケースの生成方法に応じて、テストケース生成条件およびテスト対象ソフトウェアのプログラムの呼び出しを含むテストケース生成用関数を生成する。
 テスト生成部170は、生成制御部130の選択したテストケース生成方法に応じて、記号実行あるいは記号実行と非記号実行を組み合わせて、テストケース生成用関数を用いてステップ間での状態を保持しながらテストケースを生成する。(i-1)ステップのテストケースを利用してiステップ目のテストケースを生成した場合には、利用した(i-1)ステップのテストケースを破棄する。
***本実施の形態の効果の説明***
 本実施の形態に係るテストケース生成装置では、複数ステップにわたるテストケース生成が必要な場合に、まず前回ステップのテストケース生成結果を用いて非記号実行によるテストケース生成と記号実行によるテストケース生成を試行する。これにより、本実施の形態に係るテストケース生成装置では、3ステップ目においては、2ステップで生成されたテストケースを用いて2ステップ目終了時点の内部状態を保持した状態で1ステップ分の解析を行うだけで、次の効果がある。つまり、非記号実行によるテストケース生成と、記号実行によるテストケース生成でそれぞれ1つの網羅箇所を網羅し、テストケース生成を終了することができる。上述の具体例では、2ステップ目終了時点の内部状態は、mode=1およびsub_mode=2である。つまり、mode=1およびsub_mode=2を保持した状態で1ステップ分の解析を行うだけで、非記号実行によるテストケース生成と、記号実行によるテストケース生成でそれぞれ1つの網羅箇所を網羅し、テストケース生成を終了することができる。
 なお、本実施の形態の手法を用いない場合には、3ステップ分全てのパスを対象としてテストケース生成を試行する必要がある。そのため、非記号実行によるテストケース生成ではそのテストケース候補が膨大になり生成に時間がかかり、また記号実行によるテストケース生成では3ステップ分のパス解析とそれを満たす値の抽出に時間がかかってしまう。
 また、本実施の形態に係るテストケース生成装置では、i=2においては、1ステップのテストケース生成結果を用いてテストケース生成を行った後、実際には2ステップ目に網羅可能であるにも関わらず未網羅な網羅箇所P6が残った。本実施の形態に係るテストケース生成装置では、これに対して1から2ステップにわたる記号実行によるテストケース生成を行うことで、P6を網羅可能なテストケースを生成できた。このように(i-1)ステップのテストケースを用いてiステップのテストケースを生成する手法と、全iステップにわたるテストケースを生成する手法を組み合わせることで、iステップで網羅可能な箇所を網羅するテストケースを確実に生成することができる。
 また、本実施の形態に係るテストケース生成装置では、i=2において、1ステップのテストケースを用いてテストケースを生成し、網羅対象を網羅することを確認して2ステップのテストケースとしてメモリ920に格納する。また、テストケースとしてメモリ920に格納するとともに、使用した1ステップのテストケースを削除する。これにより、網羅対象を包含する冗長なテストケースを削除し、テストケース総数を削減することができ、出力期待値の検討およびテスト実行時間といったテスト工数を削減することができる。
***他の構成***
<変形例1>
 本実施の形態では、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能がソフトウェアで実現される。変形例として、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能がハードウェアで実現されてもよい。
 図11は、本実施の形態の変形例に係るテストケース生成装置100の構成図である。
 テストケース生成装置100は、電子回路909、メモリ920、および入出力装置930といったハードウェアを備える。
 電子回路909は、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能を実現する専用の電子回路である。
 電子回路909は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、または、FPGAである。GAは、Gate Arrayの略語である。ASICは、Application Specific Integrated Circuitの略語である。FPGAは、Field-Programmable Gate Arrayの略語である。
 プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能は、1つの電子回路で実現されてもよいし、複数の電子回路に分散して実現されてもよい。
 別の変形例として、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の一部の機能が電子回路で実現され、残りの機能がソフトウェアで実現されてもよい。
 また、別の変形例として、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の一部あるいはすべての機能が、ファームウェアで実現されていてもよい。
 プロセッサと電子回路の各々は、プロセッシングサーキットリとも呼ばれる。つまり、テストケース生成装置100において、プログラム取得部110、網羅箇所抽出部120、生成制御部130、関数生成部140、非記号生成部150、および記号生成部160の機能は、プロセッシングサーキットリにより実現される。
 以上の実施の形態1では、テストケース生成装置の各部を独立した機能ブロックとして説明した。しかし、テストケース生成装置の構成は、上述した実施の形態のような構成でなくてもよい。テストケース生成装置の機能ブロックは、上述した実施の形態で説明した機能を実現することができれば、どのような構成でもよい。また、テストケース生成装置は、1つの装置でなく、複数の装置から構成されたシステムでもよい。
 また、実施の形態1のうち、複数の部分を組み合わせて実施しても構わない。あるいは、この実施の形態のうち、1つの部分を実施しても構わない。その他、この実施の形態を、全体としてあるいは部分的に、どのように組み合わせて実施しても構わない。
 すなわち、実施の形態1では、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
 なお、上述した実施の形態は、本質的に好ましい例示であって、本発明の範囲、本発明の適用物の範囲、および本発明の用途の範囲を制限することを意図するものではない。上述した実施の形態は、必要に応じて種々の変更が可能である。
 20 プログラム、21 網羅箇所、22 テストケース生成用関数、23 テストケース、100 テストケース生成装置、110 プログラム取得部、120 網羅箇所抽出部、130 生成制御部、140 関数生成部、150 非記号生成部、160 記号生成部、170 テスト生成部、909 電子回路、910 プロセッサ、920 メモリ、930 入出力装置、M1 第1の生成方式、M2 第2の生成方式。

Claims (7)

  1.  値が入力される度に1ステップの処理を実行するプログラムに入力されるテストケースであって、順次実行されるi(iは2以上の整数)ステップの処理の各々に入力されるテストケース入力個の値から成るテストケースを生成するテストケース生成装置において、
     データを記憶するメモリと、
     前記メモリに1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されている場合、前記第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式を選択する生成制御部と、
     前記第1の生成方式にしたがって、前記第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成し、前記第(i-1)テストケースと前記iステップ目のテストケースとを連結することにより前記第iテストケースを生成し、前記メモリに記憶するテスト生成部と
    を備えたテストケース生成装置。
  2.  前記テストケース生成装置は、
     前記プログラムのソースコードからテストにより網羅する網羅箇所を抽出する網羅箇所抽出部と、
     前記第iテストケースが、第(i-1)テストケースにより網羅されていない網羅箇所である未網羅箇所を網羅するように、テストケース生成条件と前記プログラムの呼び出しとを含むテストケース生成用関数を生成する関数生成部と
    を備え、
     前記テスト生成部は、
     前記テストケース生成用関数を用いて前記第iテストケースを生成する請求項1に記載のテストケース生成装置。
  3.  前記生成制御部は、
     前記メモリに前記第(i-1)テストケースが記憶されていない場合、1ステップからiステップまでの各々のテストケースを生成する第2の生成方式を選択し、
     前記関数生成部は、
     前記第2の生成方式にしたがって、前記第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、1ステップ目からiステップ目までのテストケースを各々生成するテストケース生成用関数を生成し、
     前記テスト生成部は、
     前記テストケース生成用関数を用いて1ステップ目からiステップ目までのテストケースの各々を生成し、1ステップ目からiステップ目までのテストケースを連結することにより前記第iテストケースを生成し、前記メモリに記憶する請求項2に記載のテストケース生成装置。
  4.  前記テスト生成部は、
     非記号実行によりテストケースを生成する非記号生成部と、記号実行によりテストケースを生成する記号生成部とを備え、前記第1の生成方式が選択されると、前記非記号生成部により前記第iテストケースを生成し、前記非記号生成部により生成された前記第iテストケースを用いたテストの実行により、前記未網羅箇所が存在するか否かを判定し、前記未網羅箇所が存在する場合は、前記未網羅箇所の少なくともいずれかを網羅するように前記記号生成部により前記第iテストケースを生成し、前記記号生成部により生成された前記第iテストケースを前記メモリに記憶する請求項3に記載のテストケース生成装置。
  5.  前記テスト生成部は、
     前記第1の生成方式にしたがって、前記第(i-1)テストケースを利用して前記第iテストケースを生成した場合には、利用した前記第(i-1)テストケースを破棄する請求項1から請求項4のいずれか1項に記載のテストケース生成装置。
  6.  値が入力される度に1ステップの処理を実行するプログラムに入力されるテストケースであって、順次実行されるi(iは2以上の整数)ステップの処理の各々に入力されるテストケース入力個の値から成るテストケースを生成するテストケース生成装置のテストケース生成方法において、
     前記テストケース生成装置は、データを記憶するメモリを備え、
     生成制御部が、前記メモリに1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されている場合、前記第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式を選択し、
     テスト生成部が、前記第1の生成方式にしたがって、前記第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成し、前記第(i-1)テストケースと前記iステップ目のテストケースとを連結することにより前記第iテストケースを生成し、前記メモリに記憶するテストケース生成方法。
  7.  値が入力される度に1ステップの処理を実行するプログラムに入力されるテストケースであって、順次実行されるi(iは2以上の整数)ステップの処理の各々に入力されるテストケース入力個の値から成るテストケースを生成するテストケース生成装置のテストケース生成プログラムにおいて、
     前記テストケース生成装置は、データを記憶するメモリを備え、
     前記メモリに1ステップから(i-1)ステップまでのテストケースである第(i-1)テストケースが記憶されている場合、前記第(i-1)テストケースを使用して、1ステップからiステップまでのテストケースである第iテストケースを生成する第1の生成方式を選択する生成制御処理と、
     前記第1の生成方式にしたがって、前記第(i-1)テストケースの実行による(i-1)ステップの終了時点における内部状態を保持した状態で、iステップ目を実行するテストケースを生成し、前記第(i-1)テストケースと前記iステップ目のテストケースとを連結することにより前記第iテストケースを生成し、前記メモリに記憶するテスト生成処理と
    をコンピュータであるテストケース生成装置に実行させるテストケース生成プログラム。
PCT/JP2019/012548 2019-03-25 2019-03-25 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム WO2020194455A1 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
EP19920777.0A EP3929751B1 (en) 2019-03-25 2019-03-25 Test case generation device, test case generation method, and test case generation program
PCT/JP2019/012548 WO2020194455A1 (ja) 2019-03-25 2019-03-25 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
CN201980094049.9A CN113574511A (zh) 2019-03-25 2019-03-25 测试用例生成装置、测试用例生成方法和测试用例生成程序
JP2021508428A JP6903249B2 (ja) 2019-03-25 2019-03-25 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
US17/394,743 US20210365355A1 (en) 2019-03-25 2021-08-05 Test case generation apparatus, test case generation method, and computer readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2019/012548 WO2020194455A1 (ja) 2019-03-25 2019-03-25 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US17/394,743 Continuation US20210365355A1 (en) 2019-03-25 2021-08-05 Test case generation apparatus, test case generation method, and computer readable medium

Publications (1)

Publication Number Publication Date
WO2020194455A1 true WO2020194455A1 (ja) 2020-10-01

Family

ID=72611697

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2019/012548 WO2020194455A1 (ja) 2019-03-25 2019-03-25 テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム

Country Status (5)

Country Link
US (1) US20210365355A1 (ja)
EP (1) EP3929751B1 (ja)
JP (1) JP6903249B2 (ja)
CN (1) CN113574511A (ja)
WO (1) WO2020194455A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2022176027A1 (ja) * 2021-02-16 2022-08-25

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116245057B (zh) * 2022-09-26 2023-12-19 上海合见工业软件集团有限公司 基于时序型覆盖数据库的有效执行区域确定系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014063415A (ja) 2012-09-24 2014-04-10 Mitsubishi Electric Corp テストケース自動生成装置及びテストケース自動生成プログラム
JP2016167262A (ja) 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム
JP2017204164A (ja) 2016-05-12 2017-11-16 富士通株式会社 プログラム分析方法、プログラム分析装置および分析プログラム
JP2018147114A (ja) * 2017-03-02 2018-09-20 株式会社日立製作所 テストケース生成方法、計算機及びプログラム

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5831998A (en) * 1996-12-13 1998-11-03 Northern Telecom Limited Method of testcase optimization
US6577982B1 (en) * 2001-01-30 2003-06-10 Microsoft Corporation Model-based testing via combinatorial designs
US8108826B2 (en) * 2004-09-29 2012-01-31 Avaya Inc. Code-coverage guided prioritized test generation
US7356436B2 (en) * 2005-02-02 2008-04-08 International Business Machines Corporation Method, system, and storage medium for estimating and improving test case generation
US7681180B2 (en) * 2007-06-06 2010-03-16 Microsoft Corporation Parameterized test driven development
JP5198132B2 (ja) * 2008-04-23 2013-05-15 大日本スクリーン製造株式会社 状態遷移テスト支援装置、状態遷移テスト支援プログラム、および状態遷移テスト支援方法
US10042741B2 (en) * 2011-02-28 2018-08-07 Synopsys, Inc. Determining a subset of tests
CN102135939B (zh) * 2011-03-30 2014-01-22 镇江睿泰信息科技有限公司 一种测试用例执行调度装置及方法
CN102736973A (zh) * 2011-04-07 2012-10-17 中国科学技术大学 不变量指导的随机测试用例自动化生成方法
US9135147B2 (en) * 2012-04-26 2015-09-15 International Business Machines Corporation Automated testing of applications with scripting code
US9021449B2 (en) * 2012-08-16 2015-04-28 Fujitsu Limited Software regression testing using symbolic execution
CN103559122B (zh) * 2013-10-14 2016-04-27 西安交通大学 基于程序行为切片的测试案例约减方法
CN105095059B (zh) * 2014-04-15 2019-06-11 阿里巴巴集团控股有限公司 一种自动化测试的方法和装置
JP6289778B2 (ja) * 2016-02-24 2018-03-07 三菱電機株式会社 テストケース生成装置及びテストケース生成プログラム
CN107861864A (zh) * 2017-08-25 2018-03-30 平安普惠企业管理有限公司 自动化测试方法、系统及计算机可读存储介质
CN108595341B (zh) * 2018-05-11 2019-11-22 清华大学 测试用例自动生成方法及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014063415A (ja) 2012-09-24 2014-04-10 Mitsubishi Electric Corp テストケース自動生成装置及びテストケース自動生成プログラム
JP2016167262A (ja) 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム
JP2017204164A (ja) 2016-05-12 2017-11-16 富士通株式会社 プログラム分析方法、プログラム分析装置および分析プログラム
JP2018147114A (ja) * 2017-03-02 2018-09-20 株式会社日立製作所 テストケース生成方法、計算機及びプログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of EP3929751A4

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2022176027A1 (ja) * 2021-02-16 2022-08-25
WO2022176027A1 (ja) * 2021-02-16 2022-08-25 三菱電機株式会社 テストケース生成装置、テストケース生成方法及びテストケース生成プログラム
JP7274063B2 (ja) 2021-02-16 2023-05-15 三菱電機株式会社 テストケース生成装置、テストケース生成方法及びテストケース生成プログラム

Also Published As

Publication number Publication date
JP6903249B2 (ja) 2021-07-14
EP3929751A1 (en) 2021-12-29
CN113574511A (zh) 2021-10-29
EP3929751A4 (en) 2022-02-23
US20210365355A1 (en) 2021-11-25
EP3929751B1 (en) 2023-03-01
JPWO2020194455A1 (ja) 2021-09-13

Similar Documents

Publication Publication Date Title
US5317743A (en) System for compiling iterated loops based on the possibility of parallel execution
US20090319829A1 (en) Pattern extraction method and apparatus
US10365132B2 (en) Methods and systems for performing test and calibration of integrated sensors
US10936474B2 (en) Software test program generation
JP2006350686A (ja) 命令セット・シミュレータ生成装置及びシミュレータ生成方法
JP6903249B2 (ja) テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
US20090172643A1 (en) Program verification apparatus, program verification method, and program storage medium
JP6728874B2 (ja) 未知のバイナリプログラムに対する有効な入力の決定
JP6925433B2 (ja) データ検証装置、データ検証方法及びデータ検証プログラム
KR102327026B1 (ko) Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법
US10990073B2 (en) Program editing device, program editing method, and computer readable medium
US20110131031A1 (en) Dynamic generation of tests
US6532573B1 (en) LSI verification method, LSI verification apparatus, and recording medium
JP6945768B2 (ja) 検知装置、検知方法、及び、検知プログラム
US9117023B2 (en) Dynamic generation of test segments
JP5163172B2 (ja) ソフトウェアテスト項目編集支援装置およびソフトウェアテスト項目編集支援方法
JP6878707B2 (ja) 試験装置、試験方法および試験プログラム
JP6723483B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
JP2017041196A (ja) スタブ化対象判定装置、方法、及びプログラム
KR20070035266A (ko) 소프트웨어 검사방법
JP2012059202A (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
KR102589350B1 (ko) 소스코드 보안 취약점의 종류를 구별하는 인공지능 기반의 구별 모델의 생성을 통해 소스코드에 대한 보안 취약점의 종류를 확인할 수 있도록 지원하는 전자 장치 및 그 동작 방법
JP7059827B2 (ja) ソースコード生成装置
JP2015069220A (ja) 性能評価プログラム生成装置、方法、及びプログラム
JP2015036839A (ja) プロセッサ試験命令列生成方法、生成プログラム、及び生成装置

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 19920777

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2021508428

Country of ref document: JP

Kind code of ref document: A

WWE Wipo information: entry into national phase

Ref document number: 19920777.0

Country of ref document: EP

ENP Entry into the national phase

Ref document number: 2019920777

Country of ref document: EP

Effective date: 20210920

NENP Non-entry into the national phase

Ref country code: DE