(57)【要約】      （修正有）【課題】プログラムの関数全体としてのアルゴリズム検証を可能とし、かつテスト対象のプログラムを変更することなくテストケースを変更可能とする。【解決手段】シミュレーションシステム１の変数抽出機能部３は、プログラムＰ１を構文解析し、その結果に基づき変数を抽出する。テストケース設定機能部４は、抽出された変数に対するテストケースの時刻・値とテストの周期・実行時間とを設定する。テストプログラム生成機能部５は、設定された情報に基づき予めテストを実行してテストプログラムＰ２を生成する。テストプログラム編集機能部６は、テストプログラムＰ２に設定された情報の編集を可能とする。テストアプリ生成機能部７は、テストプログラムＰ２をコンパイルして実行可能なテストアプリＰ３を生成する。テストアプリ実行機能部８はテストアプリＰ３を実行し、テスト結果表示機能部９はテストアプリＰ３の実行結果を表示する。【選択図】図１
2017167899.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの動作を確認するテストのためのシミュレーションシステムであって、
前記プログラムを構文解析し、構文解析の結果に基づき変数を抽出する変数抽出機能部と、
前記変数抽出機能部で抽出された変数に対するテストケースの時刻・値と、前記テストの周期・実行時間とを設定するテストケース設定機能部と、
前記テストケース設定機能部の設定情報に基づきテストプログラムを生成するテストプログラム生成機能部と、
前記テストプログラムをコンパイルして実行可能なテスト用のアプリケーションを生成するテストアプリ生成機能部と、
前記テストアプリ生成機能部で生成された前記アプリケーションを実行するテストアプリ実行機能部と、を備え、
前記テストプログラム生成機能部により生成されたテストプログラム対して、前記設定情報の編集が可能なことを特徴とするシミュレーションシステム。
【請求項２】
前記テストプログラム生成機能部は、前記設定情報の時間・値にて前記設定情報の周期でテスト対象関数を呼び出すようにテストを実行し、
前記設定情報の実行時間でテストを終了させ、テスト結果として時間，入力変数の値，出力変数の組み合わせでＣＳＶファイルに保存するように前記テストプログラムを生成し、
前記ＣＳＶファイルの編集が可能なことを特徴とする請求項１記載のシミュレーションシステム。
【請求項３】
前記テストアプリの実行結果を表示するテスト結果表示機能部をさらに備える
ことを特徴とする請求項１または２記載のシミュレーションシステム。
【請求項４】
プログラムの動作を確認するテストのためにコンピュータにより実行されるシミュレーション方法であって、
前記プログラムを構文解析し、構文解析の結果に基づき変数を抽出する変数抽出ステップと、
前記変数抽出ステップで抽出された変数に対するテストケースの時刻・値と前記テストの周期・実行時間とを設定するテストケース設定ステップと、
前記テストケース設定ステップで設定された設定情報に基づきテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成された前記テストプログラムに対するユーザの編集に応じて前記テストプログラムを更新させるテストプログラム編集ステップと、
前記テストプログラムをコンパイルして実行可能なテスト用のアプリケーションを生成するテストアプリ生成ステップと、
前記テストアプリ生成ステップで生成された前記アプリケーションを実行するテストアプリ実行ステップと、
を有することを特徴とするシミュレーション方法。
【請求項５】
前記テストプログラム生成ステップは、
前記設定された時間・値にて前記設定された周期でテスト対象関数を呼び出すようにテストを実行するステップと、
前記設定情報の実行時間でテストを終了させ、テスト結果として時間，入力変数の値，出力変数の組み合わせでＣＳＶファイルに保存するように前記テストプログラムを生成するステップと、を有する一方、
前記テストプログラム編集ステップにおいて、
前記ＣＳＶファイルに対するユーザの編集に応じて前記テストプログラムが更新される
ことを特徴とする請求項４記載のシミュレーション方法。
【請求項６】
前記テストアプリの実行結果を表示するテスト結果表示ステップをさらに有する
ことを特徴とする請求項４または５記載のシミュレーション方法。
【請求項７】
請求項１〜３のいずれか１項に記載されたシミュレーションシステムとして、コンピュータを機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、開発されたプログラムにおけるＣ言語関数のアルゴリズムが開発者の意図したとおりに動作するか否かを確認するためのシミュレーションの技術に関する。
【背景技術】
【０００２】
通常、開発されたプログラムが意図したとおりに正常に動作するか否かを確認するため、該プログラムに対する種々のプログラムテストが実行されている。
【０００３】
例えば特許文献１は、プログラム中の変数や関数を抽出し、抽出された変数や関数をテスト項目としてプログラムテストの仕様書を作成する。ここで作成された仕様書に基づきプログラムテストを行っている。
【０００４】
また、特許文献２は、解析対象となる系の入力に基づいて系の出力をシミュレーションする。ここでは解析対象の系の構成情報（例えば回路ブロックの構成情報など）を読み込んで実行形プログラム（オブジェクトプログラム）を生成し、生成された実行形プログラムの実行時に系への入力を表す情報を読み込んで系の出力を求めている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２７３１６９
【特許文献２】特開平６−８３９００
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の仕様書は、開発されたプログラムの処理ステップ毎にテスト項目が作成される。したがって、関数全体としてアルゴリズムの検証ができず、開発されたプログラムを動作確認する上で不十分な場合がある。
【０００７】
また、特許文献２はテストケースを変更する場合、例えば回路のシミュレーション時に回路要素のパラメータ値を変更しようとする場合にパラメータ変数（抵抗ｒ，容量ｃなど）を別途宣言しなければならず、テスト対象のプログラムを変更する必要が生じてしまう。
【０００８】
本発明は、このような従来の問題を解決するためになされ、プログラムテストにおいてプログラムの関数全体としてのアルゴリズム検証を可能とし、かつテスト対象のプログラムを変更することなく、テストケースの変更を可能とすることを解決課題としている。
【課題を解決するための手段】
【０００９】
本発明のシミュレーションシステムは、プログラムを構文解析し、構文解析の結果に基づき変数を抽出する変数抽出機能部と、前記変数抽出機能部で抽出された変数に対するテストケースの時刻・値と、テストの周期・実行時間とを設定するテストケース設定機能部と、前記テストケース設定機能部の設定情報に基づきテストプログラムを生成するテストプログラム生成機能部と、前記テストプログラムをコンパイルして実行可能なテスト用のアプリケーションを生成するテストアプリ生成機能部と、前記テストアプリ生成機能部で生成された前記アプリケーションを実行するテストアプリ実行機能部と、を備え、前記テストプログラム生成機能部により生成されたテストプログラム対して、前記設定情報の編集が可能なことを特徴としている。
【００１０】
本発明のシミュレーション方法は、プログラムを構文解析し、構文解析の結果に基づき変数を抽出する変数抽出ステップと、前記変数抽出ステップで抽出された変数に対するテストケースの時刻・値と前記テストの周期・実行時間とを設定するテストケース設定ステップと、前記テストケース設定ステップで設定された設定情報に基づきテストプログラムを生成するテストプログラム生成ステップと、前記テストプログラム生成ステップで生成された前記テストプログラムに対するユーザの編集に応じて前記テストプログラムを更新させるテストプログラム編集ステップと、前記テストプログラムをコンパイルして実行可能なテスト用のアプリケーションを生成するテストアプリ生成ステップと、前記テストアプリ生成ステップで生成された前記アプリケーションを実行するテストアプリ実行ステップと、を有することを特徴としている。
【００１１】
なお、本発明は、前記ミュレーションシステムとして、コンピュータを機能させるプログラムとして構成することもできる。
【発明の効果】
【００１２】
本発明によれば、プログラムテストにおいてプログラムの関数全体としてのアルゴリズム検証が可能となる。また、テスト対象の開発プログラムを変更することなく、テストケースを変更することも可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係るシミュレーションシステムの機能構成図。
【図２】プログラム動作確認の実施例を示す説明図。
【図３】テスト情報ＤＢの格納データ図。
【発明を実施するための形態】
【００１４】
≪システム構成例≫
図１に基づき本発明の実施形態に係るシミュレーションシステム１の構成例を説明する。このシステム１は、開発されたプログラムにおけるＣ言語関数のアルゴリズムが開発者（ユーザ）の意図したとおりに正常に動作するか否かを確認するプログラムテスト（以下、テストと省略する。）に用いられる。
【００１５】
前記システム１は、コンピュータにより構成され、通常のコンピュータのハードウェアリソース（例えばＣＰＵ,ＲＡＭやＲＯＭなどの主記憶装置，ＳＳＤ，ＨＤＤなどの補助記憶装置など）を備える。このハードウェアリソースとソフトウェアリソース（ＯＳ，アプリケーションなど）の協働の結果、前記システム１は、テスト情報ＤＢ２，入出力変数抽出機能部３，テストケース設定機能部４，テストプログラム生成機能部５，テストプログラム編集機能部６，テストアプリ生成機能部７，テストアプリ実行機能部８，テスト結果表示機能部９を実装する。
【００１６】
テスト情報ＤＢ２は、前記記憶装置上に構築され、開発されたテスト対象のプログラムＰ１にテストを実行するときに必要情報が格納されている。例えばテストの周期・実行時間や入力変数に対するテストケース（時間と値のペア）などの情報が格納されている。
【００１７】
入出力変数抽出機能部３は、テスト対象のプログラムＰ１を構文解析し、該解析結果から入力または出力の候補となる変数を抽出する。例えばプログラムＰ１がＣ言語であれば、「Ｃｌａｎｇ」などのＣ言語向けのコンパイラフロントエンドを使って該プログラムＰ１を構文解析し、グローバル変数宣言や関数の引数、関数内ローカル変数などを抽出する。
【００１８】
この処理がエラーとなる場合にはその旨が表示される一方、エラーとならない場合には正常処理の結果として抽出された変数が表示される。ここで表示された変数は、開発者により正しく入力と出力に分類され、該分類後に入力変数に対するテストケース、即ち時間と値のペアが指定される。また、開発者によりテストを実行する周期と実行時間も併せて指定されるものとする。
【００１９】
テストケース設定機能部４は、前記指定されたテストケース（時間と入力変数の値）と、周期および実行時間とを受け取り、受け取った各情報をすべてテスト情報ＤＢ２に登録する。このテスト情報ＤＢ２への登録によりテストケース（時間と値のペア）と、プログラムＰ１についてのテストの周期および実行時間とが設定される。
【００２０】
テストプログラム生成機能部５は、テスト情報ＤＢ２の登録情報からテスト対象のプログラムＰ１を呼び出し、テストを実行するテストプログラムＰ２を生成する。このテストプログラムＰ２は、テスト対象のプログラムＰ１をテスト情報ＤＢ２に登録されたテストケースなどの設定内容でテストするプログラムであり、例えばテスト情報ＤＢ２のテストケースを設定する関数や、テストケースに設定された周期で同設定された実行時間までテスト対象のプログラムＰ１を呼び出す関数や、テスト結果として保存する関数が含まれる。
【００２１】
ここではテスト情報ＤＢ２にテストケースとして設定された時間と入力変数の値にて同設定された周期でテスト対象の関数を呼び出すように事前テストを実行し、かつ同設定された実行時間で事前テストを終了することでテストプログラムＰ２を生成する。この事前テストの結果としての時間・入力変数の値，出力変数の値，出力変数の値の組み合わせでＣＳＶファイルに保存するようにテストプログラムＰ２を生成する。
【００２２】
したがって、テストプログラムＰ２の中身は、テストプログラム編集機能部６により開発者が任意に編集することができる。例えば前記ＣＳＶファイルはテキストエディタやワープロソフトなどで閲覧・編集できるため、開発者はテストケースとして前記ＣＳＶファイルに保存された時間と入力変数の値のペアを書き換えたり、同設定された周期や実行時間を書き換えたりすることが可能である。この前記ＣＳＶファイルに対する書き換えにより、テストプログラムＰ２の中身が更新される。
【００２３】
テストアプリ生成機能部７は、テストプログラム生成機能部５により生成されたテストプログラムＰ２をコンパイルして、該テストプログラムＰ２を実行形成したテスト用のアプリケーション（いわゆるオブジェクトプログラム：以下、テストアプリと省略する。）Ｐ３を生成する。ただし、テストプログラム編集機能部６にて受付けた更新後のテストプログラムＰ２があれば、該更新後のテストプログラムＰ２をコンパイルし、実行可能なテストアプリＰ３を生成する。
【００２４】
テストアプリ生成方法の一例を説明すれば、テスト対象のプログラムＰ１がＣ言語の場合は、「ＭｉｎＧＷ」のコンパイラ「ＧＣＣ」を使ってテストプログラムＰ２をコンパイルし、テストアプリＰ３を生成することができる。なお、コンパイルエラーとなる場合には、その旨を表示して処理を終了するものとする。
【００２５】
テストアプリ実行機能部８は、テストアプリ生成機能部７で生成されたテストアプリＰ３を実行される。これによりテスト対象のプログラムＰ１の疑似的な実行、即ちシミュレーションが実行される。なお、テストアプリＰ３の実行結果、即ちテスト結果Ｒは、テスト結果表示機能部９に出力されて表示される。
【００２６】
≪実施例≫
図２に基づき前記システム１の実施例を説明する。ここではテスト対象のプログラムＰ１としてＣ言語関数「ｔｅｓｔ」を用いるものとし、次のＳ０１〜Ｓ０７の処理ステップを経てテスト結果が表示されるものとする。
【００２７】
Ｓ０１：まず、処理が開始されると入出力変数抽出機能部３は、コンパイラ「Ｃｌａｎｇ」を使用してプログラムＰ１の構文解析を実行し、矢印Ｘ１に示すように入出力変数の候補を抽出し、ディスプレイなどの外部出力装置に表示する。
【００２８】
例えば表Ｅ１に示すように、関数「ｔｅｓｔ」の引数「ｉｎ」を入力変数の候補，「ｒｅｔｕｒｎ」の変数となっている関数「ｔｅｓｔ」のローカル変数「ｏｕｔ」を出力変数の候補，グローバル変数「ＤＥＬＡＹ」をパラメータ変数の候補として抽出して表示する。
【００２９】
このとき開発者は、表示された各変数の候補について分類が正しいか否か判断し、正しくない場合にはマウスなどのポインティングデバイスを用いて分類を修正する。この点で開発者の判断により各変数の候補の分類を確定させている。
【００３０】
なお、構文解析のエラーが発生する場合には、そのエラー情報をディスプレイなどの外部出力装置に表示して処理を終了するものとする。
【００３１】
Ｓ０２：つぎにテストケース設定機能部４により、入力変数「ｉｎ」に対するテストケースを設定する。ここでは開発者は、入力変数「ｉｎ」の時間と値のペアをキーボードなどの外部入力装置の使用により入力して、入力変数「ｉｎ」の時間的変化を作成する。例えば表Ｅ２に示すように、時間「０」で値「０」，時間「１００」で値「１００」，時間「３００」で値「５０」のように入力する。
【００３２】
また、開発者は、テストケースとして設定するテストの周期と実行時間とをキーボードなどの外部入力装置を使用して入力する。例えば周期「１０」および実行時間「５００」のように入力する。ここで入力された入力変数「ｉｎ」の時間・値のペアおよびテストの周期・実行時間は、すべてテストケース設定機能部４によりテスト情報ＤＢ２に登録され、該テスト情報ＤＢ２への登録によりテストケースが設定される。例えばテスト情報ＤＢ２には、図３に示すように、周期，実行時間，テストケース１〜３毎に時間・値のペアが登録されている。
【００３３】
Ｓ０３：テストプログラム生成機能部５は、矢印Ｘ２に示すように、テスト情報ＤＢ２の登録情報とテスト対象のプログラムＰ１とをもとにテストプログラムＰ２を生成する。具体的には入力変数「ｉｎ」の時間と値のペアを設定する関数と、周期「１０」で実行時間「５００」までテスト対象のプログラムＰ１のＣ言語関数「ｔｅｓｔ」を矢印Ｘ３に示すように呼び出す関数と、各周期における時間と入力変数「ｉｎ」の値と出力変数「ｏｕｔ」の値をＣＳＶファイルに保存する関数とを持つＣ言語プログラムを生成する。
【００３４】
Ｓ０４：テストプログラム編集機能部６により、Ｓ０３のＣＳＶファイルを表示して編集することができる。すなわち、Ｓ０３のＣＳＶファイルがディスプレイなどの外部出力装置に表示されるため、開発者はテストプログラムＰ２の周期や実行時間、入力変数「ｉｎ」の時間と値とのペアについて、その一部または全部を書き換えることができる。この書き換えによりテストプログラムＰ２の中身が更新されることとなる。
【００３５】
Ｓ０５：テストアプリ生成機能部７は、Ｓ０３で生成されたテストプログラムＰ２（Ｓ０４の編集があれば、更新後のテストプログラムＰ２）を、「ＭｉｎＧＷ」のコンパイラ「ＧＣＣ」を使用して矢印Ｘ５に示すようにコンパイルし、実行可能なテストアプリＰ３を生成する。なお、コンパイルエラーが発生した場合には、そのエラー情報をディスプレイなどの外部出力装置に表示して処理を終了する。
【００３６】
Ｓ０６，Ｓ０７：テストアプリ実行機能部８は、Ｓ０５で生成したテストアプリＰ３を実行する（Ｓ０６）。この実行結果としてのテスト結果Ｒは、テストケースに設定された各周期の時間「ｔｉｍｅ」毎に入力変数「ｉｎ」の値と出力変数「ｏｕｔ」の値とをＣＳＶファイルに保存する関数により、Ｓ０３のＣＳＶファイルに保存される。
【００３７】
テスト結果表示機能部９は、テスト結果Ｒを含む前記ＣＳＶファイルをディスプレイなどの外部出力装置に表示する（Ｓ０７）。例えばマイクロソフト（登録商標）社の「Ｅｘｃｅｌ」などでグラフ表示（散布図）することができる。このとき横軸が時間，縦軸が入力変数「ｉｎ」の値と出力変数「ｏｕｔ」の値とすることが好ましい。
【００３８】
このような前記システム１によれば、開発者が指定した時間と入力変数に対する値によってテスト対象のプログラムＰ１の関数がテストされる。したがって、テスト対象のプログラムＰ１について関数全体としてアルゴリズムの検証が可能となり、開発されたプログラムの動作確認をするうえで有効である。
【００３９】
このときテストプログラムＰ２は、矢印Ｘ３に示すように、テスト対象のプログラムＰ１を呼び出すだけなので、該テスト対象のプログラムＰ１を変更することなく、テストケースを変更することができる。
【００４０】
特に前記システム１によれば、テスト対象のプログラムＰ１のパラメータ（入力変数や出力変数やパラメータ変数ではない。）となる値、即ちテストケースの周期や実行時間・入力変数の時間と値とを編集可能なため、元のプログラムＰ１を変更することなく、テストアプリを生成して実行することが可能となる。
【００４１】
なお、本発明は、上記実施形態に限定されるものではなく、各請求項に記載された範囲内で変形して実施することができる。例えば本発明は、コンピュータを前記各部２〜９として機能させるプログラムとして構成することもできる。
【００４２】
このプログラムによれば、コンピュータにＳ０１〜Ｓ０７を実行させることができる。このプログラムは、ＣＤ−ＲＯＭ，ＤＶＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＭＯ，ＨＤＤ，ＢＤ−ＲＯＭ，ＢＤ−Ｒ，ＢＤ−ＲＥなどの記録媒体に記録して、保存・配布することも可能である。この記録媒体は、記録媒体駆動装置を利用して読み出され、そのプログラムコード自体が前記実施形態の処理を実現するので、該記録媒体も本発明を構成する。
【符号の説明】
【００４３】
１…シミュレーションシステム
２…テスト情報ＤＢ
３…入出力変数抽出機能部
４…テストケース設定機能部
５…テストプログラム生成機能部
６…テストプログラム編集機能部
７…テストアプリ生成機能部
８…テストアプリ実行機能部
９…テスト結果表示機能部
Ｐ１…テスト対象のプログラム
Ｐ２…テストプログラム
Ｐ３…テスト用のアプリアプリケーション
Ｒ…テスト結果
【図１】
2017167899.tif 000003
【図２】
2017167899.tif 000004
【図３】
2017167899.tif 000005