(57)【要約】【課題】  条件分岐を含み、複数の演算経路が存在する構造を有するプログラムでも、全ての演算経路について、或る指定された現象の有無の検査とその現象を与える入力テストパターンが検出できるプログラム検査装置を提供すること。【解決手段】  本発明のプログラム検査装置は、プログラムの実行に於いて生じ得る演算経路の全てを検出し記憶し、記憶された演算経路の全てのうちの選択された一つについて、その入力値の生成と、指定現象の発生の有無の探索のための最適化処理を実行し、指定現象が検出されないときには、記憶された演算経路のうちの別の演算経路について、その入力値の生成と、指定現象の発生の有無の探索のための最適化処理と反復実行する。【選択図】        図２
2015197868.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの作動に於ける指定現象の発生の有無を検査する装置であって、
前記プログラムの実行に於いて生じ得る演算経路の全てを検出し、前記検出された演算経路の全てを記憶する演算経路記憶手段と、
前記記憶された演算経路の全てのうちの一つを選択する演算経路選択手段と、
前記選択された一つの演算経路を実行させる入力値の生成を実行する入力生成手段と、
前記生成された入力値を初期入力値として用いて前記選択された一つの演算経路に於いて前記プログラムの最適化処理を実行する最適化処理手段と、
前記最適化処理の実行により得られた前記プログラムの結果出力値が前記指定現象の発生に相当する前記プログラムの実行により算出される結果出力値の値域である指定現象結果出力値域に包含されるか否かの判定を実行する結果出力値判定手段と、
を含み、前記最適化処理手段による前記最適化処理の実行により得られた前記プログラムの結果出力値の前記指定現象結果出力値域までの距離が最小となったときに前記結果出力値が前記指定現象結果出力値域に包含されず、且つ、前記記憶された演算経路の全てのうちのまだ選択されていない演算経路が存在するときには、そのうちの一つが前記演算経路選択手段により選択され、前記新たに選択された演算経路を前記選択された一つの演算経路として用いて、前記入力生成手段による前記入力値の生成と、前記最適化処理手段による前記最適化処理と、前記結果出力値判定手段による前記判定とを反復して実行する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・プログラム又はソフトウェアの検査を行う装置に係り、より詳細には、コンピュータ・プログラム又はソフトウェアによる不具合現象などの任意の指定された現象（指定現象）の発生の有無を検査するとともに、その指定現象を発生する入力（テストパターン）を検出するための装置に係る。
【背景技術】
【０００２】
コンピュータ技術の進歩により、現在、多くの装置や機械器具は、コンピュータ制御によって作動される。かかるコンピュータ制御に於いては、典型的には、装置や機械器具の作動を決定するコンピュータ・プログラム又はソフトウェア（以下、単に、「プログラム」と称する。）が、装置や機械器具に搭載されるコンピュータに実装され、或る入力が装置又は機械器具に対して為されると、ＣＰＵが、プログラムに従って、その入力に対応する出力を算定する演算処理を実行し、算定された出力に対応してアクチュエータ等の部位が駆動されることとなる。従って、コンピュータ制御される装置や機械器具が確実に正常に作動するためには、プログラムの装置又は機械器具の制御用コンピュータへの実装に際して、プログラム内のデバッグやエラー検証を行っておくことは勿論のこと、装置又は機械器具に与えられ得る任意の入力に対して、コンピュータ制御による装置又は機械器具の作動に於ける不具合現象、例えば、ハンチング、値の急変（動作量の急変など）、値の所定の範囲外への逸脱、といった現象が発生しないように、プログラムを調製しておくことが必要である。この点に関し、人の作業で不具合現象の有無を検出するテストは、工数が膨大であり、且つ、思考の抜け漏れによって、不具合現象の見逃しが生ずる懸念が存在する。そこで、従前より、プログラムの実装に際して、上記の如き、装置又は機械器具の作動に於ける不具合現象の発生のないことの確認をコンピュータで行う技術が種々提案されている。
【０００３】
そのようなコンピュータを用いて、検査されるべきプログラムによる不具合現象の有無を検出するテストを行う例として、例えば、非特許文献１や特許文献１に於いては、検査されるべきプログラムにテストパターンを入力してプログラムを実行して結果出力を解析する動的テストの手法が開示されている。これらの動的テストでは、端的に述べれば、まず、不具合現象に相当するプログラムの結果出力値の値域が特定され、次いで、テストパターンの入力を用いたプログラムの実行により得られた結果出力値が、不具合現象に相当する値域に近づくように、テストパターンの入力を変化させながら、プログラムの実行による結果出力値の算定が反復して実行される（かかる反復演算過程は、「最適化処理」と称される。）。そして、或るテストパターンの入力に対して、不具合現象に相当する値域に入る結果出力値が算出されたときには、そのプログラムは、不具合現象が発生し得ると判定されるとともに、そのテストパターンが不具合現象を発生するパターンであると特定され、結果出力値が不具合現象に相当する値域に最も近づいたときでも、不具合現象に相当する値域に入らない場合には、そのプログラムは、不具合現象が発生せず、不具合現象を発生するテストパターンが存在しないと判定される。また、スナップショット、ＡＴＧ（Automated  Test  Generation）ツールといったプログラム検査技術（例えば、特許文献２）では、プログラム内に、条件分岐が含まれている場合に、そのプログラム中に実行され得る全ての演算処理経路の検出、及び／又は、それぞれの経路の演算処理を実行させる入力のテストパターン又はテストベクターの自動生成を行う手法が実行される。更に、プログラムの実行結果に起き得る不具合や観察したい事象の全ての検出にＳＡＴ（充足可能性問題）ソルバーを利用することが行われている。また、更に、コンコリック・テスティング（Concolic  testing）と称される手法に於いては、或る入力によるプログラムの実行、記号実行による分岐点における分岐条件の検出、実行されなかった経路を実行するための入力の作成、及び、新たに作成された入力による別の経路によるプログラムの実行の処理の反復実行が行われる（非特許文献２）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−００２３７０
【特許文献２】特開２００６−２４４１９５
【非特許文献】
【０００５】
【非特許文献１】ツールズ・アンド・アルゴリズム・フォー・ザ・コンストラクション・アンド・アナリシス・オブ・システムズ  レクチャー・ノーツ・イン・コンピュータ・サイエンス、６６０５巻  ２０１１年  ２５４−２５７ページ、アンピュリディ他４名（Tools  and  Algorithms  for  the  Construction  and  Analysis  of  Systems  Lecture  Notes  in  Computer  Science  Volume  6605,  2011,  pp254-257  S-TaLiRo:  A  Tool  for  Temporal  Logic  Falsification  for  Hybrid  Systems,  Yashwanth  Annpureddy,  Che  Liu,  Georgios  Fainekos,  Sriram  Sankaranarayanan）
【非特許文献２】ソフトウェア・テスティング・マニアＸ  ７巻  １ページ  （Software  Testing  ManiaX  vol.7  1）「最近出てきたテスト技法」辰巳敬三
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の如く、プログラムの開発では、不具合現象を検出するためのテストが重要であり、開発の効率化や不具合現象の見逃しの削減を狙って、テスト手法の一つとして、上記の如き「最適化」処理を用いた手法を利用した動的テスト自動生成技術が提案されている。しかしながら、演算処理に、条件分岐処理が含まれ、これにより、結果出力値に離散的な部分と連続的な部分とが混在するプログラムに対して、「最適化」を用いた手法を用いた検査手法を利用すると、失敗することが多く、結果出力値に不具合現象が生ずる場合であっても、そのことを正しく検出することが困難となり、従って、そのプログラムに於いて不具合現象が生ずる入力値又はテストパターンを検出することも困難となる場合がある。
【０００７】
より具体的に述べれば、被検査プログラムに於いて条件分岐処理（Ｉｆ文など）が含まれているとき、その被検査プログラムによる演算処理は、条件によって、複数の異なる演算経路のいずれかに沿って実行され、異なる演算経路を経て算定された結果出力値の値域は、互いに離散的に隔離していることが多い。一方、「最適化」による不具合現象の有無の検出処理では、既に触れた如く、或る初期入力値を被検査プログラムへ入力してプログラムを実行して結果出力値を算出し、次いで、その結果出力値が不具合現象に相当する結果出力値の値域に近づくように連続的に入力値を変化させながら、プログラムの実行による結果出力値の算出が繰り返すという処理が実行されることとなる。そうすると、異なる演算経路を経て算定された結果出力値の値域が互いに離散的に隔離している場合には、或る初期入力値を用いて「最適化」処理が開始され、不具合現象に相当する結果出力値の値域に結果出力値を近づける入力値の変更と結果出力値の算出がされるとしても、入力値が、最初に用いた初期入力値からの「最適化」の処理で通過する経路とは、別の経路をも通過するように変更されて、「最適化」の演算処理が実行される保証はない。その場合、最初に用いた初期入力値からの「最適化」の過程で通過する経路以外の演算経路に潜む不具合現象を見逃してしまうおそれがある。
【０００８】
例えば、図２（Ａ）の例示されている如き、プログラムコードの場合、データフローとしては、図２（Ｂ）の如く、３つの経路が存在する。この構造を持つプログラムに於いて、Ｐが、９９．９９…％の確率で、Trueとなる状況の場合、経路１を通る演算によって変数ａが選択されるので、変数ａによる最適化処理（即ち、変数ａの値の変化によって発生する不具合現象の有無の検証）は実行されるが、経路２を通る演算によって変数ｂが選択されることは稀であり、結局、変数ｂによる最適化処理が実行されず、即ち、経路２を通る演算で変数ｂの値の変化によって不具合現象が発生するか否かは検知できないこととなる。
【０００９】
一方、最適化処理と別の手法の既存の検証ツールのうち、ＳＡＴソルバーのような、全ての入出力空間の点に対して網羅的な検証を行うツールは、時系列に入出力が為される処理のように、空間点が膨大であり、検証対象空間が広過ぎる場合には、不具合現象の発生する特定の点を検出することは、困難である（特に、費用と時間がかかる。）
【００１０】
かくして、本発明の一つの課題は、被検査プログラムが、条件分岐処理を含み、これにより、複数の演算経路が存在する構造を有し、それらの演算経路の結果出力値の値域が離散的である場合でも、全ての演算経路について、最適化処理による不具合現象など、或る指定された現象（指定現象）の有無の検査ができ、指定現象を発生するテストパターンが検出できる新規なプログラム検査装置を提供することである。
【課題を解決するための手段】
【００１１】
本発明によれば、上記の課題は、プログラムの作動に於ける指定現象の発生の有無を検査する装置であって、前記プログラムの実行に於いて生じ得る演算経路の全てを検出し、前記検出された演算経路の全てを記憶する演算経路記憶手段と、前記記憶された演算経路の全てのうちの一つを選択する演算経路選択手段と、前記選択された一つの演算経路を実行させる入力値の生成を実行する入力生成手段と、前記生成された入力値を初期入力値として用いて前記選択された一つの演算経路に於いて前記プログラムの最適化処理を実行する最適化処理手段と、前記最適化処理の実行により得られた前記プログラムの結果出力値が前記指定現象の発生に相当する前記プログラムの実行により算出される結果出力値の値域である指定現象結果出力値域に包含されるか否かの判定を実行する結果出力値判定手段とを含み、前記最適化処理手段による前記最適化処理の実行により得られた前記プログラムの結果出力値の前記指定現象結果出力値域までの距離が最小となったときに前記結果出力値が前記指定現象結果出力値域に包含されず、且つ、前記記憶された演算経路の全てのうちのまだ選択されていない演算経路が存在するときには、そのうちの一つが前記演算経路選択手段により選択され、前記新たに選択された演算経路を前記選択された一つの演算経路として、前記入力生成手段による前記入力値の生成と、前記最適化処理手段による前記最適化処理と、前記結果出力値判定手段による前記判定とを反復実行する装置によって達成される。
【００１２】
上記の構成に於いて、「指定現象」とは、典型的には、既に触れた如き、ハンチング、値の急変（動作量の急変など）、値の所定の範囲外への逸脱、などの、プログラムの作動に於いて望ましくない不具合現象であるが、本発明の構成に於いては、指定現象が必ずしも不具合現象でなくてもよく、任意に指定される現象であって、プログラムの結果出力値に於いてその指定現象の発生に相当する値域が定義できる現象であってよいことは理解されるべきである。「プログラムの最適化処理」とは、既に述べた如く、プログラムの実行により得られる結果出力値が、指定現象の発生に相当する値域に近づくように、入力値を変化させながら、プログラムの実行による結果出力値の算定を反復して実行する処理である。そして、かかる反復処理は、結果出力値が指定現象の発生に相当する値域に包含されるか、結果出力値の、指定現象の発生に相当する値域までの距離（結果出力値と値域との間のスカラー量）が最小となったときに終了する。また、上記の一連の処理のうち、演算経路選択手段によるプログラムの実行に於いて生じ得る演算経路の全ての検出は、スナップショット、ＡＴＧツールといった任意のアルゴリズムを用いて達成可能である。入力生成手段による選択された一つの演算経路を実行させる入力値の生成は、例えば、ＳＡＴソルバーなどの任意のアルゴリズムを用いて達成可能である。プログラムの最適化処理は、種々の既存のアルゴリズムを用いて達成可能である。
【００１３】
上記の本発明の装置の作動に於いては、端的に述べれば、まず、或る検査されるべきプログラムに於いて、生じ得る演算経路の全ての検出が為され、それらの演算経路の各々について、個別に、順々に、最適化処理が実行され、プログラムの最適化処理による指定現象の発生の有無が検査されることとなる。そして、指定現象が不具合現象である場合、一連の処理の実行中に、不具合現象に相当する値域に結果出力値が包含することが検出されれば、その時点で、処理を中断し、かかる結果出力値を与えた入力値が、指定現象を発生するテストパターンとして検出され、プログラムは、修正されるべきものとして判定されてよい。かかる構成によれば、プログラムが、条件分岐処理を含み、複数の演算経路が存在する構造を有し、従って、プログラムの結果出力値の値域が離散的な部分と連続的な部分とを含む場合であっても、全ての複数の演算経路に於ける最適化処理が実行できることとなるので、指定現象又は不具合現象の見逃しが低減されることとなり、例えば、発生する確率の低い演算経路に於いて指定現象又は不具合現象が発生する場合も見逃すことなく検出できる確率が大幅に増大することとなる。
【００１４】
なお、上記の構成に於いて、更に、最適化処理の実行中に選択された演算経路の途中で算出される中間演算値を参照して、選択された演算経路に沿って演算が実行されているか否かを判定する中間演算値監視手段が設けられていてよい。演算経路に沿って演算が実行されているか否かの判定は、例えば、参照された中間演算値が所定の値域内に包含されているか否かを判定することにより達成可能である。かかる構成によれば、最適化処理の途中で、検査されている演算経路が意図されているもの（選択されているもの）であるか否かを監視することができ、もし検査されている演算経路が選択されているものでないことが分かれば、指定現象結果出力値域の変更を行い、選択されている演算経路に沿った演算処理が確実に実行されるように処理の修正を実行することが可能となる。
【発明の効果】
【００１５】
かくして、上記の本発明によれば、被検査プログラムに、結果出力値の値域が離散的に隔離した複数の演算経路に沿った処理が発生可能な構造が有る場合に於いて、結果出力値の値域が離散的に隔離されている部分と連続している部分とが存在していることを考慮し、演算経路毎に、最適化処理を実施することにより、全ての演算経路について、或いは、検証すべき対象空間が広い場合であっても、最適化処理による指定現象又は不具合現象の有無の検査及びそれを発生するテストパターンの検出が可能となる。特に、検査されるプログラムが装置や機械器具の作動のコンピュータ制御のためのプログラムであり、装置や機械器具の作動に離散的な挙動が含まれる場合であっても、指定現象（不具合現象とは限らない。）の検出が効率的に達成できることが期待される。また、本発明の装置は、プログラムの作動に於ける指定現象又は不具合現象の検出とその指定現象又は不具合現象を発生するテストパターンの検出が、人の作業によらず、自動的に実行されるので、プログラムの開発工数の低減、プログラム及び制御品質の更なる向上が期待される。
【００１６】
本発明のその他の目的及び利点は、以下の本発明の好ましい実施形態の説明により明らかになるであろう。
【図面の簡単な説明】
【００１７】
【図１】図１（Ａ）は、本発明によるプログラム検査装置を模式的に表した図であり、図１（Ｂ）は、その内部の処理部の構成をブロック図の形式で表した図である。なお、図中、矢印は、情報の流れを示している。
【図２】図２（Ａ）は、本発明によるプログラム検査装置により検査されるプログラムのコードの一部の例を示しており、図２（Ｂ）は、図２（Ａ）のプログラムコードのデータフローグラフを示している。図２（Ｃ）は、図２（Ａ）のプログラムのコードに含まれる複数の演算経路を別々に分解して表したデータフローグラフを示している。
【図３】図３（Ａ）は、本発明によるプログラム検査装置に於ける最適化処理の流れを説明する図であり、図３（Ｂ）は、最適化処理に於いて、最小化されるロバスト値について説明する図である。図３（Ｃ）、（Ｄ）、（Ｅ）は、最適化処理に於ける入力値、出力値、ロバスト値の変化の態様を説明する模式的なグラフ図である。
【図４】図４（Ａ）は、本発明によるプログラム検査装置に於ける処理をフローチャートの形式にて表した図であり、図４（Ｂ）は、図４（Ａ）の処理が実行される場合の入力値の値域と出力値の値域と演算経路と出力値の軌跡の関係の例をグラフ図の形式にて模式的に表した図である。図中、矢印は、最適化処理に於いて算出される出力値の軌跡を模式的に描いたものであり、●が、初期値に対する出力であり、矢印先端が、最終到達点である。
【図５】図５（Ａ）は、本発明によるプログラム検査装置の図３（Ａ）の実施形態に於いて実行される最適化処理の一部を改良した処理をフローチャートの形式にて表した図であり、図５（Ｂ）は、図５（Ａ）の処理が実行される場合の入力値の値域と出力値の値域と演算経路と出力値の軌跡の関係の例をグラフ図の形式にて模式的に表した図である。図中、矢印は、最適化処理に於いて算出される出力値の軌跡を模式的に描いたものであり、●が、初期値に対する出力であり、矢印先端が、最終到達点である。
【図６】図６は、本発明による処理が実行されない場合に於けるプログラム検査装置の最適化処理が実行される際の、入力値の値域と出力値の値域と演算経路と出力値の軌跡の関係の例をグラフ図の形式にて模式的に表した図である。図中、矢印は、最適化処理に於いて算出される出力値の軌跡を模式的に描いたものであり、●が、初期値に対する出力であり、矢印先端が、最終到達点である。
【符号の説明】
【００１８】
１…コンピュータ本体
２…コンピュータ端末
３…モニター
４…キーボード、マウス（入力装置）
【発明を実施するための最良の形態】
【００１９】
装置の概略
本発明によるプログラム検査装置は、この分野で通常使われている形式のコンピュータ装置１に於けるプログラムの作動により実現されてよい（図１（Ａ））。コンピュータ装置１には、通常の態様にて、双方向コモン・バスにより相互に連結されたＣＰＵ、記憶装置、入出力装置（Ｉ／Ｏ）が装備され、記憶装置は、本発明の演算で使用する演算処理を実行する各プログラムを記憶したメモリと、演算中に使用されるワークメモリ及びデータメモリを含んでいる。また、実施者によるコンピュータ装置１への指示及び計算結果その他の情報の表示及び出力は、コンピュータ装置１に接続されたコンピュータ端末装置２を通じて為される。コンピュータ端末装置２には、通常の態様にて、モニター３とキーボード並びにマウスといった入力装置４が設けられ、前記の各プログラムが起動されると、実施者は、前記の各プログラムの手順に従ってモニター３上の表示に従って、入力装置４を用いてコンピュータ装置１に各種の指示及び入力を行うとともに、モニター３上にてコンピュータ装置１からの演算状態及び演算結果等を視覚的に確認することが可能となる。なお、図示していないその他の周辺機器（結果を出力するプリンタ、計算条件及び演算結果情報等を入出力するための記憶装置など）がコンピュータ装置１及びコンピュータ端末装置２に装備されていてよいことは理解されるべきである。コンピュータ装置１を用いて、以下に述べる各種の処理又は演算を実行する際には、通常の態様にて、各種の処理又は演算に必要なプログラムが起動され、実施者は、コンピュータ端末装置２に於いて、プログラムに於いて準備された入力手順に従って、演算に必要なデータ、演算時の計算条件その他の各種設定を入力し、演算が開始される。そして、演算の実行中又は終了後に、演算結果が、適宜、コンピュータ端末装置２を通じて出力可能となる。
【００２０】
本発明によるプログラム検査装置の各処理を実行する構成に於いては、具体的には、図１（Ｂ）に示されている如く、検査されるべきプログラム（被検査プログラム）に於いて発生し得る演算経路の全てを検出する演算経路検出部と、検出された演算経路の全てを記憶する演算経路記憶部と、記憶された演算経路のうちの一つを選択する被検査演算経路選択部と、被検査プログラムに於ける発生の有無が判定される現象（指定現象）の目的関数（プログラムの実行による結果出力値の値域を決定する関数）を設定する指定現象目的関数設定部と、選択された演算経路に於いて後に詳細に説明される最適化処理を実行し、その演算経路に於いて指定現象が発生するか否かを判定する最適化処理部とが含まれる。また、最適化処理部に於いては、最適化処理に於いて最初に入力される初期入力テストパターンを生成する初期入力テストパターン生成部と、最適化処理の過程で得られる結果出力値と指定現象の目的関数の定める値域との距離（ロバスト値）を小さくするように修正された入力テストパターンを生成する修正入力テストパターン生成部と、生成されたテストパターンを入力して被検査プログラムを実行するプログラム実行部と、プログラム実行部の結果出力値が指定現象の目的関数の定める値域との距離を決定して結果出力値が指定現象の値域に包含されるか否かを判定する結果出力判定部とが設けられる。また、追加的に、プログラム実行部のプログラムの演算処理の途中の演算値（中間演算値）を参照して、演算処理が選択された演算経路に沿っているか否かを監視する中間演算値監視部が設けられていてもよい（図５の場合）。なお、これらの各処理部は、コンピュータ装置１に於けるプログラムに従った演算処理によって実現されることは理解されるべきである。
【００２１】
被検査プログラムの検査処理の構成
「発明の概要」の欄で述べた如く、或るプログラムに於いて、条件分岐処理（Ｉｆ文等）が含まれているとき、その被検査プログラムによる演算処理は、条件に依存して、複数の異なる演算経路のいずれかに沿って実行され、異なる演算経路を経て算定された結果出力値の値域は、互いに離散的に隔離していることが多い。例えば、図２（Ａ）のプログラムコードに例示されている如く、Ｐ、Ｑの状態による条件分岐が含まれていると、図２（Ｂ）のデータフローグラフに示されている如く、Ｐ、Ｑの状態によって、プログラムの実行が為され得る経路として、３つの経路、経路１、経路２、経路３が存在する。そして、この場合、経路１、経路２、経路３のそれぞれに沿って為された演算結果、即ち、結果出力の値は、それぞれ、変数ａ、ｂ、ｃとなり、変数ａ、ｂ、ｃがそれぞれ変化した場合に得られる結果出力値の値域は、通常、互いに離散的に隔離した値域となり得る。
【００２２】
一方、最適化処理によって指定の現象発生の有無の検査及び指定現象を発生させるテストパターンの検出又は生成を行う手法は、典型的には、検査されるべきプログラムの結果出力値の値域が実質的に連続的であることが前提となっており、プログラムの結果出力値の値域が離散的な値域であることは想定されていない。従って、被検査プログラムが、条件分岐処理を含んでいることなどによって、離散的に互いに隔離した結果出力値の値域を有する場合、或る一つの経路から開始された最適化処理だけでは、他の経路から発生する値域に潜む指定現象は、見逃される可能性が高くなる。
【００２３】
この点について、より詳細に説明すると、最適化処理による手法では、まず、図３（Ａ）に説明されているように、検査されるべきプログラムの結果出力値に於ける存在の有無が検査されるべき指定現象、例えば、ハンチング、値の急変（動作量の急変など）、値の所定の範囲外への逸脱、といった不具合現象、が指定され、結果出力値に於ける指定された指定現象に相当する値域が決定される。そして、検査されるべきプログラムへ初期値として入力されるテストパターンが生成され、プログラムの実行（典型的には、コンピュータ・シミュレーションによる）が為され、初期値に対する結果出力値が算定される。かくして算定された結果出力値は、入力テストパターン生成を実行する処理部へフィードバックされ、そこに於いて、算定された結果出力値と指定現象に相当する値域との間のロバスト値（具体的には、それらの間の距離又はスカラー量）が算出される。しかる後、算定されたロバスト値が小さくなるように、入力されるテストパターンの修正が実行され、修正されたテストパターンを用いたプログラムの実行、その結果出力値のフィードバック、ロバスト値の算出、テストパターンの修正の各処理が反復して実行される。
【００２４】
上記の最適化処理に於ける一連の処理によれば、最終的には、ロバスト値が０又はそれ以下となるか最小となるテストパターンの検出又は生成が可能となる。具体的には、例えば、図３（Ｃ）〜（Ｅ）に例示されている如く、指定現象に相当する出力値が図３（Ｄ）の線ｄの挙動であるプログラムの検査に上記の最適化処理を適用する場合、初めに（この段階では、実線ｄの挙動を与える図３（Ｃ）の実線ｄの入力値は、未知である。）、任意のテストパターンとして図３（Ｃ）の入力ａを与えると、最初に図３（Ｄ）の線ａの挙動が出力され、これにより、図３（Ｅ）のロバスト値ａが算出される。次いで、ロバスト値が得られた値（ａの値）よりも小さくなるようにテストパターンｂの生成（テストパターンａの修正）とプログラムへの入力が為され、プログラムの実行により、図３（Ｄ）の線ｂの出力値が得られ、これにより、図３（Ｅ）のロバスト値ｂが算出される。そして、ロバスト値を更に小さくするためのテストパターンの生成と入力、プログラムの実行、ロバスト値の算出の操作が繰り返されると、入力値がｂ→ｃ→ｄと修正されるにつれて、図３（Ｄ）の線の挙動は、ｂ→ｃ→ｄと挙動ｄに近づき、従って、ロバスト値は、更に、ｂ→ｃ→ｄと変化し、最終的に、ロバスト値は、最小値ｄとなる。かかる過程に於いて、ロバスト値ｄが０又はそれ以下となれば、結果出力値である挙動は、指定現象と一致したこととなり、これにより、指定現象の発生の検出と、それを与えるテストパターンの生成が為されたこととなる。そして、ロバスト値の最小値が０より大きい場合には、結果出力値は、指定現象の値域に到達せず、被検査プログラムでは、指定現象は発生しないと判定できることとなる。
【００２５】
上記の最適化処理に於けるロバスト値の最小化の処理に於いては、図３（Ｂ）又は図３（Ｅ）を参照して理解される如く、基本的には、入力テストパターンを徐々に変更する修正に対して、ロバスト値が連続的に変化する、即ち、結果出力値が連続的に変化することが仮定されている。即ち、結果出力値が離散的に変化する場合は考慮されていないので、被検査プログラムの結果出力値の値域に離散的に隔離した複数に分割された値域が存在している場合、例えば、被検査プログラムに於いて、条件分岐処理が含まれ、複数の演算経路が実行可能である場合、最適化処理では、複数の演算経路のうちのいずれか一つでしか指定現象の存在の探索がなされず、最適化処理を開始した値域の他の値域に指定現象が存在していた場合には、その指定現象の存在は、見逃されることとなる。例えば、図６に例示されている如く、演算経路１〜４を有し、それらの経路の出力値の値域が経路毎に異なっている被検査プログラムに於いて、指定現象として出力値＝０となる場合があるか否かを判定しようとする場合に、被検査プログラムに対して、初期入力値として経路１を通る演算を実行させる値を用いて最適化処理を実行すると、指定現象の発生の有無の探索は、経路１による出力値の値域の範囲内のみで実行され、図示の如く、経路２、３の結果出力値の値域に存在する指定現象（出力値＝０）及びそれらを与えるテストパターン（入力値の組み合わせ）が検出されない場合がある（図中、最適化処理に於いて算出される出力値の履歴を示す矢印は、出力値＝０に到達しない。）。この点に関し、通常、テストパターンを用いた最適化処理は、実行される確率の高い演算経路が選択され、その選択された経路に沿って演算が実行されるので、実行される確率の低い演算経路では、指定現象の発生の有無の探索すら実行されないこととなり得る。
【００２６】
そこで、本発明に於いては、被検査プログラムが条件分岐処理を含み、結果出力値が連続的に変化する場合と離散的な変化する場合（ハイブリッド構造を有する場合）にも、被検査プログラムで発生し得る指定現象をより確実に検出し、その指定現象を与える入力値（テストパターン）の検出又は生成できるように、プログラム検査の手法が改良される。その具体的な手法に於いては、端的に述べれば、被検査プログラムに於いて、まず、発生し得る演算経路の全ての検出が実行される。そして、指定現象を検出するための最適化処理が、検出された演算経路毎に実行される。例えば、図２（Ａ）、（Ｂ）に例示の条件分岐処理を含むプログラムの場合、図２（Ｃ）に例示されている如く、まず、発生し得る演算経路の全て、経路１、２、３、が、それぞれ、検出され、記憶される。そして、記憶された演算経路のうちの一つを順々に選択して、例えば、経路１を選択して、その経路に沿って演算を実行させる入力テストパターンの初期値を探索し、その初期値を用いて、最適化処理が実行され、指定現象の発生の有無の探索が為されることとなる。なお、かかる一連の処理は、発生し得る演算経路の全てについて実行されてもよいが、指定現象が不具合現象であり、一つでも見つかれば、被検査プログラムが修正されるべきものとして判定されるというときには、順々に、演算経路一つずつについて、最適化処理を実行する過程で、指定現象が検出されれば、その時点で、被検査プログラムは、修正の必要ありとして判定し、最適化処理による指定現象の発生の有無の探索が終了されてもよい。
【００２７】
プログラムの検査処理の流れ
図４（Ａ）を参照して、本発明によるプログラムの検査処理の一つの実施形態に於いては、まず、被検査プログラムに於いて発生の有無が検査される指定現象に相当する結果出力値の値域の設定が為される（ステップ１０：指定現象目的関数設定部）。かかる指定現象の結果出力値の値域は、典型的には、関数によって定義され、その関数は、本実施形態では、「目的関数」と称される。次いで、被検査プログラムに於いて、発生し得る全ての演算経路の検出が為され、各演算経路を特定する情報、例えば、条件分岐処理の各々に於ける条件のパラメータなど、のデータの組が記憶される（ステップ２０：演算経路検出部、演算経路記憶部）。演算経路の検出は、任意の又は既存のＡＴＧツールを用いて達成されてよい。なお、各演算経路を特定する情報は、それぞれ、検査プログラムにより画定されたメモリに保存され、かかるメモリは、本実施形態では、「待ち行列」と称される。
【００２８】
かくして、被検査プログラムに於ける各演算経路の情報の検出及び記憶が完了すると、待ち行列に記憶された演算経路の群から、一つずつ、演算経路が選択され、最適化処理が実行される。具体的には、まず、待ち行列に最適化処理の実行がされていない演算経路があるか否かが判定され（待ち行列が空か否か？）（ステップ３０）、最適化処理の実行がされていない演算経路があるときには、待ち行列から一つの演算経路が、被検査演算経路として選択され（ステップ４０：被検査演算経路選択部）、その被検査演算経路を通過する、即ち、その被検査演算経路に沿った演算を実行させる入力値（テストパターン）の探索が実行される（ステップ５０：初期入力テストパターン生成部）。このテストパターンの探索は、例えば、任意の又は既存のＳＡＴソルバーを用いて達成されてよい。そして、この段階で、被検査演算経路に沿った演算を実行させる入力値が存在しない場合には（ステップ６０：初期入力テストパターン生成部）、待ち行列に記憶された別の演算経路に対して、ステップ３０〜５０が繰り返される。一方、被検査演算経路に沿った演算を実行させる入力値が存在する場合には、その入力値を初期値として、プログラムの実行による最適化処理による指定現象の発生の有無の探索が実行される（ステップ７０）。なお、最適化処理では、上記の如く、テストパターンの入力、プログラムの実行と結果出力値の算出（プログラム実行部）、ロバスト値の算定とロバスト値が最小値であるか否かの判定（結果出力判定部）、テストパターンの修正（修正入力テストパターン生成部）が、ロバスト値が最小値になるまで反復して実行される（最適化処理部）。そして、指定現象が検出されなかったときには、その被検査演算経路に於いては、指定現象が発生しなかったと判定され（ステップ８０）、待ち行列に残っている最適化処理の実行がされていない別の演算経路について、ステップ３０〜８０が実行される。一方、指定現象が検出されたときには、そのときのテストパターンが指定現象を発生するテストパターンとして記録される。なお、図示の例では、指定現象が一つでも検出されると、処理を終了するようなっているが、待ち行列に記憶された演算経路が空になるまで、全ての演算経路に於ける指定現象の発生の有無が検査されてもよい。
【００２９】
上記の処理によれば、或る一つの演算経路に於いて指定現象が検出されなくても、別の演算経路にて指定現象の発生の有無の探索が実行されることとなる。例えば、図４（Ｂ）に例示されている如く、図６に関連して説明された演算経路１〜４を有する被検査プログラムに於ける指定現象（出力値＝０）の存在の有無の検査の場合に、初期入力値として経路１を通る演算を実行させる値を用いて最適化処理を実行して指定現象が見つからなくても、経路２、３、４についてもそれぞれ指定現象の発生の有無の探索が実行されることとなるので、経路２、３で到達され得る指定現象が検出できることとなる。（図中、矢印は、最適化処理に於いて算出される出力値の履歴を示している。）
【００３０】
最適化処理の修正例
ところで、図４（Ｂ）中の経路４、３の部分を参照して、或る一つの演算経路に於いて最適化処理を実行している場合、条件によっては、演算処理の流れが、別の経路に遷移する場合がある。その場合、仮に、最初の経路（図中、経路４）に於いて指定現象が発生し得るにもかかわらず、ロバスト値が０になる前に、別の経路に遷移してしまうと、最初の経路に於ける指定現象を見逃してしまう場合が起き得る。そこで、図４（Ａ）の最適化処理に於いて、プログラムの演算処理の途中の演算値（中間演算値）を参照して、演算処理が選択された演算経路に沿っているか否かを監視する処理が実行されてもよい。具体的には、図５（Ａ）を参照して、図４（Ａ）のステップ７０に於ける最適化処理の開始後（ステップ７１）、適時、中間演算値の参照が為され（ステップ７３）、中間演算値が現在選択されている演算経路に於いて算出され得る値か否かが判定される（ステップ７５：中間演算値監視部）。ここで、具体的には、中間演算値が現在選択されている演算経路に於いて期待される値域にあるとき、実行中の演算が選択されている演算経路を通過していると判定されてよい。そして、実行中の演算が選択されている演算経路を通過していると判定されたときには、そのまま演算が続行される（ステップ７７）。
【００３１】
一方、実行中の演算が選択されている演算経路を通過していないと判定されたときには、より確実に演算が選択されている演算経路を通過するように、目的関数の変更がなされ（ステップ７９）、演算が再開されてよい。目的関数の変更は、例えば、目的関数の与える値域が、最適化処理に於ける初期値により得られる結果出力値に近くづくように、変更するといったことが実行される。かかる目的関数の変更によれば、ロバスト値が最小値に到達するまでの処理に於いて、実行される演算の経路間の遷移が抑制され、その結果、最適化処理が選択演算経路に集中できることとなる。例えば、図５（Ｂ）の如く、図６に関連して説明された演算経路１〜４を有する被検査プログラムに於ける指定現象（出力値＝０）の存在の有無の検査の場合に、図４（Ｂ）の場合に発生した経路４から経路３への遷移が起きる可能性が低減され、経路３、４についても、それぞれ、別々に最適化処理による指定現象の発生の有無の探索が実行されることとなる。
【００３２】
かくして、上記の本発明によれば、条件分岐処理を含み、離散的に隔離した複数の結果出力値の値域を有するプログラムについても、網羅的に指定現象の発生の有無の探索とその指定現象を与えるテストパターンの検出又は生成が可能となる。本発明のプログラム検査は、基本的には、コンピュータにより自動的に実行されるので、プログラムの開発工数の低減、プログラム及び制御品質の更なる向上が期待される。なお、典型的には、指定現象として不具合現象が選択されるが、上記の本発明による装置は、不具合現象以外の指定現象の発生の有無の探索にも利用できることは、理解されるべきである。本発明のプログラム検査装置は、装置や機械器具の制御プログラムに於ける不具合現象の有無の検査に有利に利用可能である。
【００３３】
以上の説明は、本発明の実施の形態に関連してなされているが、当業者にとつて多くの修正及び変更が容易に可能であり、本発明は、上記に例示された実施形態のみに限定されるものではなく、本発明の概念から逸脱することなく種々の装置に適用されることは明らかであろう。
【図１】
2015197868.tif 000003
【図２】
2015197868.tif 000004
【図３】
2015197868.tif 000005
【図４】
2015197868.tif 000006
【図５】
2015197868.tif 000007
【図６】
2015197868.tif 000008