(57)【要約】【課題】負荷テストを効率的に行うこと。【解決手段】第１の装置１は、ユーザ名と作業一覧番号との対応関係を含む作業一覧テーブル４と、作業明細番号と作業一覧番号との対応関係を含む作業明細テーブル５とから、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むインデックステーブル６を作成する。第２の装置２は、ランダムにユーザ名を決定して、決定したユーザ名で第１の装置１にログインし、決定したユーザ名に対応する作業一覧番号をインデックステーブル６からランダムに決定し、決定した作業一覧番号に対応する作業明細番号をインデックステーブル６からランダムに決定し、決定した作業明細番号に対応する作業明細書のデータを第１の装置１から受信する処理を繰り返し実行して、第１の装置１の負荷を計測する。【選択図】図１
2017097758.tif 000002
【特許請求の範囲】
【請求項１】
ユーザ名と作業一覧番号との対応関係を含む作業一覧テーブルと、作業明細番号と作業一覧番号との対応関係を含む作業明細テーブルとから、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むインデックステーブルを作成する第１の装置と、
ランダムにユーザ名を決定して、決定したユーザ名で前記第１の装置にログインし、決定したユーザ名に対応する作業一覧番号を前記インデックステーブルからランダムに決定し、決定した作業一覧番号に対応する作業明細番号を前記インデックステーブルからランダムに決定し、決定した作業明細番号に対応する作業明細書のデータを前記第１の装置から受信する処理を繰り返し実行して、前記第１の装置の負荷を計測する第２の装置と、
を有する負荷テストシステム。
【請求項２】
前記第２の装置は、前記第１の装置から前記作業明細書のデータを受信済である作業明細番号の中から、前記第１の装置への作業報告の送信対象とする作業明細番号をランダムに決定し、決定した作業明細番号に対応する前記作業報告を前記第１の装置に送信する処理を繰り返す、請求項１記載の負荷テストシステム。
【請求項３】
前記第２の装置は、前記第１の装置にログインした後、決定したユーザ名に対応する作業一覧番号を前記第１の装置に問い合わせる、請求項１または２記載の負荷テストシステム。
【請求項４】
前記第２の装置は、前記第１の装置に送信した電文に対する応答の受信状況に基づいて、前記第１の装置の負荷を計測する、請求項１乃至３の何れか１項に記載の負荷テストシステム。
【請求項５】
前記第２の装置を複数有し、複数の前記第２の装置は、複数のユーザ名それぞれでの前記第１の装置へのログイン、および、前記複数のユーザ名それぞれの作業一覧番号に対する前記作業明細書のデータの受信を並列に実行する、請求項１乃至４の何れか１項に記載の負荷テストシステム。
【請求項６】
第１の装置が、ユーザ名と作業一覧番号との対応関係を含む作業一覧テーブルと、作業明細番号と作業一覧番号との対応関係を含む作業明細テーブルとから、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むインデックステーブルを作成し、
第２の装置が、ランダムにユーザ名を決定して、決定したユーザ名で前記第１の装置にログインし、決定したユーザ名に対応する作業一覧番号を前記インデックステーブルからランダムに決定し、決定した作業一覧番号に対応する作業明細番号を前記インデックステーブルからランダムに決定し、決定した作業明細番号に対応する作業明細書のデータを前記第１の装置から受信する処理を繰り返し実行して、前記第１の装置の負荷を計測する、
負荷テスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は負荷テストシステムおよび負荷テスト方法に関する。
【背景技術】
【０００２】
情報処理システムでは、サーバコンピュータ（サーバと称することがある）が複数のクライアントコンピュータ（クライアントと称することがある）に対してサービスを提供することがある。例えば、ウェブ（Ｗｅｂ）システムではウェブサーバがＨＴＴＰ（Hypertext Transfer Protocol）を用いて、クライアントに種々の業務サービスを提供し得る。
【０００３】
ここで、サーバに対するクライアントからのリクエストがある期間に集中すると、サーバの負荷が増える可能性がある。そこで、テスト用のクライアントを用いてサーバに負荷をかけ、サーバの処理能力を調べる負荷テストを行うことが考えられている。
【０００４】
例えば、試験対象となるウェブサーバ装置にアクセス負荷をかけてそのウェブサーバ装置の状態を観察するための負荷シミュレータが提案されている。負荷シミュレータは、複数の仮想ウェブクライアントに対し、試験対象となるウェブサーバ装置内のウェブページデータをリクエストする順番を定義したシナリオを与え、シナリオ通りにリクエストメッセージの送信とレスポンスメッセージの受信とを行わせる。
【０００５】
なお、作業手順書に基づく一連の作業を構成する運用作業の項目とその実施時刻とを組み合わせたシナリオをサーバに登録し、システム側からの自動的なナビゲーションに応じて時刻に関連する作業を実施することも考えられている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−２４８２２８号公報
【特許文献２】特開２０１３−２９９８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ユーザの作業を支援するシステムにおいて、クライアントから複数のリクエストを受けたときのサーバの負荷をテストすることがある。当該システムでは、ユーザとユーザが行うべき作業一覧の識別情報（作業一覧番号）とが対応付けられる。また、作業一覧番号には、当該作業一覧に属する作業明細の識別情報（作業明細番号）が対応付けられる。例えば、ユーザは、自身が所持するクライアントを操作して、自身が担当する作業一覧および作業明細書のデータをサーバから取得して確認し、作業を行える。負荷テストでは、例えば、このようなユーザの実際の利用手順に伴ってクライアントからサーバに対して発行され得るＨＴＴＰリクエストおよびサーバから応答されるＨＴＴＰレスポンスを発生させて、サーバの負荷を測定することが考えられる。
【０００８】
ここで、ＨＴＴＰレスポンスには、ステータス、メッセージヘッダ、および、メッセージボディが含まれる。ステータスやメッセージヘッダはプロトコルによって規定されているので、ステータスやメッセージヘッダの内容に応じた汎用的な処理を、シナリオとして予め規定しておくことができる。一方、メッセージボディに格納される情報は、ユーザが任意に規定するものであるため、メッセージボディの内容に応じた汎用的な処理をシナリオとして予め規定できない。すなわち、レスポンスで得たメッセージボディに作業一覧番号や作業明細番号が設定される場合、負荷テスト前に、サーバへ問い合わせるべき作業一覧番号や作業明細番号を決めることができない。このため、作業明細や作業報告の送受信などの負荷テストを自動的に行えないという問題がある。
【０００９】
１つの側面では、本発明は、負荷テストを効率的に行える負荷テストシステムおよび負荷テスト方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、負荷テストシステムが提供される。この負荷テストシステムは、第１の装置と第２の装置とを有する。第１の装置は、ユーザ名と作業一覧番号との対応関係を含む作業一覧テーブルと、作業明細番号と作業一覧番号との対応関係を含む作業明細テーブルとから、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むインデックステーブルを作成する。第２の装置は、ランダムにユーザ名を決定して、決定したユーザ名で第１の装置にログインし、決定したユーザ名に対応する作業一覧番号をインデックステーブルからランダムに決定し、決定した作業一覧番号に対応する作業明細番号をインデックステーブルからランダムに決定し、決定した作業明細番号に対応する作業明細書のデータを第１の装置から受信する処理を繰り返し実行して、第１の装置の負荷を計測する。
【００１１】
また、１つの態様では、負荷テスト方法が提供される。この負荷テスト方法では、第１の装置が、ユーザ名と作業一覧番号との対応関係を含む作業一覧テーブルと、作業明細番号と作業一覧番号との対応関係を含む作業明細テーブルとから、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むインデックステーブルを作成する。第２の装置が、ランダムにユーザ名を決定して、決定したユーザ名で第１の装置にログインし、決定したユーザ名に対応する作業一覧番号をインデックステーブルからランダムに決定し、決定した作業一覧番号に対応する作業明細番号をインデックステーブルからランダムに決定し、決定した作業明細番号に対応する作業明細書のデータを第１の装置から受信する処理を繰り返し実行して、第１の装置の負荷を計測する。
【発明の効果】
【００１２】
１つの側面では、負荷テストを効率的に行える。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の負荷テストシステムを示す図である。
【図２】第２の実施の形態の負荷テストシステムの例を示す図である。
【図３】第２の実施の形態のクライアントのハードウェア例を示す図である。
【図４】第２の実施の形態の機能例を示す図である。
【図５】第２の実施の形態のデータの多重度の例を示す図である。
【図６】第２の実施の形態の作業一覧テーブルの例を示す図である。
【図７】第２の実施の形態の作業明細テーブルの例を示す図である。
【図８】第２の実施の形態の作業報告テーブルの例を示す図である。
【図９】第２の実施の形態のインデックステーブルの例を示す図である。
【図１０】第２の実施の形態のシナリオデータの例を示す図である。
【図１１】第２の実施の形態のシナリオデータの他の例を示す図である。
【図１２】第２の実施の形態の通常運用時の処理の流れを示すシーケンスである。
【図１３】第２の実施の形態の負荷テストの例を示す図である。
【図１４】第２の実施の形態のインデックス生成の流れを示すシーケンスである。
【図１５】第２の実施の形態の負荷テストの流れを示すシーケンスである。
【図１６】第２の実施の形態の負荷テストの流れ（続き）を示すシーケンスである。
【図１７】負荷テストの比較例を示す図である。
【図１８】負荷テストの比較例の流れを示すシーケンスである。
【図１９】負荷テストの比較例の流れ（続き）を示すシーケンスである。
【図２０】レスポンスメッセージの例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の負荷テストシステムを示す図である。第１の実施の形態の負荷テストシステムは、第１の装置１および第２の装置２を有する。第１の装置１および第２の装置２は、ネットワーク３を介して接続されている。第１の装置１は、例えば、第２の装置２を利用するユーザに、所定のサービスを提供するサーバコンピュータである。第２の装置２は、例えば、ユーザ（例えば、負荷テストを行う作業者）が利用する負荷テスト用のクライアントコンピュータである。
【００１５】
第１の実施の形態の負荷テストシステムは、ユーザの作業を支援する作業支援システムに用いられる第１の装置１の負荷をテストするシステムである。作業支援システムは、第１の装置１とネットワーク（ネットワーク３でもよいしネットワーク３以外のネットワークでもよい）を介して接続されたクライアント装置とを含むシステムである。例えば、第１の装置１は、Ｗｅｂサーバとして機能し、クライアント装置で動作するＷｅｂブラウザに、ユーザの作業を支援するＧＵＩ（Graphical User Interface）を提供する。具体的には、第１の装置１は次のように利用される。
【００１６】
ユーザは、クライアント装置（図１では図示を省略している）を操作して、第１の装置１にログインする。クライアント装置は、第１の装置１へ、作業一覧の問い合わせ（リクエストメッセージの送信）を行う。第１の装置１は、該当のユーザに対応する作業一覧番号をクライアント装置に提供する。第１の装置１からクライアント装置へ提供される作業一覧番号の情報は、当該作業一覧番号に属する作業明細番号を含む。作業一覧番号や作業明細番号は、レスポンスのメッセージのヘッダやステータスのフィールドではなく、当該メッセージのメッセージボディに設定されて、クライアント装置に提供される。
【００１７】
ユーザは、クライアント装置を用いて、作業一覧番号および作業明細番号を確認し、クライアント装置から第１の装置１へ、作業明細番号を送れる。第１の装置１は、作業明細番号に応じて、作業明細書のデータをクライアント装置に提供する。ユーザは、クライアント装置を用いて作業明細書を確認し、作業を行う。ユーザは、作業の完了後、クライアント装置を用いて、第１の装置１に作業完了の報告を行うこともできる。
【００１８】
第１の実施の形態では、負荷テストを行うために、上記のクライアント装置に代えて第２の装置２を用いる。第２の装置２を複数設けて、複数の第２の装置２それぞれから、第１の装置１に対してユーザ毎のリクエストを並列に送ることもできる。第１の実施の形態の負荷テストシステムでは、上記のようなユーザの実際の利用に沿ったＨＴＴＰリクエストを疑似的に発生させて、サーバの負荷を測定する機能を提供する。
【００１９】
第１の装置１は、記憶部１ａおよび演算部１ｂを有する。第２の装置２は、記憶部２ａおよび演算部２ｂを有する。記憶部１ａ，２ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。
【００２０】
演算部１ｂ，２ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｂ，２ｂはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００２１】
記憶部１ａは、作業一覧テーブル４および作業明細テーブル５を記憶する。作業一覧テーブル４は、ユーザ名と作業一覧番号との対応関係を含むテーブルである。作業明細テーブル５は、作業一覧番号と作業明細番号との対応関係を含むテーブルである。例えば、作業一覧テーブル４および作業明細テーブル５は、ユーザ名、作業一覧番号および作業明細番号などのデータ間の関係を表わす関係データベース（ＲＤＢ：Relational DataBase）により実現されてもよい。
【００２２】
演算部１ｂは、作業一覧テーブル４および作業明細テーブル５に基づいて、インデックステーブル６を生成する。インデックステーブル６は、ユーザ名と作業一覧番号と作業明細番号との対応関係を含むテーブルである。例えば、演算部１ｂは、作業一覧テーブル４および作業明細テーブル５に基づく結合・選択・射影の演算を実行することで、インデックステーブル６を生成できる。演算部１ｂは、インデックステーブル６を第２の装置２に提供する。
【００２３】
演算部２ｂは、インデックステーブル６を第１の装置１から取得し、記憶部２ａに格納する。演算部２ｂは、記憶部２ａにインデックステーブル６を格納した状態で、第１の装置１に対して次のようにリクエスト電文を発行し、リクエスト電文に対する応答の受信状況（例えば、遅延時間など）を計測する。
【００２４】
演算部２ｂは、ログイン要求を第１の装置１に送信する（ステップＳ１）。ログイン要求は、ログイン用のユーザ名やパスワードなどを含む。演算部２ｂは、予め指定された複数のユーザ名の中からランダムでユーザ名を選択し、選択したユーザ名で第１の装置１にログイン要求を送信してもよい。
【００２５】
演算部１ｂは、第２の装置２からログイン要求を受信すると、ログイン要求に応じてログイン処理を実行し、ログインに成功したことを示すログイン応答を第２の装置２に送信する（ステップＳ２）。なお、ログインに失敗した場合、第２の装置２は、ログイン失敗である旨を第１の装置１に通知して、他のユーザ名でのログインを第２の装置２に促してもよい。
【００２６】
演算部２ｂは、ログイン応答を受信すると、ログインしたユーザ名に対応する作業一覧番号の問い合わせ（作業一覧問い合わせ）を第１の装置１に送信する（ステップＳ３）。
演算部１ｂは、作業一覧問い合わせを第２の装置２から受信すると、ログイン中のユーザ名に対応する作業一覧番号を、記憶部１ａに記憶された作業一覧テーブル４から取得し、第２の装置２に送信する（ステップＳ４）。ここで、第１の装置１から提供される作業一覧番号には、作業一覧番号に対応する作業明細番号が含まれる。演算部１ｂは、作業一覧番号に対応する作業明細番号を作業明細テーブル５から取得して、第２の装置２に送信してもよい。
【００２７】
演算部２ｂは、作業一覧番号を受信すると、記憶部２ａに記憶されたインデックステーブル６に基づいて、作業明細番号を決定する（ステップＳ５）。演算部２ｂは、現在ログイン中のユーザ名に対応する作業一覧番号が複数ある場合、複数の作業一覧番号のうちの１つをランダムに決定する。そして、演算部２ｂは、決定した作業一覧番号に対応する作業明細番号が複数ある場合、複数の作業明細番号のうちの１つをランダムに決定する。
【００２８】
演算部２ｂは、決定した作業明細番号を含む作業明細の問い合わせ（作業明細問い合わせ）を第１の装置１に送信する（ステップＳ６）。
演算部１ｂは、作業明細問い合わせを第２の装置２から受信すると、作業明細問い合わせに含まれる作業明細番号に対応する作業明細書のデータを記憶部１ａから取得して、第２の装置２に送信する（ステップＳ７）。
【００２９】
その後、演算部２ｂは、インデックステーブル６を参照して、現在の作業一覧番号に対応する作業明細番号が他にあれば、現在の作業一覧番号に対応する作業明細番号をランダムに決定し、作業明細問い合わせの送信および作業明細書のデータの受信を繰り返す。その際、演算部２ｂは、作業明細書のデータをダウンロード済である作業明細番号を選択対象外としてよい。また、演算部２ｂは、現在の作業一覧番号に対応する作業明細番号の作業明細書を全てダウンロード済であれば、現在ログイン中のユーザ名に対応する他の作業一覧番号をランダムに決定する。そして、演算部２ｂは、作業明細番号の決定、作業明細問い合わせの送信および作業明細書のデータの受信を繰り返す。その際、演算部２ｂは、選択済（作業明細書をダウンロード済）である作業一覧番号を選択対象外としてよい。
【００３０】
こうして、第２の装置２は、インデックステーブル６に基づいて、第１の装置１に対してリクエストを発行し続け、第１の装置１に対して継続的に負荷をかけることができる。例えば、第１の装置１に連続でリクエストを発行しながら、リクエストに対するレスポンスの遅延を測定したり、第１の装置１で使用されているメモリやプロセッサなどの演算リソース量を取得したりすることで、第１の装置１の負荷状況を調査できる。また、前述のように第２の装置２を複数設けてもよい。その場合、複数の第２の装置２を用いて並行して複数のリクエストを第１の装置１に送信することができる。すなわち、複数の第２の装置２を用いて、複数のユーザ名それぞれでの第１の装置１へのログイン、および、複数のユーザ名それぞれの作業一覧番号に対する作業明細書のデータの受信を並列に実行できる。その状況で、リクエストに対するレスポンスの遅延を測定したり、第１の装置１で使用されている演算リソース量を取得したりすることで、システムの現実の運用状況に近い状況における第１の装置１の負荷を調査することができる。
【００３１】
ここで、前述のように作業一覧番号や作業明細番号は、レスポンスのメッセージのヘッダやステータスのフィールドではなく、当該メッセージのメッセージボディに設定されて、第２の装置２に提供される。負荷テスト用にリクエストを生成するツールでは、通常、メッセージボディの内容を解析してリクエストを生成する機能をもたないことが多い。例えば、ＨＴＴＰレスポンスのメッセージボディを取得したとしても、当該メッセージボディの情報を解析して作業一覧番号や作業明細番号を得ることが難しいからである。このため、メッセージボディの内容に応じた汎用的な処理を予め規定しておくことができない。すなわち、レスポンスで得たメッセージボディに作業一覧番号や作業明細番号が設定される場合、負荷テスト前に、作業一覧番号や作業明細番号を決めることができない。よって、上記のような作業明細や作業報告の送受信などの負荷テストを自動的に行えないという問題がある。
【００３２】
そこで、第１の実施の形態の負荷テストシステムでは、第１の装置１によりインデックステーブル６を生成し、第２の装置２によりインデックステーブル６に基づいて作業明細番号を決定し、第１の装置１に作業明細問い合わせを送る。このため、第２の装置２は、作業一覧問い合わせに対する第１の装置１からの応答について、メッセージボディを解析しなくても、作業明細問い合わせを生成し、第１の装置１に送信できる。これにより、負荷テストを自動的に行うことができる。当該自動化により、負荷テストを効率的に実行可能となる。
【００３３】
［第２の実施の形態］
図２は、第２の実施の形態の負荷テストシステムの例を示す図である。第２の実施の形態の負荷テストシステムは、クライアント１００，１００ａ，１００ｂおよびサーバ２００を含む。クライアント１００，１００ａ，１００ｂおよびサーバ２００は、ネットワーク１０に接続されている。ネットワーク１０は、例えばＬＡＮ（Local Area Network）である。
【００３４】
クライアント１００，１００ａ，１００ｂは、サーバ２００の負荷テストを行うクライアントコンピュータである。クライアント１００，１００ａ，１００ｂは、サーバ２００が実行するＷｅｂアプリケーションに対してリクエストを発行する。クライアント１００，１００ａ，１００ｂは、リクエストの発行頻度に対するレスポンスの遅延やサーバ２００で使用される演算用のリソース量などを測定することで、サーバ２００の処理能力をテストする。クライアント１００，１００ａ，１００ｂそれぞれに対するテスト時の所定の操作は、ユーザＵ１１，Ｕ１２，Ｕ１３によって行われる。
【００３５】
サーバ２００は、Ｗｅｂサーバとして機能し、Ｗｅｂアプリケーションによる業務サービスを提供するサーバコンピュータである。サーバ２００は、業務サービスをユーザに提供するためのＷｅｂアプリケーションシステムに用いられる１つの装置であるということができる。当該Ｗｅｂアプリケーションシステムは、サーバ２００の他に、クライアント３００およびモバイル端末４００，４００ａを含む。クライアント３００は、例えばネットワーク１０に接続されている。モバイル端末４００，４００ａは、例えばアクセスポイント２０を介してネットワーク１０に接続されている。アクセスポイント２０はモバイル端末４００，４００ａと無線通信を行う中継機である。クライアント３００は、指示者Ｕ２１によって利用される。モバイル端末４００，４００ａは、それぞれ作業者Ｕ３１，Ｕ３２によって利用される。
【００３６】
ここで、サーバ２００は、クライアント１００，１００ａ，１００ｂによる負荷テストの対象となるサーバである。サーバ２００で実行されるＷｅｂアプリケーションはパッケージ製品として提供されるものであり、製品自体の改変を行えないものとする。
【００３７】
第２の実施の形態の例では、Ｗｅｂアプリケーションシステムとして、データセンタなどに設置されたコンピュータ等の保守を支援する保守システムを想定する。具体的には、クライアント３００を利用する指示者Ｕ２１が、現地で保守を行う作業者Ｕ３１，Ｕ３２への作業指示を行えるようにする。これにより、作業者Ｕ３１，Ｕ３２の作業効率を向上させ、一拠点に滞在する指示者Ｕ２１により作業者Ｕ３１，Ｕ３２の作業状況を一括管理可能とする。
【００３８】
保守システムにおける指示者Ｕ２１および作業者Ｕ３１（作業者Ｕ３２も同様）による一連の作業の手順は次の通りである。
（１）指示者Ｕ２１は、クライアント３００を用いて作業一覧および作業者をサーバ（具体的には、サーバ２００）に登録する。（２）指示者Ｕ２１は、クライアント３００を用いて各作業の作業明細をサーバに登録する。（３）作業者Ｕ３１は、モバイル端末４００を用いて、外出先（現地保守先）からサーバにアクセスする。（４）作業者Ｕ３１は、モバイル端末４００を用いて、作業者Ｕ３１自身が対象となっている作業一覧をサーバからダウンロードする。（５）作業者Ｕ３１は、モバイル端末４００を用いて、作業一覧の中から実施する作業を選択し、該当作業の作業明細書（作業明細の内容が記述されたもの）のデータをダウンロードする。（６）作業者Ｕ３１は、該当作業を実施し、モバイル端末４００を用いて、作業結果を、作業明細毎に、サーバにアップロードする。（７）指示者Ｕ２１は、作業の進捗状況や問題点を確認する（そして、（１）の作業に戻る）。
【００３９】
図３は、第２の実施の形態のクライアントのハードウェア例を示す図である。クライアント１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。各ユニットはクライアント１００のバスに接続されている。
【００４０】
プロセッサ１０１は、クライアント１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４１】
ＲＡＭ１０２は、クライアント１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４２】
ＨＤＤ１０３は、クライアント１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム、および各種データを記憶する。クライアント１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００４３】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、クライアント１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００４４】
入力信号処理部１０５は、クライアント１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４５】
媒体リーダ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４６】
通信インタフェース１０７は、ネットワーク１０を介して他の装置と通信を行う。通信インタフェース１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００４７】
クライアント１００ａ，１００ｂ，３００、サーバ２００およびモバイル端末４００，４００ａもクライアント１００と同様のユニットを用いて実現できる。また、ディスプレイ１１や入力デバイス１２などの一部のデバイスは、クライアント１００に内蔵されてもよい（クライアント１００ａ，１００ｂ，３００，サーバ２００およびモバイル端末４００，４００ａも同様）。
【００４８】
図４は、第２の実施の形態の機能例を示す図である。クライアント１００は、記憶部１１０、インデックス管理部１２０、制御部１３０および負荷生成部１４０，１４０ａ，１４０ｂを有する。
【００４９】
記憶部１１０は、ＲＡＭ１０２やＨＤＤ１０３に確保された記憶領域の一部として実現される。インデックス管理部１２０、制御部１３０および負荷生成部１４０，１４０ａ，１４０ｂは、ＲＡＭ１０２に記憶されたプログラムをプロセッサ１０１が実行することで実現される。
【００５０】
記憶部１１０は、サーバ２００から提供されるインデックステーブルおよび負荷テスト用の電文（サーバ２００に対するリクエストパケット）を生成するためのシナリオデータを記憶する。インデックステーブルおよびシナリオデータの詳細は後述される。
【００５１】
インデックス管理部１２０は、サーバ２００からインデックステーブルを受信し、記憶部１１０に格納する。
制御部１３０は、負荷テストを制御する。具体的には、制御部１３０は、負荷テストのユーザによる開始操作の入力を受け付けると、負荷テスト用の電文の生成およびサーバ２００への送信を、負荷生成部１４０，１４０ａ，１４０ｂに指示する。このとき、制御部１３０は、どの作業者に関する電文を、どの時間に発生させるかといったテスト条件を指示することもできる。
【００５２】
負荷生成部１４０，１４０ａ，１４０ｂは、制御部１３０の指示に従って、サーバ２００に対する負荷テスト用の電文を生成し、サーバ２００に送信する。負荷生成部１４０は、電文生成部１４１、性能測定部１４２および送受信部１４３を有する。負荷生成部１４０ａ，１４０ｂ、負荷生成部１４０と同様の機能を有する。
【００５３】
電文生成部１４１は、記憶部１１０に記憶されたシナリオデータに基づいて、負荷テスト用の電文を生成する。電文は、具体的には、ＨＴＴＰリクエストをデータとして含むＩＰ（Internet Protocol）パケットである。例えば、「ユーザ名とパスワードとを含んだログイン要求パケットを送信する」、「作業報告に“完了”と入力したデータを送信する」などを、パケットとして表現したものが電文である。
【００５４】
性能測定部１４２は、テスト用の電文に対するサーバ２００の応答性能を測定する。例えば、性能測定部１４２は、負荷生成部１４０から電文が送出された送信時刻と、送信した電文に対するサーバ２００からの応答電文の受信時刻とを比較することで、電文送信から応答受信までの遅延時間を測定し得る。また、例えば、性能測定部１４２は、送信電文の総数（あるいは、単位時間当たりの送信頻度）と、応答電文の総数（あるいは、単位時間当たりの受信頻度）とを比較することで、サーバ２００内に滞留している電文数を測定し得る。性能測定部１４２は、テスト用の電文をサーバ２００に送信しながら、サーバ２００からプロセッサやメモリなどのリソースの使用状況を収集してもよい。
【００５５】
送受信部１４３は、電文生成部１４１により生成されたテスト用の電文をサーバ２００に送信し、送信した電文に対する応答電文を受信する。
サーバ２００は、記憶部２１０、テスト対象ソフトウェア２２０およびインデックス生成部２３０を有する。記憶部２１０は、サーバ２００が備えるＲＡＭやＨＤＤに確保された記憶領域の一部として実現される。テスト対象ソフトウェア２２０およびインデックス生成部２３０は、サーバ２００が備えるＲＡＭに記憶されたプログラムを、サーバ２００が備えるプロセッサが実行することで実現される。
【００５６】
記憶部２１０は、テスト対象ソフトウェア２２０の処理に用いられる各種のデータを記憶する。具体的には、記憶部２１０は、作業一覧テーブル、作業明細テーブルおよび作業報告テーブルを記憶する。各テーブルの詳細は後述される。
【００５７】
テスト対象ソフトウェア２２０は、負荷テストの対象となるソフトウェアであり、第２の実施の形態の例では、作業保守の遠隔支援のサービスを提供するＷｅｂアプリケーションである。
【００５８】
インデックス生成部２３０は、記憶部２１０に記憶された作業一覧テーブル、作業明細テーブルに基づいて、インデックステーブルを生成する。インデックス生成部２３０は、生成したインデックステーブルをクライアント１００に提供する。
【００５９】
なお、上記の説明では、クライアント１００を主に例示して説明したが、クライアント１００ａ，１００ｂもクライアント１００と同様の機能を有する。サーバ２００は、クライアント１００ａ，１００ｂに対しても、インデックステーブルを提供する。
【００６０】
図５は、第２の実施の形態のデータの多重度の例を示す図である。図５では、第２の実施の形態の保守システムで用いられる、作業一覧、作業、作業明細、作業者、作業報告といった情報の多重度の関係をＵＭＬ（Unified Modeling Language）データモデルによって表わしている。
【００６１】
具体的には、作業一覧は複数の作業で構成される。１つの作業は複数の作業明細で構成される。なお、作業一覧は、保守システムに１つだけ存在する。
作業は、主目的を指示したものであり、例えば「ストレージ装置の保守」などの情報が作業に該当する。作業明細は、作業で示された主目的を達成するために実施する実作業を表わす。前述の「ストレージ装置の保守」の例の場合、「制御コントローラの交換」や「記憶装置の交換」などが作業明細となる。
【００６２】
また、１つの作業には、必ず１人の作業者が割り当てられる。作業一覧は、作業と作業者との対応関係を含む。１人の作業者が複数の作業を担当することもある。また、作業明細により指示された実作業に進捗があると、作業報告が更新される。作業者がダウンロードした作業明細には、必ず１つの作業報告が作成され、作業明細と作業報告とは１対１の対応関係となる。作業一覧、作業明細および作業報告は、リレーショナルモデルで表わすことができる。具体的には次の通りである。
【００６３】
図６は、第２の実施の形態の作業一覧テーブルの例を示す図である。作業一覧テーブル２１１は、記憶部２１０に予め格納される。作業一覧テーブル２１１は、作業一覧番号、作業者、作業、作業場所、納期、作業完了フラグおよび作業明細個数の項目を含む。
【００６４】
作業一覧番号の項目には、作業一覧の識別番号（作業一覧番号）が登録される。作業者の項目には、作業者の名前（または作業者の識別情報）が登録される。作業者の名前は、ユーザ名ともいえる。作業の項目には、作業の名称が登録される。作業場所の項目には、作業場所が登録される。納期の項目には、作業の納期（作業を完了させる期日）が登録される。作業完了フラグの項目には、作業が完了しているか否かを示すフラグ（作業完了フラグ）が登録される。作業完了フラグは、“ＴＲＵＥ”が作業完了であり、“ＦＡＬＳＥ”が作業未完了であることを示す。作業完了フラグの初期値は“ＦＡＬＳＥ”である。作業完了フラグは、当該作業を構成する全ての作業明細（実作業）が完了した時点で“ＦＡＬＳＥ”から“ＴＲＵＥ”に更新される。作業明細個数の項目には、作業一覧番号に属する作業明細の個数が登録される。
【００６５】
例えば、作業一覧テーブル２１１には、作業一覧番号が“４１９２４０１”、作業者が“児玉こだお”、作業が“ストレージ装置保守”、作業場所が“沼津Ａ棟１階”、納期が“１２月１０日”、作業完了フラグが“ＦＡＬＳＥ”、作業明細個数が“４”という情報が登録される。
【００６６】
これは、作業一覧番号“４１９２４０１”を担当する作業者が“児玉こだお”、作業の名称が“ストレージ装置保守”、作業を行う場所が“沼津Ａ棟１階”、作業の納期が“１２月１０日”、作業が未完了（作業完了フラグ“ＦＡＬＳＥ”）であることを示す。また、“ストレージ装置保守”の作業には、４つの作業明細（作業明細個数“４”）が存在することを示す。
【００６７】
図７は、第２の実施の形態の作業明細テーブルの例を示す図である。作業明細テーブル２１２は、記憶部２１０に予め格納される。作業明細テーブル２１２は、作業明細番号、作業明細内容、作業明細納期、ダウンロードフラグ、作業明細完了フラグおよび作業一覧番号の項目を含む。
【００６８】
作業明細番号の項目には、作業明細の識別番号（作業明細番号）が登録される。作業明細内容の項目には、作業明細の内容が登録される。作業明細納期の項目には、作業明細の納期（作業明細を完了させる記述）が登録される。ダウンロードフラグの項目には、作業明細の詳細な内容を示す作業明細書のデータが、何れかのクライアント（あるいは、モバイル端末）によりダウンロードされたか否かを示すフラグ（ダウンロードフラグ）が登録される。ダウンロードフラグは、“ＴＲＵＥ”がダウンロードされたことを、“ＦＡＬＳＥ”がダウンロードされていないことを示す。作業明細完了フラグの項目には、作業明細が完了しているか否かを示すフラグ（作業明細完了フラグ）が登録される。作業明細完了フラグは、“ＴＲＵＥ”が作業明細完了であり、“ＦＡＬＳＥ”が作業明細未完了であることを示す。なお、ダウンロードフラグおよび作業明細完了フラグの初期値は“ＦＡＬＳＥ”である。作業一覧番号の項目には、作業明細が属する作業一覧番号が登録される。ここで、作業一覧テーブル２１１の１つのタプルに複数の作業明細が対応することがあるため、作業一覧番号を外部キーとしてもつ。
【００６９】
例えば、作業明細テーブル２１２には、作業明細番号が“４１９２４０１−１”、作業明細内容が“電源交換”、作業明細納期が“１２月１８日”、ダウンロードフラグが“ＴＲＵＥ”、作業明細完了フラグが“ＦＡＬＳＥ”、作業一覧番号が“４１９２４０１”という情報が登録される。
【００７０】
これは、作業明細番号“４１９２４０１−１”の作業明細内容が“電源交換”であり、作業明細の納期が“１２月１８日”であることを示す。また、作業明細書のデータが何れかのクライアント（またはモバイル端末）によりダウンロード済であること（ダウンロードフラグ“ＴＲＵＥ”）、作業明細が完了していないこと（作業明細完了フラグ”ＦＡＬＳＥ”）を示す。更に、作業明細番号“４１９２４０１−１”が作業一覧番号“４１９２４０１”に属する作業明細であることを示す。
【００７１】
ここで、第２の実施の形態では、一例として、作業一覧番号の末尾に、ハイフン“−”および昇順（１ずつインクリメントする）の番号を付すことで、作業明細番号を表わす。例えば、作業明細番号“４１９２４０１−１”は、作業一覧番号“４１９２４０１”の末尾に“−１”が付されたものである。作業一覧番号“４１９２４０１”に属する作業明細の個数は“４”である場合、作業明細番号“４１９２４０１−１”、“４１９２４０１−２”、“４１９２４０１−３”、“４１９２４０１−４”が、作業一覧番号“４１９２４０１”に属する作業明細番号である。
【００７２】
図８は、第２の実施の形態の作業報告テーブルの例を示す図である。作業報告テーブル２１３は、記憶部２１０に格納される。作業報告テーブル２１３は、作業明細番号、作業進捗および備考の項目を含む。
【００７３】
作業明細番号の項目には、作業明細番号が登録される。作業進捗の項目には、作業進捗の内容が登録される。作業進捗は、該当の作業明細に未着手の場合は“未着手”、着手済の場合は“着手”、完了済の場合は“完了”、異常終了の場合は“異常終了”が設定される。“異常終了”の場合は、異常終了の理由（例えば、“（部品不足）”など）が追加され得る。備考の項目には、作業者により入力された補足的な情報が登録される。
【００７４】
ここで、作業報告テーブル２１３には、ある作業明細書のデータが何れかのモバイル端末（またはクライアント）によりダウンロードされたタイミングで、当該作業明細書に対応する作業明細番号のタプルが作業報告テーブル２１３に追加される。このため、作業明細書のデータのダウンロードが行われなければ、作業報告をアップロードすることはできない（作業報告を格納するタプルが用意されていなければ作業報告を格納できないため）。タプル追加時の作業進捗の初期値は“未着手”であり、備考の初期値は設定なし“−”である。
【００７５】
例えば、作業報告テーブル２１３には、作業明細番号が“４１９２４０１−１”、作業進捗が“着手”、備考が設定なし（“−”）という情報が登録される。これは、作業明細番号“４１９２４０１−１”の作業明細が着手されており、備考の設定がないことを示す。
【００７６】
なお、作業報告テーブル２１３において、作業明細番号“１２４２１４９−１”では、作業進捗が“異常終了（部品不足）”であり、備考が“不足部品Ａ０００１”である。これは、作業明細番号“１２４２１４９−１”の作業明細が着手はされたものの、部品不足によって異常終了していることを示す。更に、不足していた部品が“Ａ０００１”の品番で示される部品であることを示す。
【００７７】
例えば、指示者Ｕ２１は、クライアント３００によりサーバ２００にアクセスすることで、作業報告テーブル２１３の登録内容を閲覧できる。指示者Ｕ２１は、作業報告テーブル２１３の内容により、各作業明細の作業進捗や問題点などを確認することで、現在の全体の作業状況を把握できる。
【００７８】
図９は、第２の実施の形態のインデックステーブルの例を示す図である。インデックステーブル１１１は、記憶部１１０に格納される。インデックステーブル１１１は、作業者、作業一覧番号および作業明細番号の項目を含む。
【００７９】
作業者の項目には、作業者の名前（または作業者の識別情報）が登録される。作業一覧番号の項目には、作業一覧番号が登録される。作業明細番号の項目には、作業明細番号が登録される。
【００８０】
例えば、インデックステーブル１１１には、作業者が“児玉こだお”、作業一覧番号が“４１９２４０１”、作業明細番号が“４１９２４０１−１”という情報が登録される。これは、作業者“児玉こだお”と作業一覧番号“４１９２４０１”と作業明細番号“４１９２４０１−１”との対応関係を示す。すなわち、作業一覧番号“４１９２４０１”および作業明細番号“４１９２４０１−１”はユーザ名“児玉こだお”である作業者が担当することを示す。
【００８１】
図１０は、第２の実施の形態のシナリオデータの例を示す図である。シナリオデータ１１２は、記憶部１１０に格納される。シナリオデータ１１２は、負荷生成部１４０，１４０ａ，１４０ｂによる負荷テスト用の電文生成に用いられる。シナリオデータ１１２は、延べｎ人（ｎは１以上の整数）の作業者による電文パターンを含む。ここで、電文パターンは、複数の電文の集合である。シナリオは、複数の（ｎ個の）電文パターンの集合である。以下、シナリオデータ１１２の左側に便宜的に付した行番号によって設定内容を指し示す。
【００８２】
例えば、１行目〜９行目は、“作業者１の電文パターン定義”である。“作業者１の電文パターン定義”を“電文パターン１”と表記している。各行の内容が、１つの電文に設定されるコマンドおよびパラメータを示す。なお、サーバ２００におけるログイン認証のため、電文にはユーザ名とパスワードとが設定されることもある（６行目の「ＨＴＴＰ  送信  “作業者１”，“パスワード”；」）。記憶部１１０は、各ユーザ名に対応するパスワードも予め記憶している。同様にして、ｎ個目の電文パターンｎ（１２行目〜２０行目）まで定義される。
【００８３】
図１１は、第２の実施の形態のシナリオデータの他の例を示す図である。シナリオデータ１１３により、シナリオデータ１１２と同等のシナリオを定義することができる。図１０と同様に、シナリオデータ１１３の左側に便宜的に付した行番号によって設定内容を指し示す。具体的には、予め用意された作業者の名前の中からランダムに決定し、変数ｕｓｅｒＮａｍｅに代入する（２行目）。変数ｐａｓｓｗｄには当該作業者に対応するパスワードが代入されることになる。
【００８４】
更に、該当のユーザ名に対応するインデックスを記憶部１１０から読み出す（９行目の「ｉｎｄｅｘＦｉｌｅ＝ＦＩＬＥ  Ｉ／Ｏ（インデックス要求）；」）。読み出したインデックスの中から、該当のユーザ名に応じた作業明細番号を取得する（１０行目の「作業明細番号  ＝  該当データ探索（ｉｎｄｅｘＦｉｌｅ，ｕｓｅｒＮａｍｅ）；」）。また、該当の作業明細番号に対する報告を送信する（１１行目の「ＨＴＴＰ  送信  “作業報告送信”，ｕｓｅｒＮａｍｅ，“作業明細番号”，“完了”；」）。
【００８５】
次に、第２の実施の形態の処理手順を説明する。まず、モバイル端末を用いた通常運用時（負荷テスト時ではない）の処理の流れを説明する。以下の説明では、モバイル端末４００の処理を主に例示するが、モバイル端末４００ａも同様の処理を実行する。
【００８６】
図１２は、第２の実施の形態の通常運用時の処理の流れを示すシーケンスである。以下、図１２に示す処理をステップ番号に沿って説明する。
（Ｓ１０１）モバイル端末４００は、作業者Ｕ３１によるログイン情報の入力を受け付ける。ログイン情報は、作業者Ｕ３１のユーザ名とパスワードとを含む。
【００８７】
（Ｓ１０２）モバイル端末４００は、入力されたログイン情報に基づいて、サーバ２００にログイン要求を送信する。ログイン要求は、作業者Ｕ３１のユーザ名とパスワードとを含む。サーバ２００は、サーバ２００は、ログイン要求を受信する。
【００８８】
（Ｓ１０３）サーバ２００は、受信したログイン要求に基づいてログイン処理を実行する。例えば、サーバ２００は、サーバ２００が保持するユーザ名とパスワードとの組と、ログイン要求で受信したユーザ名とパスワードとの組とを照合して、一致するものがあるか否かを判定する。一致するものがあればログイン成功であり、一致するものがなければログイン失敗である。
【００８９】
（Ｓ１０４）サーバ２００は、ログインの成功か失敗かを示すログイン応答をモバイル端末４００に送信する。
（Ｓ１０５）サーバ２００は、モバイル端末４００が備えるディスプレイによりログイン結果を表示する。ここで、ログインは成功しているものとする。なお、ログインに失敗した場合、モバイル端末４００は、作業者Ｕ３１によるユーザ名とパスワードとの入力を再度受け付け、ログインを試みてもよい。
【００９０】
（Ｓ１０６）モバイル端末４００は、作業者Ｕ３１による作業一覧取得の入力を受け付ける。
（Ｓ１０７）モバイル端末４００は、作業者Ｕ３１のユーザ名に対応する作業一覧を、サーバ２００に問い合わせる。サーバ２００は、作業一覧の問い合わせを受信する。
【００９１】
（Ｓ１０８）サーバ２００は、作業一覧の問い合わせに応じて、作業者Ｕ３１に対応する作業一覧を、記憶部２１０に記憶された作業一覧テーブル２１１から読み出す。
（Ｓ１０９）サーバ２００は、読み出した作業一覧をモバイル端末４００に送信する。モバイル端末４００は、作業一覧を受信する。ここで、作業一覧には、作業明細番号を示す情報が含まれる。例えば、サーバ２００は、前述のように、作業一覧テーブル２１１に含まれる作業明細個数の情報を、作業一覧に含めてモバイル端末４００に提供してもよい。すると、モバイル端末４００は、作業明細番号に対する所定のルール（例えば、作業一覧番号の末尾に“−”と昇順の番号を付加したものを作業明細番号とするなど）に従って、作業明細番号を特定できる。
【００９２】
（Ｓ１１０）モバイル端末４００は、作業明細番号を内部保存する。すなわち、モバイル端末４００は、作業明細番号をモバイル端末４００のメモリに格納する。
（Ｓ１１１）モバイル端末４００は、モバイル端末４００が備えるディスプレイにより、作業一覧を表示する。
【００９３】
（Ｓ１１２）モバイル端末４００は、作業者Ｕ３１による作業明細取得の入力を受け付ける。
（Ｓ１１３）モバイル端末４００は、モバイル端末４００のメモリから作業明細番号を読み出す。ステップＳ１０９で特定した作業明細番号が複数ある場合、モバイル端末４００は、任意の順序で作業明細番号を読み出せる。例えば、モバイル端末４００は、作業明細番号の小さい順に作業明細番号を読み出してもよい。また、ステップＳ１１２の作業明細取得の入力時に、対象とする作業明細番号の作業者Ｕ３１による入力を受け付けてもよい。
【００９４】
（Ｓ１１４）モバイル端末４００は、読み出した作業明細番号について、作業明細を、サーバ２００に問い合わせる。サーバ２００は、作業明細の問い合わせを受信する。
（Ｓ１１５）サーバ２００は、作業明細の問い合わせに含まれる作業明細番号に基づいて、記憶部２１０から作業明細（作業明細書のデータ）を読み出す。ここで、サーバ２００は、記憶部２１０に記憶された作業明細テーブル２１２において、ダウンロードフラグが“ＴＲＵＥ”の作業明細番号については作業明細書のデータを取得しなくてよい。
【００９５】
（Ｓ１１６）サーバ２００は、作業明細テーブル２１２における、該当の作業明細番号のダウンロードフラグを“ＦＡＬＳＥ”から“ＴＲＵＥ”に更新する。
（Ｓ１１７）サーバ２００は、ステップＳ１１５で読み出した作業明細をモバイル端末４００に送信する。モバイル端末４００は、作業明細を受信する。
【００９６】
（Ｓ１１８）モバイル端末４００は、モバイル端末４００が備えるディスプレイにより、作業明細の内容を表示する。作業者Ｕ３１は、表示された作業明細の内容を確認して、作業明細に対応する作業を行い、当該作業明細の作業を完了する。なお、モバイル端末４００は、ステップＳ１１２〜Ｓ１１８の処理を、該当の作業一覧に属する全ての作業明細のダウンロードが完了するまで、繰り返し実行してもよい。
【００９７】
（Ｓ１１９）モバイル端末４００は、作業者Ｕ３１による作業報告の入力を受け付ける。作業報告の入力には、作業明細番号が含まれる。
（Ｓ１２０）モバイル端末４００は、モバイル端末４００のメモリから作業明細番号を読み出し、ステップＳ１１９で受け付けた作業明細番号が適正であることを確認する。
【００９８】
（Ｓ１２１）モバイル端末４００は、ステップＳ１１９で受け付けた作業報告を、サーバ２００に送信する。サーバ２００は、作業報告を受信する。
（Ｓ１２２）サーバ２００は、記憶部２１０に記憶された作業報告テーブル２１３に、今回受信した作業報告を書き込む。
【００９９】
（Ｓ１２３）サーバ２００は、作業報告を受け付けた作業明細番号について、記憶部２１０に記憶された作業明細テーブル２１２の作業明細完了フラグを、“ＦＡＬＳＥ”から“ＴＲＵＥ”に更新する。
【０１００】
（Ｓ１２４）サーバ２００は、作業明細完了フラグの更新結果をモバイル端末４００に送信する。モバイル端末４００は更新結果を受信する。
（Ｓ１２５）モバイル端末４００は、作業報告の受信が完了したことを示す完了通知を、モバイル端末４００のディスプレイにより表示する。なお、モバイル端末４００は、ステップＳ１１９〜Ｓ１２５の処理を、該当の作業一覧に属する全ての作業明細の作業報告を受け付けるまで、繰り返し実行してもよい。
【０１０１】
更に、モバイル端末４００は、作業者Ｕ３１による全ての作業一覧について、全ての作業明細の作業報告を受け付けるまで、ステップＳ１０６〜Ｓ１２５を繰り返し実行してもよい。
【０１０２】
図１２で例示した手順で重要な点は、サーバ２００からモバイル端末４００にダウンロードされたデータをモバイル端末４００内に保存できることである。例えばモバイル端末４００が作業一覧を要求した際に、サーバ２００は、作業一覧と作業明細番号（あるいは作業明細番号を特定するための情報）とを抽出し、モバイル端末４００に送信する。モバイル端末４００は、作業一覧と作業明細番号とをサーバ２００から受信し内部保存する。
【０１０３】
モバイル端末４００は、モバイル端末４００のディスプレイにより表示した作業一覧の中から作業者Ｕ３１が実施したい作業の選択を受け付けると、内部保存された作業明細番号を含む作業一覧問い合わせを、サーバ２００に発行する。これによって、以降のモバイル端末４００による作業明細のダウンロード、および、サーバ２００によるダウンロードフラグの更新が適切に行われる。ダウンロードフラグの更新に伴い、サーバ２００側で作業報告のアップロードを受け付け可能になる。このため、当該保守システムを正しく利用するためには、作業明細のダウンロードが必須となる。作業報告のアップロードにおいても、アップロード対象の作業明細番号を指定する必要があり、モバイル端末４００では、ダウンロードしたデータの内部保存が求められる。
【０１０４】
図１３は、第２の実施の形態の負荷テストの例を示す図である。第２の実施の形態の負荷テストシステムでは、図１２で例示した実運用時にモバイル端末４００が送信する各種電文を模した負荷テスト用の電文を適切に生成するため、サーバ２００によりクライアント１００にインデックスを提供する。クライアント１００は、提供されたインデックスを記憶部１１０に記憶されたインデックステーブル１１１に登録しておく。
【０１０５】
制御部１３０は、ユーザＵ１１による負荷テストツールの起動操作を受け付けると、負荷生成部１４０，１４０ａ，１４０ｂに対して負荷生成を指示する。負荷生成の指示には、負荷生成部１４０，１４０ａ，１４０ｂそれぞれにより生成させる電文に設定するユーザ名や電文を生成する時刻などの条件を含めることができる。制御部１３０は、負荷生成部１４０，１４０ａ，１４０ｂそれぞれに対して、異なるユーザ名での電文生成を割り当てることで、複数の作業者が作業を行う場合に相当する負荷をサーバ２００に対して与えることができる。
【０１０６】
電文生成部１４１は、作業明細の問い合わせ電文をサーバ２００に送信する際、記憶部１１０に記憶されたインデックステーブル１１１を参照して、作業明細の問い合わせ電文に設定する作業明細番号を取得する。電文生成部１４１は、性能測定部１４２を介して、送受信部１４３（図１３では図示を省略している）に電文の送信指示を行う。
【０１０７】
性能測定部１４２は、送信対象の電文の数および時刻や、送受信部１４３が受信した応答電文の数および時刻などを比較することで、サーバ２００の負荷に対する性能を測定する。例えば、性能測定部１４２は、トランザクション数測定部１４２ａ、応答性能測定部１４２ｂおよびＷｅｂリソース測定部１４２ｃを有する。トランザクション数測定部１４２ａは、負荷生成部１４０とサーバ２００との間のトランザクション数を測定する。負荷生成部１４０は、クライアント１００とサーバ２００との間のトランザクション数を測定してもよい。応答性能測定部１４２ｂは、問い合わせ電文に対して応答電文を受信するまでの遅延時間（応答遅延）を測定する。応答性能測定部１４２ｂは、例えば、負荷生成部１４０とサーバ２００との間のトランザクション数の変化、または、クライアント１００とサーバ２００との間のトランザクション数の変化、に応じた応答遅延の変化を測定することもできる。Ｗｅｂリソース測定部１４２ｃは、サーバ２００でテスト対象ソフトウェア２２０により使用されているプロセッサやメモリなどのリソース量を測定する。
【０１０８】
次に、上記の負荷テストの流れをより具体的に説明する。
図１４は、第２の実施の形態のインデックス生成の流れを示すシーケンスである。以下、図１４に示す処理をステップ番号に沿って説明する。
【０１０９】
（Ｓ１１）サーバ２００は、ユーザＵ１１によるインデックス生成の操作入力を受け付ける。ユーザＵ１１は、クライアント１００にインデックス生成の操作入力を行ってもよい。その場合、クライアント１００は、インデックス生成の指示をサーバ２００に送信する。
【０１１０】
（Ｓ１２）サーバ２００は、記憶部２１０に記憶された作業一覧テーブル２１１を読み出す。
（Ｓ１３）サーバ２００は、記憶部２１０に記憶された作業明細テーブル２１２を読み出す。
【０１１１】
（Ｓ１４）サーバ２００は、作業一覧テーブル２１１および作業明細テーブル２１２に基づいて、インデックステーブル１１１を生成する。具体的には、インデックステーブル１１１は、作業一覧テーブル２１１および作業明細テーブル２１２を作業一覧番号で結合した結果から、負荷テストに用いるレコードを選択し、作業者、作業一覧番号および作業明細番号を取り出した（射影）ものである。
【０１１２】
（Ｓ１５）サーバ２００は、生成したインデックステーブル１１１をクライアント１００に送信する。クライアント１００は、インデックステーブル１１１を受信する。
（Ｓ１６）クライアント１００は、インデックステーブル１１１を記憶部１１０に保存する（インデックス内部保存）。
【０１１３】
（Ｓ１７）クライアント１００は、インデックス生成が完了した旨をユーザＵ１１に通知する。例えば、クライアント１００は、インデックス生成が完了した旨をディスプレイ１１により表示してもよい。
【０１１４】
こうして、負荷テストを開始する準備が整う。クライアント１００は、記憶部１１０に記憶されたシナリオデータ１１３に基づいて、下記の流れで負荷テストを実行する。
図１５は、第２の実施の形態の負荷テストの流れを示すシーケンスである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１１５】
（Ｓ２１）クライアント１００は、ユーザＵ１１による負荷テスト開始の操作入力を受け付ける。
（Ｓ２２）クライアント１００は、作業者を動的に決定する。具体的には、制御部１３０は、予め指定された作業者の中から何れかをランダムに選択し、負荷生成部１４０に与える。制御部１３０は、同様にして、負荷生成部１４０ａ，１４０ｂにもランダムに選択した作業者の情報を与える。制御部１３０は、負荷生成部１４０，１４０ａ，１４０ｂに与える作業者の情報が重複しないようにする（既に選択済の作業者を、新たな選択対象から除外する）。
【０１１６】
（Ｓ２３）クライアント１００は、サーバ２００にログイン要求を送信する。ログイン要求は、作業者を示すユーザ名と当該ユーザ名に対応するパスワードとを含む。なお、記憶部１１０は、ユーザ名に対応するパスワードを予め記憶している。サーバ２００は、ログイン要求を受信する。
【０１１７】
（Ｓ２４）サーバ２００は、ログイン要求に基づいてログイン処理を実行する。具体的には、サーバ２００は、ログイン要求に含まれるユーザ名とパスワードとの組が、サーバ２００が予め保持しているユーザ名とパスワードとの組に一致していることを確認する。
【０１１８】
（Ｓ２５）サーバ２００は、ログイン応答をクライアント１００に送信する。クライアント１００は、ログイン応答を受信する。ログイン応答は、ログイン成功であることを示すものとする。
【０１１９】
（Ｓ２６）クライアント１００は、ステップＳ２２で決定したユーザ名に対応する作業一覧の問い合わせをサーバ２００に送信する。サーバ２００は、作業一覧の問い合わせを受信する。
【０１２０】
（Ｓ２７）サーバ２００は、記憶部２１０に記憶された作業一覧テーブル２１１を参照して、該当のユーザ名に対応する作業一覧を読み出す。
（Ｓ２８）サーバ２００は、読み出した作業一覧をクライアント１００に送信する。前述のように、作業一覧には、作業明細番号または作業明細番号を特定するための情報が含まれる。クライアント１００は、作業一覧を受信する。
【０１２１】
（Ｓ２９）クライアント１００は、対象作業を動的に決定する。具体的には、制御部１３０は、受信した作業一覧の中からランダムに、対象作業を決定する。
（Ｓ３０）クライアント１００は、決定した対象作業の作業一覧番号に対応するインデックスを記憶部１１０に記憶されたインデックステーブル１１１から検索する。これは、記憶部１１０に対するインデックスの要求と考えてもよい。
【０１２２】
（Ｓ３１）クライアント１００は、検索結果として、作業一覧番号に対応するインデックスを取得する。これは、記憶部１１０からのインデックスの応答と考えてもよい。
（Ｓ３２）クライアント１００は、作業明細書のデータを受信済みである作業明細番号を算出する。例えば、作業明細書のデータは、作業明細番号を含む。このため、制御部１３０は、受信済みの作業明細書のデータを参照することで、作業明細書のデータを受信済みである作業明細番号を求めることができる。
【０１２３】
（Ｓ３３）クライアント１００は、作業明細書のデータを受信済みでない作業明細番号を、ステップＳ３１で取得したインデックスからランダムに選択し、選択した作業明細番号を含む作業明細の問い合わせをサーバ２００に送信する。サーバ２００は、作業明細の問い合わせを受信する。
【０１２４】
（Ｓ３４）サーバ２００は、受信した問い合わせに含まれる作業明細番号に対応する作業明細書のデータ（作業明細）を記憶部２１０から読み出す。
（Ｓ３５）サーバ２００は、該当の作業明細番号について、作業明細テーブル２１２のダウンロードフラグを“ＦＡＬＳＥ”から“ＴＲＵＥ”に更新する。
【０１２５】
（Ｓ３６）サーバ２００は、ステップＳ３４で読み出した作業明細書のデータをクライアント１００に送信する。クライアント１００は、作業明細書のデータを受信する。
なお、該当の作業一覧番号に属する作業明細番号が複数の場合、ステップＳ３２〜Ｓ３６の処理は複数回繰り返され、クライアント１００により複数の作業明細番号の全てについて作業明細書のデータがダウンロードされる。また、ある作業者に割り当てられた作業一覧番号が複数の場合、ステップＳ２９〜Ｓ３６の処理は複数回繰り返され、クライアント１００により複数の作業一覧番号の全てについて、作業明細書のデータがダウンロードされる。
【０１２６】
図１６は、第２の実施の形態の負荷テストの流れ（続き）を示すシーケンスである。以下、図１６に示す処理をステップ番号に沿って説明する。
（Ｓ３７）クライアント１００は、対象作業および報告内容を動的に決定する。具体的には、制御部１３０は、受信した作業一覧の中からランダムに報告の対象作業を決定する。また、制御部１３０は、記憶部１１０に予め記憶された報告内容（ダミーの報告内容でよい）の中から何れかをランダムに選択する。
【０１２７】
（Ｓ３８）クライアント１００は、決定した対象作業の作業一覧番号に対応するインデックスを記憶部１１０に記憶されたインデックステーブル１１１から検索する。これは、記憶部１１０に対するインデックスの要求と考えてもよい。
【０１２８】
（Ｓ３９）クライアント１００は、検索結果として、作業一覧番号に対応するインデックスを取得する。これは、記憶部１１０からのインデックスの応答と考えてもよい。
（Ｓ４０）クライアント１００は、報告の対象とする作業明細番号（対象作業明細番号）を算出する。例えば、制御部１３０は、作業報告を送信済みの作業明細番号を記憶部１１０に記録しておく。すると、制御部１３０は、記憶部１１０に記録された作業報告を送信済みの作業明細番号以外の作業明細番号を、対象作業明細番号の候補とすることができる。そして、制御部１３０は、対象作業明細番号の候補の中から、何れかをランダムに選択して、対象作業明細番号とする。
【０１２９】
（Ｓ４１）クライアント１００は、作業報告をサーバ２００に送信する。作業報告は対象作業明細番号を含む。サーバ２００は、作業報告を受信する。
（Ｓ４２）サーバ２００は、対象作業明細番号に対応付けて、作業報告テーブル２１３に作業報告を書き込む。
【０１３０】
（Ｓ４３）サーバ２００は、対象作業明細番号について、作業明細テーブル２１２の作業明細完了フラグを“ＦＡＬＳＥ”から“ＴＲＵＥ”に更新する。
（Ｓ４４）サーバ２００は、クライアント１００に更新結果を応答する。クライアント１００は、更新結果を受信する。
【０１３１】
（Ｓ４５）クライアント１００は、負荷テストが完了した旨をユーザＵ１１に通知する。例えば、クライアント１００は、負荷テストが完了した旨をディスプレイ１１により表示してもよい。
【０１３２】
なお、ある作業者に割り当てられた作業一覧番号が複数の場合や、作業一覧番号に属する作業明細番号が複数の場合、ステップＳ３７〜Ｓ４４の処理は複数回繰り返され、複数の作業明細番号の全てについてクライアント１００により作業報告が送信される。
【０１３３】
このように、クライアント１００は、インデックステーブル１１１に基づいて、作業明細の問い合わせ電文に含める作業明細番号を適切に決定することができる。また、クライアント１００は、インデックステーブル１１１に基づいて、作業報告の電文に含める作業明細番号を適切に決定することができる。
【０１３４】
ここで、上記の処理において、各種問い合わせに対するサーバ２００の処理は、テスト対象ソフトウェア２２０によって実行されると考えてもよい。
また、１人の作業者（１ユーザ）に関する処理は、１つの負荷生成部によって実行される。例えば、クライアント１００が負荷生成部１４０，１４０ａ，１４０ｂを有する場合、１つのクライアント１００により３ユーザに関する処理を並行して実行して、サーバ２００の負荷テストを行える。クライアント１００，１００ａ，１００ｂがそれぞれ３つの負荷生成部を実現できるとき、クライアント１００，１００ａ，１００ｂを同時に用いることで、３×３＝９ユーザに関する処理を並行して実行して、サーバ２００の負荷テストを行えることになる。クライアント１００，１００ａ，１００ｂは互いに連携して、重複したユーザに関する電文を送信しないように制御できる。すなわち、ｎ人のユーザによる並行処理を再現したい場合、クライアント１００，１００ａ，１００ｂ上で負荷生成部を合計ｎ個動作させればよい。
【０１３５】
図１７は、負荷テストの比較例を示す図である。図１７では、インデックステーブル１１１を用いずに負荷テストを行う場合を例示している。図１７では、クライアント１００およびサーバ２００で用いた名称・符号と同じ名称・符号を便宜的に用いて、負荷テストの比較例を説明する。
【０１３６】
負荷生成部１４０，１４０ａ，１４０ｂは、ある作業者に対する作業一覧を、問い合わせに対する応答としてサーバ２００から受信したとしても破棄してしまう（内部保存できないため）。このため、電文生成部１４１は、サーバ２００に対して作業明細の問い合わせを送信しようとしても、問い合わせ対象の作業明細番号を取得できず、業務の流れに従った適切な問い合わせをサーバ２００に送ることができない。このため、実際の運用に即した負荷テストを行うことが難しい。次に、上記の負荷テストの比較例の流れをより具体的に説明する。
【０１３７】
図１８は、負荷テストの比較例の流れを示すシーケンスである。以下、図１８に示す処理をステップ番号に沿って説明する。
（Ｓ５１）クライアント１００は、ユーザＵ１１による負荷テスト開始の操作入力を受け付ける。
【０１３８】
（Ｓ５２）クライアント１００は、作業者を動的に決定する。具体的には、制御部１３０は、予め指定された作業者の中から何れかをランダムに選択し、負荷生成部１４０に与える。制御部１３０は、同様にして、負荷生成部１４０ａ，１４０ｂにもランダムに選択した作業者の情報を与える。制御部１３０は、負荷生成部１４０，１４０ａ，１４０ｂに与える作業者の情報が重複しないようにする（既に選択済の作業者を、新たな選択対象から除外する）。
【０１３９】
（Ｓ５３）クライアント１００は、サーバ２００にログイン要求を送信する。ログイン要求は、作業者を示すユーザ名と当該ユーザ名に対応するパスワードとを含む。なお、記憶部１１０は、ユーザ名に対応するパスワードを予め記憶している。サーバ２００は、ログイン要求を受信する。
【０１４０】
（Ｓ５４）サーバ２００は、ログイン要求に基づいてログイン処理を実行する。具体的には、サーバ２００は、ログイン要求に含まれるユーザ名とパスワードとの組が、サーバ２００が予め保持しているユーザ名とパスワードとの組に一致していることを確認する。
【０１４１】
（Ｓ５５）サーバ２００は、ログイン応答をクライアント１００に送信する。クライアント１００は、ログイン応答を受信する。ログイン応答は、ログイン成功であることを示すものとする。
【０１４２】
（Ｓ５６）クライアント１００は、ステップＳ５２で決定したユーザ名に対応する作業一覧の問い合わせをサーバ２００に送信する。サーバ２００は、作業一覧の問い合わせを受信する。
【０１４３】
（Ｓ５７）サーバ２００は、記憶部２１０に記憶された作業一覧テーブル２１１を参照して、該当のユーザ名に対応する作業一覧を読み出す。
（Ｓ５８）サーバ２００は、読み出した作業一覧をクライアント１００に送信する。前述のように、作業一覧には、作業明細番号または作業明細番号を特定するための情報が含まれる。クライアント１００は、作業一覧を受信する。クライアント１００は、作業一覧に含まれる作業明細番号または作業明細番号を特定するための情報を内部保存しようとしても、内部保存することはできない（作業明細番号の内部保存不可）。負荷テストツールでは、ＨＴＴＰレスポンスメッセージのヘッダやステータスコードを確認するが、メッセージボディに記述された情報は抽出されずに破棄されるからである。
【０１４４】
（Ｓ５９）クライアント１００は、ステップＳ５８で受信した作業一覧に基づいて、対象作業を動的に決定する。具体的には、クライアント１００は、受信した作業一覧の中からランダムに、対象作業に対応する作業一覧を決定する。しかし、クライアント１００は、インデックステーブル１１１を保持していないため、決定した作業一覧に対応する作業明細番号を取得することはできない（作業明細番号の読み出し不可）。
【０１４５】
図１９は、負荷テストの比較例の流れ（続き）を示すシーケンスである。以下、図１９に示す処理をステップ番号に沿って説明する。
（Ｓ６０）クライアント１００は、作業明細の問い合わせをサーバ２００に送信する。しかし、ステップＳ５９で説明したように、クライアント１００は、問い合わせる作業明細番号（要求作業明細番号）を取得できない。このため、クライアント１００は、作業明細の問い合わせに要求作業明細番号を含めることができない。サーバ２００は、作業明細の問い合わせを受信する。
【０１４６】
（Ｓ６１）サーバ２００は、記憶部１１０に記憶された作業明細書のデータを読み出す。ここでは、要求作業明細番号を取得できないため、サーバ２００は、静的読み込みのみが可能である（例えば、予め定められたダミーの作業明細書のデータを読み出すなど）。
【０１４７】
（Ｓ６２）サーバ２００は、ダウンロードフラグを更新する。このダウンロードフラグは、作業明細テーブル２１２に含まれる予め定められた作業明細番号に対応するダウンロードフラグでもよいし、サーバ２００が保持するダミーのフラグでもよい。
【０１４８】
（Ｓ６３）サーバ２００は、ステップＳ６１で読み出した作業明細書のデータを、クライアント１００に送信する。クライアント１００は、作業明細書のデータを受信する。
（Ｓ６４）クライアント１００は、対象作業および報告内容を動的に決定する。具体的には、制御部１３０は、受信した作業一覧の中からランダムに報告の対象作業を決定する。また、制御部１３０は、記憶部１１０に予め記憶された報告内容（ダミーの報告内容でよい）の中から何れかをランダムに選択する。しかし、クライアント１００は、作業一覧に対応する作業明細番号を保持していないため、決定した作業一覧に対応する作業明細番号を取得することはできない（作業明細番号の読み出し不可）。
【０１４９】
（Ｓ６５）クライアント１００は、作業報告をサーバ２００に送信する。しかし、クライアント１００は、要求作業明細番号を作業報告に含めることはできない。サーバ２００は、作業報告を受信する。
【０１５０】
（Ｓ６６）サーバ２００は、作業報告テーブル２１３に作業報告を書き込む。ここでは、クライアント１００から要求作業明細番号を取得できないため、サーバ２００は、静的書き込みのみが可能である（例えば、予め定められた作業明細番号について作業報告を書込むなど）。
【０１５１】
（Ｓ６７）サーバ２００は、作業明細完了フラグを更新する。この作業明細完了フラグは、作業明細テーブル２１２に含まれる予め定められた作業明細番号に対応する作業明細完了フラグでもよいし、サーバ２００が保持するダミーのフラグでもよい。
【０１５２】
（Ｓ６８）サーバ２００は、作業明細完了フラグの更新結果をクライアント１００に応答する。
（Ｓ６９）クライアント１００は、負荷テストが完了した旨をユーザＵ１１に通知する。例えば、クライアント１００は、負荷テストが完了した旨をディスプレイ１１により表示してもよい。
【０１５３】
このようにして、通常、負荷テストツールは、本来、静的なシナリオ実行を想定しており、予めシナリオ中に記述された電文をサーバに送信するのが一般的である。このため、図１８，１９で例示したように、サーバから受信したデータを負荷テストツール内部に取り込み、取り込んだデータを使用して定義された電文を使用したシナリオを生成すること（動的シナリオ生成）ができない。動的シナリオ生成ができない理由は、負荷テストツールの使用によるものであり、ＨＴＴＰのレスポンスメッセージのステータスコードのみを確認しているためである。
【０１５４】
図２０は、レスポンスメッセージの例を示す図である。例えば、図２０の例では、レスポンスメッセージの１行目の記述がステータス行、２行目〜５行目の記述がメッセージヘッダ、６行目以降の記述がメッセージボディに相当する。ＨＴＴＰリクエストメッセージを送信した場合（例えば、ＧＥＴメソッドやＰＯＳＴメソッドを送信した場合）、サーバ２００からのＨＴＴＰのレスポンスメッセージは、図２０に示す構造になる。
【０１５５】
当該レスポンスメッセージをクライアント側の負荷テストツールが受信した際、負荷テストツールは、ステータス行のステータスコード（１行目の“２００”の部分）を確認する。ステータスコードは、例えば、２００番台は処理成功、４００番台はクライアントエラー、５００番台はサーバエラーなどを示す。したがって、ステータスコードにより処理結果を把握可能である。処理が正常に完了していない場合（例えばステータスコードが“２００”以外の数値の場合）何らかの問題が発生していると考えられるため、負荷テストツールは、当該シナリオを“異常終了”として処理を終了することが多い。一方、負荷テストツールは、ステータスコード“２００”の応答を得た場合、処理が正常に終了したものとみなして次の電文を送信する。このとき、メッセージボディは、各サーバ側でのユーザ定義部分であるため、負荷テストツールは、メッセージボディの内容までは関与しない。
【０１５６】
このような状況で、Ｗｅｂアプリケーションの構造上、次のＨＴＴＰのリクエストメッセージ（ＰＯＳＴメソッド）のメッセージボディに、前回のサーバ応答のメッセージボディ内の情報を指定する（埋め込む）ことが処理上必須の場合、予め電文を静的に記述することができない。ただし、サーバ側の処理と整合性のとれた情報を予め静的に記述しておくことも考えられる。しかし、この場合、１パターンの作業になるか、ｎパターンの定義を作成するかのどちらかになってしまう。１パターンの作業では大量の同一ユーザが同一作業をするケースでしか負荷テストを行えず、実際のシステム利用状況から乖離した状況でしか負荷テストを行えないことになる。また、ｎパターンの定義を作成する場合、作成作業に膨大な作業工数がかかり現実的ではない。
【０１５７】
実際のシステムの利用状況に近い負荷テストを実現するためには、負荷テストツールが模擬する作業者や作業内容などを予め決めることなく、シナリオを実行するたびに動的に決定することが求められる。ただし、作業者や対象作業などを乱数で決定したとしても、ｎ通りの電文パターン作成は避けられない。仮に、作業者を乱数で決定したとしても、「作業明細問い合わせ」や「作業報告送信」の送信内容は、乱数では決定できないためである。乱数での決定ができない理由は、前者（「作業明細問い合わせ」）については使用する作業明細番号がログインしている作業者毎に割り当てられたものであり、後者（「作業報告送信」）については、作業明細書のデータをダウンロード済であることが求められるためである。
【０１５８】
このように、作業明細番号を乱数で決定することができないため、動的シナリオ生成により作業明細番号をシナリオ中に取り込めなければ、シナリオ作成工数を削減できない。
そこで、第２の実施の形態の負荷テストシステムでは、図１４〜図１６で例示したように、負荷テストに先立ち、サーバ２００によって、インデックステーブル１１１を予め作成しておく。例えば、クライアント１００は、あるユーザをランダムに選択すれば、インデックステーブル１１１を検索することにより、当該ユーザの作業を絞り込める。
【０１５９】
より具体的には、インデックステーブル１１１によれば、例えば、作業者“児玉こだお”の作業は、作業一覧番号“４１９２４０１”の作業であると絞り込める。したがって、この場合、クライアント１００は、サーバ２００からのＨＴＴＰのレスポンスメッセージのメッセージボディ部に、作業一覧番号“４１９２４０１”を受信したことを特定できる。後続の処理において作業明細番号を要する場合、インデックステーブル１１１により、ユーザ“児玉こだお”、作業“４１９２４０１”の条件を満たすものは“４１９２４０１−１”、“４１９２４０１−２”、“４１９２４０１−３”の３つしかないと判断できる。すなわち、クライアント１００は、該当する３つの作業明細番号に対象を絞った上で、乱数による動的決定を行えば、他の作業者用のデータにアクセスすることによるアクセス違反にはならない。このため、クライアント１００は、ＨＴＴＰのレスポンスメッセージのステータスコード“２００”さえ確認できれば、処理が正常に進んでいることを確認できる。
【０１６０】
また、インデックステーブル１１１において、作業者“山田やまお”のように複数の作業を割り当てられているユーザも存在する。先に述べたダウンロードフラグのように、「事前にアクセスしていなければ後続処理に影響を与えるため、同一ユーザ内でも、どのデータを選ぶかを考慮しなければならない」という制約は、作業明細番号についてのみ発生する（作業一覧番号には同制約はない）。なぜなら、ダウンロード済の作業明細番号に対応する作業報告のタプルを、作業報告テーブル２１３に生成する処理があるためである。したがって、ユーザ“山田やまお”が選択された場合は、ユーザ“児玉こだお”に割り当てられている作業“４１９２４０１”やユーザ“内田うちお”に割り当てられている作業“５８７４３２３”を避ければ、サーバ応答と矛盾しない動的シナリオ生成ができる。作業報告についても、乱数によってどの作業明細を選択したかを記録しておけば、サーバ応答を推定することが可能である。
【０１６１】
以上のように、第２の実施の形態の負荷テストシステムでは、サーバ応答に含まれる情報の中で、負荷テストに用いられる情報を予めインデックスとして生成し、負荷テスト時にアクセス可能とする。これにより、クライアント１００，１００ａ，１００ｂは、模擬する作業者の情報が動的に変化しても、サーバ２００に送信すべき適正な情報を求めることが可能となる。その結果、これまでの方法では多くの工数を要していた多人数からの同時アクセスというシナリオを比較的少ない工数で実現できるようになる。例えば、シナリオ中に１通りの電文パターンを定義するだけで（例えば、シナリオデータ１１３）、全ての操作を模擬することができる。
【０１６２】
なお、上記の例では、制御部１３０および負荷生成部１４０，１４０ａ，１４０ｂをクライアント１００に設けるものとしたが、制御部１３０と負荷生成部１４０，１４０ａ，１４０ｂとを別個の装置に設けてもよい。例えば、比較的低スペックであるラップトップ型のクライアントに制御部１３０を配置し、比較的高スペックであるクライアントに負荷生成部１４０，１４０ａ，１４０ｂを配置することも考えられる。また、記憶部１１０が記憶する情報を格納するための記憶装置を、クライアント１００，１００ａ，１００ｂの外部に設け、クライアント１００，１００ａ，１００ｂからアクセス可能としてもよい。
【０１６３】
また、第１の実施の形態の情報処理は、演算部１ｂ，２ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、クライアント１００，１００ａ，１００ｂおよびサーバ２００が備えるプロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０１６４】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１６５】
１  第１の装置
２  第２の装置
１ａ，２ａ  記憶部
１ｂ，２ｂ  演算部
３  ネットワーク
４  作業一覧テーブル
５  作業明細テーブル
６  インデックステーブル
【図１】
2017097758.tif 000003
【図２】
2017097758.tif 000004
【図３】
2017097758.tif 000005
【図４】
2017097758.tif 000006
【図５】
2017097758.tif 000007
【図６】
2017097758.tif 000008
【図７】
2017097758.tif 000009
【図８】
2017097758.tif 000010
【図９】
2017097758.tif 000011
【図１０】
2017097758.tif 000012
【図１１】
2017097758.tif 000013
【図１２】
2017097758.tif 000014
【図１３】
2017097758.tif 000015
【図１４】
2017097758.tif 000016
【図１５】
2017097758.tif 000017
【図１６】
2017097758.tif 000018
【図１７】
2017097758.tif 000019
【図１８】
2017097758.tif 000020
【図１９】
2017097758.tif 000021
【図２０】
2017097758.tif 000022