【解決手段】モデル検査装置1は、過大近似対象の指令を過大近似し(S2)、過大近似後の指令と検証内容を制約式として含む充足可能性問題の解を求め(S3)、充足可能性問題が充足可能か否かを確認する(S4)。充足可能の場合(S4のYes)、モデル検査装置1は、充足可能性問題の解における入力を過大近似前の対象プログラムに入力し(S5)、充足可能性問題の解が、検証内容に対する偽反例か否かを確認する(S6)。充足可能性問題の解が偽反例の場合(S6のYes)、モデル検査装置1は、充足可能性問題の求解時に割り当てられた入力を含むことを条件として、過大近似対象の指令に対する入力範囲を縮小し(S7)、縮小後の入力範囲内で過大近似対象の指令を再度過大近似する(S8)。
前記充足可能性問題が充足不可能の場合、現在の前記入力範囲が初期の前記入力範囲と同一でなければ、初期の前記入力範囲内であることを条件として、前記入力範囲を拡大する入力範囲拡大手段、
を更に具備することを特徴とする請求項1に記載のモデル検査装置。
コンピュータを、SATソルバ又はSMTソルバを用いて対象プログラムが特定の検証内容を満たすか否かを検証するモデル検査装置として機能させるためのモデル検査プログラムであって、
前記対象プログラムに含まれる一部又は全部のコンピュータに対する指令を過大近似する過大近似手段と、
過大近似後の前記指令と前記検証内容を制約式として含む充足可能性問題が充足可能の場合、前記充足可能性問題の解における入力を過大近似前の前記対象プログラムに入力し、前記解が前記検証内容に対する偽反例か否かを判定する判定手段と、
前記解が偽反例の場合、前記充足可能性問題の求解時に割り当てられた入力を含むことを条件として、前記指令に対する入力範囲を縮小する入力範囲縮小手段と、
縮小後の前記入力範囲内で前記指令を再度過大近似する再過大近似手段と、
を具備するモデル検査装置として機能させるためのモデル検査プログラム。
前記充足可能性問題が充足不可能の場合、現在の前記入力範囲が初期の前記入力範囲と同一でなければ、初期の前記入力範囲内であることを条件として、前記入力範囲を拡大する入力範囲拡大手段、
を更に具備することを特徴とする請求項1に記載のテストデータ生成装置。
コンピュータを、SATソルバ又はSMTソルバを用いて対象プログラムのテストデータを生成するテストデータ生成装置として機能させるためのテストデータ生成プログラムであって、
前記対象プログラムに含まれる一部又は全部のコンピュータに対する指令を近似する近似手段と、
近似後の前記指令と前記検証内容を制約式として含む充足可能性問題が充足可能の場合、前記充足可能性問題の解における入力を近似前の前記対象プログラムに入力し、前記解が前記検証内容に対する偽反例か否かを判定する判定手段と、
前記解が偽反例の場合、前記充足可能性問題の求解時に割り当てられた入力を含むことを条件として、前記指令に対する入力範囲を縮小する入力範囲縮小手段と、
縮小後の前記入力範囲内で前記指令を再度近似する再近似手段と、
を具備するテストデータ生成装置として機能させるためのテストデータ生成プログラム。
【発明を実施するための形態】
【0021】
以下図面に基づいて、本発明の実施形態を詳細に説明する。
図1は、モデル検査装置のハードウエア構成図である。尚、
図1のハードウエア構成は一例であり、用途、目的に応じて様々な構成を採ることが可能である。
【0022】
図1に示すように、モデル検査装置1は、制御部11、記憶部12、メディア入出力部13、通信制御部14、入力部15、表示部16、周辺機器I/F部17等が、バス18を介して接続される。
【0023】
制御部11は、CPU(Central Processing Unit)、ROM(Read Only Memory)、RAM(Random Access Memory)等によって構成される。
【0024】
CPUは、記憶部12、ROM、記録媒体等に格納されるプログラムをRAM上のワークメモリ領域に呼び出して実行し、バス18を介して接続された各装置を駆動制御し、モデル検査装置1が行う後述する処理を実現する。ROMは、不揮発性メモリであり、コンピュータのブートプログラムやBIOS等のプログラム、データ等を恒久的に保持している。RAMは、揮発性メモリであり、記憶部12、ROM、記録媒体等からロードしたプログラム、データ等を一時的に保持するとともに、制御部11が各種処理を行う為に使用するワークエリアを備える。
【0025】
記憶部12は、HDD(Hard Disk Drive)等であり、制御部11が実行するプログラム、プログラム実行に必要なデータ、OS(Operating System)等が格納される。プログラムに関しては、OSに相当する制御プログラムや、後述する処理をコンピュータに実行させるためのアプリケーションプログラムが格納されている。これらの各プログラムコードは、制御部11により必要に応じて読み出されてRAMに移され、CPUに読み出されて各種の手段として実行される。
【0026】
メディア入出力部13(ドライブ装置)は、データの入出力を行い、例えば、CDドライブ(−ROM、−R、−RW等)、DVDドライブ(−ROM、−R、−RW等)等のメディア入出力装置を有する。通信制御部14は、通信制御装置、通信ポート等を有し、コンピュータとネットワーク間の通信を媒介する通信インタフェースであり、ネットワークを介して、他のコンピュータ間との通信制御を行う。ネットワークは、有線、無線を問わない。
【0027】
入力部15は、データの入力を行い、例えば、キーボード、マウス等のポインティングデバイス、テンキー等の入力装置を有する。入力部15を介して、コンピュータに対して、操作指示、動作指示、データ入力等を行うことができる。表示部16は、液晶パネル等のディスプレイ装置、ディスプレイ装置と連携してコンピュータのビデオ機能を実現するための論理回路等(ビデオアダプタ等)を有する。尚、入力部15及び表示部16は、タッチパネルディスプレイのように、一体となっていても良い。
【0028】
周辺機器I/F(Interface)部17は、コンピュータに周辺機器を接続させるためのポートであり、周辺機器I/F部17を介してコンピュータは周辺機器とのデータの送受信を行う。周辺機器I/F部17は、USB(Universal Serial Bus)やIEEE1394やRS−232C等によって構成されており、通常複数の周辺機器I/Fを有する。周辺機器との接続形態は有線、無線を問わない。バス18は、各装置間の制御信号、データ信号等の授受を媒介する経路である。
【0029】
図2は、モデル検査装置の処理の流れを示すフローチャートである。モデル検査装置1は、
図2に示すフローチャートに従い、SATソルバ又はSMTソルバ(以下、「SATソルバ等」という。)を用いて、対象プログラムが特定の検証内容を満たすか否かを検証する。SATソルバ等は、対象プログラムのソースコードの各行(コンピュータに対する各指令)と特定の検証内容を制約式として含む充足可能性問題の解を求める機能を有する。
【0030】
SATソルバ等自体は、モデル検査装置1にインストールされていても良いし、他のコンピュータにインストールされていても良い。他のコンピュータにインストールされている場合、モデル検査装置1は、充足可能性問題の制約式を他のコンピュータに送信し、他のコンピュータから求解結果を受信する。以下では、SATソルバ等が、モデル検査装置1にインストールされているものとして説明する。
【0031】
図3に示すように、モデル検査装置1の制御部11は、過大近似対象の指令に対する初期入力範囲を決定し(ステップS1)、過大近似対象の指令を過大近似する(ステップS2)。
【0032】
過大近似とは、変換後の指令が、元の指令の振る舞いを全て含むような近似である。尚、過小近似とは、元の指令が、変換後の振る舞いを全て含むような近似である。以下では、過大近似又は過小近似のいずれにも決まらない近似のことを単に「近似」と呼ぶ。
【0033】
本発明の実施の形態では、過大近似対象の指令は、市販のSATソルバ等が未対応、又は求解速度が遅くなるような複雑な演算である。複雑な演算の例としては、三角関数、指数関数、平方根、対数関数等の演算や、ルックアップテーブルにおける内挿の演算等が挙げられる。
【0034】
図3は、ステップS1、S2の処理を説明する図である。
図3(a)に示す非線形関数z=f(x)が、過大近似対象の指令である。また、説明を簡潔にするため、対象プログラムは過大近似対象の指令のみを含むものとする。すなわち、対象プログラムは、非線形関数z=f(x)の演算のみを行う。
【0035】
図3(b)には、過大近似対象の指令に対する初期入力範囲[x1、x5]が図示されている。初期入力範囲[x1、x5]は、例えば、ユーザが、自らの事前知識に基づいて、モデル検査装置1の入力部15を介して入力する。制御部11は、入力部15を介して入力された範囲を初期入力範囲とする。
【0036】
指令z=f(x)の過大近似について説明する。制御部11は、初期入力範囲[x1、x5]を複数の小区間に分割する。
図3(b)には、小区間[x1、x2]、[x2、x3]、・・・が図示されている。次に、制御部11は、小区間ごとに指令z=f(x)に対する出力範囲を決定する。
図3(b)には、小区間[x1、x2]に対する出力範囲[z1、z2]、小区間[x2、x3]に対する出力範囲[z2、z3]、・・・が図示されている。
図3(b)を参照すれば、変換後の指令が、元の指令z=f(x)の振る舞いを全て含むことが分かる。このように過大近似された指令であれば、SATソルバ等が短時間に充足可能性問題の解を求めることができる。
【0037】
図2の説明に戻る。次に、制御部11は、SATソルバ等を用いて、過大近似後の指令と検証内容を制約式として含む充足可能性問題の解を求める(ステップS3)。検証内容は、例えば、対象プログラムの出力値に関するものである。
【0038】
次に、制御部11は、SATソルバ等による求解結果を参照し、充足可能性問題が充足可能か否かを確認する(ステップS4)。SATソルバ等は、求解結果として、充足可能な解を一つ出力するか、又は充足不可能である旨を出力する。制御部11は、SATソルバ等から充足可能な解が出力されれば、充足可能性問題が充足可能であると判断し、充足不可能である旨が出力されれば、充足可能性問題が充足不可能であると判断する。
【0039】
充足可能性問題が充足可能の場合(ステップS4のYes)、制御部11は、充足可能性問題の解における入力を過大近似前の対象プログラムに入力する(ステップS5)。充足可能性問題の解は、対象プログラムの入力と出力の組(x、z)であり、「充足可能性問題の解における入力」とは、このうちの入力の値xを指す。
【0040】
次に、制御部11は、過大近似前の対象プログラムの出力を参照し、充足可能性問題の解が、検証内容に対する偽反例か、又は真の反例のいずれであるかを確認する(ステップS6)。充足可能性問題の解が偽反例の場合(ステップS6のYes)、制御部11は、充足可能性問題の求解時に割り当てられた入力を含むことを条件として、過大近似対象の指令に対する入力範囲を縮小する(ステップS7)。SATソルバ等は、充足可能性問題の求解時、過大近似対象の各指令に対して入力と出力を割り当てる。「充足可能性問題の求解時に割り当てられた入力」とは、このSATソルバ等によって割り当てられた過大近似対象の各指令に対する入力を指す。
【0041】
図4は、ステップS3〜S7の処理を説明する図である。
図4(a)には、SATソルバ等によって得られる解(x*、z*)が図示されている。制御部11は、解における入力x*を過大近似前の対象プログラムに入力し、過大近似前の対象プログラムの出力を参照する。
【0042】
過大近似前の対象プログラムの出力が検証内容を満たさない場合、すなわち、充足可能性問題の解が偽反例の場合、制御部11は、充足可能性問題の求解時に割り当てられた入力x*を含むことを条件として、初期入力範囲[x1、x5]を縮小する。
図4(b)には、縮小後の入力範囲[x11、x14]が図示されている。
【0043】
ステップS7の意義について説明する。SATソルバ等によって得られる解が偽反例になる理由は、過大近似による誤差である。真の反例となる解が得られる過大近似対象の指令に対する入力は、前回偽反例となった解の求解時に割り当てられた値の周辺に存在する可能性が高いと考えることができる。そこで、後述するステップS8の再過大近似において過大近似の精度を上げるために、ステップS7では、過大近似対象の指令に対する入力範囲を前回偽反例となった解の求解時に割り当てられた値の周辺に限定している。
【0044】
図2の説明に戻る。次に、制御部11は、縮小後の入力範囲内で過大近似対象の指令を再度過大近似する(ステップS8)。制御部11は、ステップ2における過大近似と同様、縮小後の入力範囲を小区間に分割し、小区間ごとに出力範囲を決定することによって、過大近似対象の指令を再度過大近似する。ここで、制御部11は、前回の過大近似後の指令よりも振る舞いが減少するように、すなわち、より過大近似前の指令に近づくように、過大近似対象の指令を再度過大近似する。
【0045】
次に、制御部11は、ステップ3、4の処理を繰り返す。充足可能性問題が充足不可能の場合(ステップS4のNo)、制御部11は、現在の入力範囲が初期入力範囲と同一か否か確認する(ステップS9)。
【0046】
現在の入力範囲が初期入力範囲と同一でない場合(ステップS9のNo)、制御部11は、初期入力範囲内を条件として、入力範囲を拡大する(ステップS10)。ここで、制御部11は、ステップS8において再度過大近似を行った小区間についてはそのままとし、ステップS7において除外対象となった小区間の一部又は全部を再度入力範囲に加えることによって、入力範囲を拡大する。その後、制御部11は、ステップ3、4の処理を繰り返す。
【0047】
図5は、ステップS8〜S10の処理を説明する図である。
図5(a)には、縮小後の入力範囲[x11、x14]内で再度過大近似された指令が図示されている。すなわち、小区間[x11、x12]に対する出力範囲[z13、z14]、小区間[x12、x13]に対する出力範囲[z11、z13]、小区間[x13、x14]に対する出力範囲[z11、z12]が図示されている。
【0048】
図3(b)と
図5(a)を比較すると、
図5(a)に図示する再度過大近似された指令の方が、
図3(b)に図示する最初に過大近似された指令よりも、振る舞いが減少していることが分かる、すなわち、過大近似前の指令に近づいていることが分かる。
【0049】
縮小後の入力範囲[x11、x14]に対するステップS3の処理の結果、充足可能性問題が充足不可能となると、制御部11は、現在の入力範囲[x11、x14]が初期入力範囲[x1、x5](
図3(b)参照)と同一か否か確認する。この時点では両者が同一ではないので、制御部11は、初期入力範囲[x1、x5]内を条件として、入力範囲を拡大する。
【0050】
図5(b)には、拡大後の入力範囲[x21、x25]が図示されている。制御部11は、ステップS8において再度過大近似を行った小区間[x11、x12]〜[x13、x14]についてはそのままとし、ステップS7において除外対象となった小区間の一部[x2、x3](
図4参照)を再度入力範囲に加えることによって、入力範囲を拡大する。すなわち、[x11、x12]=[x22、x23]、[x12、x13]=[x23、x24]、[x13、x14]=[x24、x25]であり、[x21、x22](=[x2、x3])が新たに加えられた小区間である。
【0051】
ステップS10の意義について説明する。前述のステップS7では、過大近似対象の指令に対する入力範囲を偽反例となった解の周辺に限定している。この限定の結果、充足可能性問題が充足不可能になった場合、ステップS7において除外対象となった小区間に真の反例となる解が存在する可能性がある。そこで、除外対象となった小区間において解を探索するために、ステップS10では、過大近似対象の指令に対する入力範囲を拡大している。尚、ステップS8において再度過大近似を行った小区間についてはそのままとしているので、以前と同じ間違いを犯さない、すなわち、同様の偽反例となる解が得られることはない。
【0052】
図2の説明に戻り、最終的な出力結果について説明する。充足可能性問題の解が真の反例の場合(ステップS6のNo)、制御部11は、真の反例を出力し(ステップS11)、処理を終了する。また、充足可能性問題が充足不可能の場合(ステップS4のNo)であって、現在の入力範囲が初期入力範囲と同一の場合(ステップS9のYes)、初期入力範囲内における精緻な解探索が終了したことになるので、制御部11は、反例なしを出力し(ステップS12)、処理を終了する。
【0053】
図6は、ステップS11、S12の処理を説明する図である。
図6(a)には、真の反例(x*、z*)の出力が図示されている。
図6(b)には、現在の入力範囲が初期入力範囲となり、反例なしの出力が図示されている。
【0054】
図7〜
図10は、具体例を説明する図である。以下では、複雑な演算として、平方根を例に挙げて説明する。
【0055】
図7には、対象プログラム20が図示されている。対象プログラム20は、入力(p1、p2)、出力rであって、3つの指令を含む。p1、p2の取り得る範囲は、[0、1]である。指令22aは、入力x、出力y=x^(1/2)の演算であって、過大近似対象である。指令22bは、2つの入力を加算して出力する演算である。指令22cは、入力x、出力y=x^(1/2)の演算であって、過大近似対象である。
【0056】
検証内容21は、対象プログラム20について、「r∈[1.1、1.2]を満たす入力(p1、p2)は存在しない」という命題である。過大近似対象の指令22a、22bに対する初期入力範囲23は、「0≦x≦3」である。
【0057】
図8(a)には、ステップS2における結果として、過大近似後の指令24a、24cが図示されている。過大近似後の指令24a、24cは、小区間「0≦x<1」に対する出力範囲「0≦y<1」、小区間「1≦x<2」に対する出力範囲「1≦y<2^(1/2)」、小区間「2≦x≦3」に対する出力範囲「2^(1/2)≦y≦3^(1/2)」である。平方根は単調増加関数であるから、各小区間の上下限における平方根の値を出力範囲の上下限として決定することができる。
【0058】
図8(b)には、1回目のステップS3の結果が図示されている。入力p1=0.5、入力p2=1の値は、SATソルバ等が、p1、p2の取り得る範囲[0、1]で割り当てた値である。
【0059】
24aの出力=0.2は、SATソルバ等が、
図8(a)に示す過大近似後の指令24aを満たす範囲で割り当てた値である。すなわち、24aに対する入力x(=入力p1)は、0.5であるから、0≦0.5<1より、SATソルバ等は、0≦y<1を満たすyの値を、24aの出力として割り当てる。
【0060】
22bの出力=1.2は、SATソルバ等が、指令22bの演算を実行することによって得られる値である。すなわち、22bに対する2つの入力(24aの出力と入力p2)は、0.2と1であるから、0.2+1の演算結果を、22bの出力として割り当てる。
【0061】
24cの出力(=r)=1.1は、SATソルバ等が、
図8(a)に示す過大近似後の指令24cを満たす範囲で割り当てた値である。すなわち、24cに対する入力x(=22bの出力)は、1.2であるから、1≦1.2<2より、SATソルバ等は、1≦y<2^(1/2)を満たすyの値を、24cの出力として割り当てる。
【0062】
図8(b)の時点では、ステップ3の結果、充足可能性問題の解として、入力(p1、p2)=(0.5、1)、出力r=1.1が得られたことになる。制御部11は、充足可能性問題が充足可能と判断し(ステップS4のYes)、ステップS5の処理を実行する。
【0063】
図8(c)には、1回目のステップS5、S6の結果が図示されている。入力p1=0.5、入力p2=1の値は、充足可能性問題の解における入力である。制御部11は、これらの値を過大近似前の対象プログラム20に入力する。
【0064】
22aの出力=0.71は、0.5^(1/2)の演算結果である。22bの出力=1.71は、0.71+1の演算結果である。22cの出力(=r)=1.31は、1.71^(1/2)の演算結果である。r=1.31は、r∈[1.1、1.2]を満たさないことから、検証内容21の真の反例ではない。従って、ステップS6の判定結果は偽反例(ステップS6のYes)となる。
【0065】
図9(a)には、1回目のステップS7、S8の結果が図示されている。解が偽反例なので(ステップS6のYes)、制御部11は、指令24aに対する入力範囲を、充足可能性問題の求解時に割り当てられた入力0.5(
図8(b)の「入力p1」を参照)を含む小区間0≦x<1に縮小する。同様に、制御部11は、指令24cに対する入力範囲を、充足可能性問題の求解時に割り当てられた入力1.2(
図8(b)の「22bの出力」を参照)を含む小区間1≦x<2に縮小する。
【0066】
過大近似後の指令24aは、小区間「0≦x<1/3」に対する出力範囲「0≦y<(1/3)^(1/2)」、小区間「1/3≦x<2/3」に対する出力範囲「(1/3)^(1/2)≦y<(2/3)^(1/2)」、小区間「2/3≦x<1」に対する出力範囲「(2/3)^(1/2)≦y<1」である。
【0067】
過大近似後の指令24cは、小区間「1≦x<4/3」に対する出力範囲「1≦y<(4/3)^(1/2)」、小区間「4/3≦x<5/3」に対する出力範囲「(4/3)^(1/2)≦y<(5/3)^(1/2)」、小区間「5/3≦x<2」に対する出力範囲「(5/3)^(1/2)≦y<2^(1/2)」である。
【0068】
図9(b)には、2回目のステップS3の結果が図示されている。入力p1=0.2、入力p2=1の値は、SATソルバ等が、p1、p2の取り得る範囲[0、1]で割り当てた値である。
【0069】
24aの出力=0.1は、SATソルバ等が、
図9(a)に示す過大近似後の指令24aを満たす範囲で割り当てた値である。すなわち、24aに対する入力x(=入力p1)は、0.2であるから、0≦0.2<1/3より、SATソルバ等は、0≦y<(1/3)^(1/2)≒0.58を満たすyの値を、24aの出力として割り当てる。
【0070】
22bの出力=1.1は、SATソルバ等が、指令22bの演算を実行することによって得られる値である。すなわち、22bに対する2つの入力(24aの出力と入力p2)は、0.1と1であるから、0.1+1の演算結果を、22bの出力として割り当てる。
【0071】
24cの出力(=r)=1.1は、SATソルバ等が、
図9(a)に示す過大近似後の指令24cを満たす範囲で割り当てた値である。すなわち、24cに対する入力x(=22bの出力)は、1.1であるから、1≦1.1<4/3より、SATソルバ等は、1≦y<(4/3)^(1/2)≒1.15を満たすyの値を、24cの出力として割り当てる。
【0072】
図9(b)の時点では、ステップ3の結果、充足可能性問題の解として、入力(p1、p2)=(0.2、1)、出力r=1.1が得られたことになる。制御部11は、充足可能性問題が充足可能と判断し(ステップS4のYes)、ステップS5の処理を実行する。
【0073】
図9(c)には、2回目のステップS5、S6の結果が図示されている。入力p1=0.2、入力p2=1の値は、充足可能性問題の解における入力である。制御部11は、これらの値を過大近似前の対象プログラム20に入力する。
【0074】
22aの出力=0.45は、0.2^(1/2)の演算結果である。22bの出力=1.45は、0.45+1の演算結果である。22cの出力(=r)=1.203は、1.45^(1/2)の演算結果である。r=1.203は、r∈[1.1、1.2]を満たさないことから、検証内容21の真の反例ではない。従って、ステップS6の判定結果は偽反例(ステップS6のYes)となる。
【0075】
図10(a)には、2回目のステップS7、S8の結果が図示されている。解が偽反例なので(ステップS6のYes)、制御部11は、指令24aに対する入力範囲を、充足可能性問題の求解時に割り当てられた入力0.2(
図9(b)の「入力p1」を参照)を含む小区間0≦x<1/3に縮小する。同様に、制御部11は、指令24cに対する入力範囲を、充足可能性問題の求解時に割り当てられた入力1.1(
図9(b)の「22bの出力」を参照)を含む小区間1≦x<4/3に縮小する。
【0076】
過大近似後の指令24aは、小区間「0≦x<1/9」に対する出力範囲「0≦y<(1/9)^(1/2)」、小区間「1/9≦x<2/9」に対する出力範囲「(1/9)^(1/2)≦y<(2/9)^(1/2)」、小区間「2/9≦x<1/3」に対する出力範囲「(2/9)^(1/2)≦y<(1/3)^(1/2)」である。
【0077】
過大近似後の指令24cは、小区間「1≦x<10/9」に対する出力範囲「1≦y<(10/9)^(1/2)」、小区間「10/9≦x<11/9」に対する出力範囲「(10/9)^(1/2)≦y<(11/9)^(1/2)」、小区間「11/9≦x<4/3」に対する出力範囲「(11/9)^(1/2)≦y<(4/3)^(1/2)」である。
【0078】
図10(b)には、3回目のステップS3の結果が図示されている。入力p1=0.1、入力p2=1の値は、SATソルバ等が、p1、p2の取り得る範囲[0、1]で割り当てた値である。
【0079】
24aの出力=0.3は、SATソルバ等が、
図10(a)に示す過大近似後の指令24aを満たす範囲で割り当てた値である。すなわち、24aに対する入力x(=入力p1)は、0.1であるから、0≦0.1<1/9より、SATソルバ等は、0≦y<(1/9)^(1/2)≒0.33を満たすyの値を、24aの出力として割り当てる。
【0080】
22bの出力=1.3は、SATソルバ等が、指令22bの演算を実行することによって得られる値である。すなわち、22bに対する2つの入力(24aの出力と入力p2)は、0.3と1であるから、0.3+1の演算結果を、22bの出力として割り当てる。
【0081】
24cの出力(=r)=1.12は、SATソルバ等が、
図10(a)に示す過大近似後の指令24cを満たす範囲で割り当てた値である。すなわち、24cに対する入力x(=22bの出力)は、1.3であるから、11/9≦1.3<4/3より、SATソルバ等は、(11/9)^(1/2)≒1.11≦y<(4/3)^(1/2)≒1.15を満たすyの値を、24cの出力として割り当てる。
【0082】
図10(b)の時点では、ステップ3の結果、充足可能性問題の解として、入力(p1、p2)=(0.1、1)、出力r=1.12が得られたことになる。制御部11は、充足可能性問題が充足可能と判断し(ステップS4のYes)、ステップS5の処理を実行する。
【0083】
図10(c)には、3回目のステップS5、S6の結果が図示されている。入力p1=0.1、入力p2=1の値は、充足可能性問題の解における入力である。制御部11は、これらの値を過大近似前の対象プログラム20に入力する。
【0084】
22aの出力=0.32は、0.1^(1/2)の演算結果である。22bの出力=1.32は、0.32+1の演算結果である。22cの出力(=r)=1.15は、1.32^(1/2)の演算結果である。r=1.15は、r∈[1.1、1.2]を満たすことから、検証内容21の真の反例である。従って、ステップS6の判定結果は真の反例(ステップS6のNo)となる。そして、制御部11は、入力(p1、p2)=(0.1、1)、出力r=1.15を、真の反例として出力し(ステップS11)、処理を終了する。
【0085】
以上の通り、本発明の実施の形態におけるモデル検査装置1によれば、対象プログラムに複雑な演算が含まれる場合であっても、SATソルバ又はSMTソルバに基づくモデル検査を短時間に実行することができる。
【0086】
前述の説明に挙げた例では、複雑な演算(過大近似対象の指令)の中身が明らか(ホワイトボックス)であったが、複雑な演算の中身が不明(ブラックボックス)の場合も、過大近似さえできれば、本発明を適用することができる。例えば、演算が単調、かつ、入力に対する出力がサンプリングできる場合、過大近似が可能になるため、本発明を適用することができる。
【0087】
また、前述の説明に挙げた例では、複雑な演算(過大近似対象の指令)に対する入力が1つであったが、2つ以上の入力がある場合も、本発明を適用することができる。例えば、入力(x1、x2)、出力yの演算に対しては、「0≦x1<1かつ2≦x2<3=>0.5≦y<1.2」のように過大近似すれば良い。
【0088】
また、効率的な過大近似のルールを求めるため、機械学習などの既存の手法を利用しても良い。例えば、複雑な演算(過大近似対象の指令)に対するサンプリングデータを収集し、機械学習を実行し、過大近似のルールを求めても良い。
【0089】
また、対象プログラムの中に、ブール演算などSATソルバ等による取扱いが容易な演算(指令)は、過大近似対象とする必要はない。すなわち、対象プログラムの中に、ブール演算と複雑な演算が混在する場合、複雑な演算のみ過大近似対象とすれば良い。
【0090】
以上は、モデル検査装置1について説明したが、同様の技術的思想が、SATソルバ又はSMTソルバを用いて対象プログラムのテストデータを生成するテストデータ生成装置としても適用することができる。
【0091】
但し、テストデータ生成装置の場合、複雑な演算を必ずしも厳密に過大近似する必要はない。これは、テストデータ生成装置の場合、テストデータとして真の反例を出力(ステップS11)すれば良いからである。言い換えると、反例なしを出力しても(ステップS12)、真の反例を出力するまで実行することになり、充足可能性問題が充足不可能であることを厳密に保証する必要がないからである。尚、モデル検査装置の場合、充足可能性問題が充足不可能であることを厳密に保証する必要があるため、複雑な演算を厳密に過大近似する必要がある。
【0092】
従って、テストデータ生成装置は、少なくとも以下の構成を具備すれば良い。
・対象プログラムに含まれる一部又は全部のコンピュータに対する指令を近似する手段
・近似後の指令と検証内容を制約式として含む充足可能性問題が充足可能の場合、充足可能性問題の解における入力を近似前の対象プログラムに入力し、解が検証内容に対する偽反例か否かを判定する手段
・解が偽反例の場合、充足可能性問題の求解時に割り当てられた入力を含むことを条件として、指令に対する入力範囲を縮小する手段
・縮小後の入力範囲内で指令を再度近似する手段
【0093】
更に、テストデータ生成装置は、以下の構成を具備しても良い。
・充足可能性問題が充足不可能の場合、現在の入力範囲が初期の入力範囲と同一でなければ、初期の入力範囲内であることを条件として、入力範囲を拡大する手段
【0094】
近似する手段は、例えば、入力範囲を複数の小区間に分割し、小区間ごとに指令に対する出力範囲を決定することによって、指令を近似する。また、再度近似する手段は、例えば、縮小後の入力範囲を小区間に分割し、小区間ごとに出力範囲を決定することによって、指令を再度近似する。
【0095】
以上の通り、本発明の実施の形態におけるテストデータ生成装置によれば、対象プログラムに複雑な演算が含まれる場合であっても、SATソルバ又はSMTソルバに基づくテストデータ生成を短時間に実行することができる。
【0096】
以上、添付図面を参照しながら、本発明に係るモデル検査装置等やテストデータ生成装置等の好適な実施形態について説明したが、本発明はかかる例に限定されない。当業者であれば、本願で開示した技術的思想の範疇内において、各種の変更例又は修正例に想到し得ることは明らかであり、それらについても当然に本発明の技術的範囲に属するものと了解される。