以下に、本願の開示するシナリオ作成プログラム、シナリオ作成装置およびシナリオ作成方法の実施例を図面に基づいて詳細に説明する。なお、この実施例により本願の開示するシナリオ作成プログラム、シナリオ作成装置およびシナリオ作成方法が限定されるものではない。
[実施例1における情報処理システムの構成]
まず、図1を用いて、実施例1に係るシナリオ作成装置100を含む情報処理システム1の構成について説明する。図1は、実施例1における情報処理システム1の構成例を示す図である。図1に示した例において、情報処理システム1は、負荷分散装置12と、Webサーバ13と、APサーバ14と、DBサーバ15とを有する。なお、図1に示した例において、Webサーバ13は、複数台存在するものとする。
図1に示すように、負荷分散装置12、Webサーバ13、APサーバ14、DBサーバ15は、それぞれルータ22〜25を介して接続されている。また、図1に示した例において、Webサーバ13とAPサーバ14との間に、ファイアーウォール32が設置されている。また、図1に示した例において、テスト端末11は、ルータ21およびネットワーク31を介して負荷分散装置12と接続されている。また、図1に示した例において、シナリオ作成装置100は、APサーバ14および負荷分散装置12と接続されている。
テスト端末11は、テスト担当者によって操作されるパーソナルコンピュータ等の端末装置である。負荷分散装置12は、テスト端末11からリクエストを受信し、受信したリクエストをWebサーバ13へ転送する。例えば、負荷分散装置12は、複数のWebサーバ13の負荷が均等になるようにリクエストを転送する。Webサーバ13は、テスト端末11からのリクエストに応じて、HTML(HyperText Markup Language)データや画像データなどを含むレスポンスをテスト端末11へ送信する。
APサーバ14は、情報処理システム1によって提供される各種サービスを実現するためのアプリケーションを有する。図1に示した例において、APサーバ14は、Webサーバ13からリクエストを受信し、受信したリクエストに応じて各種処理を行う。具体的には、APサーバ14は、DBサーバ15へリクエストを送信することにより、DBサーバ15から各種データを取得したり、DBサーバ15に保持されている各種データを更新したりする。
DBサーバ15は、各種情報を記憶する。図1に示した例において、DBサーバ15は、APサーバ14からデータベースへのアクセス要求を受信し、データベースへのアクセスを制御する。具体的には、DBサーバ15は、APサーバ14から受信したリクエストに応じて、データベースを参照または更新し、参照結果や更新結果を含むレスポンスをAPサーバ14へ送信する。
このような構成の下、実施例1に係るシナリオ作成装置100は、テスト担当者によって情報処理システム1のテストが実施された場合に、かかるテストを再現するためのテスト用のシナリオを作成する。
具体的には、シナリオ作成装置100は、テスト担当者によって情報処理システム1のテストが実施された場合に、テスト端末11や各サーバ間で送受される各種メッセージを収集する。図1に示した例では、シナリオ作成装置100は、負荷分散装置12が接続されているルータ22からポートモニタリング(キャプチャと表現される場合もある)機能を利用して、テスト端末11と負荷分散装置12との間で送受されるメッセージや、負荷分散装置12とWebサーバ13との間で送受されるメッセージを収集する。また、シナリオ作成装置100は、APサーバ14が接続されているルータ24からポートモニタリング機能を利用して、Webサーバ13とAPサーバ14との間で送受されるメッセージや、APサーバ14とDBサーバ15との間で送受されるメッセージを収集する。
続いて、シナリオ作成装置100は、収集したメッセージのうち、関連するメッセージを関連付けて記憶する。ここで言う「関連するメッセージ」とは、所定のリクエストやレスポンスに応じて各サーバ間で送受されたリクエストやレスポンスを示す。
例えば、負荷分散装置12からWebサーバ13へリクエストReq1が送信され、かかるリクエストReq1に応じてWebサーバ13からAPサーバ14へリクエストReq2が送信された場合、リクエストReq1およびReq2は関連する。また、リクエストReq2に応じてAPサーバ14からDBサーバ15へリクエストReq3が送信され、かかるリクエストReq3に応じてDBサーバ15からAPサーバ14へレスポンスRes1が送信されたものとする。かかる場合、リクエストReq1およびReq2およびReq3、レスポンスRes1は関連する。
なお、以下では、テスト端末11から負荷分散装置12へリクエストが送信されてから、かかるリクエストに応じて負荷分散装置12からテスト端末11へレスポンスが送信されるまでの間を「トランザクション」と呼ぶこととする。また、以下では、シナリオ作成装置100によって関連付けされた同一トランザクション内のメッセージ群を「業務モデル」と呼ぶこととする。
続いて、シナリオ作成装置100は、生成した業務モデルを、DBサーバ15へアクセスを開始した時刻の昇順にソートする。そして、シナリオ作成装置100は、ソートした業務モデルに基づいてシナリオを作成する。
図24に示した例を用いて説明すると、シナリオ作成装置100は、テストT11が実施された場合に、ステップS11、S12、S17、S18、S21、S22において送受されたメッセージを収集する。そして、シナリオ作成装置100は、収集したメッセージを関連付けて業務モデルM1を生成する。また、シナリオ作成装置100は、テストT12が実施された場合に、ステップS13、S14、S15、S16、S19、S20において送受されたメッセージを収集し、業務モデルM2を生成する。
そして、シナリオ作成装置100は、テストT11よりもテストT12の方が先にDBサーバ15にアクセスを開始しているので、業務モデルM2、業務モデルM1の順にソートする。そして、シナリオ作成装置100は、ソートした業務モデルM2、M1に基づいてシナリオを作成する。
このようにして作成されたシナリオは、テストT11、テストT12の順にテストを実施するテストデータとなる。具体的には、テスト端末11によって上記シナリオが実行された場合、まず、業務モデルM2が実行され、続いて、業務モデルM1が実行される。すなわち、業務モデルM1は、業務モデルM2によってDBサーバ15にアクセスされた後に、DBサーバ15にアクセスすることになる。このため、テスト端末11は、情報処理システム1が正常に動作している場合に上記シナリオを実行すると、テストT11およびT12が行われた際に受信したレスポンスと同一のレスポンスをWebサーバ13から受信することができる。このため、テスト端末11は、シナリオ作成装置100によって生成されたシナリオを用いて、テストの合否判定を正しく行うことができる。
このように、実施例1に係るシナリオ作成装置100は、各サーバ間で送受されるメッセージを収集し、同一のトランザクション内で送受されたメッセージを関連付けて業務モデルを生成する。そして、シナリオ作成装置100は、生成した業務モデルを、DBサーバ15へのアクセス開始時刻の昇順にソートすることによりシナリオを作成する。
すなわち、シナリオ作成装置100は、テスト担当者によるテスト実施時におけるDBサーバ15へのアクセス順序と、シナリオ実行時におけるDBサーバ15へのアクセス順序とが同一になるように、シナリオを生成する。これにより、シナリオ作成装置100によって生成されたシナリオは、テストの合否判定を正しく行うことができる。
なお、実施例1に係るシナリオ作成装置100は、上述した処理以外にも種々の処理を行う。例えば、シナリオ作成装置100は、業務モデルをソートした後に、並行して実施しても問題が発生しない業務モデルを多重化してシナリオを作成する。一例を挙げて説明すると、図24に示した例において、テストT11においてアクセスされるデータベースのテーブルと、テストT12においてアクセスされるテーブルとが異なる場合、テストT11とテストT12とは、並行して実施されても問題ない。かかる場合、シナリオ作成装置100は、テストT11に対応する業務モデルと、テストT12に対応する業務モデルとを多重化してシナリオを作成する。以下に、シナリオ作成装置100の構成を説明するとともに、かかる多重化処理等を含めた各種処理について具体的に説明する。
[実施例1に係るシナリオ作成装置の構成]
次に、図2を用いて、実施例1に係るシナリオ作成装置100の構成について説明する。図2は、実施例1に係るシナリオ作成装置100の構成例を示す図である。図2に示した例において、シナリオ作成装置100は、インタフェース(以下、「IF」と言う)部110と、入力部120と、出力部130と、制御部140と、業務モデル記憶部151と、シナリオ記憶部152とを有する。
IF部110は、外部装置との間で各種データを送受する。図1に示した例では、シナリオ作成装置100のIF部110は、負荷分散装置12が接続されているルータ22およびAPサーバ14が接続されているルータ24からポートモニタリング機能を利用して、各サーバ間で送受されるメッセージを受信する。
入力部120は、各種情報や操作指示を入力するための入力デバイスであり、例えば、キーボードやマウスである。テスト担当者は、入力部120を操作することにより、テストを行う。出力部130は、各種情報を出力する出力デバイスであり、例えば、液晶ディスプレイやスピーカである。テスト担当者は、例えば、出力部130に表示される情報を確認することで、テストの合否判定を行う。
制御部140は、制御プログラム、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、シナリオ作成装置100を全体制御する。実施例1における制御部140は、図2に示した例のように、収集部141と、関連付け部142と、ソート部143と、入替部144と、多重化部145と、シナリオ作成部146とを有する。
収集部141は、テスト担当者によって情報処理システム1の動作検証が行われている場合に、各サーバ間で送受されるメッセージを収集する。具体的には、収集部141は、テスト端末11によって負荷分散装置12へリクエストが送信された場合に、負荷分散装置12やWebサーバ13などのサーバ間で送受される各種メッセージを、IF部110を介して収集する。
図3を用いて、収集部141によるメッセージ収集処理を説明する。図3は、収集部141によるメッセージ収集処理の一例を示す図である。図3に示した例では、テスト端末11a〜11cを用いてテストが行われている。図3に示すように、テスト端末11a〜11cを用いてテストが行われている場合、テスト端末11a〜11cから負荷分散装置12へリクエストが送信される。これにより、負荷分散装置12とWebサーバ13との間や、Webサーバ13とAPサーバ14との間や、APサーバ14とDBサーバ15との間において、リクエストやレスポンスが送受される。収集部141は、各サーバ間で送受されるリクエストやレスポンスを収集し、キャプチャデータとして保持する。
ここで、図4を用いて、収集部141によって収集されるメッセージについて説明する。図4は、収集部141によって収集されるメッセージの一例を示す図である。図4に示した例のように、収集部141は、負荷分散装置12からWebサーバ13へ送信されるリクエストとして、例えば、HTTPリクエストや、HTTPリクエストが送信された時刻(タイムスタンプ)などを収集する。また、収集部141は、Webサーバ13から負荷分散装置12へ送信されるレスポンスとして、例えば、HTTPレスポンスや、HTTPレスポンスが送信されたタイムスタンプ、HTTPステータスコードなどを収集する。
また、図4に示すように、収集部141は、Webサーバ13からAPサーバ14へ送信されるリクエストとして、例えば、アプリケーションを識別する情報を含むメッセージや、タイムスタンプなどを収集する。また、収集部141は、APサーバ14からWebサーバ13へ送信されるレスポンスとして、例えば、戻り値や、タイムスタンプなどを収集する。
また、図4に示すように、収集部141は、APサーバ14からDBサーバ15へ送信されるリクエストとして、例えば、SQL文や、制御文、タイムスタンプなどを収集する。また、収集部141は、DBサーバ15からAPサーバ14へ送信されるレスポンスとして、例えば、SQLの実行結果や、戻り値、タイムスタンプなどを収集する。
図2の説明に戻って、関連付け部142は、収集部141によって収集されたメッセージのうち、同一トランザクション内で送受されたメッセージを関連付けて業務モデルを生成する。また、関連付け部142は、生成した業務モデルに対して、DBサーバ15への処理態様を識別するための属性を付与する。そして、関連付け部142は、属性を付与した業務モデルを業務モデル記憶部151に記憶させる。
図5および図6を用いて、関連付け部142による関連付け処理について説明する。図5および図6は、関連付け部142による関連付け処理の一例を示す図である。図5に例示した各メッセージは、同一トランザクション内で送受されたものとする。かかる場合、関連付け部142は、負荷分散装置12とWebサーバ13との間で送受されたメッセージと、Webサーバ13とAPサーバ14との間で送受されたメッセージと、APサーバ14とDBサーバ15との間で送受されたメッセージとを関連付ける。
図6に示した例を用いて説明する。図6に示した例では、テスト端末11は、負荷分散装置12を介して、Webサーバ13へリクエストReq11を送信している。また、Webサーバ13は、負荷分散装置12を介して、テスト端末11へレスポンスRes11を送信している。図6に示した例では、テスト端末11からリクエストReq11が送信されてから、テスト端末11へレスポンスRes11が送信されるまでの間が1個のトランザクションとなる。
かかる場合に、関連付け部142は、図6に示したリクエストReq11〜Req16と、レスポンスRes11〜Res16を関連付けて業務モデルを生成する。そして、関連付け部142は、生成した業務モデルに属性を付与して業務モデル記憶部151に記憶させる。
ここで、業務モデルに付与される属性について補足説明する。実施例1において、関連付け部142は、DBサーバ15に対して更新処理を行う業務モデルに対して、属性「更新系」を付与する。また、関連付け部142は、DBサーバ15に対して更新処理を行わず、かつ、共有ロックを伴う参照処理を行う業務モデルに対して、属性「参照系(共有)」を付与する。また、関連付け部142は、DBサーバ15に対して共有ロックを伴わない参照処理だけを行う業務モデルに対して、属性「参照系(ロックなし)」を付与する。
例えば、業務モデルM3において更新処理と参照処理とが行われる場合、関連付け部142は、業務モデルM3に属性「更新系」を付与する。また、例えば、業務モデルM4において共有ロックを伴う参照処理と、共有ロックを伴わない参照処理とが行われる場合、関連付け部142は、業務モデルM4に属性「参照系(共有)」を付与する。また、例えば、業務モデルM5において共有ロックを伴わない参照処理だけが行われる場合、関連付け部142は、業務モデルM5に属性「参照系(ロックなし)」を付与する。
図7−1〜図7−3を用いて、上述した「更新系」、「参照系(共有ロック)」、「参照系(ロックなし)」について簡単に説明する。図7−1は、更新処理時の排他制御を説明するための図である。また、図7−2は、共有ロックを伴う参照処理時の排他制御を説明するための図である。また、図7−3は、共有ロックを伴わない参照処理時の排他制御を説明するための図である。
図7−1に示すように、任意のトランザクションは、テーブルに対して更新処理を行う場合、排他ロック(EXCLUSIVE LOCK)を取得する。実施例1では、任意のトランザクションによって排他ロックが取得されている場合、他のトランザクションは、同一のテーブルに対して、参照処理および更新処理を行うことができないものとする。
また、図7−2に示すように、任意のトランザクションは、テーブルに対して参照処理を行う場合、共有ロック(SHARED LOCK)を取得することができる。実施例1では、任意のトランザクションによって共有ロックが取得されている場合、他のトランザクショは、同一のテーブルに対して、参照処理を行うことができるが、更新処理を行うことができないものとする。
また、図7−3に示すように、任意のトランザクションは、テーブルに対して参照処理を行う場合、ロックを取得しないこともできる。実施例1では、任意のトランザクションによってロックが取得されずに参照処理が行われている場合、他のトランザクションは、同一のテーブルに対して、参照処理および更新処理を行うことができるものとする。
図2の説明に戻って、ソート部143は、関連付け部142によって生成された業務モデルを、DBサーバ15へのアクセスを開始した時刻の昇順にソートする。具体的には、ソート部143は、業務モデル記憶部151から業務モデルを取得して、取得した業務モデルを結合する。そして、ソート部143は、結合した業務モデルを、DBサーバ15へのアクセス開始時刻の昇順にソートする。
図8−1および図8−2を用いて、ソート部143によるソート処理について説明する。図8−1および図8−2は、ソート部143によるソート処理の一例を示す図である。図8−1の上段は、3個の業務モデルM11〜M13を示している。これは、1回のテストにおいて3個のトランザクションが発生した例を示している。また、図8−1の下段は、2個の業務モデルM21およびM22を示している。これは、1回のテストにおいて2個のトランザクションが発生した例を示している。
なお、図8−1に示した例において、業務モデルの矩形内に示した「(X表更新)」は、業務モデルにおいて、テーブルXに対して更新処理が行われることを示している。また、業務モデルの矩形内に示した「(X表共有)」は、業務モデルにおいて、テーブルXに対して共有ロックを伴う参照処理が行われることを示している。また、業務モデルの矩形内に示した「(X表参照)」は、業務モデルにおいて、テーブルXに対して共有ロックを伴わない参照処理が行われることを示している。また、業務モデルの矩形内に示した「開始」よりも後の部分に示した数値は、DBサーバ15へのアクセスを開始した時刻を示し、「終了」よりも後の部分に示した数値は、DBサーバ15へのアクセスを終了した時刻を示す。
すなわち、図8−1に示した業務モデルM11は、テーブルAに対して参照処理を行い、「12時00分00秒」にDBサーバ15へのアクセスを開始し、「12時00分01秒」にDBサーバ15へのアクセスを終了したことを示している。また、図8−1に示した業務モデルM12は、テーブルBに対して更新処理を行い、「12時02分00秒」にDBサーバ15へのアクセスを開始し、「12時02分01秒」にDBサーバ15へのアクセスを終了したことを示している。
ここで、業務モデル記憶部151に、図8−1に示した業務モデルM11〜M13、M21およびM22が記憶されているものとする。かかる場合に、ソート部143は、図8−2に示す例のように、業務モデル記憶部151から取得した業務モデルM11〜M13、M21およびM22をマージした後に、業務モデルM11、M12、M21、M22、M13の順にソートする。これにより、業務モデルM11、M12、M21、M22、M13は、DBサーバ15へのアクセス開始時刻の昇順に並び替えられる。
図2の説明に戻って、入替部144は、後述する多重化部145によって多重化処理が効率的に行われることを目的として、属性が同一である業務モデル同士が隣接するように、ソート部143によってソートされた業務モデルの順序を入れ替える。具体的には、入替部144は、参照系の業務モデル同士を隣接させ、かつ、更新系の業務モデル同士を隣接させる。このとき、入替部144は、更新系の業務モデルの後に、かかる更新系の業務モデルによって更新されるテーブルを参照する参照系の業務モデルが配置されている場合には、更新系の業務モデルと参照系の業務モデルとの順序を入れ替えない。
実施例1において、入替部144は、隣接交換法を用いて、隣り合う2個の業務モデルを比較しながら、業務モデルの順序を入れ替える。具体的には、入替部144は、アクセス開始時刻が現在時刻に近い業務モデルから入替処理を行うものとする。例えば、入替部144は、図8−2に示した業務モデルに対して入替処理を行う場合、まず、最後尾に配置されている業務モデルM13と、最後から2番目に配置されている業務モデルM22とを比較する。続いて、入替部144は、最後から2番目と3番目に配置されている業務モデルを比較し、続いて、最後から3番目と4番目に配置されている業務モデルを比較する。
図9に、入替部144によって業務モデルが入れ替えられる条件を示す。図9の例は、参照系の業務モデルを、更新系の業務モデルよりも前に配置する条件を示している。図9に示した例において、「現在の業務モデル」は、比較対象の2個の業務モデルのうち、後方に配置されている業務モデルを示し、「直前の業務モデル」は、比較対象の2個の業務モデルのうち、前方に配置されている業務モデルを示す。言い換えれば、「現在の業務モデル」は、比較対象の2個の業務モデルのうち、現在時刻に近い業務モデルを示す。また、図9に示した例において、「参照先/更新先テーブル」は、「現在の業務モデル」と、「直前の業務モデル」とにおいて参照または更新されるテーブルが同一であるか否かを示す。
例えば、入替部144は、図9に示すように、現在の業務モデルの属性が「更新系」である場合、直前の業務モデルの属性に関わらず、比較対象の業務モデルを入れ替えない。これは、上述したように、図9に示した例は、参照系の業務モデルを、更新系の業務モデルよりも前に配置するための条件であるからである。
また、例えば、入替部144は、図9に示すように、現在の業務モデルの属性が「参照系」であり、直前の業務モデルの属性が「更新系」である場合、双方の業務モデルの「参照先/更新先テーブル」が同一であるか否かを判定する。そして、双方の業務モデルの更新先テーブルが同一である場合、入替部144は、双方の業務モデルを入れ替えない。
これは、同一のテーブルに対してアクセスする業務モデルが「更新系、参照系」の順に整列している場合、双方の業務モデルは、かかる順に処理することが求められるからである。例えば、テーブルAに対して更新処理を行う業務モデルM6の後に、テーブルAに対して参照処理を行う業務モデルM7が配置されている場合、業務モデルM7は、業務モデルM6によってテーブルAが更新された後に実行されることが求められる。したがって、入替部144は、上記例の場合には、業務モデルM6およびM7の順序を入れ替えない。
一方、上記例において、双方の業務モデルの「参照先/更新先テーブル」が異なる場合、入替部144は、双方の業務モデルを入れ替える。これは、上述したように、実施例1における入替部144は、参照系の業務モデルを、更新系の業務モデルよりも前に配置するからである。
ここで、図10を用いて、入替部144による入替処理について説明する。図10は、入替部144による入替処理の一例を示す図である。図10の上段は、ソート部143によってソートされた業務モデルの例を示す。なお、図10の上段に示した業務モデルは、図8−2に示した業務モデルと同様である。入替部144は、図10の上段に例示した業務モデルを、図9に示した条件にしたがって入れ替える。具体的には、入替部144は、図10の下段に示すように、業務モデルM11、M21、M12、M22、M13の順に入れ替える。このように、入替部144は、図9に示した条件にしたがって、ソート部143によってソートされた業務モデルの順序を入れ替える。
図2の説明に戻って、多重化部145は、入替部144によって入替処理が行われた業務モデルを多重化する。具体的には、多重化部145は、入替部144によって入替処理が行われた業務モデルのうち、並行して実行してもよい業務モデルを並列に並び替える。実施例1において、多重化部145は、隣接交換法を用いて、隣り合う2個の業務モデルを比較しながら、業務モデルの順序を入れ替える。具体的には、多重化部145は、入替部144によって入替処理が行われた業務モデルのうち、後方に配置されている業務モデルから多重化処理を行う。
図11に、多重化部145によって業務モデルが多重化される条件を示す。多重化部145は、図11に示した条件にしたがって、入替部144によって入れ替えされた業務モデルを多重化する。
例えば、多重化部145は、図11に示すように、比較対象の2個の業務モデルの「参照先/更新先テーブル」が異なる場合に、かかる2個の業務モデルを並列に並び替える。これは、2個の業務モデルの「参照先/更新先テーブル」が異なる場合、かかる2個の業務モデルを並行して実行してもよいからである。
また、多重化部145は、図11に示すように、比較対象の2個の業務モデルが共に「参照系」である場合に、「参照先/更新先テーブル」が同一であるか否かに関わらず、比較対象の2個の業務モデルを並列に並び替える。これは、2個の業務モデルが「参照系」である場合、「参照先/更新先テーブル」が同一であるか否かに関わらず、かかる2個の業務モデルを並行して実行してもよいからである。
ここで、図12−1を用いて、多重化部145による多重化処理について説明する。図12−1は、多重化部145による多重化処理の一例を示す図である。図12−1の上段は、入替部144によって入替処理が行われた業務モデルの例を示す。なお、図12−1の上段に示した業務モデルは、図10の下段に示した業務モデルと同様である。
多重化部145は、図12−1の上段に例示した業務モデルを、図11に示した条件にしたがって入れ替える。具体的には、多重化部145は、図12−1の下段に示すように、業務モデルM11、M21およびM12を並列に並び替え、また、業務モデルM22およびM13を並列に並び替える。図12−1の下段に示した業務モデルは、業務モデルM11、M21およびM12が並行に実行され、業務モデルM22およびM13が並行に実行されることを示している。
また、多重化部145は、上述した多重化処理の他に、同期処理を行うことを示す情報(以下、「同期情報」と言う)を付与する処理を行う。具体的には、多重化部145は、図11の備考に示した条件を満たす場合に、同期情報を付与する処理を行う。
かかる処理について例を挙げて説明する。例えば、隣接する2個の業務モデルが、「業務モデルM8、業務モデルM9」の順に配置されているものとする。そして、業務モデルM8が参照系であり、業務モデルM9が更新系であるものとする。かかる場合に、多重化部145は、業務モデルM8の実行が終了した後に、業務モデルM9が実行されるように、業務モデルM8と業務モデルM9との間に、同期情報を付与する。これは、参照系の業務モデルM8が実行されている途中で、業務モデルM9が実行されることを防止するためである。
図12−2を用いて、多重化部145による同期情報付与処理について説明する。図12−2は、多重化部145による同期情報付与処理の一例を示す図である。図12−2の上段は、入替部144によって入替処理が行われた業務モデルの例を示す。なお、図12−2に示した業務モデルのうち、業務モデルM31〜M37およびM39は、全て同一のテーブルに対して参照または更新を行うものとする。また、すなわち、図12−2に示した業務モデルのうち、業務モデルM38は、業務モデルM31〜M37およびM39と異なるテーブルに対して更新処理を行う。
かかる場合に、多重化部145は、図11に示した条件にしたがって、図12−2の上段に例示した業務モデルを、図12−2の下段に示すように、業務モデルを並び替える。そして、多重化部145は、業務モデルM31〜M33と、業務モデルM34との間に、同期情報を付与する。すなわち、多重化部145は、業務モデルM31〜M33の実行が終了するまで、業務モデルM34を実行させないことを示す同期情報を付与する。これにより、多重化部145は、業務モデルM31〜M33の実行が終了する前に、業務モデルM34が実行されることを防止することができる。
また、多重化部145は、業務モデルM35およびM36と、業務モデルM37およびM38との間に、同期情報を付与する。これにより、多重化部145は、業務モデルM35およびM36の実行が終了する前に、業務モデルM37およびM38が実行されることを防止することができる。
図2の説明に戻って、シナリオ作成部146は、多重化部145によって多重化処理が行われた業務モデルに基づいてシナリオを作成し、作成したシナリオをシナリオ記憶部152に格納する。シナリオ作成部146によって作成されたシナリオは、テスト担当者によってテストが行われた際にDBサーバ15へアクセスされた順序と同一の順序でDBサーバ15へアクセスを行う。このため、シナリオ作成部146によって作成されたシナリオは、テストの合否判定を正しく行うことができる。また、シナリオ作成部146によって作成されたシナリオは、図11に示した条件を満たす業務モデルが並行して実行される。このため、シナリオ作成部146によって作成されたシナリオは、テストを実行する時間を短くすることができる。
なお、シナリオ作成部146は、テストを実行する時間を短くすることが求められていない場合などには、ソート部143によってソートされた業務モデルに基づいてシナリオを作成してもよい。
[シナリオ作成処理手順]
次に、図13を用いて、シナリオ作成装置100によるシナリオ作成処理の手順について説明する。図13は、シナリオ作成装置100によるシナリオ作成処理手順を示すフローチャートである。
図13に示すように、テスト担当者によって情報処理システム1の動作検証が行われている場合に(ステップS11肯定)、シナリオ作成装置100の収集部141は、各サーバ間で送受されるメッセージを収集する(ステップS12)。
続いて、関連付け部142は、収集部141によって収集されたメッセージのうち、同一トランザクション内で送受されたメッセージを関連付けて業務モデルを生成する(ステップS13)。
続いて、ソート部143は、ソート処理を行う(ステップS14)。具体的には、ソート部143は、関連付け部142によって生成された業務モデルを、DBサーバ15へのアクセスを開始した時刻の昇順にソートする。なお、ソート部143によるソート処理については、図14を用いて後述する。
続いて、入替部144は、入替処理を行う(ステップS15)。具体的には、入替部144は、属性が同一である業務モデル同士が隣接するように、ソート部143によってソートされた業務モデルの順序を入れ替える。なお、入替部144による入替処理については、図15および図16を用いて後述する。
続いて、多重化部145は、多重化処理を行う(ステップS16)。具体的には、多重化部145は、入替部144によって入替処理が行われた業務モデルを多重化する。なお、多重化部145による多重化処理については、図17〜図21を用いて後述する。
そして、シナリオ作成部146は、多重化部145によって多重化処理が行われた業務モデルに基づいてシナリオを作成し、作成したシナリオをシナリオ記憶部152に格納する(ステップS17)。
[ソート処理手順]
次に、図14を用いて、図13のステップS14に示したソート処理の手順について説明する。図14は、ソート部143によるソート処理手順を示すフローチャートである。なお、以下では、図8−1および図8−2に示した例を用いながら説明する。
まず、図14に示した例において、ソート部143は、業務モデル記憶部151に記憶されている業務モデルを結合した後に、結合した業務モデルを配列Z(i)に代入する。例えば、業務モデル記憶部151が図8−1に示した状態である場合、ソート部143は、Z(1)〜Z(5)に、それぞれ業務モデルM22、M21、M13、M12、M11を代入する。
そして、ソート部143は、図14に示すように、変数nに要素数を代入する(ステップS101)。ここで言う「要素数」とは、業務モデル記憶部151に記憶されている業務モデルの数を示す。例えば、業務モデル記憶部151が図8−1に示した状態である場合、業務モデルの数は「5」であるので、ソート部143は、nに「5」を代入する。
続いて、ソート部143は、条件「n≦1」が満たされるまで、ステップS102〜S110における処理手順を繰り返し行う。ここでは、「n=5」であるため、条件「n≦1」を満たしていない。したがって、ソート部143は、変数iに「1」を代入する(ステップS103)。
そして、ソート部143は、条件「i=n」が満たされるまで、ステップS104〜S108における処理手順を繰り返し行う。ここでは、「n=5」、かつ、「i=1」であるので、条件「i=n」を満たしていない。したがって、ソート部143は、Z(i)の業務モデルにおけるDBサーバ15へのアクセス開始時刻と、Z(i+1)の業務モデルにおけるDBサーバ15へのアクセス開始時刻とを比較する(ステップS105)。
そして、Z(i)におけるアクセス開始時刻が、Z(i+1)におけるアクセス開始時刻以下である場合、ソート部143は、Z(i)に代入されている業務モデルと、Z(i+1)に代入されている業務モデルとを入れ替える(ステップS106)。具体的には、ソート部143は、図14に示すように、Z(i)に代入されている業務モデルを、ワーク変数wに代入した後に、Z(i+1)に代入されている業務モデルをZ(i)に代入し、ワーク変数wに代入した業務モデルをZ(i+1)に代入する。
なお、本明細書において、「時刻Aが時刻Bよりも大きい」と表記する場合、時刻Aが時刻Bよりも現在時刻に近い時刻であることを示すものとする。言い換えれば、「時刻Aが時刻Bよりも小さい」と表記する場合、時刻Aが時刻Bよりも過去であることを示す。
一方、Z(i)におけるアクセス開始時刻が、Z(i+1)におけるアクセス開始時刻よりも大きい場合、ソート部143は、Z(i)に代入されている業務モデルと、Z(i+1)に代入されている業務モデルとを入れ替えない。
ここでは、「i=1」であるので、ソート部143は、Z(1)とZ(2)とを比較する。すなわち、上記例の場合、ソート部143は、業務モデルM22のアクセス開始時刻と、業務モデルM21のアクセス開始時刻とを比較する。図8−1に示すように、業務モデルM22のアクセス開始時刻は、業務モデルM21のアクセス開始時刻よりも大きいので、ソート部143は、業務モデルM22と、業務モデルM21との順序を入れ替えない。
続いて、ソート部143は、変数iをインクリメントする(ステップS107)。ここでは、ソート部143は、変数iを「2」に更新する。すなわち、「n=5」、かつ、「i=2」であるので、ステップS104における条件「i=n」を満たしていない。したがって、ソート部143は、ステップS105〜S107における処理を行う。具体的には、ソート部143は、Z(2)とZ(3)とを比較する。
すなわち、上記例の場合、ソート部143は、業務モデルM21のアクセス開始時刻と、業務モデルM13のアクセス開始時刻とを比較する。図8−1に示すように、業務モデルM21のアクセス開始時刻は、業務モデルM13のアクセス開始時刻以下であるので、ソート部143は、業務モデルM21と、業務モデルM13との順序を入れ替える。
このように、ソート部143は、ステップS104における条件「i=n」が満たされるまで、ステップS104〜S108における処理手順を繰り返し行う。そして、条件「i=n」を満たした場合、ソート部143は、変数nをデクリメントする(ステップS109)。そして、ソート部143は、ステップS102における条件「n≦1」が満たされるまで、ステップS102〜S110における処理手順を繰り返し行う。
[入替処理手順]
次に、図15を用いて、図13のステップS15に示した入替処理の手順について説明する。図15は、入替部144による入替処理手順を示すフローチャートである。なお、図15では、図10に示した例を用いながら説明する。また、図15において、配列Z(i)には、図14に示した処理手順が実行された後の業務モデルが代入されているものとする。すなわち、ここでは、Z(1)〜Z(5)には、それぞれ業務モデルM13、M22、M21、M12、M11が代入されている。
まず、入替部144は、図15に示すように、変数nに要素数を代入する(ステップS201)。上記例の場合、業務モデルの数は「5」であるので、入替部144は、nに「5」を代入する。
続いて、入替部144は、条件「n≦1」が満たされるまで、ステップS202〜S211における処理手順を繰り返し行う。ここでは、「n=5」であるため、条件「n≦1」を満たしていない。したがって、入替部144は、変数iに「1」を代入する(ステップS203)。
そして、入替部144は、条件「i=n」が満たされるまで、ステップS204〜S209における処理手順を繰り返し行う。ここでは、「n=5」、かつ、「i=1」であるので、条件「i=n」を満たしていない。したがって、入替部144は、Z(i)とZ(i+1)とを比較して入替判定処理を行う(ステップS205)。なお、入替部144により入替判定処理については図16を用いて後述する。
入替判定処理の結果、「入替処理を行う」と判定した場合(ステップS206肯定)、入替部144は、Z(i)に代入されている業務モデルと、Z(i+1)に代入されている業務モデルとを入れ替える(ステップS207)。具体的には、入替部144は、図15に示すように、Z(i)に代入されている業務モデルを、ワーク変数wに代入した後に、Z(i+1)に代入されている業務モデルをZ(i)に代入し、ワーク変数wに代入した業務モデルをZ(i+1)に代入する。
入替判定処理の結果、「入替処理を行わない」と判定した場合(ステップS206否定)、入替部144は、Z(i)に代入されている業務モデルと、Z(i+1)に代入されている業務モデルとを入れ替えない。
続いて、入替部144は、変数iをインクリメントする(ステップS208)。ここでは、入替部144は、変数iを「2」に更新する。すなわち、「n=5」、かつ、「i=2」であるので、ステップS204における条件「i=n」を満たしていない。したがって、入替部144は、ステップS205〜S208における処理を行う。
このように、入替部144は、ステップS204における条件「i=n」が満たされるまで、ステップS204〜S208における処理手順を繰り返し行う。そして、条件「i=n」を満たした場合、入替部144は、変数nをデクリメントする(ステップS210)。そして、入替部144は、ステップS202における条件「n≦1」が満たされるまで、ステップS202〜S211における処理手順を繰り返し行う。
[入替処理手順]
次に、図16を用いて、図15のステップS205に示した入替判定処理の手順について説明する。図16は、入替部144による入替判定処理手順を示すフローチャートである。なお、図16では、図15に示した例と同様に、配列Z(i)には、図14に示した処理手順が実行された後の業務モデルが代入されているものとする。
入替部144は、入替判定処理を行う場合、まず、Z(i)の業務モデルにおいて参照または更新されるテーブルの名称を変数ZT(i)に代入する(ステップS301)。また、入替部144は、Z(i+1)の業務モデルにおいて参照または更新されるテーブルの名称を変数ZT(i+1)に代入する(ステップS301)。
続いて、入替部144は、Z(i)の業務モデルが「更新系」である場合(ステップS302肯定)、「入替処理を行わない」と判定する(ステップS303)。具体的には、入替部144は、Z(i)とZ(i+1)とを入れ替える処理を行わないと判定する。これは、図9に示した条件のうち、「現在の業務モデルの属性」が「更新系」である場合を示している。
一方、Z(i)の業務モデルが「更新系」でない場合(ステップS302否定)、入替部144は、ZT(i)とZT(i+1)とが等しいか否かを判定する(ステップS304)。そして、ZT(i)とZT(i+1)とが等しい場合(ステップS304肯定)、入替部144は、「入替処理を行わない」と判定する(ステップS305)。これは、図9に示した条件のうち、「現在の業務モデルの属性」が「参照系(共有)」または「参照系(ロックなし)」であり、かつ、「参照先/更新先テーブル」が「同一」である場合を示している。
一方、ZT(i)とZT(i+1)とが異なる場合(ステップS304否定)、入替部144は、「入替処理を行う」と判定する(ステップS306)。これは、図9に示した条件のうち、「現在の業務モデルの属性」が「参照系(共有)」または「参照系(ロックなし)」であり、かつ、「参照先/更新先テーブル」が「相違」である場合を示している。
上記例を用いて説明すると、「i=1」である場合、Z(i)=Z(1)の業務モデルは、業務モデルM13であり、Z(i+1)=Z(2)の業務モデルは、業務モデルM22である。図10に示すように、業務モデルM13の属性は、参照系(共有)である(ステップS302否定)。また、図10に示すように、業務モデルM13と業務モデルM22の「参照先/更新先テーブル」は、テーブルBであるので、「同一」である(ステップS304肯定)。したがって、「i=1」である場合、入替部144は、業務モデルM13と業務モデルM22とを入れ替える処理を行わないと判定する。
[多重化処理手順]
次に、図17および図18−1〜図18−4を用いて、図13のステップS16に示した多重化処理の手順について説明する。図17は、多重化部145による多重化処理手順を示すフローチャートである。図18−1〜図18−4は、多重化部145による多重化処理の一例を説明するための図である。
図18−1には、多重化処理対象の業務モデルM101〜M121を示す。図18−1に例示した業務モデルM101〜M121は、入替部144によって入替処理が行われており、それぞれZ(1)〜Z(21)に代入されている。
また、図18−2には、多重化部145によって多重化処理が行われる場合に用いられる配列Y(j、k)を示す。多重化部145は、配列Z(i)に代入されている業務モデルを、配列Y(j、k)に代入することにより多重化処理を行う。ここで、配列Y(j、k)のうち、同一の行(j)に代入された業務モデルは、並行して実行されることを示す。
また、図18−3には、配列X(j)を示す。かかる配列X(j)は、配列Y(j、k)のうち、行(j)に格納されている業務モデルの数を示す。また、図18−4には、配列W(j)を示す。かかる配列W(j)は、配列Y(j、k)のうち、行(j)において同期処理を行うか否かを示す。
なお、図18−2に示した配列Y(j、k)、図18−3に示した配列X(j)、図18−4に示した配列W(j)は、多重化部145によって多重化処理が行われた後の状態を示している。
以下に、図18−1〜図18−4に示した例を用いながら、図17に示した処理手順について説明する。なお、初期状態において、配列Y(j、k)には、空であるものとする。
まず、図17に示すように、多重化部145は、初期化処理を行う(ステップS401)。具体的には、多重化部145は、配列X(j)および配列W(j)に「0」を代入する。なお、多重化部145による初期化処理については、図19を用いて後述する。
続いて、多重化部145は、変数nに要素数を代入し、変数iに「1」を代入する(ステップS402)。図18−1に示した例では、業務モデルの数は「21」であるので、多重化部145は、nに「21」を代入する。
続いて、多重化部145は、条件「n≦1」が満たされるまで、ステップS403〜S417における処理手順を繰り返し行う。ここでは、「n=21」であるので、条件「n≦1」を満たしていない。したがって、多重化部145は、変数jにiを代入する(ステップS404)。ここでは、「i=1」であるので、多重化部145は、変数jに「1」を代入する。
続いて、多重化部145は、条件「j<1」が満たされるまで、ステップS405〜S413における処理手順を繰り返し行う。ここでは、「j=1」であるので、条件「j<1」を満たしていない。したがって、多重化部145は、変数kにX(j)を代入する(ステップS406)。ここでは、「j=1」であり、「X(1)=0」であるので、多重化部145は、変数kに「0」を代入する。
続いて、多重化部145は、条件「k<1」が満たされるまで、ステップS407〜S411における処理手順を繰り返し行う。ここでは、「k=0」であるので、条件「k<1」を満たしている。したがって、多重化部145は、変数jをデクリメントする(ステップS412)。ここでは、「j=1」であるので、多重化部145は、変数jを、「1」から「1」を減算した値「0」に更新する。
続いて、多重化部145は、ステップS405における条件「j<1」を満たしているか否かを判定する。ここでは、「j=0」であるので、条件「j<1」を満たしている。したがって、多重化部145は、ステップS414における処理手順を行う。
具体的には、多重化部145は、変数jを「0」から「1」に更新する。また、多重化部145は、X(j)に「X(j)+1」を代入する。ここでは、「j=1」であり、「X(1)=0」であるので、X(1)に「0+1」を代入する。また、多重化部145は、変数kにX(j)を代入する。ここでは、「X(1)=1」であるので、多重化部145は、変数kに「1」を代入する。また、多重化部145は、Y(j、k)にZ(i)を代入する。ここでは、「i=1」であり、「j=1」であり、「k=1」であり、Z(1)には、業務モデルM101が代入されているので、多重化部145は、図18−2に示したように、Y(1、1)に業務モデルM101を代入する。
続いて、多重化部145は、同期設定処理を行う(ステップS415)。なお、多重化部145による同期設定処理については、図21を用いて後述する。続いて、多重化部145は、変数nをデクリメントし、変数iをインクリメントする。ここでは、多重化部145は、変数nを「21」から「20」に更新し、変数iを「1」から「2」に更新する。
続いて、多重化部145は、ステップS403における条件「n≦1」を満たしているか否かを判定する。ここでは、「n=20」であるので、条件「n≦1」を満たしていない。したがって、多重化部145は、変数jにiを代入する(ステップS404)。ここでは、「i=2」であるので、多重化部145は、変数jに「2」を代入する。
続いて、多重化部145は、ステップS405における条件「j<1」を満たしているか否かを判定する。ここでは、「j=2」であるので、条件「j<1」を満たしていない。したがって、多重化部145は、変数kにX(j)を代入する(ステップS406)。ここでは、「j=2」であり、「X(2)=0」であるので、多重化部145は、変数kに「0」を代入する。
続いて、多重化部145は、ステップS407における条件「k<1」を満たしているか否かを判定する。ここでは、「k=0」であるので、条件「k<1」を満たしている。したがって、多重化部145は、変数jを、「2」から「1」に更新する(ステップS412)。
続いて、多重化部145は、ステップS405における条件「j<1」を満たしているか否かを判定する。ここでは、「j=1」であるので、条件「j<1」を満たしていない。したがって、多重化部145は、変数kにX(j)を代入する(ステップS406)。ここでは、「j=1」であり、「X(1)=1」であるので、多重化部145は、変数kに「1」を代入する。
続いて、多重化部145は、ステップS407における条件「k<1」を満たしているか否かを判定する。ここでは、「k=1」であるので、条件「k<1」を満たしていない。したがって、多重化部145は、多重化判定処理を行う(ステップS408)。なお、多重化部145により多重化判定処理については、図20を用いて後述する。
多重化判定処理の結果、多重化を行うことを決定した場合、多重化部145は、変数kをデクリメントする(ステップS410)。一方、多重化を行わないことを決定した場合、多重化部145は、ステップS414における処理手順を行う。
なお、ここでは、多重化部145は、多重化を行わないことを決定するので、ステップS414における処理手順を行う。具体的には、多重化部145は、変数jを「1」から「2」に更新する。また、多重化部145は、X(j)に「X(j)+1」を代入する。ここでは、「j=2」であり、「X(2)=0」であるので、X(2)に「0+1」を代入する。また、多重化部145は、変数kにX(j)を代入する。ここでは、「X(2)=1」であるので、多重化部145は、変数kに「1」を代入する。また、多重化部145は、Y(j、k)にZ(i)を代入する。ここでは、「i=2」であり、「j=2」であり、「k=1」であり、Z(2)には、業務モデルM102が代入されているので、多重化部145は、図18−2に示したように、Y(2、1)に業務モデルM102を代入する。
このようにして、多重化部145は、ステップS403における条件「n≦1」を満たすまで、上述した処理手順を行う。これにより、図18−1に示した配列Z(i)に代入されている業務モデルM101〜M121は、図18−2に示したように、配列Y(j、k)に代入される。図18−2に示した例では、同一の行(j)に代入されている業務モデルが多重化されていることを示している。例えば、業務モデルM101およびM103が多重化されていることを示している。そして、図18−2に示した例では、業務モデルM101およびM103が並行して実行された後に、業務モデルM102、M105、M107が並行して実行されることを示している。そして、最後に、図18−2に示した例では、業務モデルM118およびM120が実行されることを示している。
[初期化処理手順]
次に、図19を用いて、図17のステップS401に示した初期化処理の手順について説明する。図19は、多重化部145による初期化処理手順を示すフローチャートである。
図19に示すように、多重化部145は、まず、変数nに要素数を代入する(ステップS501)。続いて、多重化部145は、条件「n≦1」が満たされるまで、ステップS502〜S505における処理手順を繰り返し行う。
具体的には、多重化部145は、配列X(n)および配列W(n)に「0」を代入する(ステップS503)。続いて、多重化部145は、変数nをデクリメントする(ステップS504)。すなわち、多重化部145は、配列X(n)の要素(1)〜X(n)と、配列W(n)の要素W(1)〜W(n)に、「0」を代入する。
[多重化判定処理手順]
次に、図20を用いて、図17のステップS408に示した多重化判定処理の手順について説明する。図20は、多重化部145による多重化判定処理手順を示すフローチャートである。
多重化部145は、多重化判定処理を行う場合、まず、Z(i)の業務モデルにおいて参照または更新されるテーブルの名称を変数ZT(i)に代入する(ステップS601)。また、多重化部145は、Y(j、k)の業務モデルにおいて参照または更新されるテーブルの名称を変数YT(j、k)に代入する(ステップS601)。
続いて、多重化部145は、Z(i)の業務モデルが「更新系」であり(ステップS602肯定)、かつ、ZT(i)とYT(j、k)とが等しい場合(ステップS603肯定)、「多重化処理を行わない」と判定する(ステップS604)。
一方、多重化部145は、Z(i)に代入されている業務モデルが「更新系」であり(ステップS602肯定)、かつ、ZT(i)とYT(j、k)とが異なる場合(ステップS603否定)、「多重化処理を行う」と判定する(ステップS605)。
また、多重化部145は、Z(i)に代入されている業務モデルが「更新系」でない場合(ステップS602否定)、Y(j、k)に代入されている業務モデルが「更新系」であるか否かを判定する(ステップS606)。
そして、多重化部145は、Y(j、k)に代入されている業務モデルが「更新系」であり(ステップS606肯定)、かつ、ZT(i)とYT(j、k)とが等しい場合(ステップS607肯定)、「多重化処理を行わない」と判定する(ステップS608)。
一方、Y(j、k)に代入されている業務モデルが「更新系」であり(ステップS606肯定)、かつ、ZT(i)とYT(j、k)とが異なる場合(ステップS607否定)、多重化部145は、「多重化処理を行う」と判定する(ステップS609)。
また、多重化部145は、Y(j、k)に代入されている業務モデルが「更新系」でない(ステップS606否定)、「多重化処理を行う」と判定する(ステップS610)。このように、多重化部145は、図11に示した条件に従って、多重化処理を行うか否かを決定する。
[同期設定処理手順]
次に、図21を用いて、図17のステップS415に示した同期設定処理の手順について説明する。図21は、多重化部145による同期設定処理手順を示すフローチャートである。
図21に示すように、多重化部145は、同期設定処理を行う場合、まず、変数jをデクリメントする(ステップS701)。続いて、多重化部145は、変数jが「1」よりも小さいか否かを判定する(ステップS702)。
そして、多重化部145は、変数jが「1」よりも小さい場合、処理を終了する。一方、多重化部145は、変数jが「1」以上である場合、X(j)の値を変数kに代入する(ステップS703)。
続いて、多重化部145は、条件「k≦1」が満たされるまで、ステップS704〜S708における処理手順を繰り返し行う。具体的には、多重化部145は、Z(i)とY(j、k)とを比較し、Z(i)が更新系、かつ、Y(j、k)が参照系である場合、同期設定は不要であると判定する(ステップS705)。そして、多重化部145は、変数kをデクリメントする(ステップS706)。
一方、多重化部145は、Z(i)が更新系でないか、または、Y(j、k)が参照系でない場合、同期設定が必要であると判定する(ステップS705)。そして、多重化部145は、変数jをインクリメントするとともに、W(j)に「1」を代入する(ステップS707)。
例えば、多重化部145は、図18−1に示した業務モデルM101〜M121に対して多重化処理を行った場合、配列W(j)に図18−4に示した値を代入する。これは、配列Y(j、k)のうち、「j=3〜6」の行において、同期情報を付与していることを示す。
[実施例1の効果]
上述してきたように、実施例1に係るシナリオ作成装置100は、各サーバ間で送受されるメッセージを収集し、同一のトランザクション内に送受されたメッセージを関連付けて業務モデルを生成する。そして、シナリオ作成装置100は、生成した業務モデルを、DBサーバ15へのアクセスを開始した時刻の昇順にソートすることによりシナリオを作成する。これにより、シナリオ作成装置100は、テストの合否判定を正しく行うことができるシナリオを作成することができる。
また、実施例1に係るシナリオ作成装置100は、DBサーバ15へのアクセスを開始した時刻の昇順にソートした業務モデルを多重化するので、テストの実行時間が短いシナリオを作成することができる。
さらに、シナリオ作成装置100によって生成されたシナリオは、多重化されているので、負荷テストに用いることもできる。また、シナリオ作成装置100によって生成されたシナリオは、各サーバ間で送受されたメッセージを保持しているので、テストの検証結果がNGになった場合に、どのサーバ間でエラーが発生したかを特定することができる。これにより、シナリオ作成装置100によって生成されたシナリオを用いると、容易かつ短時間でエラー箇所を特定することができる。