(57)【特許請求の範囲】
【請求項１】
プログラムで使用する各入力変数に割り当てられたビット数より、各入力変数の最小値、最大値及び中央値を求める手段と、
各入力変数の最小値、最大値及び中央値を各入力変数のテスト値として入力ファイルに格納する手段と、
前記プログラムで使用する各入力変数と比較される値を検出する検出手段と、
前記プログラムで使用する各入力変数と比較される値を各入力変数の追加のテスト値として前記入力ファイルに格納する手段と、
前記入力ファイルに格納された各入力変数の各テスト値を用いて前記プログラムを実行して、前記プログラムの実行時の出力を出力ファイルに格納する手段と、
を備えるプログラムシミュレータにおいて、
前記検出手段は、インサーキットエミュレータ上のＣＰＵと前記インサーキットエミュレータ上のエミュレーションメモリとの間のアドレスバス、データバス及び制御線に現れる信号を基に前記プログラムで使用する各入力変数と比較される値を検出することを特徴とするプログラムシミュレータ。
【請求項２】
請求項１に記載のプログラムシミュレータにおいて、
各入力変数の前記中央値と１異なった値及び−１異なった値を各入力変数の追加のテスト値として前記入力ファイルに格納する手段を更に備えることを特徴とするプログラムシミュレータ。
【請求項３】
プログラムで使用する各入力変数に割り当てられたビット数より、各入力変数の最小値、最大値及び中央値を求めるステップと、
各入力変数の最小値、最大値及び中央値を各入力変数のテスト値として入力ファイルに格納するステップと、
前記プログラムで使用する各入力変数と比較される値を検出する検出ステップと、
前記プログラムで使用する各入力変数と比較される値を各入力変数の追加のテスト値として前記入力ファイルに格納するステップと、
前記入力ファイルに格納された各入力変数の各テスト値を用いて前記プログラムを実行して、前記プログラムの実行時の出力を出力ファイルに格納するステップと、
を備えるプログラムシミュレーション方法において、
前記検出ステップでは、インサーキットエミュレータ上のＣＰＵと前記インサーキットエミュレータ上のエミュレーションメモリとの間のアドレスバス、データバス及び制御線に現れる信号を基に前記プログラムで使用する各入力変数と比較される値を検出することを特徴とするプログラムシミュレーション方法。
【請求項４】
請求項３に記載のプログラムシミュレーション方法において、
各入力変数の前記中央値と１異なった値及び−１異なった値を各入力変数の追加のテスト値として前記入力ファイルに格納するステップを更に備えることを特徴とするプログラムシミュレーション方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えば、携帯電話機等のＣＰＵが実行するプログラムをシミュレーションするプログラムシミュレータ及びプログラムシミュレーション方法に関する。
【０００２】
【従来の技術】
プログラム開発では、プログラマが設計内容から、プログラム内のＩＮＰＵＴ・ＯＵＴＰＵＴの組み合わせを考え、最小の試験時間でプログラム誤りを検出出来るよう組み合わせケースを絞って試験を実施していた。
【０００３】
【発明が解決しようとする課題】
このためプログラマが気付かなかった組み合わせや競合・複合条件が、運用場面で出てくると、プログラマが設計しなかったルートを通り、プログラム誤りになる場合があった。
【０００４】
このため、プログラム開発での試験の自動化では、特開平６−１３１２１５号公報のソフトウェア開発支援方法（プログラムとハードウェアの入出力を事前に登録し期待通りの値かを確認する。一度登録すれば何度も同一試験が出来る。）や、特開平９−２５９００６号公報のプログラム評価システム（プログラムとハードウェアの入出力を登録し期待通りの値かを確認するが、入手が容易なＩＣＥを使って自動試験系を実現する）などがある。
【０００５】
但し、これらの発明では、一番手間がかかるプログラム内のＩＮＰＵＴ・ＯＵＴＰＵＴの最小値、最大値、中央値とその組み合わせ、ＩＮＰＵＴ・ＯＵＴＰＵＴの競合・複合条件出しが自動化されていない。このため一度試験したことと同じ結果になるかを試験する程度のメリットしかなかった。
【０００６】
本発明は、プログラム内のＩＮＰＵＴ・ＯＵＴＰＵＴの最小値、最大値、中央値を、コンパイル・リンクした後に生成されるニーモニックレベルで自動的に作成し、メインルーチンから子関数、孫関数…のコールツリーの順番で、自動的にルートチェックを行い、結果として、組み合わせ・競合・複合条件の全パタンを自動的に試験することを可能とするプログラムシミュレータ及びプログラムシミュレーション方法を提供することを目的とする。
【０００７】
【課題を解決するための手段】
本発明の第１の観点によれば、プログラムで使用する各入力変数に割り当てられたビット数より、各入力変数の最小値、最大値及び中央値を求める手段と、各入力変数の最小値、最大値及び中央値を各入力変数のテスト値として入力ファイルに格納する手段と、前記プログラムで使用する各入力変数と比較される値を検出する検出手段と、前記プログラムで使用する各入力変数と比較される値を各入力変数の追加のテスト値として前記入力ファイルに格納する手段と、前記入力ファイルに格納された各入力変数の各テスト値を用いて前記プログラムを実行して、前記プログラムの実行時の出力を出力ファイルに格納する手段と、を備えるプログラムシミュレータにおいて、前記検出手段は、インサーキットエミュレータ上のＣＰＵと前記インサーキットエミュレータ上のエミュレーションメモリとの間のアドレスバス、データバス及び制御線に現れる信号を基に前記プログラムで使用する各入力変数と比較される値を検出することを特徴とするプログラムシミュレータが提供される。
【０００９】
上記のプログラムシミュレータは、各入力変数の前記中央値と１異なった値及び−１異なった値を各入力変数の追加のテスト値として前記入力ファイルに格納する手段を更に備えてもよい。
【００１０】
本発明の第２の観点によれば、プログラムで使用する各入力変数に割り当てられたビット数より、各入力変数の最小値、最大値及び中央値を求めるステップと、各入力変数の最小値、最大値及び中央値を各入力変数のテスト値として入力ファイルに格納するステップと、前記プログラムで使用する各入力変数と比較される値を検出する検出ステップと、前記プログラムで使用する各入力変数と比較される値を各入力変数の追加のテスト値として前記入力ファイルに格納するステップと、前記入力ファイルに格納された各入力変数の各テスト値を用いて前記プログラムを実行して、前記プログラムの実行時の出力を出力ファイルに格納するステップと、を備えるプログラムシミュレーション方法において、前記検出ステップでは、インサーキットエミュレータ上のＣＰＵと前記インサーキットエミュレータ上のエミュレーションメモリとの間のアドレスバス、データバス及び制御線に現れる信号を基に前記プログラムで使用する各入力変数と比較される値を検出することを特徴とするプログラムシミュレーション方法が提供される。
【００１２】
上記のプログラムシミュレーション方法は、各入力変数の前記中央値と１異なった値及び−１異なった値を各入力変数の追加のテスト値として前記入力ファイルに格納するステップを更に備えてもよい。
【００１３】
【発明の実施の形態】
本発明は、よく使われるプログラム構造である、多数の事象発生毎に優先順位毎に処理順番を決めて実行するリアルタイムモニタによって制御するプログラムの開発場面でプログラマが試験で使用する以下の特徴を持ったプログラムシミュレータである。
【００１４】
（シミュレータの特徴）
本実施形態によるプログラムシミュレータは、プログラムを作成する段階においてコンパイル・リンクした後に生成されるニーモニックと、コンパイル時に指定した変数の型宣言を基に、プログラム内の全ての入力変数の最小値、最大値、中央値を自動的に仮に求めて、求めたそれらの値を入力変数のテスト値とする。その後、メインルーチンから子関数、孫関数…の順番で自動的に全ルートを実行しながら各入力変数のテスト値を追加する。
【００１５】
本実施形態によるプログラムシミュレータは、各入力変数の試験すべきテスト値を求め、全入力変数にわたるテスト値の全ての組み合わせを実行し、組み合わせ・競合・複合条件の全パタンを試験する。これによりプログラマの負担は軽減される。
【００１６】
（テスト値を自動的に算出する方法）
コンパイラ・リンカがソースプログラムをコンパイル・リンクするときにオブジェクトプログラムと同時に生成するマップファイルに記述のある各入力変数のビット数又はバイト数を基に、個々の関数内で参照する発行パラメータの値と、その関数内で使用する入力変数の最小値、最大値、中央値の３つのテスト値を機械的に算出する。
【００１７】
例えば、ある関数で参照している沢山の入力変数のうちの、ある１つの入力変数が２バイトで宣言された変数である場合には、その入力変数の最大値は０ｘｆｆｆｆであり、最小値は０ｘ００００であり、中央値は０ｘ０７ｆｆであることが機械的に算出される。
【００１８】
さらに、この最小値、最大値、中央値の出し方を工夫する。
【００１９】
（最小値、最大値、中央値の出し方の工夫）
本実施形態では、試験対象のプログラムをリセットスタートし、プログラム中の全ての関数を実行する。なお、ここでいう関数とはＣ言語における関数であり、これにはメインプログラム及びサブルーチンも含まれる。
【００２０】
この実行中、入力変数に遭遇した場合、試験対象プログラム内で値を設定していないままこの入力変数が参照されているのであれば、その入力変数の取りうる値は、前述の最大値、最小値であると仮に決められる。
【００２１】
その後に入力変数を読んで、その変数の値をある値と比較している箇所があれば、その変数と比較される値は試験すべき値であるので、その比較される値をその入力変数のテスト値として追加していく。
【００２２】
同様に、入力変数がある範囲におさまっているか否かを判断している箇所があれば、その範囲の最大値と最小値を、その入力変数のテスト値として追加する。
【００２３】
同様に、入力変数をＣＡＳＥ文やＩＦ文で判断している箇所があれば、ＣＡＳＥ文やＩＦ文で判断している値もその入力変数のテスト値として追加する。
【００２４】
更に、入力変数の最小値、最大値、中央値だけでなく、設計者が意図しない値であった場合でも試験したい場合がある。この場合は最小値＋１、最小値−１、最大値＋１、最大値−１、中央値＋１、中央値−１を求め、これらをテスト値として追加する。
【００２５】
以上により、各入力変数の全てのテスト値を求める。
【００２６】
試験すべきＩＮＰＵＴの全パタンで試験対象プログラムを実行していくと各関数単位で、変数更新や外部ブロックへのタスク間通信、関数発行などのＯＵＴＰＵＴが発生する。
【００２７】
本実施形態では、試験時のＩＮＰＵＴをＩＮＰＵＴファイル３に格納し、実行した各関数名、各関数内の変数更新や外部ユニットへのタスク間通信、関数発行などのＯＵＴＰＵＴをＯＵＴＰＵＴファイル４に格納し、それらのファイルをシミュレーション結果として残す。
【００２８】
図１は、本実施形態によるプログラムシミュレータの全体の構成を示すブロック図であり、図２は、図１に示すＩＮＰＵＴアクセス監視部２の構成を示すブロック図である。
【００２９】
試験対象機器のプログラムは、ハードウェア制御プログラム、マンマシンインタフェースプログラム、シーケンスプログラム、全体監視プログラムなどの複数のブロックにより構成されるが、開発時においては、プログラムを小ブロックに分けて開発している。
【００３０】
試験対象のプログラムは、その中の一つの小ブロックである。その小ブロックは、他のブロックやハードウェアが無い状態でシミュレーションされる。その小ブロックをシミュレーションするために、擬似プログラムを作成し、小ブロックと擬似プログラムをリンクして、実行可能なロードモジュールを作成する。
【００３１】
このロードモジュールを、試験対象機器で使用しているＣＰＵのインサーキットエミュレータ（以下「ＩＣＥ」という。）１上で動作させる。
【００３２】
図１のＩＣＥ１は、試験対象機器のハードウェアとは切り離されており、ＣＰＵ１−１とプログラムやデータを格納するエミュレーションメモリ１−２を備えている。エミュレーションメモリ１−２には前述したロードモジュールを格納されている。ＩＣＥ１のＣＰＵをリセットスタートするとロードモジュールは実行される。
【００３３】
図１のＩＮＰＵＴアクセス監視部２は、ＩＣＥ１のＣＰＵ１−１とＩＣＥエミュレーションメモリ１−２の間のアドレスバス、データバス及び制御線を監視する。
【００３４】
図２を参照すると、ＩＮＰＵＴアクセス監視部２は、アドレスバスパターンマッチ検出部２−１、データバスパターンマッチ検出部２−２及びメモリリード・ライト検出部２−３を備え、これらが、各々、アドレスバス、データバス及び制御線を監視し、ＩＣＥのＣＰＵ１−１が機械語命令をする度に、ＩＮＰＵＴアクセス監視部２に接続されたパーソナルコンピュータ５に割込みをかける。
【００３５】
試験対象プログラムを実行する際のＩＮＰＵＴの最小値、最大値、中央値等のテスト値は、プログラム実行に従ってパーソナルコンピュータ５で求める。図１のＩＮＰＵＴファイル３は、パーソナルコンピュータ５により求められたテスト値を格納するためのファイルである。
【００３６】
図１のＯＵＴＰＵＴファイル４は、ＩＮＰＵＴファイル３に格納されているテスト値を用いて試験対象プログラムを実行した時に、試験対象プログラムが出力するデータを格納するファイルである。ここで、試験対象プログラムが出力するデータとは、実行した各関数、各出力変数の値、タスク間通信で用いたデータである。
【００３７】
次に、図１、図２の構成図、図３のフローチャート、図４の状態遷移図を参照して本実施形態の動作を説明する。
【００３８】
ＩＮＰＵＴファイル３には、試験対象プログラムをコンパイル・リンクするとき、コンパイラ及びリンカが生成するマップファイルに記述されている変数の名称、アドレス及びビット数又はバイト数、並びにビット数又はバイト数から求められるその変数の最小値、最大値、中央値が格納される。
【００３９】
ＣＰＵ１−１で試験対象プログラムをリセットスタートする。
【００４０】
ＩＮＰＵＴアクセス監視部２は、ＣＰＵ１−１のアドレスバス、データバス及び制御線を監視しており、ＣＰＵ１−１が機械語命令を実行するとパーソナルコンピュータ５に割込みをかける。
【００４１】
パーソナルコンピュータ５は、割込みを受けると、図３のフローチャートに示す処理を実行する。
【００４２】
機械語命令によりメモリ内の変数の読込みが実行されたのであれば（ステップＳ１０１でＹＥＳ）、その変数の値が直接その機械語命令の中で何等かの値と比較されたのかを確認する（ステップＳ１０２）。あるいは、読み込まれた変数が一旦レジスタや他のメモリに格納され、格納先で何等かの値と比較されたのかが明らかとなるまで機械語命令を実行し監視する（ステップＳ１０２、Ｓ１０４）。変数と比較された値は、ＩＮＰＵＴファイルに格納される（ステップＳ１０３）。監視している最中、リターン命令が有り、関数の終りになれば、その変数の監視は終了する(ステップＳ１０４でＹＥＳ)。ステップＳ１０１〜Ｓ１０４の処理は、メモリから読み込まれた全ての変数について並列に行われる。
【００４３】
図４はこの処理を状態遷移図に表したものである。
【００４４】
「メモリリード待ち状態」Ｓ１１１にあるときに、変数のメモリからの読込みが実行されれば「変数値を条件判断する命令の実行を待つ状態」Ｓ１１２に遷移する。状態Ｓ１１２にあるときに、変数値を条件判断する命令が実行されれば、条件判断に用いられた値をＩＮＰＵＴファイルに格納し（アクションＡ１０１）、状態Ｓ１１１に遷移する。状態Ｓ１１２にあるときに、変数値を他のメモリ又はレジスタに格納する命令が実行されれば、「変数値を間接条件判断する命令の実行を待つ状態」Ｓ１１３に遷移する。状態１１２にあるときにリターン命令が実行されれば、状態Ｓ１１１に遷移する。状態Ｓ１１３にあるときに、変数値を間接条件判断する命令が実行されれば、間接条件判断に用いられた値をＩＮＰＵＴファイルに格納し（アクションＡ１０１）、状態Ｓ１１１に遷移する。状態Ｓ１１３にあるときに、リターン命令が実行されれば、状態Ｓ１１１に遷移する。図４の処理は、メモリから読み込まれた全ての変数について並列に行われる。
【００４５】
また、予めパーソナルコンピュータ側処理に指示することにより、各テスト値＋１の値及び各テスト値−１の値も追加のテスト値としてＩＮＰＵＴファイル３に格納させるようにしても良い。
【００４６】
試験対象プログラムのリセットスタートから終りまで１回通して実行しＩＮＰＵＴファイルが作成できたならば、次に、全ての入力変数の組み合わせについて、試験対象プログラムを繰り返し実行して、ＯＵＴＰＵＴファイル４を生成する。全ての入力変数の組み合わせの数は膨大になるため、試験対象プログラムを小ブロックに区切り、少ない数の組み合わせについて試験対象プログラムを実行するのが実際的である。
【００４７】
【発明の効果】
以上説明したように、本発明によれば、入力変数のテストするべき値が自動的に生成されるので、試験対象プログラムの予期せぬ誤動作を確実に検出することが可能となる。
【図面の簡単な説明】
【図１】本発明の実施形態によるプログラムシミュレータの全体の構成を示すブロック図である。
【図２】図１に示すＩＮＰＵＴアクセス監視部の構成を示すブロック図である。
【図３】パーソナルコンピュータの動作を示すフローチャートである。
【図４】パーソナルコンピュータの動作を示す状態遷移図である。
【符号の説明】
１  インサーキットエミュレータ（ＩＣＥ）
１−１  ＩＣＥ  ＣＰＵ
１−２  ＩＣＥエミュレーションメモリ
２  ＩＮＰＵＴアクセス監視部
２−１  アドレスバスパターンマッチ検出部
２−２  データバスパターンマッチ検出部
２−３  メモリリード・ライト検出部
３  ＩＮＰＵＴファイル
４  ＯＵＴＰＵＴファイル
５  パーソナルコンピュータ
【図１】
0003704503.tif 000002
【図２】
0003704503.tif 000003
【図３】
0003704503.tif 000004
【図４】
0003704503.tif 000005