(57)【要約】【課題】テストケースのカバレッジを向上させる【解決手段】テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ（例えば、−０，Ｉｎｆ，ＮａＮ）を含むテストベクタを、カバレッジを満足するように生成されたテストケース（Ｓ３０で生成されたテストケース。以下、付加前テストベクタという。）の記述に基づき生成し、このテストベクタを付加前テストケースに付加する（Ｓ５０〜Ｓ８０）。例えばテストケースを生成するコンピュータでは０と−０の扱いを区別しない場合があり、この場合には、−０ではなく０を入力データとしたテストベクタが生成される。一方、オブジェクトコードでは、０と−０の扱いを区別する場合がある。したがって、付加前テストケース中に０を入力データとしたテストベクタが存在する場合には（Ｓ５０）、−０を入力データとしたテストベクタが付加される（Ｓ６０）。【選択図】図３
2010250669.tif 000002
【特許請求の範囲】
【請求項１】
制御の処理内容を記述するモデルである制御モデルの記述に従って生成されたソースコードが前記制御モデルと同一の動作を行うか否かを検証するために用いられるデータであるテストベクタを一つ以上含むテストケースを、前記制御モデルまたは前記ソースコードの記述に基づいて、それぞれ前記制御モデルまたは前記ソースコードのカバレッジを満足するように生成するテストケース生成装置であって、
前記テストベクタは、前記ソースコードに入力される入力データであるコード入力データを示す情報を含んでおり、
前記制御モデルの記述に従って生成されたソースコードをコンパイルするコンパイラをターゲットコンパイラとし、
前記ターゲットコンパイラにより前記ソースコードをコンパイルすることにより生成されるコードをオブジェクトコードとし、
前記テストケースを生成するコンピュータと前記オブジェクトコードとの間で扱いが相違する可能性のある前記コード入力データである相違可能性データを含む前記テストベクタを、前記カバレッジを満足するように生成された前記テストベクタの記述に基づいて生成し、該生成したテストベクタを、前記カバレッジを満足するように生成された前記テストケースに付加するテストベクタ付加手段を備える
ことを特徴とするテストケース生成装置。
【請求項２】
前記テストベクタの記述とは、前記テストベクタに含まれる前記コード入力データである
ことを特徴とする請求項１に記載のテストケース生成装置。
【請求項３】
前記テストベクタの記述とは、
前記テストベクタに含まれる前記コード入力データの接続元となる前記テストベクタの出力データである
ことを特徴とする請求項１に記載のテストケース生成装置。
【請求項４】
前記相違可能性データを数式に置き換える第１数式置換手段を備える
ことを特徴とする請求項１〜請求項３の何れかに記載のテストケース生成装置。
【請求項５】
請求項１〜請求項４の何れかに記載のテストケース生成装置により生成されたテストケースを構成するテストベクタに含まれる前記コード入力データを入力データとして前記オブジェクトコードの処理を実行することにより、前記オブジェクトコードを検査するオブジェクト検査装置であって、
前記オブジェクトコードに入力される前記相違可能性データを数式に置き換える第２数式置換手段を備える
ことを特徴とするオブジェクト検査装置。
【請求項６】
前記相違可能性データは数字である
ことを特徴とする請求項５に記載のオブジェクト検査装置。
【請求項７】
前記相違可能性データは、予め設定された特定の文字列である
ことを特徴とする請求項５に記載のオブジェクト検査装置。
【請求項８】
請求項１〜請求項４の何れかに記載のテストケース生成装置が備える前記各手段としての機能をコンピュータに実現させるためのプログラム。
【請求項９】
請求項５〜請求項７の何れかに記載のオブジェクト検査装置が備える前記各手段としての機能をコンピュータに実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケースを自動的に生成するテストケース生成装置、テストケースを用いてオブジェクトコードを検査するオブジェクト検査装置、およびプログラムに関する。
【背景技術】
【０００２】
従来、制御モデルで記述されたブロックセットに従って生成したソースコードが、制御モデルと同等の動作を実行するか否かを検証するために、仕様を満たしていることを評価するために用いるデータ（以下、テストベクタという）を自動で作成する技術が知られている（例えば特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２４００６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１に記載の技術では、制御モデルまたは自動生成したソースコードのカバレッジに着目したテストベクタ生成が行われるのに対して、ターゲットコンパイラでの分岐に着目した観点でのテストベクタ生成が行われない．
このため、１つ以上のテストベクタで構成されるテストケースが、制御モデルまたは自動生成したソースコードのカバレッジを満足しているにも関わらず、ソースコードをコンパイルした後のオブジェクトコードの動作が制御モデルのシミュレーション動作と異なる場合があるという問題があった。これは、テストケースを自動生成するコンピュータとコンパイル後のオブジェクトコードとの間で扱いが異なる入力データが存在し、オブジェクトコードに対してテストケースのカバレッジが十分でないことが原因である。
【０００５】
本発明は、こうした問題に鑑みなされたものであり、テストケースのカバレッジを向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するためになされた請求項１に記載のテストケース生成装置では、制御の処理内容を記述するモデルである制御モデルの記述に従って生成されたソースコードが制御モデルと同一の動作を行うか否かを検証するために用いられるデータであるテストベクタを一つ以上含むテストケースを、制御モデルまたはソースコードの記述に基づいて、それぞれ制御モデルまたはソースコードのカバレッジを満足するように生成し、テストベクタは、ソースコードに入力される入力データであるコード入力データを示す情報を含んでおり、制御モデルの記述に従って生成されたソースコードをコンパイルするコンパイラをターゲットコンパイラとし、ターゲットコンパイラによりソースコードをコンパイルすることにより生成されるコードをオブジェクトコードとし、テストベクタ付加手段が、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のあるコード入力データである相違可能性データを含むテストベクタを、カバレッジを満足するように生成されたテストベクタの記述に基づいて生成し、生成したテストベクタを、カバレッジを満足するように生成されたテストケースに付加する。
【０００７】
このように構成された請求項１に記載のテストケース生成装置によれば、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違するコード入力データが存在する場合において、テストケースのカバレッジを向上させることができる。
【０００８】
例えば、テストケースを生成するコンピュータでは０と−０の扱いを区別しない場合がある。この場合には、０をコード入力データとしたテストベクタが生成されるとともに、−０をコード入力データとしたテストベクタが生成されない。一方、オブジェクトコードでは、０と−０の扱いを区別する場合がある。したがって、上記のカバレッジを満足するように生成されたテストケース（以下、付加前テストケースという）中に、０をコード入力データとしたテストベクタが存在する場合には、−０をコード入力データとしたテストベクタを付加するようにするとよい。
【０００９】
したがって、請求項１に記載のテストケース生成装置において、請求項２に記載のように、テストベクタの記述とは、テストベクタに含まれるコード入力データであるようにすればよい。
【００１０】
また、請求項１に記載のテストケース生成装置において、請求項３に記載のように、テストベクタの記述とは、テストベクタに含まれるコード入力データの接続元となるテストベクタの出力データであるようにするとよい。
【００１１】
このように構成されたテストケース生成装置によれば、接続元となるテストベクタの出力データに応じてテストベクタを付加することができ、テストケースのカバレッジを向上させることができる。
【００１２】
例えば、接続元となるテストベクタの出力データ値が、付加前テストベクタにおけるコード入力データの閾値以上である場合には、無限大（Ｉｎｆ）または非数（ＮａＮ）をコード入力データとするテストベクタを付加するようにするとよい。これにより、オーバーフローが発生する状況を含んだテストケースとすることができ、テストケースのカバレッジを向上させることができる。
【００１３】
ところで、例えば、テストベクタのコード入力データとして−０を直接入力した場合に、ターゲットコンパイラによって、−０のレジスタ値が０のレジスタ値に置換されてしまう場合がある。これに対し、−０を０＊（−１）の演算に置き換えることで、−０に対応する正しいレジスタ値（０×８０００００００）を、検査対象となるオブジェクトコードに与えることができる。
【００１４】
また、例えば、テストベクタのコード入力データとして無限大（Ｉｎｆ）または非数（ＮａＮ）を入力する場合には、ターゲットコンパイラのレジスタ上の値は、マイクロコンピュータによって異なる。これに対し、Ｉｎｆを「（１／０）」、ＮａＮを「（１／０）＊０」の演算に置き換えることで、コード入力データに対応する正しいレジスタ値（０×７Ｆ８０００００），（０×ＦＦ８０００００）を、検査対象となるオブジェクトコードに与えることができる。
【００１５】
そこで、請求項１〜請求項３の何れかに記載のテストケース生成装置において、請求項４に記載のように、第１数式置換手段が、相違可能性データを数式に置き換えるようにしてもよい。
【００１６】
また、請求項５に記載のオブジェクト検査装置は、請求項１〜請求項４の何れかに記載のテストケース生成装置により生成されたテストケースを構成するテストベクタに含まれるコード入力データを入力データとしてオブジェクトコードの処理を実行することにより、オブジェクトコードを検査するオブジェクト検査装置であって、第２数式置換手段が、オブジェクトコードに入力される相違可能性データを数式に置き換える。
【００１７】
例えば、上述のように、−０を「０＊（−１）」、Ｉｎｆを「（１／０）」、ＮａＮを「（１／０）＊０」に置き換えるとよい。
このように構成されたオブジェクト検査装置によれば、コード入力データに対応する正しいレジスタ値を、検査対象となるオブジェクトコードに与えることができる。
【００１８】
そして、請求項５に記載のオブジェクト検査装置において、請求項６に記載のように、相違可能性データは数字であるようにするとよい。この数字としては、例えば−０が挙げられる。
【００１９】
また、請求項５に記載のオブジェクト検査装置において、請求項７に記載のように、相違可能性データは、予め設定された特定の文字列であるようにするとよい。この文字列としては、例えばＩｎｆとＮａＮが挙げられる。
【００２０】
また、請求項８に記載のプログラムは、請求項１〜請求項４の何れかに記載のテストケース生成装置が備える各手段としての機能をコンピュータに実現させるためのプログラムである。
【００２１】
このプログラムにより制御されるコンピュータは、請求項１〜請求項４の何れかに記載のテストケース生成装置の一部を構成することができる。
また、請求項９に記載のプログラムは、請求項５〜請求項７の何れかに記載のオブジェクト検査装置が備える各手段としての機能をコンピュータに実現させるためのプログラムである。
【００２２】
このプログラムにより制御されるコンピュータは、請求項５〜請求項７の何れかに記載のオブジェクト検査装置の一部を構成することができる。
なお、上述した各プログラムは、各種記録媒体や通信回線を介して提供されるものである。
【図面の簡単な説明】
【００２３】
【図１】ソースコード検査装置１の構成を示すブロック図である。
【図２】ソースコード検査装置１が実行する処理の概要を示す機能ブロック図である。
【図３】テストケース生成処理を示すフローチャートである。
【図４】テストベクタ入力処理を示すフローチャートである。
【図５】制御モデル２００とソースコード３００を示す図である。
【図６】テストケース４０１〜４０５と比較結果６０１，６０２を示す図である。
【図７】グループ３０１における入力データ置換を説明する図である。
【図８】グループ３０２における入力データ置換を説明する図である。
【発明を実施するための形態】
【００２４】
以下に本発明の実施形態について図面とともに説明する。
図１は、本実施形態のソースコード検査装置１の構成を示すブロック図である。
ソースコード検査装置１は、図１に示すように、操作キー１１および表示パネル１２からなるユーザインターフェース（以降、ユーザＩ／Ｆと称す）２と、記憶装置としてのハードディスク（以降、ＨＤＤとする）３と、ソースコード検査装置１全体の動作を制御する制御部４とから構成される。
【００２５】
これらのうち制御部４は、所定の処理プログラムに基づいて処理を実行するＣＰＵ２１と、種々の処理プログラムが格納されたＲＯＭ２２と、種々のデータを格納するＲＡＭ２３と、ユーザＩ／Ｆ２とＨＤＤ３が接続されてＣＰＵ２１及びＲＡＭ２３との間で信号及びデータの入出力を行う入出力部２４とから構成されたマイクロコンピュータであり、ＣＰＵ２１，ＲＯＭ２２，ＲＡＭ２３及び入出力部２４はバス２５を介して接続されている。なお、制御部４を構成するマイクロコンピュータは、本実施形態では「ＮＥＣ  Ｖ８５０」である。
【００２６】
図２は、ソースコード検査装置１が実行する処理の概要を示す機能ブロック図である。
図２に示すように、制御部４は、モデル格納部１０１、自動コード生成部１０２、ソースコード格納部１０３、テストケース生成部１０４、テストベクタ情報追加部１０５、テストケース格納部１０６、モデルシミュレーション実行部１０７、テストベクタ入力置換部１０８、ソースコードシミュレーション実行部１０９、比較解析部１１０、及び解析結果格納部１１１を備えている。
【００２７】
これらのうちモデル格納部１０１は、制御の処理内容を記述する制御モデルを格納している。この制御モデルは、時系列の中でのデータ演算、データ入力及びデータ出力のうち少なくともいずれか１つの機能を表すブロック（サブシステム）、及びブロック間の入出力関係を示す結線の組合せとして記述される。なおモデル格納部１０１は、ＨＤＤ３に設けられている。
【００２８】
また自動コード生成部１０２は、モデル格納部１０１に格納されている制御モデルを読み込み、この制御モデルの示すデータ入出力処理を実現するための処理が記述されたソースコード（例えば、車両制御用のＥＣＵで実行させるＣ言語のソースコード）を生成する。
【００２９】
またソースコード格納部１０３は、自動コード生成部１０２で生成されたソースコードを格納する。なおソースコード格納部１０３は、ＨＤＤ３に設けられている。
またテストケース生成部１０４は、モデル格納部１０１に格納されている制御モデルまたはソースコード格納部１０３に格納されているソースコードに基づいて、テストケースを生成する。テストケースは、入力データと、この入力データに対応する出力結果を示す出力データとから構成されるテストベクタを１つ以上含み、制御モデルのすべてのブロックまたはソースコードの全ての命令文ができる限り実行されるように構成される。
（図６（ａ）を参照）。
【００３０】
またテストベクタ情報追加部１０５は、テストケース生成部１０４で生成されたテストケースに対して、後述する手順（図３を参照）にて、テストベクタを追加する。
またテストケース格納部１０６は、テストベクタ情報追加部１０５でテストベクタが追加されたテストケースを格納する。
【００３１】
またモデルシミュレーション実行部１０７は、モデル格納部１０１に格納されている制御モデルを読み込み、この制御モデルのシミュレーションを実行する。なお、このシミュレーションは、制御モデルの示すデータ入出力処理をソースコード検査装置１上で再現する処理である。
【００３２】
またテストベクタ入力置換部１０８は、後述する手順（図４を参照）にて、ソースコードの入力データを置き換える。
またソースコードシミュレーション実行部１０９は、ソースコード格納部１０３に格納されているソースコードを読み込み、このソースコードのシミュレーションを実行する。なお、このシミュレーションでは、テストベクタ入力置換部１０８で置換された入力データを用いる。
【００３３】
また比較解析部１１０は、モデルシミュレーション実行部１０７での実行結果と、ソースコードシミュレーション実行部１０９での実行結果との比較解析を行う。
また解析結果格納部１１１は、比較解析部１１０での解析結果を格納する。なお解析結果格納部１１１は、ＨＤＤ３に設けられている。
【００３４】
次に、ソースコード検査装置１の制御部４が実行するテストケース生成処理の手順を、図３を用いて説明する。図３はテストケース生成処理を示すフローチャートである。このテストケース生成処理は、テストケース生成部１０４およびテストベクタ情報追加部１０５に相当する処理であり、ユーザＩ／Ｆ２を介した実行開始の操作がユーザによって行われることにより開始される。
【００３５】
このテストケース生成処理が実行されると、制御部４は、まずＳ１０にて、ＨＤＤ３から制御モデルを読み込む。そしてＳ２０にて、読み込んだ制御モデルを分割してグループ化する。
【００３６】
例えば図５（ａ）に示すように、制御モデル２００をグループ２０１とグループ２０２とに分割する。なお制御モデル２００は、入力データをＩｎ１として、１００／Ｉｎ１を演算し、この演算値が０より小さいときには１を、演算値が０以上のときには０を、出力データＯｕｔ１として出力する処理を記述したものである。そしてグループ２０１は、１００／Ｉｎ１を演算する処理であり、グループ２０２は、演算値に応じて１または０を出力する処理である。
【００３７】
その後Ｓ３０にて、分割したグループ毎にテストケースを自動生成する。
例えば、図５（ａ）に示すグループ２０１に対して、図６（ａ）に示すテストケース４０１が生成され、図５（ａ）に示すグループ２０２に対して、図６（ａ）に示すテストケース４０２が生成される。なおテストケース４０１は、入力データが２、−１，０であるときにそれぞれ、出力データが５０，−１００，Ｉｎｆ（無限大）となることを示すテストベクタから構成されている。またテストケース４０２は、入力データが１，−１，０であるときにそれぞれ、出力データが１，０，０となることを示すテストベクタから構成されている。
【００３８】
そしてＳ４０にて、生成されたテストケースが、制御モデル中で実行される全ての分岐を満たしているか否かを判断する。ここで、全ての分岐を満たしていない場合には（Ｓ４０：ＮＯ）、Ｓ３０に戻って上述の処理を繰り返す。一方、全ての分岐を満たしている場合には（Ｓ４０：ＹＥＳ）、Ｓ５０にて、Ｓ３０で生成されたテストケースを構成するテストベクタの入力データに０が存在するか否かを判断する。
【００３９】
ここで、入力データに０が存在しない場合には（Ｓ５０：ＮＯ）、Ｓ７０に移行する。一方、入力データに０が存在する場合には（Ｓ５０：ＹＥＳ）、Ｓ６０にて、入力データを−０としたテストベクタを追加し、Ｓ７０に移行する。例えば、テストケース４０１，４０２（図６（ａ）を参照）を構成するテストベクタには入力データに０が存在するため、入力データを−０としたテストベクタを追加して、テストケース４０３，４０４とする（図６（ｂ）を参照）。
【００４０】
そしてＳ７０に移行すると、接続元のテストベクタの出力データに閾値（本実施形態ではＩｎｆ）以上の値が存在するか否かを判断する。ここで、接続元のテストベクタの出力データに閾値以上の値が存在しない場合には（Ｓ７０：ＮＯ）、Ｓ９０に移行する。一方、接続元のテストベクタの出力データに閾値以上の値が存在する場合には（Ｓ７０：ＹＥＳ）、Ｓ８０にて、入力データをＩｎｆ（無限大）としたテストベクタと、入力データをＮａＮ（非数）としたテストベクタとを追加し、Ｓ９０に移行する。
【００４１】
例えば、テストケース４０３（図６（ｂ）を参照）には、接続元となるテストケースが存在しないのでテストベクタが追加されない。一方、テストケース４０４（図６（ｂ）を参照）では、接続元のテストケースとしてテストケース４０３が存在し、テストケース４０３における閾値以上の出力データとしてＩｎｆ（無限大）が存在する。このため、入力データをＩｎｆ（無限大）としたテストベクタと、入力データをＮａＮ（非数）としたテストベクタとを追加して、テストケース４０５とする（図６（ｂ）を参照）。
【００４２】
そしてＳ９０に移行すると、全てのグループを処理したか否かが判断される。ここで、全てのグループを処理していない場合には（Ｓ９０：ＮＯ）、Ｓ３０に戻って上述の処理を繰り返す。一方、全てのグループを処理した場合には（Ｓ９０：ＹＥＳ）、テストケース生成処理を終了する。
【００４３】
次に、ソースコード検査装置１の制御部４が実行するテストベクタ入力処理の手順を、図４を用いて説明する。図４はテストベクタ入力処理を示すフローチャートである。このテストベクタ入力処理は、テストベクタ入力置換部１０８、ソースコードシミュレーション実行部１０９、および比較解析部１１０に相当する処理であり、ユーザＩ／Ｆ２を介した実行開始の操作がユーザによって行われることにより開始される処理である。
【００４４】
このテストベクタ入力処理が実行されると、制御部４は、まずＳ２１０にて、検査対象となるソースコード（以下、検査対象ソースコードという）をＨＤＤ３から読み込むとともに、Ｓ２２０にて、テストケース生成処理で生成されたテストケースをＨＤＤ３から読み込む。
【００４５】
その後Ｓ２３０にて、ソースコードのシミュレーションを開始する。これにより、読み込んだテストケースに記述されているテストベクタの入力データ毎に、ソースコードのシミュレーションを実行する。
【００４６】
例えば図５（ｂ）に示すように、制御モデル２００（図５（ａ）を参照）に対応するソースコード３００は、グループ３０１とグループ３０２とに分割されている。そしてグループ３０１はグループ２０１（図５（ａ）を参照）に対応するソースコードであり、グループ３０２はグループ２０２（図５（ａ）を参照）に対応するソースコードである。
【００４７】
そして、グループ３０１に対応するテストケース４０３を構成するテストベクタの入力データは２，−１，０，−０の順に配列されているので、ソースコードシミュレーションが開始されると、まず入力データを２として、グループ３０１のソースコードが実行される（図７（ａ）のコード５０１を参照）。その後、入力データを−１，０，−０の順に変化させて、グループ３０１のソースコードが実行される。
【００４８】
また、グループ３０２に対応するテストケース４０５を構成するテストベクタの入力データは１，−１，０，−０，Ｉｎｆ，ＮａＮの順に配列されているので、ソースコードシミュレーションが開始されると、まず入力データを１として、グループ３０２のソースコードが実行される（図８（ａ）のコード５０３を参照）。その後、入力データを−１，０，−０，Ｉｎｆ，ＮａＮの順に変化させて、グループ３０２のソースコードが実行される。
【００４９】
そしてソースコードのシミュレーションが開始されると、Ｓ２４０にて、実行しようとしているソースコードの入力データが−０であるか否かを判断する。ここで、入力データが−０でない場合には（Ｓ２４０：ＮＯ）、Ｓ２６０に移行する。一方、入力データが−０である場合には（Ｓ２４０：ＹＥＳ）、Ｓ２５０にて、実行しようとしているソースコードの入力データを演算「０＊（−１）」に置き換え（図７（ｂ）のコード５０２を参照）、Ｓ２６０に移行する。これにより、−０に相当するレジスタ値（０×８０００００００）が入力データとして設定される。
【００５０】
そしてＳ２６０に移行すると、実行しようとしているソースコードの入力データがＩｎｆであるか否かを判断する。ここで、入力データがＩｎｆでない場合には（Ｓ２６０：ＮＯ）、Ｓ２８０に移行する。一方、入力データがＩｎｆである場合には（Ｓ２６０：ＹＥＳ）、Ｓ２７０にて、実行しようとしているソースコードの入力データを演算１／０に置き換え（図８（ｂ）のコード５０４を参照）、Ｓ２８０に移行する。これにより、Ｉｎｆに相当するレジスタ値（０×７Ｆ８０００００）が入力データとして設定される。
【００５１】
そしてＳ２８０に移行すると、実行しようとしているソースコードの入力データがＮａＮであるか否かを判断する。ここで、入力データがＮａＮでない場合には（Ｓ２８０：ＮＯ）、Ｓ３００に移行する。一方、入力データがＮａＮである場合には（Ｓ２８０：ＹＥＳ）、Ｓ２９０にて、実行しようとしているソースコードの入力データを演算「（１／０）＊０」に置き換え（図８（ｃ）のコード５０５を参照）、Ｓ３００に移行する。これにより、ＮａＮに相当するレジスタ値（０×ＦＦ８０００００）が入力データとして設定される。
【００５２】
そしてＳ３００に移行すると、Ｓ２４０〜Ｓ２９０の処理で設定された入力データを用いて、該当するグループのソースコードについてのシミュレーションを実行する。なおＳ３００では、ソースコードをターゲットコンパイラでコンパイルし、コンパイルした後のオブジェクトコードに、テストケースを構成するテストベクタの入力データを入力することにより、シミュレーションを実行する。
【００５３】
その後Ｓ３１０で、モデルシミュレーション実行部１０７でのシミュレーション結果と、Ｓ３００でのシミュレーション結果とを比較する。
そしてＳ３２０にて、Ｓ３１０での比較結果に基づいて、モデルシミュレーション実行部１０７でのシミュレーション結果と、Ｓ３００でのシミュレーション結果とが一致しているか否かを判断する。ここで、両者が一致している場合には（Ｓ３２０：ＹＥＳ）、Ｓ３４０に移行する。一方、両者が一致していない場合には（Ｓ３２０：ＮＯ）、Ｓ３３０にて、異常が発生したと判定して、異常が発生したグループと入力データを示す情報を解析結果格納部１１１に記録して、Ｓ３４０に移行する。
【００５４】
図６（ｃ）は、制御モデル２００とソースコード３００のシミュレーション結果を、グループ毎に示す図である。
図６（ｃ）に示すように、比較結果６０１は、制御モデル２００のグループ２０１と、ソースコード３００のグループ３０１について、そのシミュレーション結果を入力データ毎に比較可能に示す。また比較結果６０２は、制御モデル２００のグループ２０２と、ソースコード３００のグループ３０２について、そのシミュレーション結果を入力データ毎に比較可能に示す。
【００５５】
比較結果６０１は、入力データとして２，−１，０，−０を入力した場合の出力データが、制御モデルとソースコードとで一致していることを示す。
また比較結果６０２は、入力データとして１，−１，０，Ｉｎｆ，ＮａＮを入力した場合の出力データが、制御モデルとソースコードとで一致しているが、−０を入力した場合の出力データが一致していないことを示す。なお、入力データが−０であるときの不一致は、−０＜０の比較結果がマイクロコンピュータにより異なるために発生する。制御モデルを実行するパーソナルコンピュータとして一般に用いられているＰｅｎｔｉｕｍ（登録商標）では「−０＜０」の結果が０（ＦＡＬＳＥ）であるのに対して、「ＮＥＣ  Ｖ８５０」では「−０＜０」の結果が１（ＴＲＵＥ）であるからである。
【００５６】
そしてＳ３４０に移行すると、全てのテストケースにおける全てのテストベクタについてシミュレーションを行ったか否かを判断する。ここで、全てのテストケースにおける全てのテストベクタについてシミュレーションを行っていない場合には（Ｓ３４０：ＮＯ）、Ｓ２４０に戻って上述の処理を繰り返す。一方、全てのテストケースにおける全てのテストベクタについてシミュレーションを行った場合には（Ｓ３４０：ＹＥＳ）、Ｓ３５０にて、ソースコードのシミュレーションを終了して、テストベクタ入力処理を終了する。
【００５７】
このように構成されたソースコード検査装置１では、テストベクタを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ（本実施形態では、−０，Ｉｎｆ，ＮａＮ）を含むテストベクタを、カバレッジを満足するように生成されたテストケース（Ｓ３０で生成されたテストケース。以下、付加前テストケースという。）の記述に基づいて生成し、この生成したテストベクタを、付加前テストケースに付加する（Ｓ５０〜Ｓ８０）。
【００５８】
このように構成されたソースコード検査装置１によれば、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する入力データが存在する場合において、テストケースのカバレッジを向上させることができる。
【００５９】
例えば、テストケースを生成するコンピュータでは０と−０の扱いを区別しない場合がある。この場合には−０をコード入力データとしたテストベクタが生成されるとともに、−０をコード入力データとしたテストベクタが生成されない。一方、オブジェクトコードでは０と−０の扱いを区別する場合がある。したがって、カバレッジを満足するように生成されたテストケース（付加前テストケース）中に、０をコード入力データとしたテストベクタが存在する場合には、−０を入力データとしたテストベクタが付加される。これにより、テストケースのカバレッジを向上させることができる。
【００６０】
さらに、接続元となるテストベクタ（本実施形態では、テストケース４０１）の出力データ値が、付加前テストケース（本実施形態では、テストケース４０２）における入力データの閾値（Ｉｎｆ）以上である場合には、無限大（Ｉｎｆ）および非数（ＮａＮ）を入力データとするテストベクタが付加される（Ｓ７０，Ｓ８０）。これにより、オーバーフローが発生する状況を含んだテストケースとすることができ、テストケースのカバレッジを向上させることができる。
【００６１】
またソースコード検査装置１では、テストベクタに含まれる入力データを入力データとしてオブジェクトコードの処理を実行することによりオブジェクトコードを検査し（Ｓ３００）、さらに、テストケースを生成するコンピュータとオブジェクトコードとの間で扱いが相違する可能性のある入力データ（本実施形態では、−０，Ｉｎｆ，ＮａＮ）を数式に置き換える（Ｓ２４０〜Ｓ２９０）。これにより、テストベクタの入力データに対応する正しいレジスタ値を、検査対象となるオブジェクトコードに与えることができる。
【００６２】
例えば、テストベクタの入力データとして−０を直接入力した場合に、ターゲットコンパイラによって、−０のレジスタ値が０のレジスタ値に置換されてしまう場合がある。これに対し、−０を０＊（−１）の演算に置き換えることで、−０に対応する正しいレジスタ値（０×８０００００００）を、検査対象となるオブジェクトコードに与えることができる。
【００６３】
また、例えば、テストベクタの入力データとして無限大（Ｉｎｆ）または非数（ＮａＮ）を入力する場合には、ターゲットコンパイラのレジスタ上の値は、マイクロコンピュータによって異なる。これに対し、Ｉｎｆを（１／０）、ＮａＮを（１／０）＊０の演算に置き換えることで、入力データに対応する正しいレジスタ値（０×７Ｆ８０００００），（０×ＦＦ８０００００）を、検査対象となるオブジェクトコードに与えることができる。
【００６４】
以上説明した実施形態において、テストケース生成部１０４とテストベクタ情報追加部１０５は本発明におけるテストケース生成装置、モデルシミュレーション実行部１０７とテストベクタ入力置換部１０８とソースコードシミュレーション実行部１０９と比較解析部１１０は本発明におけるオブジェクト検査装置、Ｓ５０〜Ｓ８０の処理は本発明におけるテストベクタ付加手段、Ｓ２４０〜Ｓ２９０の処理は本発明における第２数式置換手段、−０，Ｉｎｆ，ＮａＮは本発明における相違可能性データ、Ｉｎｆ，ＮａＮは本発明における特定の文字列である。
【００６５】
以上、本発明の一実施例について説明したが、本発明は上記実施例に限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採ることができる。
例えば上記実施形態では、制御モデルからテストケースを生成するものを示したが、ソースコードからテストケースを生成するようにしてもよい。
【００６６】
また上記実施形態では、入力データを−０，Ｉｎｆ，ＮａＮとしたテストベクタを追加するものを示した。しかし、−０，Ｉｎｆ，ＮａＮの代わりに、これらを数式で表した０＊（−１），（１／０），（１／０）＊０を入力データとしたテストベクタを追加するようにしてもよい。なお、このテストベクタを追加する手段は本発明における第１数式置換手段に相当する。
【符号の説明】
【００６７】
１…ソースコード検査装置、２…ユーザＩ／Ｆ、３…ＨＤＤ、４…制御部、１１…操作キー、１２…表示パネル、２１…ＣＰＵ、２２…ＲＯＭ、２３…ＲＡＭ、２４…入出力部、２５…バス、１０１…モデル格納部、１０２…自動コード生成部、１０３…ソースコード格納部、１０４…テストケース生成部、１０５…テストベクタ情報追加部、１０６…テストケース格納部、１０７…モデルシミュレーション実行部、１０８…テストベクタ入力置換部、１０９…ソースコードシミュレーション実行部、１１０…比較解析部、１１１…解析結果格納部
【図１】
2010250669.tif 000003
【図２】
2010250669.tif 000004
【図３】
2010250669.tif 000005
【図４】
2010250669.tif 000006
【図５】
2010250669.tif 000007
【図６】
2010250669.tif 000008
【図７】
2010250669.tif 000009
【図８】
2010250669.tif 000010