説明

状態探索装置、及び状態カバー率推定方法

【課題】有限状態の状態遷移グラフにおける探索すべき状態空間のうち、探索し得た空間のカバー率を推定すること。
【解決手段】既訪状態を管理するブルームフィルタ112と、サイズの異なるブルームフィルタ112を利用して複数回のモデル検査を実施するモデル検査部110と、複数回のモデル検査におけるブルームフィルタ112のサイズと到達状態数との関係を近似する成長曲線を推定することにより状態カバー率を推定する状態カバー率推定部120とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、状態探索装置、及び状態カバー率推定方法に関する。特に本発明は、ブルームフィルタを用いて取り得る各状態を訪問して処理を行う状態探索装置、並びに有限状態の状態遷移グラフにおける探索すべき状態空間のうち、探索し得た空間のカバー率を推定する状態カバー率推定方法に関する。
【背景技術】
【0002】
モデル検査とは、システムの設計書や仕様書からモデルを作成し、モデルが検査項目を満たすかどうかを全数探索することによって不具合を発見する技術である。具体的には、モデル検査では、システムを有限状態の状態遷移グラフとしてモデルを記述する。そして、モデル検査では、その状態遷移グラフにおいて、不変条件や時相論理式によって記述された形式仕様が満たされるかどうかを検査する。
【0003】
しかしながら、モデル検査には、状態爆発問題と呼ばれる課題もある。具体的には、モデル検査において探索すべき状態数は、検査するシステムが複雑になると指数的に増加する。モデル検査では、状態数の増加に伴い、検査に必要なメモリ量も増加する。そのため、モデル検査では、検査するシステムの規模が大きくなると、検査の途中でメモリ不足となり探索が打ち切られてしまい、ごく一部の探索空間しかカバーできなくなってしまうことがある。
【0004】
このような問題への対処方法としては、様々な手法が採られている。例えば、SPIN(Simple Promela Interpreter)と呼ばれるモデル検査器では、Bitstate Hashingと呼ばれる手法によって、メモリ量が十分に確保できない状態での状態空間のカバー率向上を実現している。
【0005】
また、モデル検査では、状態空間の網羅的探索を行う場合、遷移先の状態に既に訪問したかどうかを確認するために、既訪状態を保存する必要がある。データ操作の効率を考えると状態を保存するためにはハッシュテーブルを用いるのが一般的であるが、Bitstate Hashingではブルームフィルタを用いて既訪状態を管理する。ブルームフィルタは、ある要素が集合のメンバーであるかを判定するために用いることができるデータ構造である。ただし、ブルームフィルタは確率的データ構造であり、擬陽性の可能性がある。つまり、既訪状態であることを判定するためにブルームフィルタを利用する場合、未だ訪問していないにも関わらず、既訪と判断される可能性がある。しかしながら、1状態を保持するために必要なデータ量はハッシュテーブルを用いる場合に比べ少なくてすむため、結果としてメモリが十分確保できない場合では状態空間のカバー率が向上する。
【0006】
Bitstate Hashingは、メモリが少ない計算機環境においても効率的な検査を可能にする。しかしながら、Bitstate Hashingは近似的手法であり、検査により必ずしも全ての状態の探索を行えるわけではない。したがって、検査の精度という観点から考えれば、全状態に対してどれだけのカバー率が達成できたかを利用者に対して提示できることが望ましい。
【0007】
ところで、Bitstate Hashingを用いたモデル検査器における状態カバー率の推定方法が知られている(例えば、非特許文献1参照。)。図7は、Bitstate Hashingを用いたモデル検査器900の構成を示す。モデル検査器900は、モデル検査部910、及び状態カバー率推定部920を備える。モデル検査部910は、初期状態と状態遷移規則から定義される有限の状態遷移グラフを、深さ優先探索などの探索アルゴリズムにより探索し、与えられた形式仕様に違反する状態又は実行系列を探索する。モデル検査部910は、ブルームフィルタ912を用いて訪問済み状態を記憶し、到達状態計数部911により探索により到達した状態数を計数する。到達状態計数部911は、ブルームフィルタ912に状態が追加されるときに到達状態数をインクリメントすることで到達状態数を計数する。モデル検査部910による探索が完了すると、状態カバー率推定部920は、モデル検査部910から到達状態数Nとブルームフィルタ912のサイズm(ビット)を受け取り状態カバー率の推定値を計算する。非特許文献1に記載の状態カバー率推定値の計算式は、次のとおりである。
【0008】
【数1】

【0009】
この計算式は、モデル検査器SPINでは以前用いられていたが、精度はあまり高くない。そのため、SPIN version 5ではこの計算式による推定値の表示を行うオプションは廃止されている。
【0010】
モデル検査器SPINでは、この他に、状態カバー率の指標としてm/Nで定義されるhash factorを検査終了時に提示する。hash factorは、1状態当たりの探索に利用できたメモリ量(ビット数)を表しており、この値が大きいほどハッシュ値の衝突が少ない。そのため、良好な状態カバー率を達成できたと判断できる。しかし、この値は十分な状態カバー率が達成できているかどうかの判定には適しているが、状態カバー率を直感的に表すものではなく、利用者が得られる情報は限定的である。モデル検査を複数回又は並列に実行することで総合的な状態カバー率を向上させる手法では、1回の検査の状態カバー率によって、十分な状態カバー率を実現するのに必要な検査の回数や並列度が異なるため、hash factorはそのような用途におけるカバー率指標としては不十分である。
【先行技術文献】
【非特許文献】
【0011】
【非特許文献1】ジェラルド ジェイ・ホルツマン(Gerard J. Holzmann)著、「ザ スピン モデル チェッカー」、(米国)、アジソン ウェスレイ プロフェッショナル(Addison−Wesley Professional)、2003年
【発明の概要】
【発明が解決しようとする課題】
【0012】
上述のとおり、Bitstate Hashingを用いたモデル検査は、利用者に提示する状態カバー率の推定値は信頼度の低いものであった。
【課題を解決するための手段】
【0013】
上記課題を解決するために、本発明の第1の形態によると、ブルームフィルタを用いて取り得る各状態を訪問して処理を行う状態探索装置であって、既訪状態を管理するブルームフィルタと、サイズの異なるブルームフィルタを利用して複数回の探索を実施する探索部と、複数回の探索におけるブルームフィルタのサイズと到達状態数との関係を近似する成長曲線を推定することにより状態カバー率を推定する状態カバー率推定部とを備える。
【0014】
本発明の第2の形態によると、有限状態の状態遷移グラフにおける探索すべき状態空間のうち、探索し得た空間のカバー率を推定する状態カバー率推定方法であって、ブルームフィルタにより既訪状態を管理する段階と、サイズの異なるブルームフィルタを利用して複数回の探索を実施する段階と、複数回の探索におけるブルームフィルタのサイズと到達状態数との関係を近似する成長曲線を推定することにより状態カバー率を推定する段階とを備える。
【0015】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となり得る。
【発明の効果】
【0016】
以上の説明から明らかなように、この発明によれば、ブルームフィルタのサイズに応じた到達状態数の変化に伴う推定値を得ることができるため、一回の検査結果のみを用いる推定方法に比べ、精度の高い状態カバー率の推定値を求めることができる。
【図面の簡単な説明】
【0017】
【図1】第1の実施形態に係るモデル検査器100のブロック構成の一例を示す図である。
【図2】本発明の第1の実施形態のモデル検査器100の動作を示すフローチャートである。
【図3】本発明の第1の実施形態の状態カバー率推定方法による推定結果の一例である。
【図4】第2の実施形態に係るモデル検査器200のブロック構成の一例を示す図である。
【図5】本発明の第2の実施形態のモデル検査器200の動作を示すフローチャートである。
【図6】本発明の第2の実施形態の状態カバー率推定方法による推定結果の一例である。
【図7】Bitstate Hashingを用いたモデル検査器900の構成を示す図である。
【発明を実施するための形態】
【0018】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0019】
図1は、第1の実施形態に係るモデル検査器100のブロック構成の一例を示す。モデル検査器100は、モデル検査部110、状態カバー率推定部120、及び検査履歴記憶部130を備える。なお、モデル検査器100は、この発明における「状態探索装置」の一例であってよい。また、モデル検査部110は、この発明における「探索部」の一例であってよい。
【0020】
モデル検査部110は、到達状態計数部111とブルームフィルタ112を有する。モデル検査部110は、初期状態と状態遷移規則及び形式仕様の入力を受け付けると、初期状態と状態遷移規則によって定義される有限の状態遷移グラフを探索し、与えられた形式仕様に違反する状態を探索する。具体的には、モデル検査部110は、深さ優先探索などの探索アルゴリズムを使って状態グラフの探索を行う。また、モデル検査部110は、状態グラフの探索において、訪問済みの状態の管理にブルームフィルタ112を用いる。なお、「訪問」とは、状態グラフの探索において、ある状態に到達することを指す。
【0021】
到達状態計数部111は、探索により到達した状態数を計数する。具体的には、状態の計数は、モデル検査部110がブルームフィルタ112に未訪問の状態を訪問済みとして追加する際に、それまでの計数値に1加算することにより行う。
【0022】
ブルームフィルタ112は、モデル検査部110の状態グラフの探索における既訪状態を管理する。ブルームフィルタ112は、長さmビットのビット列から構成され、初期状態では全てのビットがオフになっている。ブルームフィルタ112に対する操作は、状態の登録(追加)と登録済みかのチェック(既訪チェック)が定義される。これらの操作には、状態を入力として、0からm−1のハッシュ値を出力する、k個のハッシュ関数を用いる。状態を追加する場合、これらのハッシュ関数を用いてk個のハッシュ値を求め、それらハッシュ値をインデックスとする全てのビットをオンにする。状態の既訪チェックをする場合、k個のハッシュ値をインデックスとする全てのビットがオンであるとき既訪であると判断し、そうでなければ、未訪問と判断する。ブルームフィルタ112には、未訪問の状態を既訪と判断する偽陽性による誤判定の可能性がある。ブルームフィルタ112のサイズmは、モデル検査の実行時にオプションとして指定できる。
【0023】
検査履歴記憶部130は、モデル検査部110による複数回の検査結果を保持する。具体的には、検査時のブルームフィルタ112のサイズm(ビット数)と検査終了時の到達状態計数部111の計数した到達状態数Nが記憶される。
【0024】
状態カバー率推定部120は、検査履歴記憶部130の保持する検査結果から状態カバー率を推定する。状態カバー率の推定は、検査結果を近似する成長曲線を推定することにより行う。ここで、成長曲線とは最初は緩やかに増加し、徐々に増加速度が速くなるが、十分大きくなると増加速度が減少し、ある値に漸近するようなS字型の曲線である。成長曲線は、生物の個体数やソフトウェアの累積バグ数などのモデルとして利用され、ロジスティック曲線やゴンペルツ曲線が広く知られる。
【0025】
Bitstate Hashingを用いたモデル検査では、tは底を2とするブルームフィルタ112のサイズの対数、Mは全状態数、Nは到達状態数とするとき、ブルームフィルタ112を用いたモデル検査におけるtとNの関係は次の性質が言える。
【0026】
tの増加によりブルームフィルタ112が大きくなると、擬陽性により訪問済みと判断されていた状態が未訪問と判断されることにより、到達状態数が増加する。状態カバー率が1に近づくと、ブルームフィルタ112により擬陽性と判断される確率は低下するため、tの増加による到達状態数の増加は緩やかになり、dN/dtは0に近づく。
【0027】
特に、tが十分小さい領域では、検査の終了時にはブルームフィルタのほぼ全てがオンビットとなる。このような条件で、tを1だけ減少させる場合、つまりブルームフィルタ112のサイズを半減させる場合、同様にブルームフィルタ112のほぼ全てがオンビットとなる。k=1の場合を考えると、ブルームフィルタ112のオンビット数は到達状態数と等しいため、tが1減少することによりNは半減することが分かる。kが2以上の場合は、オンビット数と到達状態数は等しくはないが、k=1の場合と同様、tが十分小さい領域ではNは指数的に増加する。
【0028】
次に、ハッシュ関数の数と状態カバー率の変化の関係性について述べる。ブルームフィルタ112に用いるハッシュ関数の数が2の場合、tの増加に伴い、擬陽性と判断された状態は2つのハッシュ値のうちいずれかの衝突を避けることができれば、擬陽性と判断されなくなり到達状態数が増加する。同じ状態カバー率を達成している状態であればtの増加量が同じであっても、ハッシュ関数の数が1の場合に比べて、2つのハッシュ値のうちどちらか一方が衝突を回避できればよいため、その確率は高くなる。同様の議論はkを増加させた場合にも成り立つ。したがって、同じ状態カバー率を達成している状況では、ハッシュ関数の数kが多い方が、tの増加によるNの増分は多くなる。
【0029】
本実施形態における状態カバー率の推定には、以上の性質を満たす成長曲線を用いる。例えば、式(1)に示す微分方程式で定義される曲線を用いることができる。
【0030】
【数2】

【0031】
ここで、tは底を2とするブルームフィルタ112のサイズの対数、Nは到達状態数、Mは状態グラフの全状態数、rは増加率、pは状態カバー率、kはブルームフィルタ112が用いるハッシュ関数の数を表す。式(1)を解くと、次の式(2)が得られる。(Cは積分定数。)特に、k=1のとき式(2)はロジスティック曲線を表す。
【0032】
【数3】

【0033】
検査終了時に、未知な値はM、C、rである。このうちMを推定できれば状態カバー率(N/M)の推定値を求めることができる。特にrについては、tが十分小さい領域では、tが1増加するとNが2倍になるという前述の議論から、rをln(2)としてもよい。ここで、ln(x)は底をeとするxの対数を表す。
【0034】
次に図2を参照して本実施形態の動作について説明する。図2は、本実施形態における状態カバー率推定の手順のフローチャートである。
【0035】
状態カバー率を推定するために、モデル検査部110は複数回のモデル検査を実施する(S1〜S4)。検査の回数には、任意の値を用いてよい。ただし、少なくとも、式2における未知数の数以上は、ブルームフィルタ112のサイズが互いに異なる検査を行う必要がある。複数回行われる検査において、それぞれの検査ではブルームフィルタ112のサイズを変更して検査を実施する(S1)。ブルームフィルタ112のサイズの設定の具体例としては、検査毎にブルームフィルタ112のサイズを1/2にする方法を用いることができる。S2で実施されたモデル検査の結果は、検査履歴記憶部130に保持される(S3)。ここで、保持される情報は、ブルームフィルタ112のサイズと到達状態計数部111の保持する到達状態数の組である。このようにして、蓄積された検査履歴をもとに、状態カバー率推定部120は状態カバー率の推定値を求める(S4)。カバー率の推定には、まず、検査履歴記憶部130の保持するデータを近似する成長曲線を求め、全状態数Mを推定する(S5)。近似曲線を求めるには、例えば非線形最小二乗法を用いることができる。式2を成長曲線として用いる場合、非線形二乗法により全状態数Mの推定値を求めることができ、検査履歴記憶部130の保持する到達状態数の最大値がNmaxのとき、状態カバー率はNmax/Mと推定できる。
【0036】
図3は約40万状態の状態グラフに対して、ブルームフィルタ112を利用した深さ優先探索を実施した場合のブルームフィルタ112のサイズと実際の状態カバー率(+)と本実施形態の手法を用いた推定値(□)、非特許文献1の計算式による推定値(△)を表している。本実施形態の手法は、非特許文献1の手法より精度の高い推定値が得られていることが分かる。
【0037】
SPINのように、明示的な探索を行うモデル検査では、ある状態sの遷移先状態の列next(s)の順序をランダムにすることで、複数回実行時の総合的なカバー率を向上させることができる。しかし、本実施形態においてそのようなランダム性を導入した場合、各々の検査によって探索される部分グラフが大きく変わってしまい、結果として到達状態数が検査度に大きくぶれ、近似曲線の推定が上手くできない状況が生じる可能性がある。そのため、状態sの遷移先状態の生成順序は同一とすることが望ましい。ランダム性を導入する場合は、ブルームフィルタ112のサイズが同一の検査を複数回実施し、その最大値(最小値)のみを用いて状態カバー率を推定することで結果を安定させることができる。
【0038】
本実施形態では、サイズの異なるブルームフィルタ112を利用した複数回のモデル検査を実施し、その結果を近似する成長曲線を推定することで状態カバー率を推定する。ブルームフィルタ112のサイズに応じた到達状態数の変化に応じた推定値を得ることができるため、一回の検査結果のみを用いる推定方法に比べ、精度の高い状態カバー率の推定値を求めることができる。
【0039】
図4は、第2の実施形態に係るモデル検査器200のブロック構成の一例を示す。モデル検査器200は、モデル検査部210、状態カバー率推定部220、及び検査履歴記憶部230を備える。モデル検査器200と、第1の実施形態に係るモデル検査器100との相違点は、状態カバー率推定部220の処理が異なる点にある。その他の構成要素の機能及び動作は、第1の実施形態に係るモデル検査器100の構成要素と同様の機能及び動作であるため、その詳細な説明を省略する。
【0040】
具体的には、本実施形態では、第1の実施形態と比べ、2回のモデル検査で状態カバー率を推定できるという点が異なる。ブルームフィルタ212のサイズが2のt乗ビットと2の(t−n)乗ビットにおける到達状態数の比Rを、次のとおりとする。
【0041】
【数4】

【0042】
これを用いると、式2から状態カバー率の推定値は次式で表せる。ここで、第1の実施形態での議論からr=ln(2)とする。本実施形態では、式(3)を状態カバー率の推定値として用いる。
【0043】
【数5】

【0044】
式(3)を用いることで、ブルームフィルタ212のサイズが、2のt乗ビットの場合と2の(t−n)乗ビットの場合の到達状態数が分かれば、状態カバー率を推定できることが分かる。
【0045】
本実施形態における動作のフローチャートを図5に示す。本実施形態における状態カバー率推定部120は、式(3)を用いて状態カバー率の推定を行う。また、本実施形態の動作は図5に示すように、S4bとS5bが第1の実施形態と異なる。本実施形態では、S4bにおける指定回数は2回であり、S5bでの状態カバー率の推定は式3で行う。本実施形態におけるその他の構成、動作については、第1の実施形態と同様であり、同一の符号を付し詳細な説明を省略する。
【0046】
図6は図3と同じ状態グラフに対して、ブルームフィルタ212を利用した深さ優先探索を実施した場合のブルームフィルタ212のサイズと実際の状態カバー率(+)と本実施形態の手法を用いた推定値(□)、非特許文献1の計算式による推定値(△)を表している。本実施形態においても、非特許文献1の手法より精度の高い推定値が得られていることが分かる。
【0047】
本実施形態においても、第1の実施形態同様、遷移先状態の生成順序は同一とすることが望ましく、生成順序にランダム性を導入する場合は、ブルームフィルタ212のサイズが同一の検査を複数回実施し、その最大値(最小値)のみを用いて状態カバー率を推定することで結果を安定させることができる。
【0048】
本実施形態は、2回のモデル検査で精度の高い状態カバー率を推定でき、単純な式により状態カバー率を推定できるため、第1の実施形態に比べて状態カバー率の推定にかかる計算時間が短いという利点がある。
【0049】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【符号の説明】
【0050】
100 モデル検査器
110 モデル検査部
111 到達状態計数部
112 ブルームフィルタ
120 状態カバー率推定部
130 検査履歴記憶部
100 モデル検査器
210 モデル検査部
211 到達状態計数部
212 ブルームフィルタ
220 状態カバー率推定部
230 検査履歴記憶部

【特許請求の範囲】
【請求項1】
ブルームフィルタを用いて取り得る各状態を訪問して処理を行う状態探索装置であって、
既訪状態を管理するブルームフィルタと、
サイズの異なる前記ブルームフィルタを利用して複数回の探索を実施する探索部と、
前記複数回の探索における前記ブルームフィルタのサイズと到達状態数との関係を近似する成長曲線を推定することにより状態カバー率を推定する状態カバー率推定部と
を備える状態探索装置。
【請求項2】
前記成長曲線は、到達状態数、全状態数、前記ブルームフィルタに用いるハッシュ関数の数、及び前記ブルームフィルタのサイズの各値を用いて定義される曲線である
請求項1に記載の状態探索装置。
【請求項3】
前記状態カバー率の推定には、非線形最小二乗法を用いる
請求項1又は2に記載の状態探索装置。
【請求項4】
前記状態カバー率の推定には、前記ブルームフィルタのサイズが異なる2回の探索の検査結果を用い、それらの到達状態数の比を用いる
請求項2に記載の状態探索装置。
【請求項5】
前記状態カバー率の推定には、前記2回の探索に用いた前記ブルームフィルタのサイズの比と前記到達状態数の比の差を用いる
請求項2乃至4のいずれかに記載の状態探索装置。
【請求項6】
前記複数回の探索において遷移先状態の生成順序を同一にする
請求項1乃至5のいずれかに記載の状態探索装置。
【請求項7】
有限状態の状態遷移グラフにおける探索すべき状態空間のうち、探索し得た空間のカバー率を推定する状態カバー率推定方法であって、
ブルームフィルタにより既訪状態を管理する段階と、
サイズの異なる前記ブルームフィルタを利用して複数回の探索を実施する段階と、
前記複数回の探索における前記ブルームフィルタのサイズと到達状態数との関係を近似する成長曲線を推定することにより状態カバー率を推定する段階と
を備える状態カバー率推定方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2011−145990(P2011−145990A)
【公開日】平成23年7月28日(2011.7.28)
【国際特許分類】
【出願番号】特願2010−8215(P2010−8215)
【出願日】平成22年1月18日(2010.1.18)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】