以下に本発明の一実施形態について図面を参照して説明する。図1には、本実施形態の図式プログラムのテスト網羅性測定装置10の全体構成が示され、図2には、そのハードウェア構成が示されている。図3には、図式プログラムの一例が示され、図4には、図式プログラムのC言語プログラムへの変換例、および網羅性測定処理の内容を示すソースコードを付加した状態の一例が示されている。また、図5には、リミッタブロックの入出力関係が示され、図6には、リミッタブロックの処理内容がフローチャートで示されている。さらに、図7には、テストパターンおよびテストプログラムの一例が示され、図8には、網羅性測定情報記憶手段45の構成例が示され、図9には、図式プログラムのテスト網羅性測定装置10によるテスト網羅性の測定処理の流れがフローチャートで示されている。
図1において、図式プログラムのテスト網羅性測定装置10は、コンピュータ本体により構成された装置本体20と、マウスやキーボード等の入力装置50と、液晶ディスプレイやCRTディスプレイ等のディスプレイ装置60とを備えている。また、図示は省略されているが、印刷装置を備えた構成としてもよい。
装置本体20は、図式プログラム作成手段31と、ソースコード変換手段32と、網羅性測定処理付加手段33と、実行形式変換手段34と、プログラム実行手段35と、網羅性測定結果出力手段36と、図式プログラムライブラリ記憶手段41と、図式プログラム記憶手段42と、ソースプログラム記憶手段43と、実行形式プログラム記憶手段44と、網羅性測定情報記憶手段45とを含んで構成されている。
また、装置本体20は、ハードウェア構成としては、図2に示すように、演算装置(CPU)21と、主記憶装置(主メモリ、ここではキャッシュメモリを含むものとする。)22と、ハードディスク等の補助記憶装置23と、これらを接続するバス24により構成されている。
図式プログラム作成手段31は、図式プログラムライブラリ記憶手段41に予め用意されて記憶されている各種の機能を有する図形要素(図式プログラムの構成要素であり、図3〜図6のリミッタブロックも含まれる。)の情報を用いて、プログラマによる図形要素の選択入力およびそれに付随させる情報(設定値等)の入力を受け付けるとともに、図形要素間の接続情報の入力も受け付け、ディスプレイ装置60の画面上に、入力された図形要素を並べて表示するとともに、それらの接続関係も表示することにより(図3参照)、図形を用いたプログラムの作成を支援し、入力された図形要素の情報を、図形要素IDと関連付け、また、入力された接続情報を、接続関係IDと関連付けて、図式プログラム記憶手段42に記憶させる処理を実行するものである。
なお、後述する図8や図4では、図形要素IDについては、説明の便宜上、図式プログラム作成手段31により作成された図式プログラムを構成する図形要素のうち、テスト網羅性の測定対象となる図形要素(図3〜図6のリミッタブロックを含む。)についてだけ付された状態で説明されている。
ソースコード変換手段32は、ディスプレイ装置60の画面上に表示しながらプログラマにより作成されて図式プログラム記憶手段42に記憶されている作成済みの図式プログラムの情報(図式プログラムを構成する各図形要素の情報およびそれらの図形要素間の接続情報)を用いて、各図形要素の種別コードにより図式プログラムライブラリ記憶手段41から各図形要素の種別(機能)に応じた処理内容を示すソースコードを取得し、各図形要素について設定されている情報(パラメータへの設定値等)と組み合わせることにより、図式プログラム(図3参照)で示される処理内容を、テキスト形式の計算機言語(高級言語)で記述したソースコード(図4参照)に変換するとともに、テスト網羅性の測定対象の図形要素については、網羅性測定処理付加手段33に対し、網羅性測定処理の内容を示すソースコードの付加指令を出し、このようにして得られた全ての図形要素についてのソースコードを、処理順に配置してソースプログラム(本実施形態では、一例として、C言語プログラムとする。)を作成し、作成したソースプログラム(C言語プログラム)を、ソースプログラム記憶手段43に記憶させる処理を実行するものである。なお、ソースコード変換手段32は、網羅性測定処理付加手段33による網羅性測定処理の内容を示すソースコードの付加を行っていない通常のソースプログラム(C言語プログラム)を自動生成する処理も実行するが、本実施形態では、本発明に係る内容として、網羅性測定処理の内容を示すソースコードが付加されているソースプログラム(C言語プログラム)の自動生成に絞って説明を行うものとする。
より具体的には、ソースコード変換手段32は、先ず、図式プログラム記憶手段42に記憶されている作成済みの図式プログラムを構成する各図形要素について、これらの図形要素の種別コード(どのような機能の図形要素であるのかを識別するためのコード)を用いて、各図形要素が、図式プログラムライブラリ記憶手段41に網羅性測定処理の内容が記憶されているテスト網羅性の測定対象の図形要素に該当するか否かを判断し、テスト網羅性の測定対象の図形要素に該当すると判断した場合には、当該図形要素について設定されている情報(パラメータへの設定値等)および当該図形要素の種別コードを網羅性測定処理付加手段33に送り、網羅性測定処理付加手段33に対し、網羅性測定処理の内容を示すソースコードの付加指令を出し、一方、テスト網羅性の測定対象の図形要素に該当しないと判断した場合には、網羅性測定処理の内容を示すソースコードの付加指令を出さず、次に、図形要素の種別コードを用いて、図式プログラムライブラリ記憶手段41から、図形要素の種別(機能)に応じた処理内容を示すソースコードを取得し、これに当該図形要素について設定されている情報(パラメータへの設定値等)を組み合わせることにより、図形要素の処理内容に対応するソースコードを作成し、作成したソースコードを、自動生成中のソースプログラム(C言語プログラム)に、処理順に配置していき、このような処理を、作成済みの図式プログラムを構成する全ての図形要素(テスト網羅性の測定対象の図形要素および測定対象ではない図形要素)について繰り返し実行する。
網羅性測定処理付加手段33は、ソースコード変換手段32による変換処理の際に、ソースコード変換手段32からの指令を受け、図式プログラム記憶手段42に記憶されている作成済みの図式プログラムを構成する各図形要素のうち、テスト網羅性の測定対象の図形要素について、ソースコード変換手段32から受け取った図形要素の種別コードを用いて、その網羅性測定対象の図形要素に対応する網羅性測定処理の内容を示す雛形情報(パラメータ等が設定される前の状態のソースコード)を、図式プログラムライブラリ記憶手段41から取得し、取得した雛形情報に、図形要素について設定されている情報(パラメータへの設定値等)を組み合わせることにより網羅性測定処理の内容を示すソースコード(図4参照)を作成し、ソースコード変換手段32による変換処理で得られたソースコードに、作成した網羅性測定処理の内容を示すソースコードを付加する処理を実行するものである。ここで、網羅性測定処理の内容は、各図形要素の機能に応じて図形要素の種別毎に予め定められて用意されているものであり、網羅性測定処理の内容を示す雛形情報は、図形要素の種別コードにより図形要素の情報に関連付けられて図式プログラムライブラリ記憶手段41に記憶されている。
また、網羅性測定処理付加手段33は、図式プログラム記憶手段42に記憶されている作成済みの図式プログラムを構成する各図形要素のうちの網羅性測定対象の図形要素について、これらの図形要素の種別コードを用いて、図式プログラムライブラリ記憶手段41から、これらの図形要素内のテストケースの数を取得し、網羅性測定情報記憶手段45(図8参照)に、図形要素毎にテストケースの数に相当する網羅性測定情報45Aの格納領域を確保する処理を実行する。より具体的には、本実施形態では、網羅性測定処理付加手段33は、図形要素毎に取得したテストケースの数を、テストケース情報記憶手段(不図示)に記憶されているテストケース情報に追加していき、網羅性測定対象の図形要素のすべてについてのテストケースの数を取得した後に、それらの全テストケース分の実行の有無情報(「Yes」(実行済み)または「No」(未実行))の格納領域を確保し、さらに初期値として「No」(未実行)を記憶させる処理を実行する。
なお、図形要素毎に網羅性測定情報45Aの格納領域を確保するにあたっては、図形要素の種別毎に確保するのではなく、個々の図形要素のそれぞれについて確保する。すなわち、クラス毎に確保するのではなく、インスタンス毎に確保する。従って、図式プログラムの中に、同じ種別の図形要素が複数個あった場合には、その数だけ確保することになる。
さらに、網羅性測定処理付加手段33は、図式プログラム記憶手段42に記憶されている作成済みの図式プログラムを構成する各図形要素のうちの網羅性測定対象の図形要素内のテストケースをテストするためのテストパターン(図7参照)の入力を受け付け、受け付けたテストパターンを用いて、テスト対象のプログラムを繰り返し実行するためのループ処理を含むテストプログラム(図7参照)を自動生成し、自動生成したテストプログラム(本実施形態では、一例として、C言語プログラムとする。)を、ソースプログラム記憶手段43に記憶させる処理も実行する。
実行形式変換手段34は、ソースコード変換手段32および網羅性測定処理付加手段33により生成されてソースプログラム記憶手段43に記憶されているソースプログラム(C言語プログラム)を、コンピュータで実行可能な機械語による実行形式プログラム(オブジェクトプログラム)に変換するコンパイルを実行し、コンパイルして得られた実行形式プログラムを、実行形式プログラム記憶手段44に記憶させる処理を実行するものである。なお、実行形式変換手段34は、網羅性測定処理付加手段33による網羅性測定処理の内容を示すソースコードの付加を行っていない通常のソースプログラム(C言語プログラム)をコンパイルする処理も実行するが、本実施形態では、本発明に係る内容として、網羅性測定処理の内容を示すソースコードを付加されたソースプログラム(C言語プログラム)のコンパイルに絞って説明を行うものとする。
また、実行形式変換手段34は、網羅性測定処理付加手段33により作成されてソースプログラム記憶手段43に記憶されているテストプログラム(C言語プログラム)をコンパイルし、コンパイルして得られたテストプログラムの実行形式プログラムを、実行形式プログラム記憶手段44に記憶させる処理も実行する。
なお、実行形式変換手段34は、プログラム実行手段35によるテスト対象の実行形式プログラムおよびテストプログラムの実行形式プログラムの実行が、図2に示した演算装置(CPU)21を主体とする構成で行われることから、この演算装置21の種別に対応したCコンパイラで構成することができる。
プログラム実行手段35は、実行形式変換手段34によりコンパイルされて実行形式プログラム記憶手段44に記憶されているテスト対象の実行形式プログラムを主記憶装置22にロードし、これを演算装置(CPU)21で実行して網羅性測定対象の図形要素に対応する網羅性測定処理を実行することにより、網羅性測定情報記憶手段45(図8参照)に、当該図形要素の網羅性測定情報45Aを書き込んで記憶させる処理を実行するものである。
より具体的には、プログラム実行手段35は、網羅性測定処理付加手段33により自動生成された後に実行形式変換手段34によりコンパイルして得られたテストプログラムの実行形式プログラム、およびテスト対象の実行形式プログラムを、実行形式プログラム記憶手段44から主記憶装置22にロードし、テストプログラムの実行形式プログラムを演算装置(CPU)21で実行し、テストプログラム内のループ処理で、テストパターンの数に相当する回数だけ、テスト対象の実行形式プログラムを演算装置(CPU)21で繰り返し実行することにより、網羅性測定情報記憶手段45(図8参照)に、網羅性測定情報45Aとして、テストパターンでテストが実施されたテストケースの実行済みを示す情報(「Yes」)を書き込んで記憶させる処理を実行する。
また、プログラム実行手段35は、網羅性測定情報記憶手段45(図8参照)に、網羅性測定情報45Aを出力するだけではなく、各テストパターンを用いてテストが実施されたテストケースのログを示す測定履歴情報45Bを出力する処理も実行する。
網羅性測定結果出力手段36は、網羅性測定情報記憶手段45(図8参照)に記憶されている図形要素毎の各図形要素内のテストケースの実行の有無情報からなる網羅性測定情報45Aを取得し、取得した網羅性測定情報45Aを用いて、図形要素毎のテスト網羅性を含む網羅性測定結果を、ディスプレイ装置60に画面表示する処理を実行するものである。また、網羅性測定結果出力手段36は、図形要素毎のテスト網羅性を含む網羅性測定結果を、図示されない印刷装置で印刷する処理を実行してもよい。
より具体的には、網羅性測定結果出力手段36は、網羅性測定情報記憶手段45(図8参照)に網羅性測定情報45Aとして記憶されている各図形要素内のテストケースの実行の有無情報を用いて、図形要素毎に網羅率を算出し、算出した図形要素毎の網羅率を含む網羅性測定結果を、ディスプレイ装置60に画面表示する処理を実行する。また、図形要素毎の網羅率だけではなく、図式プログラム全体の網羅率を算出し、ディスプレイ装置60に画面表示する処理を実行してもよい。この際、図式プログラム全体の網羅率の算出方法としては、例えば、各図形要素の網羅率の積を取る方法や、平均を取る方法、あるいは図式プログラム全体の必要テストケースの和で実行済みのテストケースの和を割る方法等、様々な方法を採用することができる。さらに、網羅性測定結果出力手段36は、図形要素毎の各図形要素内のテストケースの実行の有無情報を含む網羅性測定結果を、ディスプレイ装置60に画面表示する処理も実行する。なお、これらの図形要素毎の網羅率の画面表示・印刷と、図形要素毎の各図形要素内のテストケースの実行の有無情報の画面表示・印刷とは、いずれか一方の画面表示・印刷でもよいが、プログラマに対し、より多くのテスト網羅性に関する情報を付与し、図式プログラムの網羅率が不足した場合における不足原因の特定作業やテストパターンの補充作業を、より効率的に実施することができるようにするという観点からは、双方の情報を画面表示・印刷することが好ましい。
図式プログラムライブラリ記憶手段41は、予め用意された各種の機能を有する図形要素(作成する図式プログラムの構成要素となるものであり、図3〜図6のリミッタブロックも含まれる。)の情報(図形要素の種別(機能)に応じた処理内容に対応するソースコード)と、網羅性測定対象の図形要素内のテストケースの数と、網羅性測定対象の図形要素に対応する網羅性測定処理の内容を示す雛形情報(パラメータ等が設定される前の状態のソースコード)とを、図形要素の種別コードにより関連付けることにより、それぞれを対応させた状態で記憶するものである。なお、これらのうち、図形要素の情報については、図形を用いて図式プログラムを作成する既存のシステムに用意されているもの(例えば、特開2008−3817の段落[0021]に記載されている、機能ブロックに対応する実装モジュール等)と同様のものでよい。
図式プログラム記憶手段42は、図式プログラム作成手段31により入力された作成済みまたは作成途中の図式プログラムを記憶するものであり、より具体的には、作成済みまたは作成途中の図式プログラムを構成する各図形要素の情報(パラメータへの設定値や、図形要素の機能を識別するための種別コード等を含む。)を、図形要素IDと関連付け、また、各図形要素間の接続情報を、接続関係IDと関連付けて記憶するものである。
ソースプログラム記憶手段43は、ソースコード変換手段32および網羅性測定処理付加手段33により作成された、ソースコードで記述されたテスト対象のプログラム(本実施形態では、C言語プログラム)と、網羅性測定処理付加手段33により作成された、ソースコードで記述されたテストプログラム(本実施形態では、C言語プログラム)とを記憶するものである。
実行形式プログラム記憶手段44は、実行形式変換手段34によりコンパイルして得られたテスト対象の実行形式プログラムおよびテストプログラムの実行形式プログラムを記憶するものである。
網羅性測定情報記憶手段45は、図8に示すように、プログラム実行手段35により得られた網羅性測定対象の図形要素内のテストケースの実行の有無情報からなる網羅性測定情報45A、および各テストパターンを用いてテストが実施されたテストケースのログを示す測定履歴情報45Bを記憶するものである。
そして、以上に述べた各種処理を実行する各手段31〜36は、装置本体20を構成するコンピュータ本体の内部に設けられた演算装置(CPU)21、その作業領域である主記憶装置22(図2参照)、および演算装置(CPU)21の動作手順を規定する1つまたは複数のプログラムにより実現される。なお、ここでいうプログラムは、テスト対象のプログラムやテストプログラムのことではない。
また、各記憶手段41〜45は、例えばハードディスク等の補助記憶装置23(図2参照)により好適に実現されるが、記憶容量やアクセス速度等に問題が生じない範囲であれば、ROM、EEPROM、フラッシュ・メモリ、RAM、MO、CD−ROM、CD−R、CD−RW、DVD−ROM、DVD−RAM、FD、磁気テープ、あるいはこれらの組合せ等を採用してもよい。
さらに、装置本体20は、1台のコンピュータあるいは1つのCPUにより実現されるものに限定されず、複数のコンピュータあるいは複数のCPUで分散処理を行うことにより実現されるものであってもよい。
このような本実施形態においては、以下のようにして図式プログラムのテスト網羅性測定装置10により、作成された図式プログラムについてテスト網羅性の測定処理が行われる。
図9において、先ず、図式プログラムのテスト網羅性測定装置10の電源を入れてプログラムを立ち上げ、テスト網羅性の測定に関する一連の処理を開始する(ステップS1)。
次に、図式プログラム作成手段31により、図式プログラムライブラリ記憶手段41に予め用意されて記憶されている各種の機能を有する図形要素の情報を用いて、プログラマによる図形要素の選択入力およびそれに付随させる情報(設定値等)の入力を受け付けるとともに、図形要素間の接続情報の入力も受け付け、ディスプレイ装置60の画面上に、入力された図形要素を並べて表示するとともに、それらの接続関係も表示することにより(図3参照)、図形を用いた図式プログラムの作成を支援し、入力された図形要素の情報を、図形要素IDと関連付け、また、入力された接続情報を、接続関係IDと関連付けて、図式プログラム記憶手段42に記憶させる(図9のステップS2)。この図式プログラム作成手段31による図式プログラムの作成時における入力装置50からの入力受付処理や、ディスプレイ装置60への画面表示処理は、図式プログラムを作成する既存のシステムと同様である。
図3には、図式プログラム作成手段31により入力を受け付けた図式プログラムの一例が示されている。この図は、入力信号aをリミッタ(limiter)で振幅制限し、リミッタ通過後の信号値を2倍して出力信号bを生成するアルゴリズムを示している。また、リミッタでは、上限値(U)としてcが設定され、下限値(L)としてdが設定されており、このリミッタは、これらの上下限値の範囲内に出力を制限することを示している。
ここで、リミッタ(limiter)ブロックは、図式プログラムを構成する図形要素の1種として、その内容情報(パラメータへの設定値が入力されていない状態の情報)が図式プログラムライブラリ記憶手段41に予め用意されて記憶されているものである。図5には、図3に示した図式プログラム中のリミッタブロックの入出力関係が示されており、全範囲の値をとる入力信号aに対し、dからcまでの間の範囲でリターン値kが得られることが示されている。
続いて、作成を完了した状態の図式プログラムが図式プログラム記憶手段42に記憶されている段階で、ソースコード変換手段32により、この作成済みの図式プログラム(図3参照)で示される処理内容を、テキスト形式の計算機言語(ここでは、C言語とする。)で記述したソースコード(図4参照)に変換する処理を開始し、テストケース情報記憶手段(不図示)に記憶されているテストケース情報(網羅性測定対象の各図形要素についての図形要素ID、およびその図形要素内のテストケースの数を含む情報)をクリアした後に(図9のステップS3)、作成済みの図式プログラム(図3参照)を構成する全ての図形要素について、図式プログラムに分岐がない場合には、1つずつ順番に、あるいは図式プログラムに分岐がある場合には、例えば、本願出願人により提案されている特開2006−285480に開示された手段等を用いて、ソースコードへの変換処理を実行する(図9のステップS4〜S4A)。なお、テストケース情報は、主記憶装置22(図2参照)内に記憶しておくだけでもよく、補助記憶装置23に記憶させてもよいことから、説明の便宜上、テストケース情報記憶手段の図示は省略している。
先ずは、ソースコード変換手段32により、図式プログラム記憶手段42に記憶されている作成済みの図式プログラム(図3参照)を構成する各図形要素について、これらの図形要素の種別コード(どのような機能の図形要素であるのかを識別するためのコード)を用いて、各図形要素が、図式プログラムライブラリ記憶手段41に網羅性測定処理の内容が記憶されているテスト網羅性の測定対象の図形要素に該当するか否かを判断し(図9のステップS5)、テスト網羅性の測定対象の図形要素に該当すると判断した場合には、当該図形要素について設定されている情報(パラメータへの設定値等)および当該図形要素の種別コードを網羅性測定処理付加手段33に送り、網羅性測定処理付加手段33に対し、網羅性測定処理の内容を示すソースコードの付加指令を出す。
それから、網羅性測定処理付加手段33により、ソースコード変換手段32から受け取った図形要素の種別コードを用いて、図式プログラムライブラリ記憶手段41から、当該図形要素内のテストケースの数を取得し(図9のステップS6)、取得したテストケースの数を、当該図形要素についての図形要素IDとともに、テストケース情報に追加する(図9のステップS7)。例えば、図3に示したリミッタブロックは、網羅性測定対象の図形要素であり、3つのテストケースがあるので(図4、図6参照)、このリミッタブロックについての図形要素ID(説明の便宜上、図8に示すように「1」とする。)と、テストケース数=3とを、テストケース情報に追加する。
その後、網羅性測定処理付加手段33により、ソースコード変換手段32から受け取った図形要素の種別コードを用いて、その図形要素に対応する網羅性測定処理の内容を示す雛形情報(パラメータ等が設定される前の状態のソースコード)を、図式プログラムライブラリ記憶手段41から取得し、取得した雛形情報に、図形要素について設定されている情報(パラメータへの設定値等)を組み合わせることにより網羅性測定処理の内容を示すソースコード(図4参照)を作成し、作成した網羅性測定処理の内容を示すソースコードを、自動生成中のソースプログラム(C言語プログラム)に付加する(図9のステップS8)。
続いて、ソースコード変換手段32により、図形要素の種別コードを用いて、図式プログラムライブラリ記憶手段41から、その図形要素の種別(機能)に応じた処理内容を示すソースコードを取得し、その図形要素について設定された情報(パラメータへの設定値等)と組み合わせることにより、その図形要素に対応するソースコードを生成し、生成したソースコードを、自動生成中のソースプログラム(C言語プログラム)に、処理順に従って配置する(図9のステップS9)。このステップS9のソースコードの生成・配置処理は、図式プログラムを作成する既存のシステムと同様である。
一方、前述したステップS5で、テスト網羅性の測定対象の図形要素に該当しないと判断した場合には、前述したステップS6〜S8の処理を行うことなく、前述したステップS9のソースコード変換手段32によるソースコードの生成・配置処理を実行する。
例えば、図4の左側部分には、図3に示した図式プログラムをソースコード変換手段32によりソースプログラム(C言語プログラム)に変換した例が示されている。図4の左側部分は、図式プログラムを作成する既存のシステムで得られていたものである。関数func()が、図3のアルゴリズムに対応する部分である。関数limiter()は、リミッタ(limiter)ブロックの処理内容を示している。リミッタブロックは、図式プログラムライブラリ記憶手段41に予め用意されているものであるから、この関数limiter()のソースコードも、図式プログラムライブラリ記憶手段41に予め用意されていて、その内容が、ここに展開されたものである。
また、図6には、図3に示した図式プログラム中のリミッタブロックの処理内容がフローチャートで示されている。このフローチャートから明らかなように、リミッタブロックには、テストが必要となる3つのテストケースが存在する。テストケース1は、入力信号aが上限の設定値cよりも大きい場合に通るパス(分岐)であり、この場合には、上限の設定値cがリミッタブロックのリターン値kとなる。テストケース2は、入力信号aが下限の設定値dよりも小さい場合に通るパス(分岐)であり、この場合には、下限の設定値dがリミッタブロックのリターン値kとなる。テストケース3は、入力信号aが下限の設定値dから上限の設定値cまでの間の値になる場合のパス(分岐)であり、この場合には、入力信号aがそのままリミッタブロックのリターン値kとなる。
図4の右側部分は、図3に示した図式プログラムからテキスト形式のソースコードに変換する際に、図形要素であるリミッタブロックの処理内容に応じた網羅性測定処理を示すソースコードを、図4の左側部分のソースコードに付加したものである。図4の右側部分で、CHECK_TESTED_GT、CHECK_TESTED_LT、CHECK_TESTED_WIは、それぞれリミッタブロックの処理内容に応じた網羅性測定処理を示すソースコードであり、これらの網羅性測定処理を示すソースコードは、リミッタブロックを実行するソースコードであるx=limiter(a,c,d)の直前の位置に配置されて付加されている。
図8には、網羅性測定情報記憶手段45に書き込んで記憶させる網羅性測定情報45Aの構成例が示されている。図3に示した図式プログラムについて、判断文カバレッジを測定する場合には、この図式プログラム中のリミッタブロック内の3つのテストケースの実行の有無情報(「Yes」(実行済み)または「No」(未実行))が必要であるので、網羅性測定情報記憶手段45には、網羅性測定情報45Aの格納領域として、リミッタブロックの図形要素ID=「1」について、テストケースの番号=「1」、「2」、「3」の3つの有無情報の格納領域が設けられている。また、初期状態では、これらの有無情報は、「No」(未実行)に初期化されている。なお、リミッタブロックの他に、網羅性測定対象の図形要素があった場合には、例えば、図8中の2点鎖線の如く、図形要素ID=「2」、「3」、…について、それぞれテストケースの番号=「1」、「2」、…の有無情報の格納領域が設けられる。
前述したように、図4の右側部分には、網羅性測定処理を示すソースコードとして3つのコード(CHECK_TESTED_GT、CHECK_TESTED_LT、CHECK_TESTED_WI)が付加されているが、これらの3つのコード中の第1、第2パラメータは、網羅性測定処理を示すソースコードを実行して得られた網羅性測定情報45Aを、いずれの区画の領域に格納するかを示すものであり、重複しない値が生成されて設定される。第1パラメータは、網羅性測定情報45Aの格納領域指定用の図形要素IDであり、図4の例では、リミッタブロックの図形要素ID=「1」が設定されている。第2パラメータは、網羅性測定情報45Aの格納領域指定用の図形要素内のテストケースの番号であり、図4の例では、リミッタブロック内のテストケースの番号=「1」、「2」、「3」が設定されている。
また、3つのコード中の第3パラメータ以降については、以下の通りである。先ず、CHECK_TESTED_GT(1,1,a,c)は、入力信号aがcよりも大きい場合に、図8に示したリミッタブロックの図形要素ID=「1」で、かつ、リミッタブロック内のテストケースの番号=「1」である網羅性測定情報45Aの格納領域を、「Yes」(実行済み)にするという処理内容である。従って、テストケース1のパス(分岐)を通る入力が与えられた場合に行われる処理である。なお、リミッタブロック内のテストケース1が実行されたというログを残すために、図形要素ID=「1」、テストケースの番号=「1」を、テストパターンの番号と合わせて、測定履歴情報45B(図8参照)として出力するようにしてもよい。また、雛形のCHECK_TESTED_GTから実コードのCHECK_TESTED_GT(1,1,a,c)を生成する処理は、例えば、図式プログラムライブラリ記憶手段41に、予め用意されたCHECK_TESTED_GT(<id>,<case>,<in1>,<in2;U>)を格納しておき、<in1>を、第1入力(図4の例では「a」)に置き換え、<in2;U>を、図式プログラム上ではUに割り当てられていて第2パラメータである変数(図4の例では「c」)に置き換える処理等である。
また、CHECK_TESTED_LT(1,2,a,d)は、入力信号aがdよりも小さい場合に、図8に示したリミッタブロックの図形要素ID=「1」で、かつ、リミッタブロック内のテストケースの番号=「2」である網羅性測定情報45Aの格納領域を、「Yes」(実行済み)にするという処理内容である。従って、テストケース2のパス(分岐)を通る入力が与えられた場合に行われる処理である。なお、リミッタブロック内のテストケース2が実行されたというログを残すために、図形要素ID=「1」、テストケースの番号=「2」を、テストパターンの番号と合わせて、測定履歴情報45B(図8参照)として出力するようにしてもよい。また、雛形のCHECK_TESTED_LTから実コードのCHECK_TESTED_LT(1,2,a,d)を生成する処理は、例えば、図式プログラムライブラリ記憶手段41に、予め用意されたCHECK_TESTED_LT(<id>,<case>,<in1>,<in3;L>)を格納しておき、<in1>を、第1入力(図4の例では「a」)に置き換え、<in3;L>を、図式プログラム上ではLに割り当てられていて第3パラメータである変数(図4の例では「d」)に置き換える処理等である。
さらに、CHECK_TESTED_WI(1,3,a,c,d)は、入力信号aがdからcまでの間の場合に、図8に示したリミッタブロックの図形要素ID=「1」で、かつ、リミッタブロック内のテストケースの番号=「3」である網羅性測定情報45Aの格納領域を、「Yes」(実行済み)にするという処理内容である。従って、テストケース3のパス(分岐)を通る入力が与えられた場合に行われる処理である。なお、リミッタブロック内のテストケース3が実行されたというログを残すために、図形要素ID=「1」、テストケースの番号=「3」を、テストパターンの番号と合わせて、測定履歴情報45B(図8参照)として出力するようにしてもよい。また、雛形のCHECK_TESTED_WIから実コードのCHECK_TESTED_WI(1,3,a,c,d)を生成する処理は、例えば、図式プログラムライブラリ記憶手段41に、予め用意されたCHECK_TESTED_WI(<id>,<case>,<in1>,<in2;U>,<in3;L>)を格納しておき、<in1>を、第1入力(図4の例では「a」)に置き換え、<in2;U>を、図式プログラム上ではUに割り当てられていて第2パラメータである変数(図4の例では「c」)に置き換え、<in3;L>を、図式プログラム上ではLに割り当てられていて第3パラメータである変数(図4の例では「d」)に置き換える処理等である。
なお、リミッタ(limiter)ブロックの場合には、3つのテストケースを網羅すれば、判断文カバレッジが100%となることは、リミッタブロックの処理内容から予めわかっているので、必要なテストケース数やチェック方式(CHECK_TESTED_GT、CHECK_TESTED_LT、CHECK_TESTED_WIの3つのコードが必要ということ)も予めわかっている。従って、前述したように、図4の左側部分に示したリミッタブロックの処理内容(図5、図6参照)は、図式プログラムライブラリ記憶手段41に予め格納されているが、これらの情報(必要なテストケース数やチェック方式)も含めて図式プログラムライブラリ記憶手段41に予め格納されている。
そして、図9のステップS4〜S4Aのループが終了した時点で、作成済みの図式プログラムを構成する全ての図形要素(テスト網羅性の測定対象の図形要素および測定対象ではない図形要素)のソースコードについて、ソースコード変換手段32による処理順に従った配置処理が完了し、ソースプログラム(C言語プログラム)が完成している状態となるので、この完成したソースプログラム(C言語プログラム)を、ソースコード変換手段32により、ソースプログラム記憶手段43に記憶させる。
続いて、網羅性測定処理付加手段33により、図式プログラム記憶手段42に記憶されている作成済みの図式プログラムを構成する各図形要素のうちの網羅性測定対象の図形要素内のテストケースをテストするためのテストパターン(図7参照)の入力を受け付ける(図9のステップS10)。この入力は、プログラマにより行われるが、その際には、網羅性測定処理付加手段33により、図式プログラム記憶手段42から図式プログラムを構成する各図形要素の情報およびそれらの接続情報が読み込まれ、図式プログラム(図3参照)がディスプレイ装置60に画面表示される。
それから、網羅性測定処理付加手段33により、受け付けたテストパターンを用いて、テスト対象の図式プログラムを繰り返し実行するためのループ処理を含むテストプログラム(図7参照)を自動生成し、自動生成したテストプログラム(C言語プログラム)を、ソースプログラム記憶手段43に記憶させる(図9のステップS11)。
さらに、網羅性測定処理付加手段33により、テストケース情報(網羅性測定対象の各図形要素についての図形要素ID、および各図形要素内のテストケースの数を含む情報)を用いて、網羅性測定情報記憶手段45(図8参照)に、図形要素毎にテストケースの数に相当する網羅性測定情報45Aの格納領域を確保する(図9のステップS12)。この網羅性測定情報45Aの格納領域は、全テストケース分の実行の有無情報(「Yes」(実行済み)または「No」(未実行))の格納領域である。また、網羅性測定処理付加手段33により、これらの格納領域のすべてに、初期値として「No」(未実行)を記憶させる(ステップS12)。
図7の上側部分には、図3に示した図式プログラムのテストパターンの一例が示されている。この例では、2つのテストパターンが記述されており、1つ目のテストパターンは、リミッタブロック内のテストケース3(図4、図6参照)をテストするためのものであり、入力値aが10、出力値bが20、設定値が、c=100,d=−100であり、2つ目のテストパターンは、リミッタブロック内のテストケース1(図4、図6参照)をテストするためのものであり、入力値aが300、出力値bが200、設定値が、c=100,d=−100であることを示している。
図7の下側部分には、網羅性測定処理付加手段33により、図7の上側部分に示したテストパターンを、テストプログラム(C言語プログラム)に変換した例が示されている。図7の上側部分に示したテストパターンの各値は、test()の配列ta[]、tb[]、tc[]、td[]に格納されている。また、forループの中で、テスト対象の関数func()が呼び出され、図7の上側部分に示した2つのテストパターンによるテストが実行されるようになっているが、その際に、図4の右側部分に示された3つの網羅性測定処理の内容を示すソースコードのうちの対応するソースコードの処理が実行され、図8の網羅性測定情報45Aの格納領域に、「Yes」(実行済み)が設定されるようになっている。また、テストパターンを用いてテスト対象の関数func()を実行して得られた処理結果が、対応する図7の上側部分に示したテストパターンの出力値bと等しいか否かがチェックされ、関数printfで、そのチェック結果(等しい場合には「OK」、等しくない場合には「NG」)が、ディスプレイ装置60に画面表示されるようになっている。なお、図示されない印刷装置への出力としてもよい。また、このチェック結果を、網羅性測定情報記憶手段45にデータとして記録してもよく、例えば、各テストパターンを用いてテストが実施されたテストケースのログを示す測定履歴情報45Bの一部として記録してもよい(図8では、このチェック結果の図示は省略されている)。
続いて、実行形式変換手段34により、ソースコード変換手段32および網羅性測定処理付加手段33により生成されてソースプログラム記憶手段43に記憶されているソースプログラム(C言語プログラム)を、コンピュータで実行可能な機械語による実行形式プログラム(オブジェクトプログラム)に変換するコンパイルを実行し、コンパイルして得られたテスト対象の実行形式プログラムを、実行形式プログラム記憶手段44に記憶させる(図9のステップS13)。
また、実行形式変換手段34により、網羅性測定処理付加手段33により作成されてソースプログラム記憶手段43に記憶されているテストプログラム(C言語プログラム)をコンパイルし、コンパイルして得られたテストプログラムの実行形式プログラムを、実行形式プログラム記憶手段44に記憶させる(図9のステップS13)。
なお、これらのテスト対象の実行形式プログラムと、テストプログラムの実行形式プログラムとを、結合(リンク)して1つの実行形式プログラムとし、実行形式プログラム記憶手段44に記憶させてもよい。
それから、プログラム実行手段35により、テストプログラムの実行形式プログラムおよびテスト対象の実行形式プログラム、あるいはこれらを結合(リンク)した1つの実行形式プログラムを、実行形式プログラム記憶手段44から主記憶装置22にロードし、テストプログラムの実行形式プログラムを演算装置(CPU)21で実行し、テストプログラム内のループ処理で、テストパターンの数に相当する回数だけ、テスト対象の実行形式プログラムを演算装置(CPU)21で繰り返し実行することにより(結合(リンク)した1つの実行形式プログラムを実行する場合も、これと同様な処理となる。)、網羅性測定情報記憶手段45(図8参照)に、網羅性測定情報45Aとして、テストパターンでテストが実施されたテストケースの実行済みを示す情報(「Yes」)を書き込んで記憶させる(図9のステップS14)。また、プログラム実行手段35により、網羅性測定情報記憶手段45(図8参照)に、各テストパターンを用いてテストが実施されたテストケースのログを示す測定履歴情報45Bを記憶させてもよい(図9のステップS14)。
さらに、プログラム実行手段35により、図7の上側部分に示したテストパターンを用いてテスト対象の実行形式プログラムを実行した処理結果が、対応するテストパターンの出力値bと等しいか否かをチェックし、そのチェック結果(等しい場合には「OK」、等しくない場合には「NG」)を、ディスプレイ装置60に画面表示する(図9のステップS14)。
その後、網羅性測定結果出力手段36により、網羅性測定情報記憶手段45(図8参照)に記憶されている図形要素毎の各図形要素内のテストケースの実行の有無情報(「Yes」(実行済み)または「No」(未実行))からなる網羅性測定情報45Aを取得し、取得した網羅性測定情報45Aを用いて、図形要素毎に網羅率を算出し、算出した図形要素毎の網羅率、および図形要素毎の各図形要素内のテストケースの実行の有無情報を含む網羅性測定結果を、ディスプレイ装置60に画面表示する(図9のステップS15)。また、網羅性測定結果出力手段36により、図式プログラム全体の網羅率を算出し、ディスプレイ装置60に画面表示してもよい。
図7に示したテストパターンの例では、2つのテストパターン1,2により、図6のS601の判定でNOになった後、図6のS602の判定でNOになった場合(テストケース3)と、図6のS601の判定でYESになった場合(テストケース1)のみがテストされている。ここで、判断文カバレッジ(分岐網羅率(C1))の測定を行うものとすると、分岐点のすべての可能な出力のうち、テストで1回以上得られた出力の網羅率を測定する必要があるので、このリミッタブロックの場合には、図6のS601の判定は、全ての可能な出力(YES/NOの2つ)が網羅されているが、図6のS602の判定は、NOの出力のケースしかテストされておらず、YESの出力のケースはテストされていない。そこで、上記の2ケースに加え、図6のS601の判定でNOになった後、図6のS602の判定でYESになった場合(テストケース2)を加えると、図6のS602の判定も網羅できるため、判断文カバレッジは、3ケースで完全網羅(100%)となるが、図7の例では、そのうちの2ケースのみが実行されているので、この場合の網羅率は、2/3=66.7%となる。図8の網羅性測定情報45Aの例には、この状態が示されており、図形要素ID=「1」であるリミッタブロック内の3つのテストケースのうち、テストケースの番号=「1」、「3」の2ケースが「YES」(実行済み)となり、テストケースの番号=「2」のケースが「NO」(未実行)となっている。また、図8の測定履歴情報45Bの例を見ても、テストケースの番号=「2」のケースは、ログが残っていないので、実行されていないことがわかる。なお、図8の測定履歴情報45Bを見れば、1つのテストケースについて、複数のテストパターンにより重複してテストが行われたことも把握することができる。
このように図3に示した図式プログラムの例では、図式プログラムの処理内容と網羅性を満足するための条件が直接関係している(すなわち、図式プログラム中のリミッタブロックの場合は、網羅性を満足するための条件が、入力が上限値よりも大きい場合、上限値と下限値との間の場合、下限値よりも小さい場合の3ケースであり、リミッタ処理の内容と直結している)ため、網羅性を満足していない場合にも、いずれのテストケースをテストするためのテストパターンを追加すればよいか、判断が容易である。
そして、プログラマは、網羅性測定結果出力手段36により出力された網羅性測定結果を参照し、いずれの図形要素についての網羅性が不十分なのか、あるいはいずれの図形要素内のいずれのテストケースが実行されていないのかを把握し、必要に応じ、図9のステップS10に戻り、テストパターンを追加入力する。このテストパターンの追加入力は、網羅性測定処理付加手段33により受け付けられるが、この際には、網羅性測定処理付加手段33により、図式プログラム(図3参照)がディスプレイ装置60に画面表示されるので、プログラマは、図式プログラムと、網羅性測定結果出力手段36により出力された網羅性測定結果とを見比べながら、追加すべきテストパターンを考えることができる。なお、テストパターンの追加入力後は、図9のステップS12の処理のうち、格納領域の確保は省略することができるが、「No」への初期化は、再度実行した方がよい。また、図9のステップS13の処理のうち、テスト対象のプログラムのコンパイルは省略することができるが、テストプログラムのコンパイルは、再度実行する。
以上のようにしてテストパターンの補充を行い、再度、プログラム実行手段35による処理を実行し、十分な網羅性が得られた場合には、テスト網羅性に関する一連の処理を終了する(図9のステップS16)。
このような本実施形態によれば、次のような効果がある。すなわち、図形要素に対応する網羅性測定処理の内容を示す雛形情報を記憶する図式プログラムライブラリ記憶手段41と、網羅性測定処理付加手段33と、テスト対象のプログラムを実行して網羅性測定処理を実行するプログラム実行手段35と、網羅性測定情報記憶手段45(図8参照)と、網羅性測定結果出力手段36とを備えているので、テスト対象のプログラムのソースコードに、図式プログラムを構成する図形要素に対応する網羅性測定処理の内容を示すソースコードを付加することにより、網羅性を測定し、得られた網羅性測定情報を用いて図形要素毎のテスト網羅性を含む網羅性測定結果を出力することができるため、プログラマは、図形要素と対応付けてテストの網羅性を把握することができる。従って、プログラマは、C言語プログラム等のテキスト形式のソースコードで記述されたプログラム上で、既存のC言語用等の網羅率測定システムを用いて網羅率を測定する必要はなくなり、網羅性測定結果も、C言語プログラム等のソースプログラム上で確認するのではなく、図式プログラム上で、その図式プログラムを構成する図形要素と対応付けて確認することができる。このため、図式プログラムの網羅率が不足した場合には、その原因の特定作業や、テストパターンの補充作業を、C言語プログラム等のソースプログラムを意識することなく、直接に図式プログラムを見ながら行うことができ、これらの作業を効率的に実施することができる。
また、網羅性測定結果出力手段36は、網羅性測定結果として、図形要素毎の網羅率を画面表示および/または印刷するか、あるいは図形要素毎に各図形要素内のテストケースの実行の有無情報を画面表示および/または印刷する構成とされているので、いずれの図形要素のテストの網羅性が、どれぐらい不十分なのかを容易に把握することができ、テスト網羅率の不足原因の特定作業や、テストパターンの補充作業を、より一層、効率的に実施することができる。
さらに、網羅性測定情報記憶手段45(図8参照)に、網羅性測定情報45Aに加え、測定履歴情報45Bを出力して記憶させ、網羅性測定結果出力手段36により測定履歴情報45Bの画面表示および/または印刷も行うようにした場合には、プログラマは、測定履歴情報45Bを見れば、1つのテストケースについて、複数のテストパターンにより重複してテストが行われたことも把握することができるので、これによっても、テスト網羅率の不足原因の特定作業や、テストパターンの補充作業を、より一層、効率的に実施することができる。
なお、本発明は前記実施形態に限定されるものではなく、本発明の目的を達成できる範囲内での変形等は本発明に含まれるものである。
例えば、前記実施形態では、プログラム実行手段35は、テストパターンを用いて行われたテスト結果とテスト網羅性とを切り離し、テスト結果にかかわらず、すなわち入力値に対して予定した出力値が得られたか否か(「OK」または「NG」)にかかわらず、網羅性測定情報記憶手段45(図8参照)に、網羅性測定情報45Aとして、テストパターンでテストされたテストケースの実行済みを示す情報(「Yes」)を書き込んで記憶させる構成とされていたが、これに限定されず、例えば、テストパターンによるテスト結果が「OK」になった場合のみ、そのテストパターンでテストされたテストケースの実行済みを示す情報(「Yes」)を書き込んで記憶させる構成としてもよい。
また、前記実施形態では、網羅性測定処理付加手段33により、作成済みの図式プログラムを構成する図形要素について、図式プログラムライブラリ記憶手段41からテストケースの数を取得し、網羅性測定情報記憶手段45(図8参照)に、図形要素毎にテストケースの数に相当する網羅性測定情報45Aの格納領域を確保する構成とされていたが、このようにテストケースの数の格納領域を一括して確保する必要はない。例えば、プログラム実行手段35によりテスト対象の実行形式プログラムをループ処理で繰り返し実行することにより網羅性測定処理を繰り返し実行している過程で、プログラム実行手段35により、テストケースが実行される都度に、その実行されたテストケースについての網羅性測定情報45A、すなわちそのテストケースの実行済みを示す情報を、網羅性測定情報記憶手段45に書き込んでいってもよい。この場合、実行されなかったテストケースについては、そのテストケースの未実行を示す情報は、網羅性測定情報記憶手段45に書き込まれていないので、網羅性測定結果出力手段36は、主記憶装置22または補助記憶装置23に設けられたテストケース情報記憶手段(不図示)から、各図形要素についてのテストケースの数を取得し、各図形要素についての網羅率の算出を行い、得られた網羅性測定結果を出力すればよい。
さらに、前記実施形態では、図9のステップS12において、網羅性測定処理付加手段33により、全ての図形要素についての格納領域をまとめて確保する構成とされていたが、これに限定されるものではなく、各図形要素について1つずつ(1図形要素ずつ)、順次、テストケースの数の格納領域を確保してもよく、例えば、図9のステップS7において、取得したテストケースの数の格納領域を確保してもよい。