(57)【特許請求の範囲】
【請求項１】
検証用プログラムへの入力値と該入力値に対する期待される出力値（以下、「出力期待値」という。）とを入力し、該入力値と該出力期待値の組み合わせに、入力された順番を示すデータ位置を付して入力データとして記憶装置に保存するデータ入力手段と、
前記記憶装置に保存されている入力データに基づいて表示装置へ前記入力値と前記出力期待値をそれぞれグラフ表示するグラフ表示手段と、
前記各グラフ上に入力値と該入力値に対応する出力期待値との関係を示すカーソルを表示するカーソル表示手段と、
データ抽出指示の指令を受け付けて前記カーソルで示された入力値と該入力値に対応する出力期待値のデータ位置に抽出マークを付する抽出データ指定手段と、
前記抽出マークの付されたデータ位置の入力値と出力期待値とを抽出することによって検証用プログラムのテストデータを生成するテストデータ出力手段と、
を備えたことを特徴とするテストデータ生成装置。
【請求項２】
前記テストデータ出力手段は、入力値については、前記データ入力手段によって入力された全ての入力値を抽出すると共に、出力期待値については、抽出マークの付された出力期待値を該出力期待値のデータ位置を付して抽出し、当該抽出されたデータを用いてテストデータを生成することを特徴とする請求項１に記載のテストデータ生成装置。
【請求項３】
前記抽出データ指定手段は、前記出力期待値が予め定めた抽出条件に該当するか否かを判定し、該当する場合は、その出力期待値のデータ位置に抽出マークを付することを特徴とする請求項１または２に記載のテストデータ生成装置。
【請求項４】
コンピュータ上で検証用プログラムを動作させ、該検証用プログラムに請求項１乃至３のいずれかに記載のテストデータ生成装置によって生成されたテストデータを入力し、該検証用プログラムの計算結果を表示装置へ表示させることによって検証用プログラムの評価を支援するプログラム評価支援方法であって、
前記テストデータの入力値を、該入力値に付されているデータ位置の順番に予め定められた時間間隔で前記検証用プログラムへ入力し、該検証用プログラムからの出力値と、前記テストデータの出力期待値が一致するか否かを判定し、その判定結果を前記表示装置へ表示することを特徴とするプログラム評価支援方法。
【請求項５】
前記コンピュータには、前記検証用プログラムの応答時間を設定しておき、
前記テストデータの入力値を検証用プログラムへ入力してから、前記応答時間後の出力値と、当該入力値に対する出力期待値とを比較して、該出力値と該出力期待値が一致するか否かを判定することを特徴とする請求項４に記載のプログラム評価支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータで実行されるプログラムの動的テストに使用するためのテストデータを生成するテストデータ生成装置およびプログラム評価支援方法に関する。
【背景技術】
【０００２】
従来、プログラムの動作が正常であることを検証するために、プログラムにテスト用の入力値を与え、本来出力すべき値が正しく出力されているか否かを検証することによって、プログラムの品質を評価するという方法が用いられている。
【０００３】
この検証作業は、人間系で行う場合があるが、検証データ数が多くなると作業効率が悪くなる。このため、検証作業を自動的に実行する技術が提案されている。（例えば、特許文献２，特許文献３を参照のこと。）
【０００４】
また、検証作業において、あらゆる入力値に対する出力値を評価するのでは工数が多くなり効率が悪くなる。このため、より検証作業の工数を減らして、効率よくテストするための手法が提案されている。例えば、特許文献４では、プログラムの分岐を自動解析し、ソースコードの全パスを通過するテスト項目を作成する技術が開示されている。
【０００５】
また、特許文献１では、工数の多い作業を見通しよく進めるため、グラフィカルなボックスパターンにより、内部的なＩ／Ｏサブシステムの信号パターンを隠蔽することにより、効率的にテスト仕様を作成する技術が開示されている。
【０００６】
また、特許文献５では、プログラムの検証作業を効率的に進めるために波形をグラフィカルに表示し、テストデータを作成する技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−１１９８２１号公報
【特許文献２】特開平９−２２３０４２号公報
【特許文献３】特開平９−２５９００６号公報
【特許文献４】特開平５−２１０５３７号公報
【特許文献５】特開２００６−９９５１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、特許文献１においても指摘されているように、単体テスト以降のテストの段階においては、全てのテストケースについて試験を実行するのは効率的ではない。この問題に対して、特許文献１では、状態遷移を処理単位に分割し、その入出力時点での値に注目している。しかしながら、この方法を採った場合、全てのケースを網羅することによるデメリットは解消されるものの、波形データなど時系列データを扱おうとすると、台形状、三角波状等の波形の形状の判別が視覚的に難しくなる。即ち特許文献１の方法では、波形全体の形が把握しにくくなって、効率的に試験ポイントを指定したり、絞り込んだりすることができなくなるという新たな問題が生ずる。
【０００９】
本発明は、上述のかかる事情に鑑みてなされたものであり、時系列データなどの波形データの中からプログラムの動的テストに有効なデータを抽出してテストデータを生成することのできるテストデータ生成装置およびプログラム評価支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の概要は、検証用プログラムに入力するデータと、本来出力されるべき出力データのぞれぞれの波形図を入出力の対応関係や時系列的な変化が容易に視認できるように表示装置に表示する。そして、設計者は視覚的に入出力の関係を確認しながら、テストデータに用いる入出力データに抽出マークを付す。その後、抽出マークを付した入出力データからテストデータを生成するというものである。
【００１１】
また本発明は、テストデータを、プログラムまたはプログラムの一部として出力することにより、検証用プログラムと直接結合したり、検証用プログラムに取り込んだりすることを可能にする。また、テストデータは、検証用プログラムへの入力値と、該入力値を検証用プログラムへ入力したときの期待される出力値（以下、「出力期待値」という。）に分けて生成する。この出力期待値は、検証用プログラムにテストデータの入力値が与えられたときに検証用プログラムから出力された出力値と比較され、検証用プログラムの評価に用いられる。
【００１２】
通常は、この入力値と出力値の抽出された組から、正しい値が計算されているかを検証すれば良いので、この入力値と出力値の抽出された組のみを出力すれば足りる。しかし、検証する対象のプログラムが前回の状態を記憶しているような場合においては、抽出された入力値と出力値の組からだけでは、正しい値を計算することができない。このため、このような検証を行う場合には、入力は時系列で全てのデータを抽出する一方、出力は、抽出指定した出力値のみを用いるようにする。ただし、どの時点のデータであるかを判別できるように、出力値には、入力時点がわかるデータ位置情報を付随させる。
【００１３】
具体的には、本発明に係るテストデータ生成装置は、検証用プログラムへの入力値と該入力値に対する出力期待値とを入力し、該入力値と該出力期待値の組み合わせに、入力された順番を示すデータ位置を付して入力データとして記憶装置に保存するデータ入力手段と、記憶装置に保存されている入力データに基づいて表示装置へ入力値と出力期待値をそれぞれグラフ表示するグラフ表示手段と、各グラフ上に入力値と該入力値に対応する出力期待値との関係を示すカーソルを表示するカーソル表示手段と、データ抽出指示の指令を受け付けてカーソルで示された入力値と該入力値に対応する出力期待値のデータ位置に抽出マークを付する抽出データ指定手段と、抽出マークの付されたデータ位置の入力値と出力期待値とを抽出することによって検証用プログラムのテストデータを生成するテストデータ出力手段と、を備えたことを特徴とする。
【００１４】
本発明では、入力値と出力期待値との関係をグラフ表示して、設計者がそのグラフを見て任意に抽出したいデータを抽出することができるので、効率的に有効なテストデータを選択することができる。
【００１５】
本発明に係るテストデータ生成装置では、さらに、テストデータ出力手段は、入力値については、データ入力手段によって入力された全ての入力値を抽出すると共に、出力期待値については、抽出マークの付された出力期待値を該出力期待値のデータ位置を付して抽出し、当該抽出されたデータを用いてテストデータを生成することを特徴とする。
【００１６】
本発明では、入力値の履歴が出力値に影響を与えるようなケースでも適切にテストデータを生成することができる。
【００１７】
また、本発明に係るテストデータ生成装置では、さらに、抽出データ指定手段は、出力期待値が予め定めた抽出条件に該当するか否かを判定し、該当する場合は、その出力期待値のデータ位置に抽出マークを表示することを特徴とする。抽出条件として、例えば、出力期待値の変化が予め定めた閾値よりも大きいか否かで判定し、出力期待値の変化が閾値よりも大きくなるデータ位置に抽出マークを表示することにより、効率的に検証箇所を絞ることができる。
【００１８】
本発明に係るプログラム評価支援方法は、コンピュータ上で検証用プログラムを動作させ、該検証用プログラムにテストデータ生成装置によって生成されたテストデータを入力し、該検証用プログラムの計算結果を表示装置へ表示させることによって検証用プログラムの評価を支援するプログラム評価支援方法であって、テストデータの入力値をデータ位置の順番に予め定められた時間間隔で検証用プログラムへ入力し、該検証用プログラムからの出力値と、テストデータの出力期待値が一致するか否かを判定し、その判定結果を表示装置へ表示することを特徴とする。
【００１９】
本発明では、テストデータを検証用プログラムに入力し、その出力値と、テストデータに保存されている入力値ごとの出力期待値を比較することによって、検証用プログラムの評価を行う。なお、一致か否かは、差が予め定めた閾値以下か否かで判定する。
【００２０】
好ましくは、コンピュータには、検証用プログラムの応答時間を設定しておき、テストデータの入力値を検証用プログラムへ入力してから、応答時間後の出力値と、当該入力値に対する出力期待値とを比較して、該出力値と該出力期待値が一致するか否かを判定するのが良い。これにより、プログラムの応答時間の期待値も同時に評価することができる。
【００２１】
また、データ入力位置ごとに、出力期待値と検証用プログラムの出力値との差分を計算し、該差分が予め定めた閾値以上の場合はアラーム出力をすることにより、設計者に検証用プログラムに異常が存在するか、仕様に問題があることを確実に伝えることができる。
【発明の効果】
【００２２】
本発明によれば、テストデータの入力値と出力期待値を時系列的に波形表示して、設計者はその波形を見て抽出したいデータを抽出することができるので、効率的に有効なテストデータを選択することができる。また、本発明では、入力値の履歴が出力値に影響を与えるようなケースでも適切にテストデータを生成することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施の形態によるテストデータ生成装置１の装置構成図である。
【図２】本発明の実施の形態によるテストデータ生成装置１の機能ブロック図である。
【図３】図２のディスプレイ装置５０に表示される画面の構成例を示している。
【図４】図２のカーソル表示手段１３の処理手順を示すフローチャートである。
【図５】図２のテストデータ出力手段１５の処理手順を示すフローチャートである。
【図６】図２のテストデータ出力手段１５によって出力されたテストデータファイルの一例である。
【図７】図６のテストデータファイルの他の例である。
【図８】図３の他の画面構成例である。
【図９】図２のテストデータ出力手段１５が全データ出力モードにおいてＣ言語形式で出力したテストデータファイルの例である。
【図１０】図２のテストデータ出力手段１５の全データ出力モードにおける処理手順を示すフローチャートである。
【図１１】本発明の実施の形態によるプログラム検証装置のブロック図である。
【図１２】図１１のインタフェースプログラム２２の一例である。
【図１３】図２の抽出データ指定手段１４の処理手順を示すフローチャートである。
【図１４】図１３の抽出データ指定手段１４の処理に用いられる抽出条件のテーブルである。
【図１５】図２のテストデータ出力手段１５の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００２４】
以下、本発明の実施の形態を説明する。図１は、本実施の形態によるテストデータ生成装置１の装置構成図である。この図に示すように、テストデータ生成装置１は、データを入力する入力装置４０、種々の演算処理を実行する演算装置１０、演算装置１０のプログラム実行等に用いられる主記憶装置２０、データやプログラムを保存する補助記憶装置３０、および、演算結果を表示するディスプレイ装置５０から構成されている。
【００２５】
図２は、本実施の形態によるテストデータ生成装置１の機能ブロック図である。この図において、テストデータ生成装置１は、入力装置４０を介して検証用プログラムへの入力値と出力期待値を入力するデータ入力手段１１、入力したデータに基づいてディスプレイ装置５０へグラフ表示するグラフ表示手段１２、表示したグラフ上にカーソルの表示やカーソルの移動処理を行うカーソル表示手段１３、入力したデータのうちテストデータに使用するデータの指定を受け付ける抽出データ指定手段１４、指定されたデータを抽出して検証用プログラムのテストデータを生成して補助記憶装置３０へ出力するテストデータ出力手段１５を有している。各手段１１〜１５はＣＰＵの機能としてブログラムによって実現することができる。
【００２６】
図２に示すテストデータ生成装置１の機能を図１との関連において説明すると、各手段１１を実現するプログラムが補助記憶装置３０に格納されており、テストデータ生成処理の開始時にこのプログラムが主記憶装置２０にロードされて演算装置１０によって実行される。生成されたテストデータは、補助記憶装置３０に保存される。
【００２７】
次に上記の構成を有するテストデータ生成装置１の動作を説明する。
＜データ入力処理＞
図３は、テストデータ生成装置１のデータ入力手段１１によってディスプレイ装置５０に表示される画面の構成例を示している。この画面の左側はデータを入力するための画面（データ入力部２）であり、画面右側は、入力された値に基づいてグラフ表示をする画面（波形表示部３）になっている。また、波形表示部３の上側には、カーソルを移動させるためのボタン群（指示データ変更ボタン表示部４）などが配置されている。
【００２８】
設計者（テストデータを生成する者）はこの画面のデータ入力部２を介して入力値や出力期待値を設定入力する。データ入力部２は、表計算ソフトウェアなどで見られるスプレッドシート状の入力インターフェースとなっており、列２ｂの「ＩＮ」欄、列２ｃの「ＯＵＴ」欄の各セルには個々に数値を入力できるようになっている。「ＩＮ」欄にはプログラムへの入力値、「ＯＵＴ」欄には出力期待値が入力できるようになっている。列２ａの「Ｎｏ．」欄には自動的に連番が表示される。この「Ｎｏ．」欄はデータの順番、すなわち時系列を表す。以降の説明で、「データ位置」は、データの順番を意味する。最下行までデータが入力されると、新たな行がスクロール表示されるようになっている。
【００２９】
図３は、入力値と出力期待値を直接入力する形態になっているが、入出力値を設定する代わりに、数式を入力して、入力値または出力期待値を指定することによって、その数式から出力期待値または入力値を自動的に算出するようにしても良い。
【００３０】
また、図３の例では、入力データ列は１系列であるが、複数系列であっても良い。同様に、出力データ列もプログラムが複数の出力点を有する場合は、複数系列であっても良い。このとき、各列のセルの幅は、データ列の数に合わせて自動的に表示範囲を合わせるようにするのが良い。
【００３１】
また、表計算ソフトウェアのような数式を計算する場合、数式が複雑になり過ぎないように、中間の値を計算する必要がある場合もある。このような場合には、図３には表示されていないが、中間の値を計算する列を設けて、これをもとに入力値あるいは出力期待値を計算するようにしても良い。
【００３２】
入力されたデータは、図３のデータ入力部２と同様のテーブル形式で主記憶装置２０に保存される。
【００３３】
＜グラフ表示処理＞
グラフ表示手段１２は、データ入力部２を介して入力されたデータを用いて波形表示部３にグラフィカル表示をする。このグラフ表示手段１２によって、入力波形表示部３ａには、入力値の時系列波形が表示される。入力波形表示部３ａの横軸は「Ｎｏ．」欄に対応しており、連番が等間隔に表示される。縦軸は「ＩＮ」欄に対応し、「ＩＮ」欄に入力された値の最大値と最小値でグラフの縦軸の範囲が定められその間を等間隔で目盛り表示される。出力波形表示部３ｂには、出力期待値の時系列波形が表示される。入力波形表示部３ａと同様に横軸は「Ｎｏ．」欄に対応し、「ＩＮ」欄と同じ番号が等間隔に表示される。出力波形表示部３ｂの縦軸は「ＯＵＴ」欄に対応し、「ＯＵＴ」欄に入力された値の最大値と最小値でグラフの縦軸の範囲が定められ、その間を等間隔で目盛り表示される。
【００３４】
なお、図示していないが、データ列２ｂ，２ｃと並列に列を設けて補助線をグラフに引くためのデータを設定入力できるようにしておいて、入力されたデータを入力波形表示部３ａ、出力波形表示部３ｂに表示するようにしても良い。
【００３５】
＜カーソル表示処理＞
カーソル表示手段１３は、入力波形表示部３ａ，出力波形表示部３ｂに、それぞれ縦線のカーソル９ａ，９ｂを表示する。カーソル表示手段１３は、指示データ変更ボタン表示部４のいずれかのボタン４ａ〜４ｄが押されるとカーソル表示手段１３はその押下を検知して、押されたボタンに対応してカーソル位置を移動させる。例えば、指示データ変更ボタン表示部４の枠内の左から２番目にある左移動ボタン４ｂが押されると、後述する図４の手順で、カーソル表示手段１３は限界位置を判定した後に移動可能ならば、カーソルを左に１だけずらす。指示データ変更ボタン表示部４の他のボタンについても同様にそれぞれのボタンに応じてカーソルを移動させる。入力波形表示部３ａと出力波形表示部３ｂのカーソルは常に同じ動きであり、横軸上の同じデータ位置に表示される。このため、設計者は、そのデータ位置における入力値と出力期待値の対応を容易に認識することができる。
【００３６】
カーソル位置表示部７には、現在カーソルのある位置が「Ｎｏ．」欄の数値として表示される。すなわち、「カーソル位置＝データ位置」の関係にある。なお、直接カーソル位置表示部７に「Ｎｏ．」欄の数値を入力することによってカーソル位置を設定することもできる。この場合、入力された値がカーソルの移動可能範囲を超えるときは、カーソルの移動可能範囲内に制限される。
【００３７】
次に、図４を用いて、上記のカーソル処理を実現するためのカーソル表示手段１３の処理手順を説明する。なお、表示画面中、各ボタンの押下は、それぞれのボタンが押下されたときに、押下有りのステータスを保存すると共に、集約してボタン押下イベント発生によって、カーソル表示手段１３を起動し、起動されたカーソル表示手段１３は、ステータスを読みこむことによって、どのボタンが押されたかを検知すると共に、そのステータスをリセットするものとして説明するが、起動の方法はこれに限らない。
【００３８】
カーソル表示手段１３は、ボタン押下イベント発生によって起動されると、左移動ボタン４ａの押下が有ったか否かを判定する（Ｓ１０１）。この判定の結果、左移動ボタン４ａの押下が有った場合、カーソル表示手段１３は、次にカーソルの位置が左から１０以上手前か否かを判定し（Ｓ１０２）、１０以上手前の場合は、現在のカーソル位置を左に１０個分移動させる（Ｓ１０３）。具体的には、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を１０デクリメントする。カーソルの位置が左から１０未満の場合、カーソル表示手段１３は、カーソル位置を最左端に移動させる（Ｓ１０４）。すなわち、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を１にセットする。
【００３９】
ステップＳ１０１で、左移動ボタン４ａが押下されていない場合、カーソル表示手段１３は、次に、左移動ボタン４ｂの押下が有ったか否かを判定する（Ｓ１０５）。判定の結果、左移動ボタン４ｂの押下があった場合、カーソル表示手段１３は、現在のカーソルの位置が左から１以上手前か否かを判定し（Ｓ１０６）、１以上手前の場合は、現在のカーソル位置を左に１つ移動させる（Ｓ１０７）。すなわち、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を１デクリメントする。
【００４０】
ステップＳ１０５で左移動ボタン４ｂが押下されていない場合やステップＳ１０６で現在のカーソル位置が左から１以上手前でない場合、カーソル表示手段１３は、次に右移動ボタン４ｄの押下が有ったか否かを判定する（Ｓ１０８）。この判定の結果、右移動ボタン４ｄの押下が有った場合、カーソル表示手段１３は、次にカーソルの位置が右から１０以上手前か否かを判定し（Ｓ１０９）、１０以上手前の場合は、現在のカーソル位置を右に１０個分移動させる（Ｓ１１０）。具体的には、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を１０インクリメントする。カーソルの位置が右から１０未満の場合、カーソル表示手段１３は、カーソル位置を最右端に移動させる（Ｓ１１０）。すなわち、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を最終値にセットする。
【００４１】
ステップＳ１０８で、右移動ボタン４ｄが押下されていない場合、カーソル表示手段１３は、次に、右移動ボタン４ｃの押下が有ったか否かを判定する（Ｓ１１２）。判定の結果、右移動ボタン４ｃの押下があった場合、カーソル表示手段１３は、現在のカーソルの位置が右から１以上手前か否かを判定し（Ｓ１１３）、１以上手前の場合は、現在のカーソル位置を右に１つ移動させる（Ｓ１１４）。すなわち、現在のカーソル位置として保存されている「Ｎｏ．」欄の数値を１インクリメントする。
カーソル表示手段１３は、以上の手順によって動作する。
【００４２】
＜抽出データ指定処理＞
カーソルを抽出したいデータ位置に移動させた後、設計者は指示データ選択ボタン５を押す。抽出データ指定手段１４は、この選択ボタン５の押下を検知して、データ入力部２の列２ｄの「抽出」欄に抽出マークを設定する。既に抽出マークが設定されているデータ位置で指示データ選択ボタン５が押されると、抽出データ指定手段１４は、トグル動作によって抽出マークをキャンセルする。また、図３の例では、列２ｄに抽出マークを表示する方式を取っているが、抽出マーク専用の別の表を画面表示しておいて、指示データ選択ボタン５が押されるごとに、指示されたデータがその表にコピーされるようにしても良い。
【００４３】
＜テストデータ出力処理＞
以上の操作を繰り返して、必要なデータに全て抽出マークが付加されると、設計者は次に保存ボタン６を押す。この保存ボタン６の押下によって、テストデータ出力手段１５が起動される。図５にテストデータ出力手段１５の処理手順を示す。
【００４４】
テストデータ出力手段１５は、保存ボタン６の押下によって起動されると、各入力データについて抽出マークがセットされているか否かを判定し（Ｓ４０２）、セットされている場合は、その入力値と出力値、およびこのデータ位置をファイルに出力してテストデータファイルを生成する（Ｓ４０３）。
【００４５】
図６は、出力されたテストデータファイルの例である。この例は図３に示されたデータが出力された例であり、出力形式は、コンマを区切り記号としたテキスト形式（ＣＳＶ； Comma Separated Values）である。
【００４６】
図７は、テストデータファイルの他の例である。この例も図３に示されたデータが出力された例であるが、プログラムの形式（Ｃ言語形式）を採っている。このように、あらかじめプログラム形式でデータを出力しておくと、テストプログラムへの取り込みが容易となり、効率良く取り扱うことができる。
【００４７】
なお、図３の入力波形表示部３に示すグラフの例では、入力値は、−１００から＋１００まで変化しているが、出力値は、−６０から＋６０までの変化に制限されており、上下限リミッタのテストデータになっている。このように、上下限リミッタのようなアルゴリズムの場合には、今回の出力の計算値は、前回の計算値に依存しないため、抽出点を上記のように、ＮＯ．４、ＮＯ．７、ＮＯ．１０のデータ位置で独立に取り出しても、そのデータのみを用いて検証を行うことが可能である。
【００４８】
一方、図８の入力波形表示部３ａおよび出力波形表示部３ｂに示すような波形の場合は独立に取り出すことが出来ない。この場合、テスト対象のプログラムの出力は、次の式で計算される。
OUT[k] = (IN[k] + IN[k-1])/2 （k：2以上の整数  ），OUT[1]=0    ・・・（１）
ここで、OUT[k]は、データ位置Kにおける出力期待値、IN[k]は、データ位置Kにおける入力値である。
【００４９】
上記の（１）式は、入出力値が移動平均の関係にあることを表している。この場合、今回の出力値を計算するためには、今回の入力値に加えて、前回の入力値も必要となる。例えば、図８において、Ｎｏ．３、Ｎｏ．４のデータとも、入力値は同じ値を取っているが、出力値は異なっている。この場合、図６や図７のようなテストデータの抽出方法を採ると、前回の入力値がテストデータに含まれない場合があり、検証を行うためのデータとしては不十分になる。このため、テストデータ出力手段１５には、入力値については、抽出マークの付されているデータのみをテストデータとして出力するモード（通常出力モード）と、入力された全データを出力するモード（全データ出力モード）の２つを設けるのが良い。両モードとも出力期待値については、抽出マークの付されたデータのみを出力する。
【００５０】
図８のように現在の出力値が過去の入力値に依存するような場合には、全データ出力モードを選択して、入力値は全データを出力し、出力期待値はデータの位置を示す情報とともに、抽出マークの付されたデータのみを出力する。これにより、プログラムの動作特性に合わせて、そのプログラムの検証に必要かつ有効なテストデータを得ることができる。
【００５１】
図９は、全データ出力モードにおいて、Ｃ言語形式で出力されたテストデータファイルの例である。入力値と、出力期待値のデータ数が異なるため、別々の配列として、生成されている。なお、出力期待値には、データ位置を付して、入力値との対応関係がわかるようになっている。
【００５２】
図１０は、全データ出力モードにおけるファイルへのデータ出力手順を示したフローチャートである。出力期待値のデータ出力手順については図５と同様であるが、入力値については全データがファイルに出力されるようになっている。
【００５３】
＜テストデータによるプログラムの検証＞
次に、このテストデータの使用方法の例を説明する。
図１１に示すように、検証用プログラム２３は、コンピュータで構成されるプログラム検証装置（エミュレータ）６０に組み込まれて実行される。このプログラム検証装置６０では、図６、図７、あるいは図９の形式で生成されたテストデータ２１がインタフェースプログラム２２を介して検証用プログラム２３の入力として与えられる。検証用プログラム２３からの出力は、インタフェースプログラム２２に渡して、表示装置２４上に表示しても良いし、実際の出力機器を通して出力させるようにしても良い。
表示装置２４に表示させる場合は、テストデータの入力値に関連付けて検証用プログラムからの出力値、および、テストデータ中の出力期待値を表示し、出力値と出力期待値との差が予め定めた一定値以上の場合など所定の条件を満たしたときに異常マークを表示する。
【００５４】
図１２は、インタフェースプログラム２２の例であり、Ｃ言語のプログラムの検証に用いられる。
図１２において、最初に、#include "TestLimData1.c" という形で、テストデータ生成装置１により生成されたテストデータをプログラムに取り込んでいる。この場合は、図７のように、プログラム形式でデータが生成され、TestLimData1.cというファイルに出力されていることが前提である。
【００５５】
テストプログラム本体は、for ループ内で、テスト対象の関数 Limiter() に、テストデータ生成装置１により生成されたテストデータを渡して、計算を実行させる。その後、この計算結果を、 ASSERT_EQUAL() マクロにて、検証している。このマクロは、２つの引数の値が異なったときに、エラーとしてレポートされる。これを、テストデータ生成装置１により生成された全ての抽出データについて、forループ内で検証を行い、ASSERT_EQUAL() マクロにて、計算結果（出力値）とテストデータ生成装置１により生成された出力期待値との不一致が検出されなければ、試験合格となる。
【００５６】
このように、図１２に示すようなインタフェースプログラムを介して、テストデータを検証用プログラムへ入力し、検証用プログラムの出力値とテストデータの出力期待値とを比較することにより、効率的な検証が可能となる。
【００５７】
なお、テストデータには、遅延時間（検証用プログラムの応答時間）を設定できるようにしておき、インタフェースプログラムは、入力値を検証用プログラムへ入力してから、遅延時間後の出力値と、この入力値に対する出力期待値とを比較して、一致、不一致などの判定をするようにしても良い。このようにすれば、プログラムの処理速度を含めた評価が可能になる。この場合は実機で検証するのが効果的である。
【００５８】
以上、本実施の形態によれば、検証用プログラムに有効なテストデータをグラフィカルに抽出することができ、抽出したテストデータを用いて、プログラムの動的テストを行い、その結果を自動的に判定することができるので、検証作業の効率が向上する。
【００５９】
なお、プログラム検証装置６０は、エミュレータや実機に限らず、その評価内容によって、既存の検証装置を任意に選択して用いるようにすれば良い。例えば、応答時間の評価は含まず、対象ＣＰＵのオブジェクトコードでのプログラムの評価ならば、プログラム検証装置６０をテストデータ生成装置１と一体として構成するようにして、その上で実行されるＣＰＵシミュレータを用いることも可能である。
【００６０】
また、プログラム検証装置６０をテストデータ生成装置１と一体として構成するようにしてＣ言語の論理のレベルでのプログラムの評価を行うようにしても良い。
【００６１】
例えば、テストデータ生成装置１を汎用的な計算機を用いて構成し、この計算機用の実行プログラムを生成するＣコンパイラを用いて検証用プログラムをコンパイルして、この計算機上でネイティブ実行する。そして、テストデータの入力値に対する実行結果とテストデータの出力期待値とを比較して、一致、不一致を判定することにより、効率良くプログラムの検証作業を行うことができる。
【００６２】
（抽出データ指定処理の他の実施例）
次に図７、図８を用いて抽出データ指定処理の他の実施例を説明する。
本実施例は、テストデータの抽出条件を表示画面を通して設定し、その後、抽出データ指定手段１４を起動して自動的にテストデータを抽出するものである。
【００６３】
図１４に抽出条件を示す。テストデータ生成装置１の主記憶装置２０にこの抽出条件を記憶すると共に、抽出データ指定手段１４は、ディスプレイ装置５０に抽出条件を項目ごとに表示する。設計者がこの画面を通して、項目ごとに条件を選択や閾値の入力を行う。抽出データ指定手段１４は、選択入力があると、主記憶装置２０に保存されている抽出条件の選択フラグをセットし、閾値を記憶する。
【００６４】
必要なデータ全ての入力が終わると（Ｓ７０１，Ｓ７０２で「ＹＥＳ」）抽出データ指定手段１４は、全てのデータ位置のデータについて、選択された抽出条件を満足するか否かを判定し（Ｓ７０４）、抽出条件を満足する場合は、そのデータ位置に抽出マークを設定する（Ｓ７０５）。
【００６５】
下記の（２）式は、抽出条件の演算式の例である。
変化量[k]＝OUT[k] - OUT[k-1] （k：2以上の整数  ）    ・・・（２）
【００６６】
変化量[k]は、データ位置[k]における出力期待値の変化量を求める計算式であり、閾値以上の変化量がある場合は抽出マークを設定するというものである。
【００６７】
なお、（２）式の代わりに、変化量[k] / OUT[k]で算出した変化率を閾値と比較してポイントを抽出するようにしても良い。
【００６８】
抽出条件を満たすデータ位置には、図３に示すように抽出マークが表示され、カーソルをそのデータ位置に合わせて指示データ選択ボタン５を押下することにより、トグル動作によって抽出マークがキャンセルされる。
【００６９】
本実施例によれば、選択した抽出条件で重要なデータ位置に自動的にマーク表示をすることができるので、テストデータ生成作業の効率が向上する。
【００７０】
（テストデータ出力処理の他の実施例）
図１５に他の実施例によるテストデータ出力手段１５の処理手順を示す。この実施例では、表示画面を通して、予めテストデータの形式を設定しておく。テストデータの形式とは、入力値は抽出フラグを付したもののみ（入力個別）か、全ての入力（入力全部）かという抽出パターンと、出力タイプは、データのみか、プログラム組込みかという出力タイプを意味する。テストデータ出力手段１５は、この設定に基づいてテストデータを生成するというものである。なお、図１５において、個別の出力アルゴリズム（Ｓ８０４〜Ｓ８０７）は、図５、図１０の手順に従う。
【００７１】
本実施例によれば、出力データの抽出パターンや出力タイプを設定できるのでテストデータ生成時の利便性が向上する。
【符号の説明】
【００７２】
１……テストデータ生成装置
２……データ入力部
３……波形表示部
３ａ……入力波形表示部
３ｂ……出力波形表示部
４……指示データ変更ボタン
４ａ，４ｂ……左移動ボタン
４ｃ，４ｄ……右移動ボタン
５……指示データ選択ボタン
６……保存ボタン
７……カーソル位置表示部
１０……演算装置
１１……データ入力手段
１２……グラフ表示手段
１３……カーソル表示手段
１４……抽出データ指定手段
１５……テストデータ出力手段
２０……主記憶装置
２１……テストデータ
２２……インタフェースプログラム
２３……検証用プログラム
３０……補助記憶装置
４０……入力装置
５０……ディスプレイ装置
６０……プログラム検証装置
【図１】
0005509992.tif 000002
【図２】
0005509992.tif 000003
【図３】
0005509992.tif 000004
【図４】
0005509992.tif 000005
【図５】
0005509992.tif 000006
【図６】
0005509992.tif 000007
【図７】
0005509992.tif 000008
【図８】
0005509992.tif 000009
【図９】
0005509992.tif 000010
【図１０】
0005509992.tif 000011
【図１１】
0005509992.tif 000012
【図１２】
0005509992.tif 000013
【図１３】
0005509992.tif 000014
【図１４】
0005509992.tif 000015
【図１５】
0005509992.tif 000016