(57)【特許請求の範囲】
【請求項１】
送信元デバイスから送信先デバイスへのデータの送信を監視するコンピュータに、
指定順序と異なる順序で送信されたデータを検出する検出工程と、
前記検出工程により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が前記送信元デバイスと前記送信先デバイスとの間の通信プロトコルに基づく指定制約により許可されているか否かを、前記データのうちスキップされたトランザクションのパケットの送信時間が特定時間よりも短いか否かによって判断する判断工程と、
前記判断工程による判断結果を出力する出力工程と、
を実行させることを特徴とする監視プログラム。
【請求項２】
前記指定制約が前記通信プロトコルに基づく制約および前記送信元デバイスに関する設計仕様に基づく制約であって、
前記判断工程は、
前記検出工程により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が前記指定制約のうち少なくとも一つの制約により許可されているか否かを判断することを特徴とする請求項１に記載の監視プログラム。
【請求項３】
前記設計仕様に基づく複数の制約から選択された制約の入力を受け付ける受付工程と、
前記受付工程により受け付けられた制約および前記通信プロトコルに関する制約を前記指定制約として、当該指定制約に関する条件式を生成する生成工程と、を前記コンピュータに実行させ、
前記判断工程は、
前記検出工程により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が前記生成工程により生成された条件式に基づいて許可されているか否かを判断することを特徴とする請求項２に記載の監視プログラム。
【請求項４】
送信元デバイスから送信先デバイスへのデータの送信を監視する監視装置であって、
指定順序と異なる順序で送信されたデータを検出する検出手段と、
前記検出手段により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が前記送信元デバイスと前記送信先デバイスとの間の通信プロトコルに基づく指定制約により許可されているか否かを、前記データのうちスキップされたトランザクションのパケットの送信時間が特定時間よりも短いか否かによって判断する判断手段と、
前記判断手段による判断結果を出力する出力手段と、
を備えることを特徴とする監視装置。
【請求項５】
送信元デバイスから送信先デバイスへのデータの送信を監視する監視方法であって、
指定順序と異なる順序で送信されたデータを検出する検出工程と、
前記検出工程により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が前記送信元デバイスと前記送信先デバイスとの間の通信プロトコルに基づく指定制約により許可されているか否かを、前記データのうちスキップされたトランザクションのパケットの送信時間が特定時間よりも短いか否かによって判断する判断工程と、
前記判断工程による判断結果を出力する出力工程と、
をコンピュータが実行することを特徴とする監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの送信を監視する監視プログラム、監視装置、および監視方法に関する。
【背景技術】
【０００２】
従来、任意の処理における一連のデータ（以下、「トランザクション」と称する。）が送信元デバイスから送信先デバイスへ送信される場合、トランザクションは複数のパケットに分割されて送信される。トランザクションが複数ある場合には、指定順序で各トランザクションに所属するパケットが送信される。トランザクションＡ，Ｂを例に挙げると、指定順序とはトランザクションＡのパケットとトランザクションＢのパケットとが１パケットずつ交互に送信されることを指す。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００５−５１９５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、指定順序と異なる順序でパケットが送信される場合があった。トランザクションＡ，Ｂを例に挙げると、異なる順序とはトランザクションＡのパケットがスキップされてトランザクションＢのパケットが連続して送信されることを指す。また、逆も同じで、トランザクションＢのパケットがスキップされてトランザクションＡのパケットが連続して送信されることを指す。
【０００５】
パケットがスキップされる原因には、送信元デバイスの動作が不正確でありエラーが発生する場合（第１の原因）と通信プロトコルや送信元デバイスに関する設計仕様で決められて発生する場合（第２の原因）とが挙げられる。通信プロトコルとはネットワーク上での通信に関する規約である。検証者は第１の原因のみを検証したいが、送信先デバイスに送信されたパケットでは第１および第２の原因が混在していた。
【０００６】
したがって、検証者は通信プロトコルと設計仕様を把握してスキップの原因が第１の原因であるか第２の原因であるかを判断後、第１の原因によりスキップされたパケットに関して送信元デバイスを検証していた。しかしながら、通信プロトコルや設計仕様が複雑であると利用者がスキップの原因を誤って判断するという問題点があった。
【０００７】
本発明は、上述した従来技術による問題点を解消するため、送信元デバイスの動作により発生したエラーのうち、実はエラーではなかった処理の正当性を証明することで、検証作業の効率化を図ることができる監視プログラム、監視装置、および監視方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の監視プログラム、監視装置、および監視方法は、送信元デバイスと送信先デバイス間のデータの送信の監視処理を実行する監視プログラム、監視装置、監視方法であって、指定順序と異なる順序で送信されたデータを検出する検出工程と、前記検出工程により前記異なる順序で送信されたデータが検出された場合、前記異なる順序が指定制約により許可されているか否かを判断する判断工程と、前記判断工程による判断結果を出力する出力工程とを備えることを要件とする。
【発明の効果】
【０００９】
本監視プログラム、監視装置、および監視方法によれば、送信元デバイスの動作により発生したエラーのうち、実はエラーではなかった処理の正当性を証明することで、検証作業の効率化を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施例を示す説明図である。
【図２】通信プロトコルに基づく制約の一例を示す説明図である。
【図３】送信元デバイスに関する設計仕様に基づく制約の一例を示す説明図である。
【図４】監視装置１００のハードウェア構成を示すブロック図である。
【図５】監視装置１００の機能的構成を示すブロック図である。
【図６】トランザクションＡに対応するノードが生成される例を示す説明図である。
【図７】トランザクションＢに対応するノードが生成される例を示す説明図である。
【図８】トランザクションＣに対応するノードが生成される例を示す説明図である。
【図９】指定順序と異なる順序でパケットが送信された例を示す説明図である。
【図１０】ノードが削除される例を示す説明図である。
【図１１】制約の条件式が生成される例を示す説明図である。
【図１２】監視装置１００による監視処理手順の一例を示すフローチャート（その１）である。
【図１３】監視装置１００による監視処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本発明にかかる監視プログラム、監視装置、および監視方法の好適な実施の形態を詳細に説明する。
【００１２】
図１は、本発明の一実施例を示す説明図である。送信元デバイス１０１が送信先デバイス１０２へパケットを送信し、送信されたパケットを監視装置１００が監視する。図１では理解の容易化のために送信されるパケットがすべて羅列されている。本実施の形態においては、送信元デバイス１０１の一例としてＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ホストコントローラを用い、送信先デバイス１０２としてＵＳＢデバイスを用いて説明する。ＵＳＢホストコントローラは、周知のようにフレーム単位で時間を管理してパケットの送信を制御する。
【００１３】
また、ＵＳＢホストコントローラはフレームの始まりを示すためにＳＯＦ（Ｓｔａｒｔ  ＯＦ  Ｆｒａｍｅ）をＵＳＢホストコントローラとＵＳＢデバイスとを接続するバスに発行する。
【００１４】
また、Ａが付されている実線の□がトランザクションＡのパケットを示し、Ｂが付されている実線の□がトランザクションＢのパケットを示している。なお、各パケットにはどのトランザクションに属しているかを識別可能な識別情報（以下、「トランザクションＩＤ（Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）」と称する。）が付されているため、監視装置１００はトランザクションＩＤによってパケットが属するトランザクションを特定できる。さらに、実線の□の上に付されている番号が１フレームのうち何番目に送信されたパケットであるかを示している。また、図１における指定順序はトランザクションＡのパケットとトランザクションＢのパケットが交互に送信されることを指す。
【００１５】
まず、送信元デバイス１０１から送信先デバイス１０２へＳＯＦが送信され、つぎに、１番目にトランザクションＡのパケットが送信され、２番目にトランザクションＢのパケットが送信された。３番目にトランザクションＡのパケットが送信され、４番目にトランザクションＢのパケットが送信された。つぎに、指定順序通りであれば５番目にトランザクションＡのパケットが送信されるが、図１では、５番目にトランザクションＢのパケットが送信された。したがって、トランザクションＡのパケットがスキップされている（点線の□）。
【００１６】
監視装置１００は、５番目に送信されたトランザクションＢのパケットを指定順序と異なる順序で送信されたパケットとして検出する。そして、監視装置１００は、異なる順序で送信されたパケットを検出した場合、指定制約により異なる順序が許可されているか否かを判断する。指定制約とは利用者により定められた通信プロトコルの制約や設計仕様に関する制約である。
【００１７】
通信プロトコルに基づく制約はつぎのようにパケットの送信を制約する：たとえば、もしあるパケットが所定時間内に完全に送信できない場合には該パケットを送信しない。設計仕様に基づく制約は、設計仕様に基づいて利用者により定められた制約である。通信プロトコルの制約および設計仕様に関する制約についての詳細は後述する。下記式（１）は制約に関する条件式である。
【００１８】
ｓｋｉｐ＿ｏｋ（パケット）＝ｂｕｉｌｔ＿ｉｎ（パケット）
∨  ｐｌｕｇｉｎ＿１（パケット）
∨  ｐｌｕｇｉｎ＿２（パケット）
∨  ｐｌｕｇｉｎ＿３（パケット）
・
・
・
∨  ｐｌｕｇｉｎ＿Ｎ（パケット）        ・・・（１）
【００１９】
ここで、上記式（１）のうち、ｂｕｉｌｔ＿ｉｎ（パケット）が通信プロトコルに基づく制約であり、ｐｌｕｇｉｎ＿１（パケット）〜ｐｌｕｇｉｎ＿Ｎ（パケット）が設計仕様に基づくＮ個の制約である。∨は、論理和を示す。上記式（１）ではいずれか１つの制約において１（真）であればｓｋｉｐ＿ｏｋ（パケット）が１（真）であり、スキップが許可されていることを示す。設計仕様に基づく制約を上記式（１）に追加させるには、設計仕様に基づく制約をｐｌｕｇｉｎとして∨で接続させればよい。
【００２０】
上記式（１）については利用者が作成してもよいし、監視装置１００が設計仕様に基づく制約と通信プロトコルに基づく制約に基づいて生成してもよい。
【００２１】
つぎに、５番目のパケットはトランザクションＢのパケットであり、スキップされたパケットはトランザクションＡのパケットである。監視装置１００は、ｓｋｉｐ＿ｏｋ（トランザクションＡのパケット）（以下、省略して「ｓｋｉｐ＿ｏｋ（Ａ）」とする）を求め、ｓｋｉｐ＿ｏｋ（Ａ）が１であれば指定制約により異なる順序が許可されていると判断する。ここでは、ｓｋｉｐ＿ｏｋ（Ａ）を１とする。そして、監視装置１００は、たとえば、５番目の送信に関してトランザクションＡのパケットのスキップが許可されていることを示す情報を出力する。
【００２２】
つぎに、８番目にトランザクションＡのパケットが送信され、９番目にトランザクションＢのパケットが送信され、１０番目にもトランザクションＢのパケットが送信される。監視装置１００は１０番目に送信されたトランザクションＢのパケットを指定順序と異なる順序で送信されたパケットとして検出する。したがって、１０番目に送信されるはずのトランザクションＡのパケットがスキップされる（点線の□）。
【００２３】
そして、監視装置１００はｓｋｉｐ＿ｏｋ（Ａ）を求める。ここでは、ｓｋｉｐ＿ｏｋ（Ａ）が０（偽）であるとする。監視装置１００は１０番目のパケットにおいて異なる順序が指定制約により許可されていないと判断し、１０番目に送信されたパケットにおいてトランザクションＡのパケットがエラーによりスキップされていることを示す情報を出力する。
【００２４】
（通信プロトコルに基づく制約）
図２は、通信プロトコルに基づく制約の一例を示す説明図である。Ｔｒｅｍａｉｎは送信時刻からフレーム終了時刻までの時間である。Ｔｍａｒｇｉｎは利用者により定められた時間であって、フレーム終了時刻直前においてパケットが送信できない時間である。Ｔｍａｒｇｉｎの値は利用者が変更して調整することで決定される。
【００２５】
Ｔｓｅｎｄ（パケット）はパケットの送信時間を示し、たとえば、Ｔｓｅｎｄ（Ａ）とはトランザクションＡのパケットの送信時間である。トランザクションごとにパケットのデータ量が異なるため、トランザクションごとにパケットの送信時間がそれぞれ異なる。上記式（１）のｂｕｉｌｔ＿ｉｎ（パケット）を下記式（２）に示す。
【００２６】
ｂｕｉｌｔ＿ｉｎ（パケット）
＝（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ＜Ｔｓｅｎｄ（パケット））        ・・・（２）
【００２７】
ここで、上記式（２）では（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ）がＴｓｅｎｄ（パケット）より小さければ１（真）となり、（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ）がＴｓｅｎｄ（パケット）以上であれば０（偽）となる。ｂｕｉｌｔ＿ｉｎ（パケット）が１（真）であれば、パケットを送信するための時間が足りないためにスキップしたことを意味する。一方、ｂｕｉｌｔ＿ｉｎ（パケット）が０（偽）であれば、パケットを送信するための時間は十分あったことを意味する。
【００２８】
たとえば、送信時刻においてスキップされたパケットがトランザクションＡのパケットの場合、図２では（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ）がＴｓｅｎｄ（Ａ）より小さいため、上記式（２）は１（真）となる。よって、トランザクションＡのパケットがスキップされたことは許可されていると判断される。一方、たとえば、送信時刻においてスキップされたパケットがトランザクションＢのパケットまたはトランザクションＣのパケットの場合、図１では（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ）がＴｓｅｎｄ（Ｂ）およびＴｓｅｎｄ（Ｃ）以上であるため、上記式（２）は０（偽）となる。
【００２９】
（送信元デバイス１０１の設計仕様に基づく制約）
図３は、送信元デバイス１０１に関する設計仕様に基づく制約の一例を示す説明図である。本実施の形態においての指定順序はトランザクションＡ〜Ｃの順である。１番目にトランザクションＡのパケットが送信元デバイス１０１から送信され、２番目にトランザクションＢのパケットが送信元デバイス１０１から送信され、３番目にトランザクションＣのパケットが送信元デバイス１０１から送信される。つぎに、指定順序通りであれば４番目にトランザクションＡのパケットが送信されるが、図３では４番目にトランザクションＢのパケットが送信される。したがって、監視装置１００が指定順序と異なる順序であるとして４番目に送信されたトランザクションＢのパケットを検出する。
【００３０】
監視装置１００は、送信元デバイス１０１にアクセスしてスキップされたトランザクションＡのパケットの状態を特定する。ここで、トランザクションＡは、たとえば、記憶装置から読み出された一連のデータである。図３では、記憶装置からデータがすべて読み出されていないため、トランザクションＡのパケットは送信準備中である。一方、トランザクションＢのパケットは送信準備が完了していたため、送信元デバイス１０１によりトランザクションＡのパケットがスキップされてトランザクションＢのパケットが４番目に送信された。
【００３１】
本実施の形態では、送信準備中であるか否かに関する制約をｐｌｕｇｉｎ＿１（パケット）とする。監視装置１００が、送信元デバイス１０１にアクセスしてトランザクションＡのパケットが送信準備中であるか否かに関する情報を取得する。そして、監視装置１００が、取得した情報が送信準備中を示していればｐｌｕｇｉｎ＿１（パケット）を１（真）とし、送信準備完了を示していればｐｌｕｇｉｎ＿１（パケット）を０（偽）とする。本実施の形態では送信元デバイス１０１に関する設計仕様に基づく制約をｐｌｕｇｉｎ＿１のみとし、設計仕様に基づく制約および通信プロトコルに基づく制約の２つの制約に基づく条件式には下記式（３）を用いる。
【００３２】
ｓｋｉｐ＿ｏｋ（パケット）＝ｂｕｉｌｔ＿ｉｎ（パケット）
∨  ｐｌｕｇｉｎ＿１（パケット）        ・・・（３）
【００３３】
（監視装置１００のハードウェア構成）
図４は、監視装置１００のハードウェア構成を示すブロック図である。図４において、監視装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、ディスプレイ４０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０９と、キーボード４１０と、マウス４１１と、スキャナ４１２と、プリンタ４１３と、を備えている。また、各構成部はバス４００によってそれぞれ接続されている。
【００３４】
ここで、ＣＰＵ４０１は、監視装置１００の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。
【００３５】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００３６】
ディスプレイ４０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ４０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）４０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４１４に接続され、このネットワーク４１４を介して他の装置に接続される。そして、Ｉ／Ｆ４０９は、ネットワーク４１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３８】
キーボード４１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３９】
スキャナ４１２は、画像を光学的に読み取り、監視装置１００内に画像データを取り込む。なお、スキャナ４１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ４１３は、画像データや文書データを印刷する。プリンタ４１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００４０】
（監視装置１００の機能的構成）
図５は、監視装置１００の機能的構成を示すブロック図である。監視装置１００は、受付部５０１と、条件式生成部５０２と、取得部５０３と、ノード判断部５０４と、ノード生成部５０５と、挿入部５０６と、検出部５０７と、許可判断部５０８と、出力部５０９と、ノード削除部５１０と、を含む構成である。各機能（受付部５０１〜ノード削除部５１０）は、具体的には、たとえば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、Ｉ／Ｆ４０９により、実現する。
【００４１】
まず、受付部５０１は、送信元デバイス１０１に関する設計仕様に基づく制約が複数ある場合、複数の制約のうち選択された制約の入力を受け付ける。そして、条件式生成部５０２は、受付部５０１により受け付けられた設計仕様に基づく制約と通信プロトコルに関する制約を指定制約として、当該指定制約に関する条件式を生成する。
【００４２】
そして、取得部５０３は、送信元デバイス１０１から送信されたパケットを取得し、ノード判断部５０４は、取得部５０３により取得されたパケットのトランザクションＩＤに対応するノードがリストにあるか否かを判断する。リストとはパケットの送信順序を特定する情報であり、リストにはトランザクションＩＤに対応するノードが含まれ、パケットの送信と同時に動的にノードが生成・削除される。リストの詳細については後述する。
【００４３】
そして、ノード生成部５０５は、ノード判断部５０４により取得されたパケットのトランザクションＩＤに対応するノードがリストにないと判断された場合、取得されたパケットのトランザクションＩＤに対応するノードを生成する。そして、挿入部５０６は、ノード生成部５０５により生成されたノードをリストへ挿入する。
【００４４】
さらに、検出部５０７は、指定順序と異なる順序で取得部５０３により取得されたパケットが送信された場合、異なる順序で送信されたパケットとして取得されたパケットを検出する。そして、許可判断部５０８は、検出部５０７により異なる順序で送信されたパケットが検出された場合、異なる順序が条件式生成部５０２により生成された条件式に基づいて許可されているか否かを判断する。
【００４５】
そして、出力部５０９は、許可判断部５０８による判断結果を出力する。つぎに、ノード削除部５１０は、取得されたパケットがトランザクションの最後のパケットである場合、トランザクションに対応するノードをリストから削除する。
【００４６】
以上を踏まえて、図を用いて取得部５０３〜ノード削除部５１０に関して詳細に説明する。
【００４７】
図６は、トランザクションＡに対応するノードが生成される例を示す説明図である。図６では、ＳＯＦが送信元デバイス１０１から送信され、つぎに、トランザクションＡのパケットが送信されると、ＣＰＵ４０１が、具体的には、たとえば、トランザクションＡのパケットを取得する。リスト６００が空であるため、ＣＰＵ４０１がトランザクションＡに対応するノード６０１を生成し、ノード６０１をリスト６００へ挿入する。リスト６００には、トランザクションＡに対応するノード６０１のみが含まれている。
【００４８】
ここで、リスト６００はリスト構造であり、パケットの送信順序を示す情報である。各ノードは次ノードのフィールド６０４とトランザクションＩＤのフィールド６０５とを含んでいる。各ノードが示すトランザクションＩＤのフィールド６０５にはトランザクションＩＤが保持されている。トランザクションＩＤのフィールド６０５に保持されているトランザクションＩＤ（以下、「トランザクションＩＤのフィールド６０５のトランザクションＩＤ」と称する。）により各ノードがどのトランザクションに対応するノードであるかが判別される。
【００４９】
なお、図６ではトランザクションＡを単にＡと記載する。リスト６００ではノード６０１の次ノードのフィールド６０４はノード６０１であるため、指定順序通りにパケットが送信されるとトランザクションＡのパケットのつぎにはトランザクションＡのパケットが送信される。ここで、ＣＰＵ４０１が、たとえば、リスト６００内において現ノードをノード６０１に設定する。
【００５０】
図７は、トランザクションＢに対応するノードが生成される例を示す説明図である。図７では、トランザクションＢのパケットが送信元デバイス１０１から送信されると、ＣＰＵ４０１が、トランザクションＢのパケットを取得し、リスト６００からトランザクションＢに対応するノードがあるか否かを判断する。リスト６００内にはトランザクションＡに対応するノード６０１しか含まれていないため、トランザクションＢに対応するノードがないと判断される。
【００５１】
そして、ＣＰＵ４０１が、具体的には、たとえば、トランザクションＢに対応するノード６０２を生成する。ＣＰＵ４０１が、リスト６００内に現ノードの次ノードのフィールド６０４に生成したノード６０２を挿入する。リスト７００には現ノードであるノード６０１のつぎにノード６０２が挿入されている。リスト７００ではノード６０１の次ノードのフィールド６０４はノード６０２であるため、指定順序通りにパケットが送信されるとトランザクションＡのパケットのつぎにはトランザクションＢのパケットが送信される。そして、リスト７００ではノード６０２の次ノードのフィールド６０４はノード６０１であるため、指定順序通りにパケットが送信されるとトランザクションＢのパケットのつぎにはトランザクションＡのパケットが送信される。
【００５２】
そして、ＣＰＵ４０１が、具体的には、たとえば、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得したパケットのトランザクションＩＤとが同一であるか否かを判断する。まず、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得されたパケットのトランザクションＩＤが同一であると判断された場合、指定順序でパケットが送信されたと判断される。一方、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得されたパケットのトランザクションが同一でないと判断された場合、指定順序と異なる順序でパケットが送信されたと判断される。
【００５３】
ここで、現ノードはノード６０１であり、現ノードの次ノードのフィールド６０４はノード６０２であり、ノード６０２が示すトランザクションＩＤのフィールド６０５のトランザクションＩＤはトランザクションＢである。よって、ＣＰＵ４０１は、たとえば、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得したパケットのトランザクションＩＤとが同一であると判断し、２番目に送信されたパケットは指定順序通りである判断する。つぎに、ＣＰＵ４０１が、リスト７００内で現ノードを現ノードの次ノードのフィールド６０４が示すノードに設定する。ここで、現ノードはノード６０２となる。
【００５４】
図８は、トランザクションＣに対応するノードが生成される例を示す説明図である。図８では、３番目にトランザクションＣのパケットが送信元デバイス１０１から送信されると、ＣＰＵ４０１が、トランザクションＣのパケットを取得し、リスト７００からトランザクションＣに対応するノードがあるか否かを判断する。なお、リスト７００にはトランザクションＣに対応するノードが含まれていない。
【００５５】
そして、ＣＰＵ４０１が、具体的には、たとえば、トランザクションＣに対応するノード６０３を生成する。つぎに、ＣＰＵ４０１が、たとえば、リスト７００内で現ノードの次ノードのフィールド６０４にノード６０３を挿入する。リスト８００には現ノードであるノード６０２のつぎにノード６０３が挿入されている。
【００５６】
リスト８００ではノード６０１の次ノードのフィールド６０４はノード６０２であるため、指定順序通りにパケットが送信されるとトランザクションＡのパケットのつぎにはトランザクションＢのパケットが送信される。そして、リスト８００ではノード６０２の次ノードのフィールド６０４はノード６０３であるため、指定順序通りにパケットが送信されるとトランザクションＢのパケットのつぎにはトランザクションＣのパケットが送信される。さらに、リスト８００ではノード６０３の次ノードのフィールド６０４はノード６０１であるため、指定順序通りにパケットが送信されるとトランザクションＣのパケットのつぎにはトランザクションＡのパケットが送信される。
【００５７】
そして、ＣＰＵ４０１が、具体的には、たとえば、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得したパケットのトランザクションＩＤとが同一であるか否かを判断する。ここで、現ノードはノード６０２であり、現ノードの次ノードのフィールド６０４はノード６０３である。よって、ノード６０３が示すトランザクションＩＤのフィールド６０５のトランザクションＩＤはトランザクションＣである。
【００５８】
ＣＰＵ４０１は、たとえば、現ノードの次ノードのフィールド６０４が示すトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得したパケットのトランザクションＩＤとが同一であると判断し、３番目に指定順序でパケットが送信されたと判断する。つぎに、ＣＰＵ４０１がリスト内で現ノードを現ノードの次ノードのフィールド６０４が示すノードに設定し、現ノードはノード６０３となる。
【００５９】
図９は、指定順序と異なる順序でパケットが送信された例を示す説明図である。図９では、４番目にトランザクションＢのパケットが送信元デバイス１０１から送信されると、ＣＰＵ４０１が、トランザクションＢのパケットを取得し、リスト８００からトランザクションＢに対応するノードがあるか否かを判断する。リスト８００内のノード６０２が示すトランザクションＩＤのフィールド６０５のトランザクションＩＤがトランザクションＢであるため、ＣＰＵ４０１はトランザクションＢに対応するノードがあると判断する。
【００６０】
そして、ＣＰＵ４０１が、具体的には、たとえば、現ノードの次ノードのフィールド６０４が示すトランザクションＩＤのフィールド６０５と取得したパケットのトランザクションＩＤとが同一であるか否かを判断する。現ノードはノード６０３であり、現ノードの次ノードのフィールド６０４はノード６０１である。よって、ノード６０１が示すトランザクションＩＤのフィールド６０５はトランザクションＡであり、ＣＰＵ４０１は取得したパケットのトランザクションＩＤと同一でないと判断し、取得したパケットを指定順序と異なる順序で送信されたパケットとして検出する。
【００６１】
現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤによりスキップされたパケットのトランザクションＩＤが特定される。よって、トランザクションＡのパケットがスキップされたパケットであり、ＣＰＵ４０１が、上記式（３）のｓｋｉｐ＿ｏｋ（Ａ）を算出する。まず、ＣＰＵ４０１が、たとえば、上記式（２）のｂｕｉｌｔ＿ｉｎ（Ａ）を算出する。（Ｔｒｅｍａｉｎ−Ｔｍａｒｇｉｎ）はＴｓｅｎｄ（Ａ）よりも大きいため、ｂｕｉｌｔ＿ｉｎ（Ａ）は０（偽）である。
【００６２】
つぎに、ＣＰＵ４０１が、ｐｌｕｇｉｎ＿１（Ａ）を算出する。ＣＰＵ４０１が、具体的には、たとえば、送信元デバイス１０１にアクセスしてトランザクションＡのパケットが送信準備中であるか否かに関する情報を取得する。ここで、取得された送信準備中であるか否かに関する情報が送信準備中であることを示していることとする。よって、ＣＰＵ４０１が上記式（３）のｐｌｕｇｉｎ＿１（Ａ）を１とし、上記式（３）のｓｋｉｐ＿ｏｋ（Ａ）が１（真）となる。ＣＰＵ４０１は、４番目の送信においてトランザクションＡのパケットがスキップされていることは許可されていると判断する。
【００６３】
そして、ＣＰＵ４０１が、たとえば、トランザクションＡのパケットが４番目に許可されてスキップされたことを示す情報を出力する。出力形式としては、たとえば、ディスプレイ４０８への表示、プリンタ４１３への印刷出力、Ｉ／Ｆ４０９による外部装置への送信がある。また、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶することとしてもよい。
【００６４】
つぎに、ＣＰＵ４０１が、リスト８００内で現ノードを現ノードの次ノードのフィールド６０４が示すノードに設定する。ここで、現ノードはノード６０１となる。さらに、ＣＰＵ４０１が、たとえば、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５のトランザクションＩＤと取得したパケットのトランザクションＩＤとが同一であるか否かを判断する。ここで、複数のパケットがスキップされる場合があるため、現ノードの次ノードのフィールド６０４が示すノードのトランザクションＩＤのフィールド６０５と取得したパケットのトランザクションＩＤとが同一であると判断されるまで処理を繰り返す。
【００６５】
そして、現ノードの次ノードのフィールド６０４はノード６０２であり、ノード６０２が示すトランザクションはトランザクションＢである。よって、ＣＰＵ４０１は取得したパケットのトランザクションＩＤと同一であると判断する。同一であると判断されると、ＣＰＵ４０１がリスト８００内で現ノードを現ノードの次ノードのフィールド６０４が示すノードに設定し、現ノードはノード６０２となる。
【００６６】
以上の処理により、リスト８００を用いて指定順序通りに送信されたか否かを判断することができる。つぎに、送信されたパケットがトランザクションの最後のパケットの場合について説明する。
【００６７】
図１０は、ノードが削除される例を示す説明図である。ＣＰＵ４０１は、たとえば、取得されたパケットが指定順序通りに送信されたパケットであるか否かを判断した後、つづいて取得されたパケットがトランザクションの最後のパケットであるか否かを判断する。ここで、本実施の形態では、Ｍ番目に送信されたトランザクションＣのパケットをトランザクションＣにおける最後のパケットとする。なお、周知のようにパケットにはトランザクションの最後のパケットであるか否かに関するフラグが付されている。
【００６８】
ＣＰＵ４０１は、たとえば、取得されたパケットがトランザクションＣの最後のパケットであると判断する。ここで、現ノードはノード６０２であり、トランザクションＣに対応するノードはノード６０３である。まず、ＣＰＵ４０１が、たとえば、ノード６０２の次ノードのフィールド６０４をノード６０３の次ノードのフィールド６０４であるノード６０１に設定し、ノード６０３を削除する。削除結果は、リスト７００と同一である。そして、ＣＰＵ４０１は、たとえば、現ノードをノード６０２のままとし、Ｍ＋１番目に送信されたパケットを取得する。
【００６９】
そして、１フレームの終了を示すＥＯＦ（Ｅｎｄ  Ｏｆ  Ｆｒａｍｅ）が送信元デバイス１０１から送信されるまで監視装置１００は送信元デバイス１０１から送信されるパケットを監視する。つぎに、上述した受付部５０１と条件式生成部５０２の具体的な処理について図１１を用いて説明する。
【００７０】
図１１は、制約の条件式が生成される例を示す説明図である。ここでは、送信元デバイス１０１に関する設計仕様に基づく制約がｐｌｕｇｉｎ＿１〜ｐｌｕｇｉｎ＿３である。入力画面１１００ではｐｌｕｇｉｎ＿１〜ｐｌｕｇｉｎ＿３のそれぞれにチェックボックスが備えられ、利用者がチェックボックスにチェックを入れることで設計仕様に基づく制約が選択される。入力画面１１００ではｐｌｕｇｉｎ＿１とｐｌｕｇｉｎ＿３が選択されている。
【００７１】
そして、利用者が入力ボタンを押すことにより設計仕様に基づく複数の制約のうち選択された制約が入力され、ＣＰＵ４０１が選択された制約の入力を受け付ける。ＣＰＵ４０１は、たとえば、通信プロトコルに基づく制約であるｂｕｉｌｔ＿ｉｎとｐｌｕｇｉｎ＿１とｐｌｕｇｉｎ＿３とを∨で接続することにより制約に関する条件式を生成する。このように、利用者があらかじめｐｌｕｇｉｎを複数用意しておけば、送信元デバイス１０１に関する設計仕様に沿ってｐｌｕｇｉｎを選択することができる。
【００７２】
（監視装置１００による監視処理手順）
図１２および図１３は、監視装置１００による監視処理手順の一例を示すフローチャートである。図１２および図１３で示すフローチャートでは１フレーム中の処理例を示す。まず、監視装置１００が、設計仕様に基づく複数の制約から選択された制約の入力を受け付け（ステップＳ１２０１）、通信プロトコルに基づく制約と受け付けた制約に基づいて条件式を生成する（ステップＳ１２０２）。そして、監視装置１００が、ＳＯＦを取得したか否かを判断し（ステップＳ１２０３）、ＳＯＦを取得していないと判断した場合（ステップＳ１２０３：Ｎｏ）、ステップＳ１２０３へ戻る。
【００７３】
一方、監視装置１００が、ＳＯＦを取得したと判断した場合（ステップＳ１２０３：Ｙｅｓ）、Ｔｒｅｍａｉｎ＝０であるか否かを判断する（ステップＳ１２０４）。監視装置１００が、Ｔｒｅｍａｉｎ＝０であると判断した場合（ステップＳ１２０４：Ｙｅｓ）、ステップＳ１２０３へ戻る。一方、監視装置１００が、Ｔｒｅｍａｉｎ＝０でないと判断した場合（ステップＳ１２０４：Ｎｏ）、パケットを取得したか否かを判断する（ステップＳ１２０５）。監視装置１００が、パケットを取得していないと判断した場合（ステップＳ１２０５：Ｎｏ）、ステップＳ１２０４へ戻る。一方、監視装置１００が、パケットを取得したと判断した場合（ステップＳ１２０５：Ｙｅｓ）、取得したパケットのトランザクションＩＤを特定し（ステップＳ１２０６）、特定したトランザクションＩＤに対応するノードが指定順序を示すリストにあるか否かを判断する（ステップＳ１２０７）。
【００７４】
そして、監視装置１００が、特定したトランザクションＩＤに対応するノードがリストにないと判断された場合（ステップＳ１２０７：Ｎｏ）、特定したトランザクションＩＤに対応するノードを生成する（ステップＳ１２０８）。つぎに、監視装置１００が、現ノードの次ノードへ生成したノードを挿入し（ステップＳ１２０９）、ステップＳ１２１０へ移行する。
【００７５】
一方、監視装置１００が、特定したトランザクションＩＤに対応するノードがリストにあると判断した場合（ステップＳ１２０７：Ｙｅｓ）、現ノードの次ノードが示すトランザクションＩＤ＝特定したトランザクションＩＤであるかを判断する（ステップＳ１２１０）。監視装置１００が、現ノードの次ノードが示すトランザクションＩＤ＝特定したトランザクションＩＤでないと判断した場合（ステップＳ１２１０：Ｎｏ）、取得したパケットを指定順序と異なる順序のパケットとして検出する（ステップＳ１２１１）。
【００７６】
そして、監視装置１００が、ｓｋｉｐ＿ｏｋ（現ノードの次ノードが示すトランザクションＩＤのパケット）を算出し（ステップＳ１２１２）、ｓｋｉｐ＿ｏｋ（現ノードの次ノードが示すトランザクションＩＤのパケット）＝１であるかを判断する（ステップＳ１２１３）。ここで、現ノードの次ノードが示すトランザクションＩＤのパケットとは、スキップされたパケットである。
【００７７】
監視装置１００が、ｓｋｉｐ＿ｏｋ（現ノードの次ノードが示すトランザクションＩＤのパケット）＝１でないと判断した場合（ステップＳ１２１３：Ｎｏ）、エラーを出力し（ステップＳ１２１４）、ステップＳ１２１５へ移行する。一方、監視装置１００が、ｓｋｉｐ＿ｏｋ（現ノードの次ノードが示すトランザクションＩＤのパケット）＝１であると判断した場合（ステップＳ１２１３：Ｙｅｓ）、現ノード＝現ノードの次ノードとし（ステップＳ１２１５）、ステップＳ１２１０へ戻る。
【００７８】
一方、監視装置１００が、現ノードの次ノードが示すトランザクションＩＤ＝特定したトランザクションＩＤであると判断した場合（ステップＳ１２１０：Ｙｅｓ）、取得したパケットがトランザクションの最後のパケットであるか否かを判断する（ステップＳ１２１６）。そして、監視装置１００が、取得したパケットがトランザクションの最後のパケットであると判断した場合（ステップＳ１２１６：Ｙｅｓ）、特定したトランザクションＩＤに対応するノードをリストから削除し（ステップＳ１２１７）、ステップＳ１２０４へ移行する。
【００７９】
そして、監視装置１００が、取得したパケットがトランザクションの最後のパケットでないと判断した場合（ステップＳ１２１６：Ｎｏ）、現ノード＝現ノードの次ノードとし（ステップＳ１２１８）、ステップＳ１２０４へ移行する。また、本実施の形態では、監視装置１００が指定順序を示すリストを生成しているが、送信元デバイス１０１が指定順序を示すリストについて生成している場合には監視装置１００は該リストを流用してもよい。
【００８０】
以上説明したように、監視プログラム、監視装置、および監視方法によれば、指定順序と異なる順序で送信されたパケットを検出し、異なる順序が指定制約により許可されているか否かを判断する。これにより、送信元デバイスの動作により発生したエラーのうち、実はエラーではなかった処理の正当性が証明されるため、フォルスエラーの顕在化により検証作業の効率化を図ることができる。
【００８１】
また、指定制約が通信プロトコルに基づく制約であって、送信元デバイスの動作により発生したエラーのうち、通信プロトコルを遵守している場合のフォルスエラーが顕在化されるため、検証作業の効率化を図ることができる。
【００８２】
また、指定制約が通信プロトコルに基づく制約および送信先デバイスに関する設計仕様に基づく制約であって、送信元デバイスの動作により発生したエラーのうち、通信プロトコルまたは設計仕様のいずれかを遵守している場合のフォルスエラーが顕在化される。これにより、検証作業の効率化を図ることができる。
【００８３】
また、利用者に検証したい制約を選択させ、選択された制約および通信プロトコルに基づく制約を指定制約として制約に関する条件式を生成する。したがって、送信元デバイスに関する設計仕様が変更されても、制約の選択のみで送信元デバイスの設計仕様に応じて制約を追加したり付け替えたりすることができ、検証の自由度を向上させることができる。
【００８４】
なお、本実施の形態で説明した監視方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本監視プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本監視プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００８５】
１００  監視装置
５０１  受付部
５０２  条件式生成部
５０７  検出部
５０８  許可判断部
５０９  出力部
【図１】
0005471581.tif 000002
【図２】
0005471581.tif 000003
【図３】
0005471581.tif 000004
【図４】
0005471581.tif 000005
【図５】
0005471581.tif 000006
【図６】
0005471581.tif 000007
【図７】
0005471581.tif 000008
【図８】
0005471581.tif 000009
【図９】
0005471581.tif 000010
【図１０】
0005471581.tif 000011
【図１１】
0005471581.tif 000012
【図１２】
0005471581.tif 000013
【図１３】
0005471581.tif 000014