(57)【要約】【課題】浮動小数点を用いて記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性を検査する検査パターンを効率的に生成することが可能な検査パターン生成装置を提供すること。【解決手段】入力データに応じて実行される処理動作が複数の処理ブロック間における入出力の仕様として、浮動小数点を用いて記述されるモデルに基づき生成されるソースコード及びオブジェクトコードの少なくとも一方の妥当性を検査するための検査パターンを生成する検査パターン生成装置であって、前記複数の処理ブロックの中から境界値検査の対象である検査対象ブロックを抽出する検査対象ブロック抽出部と、前記モデルにおける前記入力データが入力される入力ブロックから前記検査対象ブロックに至る経路上に存在する処理ブロックの浮動小数点演算時における丸め誤差の積算値を算出する誤差算出部と、前記積算値に基づき、前記検査対象ブロックの境界値検査を実行する検査パターンを生成する検査パターン生成部を備える。【選択図】図２
2016207090.tif 000002
【特許請求の範囲】
【請求項１】
入力データに応じて実行される処理動作が複数の処理ブロック間における入出力の仕様として、浮動小数点を用いて記述されるモデルに基づき生成される、ソースコード及びオブジェクトコードの少なくとも一方の妥当性を検査するための検査パターンを生成する検査パターン生成装置であって、
前記複数の処理ブロックの中から境界値検査の対象である検査対象ブロックを抽出する検査対象ブロック抽出部と、
前記モデルにおける前記入力データが入力される入力ブロックから前記検査対象ブロックに至る経路上に存在する処理ブロックの浮動小数点演算時における丸め誤差の積算値を算出する誤差算出部と、
前記積算値に基づき、前記検査対象ブロックの境界値検査を実行する検査パターンを生成する検査パターン生成部を備える、
検査パターン生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、浮動小数点を用いて記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性を検査する検査パターンを生成する検査パターン生成装置に関する。
【背景技術】
【０００２】
従来、入力データに応じた処理動作を複数のブロックの入出力の仕様として記述するモデルに基づき、コンピュータ上でかかる処理動作を実行させるためのソースコードやオブジェクトコードを生成する技術が知られている。かかる場合、所謂ソフトウェアテストを行うための検査パターン（テストケース）を生成し、ソースコードやオブジェクトコードがベースとなるモデルの記述通りの処理動作を実現するか否かの検査を行う。
【０００３】
ここで、かかる検査において、境界値検査の検査対象ブロックの前段の構成によっては、所定の合格基準（固定小数点方式における境界値の前後１ＬＳＢの範囲）での境界値検査が可能なテストケースを生成できない場合がある。そのため、検査対象ブロックの前段の構成に応じて、検査対象ブロックにおける境界値検査の合格基準を適切に変更することにより、テストケースを効率的に生成する技術が提案されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−５９８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の技術は、固定小数点方式で記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性の検査に関するものである。つまり、浮動小数点を用いて記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性検査に適用することができない。そのため、検査対象ブロックの構成に起因して、所定の合格基準で境界値検査が可能な検査パターンを生成することができない場合、無駄な解析時間を要したり、検査パターンをユーザが手動で設定しなければならなかったり等、検査の非効率化を招くおそれがある。
【０００６】
そこで、上記課題に鑑み、浮動小数点を用いて記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性を検査する検査パターンを効率的に生成することが可能な検査パターン生成装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、一実施形態において、検査パターン生成装置は、
入力データに応じて実行される処理動作が複数の処理ブロック間における入出力の仕様として、浮動小数点を用いて記述されるモデルに基づき生成されるソースコード及びオブジェクトコードの少なくとも一方の妥当性を検査するための検査パターンを生成する検査パターン生成装置であって、
前記複数の処理ブロックの中から境界値検査の対象である検査対象ブロックを抽出する検査対象ブロック抽出部と、
前記モデルにおける前記入力データが入力される入力ブロックから前記検査対象ブロックに至る経路上に存在する処理ブロックの浮動小数点演算時における丸め誤差の積算値を算出する誤差算出部と、
前記積算値に基づき、前記検査対象ブロックの境界値検査を実行する検査パターンを生成する検査パターン生成部を備える。
【発明の効果】
【０００８】
本実施の形態によれば、浮動小数点を用いて記述されるモデルに基づき生成されるソースコードやオブジェクトコードの妥当性を検査する検査パターンを効率的に生成することが可能な検査パターン生成装置を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】本実施形態に係る検査パターン生成装置の構成の一例を示すブロック図である。
【図２】本実施形態に係る検査パターン生成装置による境界値検査の合格基準を設定する処理の一例を概念的に示すフローチャートである。
【図３】モデルの一例を示す図と、各種処理ブロック（演算ブロック）における浮動小数点演算時の丸め誤差の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して発明を実施するための形態について説明する。
【００１１】
図１は、本実施形態に係る検査パターン生成装置１の構成の一例を示すブロック図である。
【００１２】
本実施形態に係る検査パターン生成装置１は、車両等の制御装置のモデルベース開発等において利用される。具体的には、入力データに応じた処理動作を複数の処理ブロックにおける入出力の仕様として記述するモデルに基づき生成されるソースコードやオブジェクトコード（機械コード）の妥当性を検証するための検査パターン（テストケースの集合）を生成する。かかる検査パターンを用いて、ソースコードや制御装置に実装されるオブジェクトコード（ソフトウェア）がモデルの記述通り（要求通り）の処理動作をするか否かの単体検査（ソフトウェアテスト）を実行することができる。
【００１３】
なお、本実施形態におけるモデルは、浮動小数点方式を用いて記述されるモデルであり、かかるモデルに基づき生成されるソースコードやオブジェクトコードも浮動小数点方式を用いて記述される。
【００１４】
検査パターン生成装置１は、例えば、コンピュータ等により実現され、図１に示すように、ＣＰＵ１０、ＲＯＭ２０、記憶部３０等を含む。検査パターン生成装置１は、ＲＯＭ２０に格納される各種プログラムをＣＰＵ１０上で実行することにより後述する各種処理を実現することができる。
【００１５】
検査パターン生成装置１は、予め定められる検査観点（例えば、命令、条件、経路等に関する網羅性や所定の合格基準での境界値検査の担保等）を満足するように、検査パターンを自動生成する。以下、図２を参照しつつ、検査パターン生成装置１による境界値検査における合格基準を設定する処理（合格基準設定処理）について説明する。
【００１６】
図２は、本実施形態に係る検査パターン生成装置１による合格基準設定処理の一例を概念的に示すフローチャートである。
【００１７】
なお、境界値検査は、例えば、入力値が所定閾値以上である場合と所定閾値より小さい場合で異なる出力を行う処理ブロックに対して、境界値（所定閾値）及びその前後の値の入力に対して適切な出力を行うことができるか否かを検証する。また、境界値検査における合格基準は、境界値の前後に予め設定した値（合格基準値ΔＶ）だけずらした入力に対して適切な出力が行えることである。また、合格基準値ΔＶは、デフォルト値として、例えば、浮動小数点で表現可能な最小値としての所定値（或いはかかる最小値にマージンを加えた所定値）ΔＡに設定されている（ΔＶ＝ΔＡ）。
【００１８】
ステップＳ１０１では、モデルに含まれる複数の処理ブロックの中から境界値検査の対象となるブロック（検査対象ブロック）を抽出する。
【００１９】
ステップＳ１０２では、検査対象ブロックが抽出されたか否かを判定する。検査対象ブロックが抽出された場合、ステップＳ１０３に進み、検査対象ブロックが抽出されない場合、処理を終了する。
【００２０】
ステップＳ１０３では、検出された検査対象ブロックの一つに対する直前の処理ブロックを抽出する。また、後述するように、ステップＳ１０５を経由して、ステップＳ１０３に戻る場合、前回のステップＳ１０３で検出された処理ブロックに対する直前の処理ブロックを抽出する。
【００２１】
ステップＳ１０４では、ステップＳ１０３で抽出された処理ブロックが入力ブロックであるか否かを判定する。抽出された処理ブロックが入力ブロックである場合、ステップＳ１０５に進み、入力ブロックでない場合、ステップＳ１０６に進む。
【００２２】
なお、入力ブロックとは、入力データを入力する処理ブロックである。
【００２３】
ステップＳ１０５では、ステップＳ１０３で検出された処理ブロックの種別（加算ブロック、乗算ブロック、除算ブロック等の別）等を含む情報（ブロック情報）を内部メモリ等に記憶して、ステップＳ１０３に戻る。
【００２４】
つまり、ステップＳ１０３〜Ｓ１０５では、検査対象ブロックから入力ブロックまで遡りつつ、入力ブロックから検査対象ブロックに至る処理経路上に存在する処理ブロックのブロック情報を累積的に記憶する処理を行う。
【００２５】
ステップＳ１０６では、累積的に記憶したブロック情報に基づき、入力ブロックから検査対象ブロックに至る処理経路上に存在する処理ブロックにおける丸め誤差ΔＢの積算値（丸め誤差積算値）ΔＢｓｕｍを算出する。
【００２６】
なお、処理ブロックの種類等に対応する丸め誤差ΔＢは、記憶部３０に予め格納されており、記憶部３０から読み出して参照することができる。
【００２７】
ステップＳ１０７では、合格基準値ΔＶをデフォルト値である所定値ΔＡに丸め誤差積算値ΔＢｓｕｍを加算した値に設定する（ΔＶ＝ΔＡ＋ΔＢｓｕｍ）。
【００２８】
ステップＳ１０８では、未解析の検査対象ブロック（ステップＳ１０３〜Ｓ１０７の処理を行っていない検査対象ブロック）があるか否かを判定する。未解析の検査対象ブロックがある場合、ステップＳ１０３に戻って、未解析の検査対象ブロックの一つに対して、ステップＳ１０３〜Ｓ１０７の処理を実行し、未解析の検査対象ブロックがない場合、処理を終了する。
【００２９】
検査パターン生成装置１は、かかる合格基準設定処理により設定される検査対象ブロックの合格基準（合格基準値ΔＶ）に基づき、境界値検査を実行する検査パターンを生成する。例えば、ＲＯＭ２０に格納されるテストケースを生成する市販プログラム等に、かかる合格基準（合格基準値ΔＶ）を目標値として入力することにより、境界値検査を実行するための検査パターンを生成してよい。
【００３０】
次に、合格基準設定処理の具体例について説明する。
【００３１】
図３は、モデルの一例を示す図（図３（ａ））と、各種処理ブロック（演算ブロック）における浮動小数点演算時の丸め誤差ΔＢの一例を示す図（図３（ｂ））である。
【００３２】
図３（ａ）に示すように、モデル４０は、入力ブロック４１、４２、乗算ブロック４３、比較ブロック４４、定数ブロック４５、出力ブロック４６を含む。
【００３３】
入力ブロック４１、４２は、外部から入力される入力データを後段の乗算ブロック４３に出力する処理を行う処理ブロックである。
【００３４】
乗算ブロック４３は、入力ブロック４１、４２から入力される入力データを乗算し、後段の比較ブロック４４に出力する処理を行う処理ブロック（演算ブロック）である。
【００３５】
比較ブロック４４は、乗算ブロック４３から出力されるデータと定数ブロック４５から出力されるデータを比較してその大小関係に応じて、異なる出力を行う処理ブロックである。例えば、乗算ブロック４３からの出力されるデータ（値）が定数ブロックから出力される定数以上である場合、値「１」のデータを出力し、それ以外の場合、値「０」のデータを出力する。
【００３６】
定数ブロック４５は、後段の比較ブロック４４に所定の定数を出力する。
【００３７】
出力ブロック４６は、比較ブロック４４における比較結果を表すデータをモデル４０の外部に出力する。
【００３８】
また、図３（ｂ）に示すように、処理ブロック（演算ブロック）における演算処理（加算、乗算、除算等）の種類に応じて、異なる丸め誤差ΔＢが存在する。具体的には、乗算ブロック、除算ブロック、加算ブロック等のそれぞれに対して、異なる丸め誤差ΔＢ＿ｐｒｏ、ΔＢ＿ｄｉｖ、ΔＢ＿ｓｕｍ等が存在する。
【００３９】
以下、図３（ａ）に示すモデルを前提として、図２に示す合格基準設定処理を適用する具体例を説明する。
【００４０】
（１）検査対象ブロックの抽出（ステップＳ１０１）
検査パターン生成装置１は、比較ブロック４４を検査対象ブロックとして抽出する。
【００４１】
（２）検査対象ブロックに対する１つ前の処理ブロックの抽出（ステップＳ１０３）
検査パターン生成装置１は、検査対象ブロックが抽出されているので（ステップＳ１０２のＹ）、１つ前の処理ブロックとして乗算ブロック４３を抽出する。
【００４２】
なお、定数ブロック４５から入力される定数は、境界値であるため、検査パターン生成装置１は、定数ブロック４５を検査対象ブロックの１つ前の処理ブロックとして抽出してもよいし、しなくてもよい。
【００４３】
（３）ブロック情報の記憶（ステップＳ１０５）
乗算ブロック４３は、入力ブロックではないので（ステップＳ１０４のＮ）、検査パターン生成装置１は、乗算ブロック４３のブロック情報を内部メモリ等に記憶する。
【００４４】
なお、検査パターン生成装置１は、検査対象ブロックの１つ前の処理ブロックとして定数ブロック４５を抽出した場合、定数ブロック４５の出力は境界値であるので、定数ブロック４５のブロック情報を内部メモリ等に記憶することはしない。
【００４５】
（４）更に１つ前の処理ブロックの抽出（ステップＳ１０３）
検査パターン生成装置１は、更に１つ前の処理ブロックとして入力ブロック４１、４２を抽出する。入力ブロック４１、４２が抽出されたため（ステップＳ１０４のＹ）、検査対象ブロックから遡って１つ前の処理ブロックを抽出する処理は終了する。
【００４６】
（５）丸め誤差積算値ΔＢｓｕｍの算出（ステップＳ１０６）
検査パターン生成装置１は、記憶したブロック情報に基づき、丸め誤差積算値ΔＢｓｕｍを算出する。ここで、ブロック情報として記憶されるのは、乗算ブロック４３のみであるので、検査パターン生成装置１は、丸め誤差積算値ΔＢｓｕｍを乗算ブロック４３の丸め誤差ΔＢ＿ｐｒｏに設定する（ΔＢｓｕｍ＝ΔＢ＿ｐｒｏ）。
【００４７】
（６）境界値検査における合格基準（合格基準値ΔＶ）の変更（ステップＳ１０７）
検査パターン生成装置１は、合格基準値ΔＶをデフォルト値である所定値ΔＡに丸め誤差積算値ΔＢｓｕｍ（＝ΔＢ＿ｐｒｏ）を加算した値に設定する（ΔＶ＝ΔＡ＋ΔＢｓｕｍ＝ΔＡ＋ΔＢ＿ｐｒｏ）。境界値検査の検査対象ブロックは、比較ブロック４４の１つであるので（ステップＳ１０８のＹ）、以上で処理は終了する。
【００４８】
このように、本実施形態では、モデルの入力ブロックから境界値検査の対象である検査対象ブロックに至る経路上に存在する処理ブロックにおける丸め誤差ΔＢの積算値（丸め誤差積算値）ΔＢｓｕｍを算出する。そして、かかる丸め誤差積算値ΔＢｓｕｍに基づき、検査対象ブロックの境界値検査を実行するための検査パターンを生成する。具体的には、丸め誤差積算値ΔＢｓｕｍ分を考慮して境界値検査における合格基準（合格基準値ΔＶ）を設定し、かかる合格基準（合格基準値ΔＶ）に応じて、検査対象ブロックの境界値検査を実行する検査パターンを生成する。これにより、浮動小数点を用いて記述されるモデルに関して、検査対象ブロックの前段の構成による影響（丸め誤差の影響）で、合格基準に適合する検査パターンを生成することができない事態の発生を抑制し、効率的に検査パターンを生成することができる。
【００４９】
以上、本発明を実施するための形態について詳述したが、本発明はかかる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００５０】
１  検査パターン生成装置
１０  ＣＰＵ（検査対象ブロック抽出部、誤差算出部、検査パターン生成部）
２０  ＲＯＭ
３０  記憶部
４０  モデル
４１、４２  入力ブロック
４３  乗算ブロック
４４  比較ブロック（検査対象ブロック）
４５  定数ブロック
４６  出力ブロック
【図１】
2016207090.tif 000003
【図２】
2016207090.tif 000004
【図３】
2016207090.tif 000005