(57)【要約】【課題】ソフトウェアまたはハードウェアにかかる検証の網羅性を向上させること。【解決手段】本手法では、まず、検証対象のシナリオ群を表現する構造体１００の中から障害ノードを指定する。このあと、本手法では、構造体１００の中から、指定された障害ノードＮｆの類似ノードＮｅを検出する。そして、本手法では、構造体１００の開始ノードＮａから、検出された類似ノードＮｅを経由する構造体１００上の経路Ｐを探索することにより、類似ノードＮｅでの障害発生を検証するためのシナリオを作成する。【選択図】図１
2011118757.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
検証対象の動作を実現するシーケンスをノードとして階層化することにより、前記検証対象の動作を検証するシナリオ群を表現する構造体の中から、障害が発生したシーケンスを表す障害ノードに類似する類似ノードを検出する検出手順と、
前記構造体の開始ノードから前記検出手順によって検出された類似ノードに辿り着くまでの経路上のノード群が表す一連のシーケンスを作成する作成手順と、
前記作成手順によって作成された一連のシーケンスを出力する出力手順と、
を実行させることを特徴とする検証支援プログラム。
【請求項２】
前記検出手順は、
前記障害ノードと同一シーケンスを表すノードを前記類似ノードとして検出することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記検出手順は、
前記シーケンスの実行主体となる要素群のうち障害が発生した処理の実行主体となる要素と同一の要素を含み、かつ、当該要素が実行するシーケンスの実行順序と同一の実行順序で当該シーケンスを実行する要素を含むノードを前記類似ノードとして検出することを特徴とする請求項１または２に記載の検証支援プログラム。
【請求項４】
前記検出手順は、
前記シーケンスを実行する要素群のうち、前記障害が発生した処理の実行主体となる要素と同一の要素を含むノードを前記類似ノードとして検出することを特徴とする請求項１〜３のいずれか一つに記載の検証支援プログラム。
【請求項５】
前記作成手順は、
前記障害ノードと類似する複数の類似ノードが検出された場合、前記障害ノードと前記類似ノードとの類似度が高い順に、前記開始ノードから前記類似ノードに辿り着くまでの経路上のノード群が表す一連のシーケンスを作成することを特徴とする請求項２〜４のいずれか一つに記載の検証支援プログラム。
【請求項６】
検証対象の動作を実現するシーケンスをノードとして階層化することにより、前記検証対象の動作を検証するシナリオ群を表現する構造体の中から、障害が発生したシーケンスを表す障害ノードに類似する類似ノードを検出する検出手段と、
前記構造体の開始ノードから前記検出手段によって検出された類似ノードに辿り着くまでの経路上のノード群が表す一連のシーケンスを作成する作成手段と、
前記作成手段によって作成された一連のシーケンスを出力する出力手段と、
を備えることを特徴とする検証支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアまたはハードウェアにかかる検証を支援する検証支援プログラム、および検証支援装置に関する。
【背景技術】
【０００２】
近年、ソフトウェアやハードウェアのシステム開発において、設計技術の進歩によりシステムが大規模化、複雑化している。一方で、システムの大規模化、複雑化により、開発期間全体における検証工程の占める割合が増加する傾向にある。検証工程では、システムが正しく動作しているか否かの検証がおこなわれる（たとえば、下記特許文献１〜３参照。）。
【０００３】
具体的には、たとえば、検証工程では、検証対象にシナリオという形でテストパターンを与えて、その振る舞いをチェックして正しい動作をしているか否かを検証する。この際、あるシーケンスで障害が検出されると、その障害に関連する障害を潰し込むために、そのシーケンスと同一または類似する類似シーケンスを含むシナリオを選択して試験する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２２０３５６号公報
【特許文献２】特開平１１−３９１７９号公報
【特許文献３】特開２００７−５２７０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術によれば、類似シーケンスを含むシナリオを導出する基準や手段が明確ではないため、関連障害の発生を検証するために必要となるシナリオを適切に選び出すことが難しいという問題がある。この結果、関連障害の潰し込みが不十分となり、検証品質の低下を招くという問題がある。
【０００６】
本発明は、上述した従来技術による問題点を解消するため、ソフトウェアまたはハードウェアにかかる検証の網羅性を向上させることができる検証支援プログラム、および検証支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、開示の検証支援プログラム、および検証支援装置は、検証対象の動作を実現するシーケンスをノードとして階層化することにより、前記検証対象の動作を検証するシナリオ群を表現する構造体の中から、障害が発生したシーケンスを表す障害ノードに類似する類似ノードを検出し、前記構造体の開始ノードから検出された類似ノードに辿り着くまでの経路上のノード群が表す一連のシーケンスを作成し、作成された一連のシーケンスを出力することを要件とする。
【発明の効果】
【０００８】
本検証支援プログラム、および検証支援装置によれば、ソフトウェアまたはハードウェアにかかる検証の網羅性を向上させることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】本検証支援手法の概要の一例を示す説明図である。
【図２】シナリオ群（ｈＭＳＣ）のデータ構造の一例を示す説明図である。
【図３】ノード（ｂＭＳＣ）のデータ構造の一例を示す説明図である。
【図４】検証支援装置のハードウェア構成を示すブロック図である。
【図５】検証支援装置の機能的構成を示すブロック図である。
【図６−１】指定画面の一例を示す説明図（その１）である。
【図６−２】指定画面の一例を示す説明図（その２）である。
【図７】類似ノードテーブルの記憶内容の一例を示す説明図である。
【図８−１】類似ノードの検出例を示す説明図（その１）である。
【図８−２】類似ノードの検出例を示す説明図（その２）である。
【図８−３】類似ノードの検出例を示す説明図（その３）である。
【図９】類似ノードテーブルの設定例を示す説明図である。
【図１０】シナリオの作成例を示す説明図である。
【図１１】シナリオＤＢの記憶内容の一例を示す説明図である。
【図１２】シナリオの具体例を示す説明図である。
【図１３】検証支援装置の検証支援処理手順の一例を示すフローチャートである。
【図１４】類似ノード検出処理の具体的処理手順の一例を示すフローチャートである。
【図１５】シナリオ作成処理の具体的処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、この発明にかかる検証支援プログラム、および検証支援装置の好適な実施の形態を詳細に説明する。
【００１１】
（本検証支援手法の概要）
まず、本実施の形態にかかる検証支援手法の概要について説明する。図１は、本検証支援手法の概要の一例を示す説明図である。本手法では、検証対象となるソフトウェアやハードウェアの動作を検証するためのシナリオ群を、検証対象の動作を実現するための各シーケンスをノードとして階層化された構造体で表現する。
【００１２】
ここで、シーケンスとは、オブジェクト（または、インスタンス）間で送受信されるイベント（または、メッセージ）を時系列で表現する処理手順である。また、オブジェクト（または、インスタンス）とは、検証対象に含まれるブロックまたは検証対象と干渉する外部環境である。なお、構造体およびシーケンスの詳細な説明は、図２および図３を用いて後述する。
【００１３】
図１において、本手法では、検証対象のシナリオ群を表現する構造体１００の中から、障害が発生しているノード（以下、「障害ノード」という）を指定する（図１中（１））。たとえば、本手法では、障害ノードの指定画面（図６−１参照）において、構造体１００の中から障害ノードＮｆをユーザの操作入力によって指定する。
【００１４】
本手法では、構造体１００の中から、指定された障害ノードＮｆに類似するノード（以下、「類似ノード」という）を検出する（図１中（２））。類似ノードは、たとえば、障害ノードが表すシーケンスの内容に基づいて、構造体１００の中から自動検出される。ここでは、一例としてノードＮｅが類似ノードとして検出されている。
【００１５】
本手法では、構造体１００の開始ノードＮａから検出された類似ノードＮｅに辿り着くまでの経路Ｐ上のノード群Ｎａ，Ｎｃ，Ｎｄ，Ｎｅが表す一連のシーケンスを含むシナリオを作成する（図１中（３））。ここでは、『ノードＮａ→ノードＮｃ→ノードＮｄ→ノードＮｅ』の順に各ノードが表すシーケンスを実行するシナリオが作成される。
【００１６】
このシナリオは、類似ノードＮｅでの障害発生を検証するためのシナリオ、すなわち、障害ノードＮｆで発生した障害の関連障害を潰し込むためのシナリオとなる。これにより、本手法によれば、検証対象において発生した一の障害に関連する他の障害の発生を検証するためのシナリオを自動作成することができる。この結果、検証対象にかかる検証の網羅性を向上させて、検証品質を向上させることができる。
【００１７】
（シナリオ群のデータ構造）
つぎに、検証対象の動作を検証するためのシナリオ群のデータ構造について説明する。ここでは、ｈＭＳＣ（Ｈｉｇｈ  Ｌｅｖｅｌ  Ｍｅｓｓａｇｅ  Ｓｅｑｕｅｎｃｅ  Ｃｈａｒｔ）により記述されたシナリオ群を、ＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）を用いて表現する。ｈＭＳＣとは、シーケンス（図）を表すｂＭＳＣ（ｂａｓｉｃ  ＭＳＣ）を要素とする図表であり、上述した構造体を表現する一手法である。
【００１８】
図２は、シナリオ群（ｈＭＳＣ）のデータ構造の一例を示す説明図である。図２において、構造体２００は、検証対象の動作を検証するためのシナリオ群を表現する有向グラフである。具体的には、構造体２００は、検証対象の動作を実現するための各シーケンスをノードＮ０〜Ｎ７として有向グラフ化したものである。
【００１９】
この構造体２００は、ＸＭＬを用いてｈＭＳＣ情報２１０として記述される。ｈＭＳＣ情報２１０には、構造体２００に含まれるノード群（ＸＭＬ記述２１１）と、各ノード間の接続関係（ＸＭＬ記述２１２）が定義されている。ただし、図２中●は、開始点（ｉｎｉｔ）を表している。したがって、構造体２００において、開始点●に直接接続されたノードＮ０が開始ノードとなる。
【００２０】
ここで、ノードＮ３を例に挙げて、ｈＭＳＣの要素となる各シーケンスを表すノードのデータ構造について説明する。図３は、ノード（ｂＭＳＣ）のデータ構造の一例を示す説明図である。図３において、シーケンスＳｑ３は、ノードＮ３が表す検証対象の動作を実現する処理手順である。
【００２１】
このシーケンスＳｑ３は、ＸＭＬを用いてｂＭＳＣ情報３１０として記述される。ｂＭＳＣ情報３１０には、シーケンスＳｑ３に含まれるインスタンス群（ＸＭＬ記述３１１）と、各インスタンス間で送受信されるメッセージ（ＸＭＬ記述３１２）が定義されている。また、ＸＭＬ記述３１２には、各インスタンスの時間軸上でのメッセージの順序が記述されている（符号３１３）。
【００２２】
具体的には、メッセージＥ１は、インスタンスＡが最初に行うイベント（送信）であって、かつ、インスタンスＸ０が最初に行うイベント（受信）である。また、メッセージＥ０は、インスタンスＸ０が２番目に行うイベント（送信）であって、かつ、インスタンスＢが最初に行うイベント（受信）である。また、メッセージＥ２は、インスタンスＸ０が３番目に行うイベント（送信）であって、かつ、インスタンスＡが２番目に行うイベント（受信）である。
【００２３】
このように、検証対象のシナリオ群は、図２に示すｈＭＳＣ情報２１０と、ｈＭＳＣ情報２１０に定義されている各ノードＮ０〜Ｎ７のｂＭＳＣ情報（たとえば、ｂＭＳＣ情報３１０）の集合によって表現される。
【００２４】
なお、ｈＭＳＣについての詳細な説明は、たとえば、非特許文献『Ｄｏｒｏｎ  Ｐｅｌｅｄ“Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ａｎｄ  Ｖｅｒｉｆｉｃａｔｉｏｎ  ｕｓｉｎｇ  Ｍｅｓｓａｇｅ  Ｓｅｑｕｅｎｃｅ  Ｃｈａｒｔｓ”Ｅｌｅｃｔｒｏｎｉｃ  Ｎｏｔｅｓ  ｉｎ  Ｔｈｅｏｒｅｔｉｃａｌ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ６５  Ｎｏ．７  ２００２』を参照できる。
【００２５】
（検証支援装置のハードウェア構成）
つぎに、本実施の形態にかかる検証支援装置のハードウェア構成の一例について説明する。図４は、検証支援装置のハードウェア構成を示すブロック図である。図４において、検証支援装置４００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）４０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０３と、磁気ディスクドライブ４０４と、磁気ディスク４０５と、光ディスクドライブ４０６と、光ディスク４０７と、ディスプレイ４０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０９と、キーボード４１０と、マウス４１１と、スキャナ４１２と、プリンタ４１３と、を備えている。また、各構成部はバス４２０によってそれぞれ接続されている。
【００２６】
ここで、ＣＰＵ４０１は、検証支援装置４００の全体の制御を司る。ＲＯＭ４０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ４０３は、ＣＰＵ４０１のワークエリアとして使用される。磁気ディスクドライブ４０４は、ＣＰＵ４０１の制御にしたがって磁気ディスク４０５に対するデータのリード／ライトを制御する。磁気ディスク４０５は、磁気ディスクドライブ４０４の制御で書き込まれたデータを記憶する。
【００２７】
光ディスクドライブ４０６は、ＣＰＵ４０１の制御にしたがって光ディスク４０７に対するデータのリード／ライトを制御する。光ディスク４０７は、光ディスクドライブ４０６の制御で書き込まれたデータを記憶したり、光ディスク４０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２８】
ディスプレイ４０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ４０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２９】
Ｉ／Ｆ４０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク４１４に接続され、このネットワーク４１４を介して他の装置に接続される。そして、Ｉ／Ｆ４０９は、ネットワーク４１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ４０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３０】
キーボード４１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス４１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３１】
スキャナ４１２は、画像を光学的に読み取り、検証支援装置４００内に画像データを取り込む。なお、スキャナ４１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ４１３は、画像データや文書データを印刷する。プリンタ４１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３２】
（検証支援装置の機能的構成）
つぎに、検証支援装置４００の機能的構成について説明する。図５は、検証支援装置の機能的構成を示すブロック図である。図５において、検証支援装置４００は、入力部５０１と、検出部５０２と、作成部５０３と、出力部５０４と、を含む構成である。各機能部（入力部５０１〜出力部５０４）は、具体的には、たとえば、図４に示したＲＯＭ４０２、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶されたプログラムをＣＰＵ４０１に実行させることにより、または、Ｉ／Ｆ４０９により、その機能を実現する。
【００３３】
まず、入力部５０１は、検証対象の動作を検証するためのシナリオ群の入力を受け付ける機能を有する。具体的には、たとえば、入力部５０１が、図４に示したキーボード４１０やマウス４１１を用いたユーザの操作入力により、図２および図３に示したｈＭＳＣ情報２１０およびｂＭＳＣ情報３１０を受け付ける。なお、入力された入力結果は、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置に記憶される。
【００３４】
また、入力部５０１は、検証対象の動作を検証するシナリオ群を表現する構造体の中から、障害が発生したシーケンスを表す障害ノードの指定を受け付ける機能を有する。具体的には、たとえば、入力部５０１が、図６に示す指定画面６１０，６２０において、キーボード４１０やマウス４１１を用いたユーザの操作入力により、障害ノードの指定を受け付けることにしてもよい。
【００３５】
ここで、障害ノードの指定画面について説明する。図６−１および図６−２は、指定画面の一例を示す説明図である。図６−１および図６−２において、障害ノードを指定するための指定画面６１０，６２０がディスプレイ４０８（図４参照）に表示されている。
【００３６】
指定画面６１０において、ユーザが、カーソルＣを移動させて、障害による修正対象となったメッセージＥ０をクリックすることで、構造体２００の中から障害ノードＮ３を指定することができる。なお、各ノードＮ０〜Ｎ７が表すシーケンスの内容は、たとえば、カーソルＣを移動させて各ノードＮ０〜Ｎ７に合わせると拡大表示される。
【００３７】
また、指定画面６２０において、ユーザが、ボックスＢ１に障害ノードのノード名を入力するとともに、ボックスＢ２に障害による修正対象となったイベントのメッセージ名を入力することで、構造体２００の中から障害ノードＮ３を指定することができる。
【００３８】
なお、ここでは指定画面６１０，６２０において障害ノードを指定することにしたが、これに限らない。たとえば、入力部５０１が、障害ノードを特定するための障害情報の入力を受け付けることにしてもよい。指定された指定結果は、たとえば、図７に示す類似ノードテーブル７００に記憶される。
【００３９】
なお、以下の説明では、構造体に含まれるノード群を「ノード群Ｎ１〜Ｎｎ」と表記し、ノード群Ｎ１〜Ｎｎのうち任意のノードを「ノードＮｉ」と表記する（ｉ＝０，１，…，ｎ）。また、特に指定する場合を除いて、構造体の中から指定された障害ノードを「障害ノードＴｇＮ」と表記する。
【００４０】
図７は、類似ノードテーブルの記憶内容の一例を示す説明図である。図７において、類似ノードテーブル７００は、障害ノードＩＤ、第１類似ノードＩＤ、第２類似ノードＩＤおよび第３類似ノードＩＤの項目を有する。各項目に情報を設定することで、障害ノードＴｇＮごとの類似ノード情報（たとえば、類似ノード情報７００−１）がレコードとして記憶されている。
【００４１】
ここで、障害ノードＩＤとは、ノード群Ｎ１〜Ｎｎのうち障害ノードＴｇＮを識別する識別子である。第１類似ノードＩＤとは、障害ノードＴｇＮと類似する第１類似ノードを識別する識別子である。第２類似ノードＩＤとは、障害ノードＴｇＮと類似する第２類似ノードを識別する識別子である。第３類似ノードＩＤとは、障害ノードＴｇＮと類似する第３類似ノードを識別する識別子である。
【００４２】
第１、第２および第３類似ノードは、障害ノードＴｇＮとの類似度Ｂ１〜Ｂ３に応じて分類された類似ノードである。障害ノードＴｇＮと各第１、第２および第３類似ノードとの類似度Ｂ１〜Ｂ３の大きさは『Ｂ１＞Ｂ２＞Ｂ３』となる。ただし、類似度Ｂ１〜Ｂ３の値が大きいほど、障害ノードＴｇＮと類似していることを表している。
【００４３】
たとえば、障害ノードＮ３が指定されると、類似ノードテーブル７００内の障害ノードＩＤ項目に「Ｎ３」が設定されて、類似ノード情報７００−１が新たなレコードとして記憶される。なお、この類似ノードテーブル７００は、たとえば、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶装置によって実現される。
【００４４】
図５の説明に戻り、検出部５０２は、検証対象のシナリオ群を表現する構造体の中から、障害ノードＴｇＮに類似する類似ノードを検出する機能を有する。ここで、類似ノードとは、たとえば、障害ノードＴｇＮが表すシーケンスに類似する類似シーケンスを表すノードＮｉである。また、類似シーケンスとは、たとえば、オブジェクト（または、インスタンス）、イベント（または、メッセージ）、イベントの実行順序の少なくともいずれかが、障害ノードＴｇＮが表すシーケンスと一致するノードＮｉである。
【００４５】
また、類似度ノードは、障害ノードＴｇＮとの類似性を表す類似度に応じて複数種類に分類することができる。具体的には、たとえば、検出部５０２が、障害ノードＴｇＮとの類似度Ｂ１〜Ｂ３に応じて、構造体の中から３種類の第１、第２および第３類似ノードを検出することにしてもよい。なお、検出処理の具体的な処理内容については、図８−１〜図８−３を用いて後述する。
【００４６】
作成部５０３は、構造体の開始ノードから、検出された類似ノードに辿り着くまでの経路上のノード群が表す一連のシーケンスを含むシナリオを作成する機能を有する。具体的には、たとえば、まず、作成部５０３が、構造体の開始ノードから幅優先探索を行って、構造体の各ノードＮｉの開始ノードからの深さｄｉを求める。ここで、深さｄｉは、開始ノードからノードＮｉに辿り着くまでの最短経路上に含まれるノード数によって表現される。
【００４７】
このあと、作成部５０３が、深さｄｉが小さくなるように、類似ノードから開始ノードに辿り着くまでの経路を探索する。そして、作成部５０３が、探索された経路上に含まれるノード群Ｎｐ〜Ｎｑを逆順に並べたノード群Ｎｑ〜Ｎｐが表す一連のシーケンスを、関連障害を検証するためのシナリオとして作成する。
【００４８】
これにより、類似ノードが表すシーケンスの障害、すなわち、障害ノードＴｇＮで発生した障害の関連障害を検証するためのシナリオを作成することができる。なお、作成処理の具体的な処理内容については、図１０を用いて後述する。
【００４９】
出力部５０４は、作成されたシナリオを出力する機能を有する。具体的には、たとえば、出力部５０４が、ＸＭＬを用いて表現されたシナリオを出力することにしてもよい。この際、出力部５０４が、シナリオと、障害ノードＴｇＮとの類似性を表す類似度と関連付けて出力することにしてもよい。
【００５０】
なお、出力結果の具体例は、図１１を用いて後述する。また、出力形式としては、たとえば、ディスプレイ４０８への表示、プリンタ４１３への印刷出力、Ｉ／Ｆ４０９による外部装置への送信がある。また、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域に記憶することとしてもよい。
【００５１】
（検出部５０２の処理内容）
つぎに、上記検出部５０２の具体的な処理内容の一例について説明する。図８−１〜図８−３は、類似ノードの検出例を示す説明図である。ここでは、検出部５０２が、障害ノードＴｇＮとの類似度Ｂ１〜Ｂ３に応じて、第１〜第３類似ノードを検出する場合について説明する（ただし、Ｂ１＞Ｂ２＞Ｂ３）。
【００５２】
また、ここでは障害ノードＴｇＮをノードＮ３とし、ノードＮ３を類似ノードの検出対象から除外する。なお、各類似度Ｂ１〜Ｂ３は、たとえば、障害ノードＴｇＮと類似しているとみなす類似条件（図８−１〜図８−３参照）に応じて設定される。
【００５３】
＜第１類似ノード＞
まず、類似度Ｂ１の第１類似ノードの検出例について説明する。検出部５０２は、障害ノードＴｇＮと同一シーケンス（ＭＳＣ）を表すノードＮｉを第１類似ノードとして検出する。具体的には、たとえば、図８−１において、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、障害ノードＮ３のｂＭＳＣ情報３１０に含まれるＸＭＬ記述３１１，３１２と一致するＸＭＬ記述を持つノードＮｉを検出する。
【００５４】
ここで、ＸＭＬ記述３１１は、障害ノードＮ３が表すシーケンスＳｑ３に含まれるインスタンス群を定義する記述である。ＸＭＬ記述３１２は、各インスタンス間で送受信されるメッセージを定義する記述である。
【００５５】
ここでは、ノードＮ４が表すシーケンスＳｑ４に含まれるインスタンスＡ，Ｘ０，ＢおよびメッセージＥ１，Ｅ２，Ｅ０が一致し、かつ、各メッセージＥ１，Ｅ２，Ｅ０のすべての属性値（ｆｒｏｍ、ｔｏ、ｆｒｏｍｓｅｑ、ｔｏｓｅｑ）が一致する。すなわち、ノードＮ４のｂＭＳＣ情報８１０は、ＸＭＬ記述３１１，３１２と一致するＸＭＬ記述８１１，８１２を持つ。
【００５６】
このため、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、ノードＮ４を第１類似ノードとして検出する。なお、検出された障害ノードＮ３の第１類似ノードは、たとえば、図７に示した類似ノードテーブル７００内の類似ノード情報７００−１に設定される。
【００５７】
図９は、類似ノードテーブルの設定例を示す説明図である。図９において、ノードＮ４が第１類似ノードとして検出された結果、類似ノードテーブル７００内の類似ノード情報７００−１の第１類似ノードＩＤ項目に「Ｎ４」が設定されている（図９中（９−１））。
【００５８】
＜第２類似ノード＞
つぎに、類似度Ｂ２の第２類似ノードの検出例について説明する。なお、以下の説明では、障害による修正対象となったメッセージを「メッセージＴｇＭ」と表記し、メッセージＴｇＭの実行主体となるインスタンスを「インスタンスＴｇＩ」と表記する。また、インスタンスＴｇＩのメッセージシーケンスを「メッセージシーケンスＴｇＭＳ」と表記する。なお、メッセージシーケンスとは、インスタンスが実行するイベント群の実行順序である。
【００５９】
検出部５０２は、まず、障害ノードＴｇＮのインスタンスＴｇＩと同一のインスタンスＴｇＩを含むノードＮｉを検出する。そして、検出部５０２は、ノードＮｉのインスタンスＴｇＩのメッセージシーケンスが、障害ノードＴｇＮのインスタンスＴｇＩのメッセージシーケンスＴｇＭＳと同一の場合、ノードＮｉを第２類似ノードとして検出する。
【００６０】
具体的には、たとえば、図８−２において、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、障害ノードＮ３のｂＭＳＣ情報３１０に含まれるＸＭＬ記述３１４と一致するＸＭＬ記述を持つノードＮｉを検出する。ここで、ＸＭＬ記述８２１は、障害が発生したメッセージＴｇＭの実行主体となるインスタンスＴｇＩを定義する記述である。ここでは、ノードＮ５のｂＭＳＣ情報８２０に含まれるＸＭＬ記述８２１が一致する。
【００６１】
このあと、検出部５０２が、インスタンスＴｇＩを「ｆｒｏｍ」または「ｔｏ」に持つメッセージの方向（ｆｒｏｍ／ｔｏ）と順番（ｆｒｏｍｓｅｑ／ｔｏｓｅｑ）が一致するＸＭＬ記述を検出する。すなわち、検出部５０２が、障害ノードＮ３のＸＭＬ記述３１２内の点線部分の記述が一致するＸＭＬ記述を持つノードＮｉを検出する。ここでは、ノードＮ５のＸＭＬ記述８２２内の点線部分の記述が一致する。
【００６２】
このため、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、ノードＮ５を第２類似ノードとして検出する。なお、検出された障害ノードＮ３の第２類似ノードは、たとえば、類似ノードテーブル７００内の類似ノード情報７００−１に設定される。具体的には、図９において、ノードＮ５が第２類似ノードとして検出された結果、類似ノード情報７００−１の第２類似ノードＩＤ項目に「Ｎ５」が設定されている（図９中（９−２））。
【００６３】
＜第３類似ノード＞
つぎに、類似度Ｂ３の第３類似ノードの検出例について説明する。検出部５０２は、まず、障害が発生したメッセージＴｇＭの実行主体となるインスタンスＴｇＩと同一のインスタンスＴｇＩを含むノードＮｉを検出する。そして、検出部５０２は、検出されたノードＮｉのインスタンスＴｇＩのメッセージが、障害ノードＴｇＮのインスタンスＴｇＩのメッセージＴｇＭと同一の場合、ノードＮｉを第３類似ノードとして検出する。
【００６４】
具体的には、たとえば、図８−３において、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、障害ノードＮ３のｂＭＳＣ情報３１０に含まれるＸＭＬ記述３１４と一致するＸＭＬ記述を持つノードＮｉを検出する。ここでは、ノードＮ７のｂＭＳＣ情報８３０に含まれるＸＭＬ記述８３１が一致する。
【００６５】
このあと、検出部５０２が、インスタンスＴｇＩのメッセージＴｇＭと同一のメッセージ（メッセージ名、ｆｒｏｍ、ｔｏが一致）のＸＭＬ記述を検出する。すなわち、検出部５０２が、障害ノードＮ３のＸＭＬ記述３１５と一致するＸＭＬ記述を持つノードＮｉを検出する。ここでは、ノードＮ７のＸＭＬ記述８３２が一致する。
【００６６】
このため、検出部５０２が、ノード群Ｎ０〜Ｎ７の中から、ノードＮ７を第３類似ノードとして検出する。なお、検出された障害ノードＮ３の第３類似ノードは、たとえば、類似ノードテーブル７００内の類似ノード情報７００−１に設定される。具体的には、図９において、ノードＮ７が第３類似ノードとして検出された結果、類似ノード情報７００−１の第３類似ノードＩＤ項目に「Ｎ７」が設定されている（図９中（９−３））。
【００６７】
（作成部５０３の処理内容）
つぎに、上記作成部５０３の具体的な処理内容について説明する。ここでは、類似ノードＮ４での障害発生を検証するためのシナリオを作成する場合について説明する。図１０は、シナリオの作成例を示す説明図である。
【００６８】
図１０において、まず、作成部５０３が、構造体２００の開始ノードＮ０から幅優先探索を行って、構造体２００の各ノードＮ０〜Ｎ７の開始ノードＮ０からの深さｄｉを求める（図１０中（１））。このあと、作成部５０３が、深さｄｉが小さくなるように、類似ノードＮ４から開始ノードＮ０に辿り着くまでの経路Ｐ１を探索する（図１０中（２））。
【００６９】
そして、作成部５０３が、探索された経路Ｐ１上に含まれるノード群Ｎ４，Ｎ２，Ｎ１，Ｎ０を逆順に並べたもの（ノード群Ｎ０，Ｎ１，Ｎ２，Ｎ４）を、類似障害を検証するためのシナリオＳ１として作成する。すなわち、作成部５０３が、『ノードＮ０→ノードＮ１→ノードＮ２→ノードＮ４』の順に各ノードが表すシーケンスを実行するシナリオＳ１を作成する。なお、作成された作成結果は、たとえば、図１１に示すシナリオＤＢ（データベース）１１００に記憶される。
【００７０】
図１１は、シナリオＤＢの記憶内容の一例を示す説明図である。図１１において、シナリオＤＢ１１００は、類似度およびシナリオの項目を有し、各項目に情報を設定することでシナリオ情報１１００−１〜１１００−３をレコードとして記憶している。
【００７１】
ここで、類似度とは、障害ノードＴｇＮとの類似性の度合いを表す指標値である。シナリオとは、ＸＭＬを用いて記述された関連障害を検証するためのシナリオデータである。なお、このシナリオＤＢ１１００は、たとえば、ＲＡＭ４０３、磁気ディスク４０５、光ディスク４０７などの記憶領域によって実現される。
【００７２】
（シナリオの具体例）
図１２は、シナリオの具体例を示す説明図である。図１２において、障害ノードＮ３で発生した障害の関連障害を検証するためのシナリオ情報１２００が示されている。具体的には、シナリオ情報１２００には、障害ノードＮ３との類似度Ｂ１〜Ｂ３が高い順に、各シナリオＳ１〜Ｓ３を表現するＸＭＬ記述１２１０，１２２０，１２３０が記述されている。
【００７３】
ここで、ＸＭＬ記述１２１０は、『ノードＮ０→ノードＮ１→ノードＮ２→ノードＮ４』の順に各ノードが表すシーケンスを実行するシナリオＳ１である。ＸＭＬ記述１２２０は、『ノードＮ０→ノードＮ１→ノードＮ２→ノードＮ５』の順に各ノードが表すシーケンスを実行するシナリオＳ２である。ＸＭＬ記述１２３０は、『ノードＮ０→ノードＮ６→ノードＮ７』の順に各ノードが表すシーケンスを実行するシナリオＳ３である。
【００７４】
シナリオ情報１２００によれば、検証時に、障害が発生したシーケンスとの類似度が高い類似シーケンスを含むシナリオ（ここでは、シナリオＳ１）から優先的に実行されることになる。このため、関連障害を早い段階で発見できる可能性が高まり、結果的に検証品質の向上および検証作業にかかる作業時間の短縮化を図ることができる。
【００７５】
（検証支援装置４００の検証支援処理手順）
つぎに、検証支援装置４００の検証支援処理手順について説明する。図１３は、検証支援装置の検証支援処理手順の一例を示すフローチャートである。図１３のフローチャートにおいて、まず、入力部５０１により、検証対象の動作を検証するためのシナリオ群の入力を受け付けたか否かを判断する（ステップＳ１３０１）。
【００７６】
ここで、シナリオ群の入力を待って（ステップＳ１３０１：Ｎｏ）、入力された場合（ステップＳ１３０１：Ｙｅｓ）、出力部５０４により、障害ノードＴｇＮの指定画面６１０をディスプレイ４０８に表示する（ステップＳ１３０２）。そして、入力部５０１により、障害ノードＴｇＮの指定を受け付けたか否かを判断する（ステップＳ１３０３）。
【００７７】
ここで、障害ノードＴｇＮの指定を待って（ステップＳ１３０３：Ｎｏ）、指定された場合（ステップＳ１３０３：Ｙｅｓ）、検出部５０２により、障害ノードＴｇＮの類似ノードを検出する類似ノード検出処理を実行する（ステップＳ１３０４）。なお、指定された障害ノードＴｇＮは、図７に示した類似ノードテーブル７００に記憶される。
【００７８】
そして、作成部５０３により、検証対象において発生している障害に関連する関連障害の発生を検証するためのシナリオを作成するシナリオ作成処理を実行する（ステップＳ１３０５）。最後に、出力部５０４により、作成されたシナリオを障害ノードＴｇＮとの類似度が高い順に出力して（ステップＳ１３０６）、本フローチャートによる一連の処理を終了する。
【００７９】
これにより、障害ノードＴｇＮの類似ノードが表すシーケンスの障害、すなわち、障害ノードＴｇＮで発生した障害の関連障害を検証するためのシナリオを自動作成することができる。
【００８０】
＜類似ノード検出処理手順＞
つぎに、図１３に示したステップＳ１３０４の類似ノード検出処理の具体的な処理手順について説明する。図１４は、類似ノード検出処理の具体的処理手順の一例を示すフローチャートである。
【００８１】
図１４において、検出部５０２により、ノードＮｉを「ｉ＝０」で初期化して（ステップＳ１４０１）、検証対象のシナリオ群を表現する構造体に含まれるノード群Ｎ０〜Ｎｎの中からノードＮｉを選択する（ステップＳ１４０２）。そして、検出部５０２により、ノードＮｉが障害ノードＴｇＮか否かを判断する（ステップＳ１４０３）。なお、障害ノードＴｇＮは、図１３に示したステップＳ１３０２において指定された障害ノードである。
【００８２】
ここで、障害ノードＴｇＮではない場合（ステップＳ１４０３：Ｎｏ）、検出部５０２により、ノードＮｉと障害ノードＴｇＮが同一のＭＳＣを持つか否かを判断する（ステップＳ１４０４）。そして、同一のＭＳＣを持つ場合（ステップＳ１４０４：Ｙｅｓ）、検出部５０２により、類似ノードテーブル７００内の障害ノードＴｇＮの第１類似ノードＩＤ項目にノードＮｉを設定する（ステップＳ１４０５）。
【００８３】
つぎに、検出部５０２により、ｉをインクリメントして（ステップＳ１４０６）、「ｉ＞ｎ」か否かを判断する（ステップＳ１４０７）。ここで、「ｉ≦ｎ」の場合（ステップＳ１４０７：Ｎｏ）、ステップＳ１４０２に戻る。一方、「ｉ＞ｎ」の場合（ステップＳ１４０７：Ｙｅｓ）、図１３に示したステップＳ１３０５に移行する。
【００８４】
また、ステップＳ１４０３において、ノードＮｉが障害ノードＴｇＮの場合（ステップＳ１４０３：Ｙｅｓ）、ステップＳ１４０６に移行する。
【００８５】
また、ステップＳ１４０４において、ノードＮｉが障害ノードＴｇＮと同一のＭＳＣを持たない場合（ステップＳ１４０４：Ｎｏ）、検出部５０２により、ノードＮｉがインスタンスＴｇＩを持つか否かを判断する（ステップＳ１４０８）。なお、インスタンスＴｇＩは、障害が発生したイベント（メッセージ）の実行主体となるインスタンスである。
【００８６】
ここで、ノードＮｉがインスタンスＴｇＩを持たない場合（ステップＳ１４０８：Ｎｏ）、ステップＳ１４０６に移行する。一方、インスタンスＴｇＩを持つ場合（ステップＳ１４０８：Ｙｅｓ）、検出部５０２により、ノードＮｉのインスタンスＴｇＩのメッセージシーケンスが、障害ノードＴｇＮのインスタンスＴｇＩのメッセージシーケンスＴｇＭＳと一致するか否かを判断する（ステップＳ１４０９）。
【００８７】
ここで、メッセージシーケンスが一致する場合（ステップＳ１４０９：Ｙｅｓ）、検出部５０２により、類似ノードテーブル７００内の障害ノードＴｇＮの第２類似ノードＩＤ項目にノードＮｉを設定する（ステップＳ１４１０）。
【００８８】
一方、メッセージシーケンスが不一致の場合（ステップＳ１４０９：Ｎｏ）、検出部５０２により、ノードＮｉのインスタンスＴｇＩのメッセージと、障害ノードＴｇＮのインスタンスＴｇＩのメッセージＴｇＭとが一致するか否かを判断する（ステップＳ１４１１）。
【００８９】
ここで、メッセージが一致する場合（ステップＳ１４１１：Ｙｅｓ）、検出部５０２により、類似ノードテーブル７００内の障害ノードＴｇＮの第３類似ノードＩＤ項目にノードＮｉを設定して（ステップＳ１４１２）、ステップＳ１４０６に移行する。一方、メッセージが不一致の場合（ステップＳ１４１１：Ｎｏ）、ステップＳ１４０６に移行する。
【００９０】
これにより、障害ノードＴｇＮとの類似度Ｂ１〜Ｂ３に応じて、３種類の第１、第２および第３の類似ノードを検出することができる。
【００９１】
＜シナリオ作成処理手順＞
つぎに、図１３に示したステップＳ１３０５のシナリオ作成処理の具体的な処理手順について説明する。図１５は、シナリオ作成処理の具体的処理手順の一例を示すフローチャートである。
【００９２】
図１５のフローチャートにおいて、まず、作成部５０３により、検証対象のシナリオ群を表現する構造体において、各ノードＮｉの開始ノードＮ０からの深さｄｉを算出する（ステップＳ１５０１）。そして、作成部５０３により、類似ノードテーブル７００内の障害ノードＴｇＮの第１類似ノードＩＤ項目から類似ノードＮｊ（ｊ＝０，１，…，ｎ）を選択する（ステップＳ１５０２）。
【００９３】
ここで、第１類似ノードＩＤ項目から類似ノードＮｊが選択された場合（ステップＳ１５０３：Ｙｅｓ）、作成部５０３により、構造体において、類似ノードＮｊから深さｄｊが小さくなる方向にノード群Ｎｐ〜Ｎｑを探索する（ステップＳ１５０４）。
【００９４】
そして、作成部５０３により、探索されたノード群Ｎｐ〜Ｎｑを逆順に並べたノード群Ｎｑ〜Ｎｐが表す一連のシーケンスをシナリオとして作成する（ステップＳ１５０５）。なお、作成されたシナリオは、図１１に示したシナリオＤＢ１１００に記憶される。この際、第１類似ノードを含むシナリオの類似度は「Ｂ１」となり、第２類似ノードを含むシナリオの類似度は「Ｂ２」となり、第３類似ノードを含むシナリオの類似度は「Ｂ３」となる。
【００９５】
このあと、作成部５０３により、類似ノードテーブル７００から選択されていない未選択の類似ノードＮｊがあるか否かを判断する（ステップＳ１５０６）。ここで、未探索の類似ノードがある場合（ステップＳ１５０６：Ｙｅｓ）、ステップＳ１５０２に戻る。
【００９６】
また、ステップＳ１５０３において、第１類似ノードＩＤ項目から類似ノードＮｊが選択されなかった場合（ステップＳ１５０３：Ｎｏ）、作成部５０３により、類似ノードテーブル７００内の障害ノードＴｇＮの第２類似ノードＩＤ項目から類似ノードＮｊを選択する（ステップＳ１５０７）。
【００９７】
ここで、第２類似ノードＩＤ項目から類似ノードＮｊが選択された場合（ステップＳ１５０８：Ｙｅｓ）、ステップＳ１５０４に移行する。一方、第２類似ノードＩＤ項目から類似ノードＮｊが選択されなかった場合（ステップＳ１５０８：Ｎｏ）、作成部５０３により、類似ノードテーブル７００内の障害ノードＴｇＮの第３類似ノードＩＤ項目から類似ノードＮｊを選択して（ステップＳ１５０９）、ステップＳ１５０４に移行する。
【００９８】
また、ステップＳ１５０６において、未選択の類似ノードＮｊがない場合（ステップＳ１５０６：Ｎｏ）、図１３に示したステップＳ１３０６に移行する。
【００９９】
これにより、障害ノードＴｇＮとの類似度Ｂ１〜Ｂ３が高い順に、各第１、第２、第３類似ノードが表すシーケンスを含むシナリオを作成することができる。
【０１００】
以上説明したように、本実施の形態によれば、検証対象のシナリオ群を表現する構造体の開始ノードＮ０から障害ノードＴｇＮの類似ノードまでの経路上のノード群が表す一連のシーケンスを含むシナリオを自動作成することができる。これにより、類似ノードが表すシーケンスの障害、すなわち、障害ノードＴｇＮで発生した障害の関連障害を検証するためのシナリオを自動作成することができる。
【０１０１】
また、本実施の形態によれば、障害ノードと同一シーケンスを表すノードを第１類似ノードとして検出することができる。また、本実施の形態によれば、障害ノードＴｇＮのインスタンスＴｇＩのメッセージシーケンスＴｇＭＳと同一のメッセージシーケンスを持つインスタンスＴｇＩを含むノードＮｉを第２類似ノードとして検出することができる。また、本実施の形態によれば、障害ノードＴｇＮのインスタンスＴｇＩと同一のインスタンスＴｇＩを含むノードＮ３を第３類似ノードとして検出することができる。これにより、障害ノードＴｇＮとの類似度（たとえば、類似度Ｂ１〜Ｂ３）が異なる複数種類（３種類）の類似ノードを検出することができる。
【０１０２】
また、本実施の形態によれば、障害ノードＴｇＮとの類似度が高い順に、各第１、第２、第３類似ノードが表すシーケンスを含むシナリオを作成することができる。これにより、障害が発生しているシーケンスとの類似度の高い類似シーケンスを含むシナリオから優先的に実行されることになる。そのため、関連障害を早い段階で発見できる可能性が高まり、結果的に検証品質の向上および検証作業にかかる作業時間の短縮化を図ることができる。また、検証者がシナリオ群の実行順序を判断する必要がないため、検証者の判断ミスを排除するとともに、検証者の負担を軽減することができる。
【０１０３】
なお、本実施の形態で説明した検証支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検証支援プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検証支援プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１０４】
４００  検証支援装置
５０１  入力部
５０２  検出部
５０３  作成部
５０４  出力部
７００  類似ノードテーブル
１１００  シナリオＤＢ
【図１】
2011118757.tif 000003
【図２】
2011118757.tif 000004
【図３】
2011118757.tif 000005
【図４】
2011118757.tif 000006
【図５】
2011118757.tif 000007
【図６−１】
2011118757.tif 000008
【図６−２】
2011118757.tif 000009
【図７】
2011118757.tif 000010
【図８−１】
2011118757.tif 000011
【図８−２】
2011118757.tif 000012
【図８−３】
2011118757.tif 000013
【図９】
2011118757.tif 000014
【図１０】
2011118757.tif 000015
【図１１】
2011118757.tif 000016
【図１２】
2011118757.tif 000017
【図１３】
2011118757.tif 000018
【図１４】
2011118757.tif 000019
【図１５】
2011118757.tif 000020