(57)【要約】【課題】浮動小数点を含む実数を用いるプログラムの検査において計算量を抑制したプログラム検査装置を提供することを課題とする。【解決手段】浮動少数点を含む実数を用いるプログラムを検査するプログラム検査装置であって、検査対象のプログラムに対する制約を強化する制約強化抽象化手段と、検査対象のプログラムに対する制約を緩和する制約緩和抽象化手段と、制約強化抽象化で制約強化抽象化を行い、検査対象のプログラムが成立するか否かを判定するとともに、制約緩和抽象化で制約緩和抽象化を行い、検査対象のプログラムが成立するか否かを判定する判定手段を備えることを特徴とする。【選択図】図５
2011128980.tif 000002
【特許請求の範囲】
【請求項１】
浮動少数点を含む実数を用いるプログラムを検査するプログラム検査装置であって、
検査対象のプログラムに対する制約を強化する制約強化抽象化手段と、
検査対象のプログラムに対する制約を緩和する制約緩和抽象化手段と、
前記制約強化抽象化で制約強化抽象化を行い、検査対象のプログラムが成立するか否かを判定するとともに、前記制約緩和抽象化で制約緩和抽象化を行い、検査対象のプログラムが成立するか否かを判定する判定手段
を備えることを特徴とするプログラム検査装置。
【請求項２】
前記制約強化抽象化手段で制約強化抽象化を行い、前記判定手段でプログラムが成立しないと判定した場合に、前記制約緩和抽象化手段で制約緩和抽象化を行い、前記判定手段でプログラムが成立しないと判定した場合には検査に用いる実数のビット幅を増加し、当該増加したビット幅の実数を用いて前記制約強化抽象化手段で制約強化抽象化を再度行い、前記判定手段でプログラムが成立するか否かを判定することを特徴とする請求項１に記載のプログラム検査装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム検査装置に関する。
【背景技術】
【０００２】
車両の制御用プログラム等の各種プログラムの不具合をなくすためには、網羅的検査が必要である。その検査手法として、例えば、形式検査手法（形式的検証手法）が利用される。従来の形式検査手法では、検査対象が主に整数やブール型変数に限定されており、浮動少数点変数の検査には適用できていない。しかし、プログラムは、固定小数点よりも実数の表現範囲の広い浮動小数点が用いられることがある。特許文献１には、車両制御プログラムの開発支援装置において、浮動小数点及び整数のシミュレーション結果を出力することが開示されている。また、図７には、ＩＥＥＥ７５４標準に基づいた単精度（３２ビット）の浮動小数点の実数表現と固定少数点の実数表現の一例を示している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−２０２９１号公報
【特許文献２】国際公開第９５／１６９５３号パンフレット
【特許文献３】特開２００４−２８０７８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、図７の例でも判るように、浮動小数点の場合、ｅｘｐｏｎｅｔ（指数部）の値によって小数点が移動し、表現できる実数の範囲が非常に大きい。そのため、浮動小数点変数を用いたプログラムの検査を行う場合、表現可能な小数点の桁毎に検査が必要となる。そのため、検査に要する計算量が膨大となり、メモリ不足になる虞があり、検査が不可能になる場合がある。そこで、固定小数点を用いた場合には、表現できる範囲が狭くなり、一般的な検査ができない。
【０００５】
そこで、本発明は、浮動小数点を含む実数を用いるプログラムの検査において計算量を抑制したプログラム検査装置を提供することを課題とする。
【課題を解決するための手段】
【０００６】
本発明に係るプログラム検査装置は、浮動少数点を含む実数を用いるプログラムを検査するプログラム検査装置であって、検査対象のプログラムに対する制約を強化する制約強化抽象化手段と、検査対象のプログラムに対する制約を緩和する制約緩和抽象化手段と、制約強化抽象化で制約強化抽象化を行い、検査対象のプログラムが成立するか否かを判定するとともに、制約緩和抽象化で制約緩和抽象化を行い、検査対象のプログラムが成立するか否かを判定する判定手段を備えることを特徴とする。
【０００７】
このプログラム検査装置では、制約強化抽象化手段によって検査対象のプログラムに対する制約を強化する制約強化抽象化を行い、判定手段によって制約強化抽象化を行った上で検査対象のプログラムが成立するか否かを判定する。制約強化抽象化を行っても、プログラムが成立する解が生成できる場合には、制約強化前のもとのプログラムにも解が存在することになる。また、プログラム検査装置では、制約緩和抽象化手段によって検査対象のプログラムに対する制約を緩和する制約緩和抽象化を行い、判定手段によって制約緩和抽象化を行った上で検査対象のプログラムが成立するか否かを判定する。制約緩和抽象化を行っても、プログラムが成立する解が生成できない場合には、制約緩和前のもとのプログラムにも解が存在しないことになる。プログラム検査装置では、このような制約強化抽象化及び制約緩和抽象化の性質を利用してプログラムの検査を行うことにより、検査可能な浮動小数点を含む実数のビット幅を決定でき、検査精度を確保しつつ、検査の計算量を抑制できる。
【０００８】
本発明の上記プログラム検査装置では、制約強化抽象化手段で制約強化抽象化を行い、判定手段でプログラムが成立しないと判定した場合に、制約緩和抽象化手段で制約緩和抽象化を行い、判定手段でプログラムが成立しないと判定した場合には検査に用いる実数のビット幅を増加し、当該増加したビット幅の実数を用いて制約強化抽象化手段で制約強化抽象化を再度行い、判定手段でプログラムが成立するか否かを判定すると好適である。
【０００９】
このプログラム検査装置では、まず、制約強化抽象化手段によって制約強化抽象化を行った上で、判定手段によってプログラムが成立するか否かを判定する。この際、プログラムが成立しないと判定した場合に、プログラム検査装置では、制約緩和抽象化手段によって制約緩和抽象化を行った上で、判定手段によってプログラムが成立するか否かを判定する。この際、プログラムが成立すると判定した場合、プログラム検査装置では、検査に用いる浮動小数点を含む実数のビット幅を増加する。そして、プログラム検査装置では、その増加したビット幅の実数を用いて制約強化抽象化手段によって制約強化抽象化を再度行った上で、判定手段によってプログラムが成立するか否かを判定する。プログラム検査装置では、上記の処理を繰り返し行い、検査可能な浮動小数点を含む実数のビット幅を決定し、プログラムの検査を行う。このように、プログラム検査装置では、制約強化抽象化と制約緩和抽象化の性質を利用しながら各抽象化を交互に行うことにより、検査可能な浮動小数点を含む実数の最小のビット幅を決定することができる。
【発明の効果】
【００１０】
本発明は、制約強化抽象化及び制約緩和抽象化の性質を利用してプログラムの検査を行うことにより、検査精度を確保しつつ、検査の計算量を抑制できる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態にプログラム形式検査装置の構成図である。
【図２】Over-approximationとUnder-approximationの性質の説明図である。
【図３】Under-approximationの適用例である。
【図４】Over-approximationの適用例である。
【図５】第１の実施の形態に係る形式検査の流れを示すフローチャートである。
【図６】第２の実施の形態に係る形式検査の流れを示すフローチャートである。
【図７】固定少数点と浮動少数点の実数表現例である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、本発明に係るプログラム検査装置の実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
【００１３】
本実施の形態では、本発明に係るプログラム検査装置を、車両のＥＣＵ等に搭載されるＣコードの制御プログラムの検査を行うプログラム形式検査装置に適用する。本実施の形態に係るプログラム形式検査装置は、検査対象の制御プログラムにおいて実数として少なくとも浮動小数点実数を用いており、浮動小数点実数がＩＥＥＥ７５４標準に基づいて３２ビットの単精度である（図７参照）。また、実施の形態に係るプログラム形式検査装置は、Over-approximationとUnder-approximation及びＳＡＴ[satisfiability]ソルバーを利用した形式検査装置である。本実施の形態には、２つの形態があり、第１の実施の形態がOver-approximationとUnder-approximationを１回ずつ交互に適用する形態であり、第２の実施の形態がOver-approximationとUnder-approximationを同時に適用する形態である。
【００１４】
図１〜図４を参照して、第１の実施の形態に係るプログラム形式検査装置１について説明する。図１は、本実施の形態にプログラム形式検査装置の構成図である。図２は、Over-approximationとUnder-approximationの性質の説明図である。図３は、Under-approximationの適用例である。図４は、Over-approximationの適用例である。
【００１５】
プログラム形式検査装置１について具体的に説明する前に、Over-approximationとUnder-approximation及びＳＡＴソルバーについて説明しておく。まず、図２を参照して、Over-approximationとUnder-approximationの性質について説明する。図２に示す例の場合、内側が斜線の丸Ｓ１，Ｓ５，Ｓ９が検証対象の問題（プログラム）の解とする。Over-approximationは、検証対象の問題の制約を緩和し、もとの問題より解を多く生成させる。図２に示す例の場合、内側が斜線の丸Ｓ１，Ｓ５，Ｓ９を含む９つの丸Ｓ１〜Ｓ９が制約を緩和したときの解である。Over-approximation(more solutions)したにもかかわらず、解が生成できない場合、制約緩和前のもとの問題にも解が存在しない。一方、Under-approximationは、検証対象の問題の制約を強化し、もとの問題より解を少なく生成させる。図２に示す例の場合、内側が斜線の太丸Ｓ５だけが制約を強化したときの解である。Under-approximation(fewer solutions)しても、解が生成できる場合、制約強化前のもとの問題にも解が存在する。
【００１６】
図３を参照して、Under-approximationを実際に適用した例について説明する。この例では、Under-approximationは、ｒｏｕｎｄ−ｏｆｆ（丸め）制約を強化し、ｒｏｕｎｄ−ｏｆｆによる近似を禁止する。図３に示す例では、ＯｒｉｇｉｎａｌのＥｘｐ．[Exponent]：０１０，Ｍａｎｔ．[Mantissa]：１．００１（１．１２５０・２−１）にｏｐｅｒａｎｄｓのＥｘｐ．：００１，Ｍａｎｔ．：１．０００（１．００００・２−２）を加算する問題であり、７ビット幅の表現である。
【００１７】
まず、ｏｐｅｒａｎｄｓ（Ｅｘｐ．：００１，Ｍａｎｔ．：１．０００）のＥｘｐ．をＯｒｉｇｉｎａｌ（Ｅｘｐ．：０１０，Ｍａｎｔ．：１．００１）のＥｘｐ．と合わせるために、Ｍａｎｔ．ｒｉｇｈｔ−ｓｈｉｆｔｅｄしてＥｘｐ．：０１０，Ｍａｎｔ．：０．１００００（０．５０００・２−１）とする。そして、それを加算すると、Ｍａｎｔ．ｓｕｂｓｔｒａｃｔｅｄとしてＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１０（１．６２５０・２−１）となる。このＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１０（１．６２５０・２−１）をＮｏｒｍａｌｉｚａｔｉｏｎしたＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１０（１．６２５０・２−１）が加算結果である。この加算結果のＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１０は、８ビット表現なので、７ビット表現する。この際、Under-approximationでは、ｒｏｕｎｄ−ｕｐ及びｒｏｕｎｄ−ｄｏｗｎなしで７ビットで正確に表現できる場合のみ、この加算演算を満たす入力と出力として認める。この例の場合、Ｅｘｐ．：０１０，Ｍａｎｔ．：１．１０１０を、ｒｏｕｎｄ−ｕｐ及びｒｏｕｎｄ−ｄｏｗｎすることなく、Ｅｘｐ．：０１０，Ｍａｎｔ．：１．１０１（１．６２５０・２−１）と７ビット表現でき、Under-approximation(fewer solutions)しても、解が生成できたことになる。
【００１８】
図４を参照して、Over-approximationを実際に適用した例について説明する。この例では、Over-approximationは、ｒｏｕｎｄ−ｏｆｆ制約を緩和し、ｒｏｕｎｄ−ｏｆｆによる近似を許容する。図４に示す例では、ＯｒｉｇｉｎａｌのＥｘｐ．：０１０，Ｍａｎｔ．：１．００１（１．１２５０・２−１）にｏｐｅｒａｎｄｓのＥｘｐ．：００１，Ｍａｎｔ．：１．００１（１．１２５０・２−２）を加算する問題であり、７ビット幅の表現である。
【００１９】
まず、ｏｐｅｒａｎｄｓ（Ｅｘｐ．：００１，Ｍａｎｔ．：１．００１）のＥｘｐ．をＯｒｉｇｉｎａｌ（Ｅｘｐ．：０１０，Ｍａｎｔ．：１．００１）のＥｘｐ．と合わせるために、Ｍａｎｔ．ｒｉｇｈｔ−ｓｈｉｆｔｅｄしてＥｘｐ．：０１０，Ｍａｎｔ．：０．１００１（０．５６２５・２−１）とする。そして、それを加算すると、Ｍａｎｔ．ｓｕｂｓｔｒａｃｔｅｄとしてＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１１（１．６８７５・２−１）となる。このＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１１（１．６８７５・２−１）をＮｏｒｍａｌｉｚａｔｉｏｎしたＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１１（１．６８７５・２−１）が加算結果である。この加算結果のＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１１は、８ビット表現なので、７ビット表現する。この際、Over-approximationでは、ｒｏｕｎｄ−ｕｐ及びｒｏｕｎｄ−ｄｏｗｎで近似することを許容するので、ｒｏｕｎｄ−ｕｐ及びｒｏｕｎｄ−ｄｏｗｎをしたものも加算演算を満たす入力と出力として認める。この例の場合、Ｅｘｐ．：０１０，Ｍａｎｔ．：１．１０１１を、ｒｏｕｎｄ−ｕｐしたＥｘｐ．：０１０，Ｍａｎｔ．：１．１１０（１．７５００・２−１）とｒｏｕｎｄ−ｄｏｗｎしたＥｘｐ．：０１０，Ｍａｎｔ．：１．１０１（１．６２５０・２−１）も、Over-approximation(more solutions)の解として許容する。
【００２０】
ＳＡＴソルバーは、検査対象のプログラムのコードと検査項目のＣＮＦ[Conjunctive Normal Form]式毎に、各変数や常数に各値をそれぞれ入力し、ＣＮＦ式の条件にあった値を探索する。その探索の結果、全てのＣＮＦ式についてＴｒｕｅ［Ｔ］となる値（解）が探索できると、検査項目（プログラムのオリジナル性質）が成立との結果と解情報を出力する。一方、探索の結果、全てのＣＮＦ式がＴｒｕｅ［Ｔ］となる解が探索できないと、検査項目（プログラムのオリジナル性質）が不成立との結果とその不成立の証明手順を出力する
【００２１】
検査項目を織り込んだＣコードのプログラムの一例を示す。式（１）、式（２）、式（３）が加算演算のＣコードプログラムであり、式（４）が検査項目である。ｘ１，ｘ２，ｘ３は、３２ビットの浮動小数点の変数である。ａ，ｂは、３２ビットの浮動小数点の常数である。
【数１】
2011128980.tif 000003
【００２２】
式（１）のＣＮＦ式は式（５）となり、式（２）のＣＮＦ式は式（６）となり、式（３）のＣＮＦ式は式（７）となり、式（４）のＣＮＦ式は式（８）となる。ｔ１は、テンポラリー変数である。ｘ１３１はｘ１の３２ビット目のブール変数であり、ｘ１０はｘ１の１ビット目のブール変数であることを示し、ｘ２，ｘ３，ｔ１，ａ，ｂについても同様である。但し、ａ，ｂは、ブール常数である。Ｔは、真理値Ｔｒｕｅを意味する。
【数２】
2011128980.tif 000004
【００２３】
ＳＡＴソルバーでは、式（５）、式（６）、式（７）、式（８）が入力されると、全ての式が真理値Ｔｒｕｅとなるｘ１３１，・・・，ｘ１０、ｘ２３１，・・・，ｘ２０、ｘ３３１，・・・，ｘ３０を探索する。そして、全ての式（５）、式（６）、式（７）、式（８）がＴｒｕｅとなる解が探索できた場合には検査項目（プログラムのオリジナル性質）が成立したと判定する。なお、上記の説明では通常の３２ビットのビット幅に対応したＣＮＦ式（５）〜（８）を用いてＳＡＴソルバーでの検査を行う場合であるが、プログラム形式検査装置１で３２ビットからビット幅を減らしてＳＡＴ検査を行う場合には減らしたビット幅に対応したＣＮＦ式を用いてＳＡＴソルバーでの検査を行うことになる。したがって、プログラム形式検査装置１では、変数や常数の表現においてＳＡＴ検査に用いられないビットがあり、計算量を削減できる。
【００２４】
それでは、プログラム形式検査装置１について具体的に説明する。プログラム形式検査装置１は、パーソナルコンピュータ等のコンピュータ上に構成され、記憶装置Ｍに格納されている制御プログラムの検査（検証）を行う。特に、プログラム形式検査装置１では、検査に要する計算量を削減し、メモリ効率を向上させるために、Over-approximationとUnder-approximationの性質を利用して浮動小数点実数のビット幅を減らして、ＳＡＴソルバーで検査を行う。そのために、プログラム形式検査装置１は、浮動小数点抽象化部１１とＳＡＴ検査部１２を備えている。
【００２５】
浮動小数点抽象化部１１については説明する。浮動小数点抽象化部１１では、まず、検査する際のビット幅の初期値を選定する。このビット幅の初期値は、検査精度等が考慮され、検査する際の浮動小数点実数表現に用いる最小のビット幅である。なお、プログラム形式検査装置１では、浮動小数点実数表現のビット幅としてこの初期値から１ビットずつ増加してゆき、ＳＡＴソルバーで検査可能なビット幅を決定する。検査途中の各ビット幅での浮動小数点実数表現では、少なくとも１ビット分のｅｘｐｏｎｅｎｔを含むものとする。
【００２６】
浮動小数点抽象化部１１では、そのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｕｎｄｅｒ抽象化（Under-approximation）を行う。この際、Under-approximationしても、検査対象のプログラムの解が生成できた場合、検査対象のプログラムにも解が存在することになる。
【００２７】
ｕｎｄｅｒ抽象化を行い、ＳＡＴ検査部１２でUnder-approximationの性質が成立していないと判定した場合、浮動小数点抽象化部１１では、そのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｏｖｅｒ抽象化（Over-approximation）を行う。この際、Over-approximationしても、検査対象のプログラムの解が生成できない場合、検査対象のプログラムにも解が存在しないことになる。
【００２８】
ｏｖｅｒ抽象化を行い、ＳＡＴ検査部１２でOver-approximationの性質が成立したと判定した場合、浮動小数点抽象化部１１では、浮動小数点実数を表現するビット幅を１つ増加する。そして、浮動小数点抽象化部１１では、その１つ増加したビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｕｎｄｅｒ抽象化（Under-approximation）を行う。
【００２９】
浮動小数点抽象化部１１では、ｕｎｄｅｒ抽象化を行い、ＳＡＴ検査部１２でUnder-approximationの性質が成立したと判定する場合又はｏｖｅｒ抽象化を行い、ＳＡＴ検査部１２でOver-approximationの性質が成立していないと判定する場合まで、上記の処理を繰り返し行い、ＳＡＴ検査可能な最小のビット幅を決定する。
【００３０】
ＳＡＴ検査部１２について説明する。ＳＡＴ検査部１２では、浮動小数点抽象化部１１でそのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対してｕｎｄｅｒ抽象化を行うと、Under-approximationの性質が成立するか否かを判定する。Under-approximationの性質が成立すると判定した場合（制約を強化しても、検査項目を含む全てのＣＮＦ式がＴｒｕｅ［Ｔ］となる解がある場合）、ＳＡＴ検査部１２では、検査項目が成立し、検査対象のプログラムのオリジナル性質が成立と判定する。一方、Under-approximationの性質が成立しないと判定した場合（制約を強化して、検査項目を含む全てのＣＮＦ式がＴｒｕｅ［Ｔ］となる解がない場合）、上記したように浮動小数点抽象化部１１でｏｖｅｒ抽象化（Over-approximation）が行われる。
【００３１】
ＳＡＴ検査部１２では、浮動小数点抽象化部１１でそのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対してｏｖｅｒ抽象化を行うと、Over-approximationの性質が成立するか否かを判定する。Over-approximationの性質が成立しないと判定した場合（制約を緩和しても、検査項目を含む全てのＣＮＦ式がＴｒｕｅ［Ｔ］となる解がない場合）、ＳＡＴ検査部１２では、検査項目が不成立で、検査対象のプログラムのオリジナル性質が不成立と判定する。一方、Over-approximationの性質が成立すると判定した場合（制約を緩和して、検査項目を含む全てのＣＮＦ式がＴｒｕｅ［Ｔ］となる解がある場合）、上記したように浮動小数点抽象化部１１でビット幅を１増加してｕｎｄｅｒ抽象化（Under-approximation）が行われる。
【００３２】
図１を参照して、プログラム形式検査装置１の動作を図５のフローチャートに沿って説明する。図５は、第１の実施の形態に係る形式検査の流れを示すフローチャートである。
【００３３】
プログラム形式検査装置１には、記憶装置Ｍから検査対象の検査項目が織り込まれたオリジナルプログラムが入力される（Ｓ１０）。まず、プログラム形式検査装置１では、その浮動小数点実数（変数や常数）を表現するビット幅の初期値を選定する（Ｓ１１）。
【００３４】
プログラム形式検査装置１では、そのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｕｎｄｅｒ抽象化を適用する（Ｓ１２）。そして、プログラム形式検査装置１では、Under-approximationの性質が成立か否かを判定する（Ｓ１３）。Ｓ１３にてUnder-approximationの性質が成立と判定した場合、プログラム形式検査装置１では、プログラムの検査項目が成立し、検査対象のプログラムのオリジナル性質が成立と判定する（Ｓ１４）。ここで、検査は終了し、検査対象のプログラムは成立するという結果が得られる。
【００３５】
Ｓ１３にてUnder-approximationの性質が成立しないと判定した場合、プログラム形式検査装置１では、そのときに設定されているビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｏｖｅｒ抽象化を適用する（Ｓ１５）。そして、プログラム形式検査装置１では、Over-approximationの性質が不成立か否かを判定する（Ｓ１６）。Ｓ１６にてOver-approximationの性質が不成立と判定した場合、プログラム形式検査装置１では、プログラムの検査項目が不成立であり、検査対象のプログラムのオリジナル性質が不成立と判定する（Ｓ１７）。ここで、検査は終了し、検査対象のプログラムは成立しなという結果が得られる。
【００３６】
Ｓ１６にてOver-approximationの性質が成立と判定した場合、プログラム形式検査装置１では、浮動小数点実数を表現するためのビット幅を１ビット増加する（Ｓ１８）。そして、プログラム形式検査装置１では、その増加したビット幅で表現される浮動小数点実数を用いたプログラムに対して、ｕｎｄｅｒ抽象化を適用する（Ｓ１２）。
【００３７】
プログラム形式検査装置１では、検査対象のプログラムの検査項目が成立（Ｓ１４）又は検査対象のプログラムの検査項目が不成立（Ｓ１７）になるまで、上記の処理を繰り返し行う。
【００３８】
このプログラム形式検査装置１によれば、Over-approximationの性質とUnder-approximationの性質を利用し、ｕｎｄｅｒ抽象化とｏｖｅｒ抽象化を１回ずつ交互に行ってＳＡＴ検査を行うことにより、浮動小数点実数を用いたプログラムについて検査可能な最小のビット幅を決定することができる。これによって、検査精度を確保しつつ、検査に要する計算量を抑制できる。その結果、３２ビット幅の浮動小数点実数を用いて検査を行う場合よりも検査時間を大幅に削減でき、メモリ効率も向上させることができる（メモリ不足を防止できる）。
【００３９】
図１を参照して、第２の実施の形態に係るプログラム形式検査装置２について説明する。プログラム形式検査装置２は、第１の実施の形態に係るプログラム形式検査装置１と比較すると、ｏｖｅｒ抽象化とｕｎｄｅｒ抽象化を交互に行ってＳＡＴ検査を行うのではなく、ｏｖｅｒ抽象化とｕｎｄｅｒ抽象化を同時に適用してＳＡＴ検査を行う混合抽象化手法を用いる点が異なる。そのために、プログラム形式検査装置２は、浮動小数点抽象化部２１とＳＡＴ検査部２２を備えている。
【００４０】
浮動小数点抽象化部２１については説明する。浮動小数点抽象化部２１では、まず、検査対象の検査項目を織り込んだオリジナルプログラムφに対して適用可能なｏｖｅｒ抽象化とｕｎｄｅｒ抽象化の各抽象化手法を用意する。ここでは、複数のｏｖｅｒ抽象化手法、ｕｎｄｅｒ抽象化手法を用意するとよい。用意される各抽象化手法には、３２ビット幅から減らしたビット幅で表現される浮動小数点実数を用いた抽象化手法を含んでもよい。
【００４１】
浮動小数点抽象化部２１では、ｏｖｅｒ抽象化手法とｕｎｄｅｒ抽象化手法の集合の中から抽象化手法の一部を選択する。そして、浮動小数点抽象化部２１では、オリジナルプログラムφに対して、選択した抽象化手法を適用する。
【００４２】
ＳＡＴ検査部２２について説明する。ＳＡＴ検査部２２では、浮動小数点抽象化部２１でオリジナルプログラムφに対して抽象化手法を適用すると、抽象化されたプログラムψの解が存在するか否か（ＳＡＴ検査が成立するか否か）を判定する。
【００４３】
抽象化プログラムψの解が存在する（ＳＡＴ検査が成立する）場合、ＳＡＴ検査部２２では、抽象化プログラムψの解情報α（ＳＡＴソルバー情報）を出力する。そして、ＳＡＴ検査部２２では、その解αをオリジナルプログラムφに適用し、オリジナルプログラムφが成立するか否かを判定する。オリジナルプログラムφが成立する場合、ＳＡＴ検査部２２では、検査項目が成立し、検査対象のプログラムのオリジナル性質が成立と判定する。オリジナルプログラムφが成立しない場合、ＳＡＴ検査部２２では、抽象化プログラムψはオリジナルプログラムφから緩和しすぎと判断し、緩和しすぎの原因となったｏｖｅｒ抽象化手法をｏｖｅｒ抽象化手法とｕｎｄｅｒ抽象化手法の集合の中から排除する。
【００４４】
抽象化プログラムψの解が存在しない（ＳＡＴ検査が成立しない）場合、ＳＡＴ検査部２２では、抽象化プログラムψが不成立の証明手順Ｐ（ＳＡＴソルバー情報）を出力する。そして、ＳＡＴ検査部２２では、その証明手順Ｐをオリジナルプログラムφに適用し、オリジナルプログラムφが成立するか否かを判定する。オリジナルプログラムφが成立しない場合、ＳＡＴ検査部２２では、検査項目が不成立で、検査対象のプログラムのオリジナル性質が不成立と判定する。オリジナルプログラムφが成立する場合、ＳＡＴ検査部２２では、抽象化プログラムψはオリジナルプログラムφから強化しすぎと判断し、強化しすぎの原因となったｕｎｄｅｒ抽象化手法をｏｖｅｒ抽象化手法とｕｎｄｅｒ抽象化手法の集合の中から排除する。
【００４５】
図１を参照して、プログラム形式検査装置２の動作を図６のフローチャートに沿って説明する。図６は、第２の実施の形態に係る形式検査の流れを示すフローチャートである。
【００４６】
プログラム形式検査装置２には、記憶装置Ｍから検査対象の検査項目が織り込まれたオリジナルプログラムφが入力される（Ｓ２０）。プログラム形式検査装置２では、そのオリジナルプログラムφに適用可能なｏｖｅｒ抽象化手法とｕｎｄｅｒ抽象化手法を用意する（Ｓ２１）。以下では、｛ｏｖｅｒ，ｕｎｄｅｒ｝をｏｖｅｒ抽象化手法とｕｎｄｅｒ抽象化手法の集合とする。
【００４７】
プログラム形式検査装置２では、｛ｏｖｅｒ，ｕｎｄｅｒ｝の中から一部の抽象化手法を選択し、その選択した抽象化手法をオリジナルプログラムφに適用し、抽象化されたプログラムψを出力する（Ｓ２２）。そして、プログラム形式検査装置２では、ＳＡＴ検査が成立するか否か（抽象化プログラムψの解が存在するか否か）を判定する（Ｓ２３）。
【００４８】
Ｓ２３にてＳＡＴ検査が成立すると判定した場合、プログラム形式検査装置２では、抽象化プログラムψの解αをオリジナルプログラムφに適用し、オリジナルプログラムφが成立するか否かを判定する（Ｓ２４）。Ｓ２４にてオリジナルプログラムφが成立すると判定した場合、プログラム形式検査装置２では、オリジナルプログラムφの検査項目が成立し、検査対象のオリジナルプログラムφのオリジナル性質が成立と判定する（Ｓ２５）。ここで、検査が終了し、オリジナルプログラムφは成立するという結果が得られる。
【００４９】
一方、Ｓ２４にてオリジナルプログラムφが成立しないと判定した場合、プログラム形式検査装置２では、抽象化プログラムψはオリジナルプログラムφを緩和しすぎなので、緩和しすぎの原因となった抽象化手法を｛ｏｖｅｒ，ｕｎｄｅｒ｝から排除し（Ｓ２６）、Ｓ２２の処理に戻る。
【００５０】
Ｓ２３にてＳＡＴ検査が成立しないと判定した場合、プログラム形式検査装置２では、抽象化プログラムψの不成立の証明手順Ｐをオリジナルプログラムφに適用し、オリジナルプログラムφが不成立か否かを判定する（Ｓ２７）。Ｓ２７にてオリジナルプログラムφが不成立と判定した場合、プログラム形式検査装置２では、オリジナルプログラムφの検査項目が不成立で、検査対象のオリジナルプログラムφのオリジナル性質が不成立と判定する（Ｓ２８）。ここで、検査が終了し、オリジナルプログラムφは成立しないという結果が得られる。
【００５１】
一方、Ｓ２７にてオリジナルプログラムφが成立すると判定した場合、プログラム形式検査装置２では、抽象化プログラムψはオリジナルプログラムφを強化しすぎなので、強化しすぎの原因となった抽象化手法を｛ｏｖｅｒ，ｕｎｄｅｒ｝から排除し（Ｓ２９）、Ｓ２２の処理に戻る。
【００５２】
このプログラム形式検査装置２によれば、第１の実施の形態に係るプログラム形式検査装置１と同様に、Over-approximationの性質とUnder-approximationの性質を利用してＳＡＴ検査を行うことにより、検査精度を確保しつつ、検査に要する計算量を抑制できる。特に、プログラム形式検査装置２では、ｏｖｅｒ抽象化とｕｎｄｅｒ抽象化を同時に適用してＳＡＴ検査を行う混合抽象化手法を用いているので、検査時間をより削減することができる。
【００５３】
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
【００５４】
例えば、本実施の形態ではＣコードの制御プログラムに適用したが、他の様々なプログラムにも適用可能である。
【００５５】
また、本実施の形態ではＩＥＥＥ７５４標準の３２ビット（単精度）の浮動小数点実数に適用したが、他の表現方式の浮動小数点実数にも適用可能である。
【００５６】
また、本実施の形態では浮動小数点実数を用いたプログラムの検査に適用したが、固定小数点実数を用いたプログラムの検査にも適用可能である。
【００５７】
また、本実施の形態では検査手法としてＳＡＴソルバーを用いたが、他の検査手法を用いてもよい。
【符号の説明】
【００５８】
１，２…プログラム形式検査装置、１１，２１…浮動小数点抽象化部、１２，２２…ＳＡＴ検査部
【図１】
2011128980.tif 000005
【図２】
2011128980.tif 000006
【図３】
2011128980.tif 000007
【図４】
2011128980.tif 000008
【図５】
2011128980.tif 000009
【図６】
2011128980.tif 000010
【図７】
2011128980.tif 000011