(57)【特許請求の範囲】
【請求項１】
手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、割込みの発生を指定する記述を含み、
上記プログラムに含まれる割込みの発生を指定する記述に対応して実行する割込み処理を記述した割込み模擬ファイルと、上記プログラムに含まれる割込みの発生を指定する記述と上記割込み模擬ファイルに記述された割込み処理との対応関係を記述した試験パターンファイルとを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルを読み込み、入力した上記プログラムを解析して割込みの発生を指定する記述がある位置を求め、読み込んだ上記試験パターンファイルに基づいて上記割込みの発生を指定する記述に対応する割込み処理を求め、上記割込みの発生を指定する記述がある位置と上記割込み処理とを対応づける第一のコマンド列と、上記プログラムを実行する第二のコマンド列と、実行した実行結果を出力する第三のコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルと上記割込み模擬ファイルとを読み込み、読み込んだ上記実行スクリプトファイルを実行し、上記実行スクリプトファイルに記述された第二のコマンド列に基づいて上記プログラムを実行する場合に上記割込みの発生を指定する記述がある位置において上記実行スクリプトファイルに記述された第一のコマンド列により上記割込みの発生を指定する記述がある位置に対応づけられた上記割込み模擬ファイルに記述された割込み処理を実行し、上記実行スクリプトファイルに記述された第三のコマンド列に基づいて上記プログラムを実行した実行結果を出力する実行部と
を備えることを特徴とする試験システム。
【請求項２】
上記試験パターンファイル記憶部は、更に、上記プログラムに入力する入力値と、上記入力値を上記プログラムに入力して実行した実行結果の期待値とを含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記実行スクリプトファイルへ、更に、上記試験パターンファイルに含まれる入力値を設定するコマンド列と、上記実行結果と上記期待値とを比較して比較結果を出力するコマンド列と、プログラムの性能を測定する性能測定コマンドを実行するコマンド列と、上記性能測定コマンドが測定した性能情報を出力する性能情報出力コマンドを実行するコマンド列とを記述し、
上記実行部は、上記性能測定コマンドと上記性能情報出力コマンドとを実行して、上記実行結果に加え、上記比較結果と性能情報とを出力し、
上記試験システムは、更に、
上記実行部が出力する実行結果と比較結果と性能情報とを入力し、入力した実行結果と比較結果と性能情報とを併せて出力する出力整形部を備えることを特徴とする請求項１に記載の試験システム。
【請求項３】
上記プログラムは、１ビットのデータをアクセスする命令を含み、
上記試験システムは、更に、上記ビット型のデータをアクセスするビットアクセスコマンドを記憶するコマンド定義記憶部を備え、
上記試験パターンファイル記憶部は、更に、上記１ビットのデータのデータ型を定義するビット型と、上記ビット型のデータとを含む試験用データとを含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記コマンド定義記憶部に記憶したビットアクセスコマンドを読み込み、上記試験パターンファイルに記述された試験用データを上記ビットアクセスコマンドを用いて設定するコマンド列を上記実行スクリプトファイルへ記述し、
上記実行部は、上記コマンド定義記憶部に記憶したビットアクセスコマンドを入力し、上記ビットアクセスコマンドを用いて、入力した実行スクリプトファイルを実行することを特徴とする請求項１記載の試験システム。
【請求項４】
上記プログラムは、グローバル変数を含み、
上記試験パターンファイル記憶部は、上記プログラムに記述されたグローバル変数へ設定する初期値を定義する変数初期値を含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記試験パターンファイルに記述された変数初期値を上記グローバル変数へ設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする請求項１記載の試験システム。
【請求項５】
上記プログラムは、命令を実行するプロセッサに依存するデータ型を含み、
上記試験パターンファイル記憶部は、上記プログラムを実行する場合に使用する試験用データと、上記プログラムに記述されたプロセッサに依存するデータ型を定義するデータ型定義とを含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記試験パターンファイルに記述されたデータ型定義を用いて、上記プログラムで使用する試験用データを設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする請求項１または４記載の試験システム。
【請求項６】
上記手続型言語は、一の変数の名称を別名で定義する別名定義が可能であり、
上記プログラムは、別名定義された別名定義変数を含み、
上記試験パターンファイル記憶部は、上記別名定義変数へ設定する変数値を含む試験パターンファイルを記憶し、
上記試験システムは、更に、上記別名定義された別名定義変数を上記一の変数の名称とを対応付ける別名定義ファイルを備え、
上記コマンド列生成部は、上記別名定義ファイルとを入力し、上記プログラムソースファイルに記述された別名定義変数を上記一の変数の名称へ書き換え、上記試験パターンファイルに記述された変数値を上記書き換えた一の変数へ設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする請求項１，４，５いずれかに記載の試験システム。
【請求項７】
割込み処理を実施する割込みハンドラ関数を備え、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、割込みの発生を指定する記述を含み、
上記プログラムに含まれる割込みの発生を指定する記述と割込みハンドラ関数との対応関係を記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルを読み込み、入力した上記プログラムを解析して割込みの発生を指定する記述がある位置を求め、読み込んだ上記試験パターンファイルに基づいて上記割込みの発生を指定する記述に対応する上記割込みハンドラ関数を求め、上記割込みの発生を指定する記述がある位置と上記割込みハンドラ関数とを対応づける第一のコマンド列と、上記プログラムを実行する第二のコマンド列と、実行した実行結果を出力する第三のコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルを入力し、入力した上記実行スクリプトファイルを実行し、上記実行スクリプトファイルに記述された第二のコマンド列に基づいて上記プログラムを実行する場合に上記割込みの発生を指定する記述がある位置において上記実行スクリプトファイルに記述された第一のコマンド列により上記割込みの発生を指定する記述がある位置に対応づけられた上記割込みハンドラ関数を実行し、上記実行スクリプトファイルに記述された第三のコマンド列に基づいて上記プログラムを実行した実行結果を出力する実行部と
を備えることを特徴とする試験システム。
【請求項８】
上記実行部は、命令セットシュミレータとインサーキットシュミレータとのいずれか一方であることを特徴とする請求項１から７いずれかに記載の試験システム。
【請求項９】
上記手続型言語は、Ｃ言語とアセンブリ言語とのいずれか一方を含むことを特徴とする請求項１から８いずれかに記載の試験システム。
【請求項１０】
手続型言語で記述されたプログラムを、コマンド列生成部と実行部とを有する試験システムが試験する試験方法において、
上記試験システムのコマンド列生成部が、割込みの発生を指定する記述を含むプログラムと、上記プログラムに含まれる割込みの発生を指定する記述と割込み処理との対応関係を記述した試験パターンファイルとを入力し、上記プログラムを解析して割込みの発生を指定する記述がある位置を求め、読み込んだ上記試験パターンファイルに基づいて上記割込みの発生を指定する記述に対応する割込み処理を求め、上記割込みの発生を指定する記述がある位置と上記割込み処理とを対応づける第一のコマンド列と、上記プログラムを実行する第二のコマンド列と、実行した実行結果を出力する第三のコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成工程と、
上記試験システムの実行部が、上記コマンド列生成工程において生成した実行スクリプトファイルと上記プログラムに含まれる割込みの発生を指定する記述に対応して実行する割込み処理を記述した割込み模擬ファイルとを読み込み、読みこんだ上記実行スクリプトファイルを実行し、上記実行スクリプトファイルに記述された第二のコマンド列に基づいて上記プログラムを実行する場合に上記割込みの発生を指定する記述がある位置において上記実行スクリプトファイルに記述された第一のコマンド列により上記割込みの発生を指定する記述がある位置に対応づけられた上記割込み模擬ファイルに記述された割込み処理を実行し、上記実行スクリプトファイルに記述された第三のコマンド列に基づいて、上記プログラムを実行した実行結果を出力する実行工程と
を備えることを特徴とする試験方法。
【請求項１１】
手続型言語で記述されたプログラムの試験を計算機で実現する試験プログラムにおいて、上記計算機を、
割込みの発生を指定する記述を含むプログラムと、上記割込みの発生を指定する記述と割込み処理との対応関係を記述した試験パターンファイルとを入力し、上記プログラムを解析して割込みの発生を指定する記述がある位置を求め、読み込んだ上記試験パターンファイルに基づいて上記割込みの発生を指定する記述に対応する割込み処理を求め、上記割込みの発生を指定する記述がある位置と上記割込み処理とを対応づける第一のコマンド列と、上記プログラムを実行する第二のコマンド列と、実行した実行結果を出力する第三のコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルと上記プログラムに含まれる割込みの発生を指定する記述に対応して実行する割込み処理を記述した割込み模擬ファイルとを読み込み、読み込んだ上記実行スクリプトファイルを実行し、上記実行スクリプトファイルに記述された第二のコマンド列に基づいて上記プログラムを実行する場合に上記割込みの発生を指定する記述がある位置において上記実行スクリプトファイルに記述された第一のコマンド列により上記割込みの発生を指定する記述がある位置に対応づけられた上記割込み模擬ファイルに記述された割込み処理を実行し、上記実行スクリプトファイルに記述された第三のコマンド列に基づいて、上記プログラムを実行した実行結果を出力する実行部と
を備えることを特徴とする試験システムとして機能させるための試験プログラム。
【請求項１２】
手続型言語で記述されたプログラムの試験を計算機で実現する試験プログラムを記録する計算機で読み取り可能な記録媒体において、上記計算機を、
割込みの発生を指定する記述を含むプログラムと、上記割込みの発生を指定する記述と割込み処理との対応関係を記述した試験パターンファイルとを入力し、上記プログラムを解析して割込みの発生を指定する記述がある位置を求め、読み込んだ上記試験パターンファイルに基づいて上記割込みの発生を指定する記述に対応する割込み処理を求め、上記割込みの発生を指定する記述がある位置と上記割込み処理とを対応づける第一のコマンド列と、上記プログラムを実行する第二のコマンド列と、実行した実行結果を出力する第三のコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルと上記プログラムに含まれる割込みの発生を指定する記述に対応して実行する割込み処理を記述した割込み模擬ファイルとを読み込み、読み込んだ上記実行スクリプトファイルを実行し、上記実行スクリプトファイルに記述された第二のコマンド列に基づいて上記プログラムを実行する場合に上記割込みの発生を指定する記述がある位置において上記実行スクリプトファイルに記述された第一のコマンド列により上記割込みの発生を指定する記述がある位置に対応づけられた上記割込み模擬ファイルに記述された割込み処理を実行し、上記実行スクリプトファイルに記述された第三のコマンド列に基づいて、上記プログラムを実行した実行結果を出力する実行部と
を備えることを特徴とする試験システムとして機能させるための試験プログラムを記録する計算機で読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、組込みソフトウェアのモジュールの試験装置及び試験方法に関し、試験パターンとして入力値と出力期待値を用意し、試験対象モジュールの実行前に試験パターンの入力値を自動的に設定し、モジュールを実行し、実際に得られた出力値と試験パターンとして用意した期待値を自動照合して試験結果を出力することを自動化するものである。
【０００２】
【従来の技術】
Ｃ言語やアセンブリ言語等の手続型言語で記述された組込みソフトウェアは、関数やサブルーチンといったモジュールを単位としてプログラムが構成されている。単体試験とは、上記モジュール毎にソフトウェアの機能を検証することである。上記検証はモジュールを実行する前に、入力となる変数（データメモリ）や汎用レジスタ等に値を設定してモジュールを実行させ、モジュールの実行終了時に出力変数（データメモリ）や汎用レジスタの値が期待した値になっているか照合判定を行うことで実施できる。
【０００３】
単体試験を実施するための技術として、代表的な方法を３つ挙げる。
命令セットシミュレータの利用。
インサーキットエミュレータ（Ｉｎ  Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ、以下、「ＩＣＥ」と称す）の利用。
組込み用自動単体試験ツールの利用。
【０００４】
命令セットシミュレータは、アセンブラ記述または、ターゲット・コンピュータの機械語で書かれたプログラムが正しいかどうかを調べるソフトウェアのデバッグにおいて、ターゲット・コンピュータとは異なるコンピュータで、上記各アセンブラ命令（機械語の１命令）を逐次解釈してシミュレーションするものが知られている。命令セットシミュレータの基本機能としては、（１）メモリや汎用レジスタへの値の読み出し／書き込み、（２）プログラムの実行、（３）指定条件での停止（ブレイクポイント・条件停止）、（４）プログラムカウンタ（以下、「ＰＣ」と記す）に対する実行アドレスの設定等がある。
Ｃ言語で書かれたソフトウェアは、クロスコンパイラを用いてアセンブラ記述を生成し、同様に命令セットシミュレータが利用できる。
【０００５】
第１の従来例として、命令セットシミュレータを利用する方法がある。以下に命令セットシミュレータの利用手順を示す。
（手順１）指定対象モジュールの開始アドレスをＰＣへ設定。
（手順２）指定対象モジュールの終了アドレスへブレイクポイントを設定。
（手順３）入力として変数（データメモリ）や汎用レジスタ等に値を設定し、モジュールを実行する。
（手順４）手順２による実行停止後、出力変数（データメモリ）や汎用レジスタの値を試験者が判定する。
上記１〜４の手順で実行することにより、人手にて単体試験を実施できる。
【０００６】
第２の従来例として、ＩＣＥを利用する方法がある。
ＩＣＥとは、従来例１であげた命令セットシミュレータの代わりに、ターゲットプロセッサにデバッグ機能を加えた装置である。デバッグ機能としては、命令セットシミュレータと等価な機能を有し、高速に実行できる点が異なる。よって、従来例１で示した方法と同じやり方で単体試験を実施できる。
【０００７】
第３の従来例として、命令セットシミュレータを利用した自動単体試験システム（以下、自動単体試験システムを「システム」と記すこともある）を利用する方法がある。
図３３は、市販システムＧＡＩＯ社製の命令セットシミュレータＸＡＳＳ−Ｖを利用して構成される自動単体試験システムＡＭＳ（Ａｄｖａｎｃｅｄ  Ｍｏｄｕｌｅ  Ｓｉｍｕｌａｔｏｒ）の構成図である。
システム全体の構成図１０、試験対象プログラムのプログラムメモリ１１、試験対象プログラムの開始アドレス１２、試験対象プログラムの終了アドレス１３、試験対象プログラムのデータメモリ１４、汎用レジスタ１５、プログラムカウンタ１６、試験パターンファイル１７、Ｃ言語またはアセンブリ言語で書かれたプログラムソースファイル１８、命令セットシミュレータを使った連続テストパターン実行システム１９、出力ファイル１ａである。試験パターンファイル１７は、試験対象関数の試験パターン（入力値と期待値が書かれた１つの試験項目）が複数個記述されているファイルである。第１の従来例で示した（手順１）〜（手順４）を各試験パターン毎に自動実行し、単体試験を実施している。
【０００８】
第４の従来例として、特開平１１−３０６０４２「ソフトウェア開発支援装置及びデバッグ方法」がある。これは、従来例１で挙げた命令セットシミュレータの実現方法として、試験者が指定する条件（イベント）が成立した場合に試験者が指定する動作を行える方法に関するものである。
【０００９】
第５の従来例として、特開平０５−３１３９４１「コンピュータプログラムのデバッグ方法」がある。
これは、従来例１で挙げた命令セットシミュレータの実現方法として、試験者が指定する割込み（ブレークポイント）により実行制御をデバッグサポート部に移し、デバッグを行う方法に関するものである。
【００１０】
【発明が解決しようとする課題】
第１、第２の従来例では、単体試験を自動化する方法に関して一切述べられていない。また、第４、第５の従来例では、第１の従来例の実現技術となる命令セットシミュレータに対する実行制御コマンドの実現方法を述べたに過ぎず、自動単体試験システムとしてなんら実現方法を述べたものではない。
この発明が対象とする組込みソフトウェア用自動単体試験システムの課題として、第３の従来例で述べた自動単体試験システムを基に、以下へ課題を挙げる。
【００１１】
第３の従来例では、タイマや外部割込みを利用していないモジュールの単体試験は可能である。しかしながら、タイマや外部割込みで変数値が書き換えられて初めてループから抜けるようなモジュールは、無限ループとなり実行完了できず、試験できないという課題があった。
【００１２】
また、第３の従来例では、１ビットの変数を利用していないモジュールの単体試験を行うことは可能である。しかし、１ビットの変数が、ｃｈａｒ型やｉｎｔ型の変数の指定するビット位置に対してビット変数の形で割付けられて直接プログラム中で利用されている場合、ＡＮＳＩ規格のＣ言語では、ｂｉｔ型がサポートされておらず、これを直接読み書きできないといった課題があった。
【００１３】
第３の従来例では、出力変数に必ず値が設定されるモジュールの単体試験は可能であるが、分岐などにより、値が設定されたり／値が設定されなかったりするグローバル変数があるプログラムでは、期待値照合時に不定値となるケースが生じ、一致確認ができないといった課題があった。
【００１４】
第３の従来例では、ターゲットプロセッサのビット幅（例：１６ビットＣＰＵや３２ビットＣＰＵ）が同じ場合、プロセッサを変更してもモジュールの単体試験が可能であるが、プログラム中にｉｎｔ型で宣言された変数に対し、ターゲットプロセッサを１６ビットＣＰＵから３２ビットＣＰＵに変更した場合、メモリ領域自体が変わってしまい、基のプログラムの機能が異なってしまうため、試験データファイルを再作成しなければならないという課題があった。
【００１５】
第３の従来例では、関数内にＣ言語の＃ｄｅｆｉｎｅで書いた変数等で別名付けされた変数が無い場合の単体試験は可能であるが、別名付けされた変数を含む関数に対しては、別名変数の値の読み出し／書き込みができないといった課題があった。
【００１６】
更に、従来のシステムでは単体試験だけが機能として提供されていたが、自動実行時に何命令実行したかという情報によって性能情報を得ることができないという課題があった。
【００１７】
この発明は、上記の問題点を解決し、手続型言語で記述されたプログラムの試験を自動化することを目的とする。
【００１８】
【課題を解決するための手段】
この発明に係る試験システムは、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、割込みの発生を指定する記述を含み、
上記割込みを擬似発生させる命令を実行する割込み処理を記憶した割込み模擬ファイルと、
上記割込み模擬ファイルに記憶された割込み処理を実行する指示を記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルを読み込み、上記プログラムに含まれる割込みの発生を指定する記述に対応して上記割込み処理を実行させることを設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルと、上記外部割込み模擬ファイルとを読み込み、上記外部割込み模擬ファイルに記憶された割込み処理を用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００１９】
この発明に係る試験システムは、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、１ビットのデータをアクセスする命令を含み、
上記１ビットのデータのデータ型を定義するビット型と、上記ビット型のデータを含む試験用データとを記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記ビット型のデータをアクセスするビットアクセスコマンドを記憶するコマンド定義記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルと、上記コマンド定義記憶部に記憶したビットアクセスコマンドとを読み込み、上記試験パターンファイルに記述された試験用データを上記ビットアクセスコマンドを用いて設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド定義記憶部に記憶したビットアクセスコマンドと、上記コマンド列生成部が生成した実行スクリプトファイルとを入力し、上記ビットアクセスコマンドを用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００２０】
この発明に係る試験システムは、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、グローバル変数を含み、
上記プログラムに記述されたグローバル変数へ設定する初期値を定義する変数初期値を記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルを読み込み、上記試験パターンファイルに記述された変数初期値を上記グローバル変数へ設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルを入力し、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００２１】
この発明に係る試験システムは、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、命令を実行するプロセッサに依存するデータ型を含み、
上記プログラムを実行する場合に使用する試験用データと、上記プログラムに記述されたプロセッサに依存するデータ型を定義するデータ型定義とを記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルを読み込み、上記プログラムで使用する試験用データを上記試験パターンファイルに記述されたデータ型定義を用いて設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルを入力し、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００２２】
この発明に係る試験システムは、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記手続型言語は、一の変数の名称を別名で定義する別名定義が可能であり、
上記プログラムは、上記別名定義された別名定義変数を含み、
上記別名定義変数へ設定する変数値を記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記別名定義された別名定義変数を上記一の変数の名称とを対応付けて記憶する別名定義ファイルと、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶する試験パターンファイルと、上記別名定義ファイルとを読み込み、上記プログラムソースファイルに記述された別名定義変数を上記一の変数の名称へ書き換え、上記試験パターンファイルに記述された変数値を上記書き換えた一の変数へ設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルを入力し、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００２３】
上記試験パターンファイル記憶部は、更に、上記実行結果を予測する期待値を含み、
上記コマンド列生成部は、上記実行スクリプトファイルへ、更に、上記実行結果と上記期待値とを比較して比較結果を出力するコマンド列と、プログラムの性能を測定する性能測定コマンドを実行するコマンド列と、上記性能測定コマンドが測定した性能情報を出力する性能情報出力コマンドを実行するコマンド列とを記述し、
上記実行部は、上記性能測定コマンドと上記性能情報出力コマンドとを実行して、上記実行結果に加え、上記比較結果と性能情報とを出力し、
上記試験システムは、更に、
上記実行部が出力する実行結果と比較結果と性能情報とを入力し、入力した実行結果と比較結果と性能情報とを併せて出力する出力整形部を備えることを特徴とする。
【００２４】
上記プログラムは、１ビットのデータをアクセスする命令を含み、
上記試験システムは、更に、上記ビット型のデータをアクセスするビットアクセスコマンドを記憶するコマンド定義記憶部を備え、
上記試験パターン記憶部は、更に、上記１ビットのデータのデータ型を定義するビット型と、上記ビット型のデータとを含む試験用データとを含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記コマンド定義記憶部に記憶したビットアクセスコマンドを読み込み、上記試験パターンファイルに記述された試験用データを上記ビットアクセスコマンドを用いて設定するコマンド列を上記実行スクリプトファイルへ記述し、
上記実行部は、上記コマンド定義記憶部に記憶したビットアクセスコマンドを入力し、上記ビットアクセスコマンドを用いて、入力した実行スクリプトファイルを実行することを特徴とする。
【００２５】
上記プログラムは、グローバル変数を含み、
上記試験パターンファイルは、上記プログラムに記述されたグローバル変数へ設定する初期値を定義する変数初期値を含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記試験パターンファイルに記述された変数初期値を上記グローバル変数へ設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする。
【００２６】
上記プログラムは、命令を実行するプロセッサに依存するデータ型を含み、
上記試験パターンファイル記憶部は、上記プログラムを実行する場合に使用する試験用データと、上記プログラムに記述されたプロセッサに依存するデータ型を定義するデータ型定義とを含む試験パターンファイルを記憶し、
上記コマンド列生成部は、上記試験パターンファイルに記述されたデータ型定義を用いて、上記プログラムで使用する試験用データを設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする。
【００２７】
上記手続型言語は、一の変数の名称を別名で定義する別名定義が可能であり、
上記プログラムは、別名定義された別名定義変数を含み、
上記試験パターンファイル記憶部は、上記別名定義変数へ設定する変数値を含む試験パターンファイルを記憶し、
上記試験システムは、更に、上記別名定義された別名定義変数を上記一の変数の名称とを対応付ける別名変数ファイルを備え、
上記コマンド列生成部は、上記別名定義ファイルとを入力し、上記プログラムソースファイルに記述された別名定義変数を上記一の変数の名称へ書き換え、上記試験パターンファイルに記述された変数値を上記書き換えた一の変数へ設定するコマンド列を上記実行スクリプトファイルへ記述することを特徴とする。
【００２８】
この発明に係る試験システムは、割込み処理を実施する割込みハンドラ関数を備え、手続型言語で記述されたプログラムを試験する試験システムにおいて、
上記プログラムは、割込みの発生を指定する記述を含み、
上記割込みハンドラ関数を実行する指示を記述した試験パターンファイルを記憶する試験パターンファイル記憶部と、
上記プログラムを入力し、上記試験パターンファイル記憶部に記憶した試験パターンファイルとを読み込み、上記プログラムに含まれる割込みの発生を指定する記述に対応して上記割込みハンドラ関数を実行するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを生成し、生成したコマンド列を記述した実行スクリプトファイルを生成するコマンド列生成部と、
上記コマンド列生成部が生成した実行スクリプトファイルを入力し、上記割込みハンドラ関数を用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行部と
を備えることを特徴とする。
【００２９】
上記実行部は、命令セットシュミレータとインサーキットシュミレータとのいずれか一方であることを特徴とする。
【００３０】
上記手続型言語は、Ｃ言語とアセンブリ言語とのいずれか一方を含むことを特徴とする。
【００３１】
この発明に係る試験方法は、手続型言語で記述されたプログラムを試験する試験方法において、
割込みの発生を指定する記述を上記プログラムへ書き込み、
上記割込みを擬似発生させる命令を実行する割込み処理を生成し、生成した割込み処理を記憶し、
上記割込み処理を実行する指示を記述した試験パターンファイルを生成し、
上記プログラムと、上記試験パターンファイルとを入力し、上記プログラムに書き込まれた割込みの発生を指定する記述に対応して上記割込み処理を実行させることを設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成し、
上記実行スクリプトファイルを入力し、上記割込み処理を読み込み、読みこんだ割込み処理を用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力することを特徴とする。
【００３２】
この発明に係る試験プログラムは、手続型言語で記述されたプログラムの試験を計算機で実現する試験プログラムにおいて、
割込みの発生を指定する記述を上記プログラムに書き込み、
上記割込みを擬似発生させる命令を実行する割込み処理を生成し、生成した割込み処理を記憶する割込み処理生成処理と、
上記割込み処理生成処理で生成された割込み処理を実行する指示を記述した試験パターンファイルを生成し、生成した試験パターンファイルを記憶する試験パターンファイル記憶処理と、
上記プログラムを入力し、上記試験パターンファイル記憶処理で記憶した試験パターンファイルを読み込み、上記プログラムに書き込まれた割込みの発生を指定する記述に対応して上記割込み処理を実行させることを設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成するコマンド列生成処理と、
上記コマンド列生成処理が生成した実行スクリプトファイルを入力し、上記割込み処理を用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行処理と
を備えることを特徴とする。
【００３３】
この発明に係る手続型言語で記述されたプログラムの試験を計算機で実現する試験プログラムを記録する計算機で読み取り可能な記録媒体は、
割込みの発生を指定する記述を上記プログラムに書き込み、
上記割込みを擬似発生させる命令を実行する割込み処理を生成し、生成した割込み処理を記憶する割込み処理生成処理と、
上記割込み処理生成処理で生成された割込み処理を実行する指示を記述した試験パターンファイルを記憶する試験パターンファイル記憶処理と、
上記プログラムを入力し、上記試験パターンファイル記憶処理で記憶した試験パターンファイルを読み込み、上記プログラムに書き込まれた割込みの発生を指定する記述に対応して上記割込み処理を実行させることを設定するコマンド列と、上記プログラムを実行するコマンド列と、実行した実行結果を出力するコマンド列とを記述した実行スクリプトファイルを生成し、生成した実行スクリプトファイルを記憶するコマンド列生成処理と、
上記コマンド列生成処理が生成した実行スクリプトファイルを入力し、上記割込み処理を用いて、入力した実行スクリプトファイルを実行し、実行した実行結果を出力する実行処理と
を備える試験プログラムを記録する計算機で読み取り可能な記録媒体であることを特徴とする。
【００３４】
【発明の実施の形態】
実施の形態１．
図１に、この実施の形態の自動単体試験システム（以下、自動単体試験システムを「システム」、又は、「試験システム」と記すこともある）構成図の一例を示す。
図３３に示された従来例に付加して、下記の機能を有している。
拡張試験パターンファイル（試験パターンファイル）２１は、従来の試験パタンファイルに比べ、機能拡張された試験パターンファイルである。具体的には、ビット対応記述２５、初期値設定記述２７、プロセッサ非依存の型定義２８が含まれる。
ビット対応記述（１ビットのデータの読み出し／書き込み設定記述）２５は、１ビットのデータのアクセスを可能にする。自動単体試験システム内で、１ビットのデータをビット型として定義する。
初期値設定記述（変数初期値）２７は、グローバル変数へ設定する初期値を定義する。初期値設定記述２７は、予め、グローバル変数へ初期値を設定することによって、期待値と実行結果を照合するために用いられる。
プロセッサ非依存の型定義（データ型）２８は、プロセッサに依存するデータの型を定義する。定義したデータ型を用いてデータを設定することによって、プロセッサ依存のデータ型のデータをアクセスする際の不整合を防ぐ。
【００３５】
別名付け変数利用機能として、別名定義ファイル２９を備える。
別名定義ファイル２９は、別名定義された別名定義変数を変数の名称とを対応付けるファイルである。
性能情報出力機能として、下記の機能を備える。
性能情報２ａを出力ファイルへ出力する。
ビットデータ値の直接読み出し／書き込み機能は、上記ビットが他のデータをアクセスする拡張コマンドマクロ（図６等を用いて後述する）を備えることにより実現する。
命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂは、上記拡張試験パターンファイル２１を処理するコマンド列生成部２ｃを備え、命令セットシミュレータを使って試験を実施することによって、機能を拡張する。連続テストパターン実行システム２ｂは、図６等を用いて後述する。
【００３６】
図１には明記していないが、拡張試験パターンファイル（試験パターンファイル）は、記憶領域である試験パターンファイル記憶部に記憶されている。
同様に、別名定義ファイル２９は、別名定義ファイル記憶部に記憶され、プログラムソースファイルは、プログラムソースファイル記憶部に記憶されている。その他のファイルについても、特に明記していないが、それぞれ記憶領域に記憶されている。
【００３７】
この実施の形態では、手続型言語としてＣ言語を一例として説明する。しかしながら、この発明に係る試験装置は、その他の手続型言語にも適用することが可能である。また、この明細書では、手続型言語は、Ｃ言語、Ｃ＋＋言語、ＦＯＲＴＬＡＮ等の言語、及び、アセンブリ言語を含む。
また、この実施の形態では、ターゲットマシンのプロセッサが命令を実行する動作を模擬する実行部として、命令セットシュミレータを一例として説明する。しかしながら、上記実行部は、命令セットシュミレータに限られることなく、ＩＣＥ等、その他のものであっても構わない。
【００３８】
試験対象関数ｄｅｃｉｄｅを図２のプログラムソースを使って説明する。
変数“ＰＦＬＡＧ”は、１ビットの変数で、変数名“ｃｏｎｄｉｔｉｏｎ”という８ビットメモリ領域の下位３ビット目を指し示した変数であり、関数では入力グローバル変数として使用している。変数“ＳＭ”は、変数名“ｓｙｓｔｅｍ＿ｍｏｄｅ．ａｌｌ”を別名付けした変数であり、関数では出力グローバル変数として使用している。変数“ｒｅｓｕｌｔ”、変数“ｒ”も、この関数でセットされる出力グローバル変数である。変数“ｂａｓｅ”は、入力グローバル変数である。変数“ｒ”は、値を読み出し変更される入出力グローバル変数である。本関数は、戻り値として変数“ｒ”の値を返す。
【００３９】
ここで、第３の従来例の自動単体試験システムを用いて、図２に示すプログラムソースの試験を行った場合の問題点を説明する。
変数“ＰＦＬＡＧ”は、別名付けされた変数であるため、直接、図３３に示す試験パターンファイル１７で使用できないという問題がある。また、変数“ＰＦＬＡＧ”が指し示している変数“ｃｏｎｄｉｔｉｏｎ．ｂｉｔ．ｂ２”は、１ビットを示した変数であるため、第３の従来例の自動単体試験システムでは取り扱うことができないという問題がある。“ｃｏｎｄｉｔｉｏｎ．ｂｉｔ．ｂ２”を検証するには、変数“ｃｏｎｄｉｔｉｏｎ”の３ビット目を試験者により確認する方法しか提供していない。また、別名付け変数“ＳＭ”も試験対象として扱えないため、試験パターンファイル１７では、“ｓｙｓｔｅｍ＿ｍｏｄｅ．ａｌｌ”として置き換えて使用しなければならないという問題がある。また、変数“ｓ”は、関数中の分岐パスの中で、値がセットされないケースがあり、期待値を事前に設定することができない問題がある。本プログラムが、１６ビットＣＰＵをターゲットとしたプログラムの場合、ｉｎｔ型で宣言される変数“ｓ”や変数“ｒ”は、１６ビットとなるが、３２ビットＣＰＵに移した場合、３２ビットの変数として扱われ、試験時に同じ試験パターンファイルが使用できないという問題がある。
【００４０】
これらの問題を解決するため、拡張試験パターンファイル２１と別名定義ファイル２９と命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂによる実施の形態を説明する。
図３は、上記問題点を解決するために考案した拡張試験パターンファイル２１に格納される試験パターンの一例を示す図である。
“ｆｕｎｃｔｉｏｎ”は試験対象関数名、“ｐｒｏｊｅｃｔ”は本プログラムの対象となるプロジェクト名、“ｓｒｃ”は本関数が記述されているファイル名及び“ｃｌｏｃｋ”はターゲットＣＰＵのクロックサイクルを示す。試験対象変数は、引数、入力変数、戻り値及び出力変数に大別される。内部変数は、プログラム全体の機能に影響しないため、試験対象外となる。
【００４１】
試験対象変数は、各々、引数は＜ａｒｇ＞〜＜／ａｒｇ＞の間（引数部）、入力変数は＜ｉｎ＞〜＜／ｉｎ＞の間（入力変数部）、戻り値は＜ｒｅｔ＞〜＜／ｒｅｔ＞の間（戻り値部）、出力変数は＜ｏｕｔ＞〜＜／ｏｕｔ＞の間（出力変数部）に宣言される。引数部と入力変数部は、同じフォーマットで記述される。本例では引数が無いため、引数部の中身は記述されない。変数（入力変数、出力変数等）は、“変数名／型”のフォーマットで定義される。ここで使用される型は、プロセッサ非依存の型を用いており、図４に示す型を用いる。
図４は、拡張試験パターンファイル２１に格納されるプロセッサ非依存の型定義２８の一覧の一例を示した図である。
図４に示すプロセッサ非依存の型定義２８の一覧では、更に、組込みソフトウェアで多用される１ビット変数をｂｉｔ型として新たに追加している。図４に示すプロセッサ非依存の型定義に含まれるＢｉｔ型は、ビット対応記述２５で用いるデータ型である。
戻り値は、“型”のみを記述する。戻り値がない場合は、戻り値部へ何も書かない又は“ｖｏｉｄ”を記述する。本例では、１６ビットのｉｎｔ型を返す記述になる。
【００４２】
出力変数は、２種類に大別される。１つは読み出した後に書き込まれるもので、もう１つは、書き込みのみのものがある。読み出して書き込む変数は、入力変数部と出力変数部の両方に定義すれば試験可能である。本例では、読み出して書き込む変数は、変数“ｒ”が該当する。また、書き込みのみの変数は、分岐パスにより書き込まれない場合がある。その場合の自動期待値照合を実現するため、初期値設定機能を持たせた。フォーマットは、“変数／型／初期値”で指定する。本例では、書き込みのみの変数は、変数“ｒｅｓｕｌｔ”、変数“ｓ”、別名変数“ＳＭ”が該当する。
【００４３】
＜Ｖｅｃｔｏｒ＞〜＜Ｖｅｃｔｏｒ＞の間に宣言するパターン記述部は、“引数部，入力変数部｜戻り値部，出力変数部”の順に値を記述していく。図３に示すテストベクタ記述部は８行の記述があり、１行の記述が１つの試験パターンを示す。図３の例では、８つの試験パターンを記述している。“｜”以降は、出力期待値を記述しており、自動単体試験システム２０において、実際の実行結果と自動照合される。引数部は行頭から“，”まで宣言部分であり、本例では引数がないため、省略される。入力変数部は、“，”から“｜”までが宣言部分であり、本例では、“ＰＦＬＡＧ，ｒ，ｂａｓｅ”の順で記述される。戻り値は、“｜”から“，”までが宣言部分であり、本例では、１６ビットのｉｎｔ型の期待値が記述される。出力変数部は、“，”から行末までが宣言部分であり、本例では、“ＳＭ”，“ｒｅｓｕｌｔ”，“ｒ”，“ｓ”の順で期待値が記述される。
【００４４】
本例の１行目の試験パターンでは、“ＰＦＬＡＧ＝０，ｒ＝０，ｂａｓｅ＝０”を入力セットし、出力期待値として、“戻り値→０”，“ＳＭ→０”，“ｒｅｓｕｌｔ→０”，“ｒ→０”，“ｓ→０”を確認するパターンが記述されている。
【００４５】
図５は、別名定義ファイル２９の内容の一例を示した図である。
先に述べたように、別名変数“ＳＭ”の実体は、“ｓｙｓｔｅｍ＿ｍｏｄｅ．ａｌｌ”となり、関数内では直接使用されていないため、試験データ作成時に変数“ＳＭ”を、“ｓｙｓｔｅｍ＿ｍｏｄｅ．ａｌｌ”に全て置き換えて作成するという負担が生じる。本例で示したように“別名  型  実際のプログラム変数”のフォーマットで対応づけ、システムで自動的に名前を置換して実現している。本例では、変数“ＰＦＬＡＧ”が別名付けされたビット変数であり、命令セットシミュレータは直接実体である“ｃｏｎｄｉｔｉｏｎ．ｂｉｔ．ｂ２”がｂｉｔ型であるため、扱うことができない。そのためのフォーマットとして、“別名  型  ビット変数の存在する基の変数  ビット位置”を導入することで解決しており、図５のような定義となる。
【００４６】
以下に、拡張試験パターンファイル２１、別名定義ファイル２９、プログラムソースファイル１８を入力とし、命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂを説明する。
図６は、命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂの処理構成である。
命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂは、コマンド列生成部２ｃ、命令セットシミュレータ２ｄ、出力整形部２ｅにより構成される。
図７は、コマンド列生成部２ｃが図３に示した拡張試験パターンファイル２１及び、図５に示した別名定義ファイル２９を用いて命令セットシミュレータ２ｄが自動実行できる実行コマンドスクリプトを自動生成する処理のフローチャート図の一例である。
図７を用いて、コマンド列生成部２ｃが実行コマンドスクリプトを生成する動作を説明する。
【００４７】
コマンド列生成部２ｃは、試験実行前の初期値設定コマンド列と、試験前の出力用コマンド列を生成する（Ｓ７１）。初期値設定コマンド列は、試験実行前に予め変数に設定される初期値を設定するコマンド列である。出力用コマンド列は、試験結果を出力するコマンド列である。
また、このとき、コマンド列生成部２ｃは、その他の初期処理（例えば、実行コマンドスクリプトファイルのヘッダの生成、等）を実施する。
【００４８】
次に、コマンド列生成部２ｃは、入力変数へ値を設定するコマンド列を生成する（Ｓ７２）。対象変数が別名定義変数の場合、コマンド列生成部２ｃは、別名定義ファイルを用いて、別名定義変数を実際の変数名へ置換する。
コマンド列生成部２ｃは、初期値付き出力変数へ値を設定するコマンド列を生成する（Ｓ７３）。Ｓ７２と同様に、対象変数が別名定義変数の場合、コマンド列生成部２ｃは、別名定義ファイル２９を用いて、別名定義変数を実際の変数名へ置換する。
【００４９】
コマンド列生成部２ｃは、対象関数実行用のＣＡＬＬコマンドを生成する（Ｓ７４）。対象関数実行用のＣＡＬＬコマンドは、試験対象となる関数を起動させるコマンドである。
コマンド列生成部２ｃは、実行停止後、出力変数値と期待値の比較結果出力コマンドを生成する（Ｓ７５）。比較結果出力コマンド列は、上記試験対象となる関数の実行結果である出力変数値と予め試験結果を予想した期待値との比較結果を実行結果ファイル３２へ出力するコマンド列である。
次に、コマンド列生成部２ｃは、拡張試験パターンファイル２１に記載された試験パターン総てについて、Ｓ７２〜Ｓ７６の処理を実施したかを判定する。総ての試験パターンについて、上記処理を実施した場合（最終試験パターンである場合）は、Ｓ７７を実行する。まだ、上記処理を実施していない試験パターンが残っている場合は、Ｓ７２〜Ｓ７６の処理を繰り返す。
【００５０】
全ての試験パターンについて、上記処理を実施した場合（最終試験パターンである場合）は、試験終了後の出力用コマンド列を生成する。上記出力用コマンド列は、試験終了時の情報を実行結果ファイル３２へ出力するコマンド列である。上記の手順によって、コマンド列生成部２ｃは、試験パターンファイル２１及び別名定義ファイル２９とプログラムソースファイル１８とを用いて、別名で定義された変数を実際の変数へ置換した実行コマンドスクリプトファイル３１を自動生成する。
【００５１】
実際に、図２のプログラムファイル１８、図３の拡張試験パターンファイル２１、図５の別名定義ファイル２９を基に生成された実行コマンドスクリプトファイル３１の内容を図８〜図１２に示す。
図８に示す実行コマンドスクリプトファイル３１は、別名（＃ｄｅｆｉｎｅ）変数の使用や出力データの初期値設定機能を実現する。１ビットデータの読み出し／書き込み／比較に関しては、図１３〜図１７に示す“ｓｔｏｒｅ＿ｆｌａｇ”（読み出し），“ｐｒｉｎｔ＿ｆｌａｇ”（書き込み），“ｃｍｐ＿ｆｌａｇ”（比較）の拡張コマンドマクロ３３により実現している。
図１３〜図１７は、拡張コマンドマクロ３３の一例を示す図である。
生成された実行コマンドスクリプトファイル３１を入力として、命令セットシミュレータ２ｄを実行する。実行終了後、実行結果ファイル３２が出力される。
図１８、図１９は、出力された実行結果ファイル３２の一例を示す。
【００５２】
試験者に結果を理解しやすくするため、出力整形部２ｅは、実行結果ファイル３２を整形する。
整形された出力ファイル１ａの一例を図２０に示す。
整形された出力ファイルには、各テストパターン毎の性能情報２ｂが含まれている。各テストパターン毎の性能情報は、命令セットシミュレータ２ｄのサイクルカウント機能（“ｒｅｓｅｔ  ｃｙｃｌｅ（ｓｅｔ  ｃｙｃｌｅ／ｒｅｓｅｔ）”でｃｙｃｌｅを０クリアし、実行後に“ｓｈｏｗ  ｃｙｃｌｅ”で表示）を使って実現している。
図８〜図１２の実行コマンドスクリプト内で“ｒｅｓｅｔ  ｃｙｃｌｅ（ｓｅｔ  ｃｙｃｌｅ／ｒｅｓｅｔ）”及び“ｓｈｏｗ  ｃｙｃｌｅ”のコマンド列を生成することによって実現できる。“ｒｅｓｅｔ  ｃｙｃｌｅ（ｓｅｔ  ｃｙｃｌｅ／ｒｅｓｅｔ）”は性能を測定する性能測定コマンドであり、“ｓｈｏｗ  ｃｙｃｌｅ”は測定した性能情報を出力する性能情報出力コマンドである。
図２０に試験の「実行結果」と及び「性能情報」と記載した部分が、それぞれ実行結果、性能情報とを示す部分である。
【００５３】
また、別の試験パターンファイルで試験した結果を図２１、図２２を用いて説明する。この場合、実行結果がＮＧの場合の一例を示す。図２１に試験パターンファイルのデータを示し、図２２に実行結果と性能情報を含む試験結果の一例を示す。図２１に示す例では、試験パターンは、４つである。図２２は、期待値がＮＧである場合を、実行結果及び性能情報の１行目、すなわち、１番目の試験パターンに示している。
また、この例では、試験パターンを減らしたことにより、充分な試験が実施されてない結果、カバレッジが１００％にならない場合を示している。
【００５４】
本実施の形態は、Ｃ言語で書かれたプログラムを対象としたが、コンパイル／リンク後、機械語（アセンブリ言語）にし、プログラムコードと機械語の対応付けが命令セットシミュレータで実現されており、本システムでは、この機能を利用している。対象言語がアセンブリ言語になっても、この命令セットシミュレータの機能を使用することにより容易に実現できる。
【００５５】
以上のように、手続型言語の一例として、組込み用にＣ言語で書かれたプログラムと、その中で試験対象とする関数の試験用データ（入力値と期待値のパターン）を入力し、パターン毎に試験対象関数を自動実行し、実行された変数値とあらかじめ定めた期待値とを自動照合する機能を有した組込みソフトウェア用自動単体試験システムにおいて、以下のような特徴を備える自動単体試験システムを説明した。
対象関数内で１ビットのデータが使われている場合、本システム内でｂｉｔ型を新たに設け、直接ビットデータに対する値の読み出し／書き込み設定が試験用データに記述できることを特徴とする。
また、対象関数内でグローバル変数に対し書き込みのみ行う場合、その変数に対して初期値を試験用データに記述して設定することを特徴とする。
試験対象プログラムが別のプロセッサ（例えば、１６ビットＣＰＵから３２ビットＣＰＵへ変更）に移植して単体試験を行う場合、プロセッサ非依存の型定義を用いて試験用データを記述することで、試験データファイルを共有できることを特徴とする。
対象関数内で使用される変数が別名付けされている（例えば、＃ｄｅｆｉｎｅＳＭ  ｓｙｓｔｅｍ＿ｍｏｄｅ．ａｌｌ）場合、別名変数を試験データファイル内で使用しても、変数に対して値の読み出し／書き込みが可能となることを特徴とする。
更に、自動実行時に実行されたアセンブラ命令をカウントすることで、性能見積り情報も出力できることを特徴とする。
【００５６】
実施の形態２．
実施の形態１で示した組込みソフトウェア用自動単体試験システムへ下記に示す機能の追加を行い、タイマや外部割込みによって外部変数が書き換えられる試験対象モジュールを試験可能とする実施の形態を示す。
図２３は、この実施の形態の自動単体試験システム（単体試験システム）の構成の一例を示す。
図１の構成に加え、割込み対応記述２２と、タイマ／外部割込み模擬２３と、割込み発生用プラグマ２４とを追加したものになっている。
【００５７】
割込み対応記述２２は、割込みを発生させる処理を実施することを指示する記述であり、この実施の形態では、拡張試験パターンファイル２１へ記述される。タイマ／外部割込み模擬２３は、割込みを擬似発生させる命令を実行する命令であり、この実施の形態では、コマンドマクロとして記述する。
タイマ／外部割込み模擬２３は、図２３に示すように、独立したファイル（割込み模擬ファイル）として作成してもよいし、拡張試験パターンファイル２１内に記述することも可能である。以下の説明では、割込み定義部として、拡張試験パターンファイル２１内に記述する場合を説明する。
割込み発生プラグマ２４は、上記タイマ／外部割込み模擬２３の実行をプログラム内へ指定する。割込み発生用プラグマ２４によって、割込みを発生させる場所を指定する。割込み発生用プラグマ２４は、プログラム内では、コメントとして取り扱われるため、プログラムのコンパイル・リンクに影響を与えることはない。
【００５８】
試験対象関数“ｓｃａｎ”を図２４のプログラムソースファイル１８を使って説明する。
本関数で使用される変数“ｔｉｍｅ”は、予め所定時間を示す値が設定されている。
“ｔｉｍｅｒ＿ｃｏｕｎｔｅｒ”関数は、タイマ割込み処理関数（ハンドラ）の一例である。“ｔｉｍｅｒ＿ｃｏｕｎｔｅｒ”関数は、１ｍｓ毎のタイマ割込みで起動される。“ｔｉｍｅｒ＿ｃｏｕｎｔｅｒ”関数が１ｍｓ毎に起動されると、変数“ｔｉｍｅ”は設定された値から１ｍｓ毎に１ずつ減じられ、値が“０”になった時に所定時間が経過したことを知らせる。
また、変数“ＳＣＡＮ＿Ｂ”は、割込み処理関数の起動状態を示す。割込み処理関数は、“ｓｃａｎ＿ｂｔｍ＿ｏｎ”，“ｓｃａｎ＿ｂｔｍ＿ｏｆｆ”とを備える。外部割込みポートへ外部信号が入力され、外部信号のＯＮ／ＯＦＦによって、“ｓｃａｎ＿ｂｔｍ＿ｏｎ”，“ｓｃａｎ＿ｂｔｍ＿ｏｆｆ”の割込み処理関数が起動されて変数“ＳＣＡＮ＿Ｂ”に各々１，０の値が設定される。
【００５９】
従来のシステムでは、変数“ｔｉｍｅ”を固定値にセットして試験を実施することは可能であった。しかしながら、“ｔｉｍｅ＝０”の設定では、ｗｈｉｌｅループを処理できなかった。一方、“ｔｉｍｅ≠０”の設定では、ｗｈｉｌｅループが無限にまわり、本モジュールを試験することができなかった。また、変数“ＳＣＡＮ＿Ｂ”に関しても、関数実行中にその値が変化した時を想定してのモジュール単体試験を同様の理由で実施することができなかった。
【００６０】
これらの問題を解決するため、拡張試験パターンファイル２１へ割込み対応記述２２を追加し、プログラムソースファイル１８へ割込み発生用プラグマ２４を追加した拡張組込みソフトウェア用自動単体試験システム２０の実施例を説明する。
図２５は、割込み発生用プラグマ２４を用いて割込み発生箇所を記述した関数“ｓｃａｎ”のプログラムソースファイル１８である。プログラム中のコメント文としてプラグマ（ｐｒａｇｍａ）文（“／／＃ｐｒａｇｍａ  ｓｅｔ＿ｄｏ  ＜タグ名＞”）を挿入することにより、試験者は任意の場所で割込みを発生させることができる。
【００６１】
図２５のプラグマ文“／／＃ｐｒａｇｍａ  ｓｅｔ＿ｄｏ  ｐｓｃａｎ１”は“ｐｓｃａｎ１”というタグ名で、実行行“ｔｉｍｅ＝０；”が実行される直前に割込みを発生させることを示した記述である。同様にして、プログラマ文“／／＃ｐｒａｇｍａ  ｓｅｔ＿ｄｏ  ｐｓｃａｎ２”は、実行行“ｗｈｉｌｅ（ｔｉｍｅ）｛”（ｔｉｍｅが０でないかをチェック）が実行される前に、“ｐｓｃａｎ２”というタグ名で割込みを発生させることを示したものである。タグ名は、後述する拡張試験パターンファイル２１で実際に起動する割込み処理の関数やタイマ／外部割込み模擬２３を割付け、任意の割込み処理を生じさせることに使用される。
【００６２】
図２６は、試験対象関数“ｓｃａｎ”の拡張試験パターンファイル２１である。
実施の形態１で示したフォーマットに加え、パターン記述部“＜ｖｅｃｔｏｒ＞〜＜／ｖｅｃｔｏｒ＞”を拡張し、かつ、割込み模擬定義部“＜ｍａｃｒｏ＞〜＜／ｍａｃｒｏ＞”を追加したものである。割込み模擬定義部は、図２３のタイマ／外部割込み模擬２３の機能を実現するものである。パターン記述部で“ｓｅｔ＿ｄｏ：〜ｅｎｄ＿ｓｅｔ＿ｄｏ：”で示されるパラグラフが、割込み対応記述２２である。“ｓｅｔ＿ｄｏ：”は、以下に割込みを起こすことを示す開始行であり、実際に発生させたい割込みは、図２５の対象関数ソース内に示した割込み発生用プラグマ２４に使ったタグ名（“ｐｓｃａｎ１”又は“ｐｓｃａｎ２”）を用い、“＜タグ名＞／（割込み処理関数名または割込み模擬スクリプト名）”で指定できる。
本例では、“ｐｓｃａｎ１”の場所で割込み模擬スクリプト“ｓｃａｎ＿ｂｔｍ＿ｏｎ”を発生し、“ｐｓｃａｎ２”では、割込み模擬スクリプト“ｃｏｕｎｔ＿ｄｏｗｎ”を発生させる記述である。以下、割込みを発生させて試験パターンを実行させ、“ｅｎｄ＿ｓｅｔ＿ｄｏ：”を見つけたところで割込み発生が中止される。また、“ｓｅｔ＿ｄｏ：〜ｅｎｄ＿ｓｅｔ＿ｄｏ：”の間に書かれていない試験パターンは、実施の形態１と同様の処理となる。
【００６３】
タイマ／外部割込み模擬２３は、“ｓｃａｎ＿ｂｔｍ＿ｏｎ”，“ｃｏｕｎｔ＿ｄｏｗｎ”を定義する。この実施の形態では、割込み模擬定義部に相当する。命令セットシミュレータ２ｄは、コマンド列生成部２ｃが生成する実行コマンドファイルに記述されたコマンドスクリプトに基づいて、上記タイマ／外部割込み模擬２３を実行する。
図２７は、割込みハンドラ関数を用いて、試験パターンを記述したものである。図２７は、図２６に示した拡張試験パターンファイル２１のパターン記述部に代わって、割込みハンドラ関数として実際のプログラムで記述されたＣ関数を使って記述したものである。図２７では、実際のタイマ割込みハンドラ関数が１００００回ループし、試験時間が大きくなる。一方、図２６のように割込み模擬定義部（あるいは、タイマ／外部割込み模擬２３）を使ったパターン記述部では、１０回ループに機能縮退して単体試験時間を短くなる。これは、割込み模擬定義部は、１００００回のループを１０回へ削減するようにコマンドを生成しているからである。
【００６４】
以下に、拡張試験パターンファイル２１、別名定義ファイル２９、プログラムソースファイル１８を入力とした命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂを説明する。
図６に、命令セットシミュレータを使った拡張された連続テストパターン実行システム２ｂの処理構成図を示している。本実施の形態は、実施の形態１で説明したコマンド列生成部２ｃへ、割込み対応機能コマンドを生成する機能を追加する拡張により容易に実現できる。
図２８は、この実施の形態のコマンド列を生成するコマンド列生成部２ｃの処理フローを示す。
コマンド列生成部２ｃは、割込み発生場所をプラグマ文として記述したプログラムソースファイル１８、割込み処理関数又はタイマ／外部割込み模擬２３と割込み発生指示を付加した拡張試験パターンファイル２１及び、別名定義ファイル２９とを用いて命令セットシミュレータ２ｄが自動実行できる実行スクリプトファイルを生成する。
【００６５】
図２８は、図７の手順にＳ２８２を追加したものである。従って、Ｓ２８２を除く処理は、図７で同じ符号をつけた動作と同様であるため、説明を省略する。
Ｓ２８２は、割込み対応機能コマンド列を生成する。
図２９は、割込み対応機能コマンド列を生成する（Ｓ２８２）の動作の一例を示した図である。
コマンド列生成部２ｃは、実際に、図２５、図２６又は図２７の入力ファイルを基に、図２８、図２９の処理フローに従い、生成された実行コマンドスクリプトファイル３１を図３０、図３１に示す。
尚、命令セットシミュレータ２ｄと出力整形部２ｅに関しては、実施の形態１に示した方法と何ら変わらない。これにより、割込みを要求する試験対象モジュールも本実施例により自動単体試験が可能となる。
【００６６】
以上のように、実施の形態１の自動単体試験システムに加え、以下の機構を備える自動単体試験システムを説明した。
対象関数がタイマ割込みや外部割込みによって変数値の書き換えがある場合、プログラム中の任意の場所で割込み発生を指定し、自動単体試験システムが有するコマンドスクリプトを用いてその割込みを模擬し変数値を書き換え、単体試験を可能であることを特徴とする。
また、コマンドスクリプトによる割込み模擬の代わりに、実際のプログラムで記述された割込みハンドラ関数やタイマ関数を使って変数値を書き換える単体試験を行うことを特徴とする。
【００６７】
実施の形態３．
上記実施の形態１及び実施の形態２では、手続型言語としてＣ言語を一例として説明したが、この実施の形態では、アセンブリ言語を用いて説明する。
図３２は、実施の形態１において、アセンブリ言語を用いた場合、コマンド列生成部２ｃが実行スクリプトファイルを生成する動作の一例を示している。図１９は、図７のＳ７４の処理が複数の処理に分割されたものである。
図３２に示すＳ１６４の動作も同様に分割すると、実施の形態２において、Ｃ言語に変わってアセンブリ言語を用いた場合の動作となる。
このように、この発明の自動単体試験システムは、手続型言語としてアセンブリ言語にも対応できる一例を示した。
【００６８】
実施の形態４．
上記実施の形態１では、拡張試験パターンファイル２１は、ビット対応記述２５と、初期値設定記述２７とプロセッサ非依存の型定義２８との３つを備える場合を説明した。しかしながら、上記３つの機能を別々に備える場合であっても構わない。また、上記３つの機能のうち、２つの機能を組み合わせた機能を備える場合であっても構わない。
【００６９】
更に、実施の形態２では、拡張試験パターンファイル２１は、ビット対応記述２５と、初期値設定記述２７とプロセッサ非依存の型定義２８と割込み対応記述２２とを備える場合を説明した。しかしながら、上記割込み対応記述２２のみを備える場合であってもよい。更に、上記４つの機能のうち、２つ、あるいは、３つの機能を組み合わせた機能を備える場合であっても構わない。
【００７０】
【発明の効果】
以上のようにこの発明によって、試験対象モジュールが割込み処理を期待して作成されている場合における自動単体試験が可能となった。
【００７１】
また、試験対象モジュールに１ビット変数が使用されている場合、自動単体試験が可能となった。
【００７２】
従来、モジュール内の分岐パスにより未設定変数となる出力グローバル変数は、自動的に期待値を照合する自動期待値照合ができなかったが、初期値設定機能により自動期待値照合が可能となった。
【００７３】
試験対象モジュールをビット幅の異なるプロセッサ（例：１６ビットＣＰＵから３２ビットＣＰＵ）に移植する場合、変数のビット幅が変わり同一の試験パターンファイルが使えない問題も、プロセッサ非依存型の導入により解決された。
【００７４】
Ｃ言語の“＃ｄｅｆｉｎｅ”文で定義された別名変数も、本発明では試験者が試験パターンファイル作成時に使用できるようになった。
【００７５】
自動単体試験の出力結果に性能情報データが出力できることで、試験対象モジュールの性能見積もりができるようになった。
【図面の簡単な説明】
【図１】  実施の形態１の組込みソフトウェア用自動単体試験システムの構成の一例を表す図である。
【図２】  実施の形態１において使用する試験対象となるソースプログラムファイルの一例である。
【図３】  実施の形態１において使用する試験パターンファイルに格納される試験パターンの一例を示す図である。
【図４】  本発明で使用するプロセッサ非依存の型定義一覧である。
【図５】  実施の形態１において使用する別名定義ファイルの一例である。
【図６】  本発明における命令セットシミュレータを使った連続テストパターン実行システムの処理構成図である。
【図７】  実施の形態１における試験パターンファイルのコマンド展開方式を示した動作フローチャート図である。
【図８】  実施の形態１において生成された実行コマンドスクリプトファイルの一例である。
【図９】  実施の形態１において生成された実行コマンドスクリプトファイルの一例である。
【図１０】  実施の形態１において生成された実行コマンドスクリプトファイルの一例である。
【図１１】  実施の形態１において生成された実行コマンドスクリプトファイルの一例である。
【図１２】  実施の形態１において生成された実行コマンドスクリプトファイルの一例である。
【図１３】  実施の形態１において１ビットデータの読み出し／書き込みに使用する拡張コマンドマクロファイルの例である。
【図１４】  実施の形態１において１ビットデータの読み出し／書き込みに使用する拡張コマンドマクロファイルの例である。
【図１５】  実施の形態１において１ビットデータの読み出し／書き込みに使用する拡張コマンドマクロファイルの例である。
【図１６】  実施の形態１において１ビットデータの読み出し／書き込みに使用する拡張コマンドマクロファイルの例である。
【図１７】  実施の形態１において１ビットデータの読み出し／書き込みに使用する拡張コマンドマクロファイルの例である。
【図１８】  実施の形態１において命令セットシミュレータより出力される実行結果ファイルの一例である。
【図１９】  実施の形態１において命令セットシミュレータより出力される実行結果ファイルの一例である。
【図２０】  実施の形態１における単体試験の出力ファイルの一例である。
【図２１】  実施の形態１において使用する試験パターンファイルに格納される試験パターンの一例を示す図である。
【図２２】  実施の形態１における単体試験の出力ファイルの一例である。
【図２３】  実施の形態２の組込みソフトウェア用自動単体試験システムの構成の一例を表す図である。
【図２４】  実施の形態２において使用する試験対象となるソースプログラムファイルの一例である。
【図２５】  実施の形態２において割込み発生用プラグマを挿入したプログラムソースファイルの一例である。
【図２６】  実施の形態２において使用する試験パターンファイルの一例である。
【図２７】  実施の形態２において割込み処理関数に既存関数を用いた場合の試験パターンファイルのパターン記述部の一例である。
【図２８】  実施の形態２における試験パターンファイルのコマンド展開方式を示した動作フローチャート図である。
【図２９】  実施の形態２において割込み対応機能の処理方式を示したフローチャート図である。
【図３０】  実施の形態２において生成された実行コマンドスクリプトファイルの一例である。
【図３１】  実施の形態２において生成された実行コマンドスクリプトファイルの一例である。
【図３２】  実施の形態３における試験パターンファイルのコマンド展開方式を示した動作フローチャート図である。
【図３３】  第３の従来例における組込みソフトウェア用自動単体試験システムの構成図である。
【符号の説明】
１ａ  出力ファイル、２ａ  性能情報、２ｂ  命令セットシミュレータを使った拡張された連続テストパターン実行システム、２ｃ  コマンド列生成部、２ｄ命令セットシミュレータ、２ｅ  出力整形部、１０  組込みソフトウェア用自動単体試験システム、１１  プログラムメモリ、１２  開始アドレス、１３  終了アドレス、１４  データメモリ、１５  汎用レジスタ、１６  プログラムカウンタ、１７  試験パターンファイル、１８  プログラムソースファイル、１９  命令セットシミュレータを使った連続テストパターン実行システム、２０  本発明の組込みソフトウェア用自動単体試験システム、２１  拡張試験パターンファイル、２２  割込み対応記述、２３  タイマ／外部割込み模擬、２４  割込み発生用プラグマ、２５  ビット対応記述、２６  ビット、２７  初期値設定記述、２８  プロセッサ非依存の型定義、２９  別名定義ファイル、３０  拡張連続テストパターン実行システム、３１  実行コマンドスクリプトファイル、３２  実行結果ファイル、９９  バス（システムバス）。
【図１】
0003745968.tif 000002
【図２】
0003745968.tif 000003
【図３】
0003745968.tif 000004
【図４】
0003745968.tif 000005
【図５】
0003745968.tif 000006
【図６】
0003745968.tif 000007
【図７】
0003745968.tif 000008
【図８】
0003745968.tif 000009
【図９】
0003745968.tif 000010
【図１０】
0003745968.tif 000011
【図１１】
0003745968.tif 000012
【図１２】
0003745968.tif 000013
【図１３】
0003745968.tif 000014
【図１４】
0003745968.tif 000015
【図１５】
0003745968.tif 000016
【図１６】
0003745968.tif 000017
【図１７】
0003745968.tif 000018
【図１８】
0003745968.tif 000019
【図１９】
0003745968.tif 000020
【図２０】
0003745968.tif 000021
【図２１】
0003745968.tif 000022
【図２２】
0003745968.tif 000023
【図２３】
0003745968.tif 000024
【図２４】
0003745968.tif 000025
【図２５】
0003745968.tif 000026
【図２６】
0003745968.tif 000027
【図２７】
0003745968.tif 000028
【図２８】
0003745968.tif 000029
【図２９】
0003745968.tif 000030
【図３０】
0003745968.tif 000031
【図３１】
0003745968.tif 000032
【図３２】
0003745968.tif 000033
【図３３】
0003745968.tif 000034