(57)【要約】  分散環境モデルを示す情報を取得すると、第１の状態を開始位置とし、１つ以上の遷移で分岐することなく直線的に終了位置となる第２の状態まで移動する直線移動を複数実行することで分散環境モデルがとり得る状態を探索するとともに、探索した状態が所定のプロパティを満たすか否かを判定し、過去に探索された探索済みの状態と、過去に実行された直線移動各々における遷移の順序とを記憶するとともに、探索済みの状態各々に、過去の探索において他の状態に移動した時の遷移を対応付けて記憶させることによって、分散環境モデルに対するモデル検査においてＤＰＯＲを適用する際、探索済み状態以降の探索の打ち切りを実現させ、効率的な探索を可能とした。
2015107711.tif 000002
【特許請求の範囲】
【請求項１】
複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索部と、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理部と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理部と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理部と、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析部と、を有し、  前記分散環境モデル探索部は、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査装置。
【請求項２】
請求項１に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、Ｎ回目（Ｎは１以上の整数）の前記直線移動の前記探索時に探索した前記状態が前記探索済み状態管理部に記憶されているか確認し、記憶されている場合、当該状態を終了位置としてＮ回目の前記直線移動の前記探索を終了するとともに、前記探索済み遷移履歴管理部及び前記探索済み状態遷移対応情報管理部が記憶する情報を利用して、過去の探索においてＮ回目の前記直線移動の前記探索の終了位置となった前記状態以降に行われた前記遷移及びその順序を示す実行済みパスを１つ以上取得し、  前記分散環境モデル依存関係解析部は、Ｎ回目の前記直線移動の前記探索のパスと、前記分散環境モデル探索部が取得した１つ以上の前記実行済みパス各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の前記遷移に対して、前記依存関係、及び、前記happens-before関係の解析を行い、Ｎ回目の前記直線移動の前記探索のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。
【請求項３】
請求項２に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部が複数の前記実行済みパスを取得した場合、  前記分散環境モデル依存関係解析部は、前記第１の直線移動のパスと、複数の前記実行済みパス各々とをこの順に結合してできる複数の前記一続きのパス各々に対して、前記依存関係、及び、前記happens-before関係の解析を行い、前記第１の直線移動のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。
【請求項４】
請求項１から３のいずれか１項に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、OpenFlowネットワーク環境を表す分散環境モデルの探索を行い、  前記分散環境モデル依存関係解析部は、前記OpenFlowネットワーク環境における依存関係及びhappens-before関係の解析を行う分散環境モデル用モデル検査装置。
【請求項５】
請求項１から４のいずれか１項に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、前記プロパティを、ユーザーからの入力として受け付ける機能を備える分散環境モデル用モデル検査装置。
【請求項６】
請求項５に記載の分散環境モデル用モデル検査装置において、  ユーザーに対して選択可能に前記プロパティの雛形を提供するとともに、提供した雛形の中から１つ以上を選択するユーザー入力を受け付ける検証情報雛形提供部をさらに有し、  前記分散環境モデル探索部は、前記検証情報雛形提供部が受け付けた前記雛形を一部又は全部とした前記プロパティを含む前記検証情報を取得する分散環境モデル用モデル検査装置。
【請求項７】
コンピュータを、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索手段、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理手段、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理手段、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理手段、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析手段、として機能させ、  前記分散環境モデル探索手段に、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始させるプログラム。
【請求項８】
コンピュータが、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索工程と、  過去に探索された探索済みの前記状態を記憶部に記憶させる探索済み状態管理工程と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶部に記憶させる探索済み遷移履歴管理工程と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶部に記憶させる探索済み状態遷移対応情報管理工程と、  前記分散環境モデル探索工程で１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析工程と、を実行し、  前記分散環境モデル探索工程では、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、分散環境モデル用モデル検査装置、分散環境モデル用モデル検査方法及びプログラムに関する。
【背景技術】
【０００２】  近年、システムやソフトウェアの検証手法として、モデル検査による検証手法が知られている。モデル検査とは、検証対象を状態遷移系としてモデル化し、それを網羅的に探索することで、検証対象が仕様を満たすか検証する技術である。設計段階から適用でき、検証対象が仕様を満たすか否かを保証できるため、システムやソフトウェアの信頼性を向上させるための技術として注目されている。【０００３】  また、最近ではネットワークの検証への適用も試みられている。例えば非特許文献１では、OpenFlowという技術（非特許文献２、３を参照）により制御されたネットワークをモデル検査により状態探索する際、OpenFlowコントローラのプログラムを記号実行し、全てのコードパスを実行するためのパケットの代表値の集合を求め、それを用いて状態探索を行う技術を開示している。【０００４】  モデル検査は、上記のような特長を持つ一方、計算に必要なメモリや時間が、検証対象の規模に対し指数的に増大するという課題を持つ。そのため、実践的なシステムやソフトウェアの検証を目的としたモデル検査においては、探索の効率化が不可欠である。【０００５】  例えば非特許文献４では、マルチスレッド環境モデルに対するモデル検査において、検証の観点で冗長な探索を枝刈りする技術であるＤＰＯＲ（Dynamic Partial Order Reduction）を開示している。【０００６】  ＤＰＯＲでは、モデル検査対象の状態遷移系を探索する際、最初に適当な１つのパス（経路）で状態間を遷移する。そして、そのパスの遷移系列の中に、互いの実行順序が実行結果に影響を及ぼす遷移のペアが存在するか確認する。このような遷移のペアを、依存関係のある遷移と呼ぶ。依存関係のある遷移が存在する場合、そのペアの実行順序を入れ替えたパスで状態間を遷移しながら探索するため、新たな探索を開始する位置を示すバックトラック地点をそのパス中に生成する。例えば、依存関係のある遷移のペアのうち先に行った遷移の直前の状態を先程実行したパスから探し、当該状態をバックトラック地点とする。【０００７】  そして、先程のパスから、依存関係のある遷移を全て検出し終えたら、当該パス上で最後方にあるバックトラック地点から探索を再開する。バックトラック地点がなくなるまでこの手順を繰り返す。これにより、検証対象の全ての実行パターンのうち、実行結果が異なるパスのみを探索することが可能である。言い換えると、検証結果が異ならないパス、つまり、検証の観点で冗長なパスの探索を枝刈りすることができ、探索の効率化が実現される。【０００８】  非特許文献５では、ＤＰＯＲを改良した技術であるＳＤＰＯＲを開示している。モデル検査では、一般的に、過去に探索した状態（探索済み状態）に再度到達した場合、その状態以降の探索は当然ながら冗長であるため、探索を打ち切る。しかし、ＤＰＯＲにおいては、安易に探索を打ち切ると、パス上の依存関係のある遷移の解析に影響し、正しい結果が得られない。そのためＤＰＯＲでは、探索済み状態に到達した場合でも、探索を打ち切らずに続ける。【０００９】  ＳＤＰＯＲは、探索済み状態に到達した場合に、探索を打ち切ることが可能なように改良したＤＰＯＲである。ＳＤＰＯＲでは、過去の探索で行われた遷移をグラフで管理し、依存関係の解析に利用する。グラフは、各ノードに遷移が紐付けられ、各有向エッジが、過去の探索で行った遷移の実行順序を表すものである。例えば、探索中に行った遷移ｔ１の直後の状態をｓ１とすると、さらにｓ１から遷移ｔ２を行った場合、前記グラフ中の遷移ｔ１に対応するノードｎ１から、遷移ｔ２に対応するノードｎ２に有向エッジが引かれる（ノードｎ１やｎ２がグラフ中に存在しなければ作成される）。【００１０】  ＳＤＰＯＲでは、過去に探索した状態ｓ２に到達すると、状態ｓ２から行うことのできる遷移を調べ、その遷移に対応するノードをグラフ中から探し、さらに、そのノードから有向エッジを辿って到達可能なノードを全て抽出する。ここで、先程抽出したノードに対応する遷移は、ｓ２以降の状態遷移において実行され得る遷移を表している。これらの遷移と、現在のパス上の遷移とを用いて依存関係を解析し、バックトラック地点を生成する。これらの手順により、探索済みの状態以降の探索を打ち切っても、正しく依存関係を解析することができ、探索の打ち切りが可能な分効率化されるのが、ＳＤＰＯＲの特長である。【００１１】  非特許文献６では、ＤＰＯＲを分散環境モデルのモデル検査向けに修正した技術であるＤＰＯＲ−ＤＳを開示している。検証対象のモデルの環境の違いを吸収するため、バックトラック地点を生成する方法を変更している。実行パス上の遷移間の関係について、依存関係とは別に、分散環境モデルにおけるhappens-before関係を定義し、バックトラック地点の生成の判断に利用する。happens-before関係とは、あるモデル上で必ず成り立つ遷移間の実行順序関係である。例えば、あるパケットｐの送受信を行う遷移を考えたとき、パケットｐの送信を行う遷移は、パケットｐの受信を行う遷移よりも必ず先に起こる。このように、モデル上の因果関係から、必ず成り立つ遷移間の順序関係がhappens-before関係である。【００１２】  ＤＰＯＲ−ＤＳでは、実行パス上の遷移について、依存関係に加えてhappens-before関係の有無も解析し、ある遷移間に依存関係があったとしても、happens-before関係が成り立つ場合には、バックトラック地点を生成しない。これらの手順により、分散環境モデルのモデル検査においても、ＤＰＯＲと同様の探索の枝刈りが可能になるのが、ＤＰＯＲ−ＤＳの特長である。
【先行技術文献】
【非特許文献】
【００１３】
【非特許文献１】Canini, M. et al.: "A NICE Way to Test OpenFlow Applications", Proc. of NSDI, 2012.
【非特許文献２】McKeown, N. et al.: "OpenFlow: enabling innovation in campus networks", ACM SIGCOMM Computer Communication Review, Vol. 38, No. 2, pp. 69-74, 2008.
【非特許文献３】"OpenFlow Switch Specification Version 1.0.0 (Wire Protocol 0x01)", 2009.  http://www.openflow.org/documents/openflow-spec-v1.0.0.pdf
【非特許文献４】Flanagan, C. et al.: "Dynamic partial-order reduction for model checking software", Proc. of POPL "05, pp. 110-121, 2005.
【非特許文献５】Yang, Y. et al.: "Efficient Stateful Dynamic Partial Order Reduction", Proc. of SPIN "08, pp. 288-305, 2008.
【非特許文献６】Yabandeh, M. et al.: "DPOR-DS: Dynamic Partial Order Reduction in Distributed Systems", EPFL Technical Report NSL-REPORT-2009-005, 2009.
【発明の概要】
【発明が解決しようとする課題】
【００１４】  非特許文献４、５、６を含む従来技術の問題点は、分散環境モデルに対するモデル検査において、ＤＰＯＲを適用する際、探索済み状態以降の探索の打ち切りができず、探索が非効率的だということである。【００１５】  非特許文献６のＤＰＯＲ−ＤＳは、分散環境モデルのモデル検査に適用可能なＤＰＯＲだが、非特許文献４のＤＰＯＲと同様の理由により、探索済み状態以降の探索の打ち切りができない。【００１６】  非特許文献５のＳＤＰＯＲは、探索済み状態以降の探索の打ち切りが可能なＤＰＯＲだが、モデル検査の対象は非特許文献４のＤＰＯＲと同様、マルチスレッド環境モデルを想定している。分散環境モデルにＤＰＯＲを適用するには、ＤＰＯＲ−ＤＳが行っているように、happens-before関係の解析を必要とするが、その解析には、探索で行った複数のパス各々における遷移の順序を示す情報が必要になる。しかし、ＳＤＰＯＲが探索済み状態以降の探索を打ち切るために管理するグラフでは、過去の探索において遷移が行われた順序をパス毎に区別することなく保存してしまうため、必要な情報が取得できず、happens-before関係が解析できない。以下、図１５及び図１６を用いて説明する。【００１７】  例えば、ＳＤＰＯＲで、図１５の上側のグラフで示されるような順に状態間を遷移するパスで探索を行った場合、過去の探索で行われた遷移を示すグラフとして、図１５の下側に示すグラフが生成される。図１５の上側のグラフによれば、状態Ｓｏから遷移ｔ０で状態Ｓ１に移動したこと、その後、遷移ｔ１で状態Ｓ２に移動したこと、その後、遷移ｔ２で状態Ｓ３に移動したことが分かる。このパスで行われた遷移の順序は、ｔ０→ｔ１→ｔ２である。このような遷移の順序を示すグラフが、図１５の下側に示されている。当該グラフでは、ｔ０乃至ｔ２の遷移各々に対応する３つのノードが表示され、かつ、遷移の順序を示すため各ノード間に有向エッジが引かれている。【００１８】  ここで、図１５に示すパスにおける遷移ｔ１とｔ２の間に依存関係があったとする。この場合、図１６の上側に示すように、状態Ｓ１がバックトラック地点となり、この地点からの状態探索が新たに行われる。図１６の上側に示すグラフよれば、状態Ｓ１→状態Ｓ４→状態Ｓ３のパスで新たな状態探索が行われたことが分かる。ＳＤＰＯＲでは、この場合、過去の探索で行われた遷移を示すグラフとして、図１６の下側に示すようなグラフを生成する。図１６の下側に示すグラフは、図１５の下側に示すグラフに対して新たな情報を加えたものである。具体的には、遷移ｔ０の後に遷移ｔ２を行ったこと、及び、遷移ｔ２の後に遷移ｔ１を行ったことを示すため、ｔ０からｔ２に向かう有向エッジ、及び、ｔ２からｔ１に向かう有向エッジが新たに加えられている。【００１９】  このように、ＳＤＰＯＲで管理されるグラフでは、１つの遷移に１つのノードが対応し、有向エッジで過去の探索で行われた遷移の前後関係が示される。このようなグラフの場合、過去に行った複数のパス各々における遷移の順序を把握できない。このため、ＳＤＰＯＲでは、happens-before関係を解析できない。【００２０】  このように、分散環境モデルのモデル検査にＳＤＰＯＲをそのまま適用することはできない。結果とし���、従来技術では、分散環境モデルに対するモデル検査において、ＤＰＯＲを適用する際、探索済み状態以降の探索の打ち切りができず、探索が非効率的であるという課題があった。【００２１】  本発明の目的は上記の問題を解決することにあり、分散環境モデルに対するモデル検査においてＤＰＯＲを適用する際、探索済み状態以降の探索を打ち切る手段を提供することで、効率的な探索を可能にする技術を提供することにある。
【課題を解決するための手段】
【００２２】  本発明によれば、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索部と、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理部と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理部と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理部と、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析部と、を有し、  前記分散環境モデル探索部は、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査装置が提供される。【００２３】  また、本発明によれば、  コンピュータを、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索手段、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理手段、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理手段、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理手段、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析手段、として機能させ、  前記分散環境モデル探索手段に、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始させるプログラムが提供される。【００２４】  また、本発明によれば、  コンピュータが、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移��分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索工程と、  過去に探索された探索済みの前記状態を記憶部に記憶させる探索済み状態管理工程と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶部に記憶させる探索済み遷移履歴管理工程と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶部に記憶させる探索済み状態遷移対応情報管理工程と、  前記分散環境モデル探索工程で１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析工程と、を実行し、  前記分散環境モデル探索工程では、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査方法が提供される。
【発明の効果】
【００２５】  本発明によれば、分散環境モデルに対するモデル検査においてＤＰＯＲを適用する際、探索済み状態以降の探索を打ち切る手段が実現される。結果、効率的な探索が可能となる。
【図面の簡単な説明】
【００２６】  上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。【００２７】
【図１】本発明の第１の実施の形態の分散環境モデル用モデル検査装置の構成を示す機能ブロック図である。
【図２】本発明の第１の実施の形態の動作を示すフロー図である。
【図３】本発明の第１の実施の形態におけるステップＳ１２の一部の詳細を示すフロー図である。
【図４】本発明の第１の実施の形態におけるステップＳ１２の一部の詳細を示すフロー図である。
【図５】本発明の第１の実施の形態におけるステップＳ１２の一部の詳細を示すフロー図である。
【図６】本発明の第１の実施の形態におけるステップ１３の一部の詳細を示すフロー図である。
【図７】本発明の第１の実施の形態におけるステップＳ１３の一部の詳細を示すフロー図である。
【図８】本発明の第１の実施の形態におけるステップＳ１３の一部の詳細を示すフロー図である。
【図９】本発明の第１の実施の形態におけるステップＳ１４の一部の詳細を示すフロー図である。
【図１０】本発明の第３の実施の形態の分散環境モデル用モデル検査装置の構成を示す機能ブロック図である。
【図１１】本発明の第１の実施の形態の動作を説明するための概念図である。
【図１２】本発明の第１の実施の形態の動作を説明するための概念図である。
【図１３】本発明の第１の実施の形態の動作を説明するための概念図である。
【図１４】本発明の第１の実施の形態の動作を説明するための概念図である。
【図１５】比較例の課題を説明するための概念図である。
【図１６】比較例の課題を説明するための図である。
【発明を実施するための形態】
【００２８】  以下、本発明の実施の形態について図面を用いて説明する。なお、同様の構成要素には同様の符号を付し、適宜説明を省略する。
【００２９】  本実施形態の装置は、任意のコンピュータのＣＰＵ（Central Processing Unit）、メモリ、メモリにロードされたプログラム（あらかじめ装置を出荷する段階からメモリ内に格納されているプログラムのほか、ＣＤ（Compact Disc）等の記憶媒体やインターネット上のサーバ等からダウンロードされたプログラムも含む）、そのプログラムを格納するハードディスク等の記憶ユニット、ネットワーク接続用インタフェイスを中心にハードウエアとソフトウエアの任意の組合せによって実現される。そして、その実現方法、装置にはいろいろな変形例があることは、当業者には理解されるところである。
【００３０】  なお、以下の実施形態の説明において利用する機能ブロック図は、ハードウエア単位の構成ではなく、機能単位のブロックを示している。これらの図においては、各装置は１つの機器により実現されるよう記載されているが、その実現手段はこれに限定されない。すなわち、物理的に分かれた構成であっても、論理的に分かれた構成であっても構わない。
【００３１】＜第１の実施形態＞［構成］  まず、図面を参照しながら本発明の第１の実施の形態の構成について詳細に説明する。
【００３２】  図１を参照すると、本発明の第１の実施の形態における分散環境モデル用モデル検査装置１は、分散環境モデル探索部１１と、分散環境モデル依存関係解析部１２と、探索済み状態管理部１３と、探索済み遷移履歴管理部１４と、探索済み状態遷移対応情報管理部１５と、を含む。
【００３３】  分散環境モデル探索部１１は、分散環境モデル依存関係解析部１２、探索済み状態管理部１３、探索済み遷移履歴管理部１４、探索済み状態遷移対応情報管理部１５のそれぞれと、情報をやり取りするように構成されている。探索済み状態遷移対応情報管理部１５は、探索済み状態管理部１３が管理する探索済み状態と、探索済み遷移履歴管理部１４が管理する遷移と、を紐付けるため、その対応関係を管理する。以下、各部について説明する。
【００３４】  分散環境モデル探索部１１は、複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で状態間を移動する分散環境モデルを示す情報を取得すると、第１の状態を開始位置とし、１つ以上の遷移で分岐することなく直線的に終了位置となる第２の状態まで移動する直線移動（分岐を含まない直線パスによる状態移動）を複数実行することで分散環境モデルがとり得る状態を探索するとともに、探索した状態が所定のプロパティを満たすか否かを判定する。そして、分散環境モデル探索部１１は、１つの直線移動の探索を終了すると、その後、バックトラック地点を開始位置として、他の直線移動を開始する。
【００３５】  例えば、分散環境モデル探索部１１は、ユーザーから入力装置を介して、分散環境モデルと、当該分散環境モデルが満たすべきプロパティと、を含む検証情報Ｄ１１を受け取る。すると、分散環境モデル探索部１１は、受け取った検証情報Ｄ１１を用いてモデル検査を実行し、上記プロパティの成否と、上記プロパティが満たされない場合にはそれを示す反例と、を含む検証結果Ｄ１４を、出力装置を介してユーザーに返す。分散環境モデルの仕様は、後述する依存関係及びhappens-before関係が適切に定義でき、それらがコンピュータ処理で解析可能な状態遷移系であれば何でもよい。また、分散環境モデルの記述形式も、コンピュータで処理可能であれば何でもよい。第１の実施の形態では、分散環境モデルの仕様を以下に示すものとして説明する。
【００３６】  第１の実施の形態の分散環境モデルにおける状態の定義について説明する。状態は、（Ｎ、Ｍ、Ｑ）の三つを要素とする組として定義される。Ｎは分散環境中の動作主体であるノード(以下、動作主体ノード)の集合であり、Ｎの要素ｎ（ｎ∈Ｎ）はその状態を表す変数ｓｗを持つ。Ｍは動作主体ノード間でやり取りされるメッセージの集合であり、Ｍの要素ｍ（ｍ∈Ｍ）はメッセージの内容を表す変数ｍｖを持つ。Ｑは通信チャネルの集合であり、Ｑの要素ｑ（ｑ∈Ｑ）は複数のメッセージを格納する変数により実現される通信チャネルである。
【００３７】  なお、動作主体ノードは、通信チャネルにメッセージが格納された順番とは無関係に任意の順番で通信チャネルからメッセージを取り出せるものとする。各動作主体ノードは、その他の動作主体ノードと通信するための通信チャネルを、互いに通信可能な各動作主体ノードに対し送信用と受信用とを１つずつ持つ。ある１つの動作主体ノードにとっての送信用通信チャネルは、それ以外の１つの動作主体ノードにとっての受信用通信チャネルであり、その逆も然りである。
【００３８】  第１の実施の形態の分散環境モデルにおける遷移の定義について説明する。遷移は、分散環境モデルに存在する動作主体ノードのいずれかが、特定の単位の動作を実行することでモデルの状態が変化（移動）する様子を表すものとする。特定の単位の動作とは、具体的には以下の３種類である。
【００３９】１．動作主体ノードによるメッセージ送信２．動作主体ノードによるメッセージ受信３．動作主体ノードによる内部動作
【００４０】  以下では上記３種類の動作についてそれぞれ詳しく説明する。  動作主体ノードによるメッセージ送信について説明する。動作主体ノードは、自身の状態ｓｖに応じて、メッセージ送信動作を実行することが可能である。当該動作では、動作主体ノードnがメッセージmを１つ生成して、動作主体ノードnのメッセージ送信用通信チャネル（＝動作主体ノードn以外のある動作主体ノードにとっての受信用通信チャネル）にメッセージmを格納し、自身の状態ｓｖの内容を変更する（変更しない場合もある）。
【００４１】  動作主体ノードによるメッセージ受信について説明する。動作主体ノードは、自身のメッセージ受信用通信チャネルにメッセージが１つ以上格納されている場合、メッセージ受信動作を実行することが可能である。当該動作では、動作主体ノードｎは、メッセージが１つ以上格納されている自身のメッセージ受信用通信チャネルqから、任意のメッセージmを１つ取り出す。そして、動作主体ノードｎは、メッセージmの内容ｍｖに応じて自身の状態ｓｖの内容を変更する（変更しない場合もある）。
【００４２】  動作主体ノードの内部動作について説明する。動作主体ノードは、自身の状態ｓｖに応じて、内部動作を実行することが可能である。内部動作を実行した動作主体ノードnは、自身の状態ｓｖの内容を変更する（変更しない場合もある）。
【００４３】  分散環境モデル探索部１１は、状態を変化させるにあたり、上記のモデルの動作に加えて、変化後の状態における、検証情報Ｄ１１に含まれるプロパティの成否を確認する。プロパティが満たされない場合には、プロパティが満たされないという結果と、それを示す具体例である反例と、を含む検証結果Ｄ１４を、出力装置を介してユーザーに返す。なお、検証情報Ｄ１１において、プロパティは必ずしも含まれていなくてよい。プロパティが定義されていない場合、典型的なプロパティを検証することとし、以降は分散環境モデル用モデル検査装置１全体が、検証情報Ｄ１１に典型的なプロパティが含まれているかのように動作することができる。
【００４４】  分散環境モデル依存関係解析部１２は、分散環境モデル探索部１１が１つの直線移動（分岐を含まない直線パスによる状態移動）を終了すると、当該直線移動において所定の順序で実行された複数の遷移に対して、依存関係、及び、happens-before関係の解析を行い、必要に応じて、当該直線移動のパス（直線パス）上にバックトラックすべき地点を示すバックトラック地点を生成する。分散環境モデル探索部１１が、OpenFlowネットワーク環境を表す分散環境モデルの探索を行う場合、分散環境モデル依存関係解析部１２は、OpenFlowネットワーク環境における依存関係及びhappens-before関係の解析を行うことができる。
【００４５】  例えば、分散環境モデル依存関係解析部１２は、分散環境モデル探索部１１から、実際に探索を実行したパス（実行パス）の内容を示す実行パス情報Ｄ１２を受け取る。実行パス情報Ｄ１２には、少なくとも前半部分実行パスが含まれる。実行パス情報Ｄ１２には、さらに、前半部分実行パスの後ろに繋げられる１つ以上の後半部分実行パスが含まれてもよい。分散環境モデル依存関係解析部１２は、受け取った実行パス情報Ｄ１２を利用して、実行パス上の２つの遷移間の依存関係及びhappens-before関係を解析する。
【００４６】  例えば、実行パス情報Ｄ１２に後半部分実行パスが含まれない場合、分散環境モデル依存関係解析部１２は、実行パス情報Ｄ１２に含まれる前半部分実行パス上の２つの遷移間の依存関係及びhappens-before関係を解析する。一方、実行パス情報Ｄ１２に後半部分実行パスが含まれる場合、分散環境モデル依存関係解析部１２は、実行パス情報Ｄ１２に含まれる前半部分実行パスと、１つの後半部分実行パスと、をこの順に結合してできる実行パス上の２つの遷移間の依存関係及びhappens-before関係を解析する。なお、実行パス情報Ｄ１２に複数の後半部分実行パスが含まれる場合、分散環境モデル依存関係解析部１２は、前半部分実行パスと、複数の後半部分実行パス各々とをこの順に結合してできる複数の実行パス各々の２つの遷移間の依存関係及びhappens-before関係を解析する。そして、分散環境モデル依存関係解析部１２は、解析結果に基づいて前半部分実行パス上にバックトラック地点を生成し、その結果（バックトラック地点が生成された前半部分実行パス）Ｄ１３を分散環境モデル探索部１１に返す。
【００４７】  依存関係とは、２つの遷移間に成り立つ関係であり、直感的には、それら２つの遷移の実行順序を変更する（逆にする）と、状態遷移系におけるそれらの遷移後の結果が変わったり、あるいは、それらのうち片方の遷移を行うことで、もう片方の遷移が行えるようになったり行えなくなったりする場合に、２つの遷移間に依存関係が成り立つ（依存関係がある）という。遷移ｔ１とｔ２の間に依存関係が「成り立たない」条件は、一般的には以下のように定義される。
【００４８】１．「状態ｓ１（モデルの状態）において遷移ｔ１が実行可能であり、状態ｓ１から遷移ｔ１により状態ｓ２へ遷移する場合、遷移ｔ２は状態ｓ１とｓ２との両方で実行可能か、両方で実行不可能かのいずれかである。」２．「状態ｓ１において遷移ｔ１とｔ２が実行可能である場合、状態ｓ１から遷移ｔ１を実行した先の状態で遷移ｔ２を実行した先の状態がｓ２であるならば、状態ｓ１から遷移ｔ２を実行した先の状態で遷移ｔ１を実行した先の状態もｓ２である。」
【００４９】  分散環境モデル依存関係解析部１２は、上記の一般的な依存関係の成否を解析してもよい。しかし、上記の一般的な依存関係の成否を解析するのはコストが高いため、第１の実施の形態においては、ここで用いる分散環境モデルの仕様と、ＤＰＯＲのアルゴリズムと、を考慮し、以下の条件を満たす場合、依存関係があると定義する。
【００５０】「遷移ｔ１で動作した動作主体ノードと遷移ｔ２で動作した動作主体ノードが同じ動作主体ノードであり、いずれの遷移でも動作主体ノードの状態ｓｖの内容を変更している。」
【００５１】  happens-before関係とは、あるモデル上で必ず成り立つ遷移間の実行順序関係である。例えば、第１の実施の形態における分散環境モデルで、あるメッセージｍの送受信を行う遷移を考えたとき、メッセージｍの送信に起因した遷移ｔ１は、メッセージmの受信に起因した遷移ｔ２より必ず先に起こる。このように、モデル上の因果関係から必ず成り立つ遷移間の実行順序関係がhappens-before関係であり、ｔ１→ｔ２と記述する。第１の実施の形態においては、ここで用いる分散環境モデルの仕様と、ＤＰＯＲのアルゴリズムと、を考慮し、以下のようにhappens-before関係を定義する。
【００５２】１．「遷移ｔ１が動作主体ノードによるメッセージ送信に起因した遷移であり、遷移ｔ２が動作主体ノードによるメッセージ受信に起因した遷移であり、遷移ｔ１で送信されるメッセージと遷移ｔ２で受信されるメッセージが同じメッセージである場合、ｔ１→ｔ２」 ２．「ｔ１→ｔ２であり、ｔ２→ｔ３である場合、ｔ１→ｔ３」
【００５３】  実行パス情報Ｄ１２のデータ構造について説明する。実行パス情報Ｄ１２に含まれる前半部分実行パスは、（ｓｔ、ｔｒ、Ｂａｃｋｔｒａｃｋ、Ｄｏｎｅ）の四つを要素とする組の配列（あるいはそれに準ずるデータ構造）である。
【００５４】  ｓｔはある時点での分散環境モデルの状態であり、ｔｒは状態ｓｔから行われた遷移である。Ｂａｃｋｔｒａｃｋは遷移の集合である。この集合は、モデル検査による探索においてバックトラックするにあたり、状態ｓｔ（同じ組の状態）から実行されるべき遷移の集合である。Ｄｏｎｅも遷移の集合である。この集合は、探索において状態ｓｔ（同じ組の状態）から過去に実行したことのある遷移の集合である。ある組のＢａｃｋｔｒａｃｋに含まれるが、その組のＤｏｎｅに含まれない遷移は、その組の状態ｓｔからバックトラックして実行されるべきだがまだ実行されていない遷移である。
【００５５】  実行パス情報Ｄ１２に含まれる後半部分実行パスは、遷移の配列（あるいはそれに準ずるデータ構造）である。「実行パス要素の遷移」と表現した場合、前半部分実行パスの要素であれば、ｔｒのことを表し、後半部分実行パスの要素であれば、その要素そのもの（＝遷移）を表す。ある実行パス情報Ｄ１２に含まれる前半部分実行パスはちょうど１つでなければならないが、後半部分実行パスは１つでもよく、複数でもよく、また、なくてもよい。
【００５６】  遷移のデータ構造について説明する。遷移は（ｎｏｄｅ、ｔｙｐｅ、ｓｅｎｄ、ｒｅｃｖ、ｃｈａｎｇｅ_ｆｌａｇ)の五つを要素とする組である。
【００５７】  ｎｏｄｅはその遷移の原因となった動作を行った動作主体ノードであり、ｔｙｐｅは遷移の原因となった動作の種類（メッセージ送信、メッセージ受信、内部動作等を表す値）である。ｓｅｎｄはその遷移の原因となった動作「メッセージ送信」で送信したメッセージを識別する情報であり、ｒｅｃｖはその遷移の原因となった動作「メッセージ受信」で受信したメッセージを識別する情報である。ｃｈａｎｇｅ_ｆｌａｇは、その遷移の原因となった動作を行った動作主体ノードの状態ｓｖが変更されたか否かを表すフラグで、変更された場合はｔｒｕｅ、変更されていない場合はｆａｌｓｅが格納される。このデータ構造に基づく遷移データは、分散環境モデル探索部１１による探索において、分散環境モデルの状態が遷移した際に、その遷移の内容に応じて、各フィールドの値が適切に設定された上で生成される。
【００５８】  探索済み状態管理部１３は、過去に探索された探索済みの状態を記憶する。例えば、探索済み状態管理部１３は、分散環境モデル探索部１１から、探索が行われた分散環境モデルの状態（を示す情報）を受け取り保存する。保存する方法は、受け取った状態（を示す情報）をそのまま保存してもよいし、何らかの変換を施したもの（例えば記憶容量削減のため圧縮されたもの）を保存してもよい。また、探索済み状態管理部１３は、分散環境モデル探索部１１から、ある分散環境モデルの状態が過去に探索済みか否かの問い合わせを受け付けると、その状態と一致するものが保存している状態の中にあるか否か検索し、ある場合は「探索済み」、ない場合は「未探索」という回答を分散環境モデル探索部１１に返す。
【００５９】  探索済み遷移履歴管理部１４は、過去に実行された直線移動（分岐を含まない直線パスによる状態移動）各々における遷移の順序を記憶する。例えば、探索済み遷移履歴管理部１４は、分散環境モデル探索部１１から、探索が行われた遷移（を示す情報）を受け取り、以下で説明するグラフ構造により保存する。グラフは、ノードと、各ノード間を結ぶ有向エッジとで表現される。グラフは、パスの出発点を表す根ノードと、探索時に行われた複数の遷移各々を表す複数の遷移ノードとを含む。有向エッジは分散環境モデルにおける特定のパス上での遷移の実行順序を表す。根ノードからの有向エッジが引かれた遷移ノードにより表わされた第１の遷移は、分散環境モデルの初期状態から行われた最初の遷移である。また、この遷移ノードからの有向エッジが引かれた他の遷移ノードにより表わされた第２の遷移は、第１の遷移の次に行われた遷移である。
【００６０】  ＳＤＰＯＲにおいては、互いに異なるパス上で行われる遷移ｔｒに関して、管理するグラフ中で遷移ｔｒを表す遷移ノードは常に１つである（遷移とグラフ中のノードとが１対１の関係を満たす）。これに対し、探索済み遷移履歴管理部１４が管理するグラフ上では、遷移ｔｒが互いに異なるパス（直線パス）上で実行された場合、これらに異なるノードを対応付けて管理する。本実施形態は、このようなグラフ構造を用いることで、根ノードから有向エッジをたどることにより、過去に行った直線パス何れに関しても遷移の順序を把握できる。これが、本実施形態とＳＤＰＯＲとの差異である。なお、分散環境モデル探索部１１による探索の開始時点では、グラフは空であり、分散環境モデル探索部１１から新しいノード（根ノード、遷移ノード）及び有向エッジを生成する指示を受け付け、グラフが構築されていく。
【００６１】  探索済み状態遷移対応情報管理部１５は、探索済みの状態各々に、過去の探索において他の状態に移動した時の遷移を対応付けて記憶する。例えば、探索済み状態遷移対応情報管理部１５は、分散環境モデル探索部１１により過去に探索された分散環境モデルの状態と、当該状態から行われた遷移とを紐付ける情報を保存する。また、探索済み状態遷移対応情報管理部１５は、分散環境モデル探索部１１から、分散環境モデルのある状態を入力として与えられ、その状態から過去の探索で行われた遷移の問い合わせを受けると、探索済み遷移履歴管理部１４が管理する情報を利用して、当該状態から行われた遷移を特定し、特定した結果を返す。当該状態から行われた遷移が複数ある場合には、それらの遷移を表す情報を全て返す。また、探索済み状態遷移対応情報管理部１５は、分散環境モデル探索部１１から、分散環境モデルのある状態とある遷移を入力として与えられ、それらを紐付ける指示を受け付けると、当該状態と、探索済み遷移履歴管理部１４に保存されている当該遷移を表すノードと、を紐付ける。
【００６２】［動作］  次に、第１の実施の形態の動作について詳細に説明する。
【００６３】  まず、図２を用いて全体的な流れを説明する。ユーザーは、検証情報Ｄ１１を作成し、入力装置を介して分散環境モデル探索部１１に入力する（図２のステップＳ１１）。
【００６４】  分散環境モデル探索部１１は、検証情報Ｄ１１を受け取ると、検証情報Ｄ１１に含まれる分散環境モデルを状態遷移させて適当な１つのパス（直線パス）による探索を行う。そして、実行したパスを示す実行パス情報Ｄ１２を生成して分散環境モデル依存関係解析部１２に受け渡す（ステップＳ１２）。分散環境モデル依存関係解析部１２は、実行パス情報Ｄ１２を利用して上記実行パス上の依存関係及びhappens-before関係を解析し、必要に応じて前半部分実行パス上にバックトラック地点を生成して、その結果（バックトラック地点が生成された前半部分実行パスＤ１３）を分散環境モデル探索部１１に返す（ステップＳ１３）。
【００６５】  分散環境モデル探索部１１は、前半部分実行パスＤ１３上にバックトラックしていないバックトラック地点が含まれる場合（ステップＳ１５のＹｅｓ）、所定のバックトラック地点（例：前半部分実行パスＤ１３上で一番深いバックトラック地点）から分散環境モデルを再び状態遷移させ、新たな実行パス情報Ｄ１２´を得て、それを分散環境モデル依存関係解析部１２に受け渡す（ステップＳ１４）。分散環境モデル依存関係解析部１２は、実行パス情報Ｄ１２´を利用して実行パス上の依存関係及びhappens-before関係を解析し、同様の処理を行う（ステップＳ１３）。前半部分実行パスＤ１３上にバックトラックしていないバックトラック地点が含まれる場合（ステップＳ１５のＹｅｓ）、上記処理を繰り返す。
【００６６】  その後、分散環境モデル探索部１１は、各遷移後の状態におけるプロパティの成否と、プロパティが満たされない場合にはそれを示す反例と、を含む検証結果Ｄ１４を出力する（ステップＳ１６）。そして、ユーザーは、ステップＳ１６で出力された検証結果Ｄ１４を確認する（ステップＳ１７）。
【００６７】  なお、遷移後の状態（探索された状態）各々におけるプロパティの成否の判定を行うタイミングは、例えば、以下のような例が考えられる。一例として、分散環境モデル探索部１１は、ステップＳ１２で分散環境モデルを状態遷移させて１つのパス（直線パス）による探索を行う処理、及び、ステップＳ１４で所定のバックトラック地点から他のパス（直線パス）による探索を行う処理において、状態遷移させた都度、遷移後の状態におけるプロパティの成否を判定することができる。または、分散環境モデル探索部１１は、ステップＳ１５でＮｏとなった後に、それまでに行った遷移各々の後の状態（探索済みの状態）におけるプロパティの成否をまとめて判定することができる。
【００６８】  なお、図２には示していないが、状態遷移させた都度、遷移後の状態におけるプロパティの成否を判定する処理の場合、プロパティが満たされない状態を見つけると、その時点でモデル検査の処理を終了し、検証結果Ｄ１４を出力してもよい。
【００６９】  図２に示すように、すべての状態遷移を行った後に検証結果を出力するように構成する場合、分散環境モデルに存在するプロパティを満たさない状態をすべて発見し、その結果を検証結果Ｄ１４として出力することができる。
【００７０】  次に、図３乃至図９、図１１乃至図１４を参照して、各ステップをより詳細に説明する。まず、図１１乃至図１４について説明する。図１１乃至図１４における、「状態遷移の様子」は、分散環境モデルの状態ｓｔの探索において実際に行われた状態間の遷移の様子（事実）を示している。「遷移」、「遷移履歴」、「前半部分実行パス」及び「後半部分実行パス」は、分散環境モデルの状態ｓｔの探索時に本実施形態の分散環境モデル用モデル検査装置により処理されるデータを模式的に示している。「遷移」に示されている複数の遷移要素Ｔｒ０乃至Ｔｒ５各々は、検証情報Ｄ１１で特定される実行可能な遷移各々を示している。そして、図では、「状態遷移の様子」における状態ｓｔ間の矢印と、遷移要素とを対応付けることで、状態ｓｔ間の移動各々において行われた遷移の内容を示している。「遷移履歴」は、探索済み遷移履歴管理部１４が管理する遷移履歴のグラフを示している。「前半部分実行パス」及び「後半部分実行パス」は、分散環境モデル探索部１１等により生成される実行パス情報Ｄ１２を示している。
【００７１】  図１１に示す「遷移」を見ると、（ｎｏｄｅ、ｔｙｐｅ、ｓｅｎｄ、ｒｅｃｖ、ｃｈａｎｇｅ_ｆｌａｇ)の五つを要素とする組のデータにより、遷移Ｔｒ０乃至Ｔｒ５各々の内容が示されている。当該データによれば、例えば、「状態遷移の様子」で示される実行パスにおける状態Ｓｔ０から状態Ｓｔ１への遷移は、遷移Ｔｒ０に起因したものであり、その動作主体ノードはノード１、動作内容は動作主体ノードによるメッセージの送信、送信したメッセージの識別情報はパケット１、当該動作に起因して動作主体ノードの状態は変化しなかったことが分かる。
【００７２】  また、「状態遷移の様子」及び「遷移」を見ると、当該パスでは、Ｔｒ０→Ｔｒ１→・・・Ｔｒ５の順に遷移が行われたことが分かる。「遷移履歴」のグラフでは、当該順に遷移が行われたことが示されている。また、「遷移履歴」を見ると、各遷移がどの状態に紐付いているかも分かる。さらに、「前半部分実行パス」を見ると、順に蓄積された実行パス要素Ｐｅを確認することで、当該パスにおいて状態ｓｔはＳｔ０→Ｓｔ１→・・・→Ｓｔ５の順に遷移し、遷移ｔｒはＴｒ０→Ｔｒ１→・・・Ｔｒ５の順に行われたことが分かる。また、各状態ｓｔから行われた遷移、及び、各状態ｓｔから行うべきバックトラックが分かる。
【００７３】  なお、図２のステップＳ１２の開始時点では、図１１乃至図１４に示される「遷移履歴」、「前半部分実行パス」及び「後半部分実行パス」のデータは空の状態であり、ステップＳ１２以降のステップを実行することで、図示するデータが徐々に生成されていく。
【００７４】  まず、図３及び図１１を用いて、ステップＳ１２について説明する。分散環境モデル探索部１１は、検証情報Ｄ１１から分散環境モデルを抽出し、その分散環境モデルの初期状態Ｓｔ０を生成して、状態ｓｔ＝Ｓｔ０とする（図３のステップＳ１２＿１）。次に、探索済み遷移履歴管理部１４が管理するグラフに初期状態Ｓｔ０を表す根ノードを生成させる（ステップＳ１２＿２）。このステップにより、図１１に示す「遷移履歴」の根ノードが生成される。さらに、分散環境モデル探索部１１は、初期状態Ｓｔ０と、ステップＳ１２＿２で生成させた根ノードと、を探索済み状態遷移対応情報管理部１５に紐付けさせる（ステップＳ１２＿３）。なお、図１１では、遷移履歴のグラフにおける各ノード（根ノード及び遷移ノード）内に、各ノードがどの状態ｓｔと紐付いているのかを示す情報が記載されているが、紐付ける手法はこれに限定されない。
【００７５】  次いで、分散環境モデル探索部１１は、初期状態Ｓｔ０を探索済み状態管理部１３に登録する（ステップＳ１２＿４）。次に、分散環境モデル探索部１１は、検証情報Ｄ１１を利用して、初期状態Ｓｔ０から実行可能な遷移が１つ以上あるかチェックし（ステップＳ１２＿５）、ある場合はその中から任意の遷移ｔｒを１つ選んで初期状態Ｓｔ０からの遷移ｔｒ（図１１の場合、遷移Ｔｒ０）を行わせ、当該遷移後の状態ｓｔ´（図１１の場合、Ｓｔ１）を生成する（ステップＳ１２＿６）。さらに、分散環境モデル探索部１１は、実行パス要素（ｓｔ、ｔｒ、Ｂａｃｋｔｒａｃｋ、Ｄｏｎｅ）を生成して、実行パススタックに積む（ステップＳ１２＿７）。このステップにより、図１１の「前半部分実行パス」に示す実行パス要素Ｐｅ０が生成される。実行パス要素Ｐｅ０に含まれるｓｔは遷移前の状態を示し（図１１の例の場合、Ｓｔ０）、ｔｒは今回実行された遷移を示す（図１１の例の場合、Ｔｒ０）。また、Ｂａｃｋｔｒａｃｋは実行すべきバックトラックの遷移を示し（図１１の例の場合、なし）、Ｄｏｎｅは今回及び過去に当該遷移前の状態から実行された遷移を示す（図１１の例の場合、Ｔｒ０）。
【００７６】  次いで、分散環境モデル探索部１１は、探索済み遷移履歴管理部１４が管理するグラフに、ステップＳ１２＿５で行った遷移ｔｒを表す遷移ノードＮｄ１を生成させ、根ノードから遷移ノードＮｄ１に向かう有向エッジを引く（ステップＳ１２＿８）。このステップにより、図１１の「遷移履歴」に示す遷移ノードＮｄ１（遷移Ｔｒ０を表す遷移ノード）が生成され、また、根ノードから遷移ノードＮｄ１に向かう有向エッジが引かれる。
【００７７】  次に、分散環境モデル探索部１１は、状態ｓｔ´（図１１の例の場合、Ｓｔ１）と、ノードＮｄ１と、を探索済み状態遷移対応情報管理部１５に紐付けさせる（ステップＳ１２＿９）。さらに、分散環境モデル探索部１１は、状態ｓｔ´（図１１の例の場合、Ｓｔ１）が探索済み状態管理部１３に登録済みか否かチェックし（ステップＳ１２＿１０）、登録済みでなければ登録して（ステップＳ１２＿１１）、ステップＳ１２＿５へ戻る（戻る際にｓｔ＝ｓｔ´（図１１の例の場合、ｓｔ＝Ｓｔ１）とする）。
【００７８】  その後、ステップＳ１２＿５でＮｏ、又は、ステップＳ１２＿１０でＹｅｓとなるまで同様の処理を繰り返すことで、図１１に示すようなデータが生成される。
【００７９】  ステップＳ１２＿５でＮｏとなった場合（すなわち、ステップＳ１２＿１０でＹｅｓとなることがなかった場合）、分散環境モデル探索部１１は、その時点での実行パススタックの内容（図１１の場合、実行パス要素Ｐｅ０乃至Ｐｅ５）を前半部分実行パスとし、後半部分実行パスは空である実行パス情報Ｄ１２を生成し、分散環境モデル依存関係解析部１２に受け渡して（ステップＳ１２＿１９）、ステップＳ１２を終了する。
【００８０】  次に、ステップＳ１２＿１０でＹｅｓとなった後の処理について、図４、図１２及び図１３を用いて説明する。
【００８１】  ステップＳ１２＿１０でＹｅｓとなった場合、すなわち、ある遷移後の状態ｓｔ´が探索済み状態管理部１３に登録済みであった場合、まず、分散環境モデル探索部１１は、探索済み状態遷移対応情報管理部１５において状態ｓｔ´と紐付いている遷移ノードを全て取得する（ステップＳ１２＿１２）。
【００８２】  図１２の例の場合、過去にＳｔ０→Ｓｔ１→Ｓｔ２→Ｓｔ３→Ｓｔ４→Ｓｔ５→Ｓｔ６のパスで探索を行い、今回はＳｔ２→Ｓｔ７→Ｓｔ４のパスで探索を新たに行っている。この場合、新たなパスの探索において状態Ｓｔ７から遷移Ｔｒ２を行って状態Ｓｔ４となった後、ステップＳ１２＿１０で状態Ｓｔ４が探索済み状態管理部１３に登録済みと判断される。図１２の「遷移履歴」及び「前半部分実行パス」は、状態Ｓｔ７から遷移Ｔｒ２を行って状態Ｓｔ４となり、ステップＳ１２＿１０で探索済み状態管理部１３に登録済みと判断された直後の状態を示している。この場合、分散環境モデル探索部１１は、ステップＳ１２＿１２で、探索済み状態遷移対応情報管理部１５において状態Ｓｔ４と紐付いている遷移ノードＮｄ４を取得する。なお、図示する例の場合、状態Ｓｔ４と紐付いている遷移ノードは１つ（Ｎｄ８は除く）であるが、複数ある場合、分散環境モデル探索部１１は、状態Ｓｔ４と紐付いている複数の遷移ノードすべてを取得する。
【００８３】  次に、分散環境モデル探索部１１は、ステップＳ１２＿１２で取得した遷移ノードの中から任意の遷移ノードｎｄ２を選び出し（ステップＳ１２＿１３）、探索済み遷移履歴管理部１４が管理するグラフにおいて、遷移ノードｎｄ２から有向エッジを１つだけたどって到達できる遷移ノードｎｄ３を全て列挙する（ステップＳ１２＿１４）。ステップＳ１２＿１３で全ての遷移ノードが選び出されるまで、ステップＳ１２＿１３からＳ１２＿１４を繰り返す（ステップＳ１２＿１５のＹｅｓのループ）。
【００８４】  図１２の例の場合、分散環境モデル探索部１１は、遷移ノードＮｄ４から有向エッジを１つだけたどって到達できる遷移ノードＮｄ５を取得する。
【００８５】  ステップＳ１２＿１５でＮｏとなると、ステップＳ１２＿１６に進む。ステップＳ１２＿１６では、分散環境モデル探索部１１は、探索済み遷移履歴管理部１４が管理するグラフにおいて、ステップＳ１２＿１０で登録済みと判断された状態ｓｔ´になる遷移を表す遷移ノードから、ステップＳ１２＿１４で選んだ遷移ノードｎｄ３のそれぞれに対し、有向エッジを引く（ステップＳ１２＿１６）。
【００８６】  図１２の例の場合、登録済みと判断された状態Ｓｔ４になる遷移（状態Ｓｔ７からの遷移Ｔｒ２）を表す遷移ノードＮｄ８から、ステップＳ１２＿１４で選んだ遷移ノードＮｄ５に向かう有向エッジを引き、結果、図１３に示す状態となる。
【００８７】  次に、分散環境モデル探索部１１は、状態ｓｔ´を起点状態とし、１つ以上の後半部分実行パスを取得する（ステップＳ１２＿１７）。その後、分散環境モデル探索部１１は、その時点での実行パススタックの内容（ステップＳ１２＿１０で登録済みと判断された状態ｓｔ´となるまでの実行パス）を前半部分実行パスとし、これに、ステップＳ１２＿１７で取得した１つ以上の後半部分実行パスをあわせて実行パス情報Ｄ１２を生成し、分散環境モデル依存関係解析部１２に受け渡して（ステップＳ１２＿１８）、ステップＳ１２を終了する。
【００８８】  ここで、ステップＳ１２＿１７について、図５及び図１３を参照してより詳細に説明する。まず、分散環境モデル探索部１１は、探索済み状態遷移対応情報管理部１５において起点状態ｓｔ´と紐付けられている全ての遷移ノードを抽出する（ステップＳ１２＿１７＿１）。図１３の例の場合、起点状態ｓｔ´である状態Ｓｔ４と紐付けられている遷移ノードＮｄ４を抽出する。
【００８９】  次に、抽出した遷移ノードの中から任意の遷移ノードｎｄを選び出し（ステップＳ１２＿１７＿２）、探索済み遷移履歴管理部１４が管理するグラフにおいて、遷移ノードｎｄから有向エッジを最後まで（＝他の遷移ノードへの有向エッジがない遷移ノードに到達するまで）たどって得られる実行パス（１つの後半部分実行パス）を取得する（ステップＳ１２＿１７＿３）。図１３の例の場合、遷移ノードＮｄ４から有向エッジを最後までたどって得られる実行パス「Ｔｒ４→Ｔｒ５」を取得する。
【００９０】  ステップＳ１２＿１７＿２の途中で分岐が生じる（＝他の遷移ノードへの有向エッジが複数ある遷移ノードに到達する）場合は、有向エッジのたどり方の全てのパターンを網羅し、全ての実行パス（複数の後半部分実行パス）を取得する。ステップＳ１２＿１７＿１で抽出した遷移ノードが全て選び出されるまで、ステップＳ１２＿１７＿２からＳ１２＿１７＿３を繰り返す（ステップＳ１２＿１７＿４）。この手順で取得した実行パス全てを後半部分実行パスとし（ステップＳ１２＿１７＿５）、ステップＳ１２＿１７を終了する。この処理により、図１３に示す「後半部分実行パス」が生成される。
【００９１】  このように、分散環境モデル探索部１１は、Ｎ回目（Ｎは１以上の整数）の直線移動の探索時においては、例えば各状態を探索する都度、当該状態が探索済み状態管理部１３に記憶されているか確認することができる。そして、記憶されている場合、当該状態を終了位置として当該直線移動の探索を終了するとともに、探索済み遷移履歴管理部１４及び探索済み状態遷移対応情報管理部１５が記憶する情報を利用して、過去の探索（Ｎ−１回目以前の探索、及び、Ｎ回目のそれまでの探索）においてＮ回目の探索の終了位置となった状態以降に行われた遷移及びその順序を示す実行済みパスを１つ以上取得することができる。そして、分散環境モデル依存関係解析部１２は、Ｎ回目の直線移動の探索のパスと、分散環境モデル探索部１１が取得した１つ以上の実行済みパス（Ｎ回目の探索の終了位置となった状態以降に行われた遷移及びその順序を示す実行済みパス）各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の遷移に対して、依存関係、及び、happens-before関係の解析を行い、Ｎ回目の直線移動の探索のパス上にバックトラック地点を生成することができる。
【００９２】  次に、図２のステップＳ１３について、図６及び図１４を参照してより詳細に説明する。分散環境モデル依存関係解析部１２は、まず、解析対象の実行パスを特定する。実行パス情報Ｄ１２に後半部分実行パスが含まれない場合、分散環境モデル依存関係解析部１２はその実行パス情報Ｄ１２に含まれる前半部分実行パスを解析対象の実行パスとする。図１４の例の場合、前半部分実行パスが解析対象の実行パスとなる。
【００９３】  その後、分散環境モデル依存関係解析部１２は解析対象の実行パス（前半部分実行パス）に対して、happens-before関係を解析するための前処理を行う。そして、依存関係があり、かつ、happens-before関係がない遷移の組み合わせを特定すると、実行パス（前半部分実行パス）にバックトラック地点を生成する。その後、分散環境モデル依存関係解析部１２は、バックトラック地点を生成した実行パス（前半部分実行パスＤ１３）を分散環境モデル探索部１１に返して、ステップＳ１３を終了する。
【００９４】  一方、実行パス情報Ｄ１２に１つ以上の後半部分実行パスが含まれる場合、分散環境モデル依存関係解析部１２は図６の流れで処理を行う。まず、分散環境モデル依存関係解析部１２は、実行パス情報Ｄ１２に含まれる１つ以上の後半部分実行パスから、任意のものを１つ選び出す（ステップＳ１３＿１）。次に、実行パス情報Ｄ１２に含まれる、前半部分実行パスと、ステップＳ１３＿１で選んだ後半部分実行パスと、をこの順に結合してできる実行パスを解析の対象とする（ステップＳ１３＿２）。
【００９５】  次に、分散環境モデル依存関係解析部１２は、解析対象の実行パスに対し、happens-before関係を解析するための前処理を行う（ステップＳ１３＿３）。さらに、分散環境モデル依存関係解析部１２は、依存関係及びhappens-before関係の解析とバックトラック地点の生成を行う（ステップＳ１３＿４）。実行パス情報Ｄ１２に含まれる後半部分実行パスが複数ある場合は、その全てがステップＳ１３＿１で選び出されるまで、ステップＳ１３＿１からＳ１３＿４を繰り返す（ステップＳ１３＿５）。最後に、バックトラック地点を生成した前半部分実行パスＤ１３を分散環境モデル探索部１１に返して（ステップＳ１３＿６）、ステップＳ１３を終了する。
【００９６】  ステップＳ１３＿３について、図７を参照してより詳細に説明する。ステップＳ１３＿３では、解析対象の実行パス中の各実行パス要素Ｐｅについて、その実行パス要素Ｐｅの遷移とhappens-before関係にある（必ず先に起こる）遷移を持つ実行パス要素Ｐｅを求めていく。そのため、実行パス要素Ｐｅ毎に、その要素の遷移とhappens-before関係にある遷移を持つ実行パス要素Ｐｅの集合を保持するデータ構造（happens-before集合）を用意する。
【００９７】  分散環境モデル依存関係解析部１２は、まず、解析対象の実行パス（実行パス要素Ｐｅ０乃至Ｐｅｘ）から、ｉ番目（ｉは最初は１）の実行パス要素Ｐｅｉを選び出す（ステップＳ１３＿３＿１）。次に、ｊ番目（ｊは最初は０）の実行パス要素Ｐｅｊを選び出す（ステップＳ１３＿３＿２）。さらに、実行パス要素Ｐｅｉの遷移と、実行パス要素Ｐｅｊの遷移と、を比較し（ステップＳ１３＿３＿３）、［実行パス要素Ｐｅｊの遷移→実行パス要素Ｐｅｉの遷移」（happens-before関係）である場合は、実行パス要素Ｐｅｉのhappens-before集合（最初は空）に、実行パス要素Ｐｅｊと、実行パス要素Ｐｅｊのhappens-before集合に含まれる全ての実行パス要素と、を追加する（ステップＳ１３＿３＿４）。
【００９８】  ステップＳ１３＿３＿３における比較は、具体的には、実行パス要素Ｐｅｉの遷移の受信メッセージｒｅｃｖの値（受信したメッセージの識別情報）と、実行パス要素Ｐｅｊの送信メッセージｓｅｎｄの値（送信したメッセージの識別情報）と、が一致するか否か比較し、一致すればhappens-before関係があるとする。次に、ｊの値を1増やす（ステップＳ１３＿３＿５）。ｊの値がｉ以上になるまで、ステップＳ１３＿３＿２からＳ１３＿３＿５を繰り返す（ステップＳ１３＿３＿６）。ｊの値がｉ以上になったら、ｉの値を1増やし、ｊの値を０にする（ステップＳ１３＿３＿７）。iの値が解析対象の実行パスの長さより大きくなるまで、ステップＳ１３＿３＿１からＳ１３＿３＿７を繰り返し（ステップＳ１３＿３＿８）、ステップＳ１３＿３を終了する。
【００９９】  ステップＳ１３＿４について、図８を参照してより詳細に説明する。モデル依存関係解析部１２は、まず、解析対象の実行パスのうち、前半部分実行パスの範囲から、ｎ番目（ｎは最初は０）の実行パス要素Ｐｅｎを選び出す（ステップＳ１３＿４＿１）。次に、解析対象の実行パスから、ｍ番目（ｍは最初はｎ＋１）の実行パス要素Ｐｅｍを選び出す（ステップＳ１３＿４＿２）。さらに、実行パス要素Ｐｅｎの遷移と、実行パス要素Ｐｅｍの遷移と、を比較し、それらに「依存関係があり、happens-before関係がない」か否かチェックする（ステップＳ１３＿４＿３）。
【０１００】  ステップＳ１３＿４＿３の比較のうち、依存関係に関しては、実行パス要素Ｐｅｎ及びＰｅｍの遷移の動作主体ノード（ｎｏｄｅ）が等しく、かつ、両方の遷移の状態変更フラグｃｈａｎｇｅ_ｆｌａｇがｔｒｕｅであれば、依存関係があるとする。ステップＳ１３＿４＿３の比較のうち、happens-before関係に関しては、実行パス要素Ｐｅｍのhappens-before集合に実行パスａが含まれていれば、happens-before関係があるとする。
【０１０１】  ステップＳ１３＿４＿３で、実行パス要素Ｐｅｎ及びＰｅｍに「依存関係があり、happens-before関係がない」ことが分かった場合、実行パス要素Ｐｅｍのhappens-before集合に含まれる実行パス要素のうち、解析対象の実行パスにおいて最前方にある実行パス要素Ｐｅｌを選び、実行パス要素Ｐｅｎのバックトラック集合に実行パス要素Ｐｅｌの遷移を追加することで、バックトラック地点を生成する（ステップＳ１３＿４＿４）。次に、ｍの値を1増やし（ステップＳ１３＿４＿５）、ｍの値が解析対象の実行パスの長さより大きくなるまで、ステップＳ１３＿４＿２からＳ１３＿４＿５を繰り返す（ステップＳ１３＿４＿６）。ｍの値が解析対象の実行パスの長さより大きくなったら、ｎの値を1増やし、ｍの値をｎ＋１にする（ステップＳ１３＿４＿７）。ｎの値が前半部分実行パスの長さより大きくなるまで、ステップＳ１３＿４＿１からＳ１３＿４＿７を繰り返し（ステップＳ１３＿４＿８）、ステップＳ１３＿４を終了する。
【０１０２】  ステップＳ１４について、図９を参照してより詳細に説明する。分散環境モデル探索部１１は、まず、実行パススタックの内容を、ステップＳ１３で取得した前半部分実行パスＤ１３に置き換える（ステップＳ１４＿１）。次に、実行パススタックの中で、バックトラック地点を持つ（＝バックトラック集合からｄｏｎｅ集合を引いた差集合が空でない）実行パス要素Ｐｅのうち最後方にある実行パス要素Ｐｅｑを探し出し、それ以降の実行パス要素（Ｐｅｑは含まない）を実行パススタックから取り除く（ステップＳ１４＿２）。次に、実行パス要素Ｐｅｑのバックトラック集合に含まれ、ｄｏｎｅ集合に含まれない任意の遷移ｔｒを１つ選び、実行パス要素Ｐｅｑが持つ状態ｓｔに遷移ｔｒを行わせ、次の状態ｓｔ´を生成する（ステップＳ１４＿３）。
【０１０３】  さらに、実行パス要素Ｐｅｑが持つ遷移をｔｒに置き換え、ｄｏｎｅ集合にｔｒを追加する（ステップＳ１４＿４）。次いで、探索済み遷移履歴管理部１４が管理するグラフに遷移ｔｒを表す遷移ノードＮｄｑを生成させる（ステップＳ１４＿５）。次に、探索済み状態遷移対応情報管理部１５において状態ｓｔと紐付いている遷移ノードを全て列挙し、そのそれぞれから遷移ノードＮｄｑに向かう有向エッジを引く（ステップＳ１４＿６）。さらに、状態ｓｔ´"と、遷移ノードＮｄｑと、を探索済み状態遷移対応情報管理部１５に紐付けさせる（ステップＳ１４＿７）。その後、ステップＳ１２＿１０に進む。以降の手順はステップＳ１２の説明で述べたものと同様なので省略する。［効果］
【０１０４】  分散モデル検査用モデル検査装置１は、モデル検査による探索の際、探索した状態を保存し管理する（探索済み状態管理部１３）と同時に、探索において行われた遷移の内容とその順序をパス毎に区別して取得可能な履歴を表すグラフ構造を用いて、探索した遷移を保存し管理する（探索済み遷移履歴管理部１４）。また、探索した状態及び遷移の管理にあたり、探索済み状態からどの遷移が行われたかを紐付けておく（探索済み状態遷移対応情報管理部１５）。
【０１０５】  そして、モデル検査による探索中に探索済み状態に到達したら、その探索済み状態及びそこから行われた遷移の履歴情報が紐付けて保存・管理されているので、履歴情報を取得し、到達した状態以降は疑似的にその履歴情報と同様の遷移を行ったものとみなし依存関係とhappens-before関係を解析し、必要に応じてバックトラック地点を生成して探索を打ち切る。これにより、探索済み状態以降を再度探索することなく依存関係やhappens-before関係の探索ができ、分散環境モデルに対するモデル検査においてＤＰＯＲを適用する場合でも、探索済み状態以降の探索の打ち切りが可能になる。結果として、探索の効率化が実現される。
【０１０６】＜第２の実施形態＞  次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。以下では、第１の実施の形態と同様の部分の説明は省略し、異なる部分についてのみ説明する。［構成］
【０１０７】  まず、図１を参照しながら、本発明の第２の実施の形態の構成について詳細に説明する。
【０１０８】  分散環境モデル探索部１１は、ユーザーから入力装置を介して、分散環境モデルと、当該分散環境モデルが満たすべきプロパティと、を含む検証情報Ｄ１１を受け取ると、検証情報Ｄ１１を用いてモデル検査を実行し、プロパティの成否と、プロパティが満たされない場合にはそれを示す反例と、を含む検証結果Ｄ１１を、出力装置を介してユーザーに返す。
【０１０９】  分散環境モデルは、OpenFlowによって制御されるネットワーク（OpenFlowネットワーク）環境を表すモデルであるとし、その仕様は、OpenFlowの仕様に則った状態遷移系であれば何でもよい。分散環境モデルの記述形式は、コンピュータによる処理が可能であれば何でもよい。第２の実施の形態では、分散環境モデルの仕様を以下に示すものとして説明する。
【０１１０】  第２の実施の形態の分散環境モデルにおける状態の定義について説明する。状態は、（Ｔ、Ｓ、Ｃ、Ｐ、Ｍ、Ｑ）の六つを要素とする組として定義される。
【０１１１】  Ｔは端末の集合であり、Ｔの要素ｔ（ｔ∈Ｔ）はその状態を表す変数ｓｖを持つ。Ｓはスイッチの集合であり、Ｓの要素ｓ（ｓ∈Ｓ）はスイッチにインストールされているフローエントリの集合を表す変数Ｅを持つ。Ｅの要素ｅ（ｅ∈Ｅ）はフローエントリであり、マッチングルールの内容を表す値ｍｒとアクションフィールドの内容を表す値ａｆにより（ｍｒ、ａｆ）の組として定義される。Ｃはコントローラの集合であり、Ｃの要素ｃ（ｃ∈Ｃ）は、コントローラｃの各動作モデルが大域的に扱う変数の集合を表す変数Ｖを持つ。Ｖの要素ｖ（ｖ∈Ｖ）はコントローラの動作モデルが大域的に扱う変数の１つであり、変数の名前を表す値ｖｎとその変数の内容を表す値ｖｖにより（ｖｎ、ｖｖ）の組として定義される。Ｐはパケットの集合であり、Ｐの要素ｐ（ｐ∈Ｐ）はパケットの内容を表す変数ｐｖを持つ。ＭはOpenFlowメッセージの集合であり、Ｍの要素ｍ（ｍ∈Ｍ）はOpenFlowメッセージの内容を表す変数ｍｖを持つ。Ｑは通信ポートの集合であり、Ｑの要素ｑ（ｑ∈Ｑ）はパケット及びOpenFlowメッセージを格納するＦＩＦＯ（First In、First Out）キューにより実現される通信ポートである。
【０１１２】  各端末・スイッチ・コントローラは、その他の端末・スイッチ・コントローラと通信するための通信ポートを、互いに通信可能な各端末・スイッチ・コントローラに対し送信用と受信用とを１つずつ持つ。ある１つの端末・スイッチ・コントローラにとっての送信用通信ポートは、それ以外の１つの端末・スイッチ・コントローラにとっての受信用通信ポートであり、その逆も然りである。また、端末・スイッチ・コントローラを総称し、ノードと呼ぶ場合もある。
【０１１３】  第２の実施の形態の分散環境モデルにおける遷移の定義について説明する。遷移は、分散環境モデル（OpenFlowネットワーク）に存在する端末・スイッチ・コントローラのいずれかが、特定の単位の動作を実行することでモデルの状態が変化する様子を表すものとする。特定の単位の動作とは、具体的には以下の６種類である。
【０１１４】１．  端末によるパケット送信２．  端末によるパケット受信３．  スイッチによるフローエントリ適用４．  スイッチによるPacket-Inメッセージ送信５．  スイッチによるOpenFlowメッセージ受信６．  コントローラによるプログラム実行
【０１１５】  以下では上記６種類の動作についてそれぞれ詳しく説明する。  端末によるパケット送信について説明する。端末は、自身の状態ｓｖに応じて、パケット送信動作を実行することが可能である。端末のパケット送信では、端末ｔがパケットｐを１つ生成して、端末ｔの送信用通信ポート（＝あるスイッチｓにとってのパケット受信用通信ポート）にパケットｐを格納し、自身の状態ｓｖの内容を変更する（変更しない場合もある）。
【０１１６】  端末によるパケット受信について説明する。端末は、自身のパケット受信用通信ポートにパケットが１つ以上格納されている場合、パケット受信動作を実行することが可能である。端末のパケット受信では、端末ｔがパケットが１つ以上格納されている自身のパケット受信用通信ポートｑから、最初に格納されたパケットｐを取り出す。そして、パケットｐの内容ｐｖに応じて自身の状態ｓｖの内容を変更する（変更しない場合もある）。
【０１１７】  スイッチによるフローエントリ適用について説明する。スイッチは、自身のパケット受信用通信ポートにパケットが１つ以上格納されており、パケット受信用ポートに最初に格納されたパケットに適用可能なフローエントリを持つ場合、フローエントリ適用動作を実行することが可能である。スイッチのフローエントリ適用動作では、まずパケットが１つ以上格納されているスイッチｓのパケット受信用通信ポートｑから、最初に格納されたパケットｐを取り出す。次に、スイッチｓが持つ各フローエントリのマッチングルールｍｒと、パケットｐの内容ｐｖと、を比較し、パケットｐに適用可能なフローエントリｅを１つ選ぶ。最後に、フローエントリｅのアクションフィールドａｆに従い動作を実行する。
【０１１８】  スイッチによるPacket-Inメッセージ（OpenFlowメッセージの１つ）送信について説明する。スイッチは、自身のパケット受信用通信ポートにパケットが１つ以上格納されており、パケット受信用ポートに最初に格納されたパケットに適用可能なフローエントリを持たない場合、Packet-Inメッセージ送信動作を実行することが可能である。スイッチのPacket-Inメッセージ送信動作では、まずパケットが１つ以上格納されているスイッチｓのパケット受信用通信ポートｑ１から、最初に格納されたパケットｐを取り出す。次に、パケットｐの情報を含めたPacket-Inメッセージｍを、コントローラに対応するOpenFlowメッセージ送信用通信ポートｑ２に格納する。
【０１１９】  スイッチによるOpenFlowメッセージ受信について説明する。スイッチは、自身のOpenFlowメッセージ受信用通信ポートにOpenFlowメッセージが１つ以上格納されている場合、OpenFlowメッセージ受信動作を実行することが可能である。スイッチのOpenFlowメッセージ受信動作では、まずOpenFlowメッセージが１つ以上格納されているスイッチｓのOpenFlowメッセージ受信用通信ポートqから、最初に格納されたOpenFlowメッセージmを取り出す。次に、OpenFlowメッセージmの内容ｍｖに従い動作を実行する。
【０１２０】  コントローラによるプログラム実行について説明する。コントローラは、自身のOpenFlowメッセージ受信用通信ポートにOpenFlowメッセージが１つ以上格納されている場合、プログラム実行動作を実行することが可能である。コントローラのプログラム実行動作では、まずOpenFlowメッセージが１つ以上格納されているコントローラｃのOpenFlowメッセージ受信用通信ポートｑから、最初に格納されたOpenFlowメッセージmを１つ取り出す。次に、OpenFlowメッセージｍの内容ｍｖを参照し、検証情報Ｄ１１に含まれる分散環境モデルにおいて定義されているコントローラの動作のうち、ｍｖに対応するものを実行する（定義されていない場合はOpenFlow仕様で規定されているデフォルトの動作を実行する）。
【０１２１】  第２の実施の形態においては、ここで用いる分散環境モデルの仕様と、ＤＰＯＲのアルゴリズムと、を考慮し、以下の条件を満たす場合、依存関係があると定義する。
【０１２２】「遷移ｔ１で動作した動作主体ノード（端末、スイッチ及びコントローラのいずれか）と遷移ｔ２で動作した動作主体ノードが同じである。」
【０１２３】  第２の実施の形態においては、ここで用いる分散環境モデルの仕様と、ＤＰＯＲのアルゴリズムと、を考慮し、以下のようにhappens-before関係を定義する。
【０１２４】１．「遷移ｔ１で送信されるパケットあるいはメッセージと、遷移ｔ２で受信されるパケットあるいはOpenFlowメッセージが同じである場合、ｔ１→ｔ２」２．「遷移ｔ１でインストールされるフローエントリと、遷移ｔ２で適用されるフローエントリが同じである場合、ｔ１→ｔ２」３．「遷移ｔ１で受信されるパケットあるいはOpenFlowメッセージｐｍ１と、遷移ｔ２で受信されるパケットあるいはOpenFlowメッセージｐｍ２と、は同じ受信用通信ポートｑに格納されており、ｐｍ１をｑに格納した遷移ｔ３と、ｐｍ２をｑに格納した遷移ｔ４と、がｔ３→ｔ４である場合、ｔ１→ｔ２」４．「ｔ１→ｔ２であり、ｔ２→ｔ３である場合、ｔ１→ｔ３」
【０１２５】  遷移のデータ構造について説明する。遷移は（ｎｏｄｅ、ｔｙｐｅ、ｓｅｎｄ、ｒｅｃｖ、ｐｏｒｔ、ｉｎｓｔａｌｌ、ａｐｐｌｙ）の七つの要素の組である。ｎｏｄｅはその遷移で動作した動作主体（端末、スイッチ、コントローラのいずれか）であり、ｔｙｐｅは遷移の原因となった動作の種類（上記６種類の動作のいずれかを表す値）である。ｓｅｎｄはその遷移で送信したパケットあるいはOpenFlowメッセージの集合、ｒｅｃｖはその遷移で受信したパケットあるいはOpenFlowメッセージを表す。ｐｏｒｔはその遷移で受信したパケットあるいはOpenFlowメッセージが格納されていた受信用通信ポートを表す。ｉｎｓｔａｌｌはその遷移でインストールされたフローエントリ、ａｐｐｌｙはその遷移で適用されたフローエントリを表す。このデータ構造に基づく遷移データは、分散環境モデル探索部１１による探索において、状態が遷移した際に、その遷移の内容に応じて、各フィールドの値が適切に設定された上で生成される。
【０１２６】［動作］  次に、第２の実施の形態の動作について詳細に説明する。基本的な流れは第１の実施形態と同様である。以下、異なる部分の説明を行う。
【０１２７】  図６のステップＳ１３＿３について、図７を参照してより詳細に説明する。ステップＳ１３＿３の手順の流れは第１の実施の形態と同様であるが、ステップＳ１３＿３＿３の内容が異なるため、ステップＳ１３＿３＿３の内容ついてのみ説明し、それ以外は省略する。
【０１２８】  ステップＳ１３＿３＿３では、実行パス要素Ｐｅｉの遷移と実行パス要素Ｐｅｊの遷移を比較し、「実行パス要素Ｐｅｊの遷移→実行パス要素Ｐｅｉの遷移」（happens-before関係）であるか否か確認する。具体的には、まず、実行パス要素Ｐｅｉの遷移の受信メッセージｒｅｃｖが、実行パス要素Ｐｅｊの送信メッセージ集合ｓｅｎｄに含まれるか否か確認する。含まれる場合は、happens-before関係があるとする。
【０１２９】  含まれない場合は、実行パス要素Ｐｅｉの遷移で適用したフローエントリと、実行パス要素Ｐｅｊの遷移でインストールしたフローエントリと、が一致するか否か比較する。一致する場合はhappens-before関係があるとする。
【０１３０】  一致しない場合は、実行パス要素Ｐｅｉ及びＰｅｊの遷移で使用した受信用通信ポートｐｏｒｔが一致するか否か比較する。一致しない場合は、happens-before関係がないとする。
【０１３１】  一致する場合は、解析対象の実行パスの中から、Ｐｅｉの遷移の受信メッセージｒｅｃｖを含むｓｅｎｄを持つ遷移を持つ実行パス要素Ｐｅａと、Ｐｅｊの遷移の受信メッセージｒｅｃｖを含むｓｅｎｄを持つ遷移を持つ実行パス要素Ｐｅｂと、を探し、実行パス要素Ｐｅａのhappens-before集合にＰｅｂが含まれるか否かを確認する。含まれる場合は、happens-before関係があるとし、含まれない場合は、happens-before関係がないとする。
【０１３２】  図６のステップＳ１３＿４について、図８を参照してより詳細に説明する。ステップＳ１３＿４の手順の流れは第１の実施の形態と同様であるが、ステップＳ１３＿４＿３の内容が異なるため、ステップＳ１３＿４＿３の内容ついてのみ説明し、それ以外は省略する。ステップＳ１３＿４＿３では、実行パス要素Ｐｅｎの遷移と、実行パス要素Ｐｅｍの遷移と、を比較し、それらに「依存関係があり、happens-before関係がない」か否か確認する。ステップＳ１３＿４＿３の比較のうち、依存関係に関しては、実行パス要素Ｐｅｎ及びＰｅｍの遷移の動作主体ノードｎｏｄｅが一致する場合、依存関係があるとする。happens-before関係に関しては、第１の実施の形態におけるステップＳ１３＿４＿３と同様であるため省略する。
【０１３３】［効果］  本実施形態の分散モデル検査用モデル検査装置は、モデル検査による探索の際、探索した状態を保存し管理する（探索済み状態管理部１３）と同時に、探索において行われた遷移の内容とその順序をパス毎に区別して取得可能な履歴を表すグラフ構造を用いて、探索した遷移を保存し管理する（探索済み遷移履歴管理部１４）。また、探索した状態及び遷移の管理にあたり、探索済み状態からどの遷移が行われたかを紐付けておく（探索済み状態遷移対応情報管理部１５）。
【０１３４】  そして、モデル検査による探索中に探索済み状態に到達したら、その探索済み状態及びそこから行われた遷移の履歴情報が紐付けて保存・管理されているので、履歴情報を取得し、到達した状態以降は疑似的にその履歴情報と同様の遷移を行ったものとみなし依存関係とhappens-before関係を解析し、必要に応じてバックトラック地点を生成し探索を打ち切る。これにより、探索済み状態以降を再度探索することなく依存関係やhappens-before関係の探索ができ、OpenFlowネットワーク環境を表した分散環境モデルに対するモデル検査においてＤＰＯＲを適用する場合でも、探索済み状態以降の探索の打ち切りが可能になる。結果として、探索の効率化が実現される。
【０１３５】＜第３の実施形態＞  次に、本発明の第３の実施の形態について図面を参照して詳細に説明する。以下では、第１及び第２の実施の形態と同様の部分の説明は省略し、異なる部分についてのみ説明する。
【０１３６】［構成］  まず、図面を参照しながら本発明の第３の実施の形態の構成について詳細に説明する。
【０１３７】  図１０を参照すると、第３の実施の形態における分散環境モデル用モデル検査装置３は、分散環境モデル探索部１１と、分散環境モデル依存関係解析部１２と、探索済み状態管理部１３と、探索済み遷移履歴管理部１４と、探索済み状態遷移対応情報管理部１５と、検証情報雛形提供部３６と、を含む。分散環境モデル探索部１１は、分散環境モデル依存関係解析部１２、探索済み状態管理部１３、探索済み遷移履歴管理部１４、探索済み状態遷移対応情報管理部１５、検証情報雛形提供部３６のそれぞれと、情報をやり取りするように構成されている。探索済み状態遷移対応情報管理部１５は、探索済み状態管理部１３が管理する探索済み状態と、探索済み遷移履歴管理部１４が管理する遷移と、を紐付けるため、その対応関係を管理する。
【０１３８】  検証情報雛形提供部３６は、ユーザーが検証情報を入力する際、検証情報Ｄ１１に含まれるプロパティに対して典型的な１つ以上の雛形を選択可能に提供するとともに、その中のいずれかを選択する入力をユーザーから受付ける。そして、検証情報雛形提供部３６は、選択された雛形をプロパティの定義の一部あるいは全部に利用し、分散環境モデル探索部１１に入力することが可能な機能を備える。
【０１３９】  分散環境モデル探索部１１、分散環境モデル依存関係解析部１２、探索済み状態管理部１３、探索済み遷移履歴管理部１４、及び、探索済み状態遷移対応情報管理部１５の構成は、第１及び第２の実施形態と同様であるので、ここでの説明は省略する。
【０１４０】［動作］  ユーザーは、図２のステップＳ１１において、検証情報雛形提供装置３６から所望の雛形をいくつか選択し、それらを用いて検証情報Ｄ１１を完成させ、分散環境モデル探索部１１に入力する。ユーザーは雛形を全く用いず検証情報Ｄ１１を作成してもよい。その他の動作は、第１及び第２の実施の形態と同様のため省略する。
【０１４１】［効果］  ユーザーが本実施形態の分散環境モデル用モデル検査装置を利用するにあたり、検証情報Ｄ１１を作成する負担を軽減することができるため、結果として検証全体の効率を向上させることができる。また、本実施形態によれば、第１及び第２の実施形態と同様の作用効果を実現することができる。
【０１４２】  以上説明した第１乃至第３の実施形態の分散環境モデル用モデル検査装置の活用例として、分散環境、例えばOpenFlowネットワーク環境を構築したり、その環境に変更を加える際に、それらの妥当性を検証するツールが考えられる。
【０１４３】  以下、参考形態の例を付記する。１．  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索部と、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理部と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理部と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理部と、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析部と、を有し、  前記分散環境モデル探索部は、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査装置。２．  １に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、Ｎ回目（Ｎは１以上の整数）の前記直線移動の前記探索時に探索した前記状態が前記探索済み状態管理部に記憶されているか確認し、記憶されている場合、当該状態を終了位置としてＮ回目の前記直線移動の前記探索を終了するとともに、前記探索済み遷移履歴管理部及び前記探索済み状態遷移対応情報管理部が記憶する情報を利用して、過去の探索においてＮ回目の前記直線移動の前記探索の終了位置となった前記状態以降に行われた前記遷移及びその順序を示す実行済みパスを１つ以上取得し、  前記分散環境モデル依存関係解析部は、Ｎ回目の前記直線移動の前記探索のパスと、前記分散環境モデル探索部が取得した１つ以上の前記実行済みパス各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の前記遷移に対して、前記依存関係、及び、前記happens-before関係の解析を行い、Ｎ回目の前記直線移動の前記探索のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。３．  ２に記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部が複数の前記実行済みパスを取得した場合、  前記分散環境モデル依存関係解析部は、前記第１の直線移動のパスと、複数の前記実行済みパス各々とをこの順に結合してできる複数の前記一続きのパス各々に対して、前記依存関係、及び、前記happens-before関係の解析を行い、前記第１の直線移動のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。４．  １から３のいずれかに記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、OpenFlowネットワーク環境を表す分散環境モデルの探索を行い、  前記��散環境モデル依存関係解析部は、前記OpenFlowネットワーク環境における依存関係及びhappens-before関係の解析を行う分散環境モデル用モデル検査装置。５．  １から４のいずれかに記載の分散環境モデル用モデル検査装置において、  前記分散環境モデル探索部は、前記プロパティを、ユーザーからの入力として受け付ける機能を備える分散環境モデル用モデル検査装置。６．  ５に記載の分散環境モデル用モデル検査装置において、  ユーザーに対して選択可能に前記プロパティの雛形を提供するとともに、提供した雛形の中から１つ以上を選択するユーザー入力を受け付ける検証情報雛形提供部をさらに有し、  前記分散環境モデル探索部は、前記検証情報雛形提供部が受け付けた前記雛形を一部又は全部とした前記プロパティを含む前記検証情報を取得する分散環境モデル用モデル検査装置。７．  コンピュータを、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索手段、  過去に探索された探索済みの前記状態を記憶する探索済み状態管理手段、  過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理手段、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理手段、  前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析手段、として機能させ、  前記分散環境モデル探索手段に、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始させるプログラム。７−２．  ７に記載のプログラムにおいて、  前記分散環境モデル探索手段に、Ｎ回目（Ｎは１以上の整数）の前記直線移動の前記探索時に探索した前記状態が前記探索済み状態管理部に記憶されているか確認させ、記憶されている場合、当該状態を終了位置としてＮ回目の前記直線移動の前記探索を終了させるとともに、前記探索済み遷移履歴管理手段及び前記探索済み状態遷移対応情報管理手段が記憶する情報を利用して、過去の探索においてＮ回目の前記直線移動の前記探索の終了位置となった前記状態以降に行われた前記遷移及びその順序を示す実行済みパスを１つ以上取得させ、  前記分散環境モデル依存関係解析手段に、Ｎ回目の前記直線移動の前記探索のパスと、前記分散環境モデル探索部が取得した１つ以上の前記実行済みパス各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の前記遷移に対して、前記依存関係、及び、前記happens-before関係の解析を行わせ、Ｎ回目の前記直線移動の前記探索のパス上に前記バックトラック地点を生成させるプログラム。７−３．  ７−２に記載のプログラムにおいて、  前記分散環境モデル探索手段が複数の前記実行済みパスを取得した場合、  前記分散環境モデル依存関係解析手段に、前記第１の直線移動のパスと、複数の前記実行済みパス各々とをこの順に結合してできる複数の前記一続きのパス各々に対して、前記依存関係、及び、前記happens-before関係の解析を行わせ、前記第１の直線移動のパス上に前記バックトラック地点を生成させるプログラム。７−４．  ７から７−３のいずれかに記載のプログラムにおいて、  前記分散環境モデル探索手段に、OpenFlowネットワーク環境を表す分散環境モデルの探索を行わせ、  前記分散環境モデル依存関係解析手段に、前記OpenFlowネットワーク環境における依存関係及びhappens-before関係の解析を行わせるプログラム。７−５．  ７から７−４のいずれかに記載のプログラムにおいて、  前記分散環境モデル探索手段に、前記プロパティを、ユーザーからの入力として受け付ける機能を備えさせるプログラム。７−６．  ７−５に記載のプログラムにおいて、  前記コンピュータを、  ユーザーに対して選択可能に前記プロパティの雛形を提供するとともに、提供した雛形の中から１つ以上を選択するユーザー入力を受け付ける検証情報雛形提供手段としてさらに機能させ、  前記分散環境モデル探索手段に、前記検証情報雛形提供手段が受け付けた前記雛形を一部又は全部とした前記プロパティを含む前記検証情報を取得させるプログラム。８．  コンピュータが、  複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索工程と、  過去に探索された探索済みの前記状態を記憶部に記憶させる探索済み状態管理工程と、  過去に実行された前記直線移動各々における前記遷移の順序を記憶部に記憶させる探索済み遷移履歴管理工程と、  探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶部に記憶させる探索済み状態遷移対応情報管理工程と、  前記分散環境モデル探索工程で１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、happens-before関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析工程と、を実行し、  前記分散環境モデル探索工程では、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査方法。８−２．  ８に記載の分散環境モデル用モデル検査方法において、  前記分散環境モデル探索工程では、Ｎ回目（Ｎは１以上の整数）の前記直線移動の前記探索時に探索した前記状態が��記記憶部に記憶されているか確認し、記憶されている場合、当該状態を終了位置としてＮ回目の前記直線移動の前記探索を終了するとともに、前記記憶部が記憶する情報を利用して、過去の探索においてＮ回目の前記直線移動の前記探索の終了位置となった前記状態以降に行われた前記遷移及びその順序を示す実行済みパスを１つ以上取得し、  前記分散環境モデル依存関係解析工程では、Ｎ回目の前記直線移動の前記探索のパスと、前記分散環境モデル探索部が取得した１つ以上の前記実行済みパス各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の前記遷移に対して、前記依存関係、及び、前記happens-before関係の解析を行い、Ｎ回目の前記直線移動の前記探索のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査方法。８−３．  ８−２に記載の分散環境モデル用モデル検査方法において、  前記分散環境モデル探索工程で複数の前記実行済みパスを取得した場合、  前記分散環境モデル依存関係解析工程で、前記第１の直線移動のパスと、複数の前記実行済みパス各々とをこの順に結合してできる複数の前記一続きのパス各々に対して、前記依存関係、及び、前記happens-before関係の解析を行い、前記第１の直線移動のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査方法。８−４．  ８から８−３のいずれかに記載の分散環境モデル用モデル検査方法において、  前記分散環境モデル探索工程では、OpenFlowネットワーク環境を表す分散環境モデルの探索を行い、  前記分散環境モデル依存関係解析工程では、前記OpenFlowネットワーク環境における依存関係及びhappens-before関係の解析を行う分散環境モデル用モデル検査方法。８−５．  ８から８−４のいずれかに記載の分散環境モデル用モデル検査方法において、  前記分散環境モデル探索工程では、前記プロパティを、ユーザーからの入力として受け付ける分散環境モデル用モデル検査方法。８−６．  ８−５に記載の分散環境モデル用モデル検査方法において、  前記コンピュータは、  ユーザーに対して選択可能に前記プロパティの雛形を提供するとともに、提供した雛形の中から１つ以上を選択するユーザー入力を受け付ける検証情報雛形提供工程をさらに実行し、  前記分散環境モデル探索工程では、前記検証情報雛形提供工程で受け付けた前記雛形を一部又は全部とした前記プロパティを含む前記検証情報を取得する分散環境モデル用モデル検査方法。
【０１４４】  この出願は、２０１４年１月１７日に出願された日本出願特願２０１４−００７０６８号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１】
2015107711.tif 000003
【図２】
2015107711.tif 000004
【図３】
2015107711.tif 000005
【図４】
2015107711.tif 000006
【図５】
2015107711.tif 000007
【図６】
2015107711.tif 000008
【図７】
2015107711.tif 000009
【図８】
2015107711.tif 000010
【図９】
2015107711.tif 000011
【図１０】
2015107711.tif 000012
【図１１】
2015107711.tif 000013
【図１２】
2015107711.tif 000014
【図１３】
2015107711.tif 000015
【図１４】
2015107711.tif 000016
【図１５】
2015107711.tif 000017
【図１６】
2015107711.tif 000018
【手続補正書】
【提出日】平成26年12月25日(2014.12.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索部と、
過去に探索された探索済みの前記状態を記憶する探索済み状態管理部と、
過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理部と、
探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理部と、
前記分散環境モデル探索部が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析部と、
を有し、
前記分散環境モデル探索部は、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査装置。
【請求項２】
請求項１に記載の分散環境モデル用モデル検査装置において、
前記分散環境モデル探索部は、Ｎ回目（Ｎは１以上の整数）の前記直線移動の前記探索時に探索した前記状態が前記探索済み状態管理部に記憶されているか確認し、記憶されている場合、当該状態を終了位置としてＮ回目の前記直線移動の前記探索を終了するとともに、前記探索済み遷移履歴管理部及び前記探索済み状態遷移対応情報管理部が記憶する情報を利用して、過去の探索においてＮ回目の前記直線移動の前記探索の終了位置となった前記状態以降に行われた前記遷移及びその順序を示す実行済みパスを１つ以上取得し、
前記分散環境モデル依存関係解析部は、Ｎ回目の前記直線移動の前記探索のパスと、前記分散環境モデル探索部が取得した１つ以上の前記実行済みパス各々とをこの順に結合してできる一続きのパスに含まれる所定の順序の複数の前記遷移に対して、前記依存関係、及び、前記ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行い、Ｎ回目の前記直線移動の前記探索のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。
【請求項３】
請求項２に記載の分散環境モデル用モデル検査装置において、
前記分散環境モデル探索部が複数の前記実行済みパスを取得した場合、
前記分散環境モデル依存関係解析部は、Ｎ回目の前記直線移動のパスと、複数の前記実行済みパス各々とをこの順に結合してできる複数の前記一続きのパス各々に対して、前記依存関係、及び、前記ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行い、Ｎ回目の前記直線移動のパス上に前記バックトラック地点を生成する分散環境モデル用モデル検査装置。
【請求項４】
請求項１から３のいずれか１項に記載の分散環境モデル用モデル検査装置において、
前記分散環境モデル探索部は、ＯｐｅｎＦｌｏｗネットワーク環境を表す分散環境モデルの探索を行い、
前記分散環境モデル依存関係解析部は、前記ＯｐｅｎＦｌｏｗネットワーク環境における依存関係及びｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行う分散環境モデル用モデル検査装置。
【請求項５】
請求項１から４のいずれか１項に記載の分散環境モデル用モデル検査装置において、
前記分散環境モデル探索部は、前記プロパティを、ユーザーからの入力として受け付ける機能を備える分散環境モデル用モデル検査装置。
【請求項６】
請求項５に記載の分散環境モデル用モデル検査装置において、
ユーザーに対して選択可能に前記プロパティの雛形を提供するとともに、提供した雛形の中から１つ以上を選択するユーザー入力を受け付ける検証情報雛形提供部をさらに有し、
前記分散環境モデル探索部は、前記検証情報雛形提供部が受け付けた前記雛形を一部又は全部とした前記プロパティを取得する分散環境モデル用モデル検査装置。
【請求項７】
コンピュータを、
複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索手段、
過去に探索された探索済みの前記状態を記憶する探索済み状態管理手段、
過去に実行された前記直線移動各々における前記遷移の順序を記憶する探索済み遷移履歴管理手段、
探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶する探索済み状態遷移対応情報管理手段、
前記分散環境モデル探索手段が１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析手段、
として機能させ、
前記分散環境モデル探索手段に、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始させるプログラム。
【請求項８】
コンピュータが、
複数の状態をとることができ、各状態時に実行可能な所定の動作の実行により実現される所定の遷移で前記状態間を移動する分散環境モデルを示す情報を取得すると、第１の前記状態を開始位置とし、１つ以上の前記遷移で分岐することなく直線的に終了位置となる第２の前記状態まで移動する直線移動を複数実行することで前記分散環境モデルがとり得る前記状態を探索するとともに、探索した前記状態が所定のプロパティを満たすか否かを判定する分散環境モデル探索工程と、
過去に探索された探索済みの前記状態を記憶部に記憶させる探索済み状態管理工程と、
過去に実行された前記直線移動各々における前記遷移の順序を記憶部に記憶させる探索済み遷移履歴管理工程と、
探索済みの前記状態各々に、過去の前記探索において他の前記状態に移動した時の前記遷移を対応付けて記憶部に記憶させる探索済み状態遷移対応情報管理工程と、
前記分散環境モデル探索工程で１つの前記直線移動を終了すると、当該直線移動において所定の順序で実行された複数の前記遷移に対して、依存関係、及び、ｈａｐｐｅｎｓ−ｂｅｆｏｒｅ関係の解析を行い、当該直線移動のパス上にバックトラックすべき地点を示すバックトラック地点を生成する分散環境モデル依存関係解析工程と、
を実行し、
前記分散環境モデル探索工程では、１つの前記直線移動の探索を終了すると、その後、前記バックトラック地点を開始位置として、他の前記直線移動を開始する分散環境モデル用モデル検査方法。
【国際調査報告】
2015107711.tif 000019
2015107711.tif 000020