(57)【要約】【課題】ＢＤＤ（Binary Decision Diagram）を用いた検証において、事前に変数順序を決定することなく、検証対象データに応じた変数順序をより適切に決定する技術を提供すること。【解決手段】１つ以上の変数からなる検証対象データを取得する検証対象データ取得部１１と、複数の検証対象データ間での各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する変数順序決定部１２と、決定された変数順序に基づき検証対象データを表すＢＤＤを生成するＢＤＤ処理部１３と、生成されたＢＤＤを用いて検証対象データの検証を行う検証部１４と、を備える。【選択図】図１
2016092748.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上の変数からなる検証対象データを取得する検証対象データ取得部と、
複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する変数順序決定部と、
前記変数順序決定部によって決定された変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成するＢＤＤ処理部と、
前記ＢＤＤを用いて前記検証対象データの検証を行う検証部と、
を備えた検証装置。
【請求項２】
前記検証対象データ取得部は、前記検証対象データとしてネットワーク設定情報を取得し、
前記変数順序決定部は、前記ネットワーク設定情報を構成する各変数について前記変数順序を決定し、
前記ＢＤＤ処理部は、決定された変数順序により前記ネットワーク設定情報を表すＢＤＤを生成し、
前記検証部は、前記ＢＤＤを用いて前記ネットワーク設定情報の検証を行うことを特徴とする請求項１に記載の検証装置。
【請求項３】
前記変数順序決定部は、略同一の時刻情報に関連する前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、前記変数順序を決定することを特徴とする請求項１または請求項２に記載の検証装置。
【請求項４】
前記変数順序決定部は、異なる時刻情報にそれぞれ関連する前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、前記変数順序を決定することを特徴とする請求項１から請求項３のいずれか１項に記載の検証装置。
【請求項５】
前記変数順序決定部は、前記検証部であらかじめ定められた変数順序を、決定した前記変数順序に変換する変換情報を生成し、
前記検証部は、前記変換情報を介して前記ＢＤＤ処理部を利用することにより、前記ＢＤＤを用いて前記検証対象データの検証を行うことを特徴とする請求項１から請求項４のいずれか1項に記載の検証装置。
【請求項６】
１つ以上の変数からなる検証対象データを取得し、
複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定し、
決定した変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成し、
前記ＢＤＤを用いて前記検証対象データの検証を行う検証方法。
【請求項７】
１つ以上の変数からなる検証対象データを取得する検証対象データ取得ステップと、
複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する変数順序決定ステップと、
前記変数順序決定ステップで決定された変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成するＢＤＤ処理ステップと、
前記ＢＤＤを用いて前記検証対象データの検証を行う検証ステップと、
をコンピュータ装置に実行させる検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二分決定図を用いた検証技術に関する。
【背景技術】
【０００２】
検証技術において、ＢＤＤ（Binary Decision Diagram：二分決定図、二分決定グラフ）と呼ばれるデータ構造が広く使われてきた。なお、ここでいうＢＤＤは、より正確にはＲＯＢＤＤ（Reduced Ordered BDD、簡約済順序付二分決定図）を指す。ＲＯＢＤＤは、変数の順序が一定であり（順序付・オーダード）、共通の結果を導くノードが共有された（リデュースド・簡約済み）非循環有効グラフとなる。ＲＯＤＢＢは、単純な二分決定木に比べると多くのケースで、メモリ使用量を大幅に削減できる利点がある。そのため、一般的に、ＢＤＤと言えばこのＲＯＢＤＤを指す。そこで、以下では、ＲＯＢＤＤを、単にＢＤＤと記載する。
【０００３】
ＢＤＤは、引数として複数の０あるいは１を取り、返値として０あるいは１を返すような、いわゆるブール関数を表現することができる。このようなブール関数は、例えば、単純な真理値表の形でも表現可能である。しかし、二分決定図中のノードを効率よく共有できる場合、ＢＤＤは、真理値表に比べて、使用するメモリの量を劇的に削減できることが広く知られている。このため、ＢＤＤは、ＬＳＩの検証を始めとしてこれに留まらず、各種検証技術に幅広く応用されている。例えば、特許文献１には、回路内で起こり得るエラーまたは故障個所を発見する方法において、ＢＤＤを用いることが記載されている。
【０００４】
ただし、ＢＤＤがメモリを効率的に利用できるかどうかは、変数の順序に強く依存する。そのような変数の順序を決定する問題は、ＮＰ（Non-deterministic Polynomial）完全問題であることが広く知られている。そのため、単一のアルゴリズムで、任意のＢＤＤの最適な変数順序を決めることはできない。このため、ＢＤＤの変数順序を決める様々なヒューリスティックの研究や、それに基づくＢＤＤライブラリの実装がおこなわれてきた（例えば、非特許文献１参照）。非特許文献１に記載された変数順序最適化手段は、評価用のベンチマークデータをもとに、どのようなデータに対してもよい性能を出すよう変数を順序付ける発見的アルゴリズムを用いている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１３２４１７号公報
【非特許文献】
【０００６】
【非特許文献１】Ｆａｄｉ  Ａ．  Ａｌｏｕｌ  他著、“ＭＩＮＣＥ：  Ａ  Ｓｔａｔｉｃ  Ｇｌｏｂａｌ  Ｖａｒｉａｂｌｅ−Ｏｒｄｅｒｉｎｇ  ｆｏｒ  ＳＡＴ  ａｎｄ  ＢＤＤ”、Ｐｒｏｃ．  ＩＥＥＥ  １０ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｌｏｇｉｃ  ａｎｄ  Ｓｙｎｔｅｓｉｓ，  ２００１年、ｐｐ．２８１−２８６
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述の特許文献１および非特許文献１に記載された関連技術には、変数順序について以下の課題がある。
【０００８】
特許文献１には、変数順序の規定に関する記載はない。また、非特許文献１に記載されたようなヒューリスティックを用いて変数順序を決定する場合も、結局は、事前に決定された変数順序に基づきＢＤＤライブラリを用いて検証を行うことになる。ここで、応用領域によって、効率の良い変数順序は異なる。そのため、応用領域に適した効率の良い変数順序の決定は、利用者に任されていた。また、利用者は、ヒューリスティックによる得意・不得意を勘案した上で、変数順序を決定する必要があった。また、同じ応用領域であっても、個々の環境で検証対象データの特性が異なる場合、どのような変数順序が適しているかを事前に決定できないという問題がある。個々の環境で検証対象データの特性が異なるケースとしては、例えば、ネットワーク設定情報の検証が挙げられる。この場合、同じネットワーク検証という領域であっても、データセンタ等の環境によってネットワーク構成やアドレス体系などが異なる。そのため、検証対象となるネットワーク設定情報をＢＤＤにより検証するための適切な変数順序も、データセンタ等の環境によって異なると考えられる。しかしながら、上述の関連技術を用いて、個々の環境に応じて事前に変数順序を決定しておくことは難しい。
【０００９】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、ＢＤＤを用いた検証において、事前に変数順序を決定することなく、検証対象データに応じた変数順序をより適切に決定する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の検証装置は、１つ以上の変数からなる検証対象データを取得する検証対象データ取得部と、複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する変数順序決定部と、前記変数順序決定部によって決定された変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成するＢＤＤ処理部と、前記ＢＤＤを用いて前記検証対象データの検証を行う検証部と、を備える。
【００１１】
また、本発明の検証方法は、１つ以上の変数からなる検証対象データを取得し、複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定し、決定した変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成し、前記ＢＤＤを用いて前記検証対象データの検証を行う。
【００１２】
また、本発明の検証プログラムは、１つ以上の変数からなる検証対象データを取得する検証対象データ取得ステップと、複数の前記検証対象データ間での前記各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する変数順序決定ステップと、前記変数順序決定ステップで決定された変数順序に基づき前記検証対象データを表す二分決定グラフ（ＢＤＤ：Binary Decision Diagram）を生成するＢＤＤ処理ステップと、前記ＢＤＤを用いて前記検証対象データの検証を行う検証ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１３】
本発明は、ＢＤＤを用いた検証において、事前に変数順序を決定することなく、検証対象データに応じた変数順序をより適切に決定する技術を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施の形態としての検証装置の機能ブロック図である。
【図２】本発明の第１の実施の形態としての検証装置のハードウェア構成の一例を示す図である。
【図３】本発明の第１の実施の形態としての検証装置の動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としての検証装置の機能ブロック図である。
【図５】本発明の第２の実施の形態としての検証装置の動作の概略を説明するフローチャートである。
【図６】本発明の第２の実施の形態としての検証装置の変数順序決定動作を説明するフローチャートである。
【図７】本発明の第２の実施の形態の具体例におけるネットワーク設定情報の一例を示す模式図である。
【図８】本発明の第２の実施の形態の具体例における変換情報の一例を示す模式図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１６】
（第１の実施の形態）
本発明の第１の実施の形態としての検証装置１の機能ブロック構成を図１に示す。図１において、検証装置１は、検証対象データ取得部１１と、変数順序決定部１２と、ＢＤＤ処理部１３と、検証部１４とを備える。
【００１７】
ここで、検証装置１は、図２に示すようなハードウェア要素によって構成可能である。図２において、検証装置１は、ＣＰＵ（Central Processing Unit）１００１、メモリ１００２、出力装置１００３、入力装置１００４、および、ネットワークインタフェース１００５を含む。メモリ１００２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）等によって構成される。出力装置１００３は、ディスプレイ装置やプリンタ等のように、情報を出力する装置によって構成される。入力装置１００４は、キーボードやマウス等のように、ユーザ操作の入力を受け付ける装置によって構成される。ネットワークインタフェース１００５は、インターネット、ＬＡＮ（Local Area Network）、公衆回線網、無線通信網またはこれらの組合せ等によって構成されるネットワークに接続するインタフェースである。この場合、検証装置１の各機能ブロックは、メモリ１００２に格納されるコンピュータ・プログラムを読み込んで実行するとともに出力装置１００３および入力装置１００４を制御するＣＰＵ１００１によって構成される。なお、検証装置１およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００１８】
次に、各機能ブロックの詳細について説明する。
【００１９】
検証対象データ取得部１１は、検証対象データを取得する。検証対象データは、１つ以上の変数からなる。また、検証対象データは、ブール関数により表現可能なデータである。例えば、検証対象データ取得部１１は、入力装置１００４またはネットワークインタフェース１００５を介して検証対象データを取得してもよい。また、例えば、検証対象データ取得部１１は、メモリ１００２または可搬型記録媒体に格納された検証対象データを取得してもよい。
【００２０】
変数順序決定部１２は、複数の検証対象データ間での各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する。例えば、４個の検証対象データが得られているとする。また、検証対象データが、変数ｘ１、ｘ２、ｘ３からなるとする。このとき、４個の検証対象データにおいて変数ｘ１の値は同一（固定的）であったとする。また、変数ｘ２の値は、４個の検証対象データのうち３個が同一であり１個が異なる値であったとする。また、変数ｘ３の値は、４個の検証対象データのうち２個が同一でありその値に対して他の２個が異なる値であったとする。この場合、変数順序決定部１２は、ｘ３、ｘ２、ｘ１の順に変化しやすいと判断する。そして、この場合、変数順序決定部１２は、変化しやすい順に変数順序を決定する。このように、変数順序決定部１２は、各変数について、変更回数の多さを表す情報を、変化しやすさとして求めてもよい。変更回数の多さとは、複数の検証対象データうち同一である個数が最も多い値に対して異なる値の個数や割合などであってもよい。そして、変数順序決定部１２は、変化しやすい順に変数の順序を決定すればよい。
【００２１】
ＢＤＤ処理部１３は、変数順序決定部１２によって決定された変数順序により、検証対象データを表すＢＤＤ（Binary Decision Diagram：二分決定グラフ）を生成する。ＢＤＤ処理部１３は、検証対象データを表すブール関数を、決定された変数順序で表すＢＤＤを生成すればよい。
【００２２】
検証部１４は、ＢＤＤ処理部１３によって生成されたＢＤＤを用いて、検証対象データの検証を行う。
【００２３】
以上のように構成された検証装置１の動作について、図３を参照して説明する。
【００２４】
図３において、まず、検証対象データ取得部１１は、検証対象データを取得する（ステップＳ１）。
【００２５】
次に、変数順序決定部１２は、複数の検証対象データ間での各変数の値の変化しやすさに基づいて、それらの変数の順序を決定する（ステップＳ２）。
【００２６】
次に、ＢＤＤ処理部１３は、変数順序決定部１２によって決定された変数順序により検証対象データを表すＢＤＤを生成する（ステップＳ３）。
【００２７】
次に、検証部１４は、ステップＳ３で生成されたＢＤＤを用いて、検証対象データの検証を行う（ステップＳ４）。
【００２８】
次に、検証部１４は、検証結果を出力する（ステップＳ５）。
【００２９】
以上で、検証装置１は、動作を終了する。
【００３０】
次に、本発明の第１の実施の形態の効果について述べる。
【００３１】
本発明の第１の実施の形態としての検証装置は、ＢＤＤを用いた検証において、事前に変数順序を決定することなく、検証対象データに応じた変数順序をより適切に決定することができる。
【００３２】
その理由は、変数順序決定部が、検証対象データ取得部によって取得された複数の検証対象データ間での、検証対象データを構成する各変数の値の変化しやすさに基づいて、変数順序を決定するからである。そして、検証部が、決定された変数順序でＢＤＤ処理部により生成されたＢＤＤを用いて、検証を行うからである。
【００３３】
これにより、本実施の形態は、取得した検証対象データの特性に応じて変数順序を決定することができる。そのため、本実施の形態は、事前に定められた変数順序を用いる必要がない。その結果、本実施の形態は、同じ応用領域であっても個々の環境により検証対象データの特性が異なる場合も、その環境の検証対象データの特性に応じた適切な変数順序を決定することができる。
【００３４】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００３５】
本実施の形態では、検証対象データとして、ネットワーク設定情報を適用する例について説明する。ネットワーク設定情報は、対象のネットワーク内における各ネットワーク機器に設定される情報である。ここで、対象とするネットワークの構成やアドレス体系によって、ネットワーク設定情報における各設定項目には、変更の多いものもあれば、変更の少ない固定的なものもある。そのため、ネットワーク設定情報を構成する各変数は、その値の変化しやすさが異なる。したがって、異なる環境のネットワークでは、ネットワーク設定情報をＢＤＤで表す場合に適切な変数順序が異なると考えられる。そこで、本実施の形態は、本発明の検証対象データとしてネットワーク設定情報を適用することにより、個々のネットワーク環境に応じて、ネットワーク設定情報をＢＤＤで表す際の適切な変数順序を決定し、検証を行う。
【００３６】
まず、本発明の第２の実施の形態としての検証装置２の機能ブロック構成を図４に示す。図４において、検証装置２は、本発明の第１の実施の形態としての検証装置１に対して、検証対象データ取得部１１に替えて検証対象データ取得部２１と、変数順序決定部１２に替えて変数順序決定部２２と、ＢＤＤ処理部１３に替えてＢＤＤ処理部２３と、検証部１４に替えて検証部２４とを備え、さらに、ネットワーク設定情報保持部２５を備える点が異なる。なお、ネットワーク設定情報保持部２５は、本発明の検証対象データ取得部の一部の一実施形態を構成する。ここで、検証装置２およびその各機能ブロックは、図２を参照して説明した本発明の第１の実施の形態と同様のハードウェア要素によって構成可能である。なお、検証装置２およびその各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００３７】
検証対象データ取得部２１は、検証対象データとして、ネットワーク設定情報を取得する。前述のように、ネットワーク設定情報は、ネットワーク機器に設定される情報である。また、ネットワーク設定情報は、ブール関数で表現可能であるものとする。例えば、ネットワーク設定情報がビット列で表されるとすると、各ビットは、ブール関数の変数とみなすことができる。また、ブール関数の返値としては、例えば、そのネットワーク設定情報が正しければ１、正しくなければ０を返すとみなしてもよい。なお、ネットワーク設定情報をブール関数として表現する方法はこれに限らない。また、検証対象データ取得部２１は、対象のネットワーク内の各ネットワーク機器と通信することにより、それぞれのネットワーク設定情報を取得してもよい。
【００３８】
また、検証対象データ取得部２１は、略同一の時刻情報に関連するネットワーク設定情報をまとめて、ネットワーク設定情報保持部２５に保存する。このような略同一の時刻情報に関連するネットワーク設定情報を、以降、時刻グループとも記載する。具体的には、検証対象データ取得部２１は、対象のネットワークにおいてある時点に各ネットワーク機器に設定されているネットワーク設定情報をまとめて１つの時刻グループとすればよい。例えば、検証対象データ取得部２１は、取得時刻が略同一のネットワーク設定情報をまとめて１つの時刻グループとしてもよい。取得時刻が略同一であるとは、取得時刻が、いずれかの取得時刻前後の所定範囲の時間帯に含まれることであってもよい。あるいは、取得時刻が略同一であるとは、取得時刻から得られる情報の一部が同一であることであってもよい。取得時刻から得られる情報の一部とは、例えば、年月日までの情報や、時分までの情報などをさす。また、検証対象データ取得部２１が、ネットワーク内の各ネットワーク機器からネットワーク設定情報を取得する取得処理を、所定タイミング毎に行う場合を想定する。この場合、検証対象データ取得部２１は、同一タイミングの取得処理において各ネットワーク機器から取得したネットワーク設定情報をまとめて、１つの時刻グループとしてもよい。
【００３９】
変数順序決定部２２は、略同一の時刻情報に関連する複数のネットワーク設定情報間において、ネットワーク設定情報を構成する各変数の値の変化しやすさに基づいて、変数順序を決定する。具体的には、変数順序決定部２２は、上述した同一の時刻グループ内での各変数の値の変化しやすさに基づいて、変数順序を決定すればよい。ここで、同一の時刻グループには、上述したように、ある時点における各ネットワーク機器のネットワーク設定情報が含まれている。したがって、同一の時刻グループ内のネットワーク設定情報間で値が変化しやすい変数は、そのネットワーク環境で、個々のネットワーク機器に応じて、設定が異なることが多い項目に対応すると考えられる。また、このような同一の時刻グループ内のネットワーク設定情報間で値が変化しにくい変数は、そのネットワーク環境では、ネットワーク機器が異なっていても、設定が固定的となることが多い項目に対応すると考えられる。
【００４０】
また、変数順序決定部２２は、複数の時刻グループのそれぞれについて、各時刻グループ内における各変数の値の変化しやすさを算出してもよい。この場合、変数順序決定部２２は、同じ変数について複数の時刻グループ内でそれぞれ算出した変化しやすさを統合して、その変数の値の変化しやすさを求めてもよい。
【００４１】
また、変数順序決定部２２は、異なる時刻情報にそれぞれ関連する複数のネットワーク設定情報間において、ネットワーク設定情報を構成する各変数の値の変化しやすさに基づいて、変数順序を決定する。具体的には、変数順序決定部２２は、異なる時刻グループ間での各変数の値の変化しやすさに基づいて、変数順序を決定すればよい。ここで、異なる時刻グループには、各ネットワーク機器について異なる時間に設定されていたネットワーク設定情報が含まれている。したがって、異なる時刻グループ間で値が変化しやすい変数は、そのネットワーク環境で、時間の経過に伴い設定が変更されやすい項目に対応すると考えられる。また、異なる時刻グループ間で値が変化しにくい変数は、そのネットワーク環境で、時間が経過しても設定が変更されることが少なく固定的となりやすい項目に対応すると考えられる。
【００４２】
なお、変数順序決定部２２は、同一の時刻グループ内または異なる時刻グループ間での各変数の値の変化しやすさとして、本発明の第１の実施の形態と同様に、変更回数の多さを表す情報を、変化しやすさとして求めてもよい。また、変更回数の多さとは、本発明の第１の実施の形態と同様に、複数のネットワーク設定情報のうち同一である個数が最も多い値に対する異なる値の個数や割合などであってもよい。
【００４３】
また、変数順序決定部２２は、同一の時刻グループ内での各変数の変化しやすさおよび異なる時刻グループ間での各変数の変化しやすさを組み合わせて、変数順序を決定してもよい。例えば、変数順序決定部２２は、まず、同一の時刻グループ内での各変数の変化しやすさに基づいて、変数順序を暫定的に決定する。このとき、同一の時刻グループ内での変化しやすさが同一の複数の変数があるとする。この場合、変数順序決定部２２は、それらの変化しやすさが同一の複数の変数については、異なる時刻グループ間での変化しやすさに基づいて、変数順序を定めてもよい。あるいは、変数順序決定部２２は、まず異なる時刻グループ間での変化しやすさに基づいて変数順序を決定してもよい。そして、変数順序決定部２２は、異なる時刻グループ間での変化しやすさが同一の複数の変数について、同一の時刻グループ内での変化しやすさに基づいて変数順序を決定してもよい。
【００４４】
また、変数順序決定部２２は、後述の検証部２４が用いる検証アルゴリズムにあらかじめ定められた変数順序を、決定した変数順序に変換する変換情報を生成する。変換情報は、例えば、あらかじめ定められた変数順序に対して、決定された変数順序が対応付けられたテーブル形式であってもよい。
【００４５】
ＢＤＤ処理部２３は、与えられた変数順序で、与えられたブール関数を表すＢＤＤを生成する。ＢＤＤ処理部２３は、公知の技術によって実現可能である。ＢＤＤ処理部２３は、後述の検証部２４から、上述の変換情報を介して利用される。これにより、ＢＤＤ処理部２３は、変数順序決定部２２によって決定された変数順序で、ネットワーク設定情報を表すＢＤＤを生成することになる。
【００４６】
検証部２４は、ネットワーク設定情報をＢＤＤで表して検証する検証アルゴリズムを実行する。なお、検証アルゴリズムには、公知の技術を採用可能である。また、検証アルゴリズムには、変数順序があらかじめ定められている。そこで、検証部２４は、上述の変換情報を介してＢＤＤ処理部２３を利用する。これにより、検証部２４は、決定された変数順序に基づいてＢＤＤを生成し検証を行うことができる。
【００４７】
以上のように構成された検証装置２の動作について、図面を参照して説明する。
【００４８】
まず、検証装置２の検証動作の概略を図５に示す。
【００４９】
図５では、まず、検証対象データ取得部２１は、対象のネットワーク内の各ネットワーク機器から、ネットワーク設定情報を取得する（ステップＳ１１）。前述のように、検証対象データ取得部２１は、取得したネットワーク設定情報を時刻グループごとにまとめて、ネットワーク設定情報保持部２５に保存する。
【００５０】
次に、変数順序決定部２２は、ネットワーク設定情報保持部２５に保存したネットワーク設定情報を構成する各変数について、その値の変化しやすさに基づいて変数順序を決定する（ステップＳ１２）。このステップの詳細については後述する。
【００５１】
次に、変数順序決定部２２は、検証部２４に定められた変数順序を、ステップＳ１２で決定した変数順序に変換する変換情報を生成する（ステップＳ１３）。
【００５２】
次に、検証部２４は、変換情報を介してＢＤＤ処理部２３を利用することにより、ステップＳ１２で決定された変数順序で、ネットワーク設定情報を表すＢＤＤを生成する（ステップＳ１４）。
【００５３】
次に、検証部２４は、ステップＳ１４で生成されたＢＤＤを用いて、ネットワーク設定情報の検証を行う（ステップＳ１５）。
【００５４】
次に、検証部２４は、検証結果を出力する（ステップＳ１６）。
【００５５】
以上で、検証装置２は、検証動作を終了する。
【００５６】
次に、ステップＳ１２における変数順序決定動作の詳細を、図６に示す。
【００５７】
図６では、まず、変数順序決定部２２は、ネットワーク設定情報保持部２５から、過去に取得したｎ回分（ｎ個の時刻グループ）のネットワーク設定情報を取り出す（ステップＳ２１）。ただし、ｎは、２以上の整数である。
【００５８】
次に、変数順序決定部２２は、過去ｎ回のそれぞれの時刻グループ内において、ネットワーク設定情報間での各変数の値の変化しやすさを求める（ステップＳ２２）。例えば、変数順序決定部２２は、それぞれの時刻グループ内において、ネットワーク設定情報間での変数の値の変化しやすさを算出する。そして、変数順序決定部２２は、ある変数についてｎ個の時刻グループにおいて算出した変化しやすさを統合して、その変数の変化しやすさを求めてもよい。
【００５９】
次に、変数順序決定部２２は、ネットワーク設定情報を構成する各変数について、過去ｎ回の取得時刻に対応する時刻グループ間での値の変化しやすさを求める（ステップＳ２３）。
【００６０】
次に、変数順序決定部２２は、ステップＳ２２およびＳ２３で求めた各変数の値の変化しやすさに基づいて、変数順序を決定する（ステップＳ２４）。
【００６１】
例えば、前述のように、変数順序決定部２２は、まず、同一の時刻グループ内での変化しやすさの順に変数順序を決定してもよい。そして、変数順序決定部２２は、同一の時刻グループ内での変化しやすさが同一の複数の変数について、異なる時刻グループ間での変化しやすさの順に変数順序を決定してもよい。あるいは、前述のように、変数順序決定部２２は、まず、異なる時刻グループ間での変化しやすさの順に変数順序を決定してもよい。そして、変数順序決定部２２は、異なる時刻グループ間での変化しやすさが同一の複数の変数について、同一の時刻グループ内での変化しやすさの順に変数順序を決定してもよい。
【００６２】
以上で、変数順序決定部２２は、変数順序決定動作を終了する。
【００６３】
次に、検証装置２の動作を具体例で示す。まず、この具体例において、ネットワーク設定情報をブール関数で表現する方法について説明する。ここで、ネットワーク設定情報をブール関数として表現する方法は、検証アルゴリズム、検証項目、または、検証対象などによって異なる。ここでは、一例として、ネットワーク設定情報が、パターンにマッチする場合にアクションを行うというルールを表す例を用いて説明する。パターンとは、例えば、送信元および送信先のネットワークアドレスを特定するパケットのパターンを表す。また、アクションとは、パケットに対する転送や破棄などの処理を表す。パターンおよびそれに対するアクションからなるルールは、２進数で表現した時に０、１、ｘからなるビット列として表現される。なお、「ｘ」は、０および１のどちらでもよいことを表すワイルドカードである。
【００６４】
このとき、ネットワーク設定情報は、ビット列の各ビットをブール変数として、上述のようなパターンおよびアクションからなるルールとして有効なビット列を含む場合に１を返し、そうでない場合に０を返すブール関数として表現される。このようなブール関数の集合は、ＢＤＤを用いることで、コンパクトに保持可能となることが多い。さらには、このようなブール関数の集合は、ＢＤＤを用いることで、集合に対する演算（和集合・積集合）を効率よく実行可能となる。
【００６５】
この具体例におけるネットワーク設定情報のデータ構造を模式的に図７に示す。ここでは、対象のネットワークには、ネットワーク機器Ｒ１およびＲ２が含まれるとする。図７に示す時刻ｔ１の時刻グループは、時刻ｔ１に、検証対象データ取得部２１によってネットワーク機器Ｒ１およびＲ２からそれぞれ取得されたネットワーク検証情報ｒ１およびｒ２を含む。また、時刻ｔｎの時刻グループは、時刻ｔｎに、検証対象データ取得部２１によってネットワーク機器Ｒ１およびＲ２からそれぞれ取得されたネットワーク検証情報ｒ１およびｒ２を含む。
【００６６】
また、図７において、それぞれのネットワーク検証情報は、パターンおよびアクションを含む。アクションａｃｔは、パターンにマッチしたパケットを受け取った場合に実行する処理を表している。ａｃｔは、例えば、８ビットで表されていてもよい。パターンは、条件となるソースアドレス（送信元のネットワークアドレス）ｓｒｃおよびデスティネーションアドレス（送信先のネットワークアドレス）ｄｓｔを含む。ｓｒｃおよびｄｓｔは、それぞれ、例えば３２ビットで表されていてもよい。また、ｓｒｃおよびｄｓｔは、それぞれ図示のピリオドで区切られた４つのビット範囲（例えば、８ビットずつ）から構成される。以降、これらのビット範囲を、ｓｒｃ［０］〜［３］、ｄｓｔ［０］〜［３］と記載する。なお、図７では、これらのビット範囲の値として、ビット列でない表記を示しているが、実際には、これらのビット範囲は、０、１、ｘのビット列で構成される。また、この具体例では、説明を簡単にするため、以下、このようなビット範囲ごとに、その変化しやすさについて述べている。ただし、実際には、各変数の変化しやすさは、ネットワーク設定情報を構成するビット列のビット（ブール変数）毎に求められる。
【００６７】
このような具体例において、検証装置２は、次のように動作する。
【００６８】
まず、検証対象データ取得部２１は、時刻ｔ１〜ｔｎに、ネットワーク内のネットワーク機器Ｒ１およびＲ２からネットワーク設定情報を取得する。そして、検証対象データ取得部２１は、時刻ｔｉ（ｉ＝１〜ｎ）に取得したネットワーク設定情報ｒ１およびｒ２を、時刻ｔｉ（ｉ＝１〜ｎ）の時刻グループとして、ネットワーク設定情報保持部２５に保存する（ステップＳ１１）。
【００６９】
次に、変数順序決定部２２は、ネットワーク設定情報保持部２５に保存したネットワーク設定情報に基づいて、ネットワーク設定情報を構成する変数の順序を決定する（ステップＳ１２）。
【００７０】
ここで、変数順序として、ｄｓｔ［２］、ｄｓｔ［３］、ａｃｔ、・・・、ｓｒｃ［０：３］、・・・、ｄｓｔ［０］、ｄｓｔ［１］が決定されたものとする。この変数順序は、以下のように決定される。
【００７１】
まず、変数順序決定部２２は、ネットワーク設定情報保持部２５から、過去ｎ回の時刻ｔ１〜ｔｎにおけるネットワーク設定情報を取り出す（ステップＳ２１）。
【００７２】
次に、変数順序決定部２２は、各取得時刻ｔｉの時刻グループ内での各変数について、その変化しやすさを求める（ステップＳ２２）。
【００７３】
例えば、時刻ｔ１では、ネットワーク設定情報ｒ１のｄｓｔ［２］、ｄｓｔ［３］は、「ａ．ｂ」であるが、ネットワーク設定情報ｒ２のｄｓｔ［２］、ｄｓｔ［３］は、「＊．＊」である。つまり、時刻ｔ１において、ｄｓｔ［２］、ｄｓｔ［３］は変化している。また、時刻ｔ１では、ネットワーク設定情報ｒ１およびｒ２とも、ｄｓｔ［０］、ｄｓｔ［１］は、「１０．０」である。つまり、時刻ｔ１において、ｄｓｔ［０］、ｄｓｔ［１］は、変化していない。このように、時刻ｔ１において、ｄｓｔ［２］、ｄｓｔ［３］は、ｄｓｔ［０］、ｄｓｔ［１］よりも変化しやすい。同様に、取得時刻ｔｎにおいても、ｄｓｔ［２］、ｄｓｔ［３］は、ｄｓｔ［０］、ｄｓｔ［１］よりも変化しやすい。これは、例えば、パケットの転送やファイヤウォールの用途では、デスティネーションアドレス毎に異なる処理をアクションとして指定することが多いためである。なお、異なる処理とは、ポート番号を指定した転送や、パケットの破棄などである。また、このネットワーク環境において、各機器に割り当てられるネットワークアドレスは、上位部分ｄｓｔ［０］、ｄｓｔ［１］の部分が固定的であり、下位部分ｄｓｔ［２］、ｄｓｔ［３］が変化する。したがって、このネットワーク設定情報において、デスティネーションアドレス中の下位部分ｄｓｔ［２］、ｄｓｔ［３］の部分に対応する変数は、上位部分より変化しやすい変数となる。
【００７４】
同様に、時刻ｔ１では、ネットワーク設定情報ｒ１のａｃｔ「・・・１０１１・・・」と、ｒ２のａｃｔ「・・・１０００・・・」とは、異なっている。つまり、時刻ｔ１において、ａｃｔは変化している。同様に、時刻ｔ２でも、ａｃｔは変化している。
【００７５】
このようにして、ステップＳ２２において、変数順序決定部２２は、同一の時刻グループ内での変化しやすさとして、以下の情報を求めた。
・同一の時刻グループ内で変化しやすい変数：ｄｓｔ［２］、ｄｓｔ［３］、ａｃｔ
・同一の時刻グループ内で変化していない変数：ｄｓｔ［０］、ｄｓｔ［１］、ｓｒｃ［０〜３］
次に、変数順序決定部２２は、ネットワーク設定情報を構成する各変数について、過去ｎ回の時刻グループをまたいでの変化しやすさを求める（ステップＳ２３）。
【００７６】
例えば、ネットワーク設定情報ｒ１のａｃｔは、時刻ｔ１で「・・・１０１１・・・」であり、時刻ｔｎで「・・・１０１１・・・」である。つまり、時刻ｔ１、ｔｎ間で、ネットワーク設定情報ｒ１のａｃｔは変化していない。同様に、ネットワーク設定情報ｒ２のａｃｔは、時刻ｔ１、ｔｎ間で変化していない。
【００７７】
また、ネットワーク設定情報ｒ２では、時刻ｔ１およびｔｎともに、ｄｓｔ［２］、ｄｓｔ［３］は、「＊．＊」で変化していない。しかしながら、ネットワーク設定情報ｒ１では、ｄｓｔ［２］、ｄｓｔ［３］は、時刻ｔ１で「ａ．ｂ」であり、時刻ｔ２で「ｃ．ｄ」である。つまり、ネットワーク設定情報ｒ１のｄｓｔ［２］、ｄｓｔ［３］は、時刻ｔ１、ｔｎ間で変化している。これは、パケットの転送やファイヤウォールの用途では、時間の経過に伴うマシン移動等によりネットワーク設定情報のデスティネーションアドレスを変更することのほうが、それに対する処理（アクション）を変更することよりも多いためである。
【００７８】
このようにして、ステップＳ２３において、変数順序決定部２２は、ステップＳ２２で同一の変化しやすさとなったｄｓｔ［２］、ｄｓｔ［３］、ａｃｔについて、異なる時刻グループ間での変化しやすさとして、以下の情報を求めた。
・異なる時刻グループ間で変化しやすい変数：ｄｓｔ［２］、ｄｓｔ［３］
・異なる時刻グループ間で変化していない変数：ａｃｔ
そして、変数順序決定部２２は、まず、同一の時刻グループ内での変化しやすさの順に変数を並べる。そして、変数順序決定部２２は、同一の時刻グループ内での変化しやすさが同一のものについて、異なる時刻グループ間での変化しやすさの順に並べる。その結果、変数順序決定部２２は、ｄｓｔ［２］、ｄｓｔ［３］、ａｃｔ、・・・、ｓｒｃ［０：３］、・・・、ｄｓｔ［０］、ｄｓｔ［１］のように、変数順序を決定する(ステップＳ２４)。
【００７９】
このようにして決定された変数順序は、次の順で変数を含む。
（１）同一の時刻グループ内でも異なる時刻グループ間でも変化しやすい、デスティネーションアドレスの下位部分ｄｓｔ［２］、ｄｓｔ［３］に対応する変数
（２）異なる時刻グループ間では変化していないが同一の時刻グループ間では変化しやすいａｃｔに対応する変数
（３）同一の時刻グループ内でも異なる時刻グループ間でも変化していない、ソースアドレスｓｒｃ［０］〜［３］およびデスティネーションアドレスの上位部分ｄｓｔ［０］、ｄｓｔ［１］に対応する変数
なお、この具体例では、同一の時刻グループ内で値が変化していない変数ｄｓｔ［０］、ｄｓｔ［１］、ｓｒｃ［０〜３］は、異なる時刻グループ間でも値が変化していなかった。ここで、仮に、同一の時刻グループ内で値が変化していないこれらの変数について、異なる時刻グループ間での変化しやすさに違いがあるとする。この場合、変数順序決定部２２は、上記（２）と（３）の間に、
・異なる時刻グループ間では変化しやすいが同一の時刻グループ間では変化していない変数、
を入れて変数順序を決定してもよい。
【００８０】
次に、変数順序決定部２２は、検証部２４にあらかじめ定められた変数順序を、ステップＳ２４で決定した変数順序に変換する変換情報を生成する（ステップＳ１３）。変換情報を、模式的に図８に示す。図８において、例えば、変換情報を構成する９番目のデータには、１３という値が格納されている。これは、検証部２４がＢＤＤ処理部２３に対して１３番目の変数を参照しようとするとき、９番目の変数を参照するよう変換する情報を表している。
【００８１】
次に、検証部２４は、図８の変換情報を介してＢＤＤ処理部２３を用いることにより、ネットワーク設定情報を表すＢＤＤを生成する（ステップＳ１４）。
【００８２】
次に、検証部２４は、ステップＳ１４で生成されたＢＤＤを用いて検証を行う（ステップＳ１５）。そして、検証部２４は、検証結果を出力する（ステップＳ１６）。
【００８３】
以上で、具体例の動作の説明を終了する。
【００８４】
次に、本発明の第２の実施の形態の効果について述べる。
【００８５】
本発明の第２の実施の形態としての検証装置は、ＢＤＤを用いたネットワーク設定情報の検証において、事前に変数順序を決定することなく、個々のネットワーク環境に応じた変数順序をより適切に決定することができる。
【００８６】
その理由は、検証対象データ取得部が、検証対象データとしてネットワーク設定情報を取得し、変数順序決定部が、ネットワーク設定情報を構成する各変数について、値の変化のしやすさに基づいて変数順序を決定するからである。また、このとき、変数順序決定部が、略同一の時刻情報に関連するネットワーク設定情報間での変数の値の変化しやすさと、異なる時刻情報にそれぞれ関連するネットワーク設定情報間での変数の値の変化しやすさとに基づいて、変数順序を決定するからである。そして、変数順序決定部が、検証部の用いる検証アルゴリズムにあらかじめ定められた変数順序を変換する変換情報を生成するからである。そして、検証部が、変換情報を介してＢＤＤ処理部を利用することにより、変換された変数順序でネットワーク設定情報を表すＢＤＤを生成し検証を行うからである。
【００８７】
これにより、本実施の形態は、対象のネットワーク中において各ネットワーク機器のネットワーク設定情報を構成するビット列のどの位置（ビット）が固定的か、あるいはよく変化するかに基づいて、ＢＤＤを生成する際の変数順序を決定することができる。ここで、ネットワーク設定情報を構成するビット列のどの位置が固定的か、あるいはよく変化するかは、ネットワークの構成、アドレス体系、運用状況などの個々の環境によって異なってくる。したがって、本実施の形態は、ＢＤＤ処理部での変数順序として、検証アルゴリズムによって決定されたものを固定的に用いるのではなく、対象ネットワークの環境に応じて決定した変数順序を用いることができる。その結果、本実施の形態は、検証対象のネットワーク設定情報を表すＢＤＤとしてより効率的な情報を生成して検証を行うことができる。例えば、本実施の形態は、ネットワーク設定情報の正しさの検証等の用途において、上述のような効果を奏する。
【００８８】
なお、本発明の第２の実施の形態において、検証対象データ取得部が、略同時に取得したネットワーク設定情報をまとめて１つの時刻グループとしてネットワーク設定情報保持部に保存する例について説明した。この他、検証対象データ取得部は、取得したネットワーク設定情報を、単に、時刻情報に関連付けてネットワーク設定情報保持部に保存してもよい。この場合、変数順序決定部が、ネットワーク設定情報保持部を参照することにより、略同一の時刻情報に関連するネットワーク設定情報を１つの時刻グループとして抽出すればよい。また、これに限らず、検証対象データ取得部は、略同一の時刻情報に関連するネットワーク設定情報をまとめて抽出可能であるような形式で、ネットワーク設定情報をネットワーク設定情報保持部に保存すればよい。
【００８９】
また、本発明の第２の実施の形態の具体例において、各変数の値の変化しやすさとして、変化しやすい、変化していない、の２段階の情報を求める例について説明した。これに限らず、変数順序決定部は、変化しやすさとして、さらに多段階の情報や、数値で表される情報などを求めてもよい。
【００９０】
また、本発明の第２の実施の形態において、検証対象データとしてネットワーク設定情報を適用する例を説明した。これに限らず、本発明における検証対象データは、他の領域の検証対象データにも適用可能である。特に、本発明は、検証対象データを構成する各変数の変化しやすさに傾向があるような領域において、効果を奏する。例えば、ネットワーク設定に限らず、コンピュータシステムにおける各種設定情報には、設定項目によって変更されやすいもの、固定的になりやすいものなどの傾向があるケースがある。そのような設定情報を、本発明の検証対象データとして適用することにより、本発明は、より適切な変数順序を定めてＢＤＤを用いて検証を行うことができる。
【００９１】
また、上述した本発明の各実施の形態において、検証装置は、検証対象データを検証するたびにそのための変数順序を決定するよう説明した。これに限らず、検証装置は、対象環境の検証対象データについて一旦変数決定処理を行った後は、検証対象データの特性に大きな変化がない場合には、変数決定処理を省略してもよい。この場合、検証装置は、変数順序決定部により以前に決定した変数順序でＢＤＤを生成してもよい。例えば、本発明の第２の実施の形態の場合、検証装置は、ネットワークの構成やアドレス体系に大きな変化があった場合に変数順序決定処理を行うようにしてもよい。この場合、検証装置は、ネットワークの構成やアドレス体系に大きな変化がない場合には、変数決定処理を省略してもよい。そして、この場合、検証装置は、変数順序決定部により以前に決定した変数順序を用いてＢＤＤを生成し、ネットワーク設定情報の検証を行ってもよい。
【００９２】
また、上述した本発明の各実施の形態において、検証装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが、専用のハードウェアにより実現されていてもよい。
【００９３】
また、上述した本発明の各実施の形態において、検証装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【００９４】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した検証装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータの記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【００９５】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【００９６】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【００９７】
１、２    検証装置
１１、２１    検証対象データ取得部
１２、２２    変数順序決定部
１３、２３    ＢＤＤ処理部
１４、２４    検証部
２５    ネットワーク設定情報保持部
１００１    ＣＰＵ
１００２    メモリ
１００３    出力装置
１００４    入力装置
１００５    ネットワークインタフェース
【図１】
2016092748.tif 000003
【図２】
2016092748.tif 000004
【図３】
2016092748.tif 000005
【図４】
2016092748.tif 000006
【図５】
2016092748.tif 000007
【図６】
2016092748.tif 000008
【図７】
2016092748.tif 000009
【図８】
2016092748.tif 000010