JP2010250669A - テストケース生成装置、オブジェクト検査装置、およびプログラム - Google Patents
テストケース生成装置、オブジェクト検査装置、およびプログラム Download PDFInfo
- Publication number
- JP2010250669A JP2010250669A JP2009100840A JP2009100840A JP2010250669A JP 2010250669 A JP2010250669 A JP 2010250669A JP 2009100840 A JP2009100840 A JP 2009100840A JP 2009100840 A JP2009100840 A JP 2009100840A JP 2010250669 A JP2010250669 A JP 2010250669A
- Authority
- JP
- Japan
- Prior art keywords
- test case
- test
- input data
- code
- test vector
- 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
Abstract
【課題】テストケースのカバレッジを向上させる
【解決手段】テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ(例えば、−0,Inf,NaN)を含むテストベクタを、カバレッジを満足するように生成されたテストケース(S30で生成されたテストケース。以下、付加前テストベクタという。)の記述に基づき生成し、このテストベクタを付加前テストケースに付加する(S50〜S80)。例えばテストケースを生成するコンピュータでは0と−0の扱いを区別しない場合があり、この場合には、−0ではなく0を入力データとしたテストベクタが生成される。一方、オブジェクトコードでは、0と−0の扱いを区別する場合がある。したがって、付加前テストケース中に0を入力データとしたテストベクタが存在する場合には(S50)、−0を入力データとしたテストベクタが付加される(S60)。
【選択図】図3
【解決手段】テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ(例えば、−0,Inf,NaN)を含むテストベクタを、カバレッジを満足するように生成されたテストケース(S30で生成されたテストケース。以下、付加前テストベクタという。)の記述に基づき生成し、このテストベクタを付加前テストケースに付加する(S50〜S80)。例えばテストケースを生成するコンピュータでは0と−0の扱いを区別しない場合があり、この場合には、−0ではなく0を入力データとしたテストベクタが生成される。一方、オブジェクトコードでは、0と−0の扱いを区別する場合がある。したがって、付加前テストケース中に0を入力データとしたテストベクタが存在する場合には(S50)、−0を入力データとしたテストベクタが付加される(S60)。
【選択図】図3
Description
本発明は、テストケースを自動的に生成するテストケース生成装置、テストケースを用いてオブジェクトコードを検査するオブジェクト検査装置、およびプログラムに関する。
従来、制御モデルで記述されたブロックセットに従って生成したソースコードが、制御モデルと同等の動作を実行するか否かを検証するために、仕様を満たしていることを評価するために用いるデータ(以下、テストベクタという)を自動で作成する技術が知られている(例えば特許文献1を参照)。
しかしながら、上記特許文献1に記載の技術では、制御モデルまたは自動生成したソースコードのカバレッジに着目したテストベクタ生成が行われるのに対して、ターゲットコンパイラでの分岐に着目した観点でのテストベクタ生成が行われない.
このため、1つ以上のテストベクタで構成されるテストケースが、制御モデルまたは自動生成したソースコードのカバレッジを満足しているにも関わらず、ソースコードをコンパイルした後のオブジェクトコードの動作が制御モデルのシミュレーション動作と異なる場合があるという問題があった。これは、テストケースを自動生成するコンピュータとコンパイル後のオブジェクトコードとの間で扱いが異なる入力データが存在し、オブジェクトコードに対してテストケースのカバレッジが十分でないことが原因である。
このため、1つ以上のテストベクタで構成されるテストケースが、制御モデルまたは自動生成したソースコードのカバレッジを満足しているにも関わらず、ソースコードをコンパイルした後のオブジェクトコードの動作が制御モデルのシミュレーション動作と異なる場合があるという問題があった。これは、テストケースを自動生成するコンピュータとコンパイル後のオブジェクトコードとの間で扱いが異なる入力データが存在し、オブジェクトコードに対してテストケースのカバレッジが十分でないことが原因である。
本発明は、こうした問題に鑑みなされたものであり、テストケースのカバレッジを向上させる技術を提供することを目的とする。
上記目的を達成するためになされた請求項1に記載のテストケース生成装置では、制御の処理内容を記述するモデルである制御モデルの記述に従って生成されたソースコードが制御モデルと同一の動作を行うか否かを検証するために用いられるデータであるテストベクタを一つ以上含むテストケースを、制御モデルまたはソースコードの記述に基づいて、それぞれ制御モデルまたはソースコードのカバレッジを満足するように生成し、テストベクタは、ソースコードに入力される入力データであるコード入力データを示す情報を含んでおり、制御モデルの記述に従って生成されたソースコードをコンパイルするコンパイラをターゲットコンパイラとし、ターゲットコンパイラによりソースコードをコンパイルすることにより生成されるコードをオブジェクトコードとし、テストベクタ付加手段が、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のあるコード入力データである相違可能性データを含むテストベクタを、カバレッジを満足するように生成されたテストベクタの記述に基づいて生成し、生成したテストベクタを、カバレッジを満足するように生成されたテストケースに付加する。
このように構成された請求項1に記載のテストケース生成装置によれば、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違するコード入力データが存在する場合において、テストケースのカバレッジを向上させることができる。
例えば、テストケースを生成するコンピュータでは0と−0の扱いを区別しない場合がある。この場合には、0をコード入力データとしたテストベクタが生成されるとともに、−0をコード入力データとしたテストベクタが生成されない。一方、オブジェクトコードでは、0と−0の扱いを区別する場合がある。したがって、上記のカバレッジを満足するように生成されたテストケース(以下、付加前テストケースという)中に、0をコード入力データとしたテストベクタが存在する場合には、−0をコード入力データとしたテストベクタを付加するようにするとよい。
したがって、請求項1に記載のテストケース生成装置において、請求項2に記載のように、テストベクタの記述とは、テストベクタに含まれるコード入力データであるようにすればよい。
また、請求項1に記載のテストケース生成装置において、請求項3に記載のように、テストベクタの記述とは、テストベクタに含まれるコード入力データの接続元となるテストベクタの出力データであるようにするとよい。
このように構成されたテストケース生成装置によれば、接続元となるテストベクタの出力データに応じてテストベクタを付加することができ、テストケースのカバレッジを向上させることができる。
例えば、接続元となるテストベクタの出力データ値が、付加前テストベクタにおけるコード入力データの閾値以上である場合には、無限大(Inf)または非数(NaN)をコード入力データとするテストベクタを付加するようにするとよい。これにより、オーバーフローが発生する状況を含んだテストケースとすることができ、テストケースのカバレッジを向上させることができる。
ところで、例えば、テストベクタのコード入力データとして−0を直接入力した場合に、ターゲットコンパイラによって、−0のレジスタ値が0のレジスタ値に置換されてしまう場合がある。これに対し、−0を0*(−1)の演算に置き換えることで、−0に対応する正しいレジスタ値(0×80000000)を、検査対象となるオブジェクトコードに与えることができる。
また、例えば、テストベクタのコード入力データとして無限大(Inf)または非数(NaN)を入力する場合には、ターゲットコンパイラのレジスタ上の値は、マイクロコンピュータによって異なる。これに対し、Infを「(1/0)」、NaNを「(1/0)*0」の演算に置き換えることで、コード入力データに対応する正しいレジスタ値(0×7F800000),(0×FF800000)を、検査対象となるオブジェクトコードに与えることができる。
そこで、請求項1〜請求項3の何れかに記載のテストケース生成装置において、請求項4に記載のように、第1数式置換手段が、相違可能性データを数式に置き換えるようにしてもよい。
また、請求項5に記載のオブジェクト検査装置は、請求項1〜請求項4の何れかに記載のテストケース生成装置により生成されたテストケースを構成するテストベクタに含まれるコード入力データを入力データとしてオブジェクトコードの処理を実行することにより、オブジェクトコードを検査するオブジェクト検査装置であって、第2数式置換手段が、オブジェクトコードに入力される相違可能性データを数式に置き換える。
例えば、上述のように、−0を「0*(−1)」、Infを「(1/0)」、NaNを「(1/0)*0」に置き換えるとよい。
このように構成されたオブジェクト検査装置によれば、コード入力データに対応する正しいレジスタ値を、検査対象となるオブジェクトコードに与えることができる。
このように構成されたオブジェクト検査装置によれば、コード入力データに対応する正しいレジスタ値を、検査対象となるオブジェクトコードに与えることができる。
そして、請求項5に記載のオブジェクト検査装置において、請求項6に記載のように、相違可能性データは数字であるようにするとよい。この数字としては、例えば−0が挙げられる。
また、請求項5に記載のオブジェクト検査装置において、請求項7に記載のように、相違可能性データは、予め設定された特定の文字列であるようにするとよい。この文字列としては、例えばInfとNaNが挙げられる。
また、請求項8に記載のプログラムは、請求項1〜請求項4の何れかに記載のテストケース生成装置が備える各手段としての機能をコンピュータに実現させるためのプログラムである。
このプログラムにより制御されるコンピュータは、請求項1〜請求項4の何れかに記載のテストケース生成装置の一部を構成することができる。
また、請求項9に記載のプログラムは、請求項5〜請求項7の何れかに記載のオブジェクト検査装置が備える各手段としての機能をコンピュータに実現させるためのプログラムである。
また、請求項9に記載のプログラムは、請求項5〜請求項7の何れかに記載のオブジェクト検査装置が備える各手段としての機能をコンピュータに実現させるためのプログラムである。
このプログラムにより制御されるコンピュータは、請求項5〜請求項7の何れかに記載のオブジェクト検査装置の一部を構成することができる。
なお、上述した各プログラムは、各種記録媒体や通信回線を介して提供されるものである。
なお、上述した各プログラムは、各種記録媒体や通信回線を介して提供されるものである。
以下に本発明の実施形態について図面とともに説明する。
図1は、本実施形態のソースコード検査装置1の構成を示すブロック図である。
ソースコード検査装置1は、図1に示すように、操作キー11および表示パネル12からなるユーザインターフェース(以降、ユーザI/Fと称す)2と、記憶装置としてのハードディスク(以降、HDDとする)3と、ソースコード検査装置1全体の動作を制御する制御部4とから構成される。
図1は、本実施形態のソースコード検査装置1の構成を示すブロック図である。
ソースコード検査装置1は、図1に示すように、操作キー11および表示パネル12からなるユーザインターフェース(以降、ユーザI/Fと称す)2と、記憶装置としてのハードディスク(以降、HDDとする)3と、ソースコード検査装置1全体の動作を制御する制御部4とから構成される。
これらのうち制御部4は、所定の処理プログラムに基づいて処理を実行するCPU21と、種々の処理プログラムが格納されたROM22と、種々のデータを格納するRAM23と、ユーザI/F2とHDD3が接続されてCPU21及びRAM23との間で信号及びデータの入出力を行う入出力部24とから構成されたマイクロコンピュータであり、CPU21,ROM22,RAM23及び入出力部24はバス25を介して接続されている。なお、制御部4を構成するマイクロコンピュータは、本実施形態では「NEC V850」である。
図2は、ソースコード検査装置1が実行する処理の概要を示す機能ブロック図である。
図2に示すように、制御部4は、モデル格納部101、自動コード生成部102、ソースコード格納部103、テストケース生成部104、テストベクタ情報追加部105、テストケース格納部106、モデルシミュレーション実行部107、テストベクタ入力置換部108、ソースコードシミュレーション実行部109、比較解析部110、及び解析結果格納部111を備えている。
図2に示すように、制御部4は、モデル格納部101、自動コード生成部102、ソースコード格納部103、テストケース生成部104、テストベクタ情報追加部105、テストケース格納部106、モデルシミュレーション実行部107、テストベクタ入力置換部108、ソースコードシミュレーション実行部109、比較解析部110、及び解析結果格納部111を備えている。
これらのうちモデル格納部101は、制御の処理内容を記述する制御モデルを格納している。この制御モデルは、時系列の中でのデータ演算、データ入力及びデータ出力のうち少なくともいずれか1つの機能を表すブロック(サブシステム)、及びブロック間の入出力関係を示す結線の組合せとして記述される。なおモデル格納部101は、HDD3に設けられている。
また自動コード生成部102は、モデル格納部101に格納されている制御モデルを読み込み、この制御モデルの示すデータ入出力処理を実現するための処理が記述されたソースコード(例えば、車両制御用のECUで実行させるC言語のソースコード)を生成する。
またソースコード格納部103は、自動コード生成部102で生成されたソースコードを格納する。なおソースコード格納部103は、HDD3に設けられている。
またテストケース生成部104は、モデル格納部101に格納されている制御モデルまたはソースコード格納部103に格納されているソースコードに基づいて、テストケースを生成する。テストケースは、入力データと、この入力データに対応する出力結果を示す出力データとから構成されるテストベクタを1つ以上含み、制御モデルのすべてのブロックまたはソースコードの全ての命令文ができる限り実行されるように構成される。
(図6(a)を参照)。
またテストケース生成部104は、モデル格納部101に格納されている制御モデルまたはソースコード格納部103に格納されているソースコードに基づいて、テストケースを生成する。テストケースは、入力データと、この入力データに対応する出力結果を示す出力データとから構成されるテストベクタを1つ以上含み、制御モデルのすべてのブロックまたはソースコードの全ての命令文ができる限り実行されるように構成される。
(図6(a)を参照)。
またテストベクタ情報追加部105は、テストケース生成部104で生成されたテストケースに対して、後述する手順(図3を参照)にて、テストベクタを追加する。
またテストケース格納部106は、テストベクタ情報追加部105でテストベクタが追加されたテストケースを格納する。
またテストケース格納部106は、テストベクタ情報追加部105でテストベクタが追加されたテストケースを格納する。
またモデルシミュレーション実行部107は、モデル格納部101に格納されている制御モデルを読み込み、この制御モデルのシミュレーションを実行する。なお、このシミュレーションは、制御モデルの示すデータ入出力処理をソースコード検査装置1上で再現する処理である。
またテストベクタ入力置換部108は、後述する手順(図4を参照)にて、ソースコードの入力データを置き換える。
またソースコードシミュレーション実行部109は、ソースコード格納部103に格納されているソースコードを読み込み、このソースコードのシミュレーションを実行する。なお、このシミュレーションでは、テストベクタ入力置換部108で置換された入力データを用いる。
またソースコードシミュレーション実行部109は、ソースコード格納部103に格納されているソースコードを読み込み、このソースコードのシミュレーションを実行する。なお、このシミュレーションでは、テストベクタ入力置換部108で置換された入力データを用いる。
また比較解析部110は、モデルシミュレーション実行部107での実行結果と、ソースコードシミュレーション実行部109での実行結果との比較解析を行う。
また解析結果格納部111は、比較解析部110での解析結果を格納する。なお解析結果格納部111は、HDD3に設けられている。
また解析結果格納部111は、比較解析部110での解析結果を格納する。なお解析結果格納部111は、HDD3に設けられている。
次に、ソースコード検査装置1の制御部4が実行するテストケース生成処理の手順を、図3を用いて説明する。図3はテストケース生成処理を示すフローチャートである。このテストケース生成処理は、テストケース生成部104およびテストベクタ情報追加部105に相当する処理であり、ユーザI/F2を介した実行開始の操作がユーザによって行われることにより開始される。
このテストケース生成処理が実行されると、制御部4は、まずS10にて、HDD3から制御モデルを読み込む。そしてS20にて、読み込んだ制御モデルを分割してグループ化する。
例えば図5(a)に示すように、制御モデル200をグループ201とグループ202とに分割する。なお制御モデル200は、入力データをIn1として、100/In1を演算し、この演算値が0より小さいときには1を、演算値が0以上のときには0を、出力データOut1として出力する処理を記述したものである。そしてグループ201は、100/In1を演算する処理であり、グループ202は、演算値に応じて1または0を出力する処理である。
その後S30にて、分割したグループ毎にテストケースを自動生成する。
例えば、図5(a)に示すグループ201に対して、図6(a)に示すテストケース401が生成され、図5(a)に示すグループ202に対して、図6(a)に示すテストケース402が生成される。なおテストケース401は、入力データが2、−1,0であるときにそれぞれ、出力データが50,−100,Inf(無限大)となることを示すテストベクタから構成されている。またテストケース402は、入力データが1,−1,0であるときにそれぞれ、出力データが1,0,0となることを示すテストベクタから構成されている。
例えば、図5(a)に示すグループ201に対して、図6(a)に示すテストケース401が生成され、図5(a)に示すグループ202に対して、図6(a)に示すテストケース402が生成される。なおテストケース401は、入力データが2、−1,0であるときにそれぞれ、出力データが50,−100,Inf(無限大)となることを示すテストベクタから構成されている。またテストケース402は、入力データが1,−1,0であるときにそれぞれ、出力データが1,0,0となることを示すテストベクタから構成されている。
そしてS40にて、生成されたテストケースが、制御モデル中で実行される全ての分岐を満たしているか否かを判断する。ここで、全ての分岐を満たしていない場合には(S40:NO)、S30に戻って上述の処理を繰り返す。一方、全ての分岐を満たしている場合には(S40:YES)、S50にて、S30で生成されたテストケースを構成するテストベクタの入力データに0が存在するか否かを判断する。
ここで、入力データに0が存在しない場合には(S50:NO)、S70に移行する。一方、入力データに0が存在する場合には(S50:YES)、S60にて、入力データを−0としたテストベクタを追加し、S70に移行する。例えば、テストケース401,402(図6(a)を参照)を構成するテストベクタには入力データに0が存在するため、入力データを−0としたテストベクタを追加して、テストケース403,404とする(図6(b)を参照)。
そしてS70に移行すると、接続元のテストベクタの出力データに閾値(本実施形態ではInf)以上の値が存在するか否かを判断する。ここで、接続元のテストベクタの出力データに閾値以上の値が存在しない場合には(S70:NO)、S90に移行する。一方、接続元のテストベクタの出力データに閾値以上の値が存在する場合には(S70:YES)、S80にて、入力データをInf(無限大)としたテストベクタと、入力データをNaN(非数)としたテストベクタとを追加し、S90に移行する。
例えば、テストケース403(図6(b)を参照)には、接続元となるテストケースが存在しないのでテストベクタが追加されない。一方、テストケース404(図6(b)を参照)では、接続元のテストケースとしてテストケース403が存在し、テストケース403における閾値以上の出力データとしてInf(無限大)が存在する。このため、入力データをInf(無限大)としたテストベクタと、入力データをNaN(非数)としたテストベクタとを追加して、テストケース405とする(図6(b)を参照)。
そしてS90に移行すると、全てのグループを処理したか否かが判断される。ここで、全てのグループを処理していない場合には(S90:NO)、S30に戻って上述の処理を繰り返す。一方、全てのグループを処理した場合には(S90:YES)、テストケース生成処理を終了する。
次に、ソースコード検査装置1の制御部4が実行するテストベクタ入力処理の手順を、図4を用いて説明する。図4はテストベクタ入力処理を示すフローチャートである。このテストベクタ入力処理は、テストベクタ入力置換部108、ソースコードシミュレーション実行部109、および比較解析部110に相当する処理であり、ユーザI/F2を介した実行開始の操作がユーザによって行われることにより開始される処理である。
このテストベクタ入力処理が実行されると、制御部4は、まずS210にて、検査対象となるソースコード(以下、検査対象ソースコードという)をHDD3から読み込むとともに、S220にて、テストケース生成処理で生成されたテストケースをHDD3から読み込む。
その後S230にて、ソースコードのシミュレーションを開始する。これにより、読み込んだテストケースに記述されているテストベクタの入力データ毎に、ソースコードのシミュレーションを実行する。
例えば図5(b)に示すように、制御モデル200(図5(a)を参照)に対応するソースコード300は、グループ301とグループ302とに分割されている。そしてグループ301はグループ201(図5(a)を参照)に対応するソースコードであり、グループ302はグループ202(図5(a)を参照)に対応するソースコードである。
そして、グループ301に対応するテストケース403を構成するテストベクタの入力データは2,−1,0,−0の順に配列されているので、ソースコードシミュレーションが開始されると、まず入力データを2として、グループ301のソースコードが実行される(図7(a)のコード501を参照)。その後、入力データを−1,0,−0の順に変化させて、グループ301のソースコードが実行される。
また、グループ302に対応するテストケース405を構成するテストベクタの入力データは1,−1,0,−0,Inf,NaNの順に配列されているので、ソースコードシミュレーションが開始されると、まず入力データを1として、グループ302のソースコードが実行される(図8(a)のコード503を参照)。その後、入力データを−1,0,−0,Inf,NaNの順に変化させて、グループ302のソースコードが実行される。
そしてソースコードのシミュレーションが開始されると、S240にて、実行しようとしているソースコードの入力データが−0であるか否かを判断する。ここで、入力データが−0でない場合には(S240:NO)、S260に移行する。一方、入力データが−0である場合には(S240:YES)、S250にて、実行しようとしているソースコードの入力データを演算「0*(−1)」に置き換え(図7(b)のコード502を参照)、S260に移行する。これにより、−0に相当するレジスタ値(0×80000000)が入力データとして設定される。
そしてS260に移行すると、実行しようとしているソースコードの入力データがInfであるか否かを判断する。ここで、入力データがInfでない場合には(S260:NO)、S280に移行する。一方、入力データがInfである場合には(S260:YES)、S270にて、実行しようとしているソースコードの入力データを演算1/0に置き換え(図8(b)のコード504を参照)、S280に移行する。これにより、Infに相当するレジスタ値(0×7F800000)が入力データとして設定される。
そしてS280に移行すると、実行しようとしているソースコードの入力データがNaNであるか否かを判断する。ここで、入力データがNaNでない場合には(S280:NO)、S300に移行する。一方、入力データがNaNである場合には(S280:YES)、S290にて、実行しようとしているソースコードの入力データを演算「(1/0)*0」に置き換え(図8(c)のコード505を参照)、S300に移行する。これにより、NaNに相当するレジスタ値(0×FF800000)が入力データとして設定される。
そしてS300に移行すると、S240〜S290の処理で設定された入力データを用いて、該当するグループのソースコードについてのシミュレーションを実行する。なおS300では、ソースコードをターゲットコンパイラでコンパイルし、コンパイルした後のオブジェクトコードに、テストケースを構成するテストベクタの入力データを入力することにより、シミュレーションを実行する。
その後S310で、モデルシミュレーション実行部107でのシミュレーション結果と、S300でのシミュレーション結果とを比較する。
そしてS320にて、S310での比較結果に基づいて、モデルシミュレーション実行部107でのシミュレーション結果と、S300でのシミュレーション結果とが一致しているか否かを判断する。ここで、両者が一致している場合には(S320:YES)、S340に移行する。一方、両者が一致していない場合には(S320:NO)、S330にて、異常が発生したと判定して、異常が発生したグループと入力データを示す情報を解析結果格納部111に記録して、S340に移行する。
そしてS320にて、S310での比較結果に基づいて、モデルシミュレーション実行部107でのシミュレーション結果と、S300でのシミュレーション結果とが一致しているか否かを判断する。ここで、両者が一致している場合には(S320:YES)、S340に移行する。一方、両者が一致していない場合には(S320:NO)、S330にて、異常が発生したと判定して、異常が発生したグループと入力データを示す情報を解析結果格納部111に記録して、S340に移行する。
図6(c)は、制御モデル200とソースコード300のシミュレーション結果を、グループ毎に示す図である。
図6(c)に示すように、比較結果601は、制御モデル200のグループ201と、ソースコード300のグループ301について、そのシミュレーション結果を入力データ毎に比較可能に示す。また比較結果602は、制御モデル200のグループ202と、ソースコード300のグループ302について、そのシミュレーション結果を入力データ毎に比較可能に示す。
図6(c)に示すように、比較結果601は、制御モデル200のグループ201と、ソースコード300のグループ301について、そのシミュレーション結果を入力データ毎に比較可能に示す。また比較結果602は、制御モデル200のグループ202と、ソースコード300のグループ302について、そのシミュレーション結果を入力データ毎に比較可能に示す。
比較結果601は、入力データとして2,−1,0,−0を入力した場合の出力データが、制御モデルとソースコードとで一致していることを示す。
また比較結果602は、入力データとして1,−1,0,Inf,NaNを入力した場合の出力データが、制御モデルとソースコードとで一致しているが、−0を入力した場合の出力データが一致していないことを示す。なお、入力データが−0であるときの不一致は、−0<0の比較結果がマイクロコンピュータにより異なるために発生する。制御モデルを実行するパーソナルコンピュータとして一般に用いられているPentium(登録商標)では「−0<0」の結果が0(FALSE)であるのに対して、「NEC V850」では「−0<0」の結果が1(TRUE)であるからである。
また比較結果602は、入力データとして1,−1,0,Inf,NaNを入力した場合の出力データが、制御モデルとソースコードとで一致しているが、−0を入力した場合の出力データが一致していないことを示す。なお、入力データが−0であるときの不一致は、−0<0の比較結果がマイクロコンピュータにより異なるために発生する。制御モデルを実行するパーソナルコンピュータとして一般に用いられているPentium(登録商標)では「−0<0」の結果が0(FALSE)であるのに対して、「NEC V850」では「−0<0」の結果が1(TRUE)であるからである。
そしてS340に移行すると、全てのテストケースにおける全てのテストベクタについてシミュレーションを行ったか否かを判断する。ここで、全てのテストケースにおける全てのテストベクタについてシミュレーションを行っていない場合には(S340:NO)、S240に戻って上述の処理を繰り返す。一方、全てのテストケースにおける全てのテストベクタについてシミュレーションを行った場合には(S340:YES)、S350にて、ソースコードのシミュレーションを終了して、テストベクタ入力処理を終了する。
このように構成されたソースコード検査装置1では、テストベクタを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ(本実施形態では、−0,Inf,NaN)を含むテストベクタを、カバレッジを満足するように生成されたテストケース(S30で生成されたテストケース。以下、付加前テストケースという。)の記述に基づいて生成し、この生成したテストベクタを、付加前テストケースに付加する(S50〜S80)。
このように構成されたソースコード検査装置1によれば、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する入力データが存在する場合において、テストケースのカバレッジを向上させることができる。
例えば、テストケースを生成するコンピュータでは0と−0の扱いを区別しない場合がある。この場合には−0をコード入力データとしたテストベクタが生成されるとともに、−0をコード入力データとしたテストベクタが生成されない。一方、オブジェクトコードでは0と−0の扱いを区別する場合がある。したがって、カバレッジを満足するように生成されたテストケース(付加前テストケース)中に、0をコード入力データとしたテストベクタが存在する場合には、−0を入力データとしたテストベクタが付加される。これにより、テストケースのカバレッジを向上させることができる。
さらに、接続元となるテストベクタ(本実施形態では、テストケース401)の出力データ値が、付加前テストケース(本実施形態では、テストケース402)における入力データの閾値(Inf)以上である場合には、無限大(Inf)および非数(NaN)を入力データとするテストベクタが付加される(S70,S80)。これにより、オーバーフローが発生する状況を含んだテストケースとすることができ、テストケースのカバレッジを向上させることができる。
またソースコード検査装置1では、テストベクタに含まれる入力データを入力データとしてオブジェクトコードの処理を実行することによりオブジェクトコードを検査し(S300)、さらに、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ(本実施形態では、−0,Inf,NaN)を数式に置き換える(S240〜S290)。これにより、テストベクタの入力データに対応する正しいレジスタ値を、検査対象となるオブジェクトコードに与えることができる。
例えば、テストベクタの入力データとして−0を直接入力した場合に、ターゲットコンパイラによって、−0のレジスタ値が0のレジスタ値に置換されてしまう場合がある。これに対し、−0を0*(−1)の演算に置き換えることで、−0に対応する正しいレジスタ値(0×80000000)を、検査対象となるオブジェクトコードに与えることができる。
また、例えば、テストベクタの入力データとして無限大(Inf)または非数(NaN)を入力する場合には、ターゲットコンパイラのレジスタ上の値は、マイクロコンピュータによって異なる。これに対し、Infを(1/0)、NaNを(1/0)*0の演算に置き換えることで、入力データに対応する正しいレジスタ値(0×7F800000),(0×FF800000)を、検査対象となるオブジェクトコードに与えることができる。
以上説明した実施形態において、テストケース生成部104とテストベクタ情報追加部105は本発明におけるテストケース生成装置、モデルシミュレーション実行部107とテストベクタ入力置換部108とソースコードシミュレーション実行部109と比較解析部110は本発明におけるオブジェクト検査装置、S50〜S80の処理は本発明におけるテストベクタ付加手段、S240〜S290の処理は本発明における第2数式置換手段、−0,Inf,NaNは本発明における相違可能性データ、Inf,NaNは本発明における特定の文字列である。
以上、本発明の一実施例について説明したが、本発明は上記実施例に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、制御モデルからテストケースを生成するものを示したが、ソースコードからテストケースを生成するようにしてもよい。
例えば上記実施形態では、制御モデルからテストケースを生成するものを示したが、ソースコードからテストケースを生成するようにしてもよい。
また上記実施形態では、入力データを−0,Inf,NaNとしたテストベクタを追加するものを示した。しかし、−0,Inf,NaNの代わりに、これらを数式で表した0*(−1),(1/0),(1/0)*0を入力データとしたテストベクタを追加するようにしてもよい。なお、このテストベクタを追加する手段は本発明における第1数式置換手段に相当する。
1…ソースコード検査装置、2…ユーザI/F、3…HDD、4…制御部、11…操作キー、12…表示パネル、21…CPU、22…ROM、23…RAM、24…入出力部、25…バス、101…モデル格納部、102…自動コード生成部、103…ソースコード格納部、104…テストケース生成部、105…テストベクタ情報追加部、106…テストケース格納部、107…モデルシミュレーション実行部、108…テストベクタ入力置換部、109…ソースコードシミュレーション実行部、110…比較解析部、111…解析結果格納部
Claims (9)
- 制御の処理内容を記述するモデルである制御モデルの記述に従って生成されたソースコードが前記制御モデルと同一の動作を行うか否かを検証するために用いられるデータであるテストベクタを一つ以上含むテストケースを、前記制御モデルまたは前記ソースコードの記述に基づいて、それぞれ前記制御モデルまたは前記ソースコードのカバレッジを満足するように生成するテストケース生成装置であって、
前記テストベクタは、前記ソースコードに入力される入力データであるコード入力データを示す情報を含んでおり、
前記制御モデルの記述に従って生成されたソースコードをコンパイルするコンパイラをターゲットコンパイラとし、
前記ターゲットコンパイラにより前記ソースコードをコンパイルすることにより生成されるコードをオブジェクトコードとし、
前記テストケースを生成するコンピュータと前記オブジェクトコードとの間で扱いが相違する可能性のある前記コード入力データである相違可能性データを含む前記テストベクタを、前記カバレッジを満足するように生成された前記テストベクタの記述に基づいて生成し、該生成したテストベクタを、前記カバレッジを満足するように生成された前記テストケースに付加するテストベクタ付加手段を備える
ことを特徴とするテストケース生成装置。 - 前記テストベクタの記述とは、前記テストベクタに含まれる前記コード入力データである
ことを特徴とする請求項1に記載のテストケース生成装置。 - 前記テストベクタの記述とは、
前記テストベクタに含まれる前記コード入力データの接続元となる前記テストベクタの出力データである
ことを特徴とする請求項1に記載のテストケース生成装置。 - 前記相違可能性データを数式に置き換える第1数式置換手段を備える
ことを特徴とする請求項1〜請求項3の何れかに記載のテストケース生成装置。 - 請求項1〜請求項4の何れかに記載のテストケース生成装置により生成されたテストケースを構成するテストベクタに含まれる前記コード入力データを入力データとして前記オブジェクトコードの処理を実行することにより、前記オブジェクトコードを検査するオブジェクト検査装置であって、
前記オブジェクトコードに入力される前記相違可能性データを数式に置き換える第2数式置換手段を備える
ことを特徴とするオブジェクト検査装置。 - 前記相違可能性データは数字である
ことを特徴とする請求項5に記載のオブジェクト検査装置。 - 前記相違可能性データは、予め設定された特定の文字列である
ことを特徴とする請求項5に記載のオブジェクト検査装置。 - 請求項1〜請求項4の何れかに記載のテストケース生成装置が備える前記各手段としての機能をコンピュータに実現させるためのプログラム。
- 請求項5〜請求項7の何れかに記載のオブジェクト検査装置が備える前記各手段としての機能をコンピュータに実現させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009100840A JP2010250669A (ja) | 2009-04-17 | 2009-04-17 | テストケース生成装置、オブジェクト検査装置、およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009100840A JP2010250669A (ja) | 2009-04-17 | 2009-04-17 | テストケース生成装置、オブジェクト検査装置、およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010250669A true JP2010250669A (ja) | 2010-11-04 |
Family
ID=43312905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009100840A Pending JP2010250669A (ja) | 2009-04-17 | 2009-04-17 | テストケース生成装置、オブジェクト検査装置、およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010250669A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016002417A1 (ja) * | 2014-06-30 | 2016-01-07 | 日立オートモティブシステムズ株式会社 | テストケース生成システム及びテストケースを記録した記録媒体 |
JP2017531855A (ja) * | 2014-09-08 | 2017-10-26 | アビニシオ テクノロジー エルエルシー | データ駆動型検査用フレームワーク |
CN110632499A (zh) * | 2019-09-23 | 2019-12-31 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
JP2020004036A (ja) * | 2018-06-27 | 2020-01-09 | 株式会社デンソー | ソースコード生成装置 |
-
2009
- 2009-04-17 JP JP2009100840A patent/JP2010250669A/ja active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016002417A1 (ja) * | 2014-06-30 | 2016-01-07 | 日立オートモティブシステムズ株式会社 | テストケース生成システム及びテストケースを記録した記録媒体 |
JP2016012274A (ja) * | 2014-06-30 | 2016-01-21 | 日立オートモティブシステムズ株式会社 | テストケース生成システム及びテストケースを記録した記録媒体 |
CN106415504A (zh) * | 2014-06-30 | 2017-02-15 | 日立汽车系统株式会社 | 测试用例生成系统及记录测试用例的记录介质 |
US10162739B2 (en) | 2014-06-30 | 2018-12-25 | Hitachi Automotive Systems, Ltd | Test case generation system and recording medium wherein test case is recorded |
CN106415504B (zh) * | 2014-06-30 | 2019-08-30 | 日立汽车系统株式会社 | 测试用例生成系统及记录测试用例的记录介质 |
JP2017531855A (ja) * | 2014-09-08 | 2017-10-26 | アビニシオ テクノロジー エルエルシー | データ駆動型検査用フレームワーク |
JP2020004036A (ja) * | 2018-06-27 | 2020-01-09 | 株式会社デンソー | ソースコード生成装置 |
JP7059827B2 (ja) | 2018-06-27 | 2022-04-26 | 株式会社デンソー | ソースコード生成装置 |
CN110632499A (zh) * | 2019-09-23 | 2019-12-31 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
CN110632499B (zh) * | 2019-09-23 | 2021-04-23 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4217220B2 (ja) | 検証支援プログラムおよび検証支援装置 | |
JP5894954B2 (ja) | テストケース生成方法、テストケース生成装置およびプログラム | |
JP5005510B2 (ja) | ソフトウェアの設計支援方法、設計支援装置及び設計支援プログラム | |
US7469393B2 (en) | Method and device for supporting verification, and computer product | |
JP2010250669A (ja) | テストケース生成装置、オブジェクト検査装置、およびプログラム | |
JP2009048367A (ja) | 回路設計方法、ならびにその方法により製造される集積回路 | |
JP5440287B2 (ja) | シンボリック実行支援プログラム、方法及び装置 | |
JP4950942B2 (ja) | 半導体集積回路の検証装置 | |
JP2006259820A (ja) | 故障検出改善装置、故障検出改善プログラム、故障検出改善方法 | |
CN115454398A (zh) | 一种c语言程序验证器的浮点计算精度分析方法及系统 | |
WO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
JP2010140084A (ja) | 検査モデル生成装置、モデル検査装置、及び検査モデル生成方法 | |
JP2006277180A (ja) | Rtl入力プログラムの不具合解析支援装置及びその方法ならびに部分rtl生成装置 | |
JPWO2006025412A1 (ja) | 論理検証方法、論理モジュールデータ、デバイスデータおよび論理検証装置 | |
JP2010134598A (ja) | 論理検証装置 | |
JP2010218217A (ja) | 動作記述変換装置、動作記述変換方法、およびプログラム | |
JP6519530B2 (ja) | 検証装置、検証プログラム、及び、検証方法 | |
JP7059827B2 (ja) | ソースコード生成装置 | |
JP2009217720A (ja) | プログラム生成装置およびプログラム生成方法 | |
CN101303599A (zh) | 工业控制器 | |
JP5136257B2 (ja) | 経路管理方法 | |
JP2006331212A (ja) | 論理シミュレーション方法及びその装置 | |
JP6497271B2 (ja) | テストデータ生成装置、方法、及びプログラム | |
JP2013008281A (ja) | テストシナリオ自動作成システム | |
JP2011002903A (ja) | 非同期回路検証装置及びプログラム |