ところで、初めに述べたコンピュータ制御される装置や機械器具の作動制御の場合には、その制御用のプログラム又はそのプログラム中のいくつかの処理が反復して繰り返し実行され、その反復実行の間に、実行結果(状態、数値等)は、時々刻々と変化していくこととなる。即ち、装置や機械器具の作動制御に於いては、その作動制御が為される間、そこに於いて利用されるプログラム又はそのプログラム中の処理が、複数回、繰り返し実行され、その間の入力の変化によって、命令コード、条件判定コード、状態参照コード等の処理結果が時間とともに変動し得ることとなる。従って、装置や機械器具の作動制御に利用されるプログラムの場合には、プログラム又は処理の反復実行の場合の逐次的に得られる実行結果又は実行結果の時間変化、換言すると、複数回に亘って処理が繰り返し実行されるプログラム又はその中の処理の実行結果の推移又は変動等といった“プログラムの動的な振る舞い”についても、それらが正常であるか否かを検査できることが好ましく、かかる検査の信頼性の程度の確認又は評価のためには、検査にて参照された被検査プログラムの逐次的に得られた実行結果が、プログラム中の処理が十分な又は許容可能な時間或いは回数に亘って実行されたものによるものか否かを確認し或いは評価できるようになっていることが好ましい。
しかしながら、従前のプログラムを検証する技術に於いて検査の信頼性の程度の確認又は評価のために利用されている上記の如きコードカバレッジを参照しても、検査にて参照される実行結果を逐次的に得るのに要した被検査プログラムの実行の時間の長さ又は回数が、“プログラムの動的な振る舞い”の検査に於いて十分な程度であったか否かについての情報を得ることは難しい。上記に述べた如き、コードカバレッジ、即ち、令網羅率、判定条件網羅率及び/又は状態網羅率等は、被検査プログラムの検査に於いて、少なくとも1回実行されたコード、判定結果又は状態の割合である。従って、これらのコードカバレッジに基づいて検査の網羅している条件、状態及び/又は処理の割合の確認又は判定を行う場合に於いては、或る命令コードの実行、或る条件判定コードに於ける或る結果の判定(或る結果の選択)、或る状態参照コードに於いて参照される或る状態の参照が、それぞれ、少なくとも一回、為されれば、そのコード、判定結果又は状態についての検査が為されたと判断することとなる。即ち、これらのコードカバレッジを指標として確認又は判定できる情報は、検査に於いて、全ての処理コード、判定結果又は状態のうちの、どの程度の割合の処理コード、判定結果又は状態が実行、選択又は参照されたかということだけであり、かかるコードカバレッジには、検査に於いて、プログラム中の反復実行される処理の実行時間の長さ又は回数は反映されておらず、従って、コードカバレッジを、検査にて参照される被検査プログラムの実行結果が、“プログラムの動的な振る舞い”の検査に於いて十分な又は許容可能な時間或いは回数に亘ってプログラム中の処理が反復実行されたものによるものか否かを確認し或いは評価するための指標として用いることは困難である。
かくして、本発明の一つの課題は、装置や機械器具の作動制御に利用されるプログラムなど、複数回に亘って処理が繰り返し実行されるプログラム又はその中の処理の実行結果の推移又は変動等といった“プログラムの動的な振る舞い”を検査しようとする場合に、検査された実行結果が、“プログラムの動的な振る舞い”の検査に於いて十分な又は許容可能な時間或いは回数に亘ってプログラム中の処理が反復実行されて得られたものであるか否かを確認し或いは評価することを可能にするコンピュータ・プログラム、装置及び方法を提供することである。
また、本発明のもう一つの課題は、上記の如きプログラムの動的な振る舞いの検査に於いて、検査にて参照された実行結果を得るのに要した被検査プログラム又はその中の処理の反復実行の時間又は回数が“プログラムの動的な振る舞い”の検査に於いて十分な又は許容可能な程度であるか否かの確認或いは評価に用いることのできる指標値を算出又は決定するコンピュータ・プログラム、装置及び方法を提供することである。
なお、プログラムの動的な振る舞いの検査を行う場合には、検査の信頼度が十分な程度であるとともに、効率的であることが望まれる。例えば、プログラムを、単に、任意に設定された時間又はサイクル数に亘って実行し、時々刻々の実行結果の検査を実行する場合、設定された時間又はサイクル数が過剰であれば、処理量が無用に膨大となり、非効率的となってしまう一方で、設定された時間又はサイクル数が過少であれば、検査に於いて十分な量又は長さのプログラムの動的な振る舞い(具体的には、逐次的に得られる実行結果又は実行結果の時間変化等)が、検査される実行結果の中に含まれていない場合が起き得る。即ち、逐次的に実行結果を算出する被検査プログラムの実行量をプログラムの実行時間の長さ又はサイクル数によって定めてしまう場合には、妥当に十分な又は許容可能な程度にて検査すべきプログラムの動的な振る舞いが得られているか否か、換言すれば、妥当に十分な又は許容可能な程度にてプログラムの動的な振る舞いを網羅できているか否かの確認又は判断をすることが難しいこととなる。
この点に関し、プログラム又はその中の処理が繰り返し実行される場合に、処理の実行結果の比較的大きな変化は、条件判定コード或いは状態参照コードに於いて、判定結果の反転や入力状態の変化(判定・状態の遷移)によって処理が変更された時に生ずることが多い。従って、そのような判定結果の反転や入力状態の変化の回数に特に着目すれば、プログラムの実行量の効率化と適正化が図られるものと期待される。本発明に於いては、かかる知見が採用される。
かくして、本発明によれば、上記の課題は、一つの態様に於いて、入力変数に基づいて決定される処理を実行する少なくとも一つの処理手順をコンピュータに実行させる被検査プログラムの実行結果が予定された値又は状態であるか否かの検査に利用されるコンピュータ・プログラムであって、被検査プログラムの実行中に生じた処理手順に於ける処理の変更及び/又は入力変数の変化の回数を遷移回数として計数する遷移回数計数手順をコンピュータに実行させるコンピュータ・プログラムによって達成される。
上記の構成に於いて、「被検査プログラム」とは、その作動又は振る舞いが、検査されるコンピュータ・プログラム又はソフトウェアである。また、「入力変数」とは、プログラム内のコード(命令文コード、条件判定文コード、関数その他の状態を参照する文コード)に於いて参照される変数又は引き数であり、数値、真偽値等のプログラムに於いて通常利用される値であってよい。即ち、上記の「入力変数」には、数値だけでなく、プログラムの処理に於いて参照される条件や状態を表す指標値であってもよいことは理解されるべきである。そして、「被検査プログラム」には、上記の如く、少なくとも一つの、入力変数に基づいて決定される処理を実行する「処理手順」が含まれ、処理手順は、命令文コード、条件判定文コード、関数その他の状態を参照する文コードによって規定される。
更に、上記の構成に関して、本発明のコンピュータ・プログラムが適用される「被検査プログラム」の「検査」は、典型的には、任意に準備された検査用の入力変数の群(パターン)を用いて、被検査プログラムを実行し、得られる結果値が、所定の値域内にあるか否か、例えば、被検査プログラムに於いて想定される値又は正常な値の範囲内にあるか否かを判定する処理であってよい。判定されるべき結果値は、被検査プログラムの実行により最終的に得られる最終結果値であってもよく、又は、被検査プログラムの実行の途中に得られる中間結果値のいずれであっても、或いは、それらの最終結果値及び中間結果値の両方であってもよい。所定の値域は、或る一つの値であってもよく、値の有限(若しくは無限)の範囲であってもよい(例えば、或る数値以上、以下又は未満など、範囲の一方が有限で、他方が無限であってもよい。)。なお、かかる被検査プログラムの実行とその実行結果値の判定は、本発明によるコンピュータ・プログラムに於いて、実行されてもよく、別のコンピュータ・プログラム、或いは、別のハードウェアにて実行されてもよい。本発明による検査用のコンピュータ・プログラムに於いて実行される場合には、更に、本発明のコンピュータ・プログラムで実行する手順として、被検査プログラムを実行する被検査プログラム実行手順と、被検査プログラム実行手順に於いて得られた実行結果値が所定の値域内にあるか否かの判定を実行する実行結果判定手順とが追加される。一方、被検査プログラムが別のハードウェアで実行される場合には、本発明によるコンピュータ・プログラムは、別のハードウェア或いは別のコンピュータ・プログラムにて実行中の被検査プログラムの実行結果値を取得し、後に説明される「遷移回数計数手順」に於いて参照することとなる。
そして、本発明による検査用のコンピュータ・プログラムの構成に於いては、上記の如く、「遷移回数計数手順」として、被検査プログラムの実行中に生じた処理手順に於ける処理の変更及び/又は入力変数の変化の回数が「遷移回数」として計数される。ここで、「処理手順に於ける処理の変更」とは、具体的には、条件判定文コードや関数その他の状態を参照する文コードなどの、判定結果や演算結果によってそれに続く処理経路を変更する処理コードに於ける処理経路の変更である。例えば、処理の判定結果が真偽値(Yes/No又はTrue/Falseの2状態)のいずれかであり、判定結果の真偽値によって、別々の処理を実行させる条件判定文コードの場合には、「処理の変更」は、判定結果が真値から偽値への又はその逆の転換(判定の反転)することによって、その後に実行される処理の経路が変更されることである。或いは、処理の判定結果値が3つ以上の状態のいずれかであり、判定結果値によって互いに異なる処理が実行される場合には、「処理の変更」は、判定結果値が一つの状態から別の状態へ転換することによって、その後に実行される処理の経路が変更されることである。また、「入力変数の変化」は、条件判定文コードや関数その他の状態を参照する文コードなどの処理コードが参照する入力変数の値の変化である。かかる入力変数の値の変化について、入力変数の値が実質的に連続な値である場合、例えば、センサ等によりアナログ式に検知された値やそのようなアナログ値をディジタル化した値である場合には、入力変数値が所定の幅を超えて変化したとき、或いは、入力変数値について複数の値域の区分が設定され、入力変数値の属する区分が変わる変化があったときに、「入力変数の変化」があったと判定するようになっていてよい。「処理手順に於ける処理の変更」又は「入力変数の変化」の有無は、実行中の被検査プログラムの実行結果値を参照して検出される。なお、本明細書に於いては、処理に於ける「変更」と、入力変数に於ける「変化」を、処理又は入力変数の「遷移」と称する。
かくして、本発明の「遷移回数計数手順」に於いては、被検査プログラムの実行中に、上記の如き、「処理手順に於ける処理」及び/又は「入力変数」の「遷移」があったとき、それらの回数が、「遷移回数」として計数される。既に述べた如く、プログラムの実行結果又は状態の比較的大きな変化が生じやすい時期は、条件判定コード或いは状態参照コードに於ける判定結果の反転時や参照する状態の変化によって処理が変更されたとき、即ち、処理又は入力変数の「遷移」のあったときである。従って、処理又は入力変数の「遷移」の回数を参照することにより、検査のために参照されている実行結果値を与えている被検査プログラムの実行に於いて、どの程度の量の遷移が網羅されているか、或いは、どの程度の比較的大きな変化を網羅できたかを見積もることが可能となり、かくして、検査された実行結果が、“プログラムの動的な振る舞い”の検査に於いて十分な又は許容可能な時間或いは回数に亘ってプログラム中の処理が反復実行されて得られたものであるか否かの確認或いは評価が可能となる。
また、上記の本発明の検査用のプログラムに於いて、検査された実行結果を得るのに要した被検査プログラムの実行量が、“プログラムの動的な振る舞い”の検査に於いて十分な又は許容可能な程度であるか否かの確認或いは評価を容易にするために、更に、所定の母数に対する遷移回数の割合である遷移網羅率を算出する遷移網羅率算出手順がコンピュータに実行させられるようになっていてよい。ここで、「遷移回数」とは、上記の如く、被検査プログラムの実行中に生じた「処理手順に於ける処理の変更」と「入力変数の変化」の回数であり、「所定の母数」は、任意に、実験的に、経験的に又は理論的に設定されてよい値である。好適には、前記の「所定の母数」を、検査された実行結果を得るのに要した被検査プログラムの実行量が“プログラムの動的な振る舞い”の検査に於いて十分な程度となる「遷移回数」の値に設定することにより、「遷移回数」を「所定の母数」にて除して得られる「遷移網羅率」を、“プログラムの動的な振る舞い”の検査に於いて十分な程度に対する、検査された実行結果を得るのに要した被検査プログラムの実行量の程度の指標値とすることが可能となる。即ち、「遷移網羅率」が100%であれば、検査された実行結果を与える被検査プログラムの実行量は、十分な程度を満足しているということができる。換言すれば、「遷移網羅率」は、検査に於ける、検査されるべき“プログラムの動的な振る舞い”の網羅率(カバレッジ)と考えることができる。
なお、被検査プログラムの実行量が、“プログラムの動的な振る舞い”の検査に於いて十分な程度であるか否かの確認或いは評価を更に容易にするために、本発明の検査用のプログラムは、更に、遷移網羅率が所定の基準値に達しているか否かを判定する遷移網羅率判定手順をコンピュータに実行させるようになっていてよい。ここで、「所定の基準値」は、任意に、実験的に、経験的に又は理論的に設定されてよい値であるところ、検査に於いて許容可能な「遷移網羅率」の値に設定すると、「遷移網羅率」が「所定の基準値」に達しているか否かの判定により、被検査プログラムの実行量が許容できる量であるか否かの判断が容易となる。即ち、「遷移網羅率」に対する「所定の基準値」は、“プログラムの動的な振る舞い”についてのカバレッジに対する基準(カバレッジ基準)であるということができる。
ところで、上記の本発明による検査用のプログラムに於いて、被検査プログラムには、複数の入力変数及び/又は複数の処理手順が存在していてもよい。その場合には、複数の入力変数及び/又は複数の処理手順の処理の遷移の各々について、それらの遷移の回数が個別に計数されてよく、更に、それぞれの入力変数及び/又は処理手順の処理の遷移に対する所定の個別母数が設定されて、複数の入力変数及び/又は複数の処理手順の処理の遷移の各々について、「遷移網羅率」が算出されてよい。或いは、検査された実行結果を与えた被検査プログラムの実行の全体の「遷移網羅率」が、複数の入力変数及び/又は複数の処理手順の処理の遷移の各々について計数された個別遷移回数の総和を所定の個別母数の総和で除することにより算出されてよい。この点に関し、この場合、或る一部の入力変数及び/又は処理手順の処理の遷移が多く生じた場合には、残りの入力変数及び/又は処理手順の処理の遷移の回数が少なくても、「遷移網羅率」が増大してしまう可能性がある。そこで、検査された実行結果を与えた被検査プログラムの実行の全体の「遷移網羅率」は、複数の入力変数及び/又は複数の処理手順の処理の遷移の各々について計数された個別遷移回数とそれに対応する所定の個別母数とのうちの小さい方の総和を所定の個別母数の総和で除することにより算出されてよい。即ち、個別遷移回数が所定の個別母数を超えた入力変数及び/又は処理手順の処理の遷移については、所定の個別母数を超えた分の回数が「遷移網羅率」の演算から除外されるようになっていてよい。
なお、上記の本発明による検査用のプログラムに於いては、「遷移網羅率」の算出をせずに、計数された遷移回数と所定の基準回数とを比較する遷移回数比較手順が実行されるようになっていてもよい。例えば、遷移回数が所定の基準回数を超えているか否かを判断することによっても、被検査プログラムの実行に於いて、どの程度の、比較的大きな変化があったかを見積もることが可能であることは理解されるべきである。従って、遷移回数比較手順に於いて、遷移回数が所定の基準回数に到達しているか否かの判定が実行されるようになっていてよい。ここに於いて、「所定の基準回数」は、任意に、実験的に、経験的に又は理論的に設定されてよい値であり、好適には、検査された実行結果を得るのに要した被検査プログラムの実行量が“プログラムの動的な振る舞い”の検査に於いて許容可能な程度となる「遷移回数」の値に設定されてよい。
更に、被検査プログラムに於いて、入力変数及び/又は処理手順が複数存在する場合には、遷移回数計数手順に於いて、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々の回数が個別遷移回数として個別に計数され、遷移回数比較手順に於いて、個別遷移回数が、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別基準回数と比較されるようになっていてよい(「所定の個別基準値」も、「所定の基準回数」と同様に設定されてよい。)。これにより、検査された実行結果を与えた被検査プログラムの実行に於いて、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々が、それぞれ、どの程度生じたかを確認することが可能となる。或いは、検査された実行結果を与えた被検査プログラムの実行の全体の遷移回数と所定の基準回数の総和とが比較されて、被検査プログラムの実行の全体において、入力変数の変化及び/又は処理手順の実行する処理の変更がどの程度生じたかを確認できるようになっていてもよい。その場合、上記の被検査プログラムの実行の全体の「遷移網羅率」の算出の場合と同様に、或る一部の入力変数及び/又は処理手順の処理の遷移が多く生じ、残りの入力変数及び/又は処理手順の処理の遷移の回数が少ないときに於いても、個別遷移回数の総和が増大することを考慮して、複数の入力変数及び/又は複数の処理手順の処理の遷移の各々について計数された個別遷移回数とそれに対応する所定の個別基準値とのうちの小さい方の総和と、所定の個別基準回数の総和とを比較するようになっていてよい。
実施の形態に於いては、上記の構成のために、被検査プログラムに於ける入力変数の変化が生じ得るコード及び/又は処理の変更が生じ得る処理手順のコードを検出する手順と、被検査プログラムの実行中に於ける入力変数の変化及び/又は処理手順に於いて実行される処理の変更を検出する手順とが実行されてよい。
また、或る検査を実行した場合に、「遷移網羅率」又は「遷移回数」が、それぞれ、「所定の基準値」又は「所定の基準回数」に達していない場合には、「遷移網羅率」又は「遷移回数」が、「所定の基準値」又は「所定の基準回数」に達するように、別の入力パターンを用いるなどして、被検査プログラムの実行とその実行結果の判定が繰り返されてよい。ただし、「所定の基準値」又は「所定の基準回数」が大きくなるほど、被検査プログラム内に於ける実行結果の比較的大きな変化が生じやすい時期がより多く網羅されて、検査の確度が向上するが、その分、演算量も多くなるので、「所定の基準値」又は「所定の基準回数」は、検査の確度とそれに要する時間又は演算量若しくはコストとを考慮して設定されることが好ましい。
かくして、上記の本発明のコンピュータ・プログラムをコンピュータに於いて実行することにより、被検査プログラムの検査を行う装置であって、被検査プログラムの実行に於いて、どの程度の量の遷移が網羅されているか、或いは、どの程度の比較的大きな変化を網羅できたかの確認又は評価のできる装置が構成される。従って、本発明によれば、もう一つの態様として、入力変数に基づいて決定される処理を実行する少なくとも一つの処理手順をコンピュータに実行させる被検査プログラムの実行結果が予定された値又は状態であるか否かの検査に利用されるプログラム検査装置であって、被検査プログラムの前記実行中に生じた処理手順に於ける処理の変更及び/又は入力変数の変化の回数を遷移回数として計数する遷移回数計数手段を含む装置が提供される。なお、本発明による装置に於いて、被検査プログラムを実行する被検査プログラム実行手段と、被検査プログラム実行手段に於いて得られた実行結果値が所定の値域内にあるか否かの判定を実行する実行結果判定手段とが設けられていてもよい。
上記の装置に於いても、所定の母数に対する遷移回数の割合である遷移網羅率を算出する遷移網羅率算出手段及び/又は遷移網羅率が所定の基準値に達しているか否かを判定する遷移網羅率判定手段が含まれていてよい。また、被検査プログラムに於いて、入力変数及び/又は処理手順が複数存在する場合には、遷移回数計数手段が、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々の回数を個別遷移回数として個別に計数し、遷移網羅率算出手段は、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別母数に対する個別遷移回数の割合を遷移網羅率として算出するか、或いは、所定の母数として複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別母数の総和を算出し、遷移網羅率として、所定の個別母数の総和に対する個別遷移回数の総和の割合を算出するようになっていてよく、その場合、好適には、遷移網羅率の算出に用いられる個別遷移回数の総和は、計数された個別遷移回数とそれに対応する所定の個別母数とのうちの小さい方の総和であってよい。
更に、上記の本発明の装置の別の態様として、装置は、遷移回数を所定の母数と比較する遷移回数比較手段を含んでいてよく、遷移回数比較手段は、遷移回数が所定の基準回数に到達しているか否かの判定するようになっていてよい。そして、被検査プログラムに於いて、入力変数及び/又は処理手順が複数存在する場合には、遷移回数計数手段が、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々の回数を個別遷移回数として個別に計数し、遷移回数比較手段が、個別遷移回数を、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別基準回数と比較するか、計数された個別遷移回数の総和と所定の個別基準回数の総和とを比較するようになっていてもよく、その場合、個別遷移回数の総和は、計数された個別遷移回数とそれに対応する所定の個別基準回数とのうちの小さい方の総和であってよい。
実施の形態に於いては、上記の構成のために、被検査プログラムに於ける入力変数の変化が生じ得るコード及び/又は処理の変更が生じ得る処理手順のコードを検出する手段と、被検査プログラムの実行中に於ける入力変数の変化及び/又は処理手順に於いて実行される処理の変更を検出する手段とが設けられていてよい。その他の本発明の検査用のコンピュータ・プログラムの特徴は、本発明の装置の構成に於いて実現されてよい。
更に、上記の本発明のコンピュータ・プログラム又はプログラム検証装置を用いることにより、被検査プログラムの検査を行う方法であって、被検査プログラムの実行に於いて、どの程度の量の遷移が網羅されているか、或いは、どの程度の比較的大きな変化を網羅できたかの確認又は評価のできる方法が構成される。従って、本発明によれば、更に別の態様として、入力変数に基づいて決定される処理を実行する少なくとも一つの処理手順をコンピュータに実行させる被検査プログラムの実行結果が予定された値又は状態であるか否かの検査に利用される方法であって、コンピュータを用いて被検査プログラムの実行中に生じた処理手順に於ける処理の変更及び/又は入力変数の変化の回数を遷移回数として計数する遷移回数計数過程を含む方法が提供される。なお、上記の本発明の方法に於いて、被検査プログラムを実行する被検査プログラム実行過程と、被検査プログラム実行過程に於いて得られた実行結果値が所定の値域内にあるか否かの判定を実行する実行結果判定過程とが含まれていてよい。
上記の方法に於いても、所定の母数に対する遷移回数の割合である遷移網羅率を算出する遷移網羅率算出過程及び/又は遷移網羅率が所定の基準値に達しているか否かを判定する遷移網羅率判定過程が含まれていてよい。また、被検査プログラムに於いて、入力変数及び/又は処理手順が複数存在する場合には、遷移回数計数過程に於いて、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々の回数が個別遷移回数として個別に計数され、遷移網羅率算出過程に於いては、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別母数に対する個別遷移回数の割合が遷移網羅率として算出されるか、或いは、所定の母数として複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別母数の総和が算出され、遷移網羅率として、所定の個別母数の総和に対する個別遷移回数の総和の割合が算出されるようになっていてよく、その場合、好適には、遷移網羅率の算出に用いられる個別遷移回数の総和は、計数された個別遷移回数とそれに対応する所定の個別母数とのうちの小さい方の総和であってよい。
更に、上記の本発明の方法の別の態様として、方法、遷移回数を所定の母数と比較する遷移回数比較過程を含んでいてよく、遷移回数比較過程に於いては、遷移回数が所定の基準回数に到達しているか否かの判定が為されるようになっていてよい。そして、被検査プログラムに於いて、入力変数及び/又は処理手順が複数存在する場合には、遷移回数計数過程で、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々の回数を個別遷移回数として個別に計数し、遷移回数比較過程で、個別遷移回数を、複数の入力変数の変化及び/又は複数の処理手順の実行する処理の変更の各々に対して設定される所定の個別基準回数と比較するか、計数された個別遷移回数の総和と所定の個別基準回数の総和とを比較するようになっていてもよく、その場合、個別遷移回数の総和は、計数された個別遷移回数とそれに対応する所定の個別基準回数とのうちの小さい方の総和であってよい。
実施の形態に於いては、上記の構成のために、被検査プログラムに於ける入力変数の変化が生じ得るコード及び/又は処理の変更が生じ得る処理手順のコードを検出する過程と、被検査プログラムの実行中に於ける入力変数の変化及び/又は処理手順に於いて実行される処理の変更を検出する過程とが設けられていてよい。その他の本発明の検査用のコンピュータ・プログラムの特徴は、本発明の方法の構成に於いて実現されてよい。
上記の本発明に於ける被検査プログラムの実行中に生じた処理手順に於ける処理の変更及び/又は入力変数の変化の回数を遷移回数として計数する構成によれば、被検査プログラムの検査に於いて網羅されている被検査プログラムの実行の時間的な推移の程度を確認し又は評価することが容易となる。また、遷移回数に対する所定の基準回数や遷移網羅率に対する所定の基準値は、被検査プログラムの実行結果の推移又は変動等の動的な振る舞いの検査に於いて設定される新規な時間軸方向に於ける基準と考えることができる。更に、既に触れた如く、本発明に於いては、単に被検査プログラムの実行時間や実行サイクル数を監視し或いはそれを基準とするのではなく、処理及び/又は入力変数の遷移の回数を監視し或いはそれを基準とすることによって、実行結果又は状態の比較的大きな変化が生じやすい時期がどの程度網羅されているかの把握が容易となり、検査の妥当性の向上が期待される一方、不要に長時間に亘る被検査プログラムの実行を継続することが回避可能となるので、検査に要する演算処理量、時間、コスト、労力等の低減にも有利に利用でき、プログラムの品質確保及び/又は向上若しくは改善に有利に寄与することが期待される。
ところで、上記の本発明のコンピュータ・プログラムに於ける遷移回数を計数する構成は、「背景技術」の欄で触れた所定のコードカバレッジ基準に基づくプログラムの検査と組み合わされてよい。即ち、本発明のコンピュータ・プログラムは、被検査プログラムに従った演算処理を実行し、演算結果値の判定をする場合に、コードカバレッジを参照するとともに、遷移回数又は遷移網羅率が参照されるようになっていてもよい。なお、遷移回数又は遷移網羅率に対して基準を設定する場合、遷移回数又は遷移網羅率が増大すれば、通常、コードカバレッジも増大するので、コードカバレッジに対する基準を明示的に設定するのではなく、遷移回数又は遷移網羅率に対する基準を調節してコード網羅率ができるだけ増大されるようになっていてもよい。
本発明のその他の目的及び利点は、以下の本発明の好ましい実施形態の説明により明らかになるであろう。
装置の概略
本発明によるプログラム検査のための遷移計数処理は、この分野で通常使われている形式の、図1(A)に例示されている如き、コンピュータ装置1に於けるコンピュータ・プログラムの作動により実現されてよい。(即ち、本発明によるコンピュータ・プログラムが実行されるコンピュータ装置は、本発明による装置を実現する。)。コンピュータ装置1には、通常の態様にて、双方向コモン・バスにより相互に連結されたCPU、記憶装置、入出力装置(I/O)が装備され、記憶装置は、本発明の演算で使用する演算処理を実行する各プログラムを記憶したメモリと、演算中に使用されるワークメモリ及びデータメモリを含んでいる。また、実施者によるコンピュータ装置1への指示及び計算結果その他の情報の表示及び出力は、コンピュータ装置1に接続されたコンピュータ端末装置2を通じて為される。コンピュータ端末装置2には、通常の態様にて、モニター3とキーボード並びにマウスといった入力装置4が設けられ、前記の各プログラムが起動されると、実施者は、前記の各プログラムの手順に従ってモニター3上の表示に従って、入力装置4を用いてコンピュータ装置1に各種の指示及び入力を行うとともに、モニター3上にてコンピュータ装置1からの演算状態及び演算結果等を視覚的に確認することが可能となる。なお、図示していないその他の周辺機器(結果を出力するプリンタ、計算条件及び演算結果情報等を入出力するための記憶装置など)がコンピュータ装置1及びコンピュータ端末装置2に装備されていてよいことは理解されるべきである。コンピュータ装置1を用いて、以下に述べる各種の処理又は演算を実行する際には、通常の態様にて、各種の処理又は演算に必要なプログラムが起動され、実施者は、コンピュータ端末装置2に於いて、プログラムに於いて準備された入力手順に従って、演算に必要なデータ、演算時の計算条件その他の各種設定を入力し、演算が開始される。そして、演算の実行中又は終了後に、演算結果が、適宜、コンピュータ端末装置2を通じて出力可能となる。
本発明によるプログラム検査のための遷移計数処理技術を具体的に実施する場合、被検査プログラムの実行とその実行結果の検査(被検査プログラムの実行により得られた結果値が、所定の値域内にあるか否か、例えば、被検査プログラムに於いて想定される値又は正常な値の範囲内にあるか否かを判定する処理)が為されるところ、被検査プログラムの実行とその実行結果の検査自体は、本発明によるプログラムの中で実行されてもよく、或いは、別のコンピュータ・プログラム又は別のハードウェアにて実行されてもよい。本発明によるプログラムの中で、被検査プログラムの実行とその実行結果の検査を行う場合には、図1(A)のコンピュータ装置1にて表示されている如く、更に、被検査プログラムの実行とその実行結果の検査と伴に、被検査プログラムに含まれる条件判定文コードや関数その他の状態を参照する文コードなどに於ける、被検査プログラムの実行中の処理の変更及び/又は入力変数の変化(入力・処理の遷移)の検出とその遷移の回数の計数が実行され、更に、好適には、所定の母数に対する計数された遷移回数の割合である状態・判定遷移網羅率(コンディション・ディシジョン遷移カバレッジ:単に「遷移網羅率」と称する。)の算出が実行される。そして、更に、好適には、得られた遷移回数又は遷移網羅率が、所定の基準回数又は所定の基準値に達しているか否かの判定が為されてよい。
また、被検査プログラムの実行が、実機ベンチ、HILS(Hardware In the Loop Simulation)、PILS(Processor In the Loop Simulation)などのハードウェアや、或いは、SILS(Software In the Loop Simulation)、MILS(Model In the Loop Simulation)などのシミュレーション環境など、別に場所で為される場合には、本発明によるプログラムに於いては、被検査プログラムの実行が為されている装置又はメモリ領域から入力変数値及び/又は実行結果値の取得が為される(実行結果の検査は、本発明によるプログラムの実行されるコンピュータ装置1の中で或いは別の場所で為されてよい。)。コンピュータ装置1とは別のハードウェアにて被検査プログラムを実行させる場合には、図1(B)に模式的に描かれている如く、別のハードウェア(実機、シミュレータ装置等)に於いて、コントローラが被検査プログラムに従ってハードウェアを作動している状態で、コントローラの内部状態、より具体的には、コントローラに於ける被検査プログラムの入力変数値及び/又は実行結果値を、デバッカ等のインターフェース装置が取得し、その取得された実行結果値を、コンピュータ装置1が参照して、入力・処理の遷移の検出、その遷移の回数の計数、或いは更に、遷移網羅率の算出等が実行されてよい。コンピュータ装置1又は別のコンピュータ装置に於けるシミュレーション環境で被検査プログラムを実行させる場合には、図1(C)に模式的に描かれている如く、シミュレーション環境に於いて、コントローラが被検査プログラムに従ってプラントモデルを作動している状態で、コントローラの内部状態、より具体的には、コントローラに於ける被検査プログラムの入力変数値及び/又は実行結果値が、コンピュータ装置1にて本発明のプログラムにより実現されている遷移回数計数手順又は手段或いは遷移網羅率算出手順又は手段によって参照され、かくして、入力・処理の遷移の検出、その遷移の回数の計数遷移網羅率の算出が実行されてよい。
処理の変更及び/又は入力変数の遷移回数の計数と遷移網羅率の算出の目的
「背景技術」の欄に於いて説明されている如く、従前のプログラムの検査に於いては、検査された命令・判定・状態に於ける実行結果の網羅している範囲の確認又は評価に際して、典型的には、コード網羅率(コードカバレッジ)が参照され、コード網羅率が基準値に達しているか否かが評価の対象となっている。コード網羅率は、例えば、図2(A)に例示されている如きプログラムがあった場合、プログラム中の命令コード(ステートメントコードS2、S3、S5、S6)のそれぞれが少なくとも一回実行されたこと、条件判定コード(ディシジョンコードS1、S4)に於ける全ての判定結果(T、F)が少なくとも一回出現されたこと、或いは、状態参照コード(コンディションコード)に於いて入力され得る値の各々(S1中のx、yの値、S4中のA、Bの値)について少なくとも一回入力が実行されたことを表す指標値であり、コード網羅率が100%となったとき、プログラム中の全コードの処理が検査され、その検査はプログラムの全ての作動を網羅していると見なされる。
しかしながら、機械器具の作動制御用のプログラムの場合、「発明の概要」の欄に於いて述べた如く、プログラム又はそのプログラム中の処理が繰り返し実行され、実行結果が時々刻々と変化していくこととなるので、その時間的な推移又は変動等といった“プログラムの動的な振る舞い”について検査できているか否かを確認できるようになっていることが好ましい。この点に関して、上記のコード網羅率に基づく検査範囲の網羅の程度の確認又は評価の場合には、各コードの少なくとも一回の実行、各判定結果の少なくとも一回の出現又は各々の入力され得る値の少なくとも一回入力により、そのコード、判定結果又は入力値による処理は検査されたとみなされてしまうので、それぞれの処理による各実行結果の時間的な推移が検査されたか否かは、コード網羅率に反映されないこととなる。即ち、図2(C)に概念的に示されている如く、被検査プログラムの実行により発生し得る全状態の数は、プログラム中のコードの総数、判定結果の総数及び入力され得る値(状態)の総数により決まるソフトウェアサイズ(縦軸)と、被検査プログラムの実行時間又は実行サイクル数(横軸)とで張られる空間の面積に対応するところ、或る被検査プログラムの実行結果の検査の網羅している範囲が上記のコード網羅率によって確認が可能な方向は、ソフトウェアサイズの方向(矢印s)のみであり、時間方向(矢印t)について、その被検査プログラムの実行結果の検査の網羅している範囲を確認することは困難となっている。
かくして、本発明に於いては、時間方向に於ける被検査プログラムの実行結果の検査の網羅している範囲の確認、即ち、“プログラムの動的な振る舞い”について検査の網羅している範囲の確認を容易にするための新規な指標が提案される。この点に関し、検査する被検査プログラムの実行結果の範囲の確認のための指標として、単に、実行時間の長さ又は実行サイクル数を用いた場合、検査された実行結果の中に被検査プログラムで生じ得る実行結果の変化、或いは、検査したい実行結果の変化が含まれているか否かの判断は困難であり、十分な程度での検査が行えているかの確認又は評価も困難となる。即ち、或る被検査プログラムの実行に或る実行時間の長さ又は実行サイクル数を要したとした場合、検査したい変化或いは検査されるべき実行結果の変化(観察対象の変化)の生ずる速さに対して、実行時間の長さ又は実行サイクル数が短過ぎれば、検査された実行結果の中に、観察対象の変化が含まれている可能性が低くなり、観察対象の生ずる速さに対して、実行時間の長さ又は実行サイクル数が長過ぎれば、無用に長い時間又はサイクルに亘って被検査プログラムを行ったこととなる。従って、例えば、実行時間の長さ又は実行サイクル数を指標としてその基準を設定し、その基準に達するまで、被検査プログラムの実行を継続するという手法にて検査を実施したとすると、実行時間の長さ又は実行サイクル数の基準が短過ぎれば、“プログラムの動的な振る舞い”の網羅の程度は不十分となり、実行時間の長さ又は実行サイクル数の基準が長過ぎれば、網羅の程度は十分であっても、検査の効率が低いこととなる。
そこで、本発明に於いては、“プログラムの動的な振る舞い”について網羅している範囲の確認のための新規な指標として、処理手順に於ける処理及び/又は入力変数の回数である「遷移回数」が参照される。「発明の概要」の欄に於いて述べた如く、プログラムに於いて、実行結果の比較的大きな変化は、入力変数に基づいて処理が行われるコードに於ける入力変数の変化があったとき、或いは、図2(B)に模式的に例示されている如く、条件判定文コードに於いて判定結果の転換(立ち上がりエッジ、立ち下りエッジなど)があったときなどである。従って、そのような処理手順に於ける処理及び/又は入力変数の「遷移」の回数又はその関数値を参照すれば、検査される実行結果の中にどの程度の変化が含まれているかを確認することが可能となる。そして、かかる「遷移回数」又はその関数値に対して基準を設け、基準を満たすように被検査プログラムを実行するようにすれば、“プログラムの動的な振る舞い”の網羅の程度は十分又は許容可能とすることができると伴に、無用に長く検査を実施するといったことが回避され、効率的となる。
なお、“プログラムの動的な振る舞い”の網羅の程度を表す指標としては、具体的には、入力変数を用いて処理を行う命令文コード、入力変数を用いて処理を行う条件判定文コード、その他の入力変数を参照して処理を行うコードに於ける入力変数の変化の回数、条件判定文コードに於ける判定結果の転換(又は反転)の回数が採用されてよい。ここで、入力変数は、数値、真偽値、状態を表すフラグ値など、プログラムによる処理に於いて入力として利用される任意の値であってよい。特に、入力変数の値が実質的に連続な値である場合、例えば、センサ等によりアナログ式に検知された値やそのようなアナログ値をディジタル化した値である場合には、入力変数値が所定の幅を超えて変化したとき、或いは、入力変数値について複数の値域の区分が設定され、入力変数値の属する区分が変わる変化があったときに、「入力変数の変化」があったと判定するようになっていてよい。判定結果の転換は、判定結果を表す変数の変化を検出することにより為されてよい。なお、判定結果を表す変数がプログラムのコード中に存在していないときには、後に説明される如く、検査の実施に先立って、判定結果を表す変数を与えるコード(プローブコード)の挿入が行われてよい。
更に、上記の如き「遷移回数」又はその関数値を指標に於いて、「遷移回数」の基準回数が設定されてよく、被検査プログラムの実行は、かかる「遷移回数」の基準回数を目標として実施されてよい。その場合、目標となる基準回数を母数として、母数に対する「遷移回数」の割合である「遷移網羅率(遷移カバレッジ)」が算出されてよい。具体的には、遷移網羅率は、下記の式により算出される。
観察する入力変数又は処理の「遷移」が一つの場合、
遷移網羅率=(遷移回数)/(母数) …(1)
観察する入力変数又は処理の「遷移」が複数の場合、
遷移網羅率=Σ(個別遷移回数)/Σ(個別母数) …(2)
ここで、個別遷移回数は、観察する入力変数又は処理の遷移回数の各々の遷移回数であり、個別母数は、観察する入力変数又は処理の遷移回数の各々に対して、それぞれ、設定される基準回数であり、全てが同一の回数であっても、観察する入力変数又は処理の遷移回数の各々に対して互いに異なる回数であってもよい。Σは、個別遷移回数又は個別母数の総和であり、上記の式(2)の場合、これを参照することにより、被検査プログラムの実行の全体に於ける入力変数又は処理の遷移の程度を把握することが可能となる。なお、上記の式(2)の被検査プログラムの実行の全体の遷移網羅率の算出に於いて、被検査プログラムによっては、複数の観察する入力変数又は処理のうち、一部の遷移の発生する(時間当たり又はサイクル当たりの)頻度が高く、その高頻度の遷移を発生する入力変数又は処理が、その他の入力変数又は処理に比して大幅に、対応する個別母数を超えて遷移することで、遷移網羅率が高くなってしまうことが起き得る。そこで、観察する入力変数又は処理の「遷移」が複数の場合には、より好適には、遷移網羅率の演算に於いて勘定される個別の遷移回数の上限を設けるべく、遷移網羅率は、下記の式にて与えられてよい。
遷移網羅率=Σmin{個別遷移回数,個別母数}/Σ(個別母数) …(3)
ここで、min{個別遷移回数,個別母数}は、遷移回数と個別母数とのうちの低い方を選択する関数である。即ち、この場合、個別遷移回数が個別母数を超えた入力変数又は処理の遷移について、個別母数を超えた分の回数は、遷移網羅率の演算に寄与させないようにすることが可能なる。
なお、観察する入力変数又は処理の「遷移」が複数の場合に、遷移網羅率は、観察する入力変数又は処理の「遷移」毎に算出されてもよいことは理解されるべきである。
上記の遷移回数に対する基準回数である母数(又は個別母数)は、任意に、実験的に、経験的に又は理論的に設定されてよい値であり、好適には、検査された実行結果を得るのに要した被検査プログラムの実行量が“プログラムの動的な振る舞い”の検査に於いて十分な程度となる「遷移回数」の値に設定される。これにより、「遷移網羅率」が100%であれば、検査された実行結果を与える被検査プログラムの実行量は、十分な程度を満足しているということを確認できることとなる。そして、「遷移網羅率」に対して、例えば、“プログラムの動的な振る舞い”の検査に於いて被検査プログラムの実行量として許容可能な基準値を設定すれば、「基準値」は、“プログラムの動的な振る舞い”についてのカバレッジに対する基準(カバレッジ基準)であるということができる。また、遷移網羅率に対するカバレッジ基準は、観察する入力変数又は処理の「遷移」の発生速度に応じて適宜調節されてよく、通常、比較的緩い基準であるので、検査に於ける“プログラムの動的な振る舞い”の網羅の基準として有利に利用することが可能である。
プログラムの検査処理過程
以下、図3を参照して、被検査プログラムの検査に於いて、検査開始前から本発明による入力変数又は処理の「遷移回数」及び「遷移網羅率」の算出の処理(以下、「本発明による遷移計数処理」と称する。)までを説明する。
本発明による遷移計数処理を被検査プログラムの検査に適用する場合、まず、被検査プログラムの実行中の「遷移回数」の計数に先立って、被検査プログラム中のコード構文の解析が実行される(ステップ10)。ここでは、被検査プログラム中の条件判定文コード(例えば、If文、Case文など)、状態参照文コード(関数文コード、その他の入力変数を用いて演算処理を実行するコード)の探索が為され、それらのコードに於いて、観察対象とされる入力変数及び/又は判定処理の結果を表す変数が探索及び/又は選択される。具体的には、入力変数及び/又は処理の「遷移」の観察のために、観察対象となる変数が決定される。また、観察対象となる変数に関して、全ての入力変数と判定処理の結果とが観察対象とされてもよいが、そのうちのいつくかを観察対象とされる入力変数及び/又は判定処理として選択されてよい。
更に、観察対象となる変数に関して、既に触れた如く、被検査プログラム中に於いて、観察対象とされる入力変数及び/又は判定処理の遷移を検出するためのプローブコードの挿入が必要に応じて為されてよい(ステップ12)。実際の被検査プログラムでは、判定処理の結果状態に対して変数の割り当てがなかったり、変数がすぐに書き換えられるなどして、本発明による遷移計数処理によって、被検査プログラムを実行中のコンピュータのメモリに対してアクセスしても、入力変数及び/又は判定結果に遷移があったか否かの検出が困難なことがある。例えば、If文等の条件判定文コードの場合、判定処理の結果状態は、それを表す変数がコード上に存在していないことがあり、そうすると、そのままの状態では判定結果の転換を検出することが困難である。また、被検査プログラムのコード中に、入力変数や判定処理の結果状態を表す変数が存在している場合であっても、それらの値が本発明による遷移計数処理によって読み出される時点で、それまでの状態が書き換わってしまっていると、遷移を正確に計数することが困難となり得る。そこで、上記の如く、本発明の遷移計数処理に従って被検査プログラムを実行中のコンピュータのメモリにアクセスしたときに、入力変数及び/又は判定結果に遷移が検出できるように、入力変数及び/又は判定処理の判定結果の状態を表す変数を割り当てるコード(プローブコード)の挿入が適宜為されてよい。
なお、上記のプローブコードの挿入は、典型的には、被検査プログラムを実行するハードウェア又はコンピュータが、本発明による遷移計数処理を実行するコンピュータとは別体であり、デバッガを用いて、被検査プログラムを実行中のコンピュータのメモリにアクセスする形式のとき(図1(C)参照)、或いは、被検査プログラムを実行するコンピュータと本発明による遷移計数処理を実行するコンピュータとが同一のコンピュータであっても、被検査プログラムの実行処理と本発明による遷移計数処理とが独立して実行されるとき(図1(D)参照)などに適宜実行されてよい。任意に被検査プログラムを実行するハードウェア内のプログラムの実行状態にアクセスできるデバッガを用いる場合、エミュレータを利用することで被検査プログラムの実行中に任意のメモリにアクセスできる場合など、被検査プログラムの実行中に、それを実行しているコンピュータのメモリに適宜アクセスできる場合には、プローブコードの挿入は必須ではない。
上記のコード、入力変数、判定処理の結果の探索の処理、プローブコードの挿入処理は、そのためのプログラムを用いてコンピュータの処理により実行可能である(これらの処理は検査の実施者によりなされてもよい。)。遷移の観察の対象とする入力変数及び/又は判定処理の選択は、そのためのプログラムを用いてコンピュータの処理により実施されてもよく、検査の実施者により為されてもよい。
上記の如く、被検査プログラムの実行中に観察対象とする変数が決定されると、観察される入力変数及び/又は判定処理の遷移の遷移網羅率の算出に利用される個別母数の設定が為されてよい(ステップ14)。個別母数は、上記の如く、典型的には、検査された実行結果を得るのに要した被検査プログラムの実行量が“プログラムの動的な振る舞い”の検査に於いて十分な程度となる「遷移回数」の値に設定されてよい。なお、既に述べた如く、個別母数は、全て同一の値であってもよく、観察対象となる入力変数及び/又は判定処理の各々について別々の値に設定されてもよい。また更に、被検査プログラムの全体の遷移網羅率の算出に利用される母数が、設定された個別母数の総和により与えられてよい(ステップ16)。なお、個別母数が全て同一の値であるときには、母数は、
(観察対象の変数の数)×(個別母数)
により与えられる。
かくして、被検査プログラムの実行中に於いて、観察対象とする変数である入力変数及び/又は出力値の取得と、変数の値が変化又は転換する回数、即ち、「遷移」の回数の計数とが実行される(ステップ18)。被検査プログラムの実行は、既に述べた如く、本発明による遷移計数処理を実行するコンピュータにて為されてよく、或いは、別のハードウェア又はコンピュータにて為されてもよい。具体的には、被検査プログラムの実行が、コンピュータ上のシミュレーションにて実施されるときには、任意に準備された入力パターンを用いて被検査プログラムに従った演算処理が実行され、その間に、観察対象となる変数、即ち、入力変数の値及び/又は判定処理の判定結果を表す変数の値が逐次的に参照される。また、実機ベンチ、HILS、PILS等の別のハードウェアを用いて被検査プログラムに従ったハードウェアの作動を実施する場合には、任意に準備された入力パターンを用いて被検査プログラムに従ってハードウェアを動作している状態或いはその他の任意の状態にてハードウェアを動作している状態(例えば、実車、エンジンベンチなどでのモード走行試験など)に於いて、デバッガを通じて、任意に設定された期間に亘ってコントローラから観察対象となる変数の値が逐次的に参照される(図1(C)参照)。そして、いずれの場合も、それらの各々について値の遷移があったときに、個別遷移回数として、遷移の回数が別々に計数される。なお、変数が実質的に連続な値である場合、例えば、物理的なセンサ値の出力値など、アナログ式に計測された値をディジタル化して得られた値である場合には、任意に変数値域を区分分けして、変数値の区分が変わったときに、遷移があったと判定されてよい。例えば、或る変数Xについて、変数値域を下記の如く、A〜Dに区分し、
A:[X<x0];
B:[x0≦X<x1]
C:[x1≦X<x2]
D:[x2≦X]
Xの属する区分が変わったときに、遷移があったとして、計数するようになっていてよい。
かくして、観察対象となる変数の個別遷移回数が得られると、その個別遷移回数を、各々の変数に対応する個別母数で除することにより、個別遷移網羅率が算定される(図示せず)。一方、被検査プログラム全体の遷移網羅率が、式(2)、(3)を用いて算出されてよい(ステップ20、22)。
そして、個別遷移網羅率又は遷移網羅率が算出されると、既に述べた如く、個別遷移網羅率又は遷移網羅率が所定の基準値に達しているか否かの判定が為されてよい(ステップ24)。この処理は,プログラムに従ったコンピュータの処理によって為されてもよく、或いは、実施者により為されてよい。これにより、検査された被検査プログラムの実行結果の網羅している程度の確認又は評価が可能となり、個別遷移網羅率又は遷移網羅率を参照して、追加の検査のための被検査プログラムの実行をするかどうかなどを決定することが可能となる。
被検査プログラムの実行結果値の判定は、通常の態様にて適宜為されてよい。判定処理は、具体的には、実行結果値が、所定の値域内、例えば、その被検査プログラムの実行に於いて想定又は期待される範囲内に収まっているか否かを判定するなどであってよい。この点に関し、本発明の場合には、通常、少なくとも数回程度の入力変数又は処理の遷移があり、その間の実行結果値が得られることとなるので、被検査プログラムの実行中の逐次的な実行結果値のそれぞれが所定の値域内にあるか否か、或いは、その実行結果値の変化率又は変化幅が所定の値域内にあるか否か、といったことも検査されてよい。かかる被検査プログラムの実行結果値の判定は、本発明による遷移計数処理を実行するコンピュータにて為されてよく、或いは、別のハードウェア又はコンピュータにて為されてもよいことは理解されるべきである。
具体的な適用例
例として、図4、5に示されている簡単なプログラムについて、本発明による遷移計数処理を適用する場合について説明する。
まず、図4のブロック図を参照して、ここで例示されている被検査プログラムは、或る制御用プログラムの一部であり、所定のイベント入力(event)が生じたこと(rizeEdge)をトリガーとして、センサ入力(sensorInput)の値を読み込み、トリガー(イベント入力の立ち上がり)が所定の回数に達する毎に、それまでのセンサ入力の平均値を算出する、という構成を有している。その全体の処理の流れに於いては、図5(A)に示されている如く、初めに、トリガーのカウント値(count)、センサ入力の加算値(sum)、センサ入力の平均値(average)の初期化を行い(SE1〜SE3)、トリガーの有無を検出する処理(SE4)と、トリガーのカウント、センサ入力の加算・平均値の算出を行う処理(SE5)が行われる。そして、センサ入力の平均値が、所定の範囲内にある限り、センサ入力の平均値の算出処理が反復実行され、センサ入力の平均値が、所定の範囲内を逸脱すると、エラーの発生として処理が停止される(SE7)。
かかるプログラムに於いて、イベント入力(event)は、0か1の値を取るよう設定され、トリガーの有無を検出する処理(SE4)では、図5(B)に示されている処理がエラーの発生まで反復される。具体的には、まず、イベント入力の発生を表すrizeEdgeの初期化(=OFF)を行った後(SF1)、今回のイベント入力(event)と前回のイベント入力(eventOld)との差が1となったとき(SF2)、即ち、eventが0から1に変化したときに、イベント入力が発生したとして、rizeEdgeがONに設定される(SF3)(即ち、eventが0のままのとき、1のままのとき及び1から0に変わったときには、OFFのままである。)。そして、今回のイベント入力(event)が次回のサイクルのために前回のイベント入力(eventOld)として保存される(SF4)。
次に、センサ入力の平均値の算出を行う処理(SE5)に於いては、図5(C)に示されている処理がエラーの発生まで反復される。具体的には、まず、トリガーの有無、即ち、rizeEdge=1か否かが判定される(SG1)。ここで、トリガーが無いとき、即ち、rizeEdge=0のときには、何ら処理を実行することなく、処理が終了する(次いで、SE6の判定が行われる。)。一方、rizeEdge=1のときには、それまでのトリガーの数が所定の数(図示の例では、3)に達しているか否かが判定される(SG2)。トリガーの数が所定の数に達していない場合、トリガーのカウントが1カウントだけ加算され(SG5)、センサ入力の加算が為される(SG4)。かかる処理が繰り返され、トリガーの数が所定の数に達すると(SG2:count=3)、それまでのセンサ入力の加算値(sum)をトリガーのカウント値(count=3)により除算することにより、それまでのセンサ入力の平均値(average)が算出される(SG5)。そして、それまでのセンサ入力の加算値とトリガーのカウント値とがリセットされる(SG6、SG7)。なお、上記のプログラム中で決定される変数(rizeEdge,count,sum,average)の値は、各々、プログラムの実行中に於いて、それに対する書き換え処理が実行されない限りは、メモリに保持される。(sensorInputは、センサ入力によって変化する。)従って、rizeEdge=0の場合は、count,sum,averageの各値は、そのまま、メモリ内に保持されていることとなる。
上記の例示の被検査プログラムに於いて、例えば、センサ入力の平均値の算出を行う処理(SE5:図5(C))の条件判定文コードに於ける判定結果の遷移、具体的には、SG1とSG2の条件判定文コードの判定結果の遷移について、本発明による遷移計数処理を実行する場合には、観察対象の変数は、SG1とSG2の判定結果の状態を表す変数となる。この点に関し、観察対象となるSG1とSG2の判定結果の遷移をより確実に検出できるようにすべく、図示のSP1、SP2の如く、判定結果の遷移を検出可能にするプローブコードを挿入されてよい。特に、被検査プログラムの実行と、本発明による遷移計数処理の実行が、別々のハードウェアやコンピュータで実施されている場合、本発明による遷移計数処理による観察対象の変数のメモリ領域へのアクセスは、所定のタイミングで行われることがある。そうすると、観察対象の変数がプログラムの実行中に頻繁に変化する値であるときには、観察対象の変数のメモリ領域へのアクセスのタイミングによっては、検出される状態(例えば、判定結果の状態を表す変数の値)が判定処理時とは違っている場合が起き得る。そこで、好適には、図示の如く、各条件判定文コードの直前に、条件判定文コードで参照する変数に対して、別の変数を割り当てて、別のメモリ領域に値が保存されるようになされてよい。図示の例の場合、SG1で参照される状態は、rizeEdge=1であるか否かの状態であり、SG2で参照される状態は、count=3であるか否かの状態である。ここで、SG1で参照されるrizeEdge=1であるか否かの状態は、SE4:図5(B)で決定されるので、SE5の実行中のSG1の処理の後、その処理の結果を見に行くとき(例えば、図5(C)のReturnの際)の前までに、SE4:図5(B)にてrizeEdgeの状態が変わると、SG1での判定結果がいずれであったかが不明となってしまう。また、SG2で参照されるcount=3であるか否かの状態は、SG2の判定の後、SG3又はSG7に於いて、countの値が書き換えられるため、やはり、countの値を見に行くときがSG3又はSG7の後となったときには、SG2の判定結果が不明確となり得る。従って、例示の処理の場合には、SG1の直前にてコードSP1が挿入されて、SG1で参照されるrizeEdge=1であるか否かの状態が変数probeAに保存され、SG2の直前にてコードSP2が挿入されて、SG2で参照されるcount=3であるか否かの状態が変数probeBに保存されるようになっていることが好ましいことなる。(probeAとprobeBの値は、それぞれ、SP1、SP2が実行されるまで保存される。)
かくして、上記の被検査プログラムの実行中に於いて、probeAとprobeBとの値が、逐次的に、例えば、センサ入力の平均値の算出を行う処理(SE5:図5(C))が終了する毎に取得され、probeAとprobeBのそれぞれについて、値の遷移があったとき、それがそれぞれの個別遷移回数として計数され、検査の網羅の程度の確認又は評価に利用される。また、個別母数が設定されている場合には、個別遷移回数と個別母数を用いて、個別遷移網羅率及び/又は処理全体の遷移網羅率が算出され、検査の網羅の程度の確認又は評価に利用されてよい。
図6(A)は、本発明による遷移計数処理に従って算出された遷移網羅率が100%となる場合、即ち、probeAとprobeBとの遷移が100%の遷移網羅率を満たす場合、のセンサ入力の平均値の算出を行う処理(SE5:図5(C))の入力変数と出力値のタイムチャートを示している。図示の例に於いては、センサ入力の平均値averageが100の状態で、SE6の判定でセンサ入力sensorInputの値が130となり、サイクルが反復するうちに、エラー判定が生ずる状態を例示している。また、probeA(rizeEdge=1であるか否かの判定)とprobeB(count=3であるか否かの判定)の遷移に対する個別母数は、それぞれ、6、3としている。なお、比較例として、従前のコード網羅率(令網羅率と条件判定網羅率)が100%となる検査結果の例を図6(B)に示している。同図の表では、test1の状態を所与の状態とし、そこから、100%のコード網羅率を満たすように入力が変化した状態までが示されている。
まず、図6(B)の100%のコード網羅率を満たす結果について参照すると、コード網羅率による検査結果の網羅の程度の確認によれば、SE5:図5(C)の処理経路の各々を一度通過すれば、コード網羅率が100%となり、検査されるべき全範囲を網羅したとみなされることとなる。しかしながら、図6(B)の表から理解される如く、その検査範囲は、時間方向では、3サイクルであり、もし100%のコード網羅率が満たされた時点で検査を終了してしまうと、sensorInputの値がエラーの判定の出る値に変化しているにもかかわらず、センサ入力の平均値averageに於いて、エラーの判定が出るまで、検査が実施されないこととなる。即ち、このことは、コード網羅率が100%であっても、検出されるプログラムの動的振る舞いが見逃される可能性が高いことを示唆している。
一方、図6(A)に例示されている如く、遷移網羅率が100%となる検査に於いては、センサ入力の平均値averageに於いてエラー判定がOKからNGに変化する状態を網羅できていることが理解される。このことは、遷移回数に対する母数を適宜設定すれば、遷移網羅率が100%となる場合に、検査したいプログラムの動的振る舞いを網羅できている可能性が高くことを示唆しており、従って、この例によれば、本発明による遷移計数処理に従って遷移回数又は遷移網羅率を参照することにより、より信頼性高く、プログラムの動的振る舞いが網羅されている程度の確認又は評価ができることを示唆している。
以上の説明は、本発明の実施の形態に関連してなされているが、当業者にとつて多くの修正及び変更が容易に可能であり、本発明は、上記に例示された実施形態のみに限定されるものではなく、本発明の概念から逸脱することなく種々の装置に適用されることは明らかであろう。