(57)【要約】【課題】送受信イベント間のパラメータ値の制約や送受信タイミングの制約に適合した試験項目のみを生成する。【解決手段】プロトコル状態マシン記憶部１０１は、状態遷移のうち、第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義するとともに、上記参照値と当該第１遷移より後の第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件として定義するプロトコル状態マシンを保持する。試験項目生成部１０３は、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を設定する。このとき、上記決定方法を用いて、第１遷移のパラメータに対し設定した値を基に上記参照値を決定し、第２遷移のパラメータに対し上記参照値との間で上記遷移条件が満たされる値の１つを設定する。【選択図】図１
2012138021.tif 000002
【特許請求の範囲】
【請求項１】
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第１遷移とし、前記第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義するとともに、前記第１遷移より後に行われる状態遷移のうち、少なくとも１つを第２遷移とし、前記参照値と前記第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件として定義する状態遷移情報を予め記憶装置により記憶する状態遷移情報記憶部と、
前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成部であって、前記第１遷移に該当するメッセージの通信と前記第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、前記決定方法を用いて、前記第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値を基に前記参照値を処理装置により決定し、前記第２遷移で通信されるメッセージに含まれるパラメータに対し、前記参照値との間で前記遷移条件が満たされる値の１つを処理装置により設定する試験項目生成部と
を備えることを特徴とする試験項目生成装置。
【請求項２】
前記状態遷移情報記憶部は、前記状態遷移情報として、さらに、状態遷移のうち、少なくとも１つを第３遷移とし、前記第３遷移より後に行われる状態遷移のうち、少なくとも１つを第４遷移とし、前記第３遷移が行われる時刻を基に前記第４遷移が行われるべき時刻を算出する算出方法を定義する情報を記憶し、
前記試験項目生成部は、前記第３遷移に該当するメッセージの通信と前記第４遷移に該当するメッセージの通信とを含む試験項目を生成する場合、さらに、前記算出方法を用いて、前記第３遷移に該当するメッセージの通信の時刻を基に算出した時刻まで、前記第４遷移に該当するメッセージの通信を待機するように指示する情報を当該試験項目に含めることを特徴とする請求項１の試験項目生成装置。
【請求項３】
前記状態遷移情報記憶部は、前記状態遷移情報として、さらに、状態遷移のうち、少なくとも１つを第３遷移とし、前記第３遷移より後に行われる状態遷移のうち、少なくとも１つを第４遷移とし、前記第３遷移が行われる時刻を基に前記第４遷移が行われるべき時刻を算出する算出方法を定義する情報を記憶し、
前記試験項目生成部は、前記第３遷移に該当するメッセージの通信と前記第４遷移に該当するメッセージの通信とを含む試験項目を生成する場合、さらに、前記算出方法を用いて、前記第３遷移に該当するメッセージの通信の時刻を基に算出した時刻に、前記第４遷移に該当するメッセージが通信されたかどうかを検査するように指示する情報を当該試験項目に含めることを特徴とする請求項１の試験項目生成装置。
【請求項４】
前記試験項目生成部は、前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、状態遷移ごとに、通信されるメッセージに含まれるパラメータのうち値が動的に設定される第１パラメータと所定の第２パラメータとを除くパラメータに対し試験対象とする値を設定し、前記第１遷移に該当するメッセージの通信と前記第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、さらに、前記決定方法を用いて、前記第１遷移に該当するメッセージに含まれる前記第１パラメータの値を基に決定した値を、前記第２遷移に該当するメッセージに含まれる前記第２パラメータに対し設定するように指示する情報を当該試験項目に含めることを特徴とする請求項１から３のいずれかの試験項目生成装置。
【請求項５】
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第３遷移とし、前記第３遷移より後に行われる状態遷移のうち、少なくとも１つを第４遷移とし、前記第３遷移が行われる時刻を基に前記第４遷移が行われるべき時刻を算出する算出方法を定義する状態遷移情報を予め記憶装置により記憶する状態遷移情報記憶部と、
前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成部であって、前記第３遷移に該当するメッセージの通信と前記第４遷移に該当するメッセージの通信とを含む試験項目を生成する場合、さらに、前記算出方法を用いて、前記第３遷移に該当するメッセージの通信の時刻を基に算出した時刻まで、前記第４遷移に該当するメッセージの通信を待機するように指示する情報を当該試験項目に含める試験項目生成部と
を備えることを特徴とする試験項目生成装置。
【請求項６】
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第３遷移とし、前記第３遷移より後に行われる状態遷移のうち、少なくとも１つを第４遷移とし、前記第３遷移が行われる時刻を基に前記第４遷移が行われるべき時刻を算出する算出方法を定義する状態遷移情報を予め記憶装置により記憶する状態遷移情報記憶部と、
前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成部であって、前記第３遷移に該当するメッセージの通信と前記第４遷移に該当するメッセージの通信とを含む試験項目を生成する場合、さらに、前記算出方法を用いて、前記第３遷移に該当するメッセージの通信の時刻を基に算出した時刻に、前記第４遷移に該当するメッセージが通信されたかどうかを検査するように指示する情報を当該試験項目に含める試験項目生成部と
を備えることを特徴とする試験項目生成装置。
【請求項７】
前記試験項目生成装置は、さらに、
前記通信プロトコルで規定されたメッセージの種類ごとに、メッセージに含まれるパラメータを定義するパラメータ情報を予め記憶装置により記憶するパラメータ情報記憶部
を備え、
前記状態遷移情報記憶部は、前記状態遷移情報として、さらに、状態遷移ごとに、通信されるメッセージの種類を定義する情報を記憶し、
前記試験項目生成部は、前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、状態遷移ごとに、通信されるメッセージの種類を処理装置により特定し、前記パラメータ情報記憶部に記憶されたパラメータ情報に基づき、特定したメッセージの種類に対応するパラメータを処理装置により特定し、特定したパラメータに対し試験対象とする値を設定することを特徴とする請求項１から６のいずれかの試験項目生成装置。
【請求項８】
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第１遷移とし、前記第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義するとともに、前記第１遷移より後に行われる状態遷移のうち、少なくとも１つを第２遷移とし、前記参照値と前記第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件として定義する状態遷移情報を予め記憶装置により記憶するコンピュータが、前記状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成方法であって、
前記コンピュータが、前記第１遷移に該当するメッセージの通信と前記第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、前記決定方法を用いて、前記第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値を基に前記参照値を処理装置により決定し、前記第２遷移で通信されるメッセージに含まれるパラメータに対し、前記参照値との間で前記遷移条件が満たされる値の１つを処理装置により設定することを特徴とする試験項目生成方法。
【請求項９】
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第１遷移とし、前記第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義するとともに、前記第１遷移より後に行われる状態遷移のうち、少なくとも１つを第２遷移とし、前記参照値と前記第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件として定義する状態遷移情報を予め記憶装置により記憶するコンピュータによって実行される試験項目生成プログラムであって、
前記状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成処理であって、前記第１遷移に該当するメッセージの通信と前記第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、前記決定方法を用いて、前記第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値を基に前記参照値を処理装置により決定し、前記第２遷移で通信されるメッセージに含まれるパラメータに対し、前記参照値との間で前記遷移条件が満たされる値の１つを処理装置により設定する試験項目生成処理をコンピュータに実行させることを特徴とする試験項目生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験項目生成装置及び試験項目生成方法及び試験項目生成プログラムに関するものである。本発明は、特に、プロトコル状態マシンからの試験シナリオ生成システム、方法、及びプログラムに関するものである。
【背景技術】
【０００２】
従来、システムの外部仕様を記述した状態遷移に基づいて、試験項目を網羅的に生成する方式がある（例えば、特許文献１参照）。
【０００３】
従来の方式では、状態遷移表から遷移パス（メッセージの送受信のシーケンスパターン）を抽出する。シーケンスパターンに含まれるそれぞれのメッセージについて、パラメータを取得する。それぞれのパラメータにおいて、試験項目（試験対象となるパラメータ値が設定されたメッセージのシーケンス）として使用するパラメータ値の集合を生成する。そして試験項目として使用するメッセージとして、パラメータ値の集合の直積演算結果（メッセージ集合）を取得する。最後に、シーケンスパターンの順序に従ってメッセージ集合の直積演算結果であるシーケンス集合を試験項目として得る。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１８１５６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
状態遷移に遷移条件が含まれ、この遷移条件が、先行して発生したイベント（メッセージの送受信）のパラメータ値との関係（パラメータ値制約）や、イベント発生時刻との関係（時間制約）によって定義される場合がある。このような場合に、従来の方式では、状態遷移に記述した仕様に反した試験項目（遷移条件が満たされなくても状態遷移が行われてしまう試験項目）を生成することになる。これは、パラメータ値制約がある場合でも、従来の方式では、先行して発生したイベントと無関係に、後続するイベントのパラメータ値を設定しているためである。また、時間制約がある場合でも、従来の方式では、イベント発生時刻に関する記述が試験項目にないことから、１つのイベントの発生後、すぐに次のイベントを発生させているためである。
【０００６】
このように、従来の方式では、仕様に反した試験項目を混在させて生成するため、その実行時間だけ試験作業効率が悪くなるという課題があった。
【０００７】
本発明は、例えば、送受信イベント間のパラメータ値の制約や送受信タイミングの制約に適合した試験項目のみを生成することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一の態様に係る試験項目生成装置は、
所定の通信プロトコルで規定されたメッセージの通信をそれぞれ状態遷移として定義する状態遷移情報であり、状態遷移のうち、少なくとも１つを第１遷移とし、前記第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義するとともに、前記第１遷移より後に行われる状態遷移のうち、少なくとも１つを第２遷移とし、前記参照値と前記第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件として定義する状態遷移情報を予め記憶装置により記憶する状態遷移情報記憶部と、
前記状態遷移情報記憶部に記憶された状態遷移情報に基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定することで、メッセージの通信シーケンスを試験項目として生成する試験項目生成部であって、前記第１遷移に該当するメッセージの通信と前記第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、前記決定方法を用いて、前記第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値を基に前記参照値を処理装置により決定し、前記第２遷移で通信されるメッセージに含まれるパラメータに対し、前記参照値との間で前記遷移条件が満たされる値の１つを処理装置により設定する試験項目生成部と
を備える。
【発明の効果】
【０００９】
本発明の一の態様によれば、遷移条件に関し、仕様に整合した試験項目のみを生成することができるため、不要な試験項目の実施時間を削減し、試験作業を効率化することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係る試験項目生成装置の構成を示す図。
【図２】実施の形態１に係るプロトコル状態マシンの一例を示す図。
【図３】実施の形態１に係るメッセージフォーマットの一例を示す図。
【図４】実施の形態１に係るメッセージフォーマット、プロトコル状態マシン、試験項目のデータ構造を示す図。
【図５】実施の形態１に係る試験項目生成装置のハードウェア構成の一例を示す図。
【図６】実施の形態１に係る試験項目生成制御部の動作を示す図。
【図７】実施の形態１に係るシーケンス生成部の動作を示す図。
【図８】実施の形態１に係る実イベント生成部の動作を示す図。
【図９】実施の形態１に係る実メッセージ生成部の動作を示す図。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態について、図を用いて説明する。
【００１２】
実施の形態１．
図１は、本実施の形態に係る試験項目生成装置１００の構成を示すブロック図である。
【００１３】
図１において、試験項目生成装置１００は、プロトコル状態マシン記憶部１０１、メッセージフォーマット記憶部１０２、試験項目生成部１０３、試験項目記憶部１０４を備える。また、図示していないが、試験項目生成装置１００は、処理装置、記憶装置、入力装置、出力装置等のハードウェアを備える。ハードウェアは試験項目生成装置１００の各部によって利用される。例えば、処理装置は、試験項目生成装置１００の各部でデータや情報の演算、加工、読み取り、書き込み等を行うために利用される。記憶装置は、そのデータや情報を記憶するために利用される。また、入力装置は、そのデータや情報を入力するために、出力装置は、そのデータや情報を出力するために利用される。
【００１４】
プロトコル状態マシン記憶部１０１は、ユーザが入力装置を介して入力したプロトコル状態マシンを保持する（予め記憶装置により記憶する）。プロトコル状態マシン記憶部１０１は、状態遷移情報記憶部の一例である。
【００１５】
プロトコル状態マシンは、所定の通信プロトコルで規定されたメッセージ（例えば、パケット）の通信をそれぞれ状態遷移として定義する状態遷移情報の一例である。プロトコル状態マシンは、状態遷移のうち、少なくとも１つを第１遷移とし、当該第１遷移で通信されるメッセージに含まれるパラメータの値を基に所定の参照値を決定する決定方法を定義する情報である。また、プロトコル状態マシンは、当該第１遷移より後に行われる状態遷移のうち、少なくとも１つを第２遷移とし、上記参照値と当該第２遷移で通信されるメッセージに含まれるパラメータの値とが満たすべき関係を遷移条件（パラメータ値制約）として定義する情報である。さらに、プロトコル状態マシンは、状態遷移のうち、少なくとも１つを第３遷移とし、当該第３遷移より後に行われる状態遷移のうち、少なくとも１つを第４遷移とし、当該第３遷移が行われる時刻を基に当該第４遷移が行われるべき時刻を算出する算出方法を定義する情報である。本実施の形態において、プロトコル状態マシンは、さらに、状態遷移ごとに、通信されるメッセージの種類を定義する情報である。
【００１６】
メッセージフォーマット記憶部１０２は、ユーザが入力装置を介して入力したメッセージフォーマットを保持する（予め記憶装置により記憶する）。メッセージフォーマット記憶部１０２は、パラメータ情報記憶部の一例である。メッセージフォーマットは、メッセージに含まれるパラメータを定義するパラメータ情報の一例であり、上記通信プロトコルで規定されたメッセージの種類ごとに記憶される。
【００１７】
ここで、プロトコル状態マシンの一例を図２に、メッセージフォーマットの一例を図３に示す。図２の例では、「状態０」から「状態５」までの各状態間の状態遷移が定義されている。図３の例では、図２の例で用いているリクエスト、リクエストＡＣＫ、レスポンス、レスポンスＡＣＫが定義されている。
【００１８】
図３の例では、リクエスト、リクエストＡＣＫ、レスポンス、レスポンスＡＣＫがそれぞれパラメータ「リクエストＩＤ」を含み、「リクエストＩＤ」が「０」から「２５５」までの整数値をとり得ることが定義されている。また、レスポンス、レスポンスＡＣＫがそれぞれパラメータ「ｒｅｓｕｌｔ」を含み、「ｒｅｓｕｌｔ」が「０」又は「１」のいずれかの値をとることが定義されている。また、レスポンス、レスポンスＡＣＫがそれぞれパラメータ「受付番号」を含み、「受付番号」が「０」から「２５５」までの整数値をとり得ることが定義されている。
【００１９】
図２の例において、「状態０」から「状態１」への状態遷移としては、リクエスト（メッセージの種類の一例）の通信である「遷移１」が定義されている。「遷移１」では、リクエストの送信（入力）イベントを実行した後、事後アクションを実行することが定義されている。「遷移１」では、事後アクションとして、「遷移１」で送信されるリクエストに含まれるパラメータ「リクエストＩＤ」の値を「ｒｅｑＩｄ」（参照値の一例）とすること（決定方法の一例）が定義されている。即ち、「遷移１」は第１遷移に該当する。また、「遷移１」では、別の事後アクションとして、イベント発生時刻（「遷移１」が行われる時刻）「ｎｏｗ（）」を「ｒｅｑＴｉｍｅ」とすることが定義されている。即ち、「遷移１」は第３遷移に該当する。
【００２０】
「状態１」から「状態２」への状態遷移としては、リクエストＡＣＫ（メッセージの種類の一例）の通信である「遷移２」が定義されている。「遷移２」では、リクエストＡＣＫの受信（出力）イベントを実行した後、遷移条件（時間制約）を検査し、遷移条件（時間制約）が満たされていれば、遷移条件（パラメータ値制約）を検査し、遷移条件（パラメータ値制約）が満たされていれば、事後アクションを実行することが定義されている。なお、ここでは、便宜上、遷移条件（時間制約）や遷移条件（パラメータ値制約）を検査する処理を事後アクションとは別のものとして説明しているが、これらの処理は実際には事後アクションとして実行されるものである。「遷移２」では、遷移条件（パラメータ値制約）として、「ｒｅｑＩｄ」と「遷移２」で受信されるリクエストＡＣＫに含まれるパラメータ「リクエストＩＤ」の値とが一致すべきこと（関係の一例）が定義されている。即ち、「遷移１」を第１遷移としたとき、「遷移２」は第２遷移に該当する。また、「遷移２」では、遷移条件（時間制約）として、イベント発生時刻（「遷移２」が行われる時刻）「ｎｏｗ（）」が「ｒｅｑＴｉｍｅ」に１秒加えた時刻以前でなければならないこと（算出方法の一例）が定義されている。即ち、「遷移１」を第３遷移としたとき、「遷移２」は第４遷移に該当する。また、「遷移２」では、事後アクションとして、イベント発生時刻（「遷移２」が行われる時刻）「ｎｏｗ（）」を「ａｃｋＴｉｍｅ」とすることが定義されている。即ち、「遷移１」は第３遷移に該当する。
【００２１】
「状態２」から「状態３」への状態遷移としては、レスポンス（メッセージの種類の一例）の通信である「遷移３」が定義されている。「遷移３」では、レスポンスの受信（出力）イベントを実行した後、遷移条件（時間制約）を検査し、遷移条件（時間制約）が満たされていれば、遷移条件（パラメータ値制約）を検査し、遷移条件（パラメータ値制約）が満たされていれば、事後アクションを実行することが定義されている。「遷移３」では、遷移条件（パラメータ値制約）として、「遷移３」で受信されるレスポンスに含まれるパラメータ「ｒｅｓｕｌｔ」が「０」でなければならないこと、及び、「ｒｅｑＩｄ」と「遷移３」で受信されるレスポンスに含まれるパラメータ「リクエストＩＤ」の値とが一致すべきこと（関係の一例）が定義されている。即ち、「遷移１」を第１遷移としたとき、「遷移３」は第２遷移に該当する。また、「遷移３」では、遷移条件（時間制約）として、イベント発生時刻（「遷移３」が行われる時刻）「ｎｏｗ（）」が「ａｃｋＴｉｍｅ」に１０秒加えた時刻以前でなければならないこと（算出方法の一例）が定義されている。即ち、「遷移２」を第３遷移としたとき、「遷移３」は第４遷移に該当する。また、「遷移３」では、事後アクションとして、イベント発生時刻（「遷移３」が行われる時刻）「ｎｏｗ（）」を「ｒｅｓＴｉｍｅ」とすることが定義されている。即ち、「遷移３」は第３遷移に該当する。また、「遷移３」では、別の事後アクションとして、「遷移３」で受信されるレスポンスに含まれるパラメータ「受付番号」の値を「ｒｅｃＮｏ」（参照値の一例）とすること（決定方法の一例）が定義されている。即ち、「遷移３」は第１遷移に該当する。
【００２２】
「状態２」から「状態４」への状態遷移としては、レスポンスの通信である「遷移４」が定義されている。「遷移４」では、レスポンスの受信（出力）イベントを実行した後、遷移条件（時間制約）を検査し、遷移条件（時間制約）が満たされていれば、遷移条件（パラメータ値制約）を検査することが定義されている。「遷移４」では、遷移条件（パラメータ値制約）として、「遷移４」で受信されるレスポンスに含まれるパラメータ「ｒｅｓｕｌｔ」が「１」でなければならないこと、及び、「ｒｅｑＩｄ」と「遷移４」で受信されるレスポンスに含まれるパラメータ「リクエストＩＤ」の値とが一致すべきこと（関係の一例）が定義されている。即ち、「遷移１」を第１遷移としたとき、「遷移４」は第２遷移に該当する。また、「遷移４」では、遷移条件（時間制約）として、イベント発生時刻（「遷移４」が行われる時刻）「ｎｏｗ（）」が「ａｃｋＴｉｍｅ」に１０秒加えた時刻より後でなければならないこと（算出方法の一例）が定義されている。即ち、「遷移２」を第３遷移としたとき、「遷移４」は第４遷移に該当する。
【００２３】
「状態３」から「状態５」への状態遷移としては、レスポンスＡＣＫの通信である「遷移５」が定義されている。「遷移５」では、遷移条件（時間制約）が満たされるまで待機した後、事前アクションを実行し、レスポンスＡＣＫの送信（入力）イベントを実行することが定義されている。「遷移５」では、事前アクションとして、「ｒｅｃＮｏ」を「遷移５」で送信されるレスポンスＡＣＫに含まれるパラメータ「受付番号」に対し設定することが定義されている。即ち、「遷移３」を第１遷移としたとき、「遷移５」は第２遷移に該当する。「遷移５」では、遷移条件（時間制約）として、イベント発生時刻（「遷移５」が行われる時刻）「ｎｏｗ（）」が「ｒｅｓＴｉｍｅ」に１秒加えた時刻より後でなければならないこと（算出方法の一例）が定義されている。即ち、「遷移３」を第３遷移としたとき、「遷移５」は第４遷移に該当する。
【００２４】
図１において、試験項目生成部１０３は、プロトコル状態マシン記憶部１０１に記憶されたプロトコル状態マシンに基づき、１つの状態遷移から次に行われる状態遷移を処理装置により順次特定し、状態遷移ごとに、通信されるメッセージに含まれるパラメータに対し試験対象とする値を処理装置により設定する。このとき、本実施の形態では、試験項目生成部１０３は、プロトコル状態マシン記憶部１０１に記憶されたプロトコル状態マシンに基づき、状態遷移ごとに、通信されるメッセージの種類を処理装置により特定し、メッセージフォーマット記憶部１０２に記憶されたメッセージフォーマットに基づき、特定したメッセージの種類に対応するパラメータを処理装置により特定し、特定したパラメータに対し試験対象とする値を設定する。これにより、試験項目生成部１０３は、メッセージの通信シーケンスを試験項目として生成する。
【００２５】
試験項目生成部１０３は、第１遷移に該当するメッセージの通信と第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、プロトコル状態マシンで定義されている決定方法を用いて、当該第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値を基に、プロトコル状態マシンで定義されている参照値を処理装置により決定する。そして、試験項目生成部１０３は、当該第２遷移で通信されるメッセージに含まれるパラメータに対し、決定した参照値との間で、プロトコル状態マシンで定義されている遷移条件（パラメータ値制約）が満たされる値の１つを処理装置により設定する。プロトコル状態マシンで定義されている決定方法としては、当該第１遷移で通信されるメッセージに含まれるパラメータに対し設定した値をそのまま参照値とする方法のほか、境界値、正常値、異常値等を参照値とする方法等が考えられる。
【００２６】
なお、第１遷移に該当するメッセージに、値が動的に（即ち、試験実行時に）設定されるパラメータ（第１パラメータ）が含まれる場合、試験項目生成部１０３は、当該第１パラメータに対しては試験対象とする値を設定しなくてよい。また、試験項目生成部１０３は、当該第１遷移に対応する第２遷移に該当するメッセージに含まれ、当該第１パラメータの値を基に決定される参照値との間で遷移条件（パラメータ値制約）が定義されるパラメータ（第２パラメータ）に対しても試験対象とする値を設定しなくてよい。試験項目生成部１０３は、このような第１遷移に該当するメッセージの通信と第２遷移に該当するメッセージの通信とを含む試験項目を生成する場合、プロトコル状態マシンで定義されている決定方法を用いて、当該第１遷移に該当するメッセージに含まれる第１パラメータの値を基に決定した値を、当該第２遷移に該当するメッセージに含まれる第２パラメータに対し設定するように指示する情報を当該試験項目に含める。
【００２７】
また、試験項目生成部１０３は、第３遷移に該当するメッセージの通信と第４遷移に該当するメッセージの通信とを含む試験項目を生成する場合、プロトコル状態マシンで定義されている算出方法を用いて、当該第３遷移に該当するメッセージの通信の時刻を基に算出した時刻まで、当該第４遷移に該当するメッセージの通信を待機するように指示する情報を当該試験項目に含める。あるいは、プロトコル状態マシンで定義されている算出方法を用いて、当該第３遷移に該当するメッセージの通信の時刻を基に算出した時刻（１つの時点ではなく、期間であってもよい）に、当該第４遷移に該当するメッセージが通信されたかどうかを検査するように指示する情報を当該試験項目に含める。プロトコル状態マシンで定義されている算出方法としては、当該第３遷移に該当するメッセージの通信の時刻に一定時間（例えば、通信プロトコルで許容される遅延時間）を加算する方法等が考えられる。
【００２８】
図２及び図３の例では、まず、試験項目生成部１０３は、プロトコル状態マシンから「遷移１」を特定し、プロトコル状態マシンから「遷移１」で送信されるメッセージの種類がリクエストであることを特定する。そして、試験項目生成部１０３は、メッセージフォーマットからリクエストのパラメータ「リクエストＩＤ」を特定し、リクエストのパラメータ「リクエストＩＤ」に対し試験対象とする値「０」から「２５５」を設定する。これにより、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストを送信するという２５６通りの試験項目が生成される。試験項目生成部１０３は、試験項目ごとに、プロトコル状態マシンから「遷移１」の事後アクションを特定して実行し、「リクエストＩＤ」の値を「ｒｅｑＩｄ」として記憶装置により保存する。
【００２９】
次に、試験項目生成部１０３は、プロトコル状態マシンから「遷移２」を特定し、プロトコル状態マシンから「遷移２」で受信されるメッセージの種類がリクエストＡＣＫであることを特定する。そして、試験項目生成部１０３は、メッセージフォーマットからリクエストＡＣＫのパラメータ「リクエストＩＤ」を特定するとともに、プロトコル状態マシンから「遷移２」の遷移条件（パラメータ値制約）を特定する。試験項目生成部１０３は、試験項目ごとに、リクエストＡＣＫのパラメータ「リクエストＩＤ」に対し、保存済の「ｒｅｑＩｄ」との間で、遷移条件（パラメータ値制約）が満たされる値、即ち、保存済の「ｒｅｑＩｄ」の値を設定する。これにより、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストを送信した後、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストＡＣＫを受信するという２５６通りの試験項目が生成される。
【００３０】
次に、試験項目生成部１０３は、プロトコル状態マシンから「遷移３」を特定し、プロトコル状態マシンから「遷移３」で受信されるメッセージの種類がレスポンスであることを特定する。そして、試験項目生成部１０３は、メッセージフォーマットからレスポンスのパラメータ「リクエストＩＤ」、「ｒｅｓｕｌｔ」、「受付番号」を特定するとともに、プロトコル状態マシンから「遷移３」の遷移条件（パラメータ値制約）を特定する。試験項目生成部１０３は、試験項目ごとに、レスポンスのパラメータ「リクエストＩＤ」に対し、保存済の「ｒｅｑＩｄ」との間で、遷移条件（パラメータ値制約）が満たされる値、即ち、保存済の「ｒｅｑＩｄ」の値を設定する。また、試験項目生成部１０３は、試験項目ごとに、レスポンスのパラメータ「ｒｅｓｕｌｔ」に対し、遷移条件（パラメータ値制約）が満たされる値、即ち、「０」を設定する。これにより、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストを送信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスを受信するという２５６通りの試験項目が生成される。
【００３１】
なお、メッセージフォーマット等では、レスポンスのパラメータ「受付番号」が前述した第１パラメータに該当することが定義されているものとする。試験項目生成部１０３は、メッセージフォーマット等を参照して、レスポンスのパラメータ「受付番号」に対しては値を設定しなくてよいと判断する。また、試験項目生成部１０３は、「受付番号」を用いる事後アクションを実行しなくてよいと判断する。その代わりに、試験項目生成部１０３は、その事後アクションの内容、即ち、「受付番号」を「ｒｅｃＮｏ」とすること（「受付番号」を基に「ｒｅｃＮｏ」を決定すること）を示す情報を記憶装置に保存する。
【００３２】
試験項目生成部１０３は、「遷移３」と同様に、「遷移４」についても試験項目を生成する。その結果、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストを送信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「１」に設定されたレスポンスを受信するという２５６通りの試験項目が追加され、全体では５１２通りの試験項目が生成される。例えば、「リクエストＩＤ」が「０」に設定されたリクエストの送信→「リクエストＩＤ」が「０」に設定されたリクエストＡＣＫの受信→「リクエストＩＤ」が「０」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスの受信、という試験項目が生成される。また、例えば、「リクエストＩＤ」が「０」に設定されたリクエストの送信→「リクエストＩＤ」が「０」に設定されたリクエストＡＣＫの受信→「リクエストＩＤ」が「０」に設定され、かつ、「ｒｅｓｕｌｔ」が「１」に設定されたレスポンスの受信、という試験項目が生成される。また、例えば、「リクエストＩＤ」が「２５５」に設定されたリクエストの送信→「リクエストＩＤ」が「２５５」に設定されたリクエストＡＣＫの受信→「リクエストＩＤ」が「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスの受信、という試験項目が生成される。また、例えば、「リクエストＩＤ」が「２５５」に設定されたリクエストの送信→「リクエストＩＤ」が「２５５」に設定されたリクエストＡＣＫの受信→「リクエストＩＤ」が「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「１」に設定されたレスポンスの受信、という試験項目が生成される。
【００３３】
次に、試験項目生成部１０３は、プロトコル状態マシンから「遷移５」を特定し、プロトコル状態マシンから「遷移５」で送信されるメッセージの種類がレスポンスＡＣＫであることを特定する。そして、試験項目生成部１０３は、メッセージフォーマットからレスポンスＡＣＫのパラメータ「リクエストＩＤ」、「ｒｅｓｕｌｔ」、「受付番号」を特定するとともに、プロトコル状態マシンから「遷移５」の遷移条件（パラメータ値制約）を特定する。試験項目生成部１０３は、試験項目ごとに、レスポンスＡＣＫのパラメータ「リクエストＩＤ」に対し、保存済の「ｒｅｑＩｄ」との間で、遷移条件（パラメータ値制約）が満たされる値、即ち、保存済の「ｒｅｑＩｄ」の値を設定する。また、試験項目生成部１０３は、試験項目ごとに、レスポンスＡＣＫのパラメータ「ｒｅｓｕｌｔ」に対し、遷移条件（パラメータ値制約）が満たされる値、即ち、「０」を設定する。これにより、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストを送信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスＡＣＫを送信するという２５６通りの試験項目が生成される。「遷移４」について生成された２５６通りの試験項目と合わせると、前述したように、全体では５１２通りの試験項目が生成されることになる。それぞれの試験項目には、プロトコル状態マシンで定義されている遷移条件（時間制約）に基づき、メッセージの通信を待機するように指示する情報、あるいは、プロトコル状態マシンで定義されている遷移条件（時間制約）が満たされているかどうかを検査するように指示する情報も含まれる。
【００３４】
なお、メッセージフォーマット等において、レスポンスＡＣＫのパラメータ「受付番号」が前述した第２パラメータに該当することが定義されているものとする。試験項目生成部１０３は、メッセージフォーマット等を参照して、レスポンスＡＣＫのパラメータ「受付番号」に対しては値を設定しなくてよいと判断する。また、試験項目生成部１０３は、「受付番号」を用いる事前アクションを実行しなくてよいと判断する。あるいは、試験項目生成部１０３は、記憶装置に保存されている、「受付番号」を「ｒｅｃＮｏ」とすることを示す情報を参照して、「ｒｅｃＮｏ」を用いる事前アクションを実行しなくてよいと判断する。その代わりに、試験項目生成部１０３は、プロトコル状態マシンで定義されている遷移条件（パラメータ値制約）に基づき、レスポンスのパラメータ「受付番号」を「ｒｅｃＮｏ」とし、「ｒｅｃＮｏ」をレスポンスＡＣＫのパラメータ「受付番号」に対し設定するように指示する情報をそれぞれの試験項目に含める。
【００３５】
上記例において、試験項目生成部１０３は、仕様に適合するパターン全てを試験項目として生成しなくてもよい。例えば、試験項目生成部１０３は、上記５１２通りの試験項目の一部のみを生成するようにしてもよい。例えば、リクエストのパラメータ「リクエストＩＤ」として偶数のみを設定するようにして、全体では２５６通りの試験項目のみが生成されるようにしてもよい。あるいは、他の制限を設けて、試験項目の数を減らしてもよい。
【００３６】
また、前述した各状態遷移の遷移条件は例であり、任意に変更可能である。
【００３７】
例えば、「遷移２」（及び「遷移３」）の遷移条件（パラメータ値制約）として、「ｒｅｑＩｄ」と「遷移２」（及び「遷移３」）で受信されるリクエストＡＣＫに含まれるパラメータ「リクエストＩＤ」の値との差が１０以下でなければならないこと（関係の一例）が定義されてもよい。この場合、「リクエストＩＤ」が「０」に設定されたリクエストを送信する試験項目だけでも、それぞれ「リクエストＩＤ」が「０」、・・・、「１０」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「１０」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「１０」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスＡＣＫを送信するという１０通りの試験項目と、それぞれ「リクエストＩＤ」が「０」、・・・、「１０」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「０」、・・・、「１０」に設定され、かつ、「ｒｅｓｕｌｔ」が「１」に設定されたレスポンスを受信するという１０通りの試験項目とが生成されることになる。
【００３８】
あるいは、「遷移２」（及び「遷移３」）の遷移条件（パラメータ値制約）として、「ｒｅｑＩｄ」と「遷移２」（及び「遷移３」）で受信されるリクエストＡＣＫに含まれるパラメータ「リクエストＩＤ」の値とが一致してはならないこと（関係の一例）が定義されてもよい。この場合、「リクエストＩＤ」が「０」に設定されたリクエストを送信する試験項目だけでも、それぞれ「リクエストＩＤ」が「１」、・・・、「２５５」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「１」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスを受信し、それぞれ「リクエストＩＤ」が「１」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスＡＣＫを送信するという２５５通りの試験項目と、それぞれ「リクエストＩＤ」が「１」、・・・、「２５５」に設定されたリクエストＡＣＫを受信し、それぞれ「リクエストＩＤ」が「１」、・・・、「２５５」に設定され、かつ、「ｒｅｓｕｌｔ」が「１」に設定されたレスポンスを受信するという２５５通りの試験項目とが生成されることになる。
【００３９】
また、パラメータの中に、遷移条件（パラメータ値制約）に用いられないものがあってもよい。例えば、レスポンスのパラメータとして「リクエストＩＤ」、「ｒｅｓｕｌｔ」のほかに、「１」又は「２」の値をとり得る「ｆｌａｇ」というパラメータがあったとする。この「ｆｌａｇ」がいずれの状態遷移においても遷移条件（パラメータ値制約）に用いられていない場合、各試験項目において、レスポンスの「ｆｌａｇ」は「１」又は「２」に任意に設定される。このとき、レスポンスの「ｆｌａｇ」を「１」に設定した試験項目とレスポンスの「ｆｌａｇ」を「２」に設定した試験項目との両方が生成されても構わない。
【００４０】
図１に示したように、試験項目生成部１０３は、試験項目生成制御部１１１、シーケンスパターン抽出部１１２、シーケンス生成部１１３、実イベント生成部１１４、実メッセージ生成部１１５、無条件パラメータ値生成部１１６、条件付きパラメータ値生成部１１７を備える。
【００４１】
試験項目生成制御部１１１は、入力装置を介して行われるユーザの試験項目生成指示に基づき、シーケンスパターン抽出部１１２を用いてシーケンスパターンを処理装置により抽出する。試験項目生成制御部１１１は、抽出したシーケンスパターンを基に、シーケンス生成部１１３を用いて実イベントの系列を処理装置により生成する。試験項目生成制御部１１１は、生成した実イベントの系列を試験項目として試験項目記憶部１０４に保存する。
【００４２】
シーケンスパターン抽出部１１２は、プロトコル状態マシンにおいて、初期状態から到達可能な遷移パスをシーケンスパターンとして処理装置により抽出する。
【００４３】
シーケンス生成部１１３は、シーケンスパターン抽出部１１２により抽出されたシーケンスパターンに基づき、シーケンスパターンに含まれる遷移それぞれについて、実イベント生成部１１４を利用して実イベントを生成し、実イベントの系列（即ち、試験項目）を試験項目生成制御部１１１へ渡す。
【００４４】
実イベント生成部１１４は、あるシーケンスパターンにおける遷移と、その遷移に先行する別の遷移に対応する実イベントに基づき、実イベントを処理装置により生成する。その際、パラメータ値制約を実メッセージ生成部１１５に入力し、送受信メッセージを処理装置により生成する。また、実イベント生成部１１４は、時間制約をイベント発生時刻設定部（図示していない）に入力し、イベント発生時刻を得る。
【００４５】
実メッセージ生成部１１５は、パラメータ値制約の入力を受けて、パラメータ値制約に適したメッセージを生成する。パラメータ値制約に関連のないパラメータについては無条件パラメータ値生成部１１６を利用する。パラメータ値制約に関連のあるパラメータについては条件付きパラメータ値生成部１１７を利用する。
【００４６】
無条件パラメータ値生成部１１６は、パラメータ値制約に関連のないパラメータの値を生成する。
【００４７】
条件付きパラメータ値生成部１１７は、パラメータ値制約に関連するパラメータの値を生成する。
【００４８】
試験項目記憶部１０４は、試験項目生成制御部１１１により生成された試験項目を記憶装置に保持する。
【００４９】
図４は、メッセージフォーマット、プロトコル状態マシン、試験項目のデータ構造を示すＵＭＬ（Ｕｎｉｆｉｅｄ・Ｍｏｄｅｌｉｎｇ・Ｌａｎｇｕａｇｅ）クラス図である。
【００５０】
以下、各クラスについて説明する。
・プロトコル状態マシン：メッセージの送受信順序を規定したデータである。
・状態：「メッセージを送受信した後」、「メッセージを送受信する前」といった状態を表す。
・遷移：メッセージの送受信により、状態に変化を引き起こすものを表すデータである。
・遷移条件：メッセージの送受信イベントに対して遷移するための条件を表すデータである。
・パラメータ値制約：送受信するメッセージのパラメータ値に対する遷移条件を表すデータである。
・時間制約：メッセージの送受信イベント発生時刻に対する遷移条件を表すデータである。
・アクション：メッセージの送受信前又は送受信後に実行する処理を表すデータである。システム日時のように試験項目実行時に、動的に与えられる値を保存・設定する等の用途が考えられる。
・事前アクション：遷移する前に実行する処理である。
・事後アクション：遷移した後に実行する処理である。
・イベント：遷移を引き起こすメッセージ送受信イベントである。タイプとしては試験対象への送信（入力）、試験対象からの受信（出力）が少なくともある。
・シーケンスパターン：プロトコル状態マシンにおける初期状態からの経路を表す。
・メッセージフォーマット：存在するメッセージの種別や、各メッセージが保持するパラメータを少なくとも規定したデータである。
・メッセージ：メッセージ種別を表すデータである。
・パラメータ：メッセージに付随するパラメータを表す。
・値集合：パラメータが取り得る値を集合として持つ。
・型：値集合に名前を付加したデータである。
・試験項目：実イベントの系列を表すデータである。
・実イベント：試験項目実行時において実際にメッセージを送受信するイベントを表す。
・実メッセージ：試験項目実行時に実際に送受信するメッセージを表す。
・パラメータ値：試験項目実行時に実際に送受信するメッセージが持つパラメータの値を表す。
【００５１】
これらのデータのうち、プロトコル状態マシン記憶部１０１に記憶されるのは、プロトコル状態マシン、遷移、状態、遷移条件、時間制約、パラメータ値制約、アクション、事前アクション、事後アクション、イベント、メッセージである。メッセージフォーマット記憶部１０２に記憶されるのは、メッセージフォーマット、メッセージ、パラメータ、値集合、型である。試験項目記憶部１０４に記憶されるのは、試験項目、実イベント、実メッセージ、パラメータ値である。
【００５２】
図５は、試験項目生成装置１００のハードウェア構成の一例を示す図である。
【００５３】
図５において、試験項目生成装置１００は、コンピュータであり、ＬＣＤ９０１（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、ＣＤＤ９０５（Ｃｏｍｐａｃｔ・Ｄｉｓｃ・Ｄｒｉｖｅ）、プリンタ９０６といったハードウェアデバイスを備えている。これらのハードウェアデバイスはケーブルや信号線で接続されている。ＬＣＤ９０１の代わりに、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）、あるいは、その他の表示装置が用いられてもよい。マウス９０３の代わりに、タッチパネル、タッチパッド、トラックボール、ペンタブレット、あるいは、その他のポインティングデバイスが用いられてもよい。
【００５４】
試験項目生成装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を備えている。ＣＰＵ９１１は、処理装置の一例である。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、ＲＡＭ９１４（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）、通信ボード９１５、ＬＣＤ９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ９０６、ＨＤＤ９２０（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）と接続され、これらのハードウェアデバイスを制御する。ＨＤＤ９２０の代わりに、フラッシュメモリ、光ディスク装置、メモリカードリーダライタ又はその他の記憶媒体が用いられてもよい。
【００５５】
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、ＨＤＤ９２０は、不揮発性メモリの一例である。これらは、記憶装置の一例である。通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５は、入力装置の一例である。また、通信ボード９１５、ＬＣＤ９０１、プリンタ９０６は、出力装置の一例である。
【００５６】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）等に接続されている。通信ボード９１５は、ＬＡＮに限らず、ＩＰ−ＶＰＮ（Ｉｎｔｅｒｎｅｔ・Ｐｒｏｔｏｃｏｌ・Ｖｉｒｔｕａｌ・Ｐｒｉｖａｔｅ・Ｎｅｔｗｏｒｋ）、広域ＬＡＮ、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ・Ｔｒａｎｓｆｅｒ・Ｍｏｄｅ）ネットワークといったＷＡＮ（Ｗｉｄｅ・Ａｒｅａ・Ｎｅｔｗｏｒｋ）、あるいは、インターネットに接続されていても構わない。ＬＡＮ、ＷＡＮ、インターネットは、ネットワークの一例である。
【００５７】
ＨＤＤ９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。プログラム群９２３には、本実施の形態の説明において「〜部」として説明する機能を実行するプログラムが含まれている。プログラムは、ＣＰＵ９１１により読み出され実行される。ファイル群９２４には、本実施の形態の説明において、「〜データ」、「〜情報」、「〜ＩＤ（識別子）」、「〜フラグ」、「〜結果」として説明するデータや情報や信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」や「〜テーブル」の各項目として含まれている。「〜ファイル」や「〜データベース」や「〜テーブル」は、ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶される。ＲＡＭ９１４やＨＤＤ９２０等の記憶媒体に記憶されたデータや情報や信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理（動作）に用いられる。抽出、検索、参照、比較、演算、計算、制御、出力、印刷、表示といったＣＰＵ９１１の処理中、データや情報や信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００５８】
本実施の形態の説明において用いるブロック図やフローチャートの矢印の部分は主としてデータや信号の入出力を示す。データや信号は、ＲＡＭ９１４等のメモリ、ＦＤＤ９０４のフレキシブルディスク（ＦＤ）、ＣＤＤ９０５のコンパクトディスク（ＣＤ）、ＨＤＤ９２０の磁気ディスク、光ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｃ）、あるいは、その他の記録媒体に記録される。また、データや信号は、バス９１２、信号線、ケーブル、あるいは、その他の伝送媒体により伝送される。
【００５９】
本実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜工程」、「〜手順」、「〜処理」であってもよい。即ち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアのみ、あるいは、素子、デバイス、基板、配線といったハードウェアのみで実現されていても構わない。あるいは、「〜部」として説明するものは、ソフトウェアとハードウェアとの組み合わせ、あるいは、ソフトウェアとハードウェアとファームウェアとの組み合わせで実現されていても構わない。ファームウェアとソフトウェアは、プログラムとして、フレキシブルディスク、コンパクトディスク、磁気ディスク、光ディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。即ち、プログラムは、本実施の形態の説明で述べる「〜部」としてコンピュータを機能させるものである。あるいは、プログラムは、本実施の形態の説明で述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００６０】
以下では、試験項目生成装置１００の動作（本実施の形態に係る試験項目生成方法、本実施の形態に係る試験項目生成プログラムの処理手順）について説明する。
【００６１】
図６は、試験項目生成制御部１１１の動作を示すＵＭＬシーケンス図である。
【００６２】
以下、Ｓ０１〜Ｓ１０の各ステップについて説明する。
（Ｓ０１）試験項目生成制御部１１１が、ユーザから試験項目生成の要求を入力装置により受け付ける。
（Ｓ０２）試験項目生成制御部１１１が、空の試験項目集合ｘを処理装置により生成し、それをａとする。
（Ｓ０３）試験項目生成制御部１１１が、プロトコル状態マシン記憶部１０１から、プロトコル状態マシンを取得する。
（Ｓ０４）試験項目生成制御部１１１が、シーケンスパターン抽出部１１２へ、プロトコル状態マシンを渡し、シーケンスパターン集合を得る。
（Ｓ０５）試験項目生成制御部１１１が、シーケンスパターン集合で次のシーケンスパターンの有無を取得する。
（Ｓ０６）次シーケンスパターンがあれば、試験項目生成制御部１１１が、シーケンスパターン集合からシーケンスパターンを取得する。
（Ｓ０７）試験項目生成制御部１１１が、シーケンス生成部１１３へ、シーケンスパターンを渡し、試験項目集合を得て、それをｂとする。
（Ｓ０８）試験項目生成制御部１１１が、試験項目集合ａに、試験項目集合ｂの各試験項目を追加する。
（Ｓ０９）試験項目生成制御部１１１が、シーケンスパターン集合で次のシーケンスパターンの有無を取得する。あればＳ０６へ戻る。
（Ｓ１０）試験項目生成制御部１１１が、試験項目集合ａの試験項目を試験項目記憶部１０４へ保存する。
【００６３】
Ｓ０４において、シーケンスパターン抽出部１１２がプロトコル状態マシンからシーケンスパターンを抽出する方法として様々なものがある。例えば、プロトコル状態マシンにおける、状態をノード、遷移をエッジとみなすと、全体をグラフ構造とみなすことができる。そこで、初期状態を基点として幅優先探索や深さ優先探索のアルゴリズムを用いたシーケンスパターン抽出処理が行える。
【００６４】
図７は、シーケンス生成部１１３の動作を示すＵＭＬシーケンス図である。
【００６５】
以下、Ｓ１１〜Ｓ２５の各ステップについて説明する。
（Ｓ１１）シーケンス生成部１１３が、試験項目生成制御部１１１から、シーケンスパターンを得て、シーケンス生成処理を開始する。
（Ｓ１２）シーケンス生成部１１３が、空の試験項目集合ｙを処理装置により生成し、それをｃとする。
（Ｓ１３）シーケンス生成部１１３が、長さ０の試験項目ｄを処理装置により生成する。
（Ｓ１４）シーケンス生成部１１３が、試験項目集合ｃにｄを追加する。
（Ｓ１５）シーケンス生成部１１３が、シーケンスパターンで次遷移の有無を取得する。
（Ｓ１６）次の遷移があれば、シーケンス生成部１１３が、シーケンスパターンから次の遷移を得る。
（Ｓ１７）シーケンス生成部１１３が、空の試験項目集合ｚを処理装置により生成し、それをｅとする。
（Ｓ１８）シーケンス生成部１１３が、試験項目集合ｃで次試験項目の有無を取得する。
（Ｓ１９）次試験項目があれば、シーケンス生成部１１３が、試験項目集合ｃから試験項目ｆを得る。
（Ｓ２０）シーケンス生成部１１３が、実イベント生成部１１４に、試験項目ｆと遷移を渡して、実イベント集合を生成する。
（Ｓ２１）シーケンス生成部１１３が、試験項目ｆと実イベント集合の結合演算（例えば、直積演算）を処理装置により行い、演算結果を新たな試験項目集合ｇとする。なお、試験項目は実イベントの組み合わせとし、実イベント集合との結合演算により、試験項目の組み合わせ要素数は１つ増えるものとする。
（Ｓ２２）シーケンス生成部１１３が、結合演算結果の試験項目集合ｇの各試験項目を、試験項目集合ｅに追加する。
（Ｓ２３）シーケンス生成部１１３が、試験項目集合ｃで次試験項目の有無を取得する。次試験項目があれば、Ｓ１９へ戻る。
（Ｓ２４）シーケンス生成部１１３が、ｃが試験項目集合ｅを指すように処理装置により変更する。
（Ｓ２５）シーケンス生成部１１３が、シーケンスパターンで次遷移の有無を取得する。次の遷移があればＳ１６へ戻る。なければ試験項目集合ｃを返す。
【００６６】
図８は、実イベント生成部１１４の動作を示すＵＭＬシーケンス図である。
【００６７】
以下、Ｓ３１〜Ｓ４２の各ステップについて説明する。
（Ｓ３１）実イベント生成部１１４が、シーケンス生成部１１３から、試験項目と遷移を得て、実イベント集合生成処理を開始する。
（Ｓ３２）実イベント生成部１１４が、遷移からメッセージを取得する。
（Ｓ３３）実イベント生成部１１４が、遷移からパラメータ値制約を取得する。
（Ｓ３４）実イベント生成部１１４が、実メッセージ生成部１１５に、試験項目、メッセージ、パラメータ値制約を渡して、実メッセージ集合を得る。
（Ｓ３５）実イベント生成部１１４が、空の実イベント集合を処理装置により生成する。
（Ｓ３６）実イベント生成部１１４が、実メッセージ集合から次要素の有無を取得する。
（Ｓ３７）次要素があれば、実イベント生成部１１４が、実メッセージ集合から実メッセージを取得する。
（Ｓ３８）実イベント生成部１１４が、実イベントを処理装置により生成し、それをｈとする。
（Ｓ３９）実イベント生成部１１４が、実イベントｈと実メッセージを関連付ける。
（Ｓ４０）実イベント生成部１１４が、実イベントｈと遷移を関連付ける。
（Ｓ４１）実イベント生成部１１４が、実イベント集合に実イベントｈを追加する。
（Ｓ４２）実イベント生成部１１４が、実メッセージ集合から次要素の有無を取得する。次要素があればＳ３７へ戻る。なければ実イベント集合を返す。
【００６８】
図９は、実メッセージ生成部１１５の動作を示すＵＭＬシーケンス図である。
【００６９】
以下、Ｓ５１〜Ｓ６２の各ステップについて説明する。
（Ｓ５１）実メッセージ生成部１１５が、実イベント生成部１１４から、試験項目、メッセージ、パラメータ値制約を得て、実メッセージ生成処理を開始する。
（Ｓ５２）実メッセージ生成部１１５が、メッセージからパラメータリストを取得する。このとき、メッセージフォーマット記憶部１０２を経由する。
（Ｓ５３）実メッセージ生成部１１５が、空のパラメータ値リスト集合ｖを処理装置により生成し、それをｉとする。
（Ｓ５４）実メッセージ生成部１１５が、長さ０のパラメータ値リストｊを処理装置により生成する。
（Ｓ５５）実メッセージ生成部１１５が、パラメータ値リスト集合ｉに、パラメータ値リストｊを追加する。
（Ｓ５６）実メッセージ生成部１１５が、パラメータリストで、次パラメータの有無を取得する。
（Ｓ５７）実メッセージ生成部１１５が、次パラメータがあれば、パラメータリストからパラメータｋを取得する。
（Ｓ５８）実メッセージ生成部１１５が、パラメータ値制約を参照し、パラメータｋに対する制約があるかを検査する。
（Ｓ５９）検査結果がｆａｌｓｅであれば、実メッセージ生成部１１５が、無条件パラメータ値生成部１１６に、パラメータを渡し、パラメータ値集合を得る。
（Ｓ６０）検査結果がｔｒｕｅであれば、実メッセージ生成部１１５が、条件付きパラメータ値生成部１１７に、試験項目、パラメータ、パラメータ値制約を渡し、パラメータ値集合を得る。
（Ｓ６１）実メッセージ生成部１１５が、パラメータ値リスト集合ｉとパラメータ値集合の結合演算を処理装置により行い、その演算結果を表す新たなパラメータ値リスト集合を生成し、それをｉが指すようにする。
（Ｓ６２）実メッセージ生成部１１５が、パラメータリストで次パラメータの有無を取得する。次パラメータがあればＳ５７へ戻る。なければパラメータ値リスト集合ｉを返す。
【００７０】
Ｓ５９において、無条件パラメータ値生成部１１６がパラメータ値制約のないパラメータに対するパラメータ値を生成する方法として様々なものがある。例えば、特許文献１に記載されている、異常値、境界値、固定値を生成する方法がある。他に、ランダムな値を生成する方法もある。さらに、パラメータ値生成処理を実行する度に異なる値を生成する方法もある。例えば、最初に実行したときには０を生成し、２回目に実行したときには１を生成し、３回目に実行したときには２を生成する、といったようにカウントアップしていく方法もある。
【００７１】
Ｓ６０において、条件付きパラメータ値生成部１１７がパラメータ値制約の対象となっているパラメータに対して、パラメータ値を生成する方法として様々なものがある。例えば、パラメータ値制約をパラメータ値集合として規定し、その中から固定のもの、境界値、ランダムに選ぶもの等、様々なものが考えられる。また、パラメータ値制約はパラメータ名を用いた条件式で表し、取り得るパラメータ値の集合を選び、同じように選び出す方法等がある。なお、パラメータ値を呼び出された時点で決められなければ、無条件パラメータ値生成部１１６を呼び出すものとする。
【００７２】
以上のようにして生成された試験項目に含まれる実イベントは、ＰＣ（パーソナルコンピュータ）等の試験項目実行装置（図示していない）により順番に実行され、動作するものとする。
【００７３】
試験項目実行装置は、送信イベントの実行の際には、試験項目に含まれる、メッセージの通信を待機するように指示する情報に基づき、遷移条件（時間制約）を満たすまで待機する。試験項目実行装置は、（１）遷移条件（時間制約）を満たすまで待機した後、（２）事前アクションを実行し、（３）試験項目に含まれる、パラメータ値がセットされたメッセージを送信し、（４）事後アクションを実行する。なお、遷移条件（時間制約）、事前アクション、事後アクションの中に定義されていないものがあれば、該当するステップは省略されるものとする。例えば、事前アクションが定義されていなければ、（２）のステップは省略される。
【００７４】
また、試験項目実行装置は、受信イベントの実行の際には、メッセージを受信するまで待機する。試験項目実行装置は、（１）メッセージを受信した後、（２）遷移条件（時間制約）を検査し、（３）検査の結果、遷移条件（時間制約）が満たされていれば、遷移条件（パラメータ値制約）を検査し、（４）検査の結果、遷移条件（パラメータ値制約）が満たされていれば、事後アクションを実行する。遷移条件（時間制約）が満たされていなければ、試験失敗を報告する。なお、遷移条件（時間制約）のうち、最大待ち時間が存在するものがあれば、その最大待ち時間を超えた段階で試験失敗を報告する。遷移条件（時間制約）、遷移条件（パラメータ値制約）、事前アクション、事後アクションの中に定義されていないものがあれば、該当するステップは省略されるものとする。例えば、遷移条件（パラメータ値制約）が定義されていなければ、（３）のステップは省略される。
【００７５】
例えば、図２及び図３の例において、「リクエストＩＤ」が「０」に設定されたリクエストの送信→「リクエストＩＤ」が「０」に設定されたリクエストＡＣＫの受信→「リクエストＩＤ」が「０」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスの受信→「リクエストＩＤ」が「０」に設定され、かつ、「ｒｅｓｕｌｔ」が「０」に設定されたレスポンスＡＣＫの送信、という試験項目が生成されているものとする。
【００７６】
このとき、まず、試験項目実行装置は、試験項目に含まれる、「リクエストＩＤ」が「０」に設定されたリクエストを送信する。そして、事後アクションを実行する。具体的には、「ｒｅｑＩｄ」に「０」（リクエストの「リクエストＩＤ」の値）を設定し、「ｒｅｑＴｉｍｅ」に現在時刻を設定する。
【００７７】
次に、試験項目実行装置は、リクエストＡＣＫを受信すると、試験項目に含まれる情報（プロトコル状態マシンで定義されている算出方法を用いて、リクエストの送信の時刻を基に算出した時刻に、リクエストＡＣＫが送信されたかどうかを検査するように指示する情報）に従って、現在時刻が「ｒｅｑＴｉｍｅ」から１秒以内であるか検査する。検査の結果、現在時刻が「ｒｅｑＴｉｍｅ」から１秒以内でなければ試験失敗を報告する。現在時刻が「ｒｅｑＴｉｍｅ」から１秒以内であれば、リクエストＡＣＫの「リクエストＩＤ」が「０」（「ｒｅｑＩｄ」）であるか検査する。検査の結果、リクエストＡＣＫの「リクエストＩＤ」が「０」でなければ試験失敗を報告する。リクエストＡＣＫの「リクエストＩＤ」が「０」であれば、事後アクションを実行する。具体的には、「ａｃｋＴｉｍｅ」に現在時刻を設定する。
【００７８】
次に、試験項目実行装置は、レスポンスを受信すると、試験項目に含まれる情報（プロトコル状態マシンで定義されている算出方法を用いて、リクエストＡＣＫの受信の時刻を基に算出した時刻に、レスポンスが受信されたかどうかを検査するように指示する情報）に従って、現在時刻が「ａｃｋＴｉｍｅ」から１０秒以内であるか検査する。検査の結果、現在時刻が「ａｃｋＴｉｍｅ」から１０秒以内でなければ、レスポンスの「ｒｅｓｕｌｔ」が「１」、かつ、レスポンスの「リクエストＩＤ」が「０」（「ｒｅｑＩｄ」）であるか検査する。検査の結果、レスポンスの「ｒｅｓｕｌｔ」が「１」でないか、あるいは、レスポンスの「リクエストＩＤ」が「０」でなければ試験失敗を報告する。一方、現在時刻が「ａｃｋＴｉｍｅ」から１０秒以内であれば、レスポンスの「ｒｅｓｕｌｔ」が「０」、かつ、レスポンスの「リクエストＩＤ」が「０」（「ｒｅｑＩｄ」）であるか検査する。検査の結果、レスポンスの「ｒｅｓｕｌｔ」が「０」でないか、あるいは、レスポンスの「リクエストＩＤ」が「０」でなければ試験失敗を報告する。レスポンスの「ｒｅｓｕｌｔ」が「０」、かつ、レスポンスの「リクエストＩＤ」が「０」であれば、事後アクションを実行する。具体的には、「ｒｅｃＮｏ」に「１」（ここでは、一例として、レスポンスの「受付番号」の値を「１」とする）を設定し、「ｒｅｓＴｉｍｅ」に現在時刻を設定する。
【００７９】
次に、試験項目実行装置は、試験項目に含まれる情報（プロトコル状態マシンで定義されている算出方法を用いて、レスポンスの受信の時刻を基に算出した時刻まで、レスポンスＡＣＫの送信を待機するように指示する情報）に従って、「ｒｅｓＴｉｍｅ」から１秒経過するまで待機する。その後、試験項目に含まれる情報（プロトコル状態マシンで定義されている決定方法を用いて、レスポンスの「受付番号」の値を基に決定した値を、レスポンスＡＣＫの「受付番号」に対し設定するように指示する情報）に従って、事前アクションを実行する。具体的には、試験項目に含まれる、「ｒｅｓｕｌｔ」が「０」に設定され、「リクエストＩＤ」が「０」に設定されたレスポンスＡＣＫの「受付番号」を「１」（「ｒｅｃＮｏ」）に設定する。そして、そのレスポンスＡＣＫを送信する。
【００８０】
以上のように、本実施の形態によれば、送受信イベント間のパラメータ値の制約や送受信タイミングの制約に適合した試験項目のみを生成することができるため、不要な試験項目の実施時間を削減し、試験作業を効率化することができる。
【符号の説明】
【００８１】
１００  試験項目生成装置、１０１  プロトコル状態マシン記憶部、１０２  メッセージフォーマット記憶部、１０３  試験項目生成部、１０４  試験項目記憶部、１１１  試験項目生成制御部、１１２  シーケンスパターン抽出部、１１３  シーケンス生成部、１１４  実イベント生成部、１１５  実メッセージ生成部、１１６  無条件パラメータ値生成部、１１７  条件付きパラメータ値生成部、９０１  ＬＣＤ、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信ボード、９２０  ＨＤＤ、９２１  オペレーティングシステム、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群。
【図１】
2012138021.tif 000003
【図２】
2012138021.tif 000004
【図３】
2012138021.tif 000005
【図４】
2012138021.tif 000006
【図５】
2012138021.tif 000007
【図６】
2012138021.tif 000008
【図７】
2012138021.tif 000009
【図８】
2012138021.tif 000010
【図９】
2012138021.tif 000011