(57)【要約】【課題】過去に試験を行った際の状態を再現することを可能とする試験装置、試験方法、試験プログラム及び試験システムを提供する。【解決手段】複数の計算機資源のそれぞれが実行する特定の処理の各ソースコードにおける所定の位置に、試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成し、特定の処理の実行中に、複数の計算機資源のいずれかにおいて指示要求命令が実行されたことに応じて、各計算機資源が実行する追加済ソースコードに追加された指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、指示要求命令を実行した計算機資源に対し、実行された指示要求命令に対応する処理の実行を指示する。【選択図】図８
2018165902.tif 000002
【特許請求の範囲】
【請求項１】
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う試験装置であって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成する命令追加部と、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する処理指示部と、を有する、
ことを特徴とする試験装置。
【請求項２】
請求項１において、
前記指示要求命令は、各計算機資源が次に実行する処理の指示を要求する命令である、
ことを特徴とする試験装置。
【請求項３】
請求項１において、
前記指示情報は、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと、各計算機資源が行う処理と、所定の条件とを対応付けた情報であり、
前記処理指示部は、前記所定の条件が満たされている場合に、実行された前記指示要求命令に対応する処理の実行の指示を行う、
ことを特徴とする試験装置。
【請求項４】
請求項３において、
前記所定の条件は、前記複数の計算機資源のうち、前記処理指示部が処理の実行を指示した計算機資源以外の特定の計算機資源において、所定の処理が実行されたことである、
ことを特徴とする試験装置。
【請求項５】
請求項１において、
前記処理指示部は、前記指示情報において、実行された前記指示要求命令に対応する処理が計算機資源の中断である場合、前記指示要求命令を実行した計算機資源に対して中断を指示する、
ことを特徴とする試験装置。
【請求項６】
請求項５において、
前記複数の計算機資源の管理を行う管理装置は、前記処理指示部による中断の指示に伴って前記複数の計算機資源のうちのいずれかの計算機資源が中断した場合、前記いずれかの計算機資源と同じ前記追加済ソースコードを実行する他の計算機資源に、前記いずれかの計算機資源が実行する処理を実行させる、
ことを特徴とする試験装置。
【請求項７】
請求項１において、
前記処理指示部は、前記指示情報において、実行された前記指示要求命令に対応する処理が計算機資源における処理の再開である場合、前記指示要求命令を実行した計算機資源に対して処理の再開を指示する、
ことを特徴とする試験装置。
【請求項８】
請求項１において、さらに、
前記複数の計算機資源のそれぞれから、前記指示要求命令が実行されたことを示す通知を受信する通知受信部を有し、
前記処理指示部は、前記通知受信部が前記通知を受信したことに応じて、前記指示情報の参照を行う、
ことを特徴とする試験装置。
【請求項９】
請求項１において、
前記処理指示部は、前記特定の処理の実行の前に行われる前記特定の処理の事前処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、前記指示要求命令を実行した計算機資源に対し、無作為に決定した処理の実行を指示し、さらに、
前記複数の計算機資源のうちのいずれかの計算機資源が前記指示要求命令を実行したことに応じて、前記いずれかの計算機資源の状態を示すログ情報を出力するログ出力部と、
前記無作為に決定した処理の実行に伴って前記複数の計算機資源において発生した所定の異常を検知する異常検知部と、
前記異常検知部が前記所定の異常の発生を検知した場合、前記ログ情報に基づいて前記指示情報を生成する情報生成部と、を有する、
ことを特徴とする試験装置。
【請求項１０】
請求項９において、
前記情報生成部は、
前記ログ情報を前記複数の計算機資源のそれぞれに対応するログ情報毎にグルーピングし、
グルーピングした前記ログ情報毎に、出力順が最初である第１ログ情報と出力順が最後である第２ログ情報とをそれぞれ特定し、
特定した前記第２ログ情報のそれぞれと、各第２ログ情報の後に出力された前記第１ログ情報のうち、出力順が最初である第１ログ情報とを対応付けた情報を、前記指示情報として生成する、
ことを特徴とする試験装置。
【請求項１１】
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う試験方法であって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成し、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する、
ことを特徴とする試験方法。
【請求項１２】
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う処理をコンピュータに実行させる試験プログラムであって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成し、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する、
処理をコンピュータに実行させることを特徴とする試験プログラム。
【請求項１３】
１または複数のコンピュータにより提供される複数の計算機資源と、
前記複数の計算機資源が連動して行う特定の処理の試験を行う試験装置と、を有し、
前記試験装置は、前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成する命令追加部を有し、
前記複数の計算機資源は、前記特定の処理を実行し、
前記試験装置は、前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する処理指示部と、を有する、
ことを特徴とする試験システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、試験装置、試験方法、試験プログラム及び試験システムに関する。
【背景技術】
【０００２】
例えば、利用者にサービスを提供する事業者（以下、単に事業者とも呼ぶ）は、サービスの提供を行うための業務システム（以下、情報処理システムとも呼ぶ）を構築して稼働させる。そして、事業者は、例えば、業務システムを構成するプログラムを生成した場合、生成したプログラムの動作について各種テストを行う。
【０００３】
具体的に、事業者は、業務システムが複数の１または複数のコンピュータにより提供される複数の計算機資源（例えば、物理マシン上に生成された複数の仮想マシン）によって構成されている場合、例えば、複数の計算機資源が互いに連動して行う処理についての試験を行う。これにより、事業者は、利用者に対するサービスの提供の開始後において、サービスの提供に影響を与える障害の発生を抑制することが可能になる（例えば、特許文献１から３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−０８６９１０号公報
【特許文献２】特開２００５−３５２５９１号公報
【特許文献３】特開２００８−２１７４７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば、障害等の発生によって中断（シャットダウン）した計算機資源が発生した場合、上記のような業務システムでは、中断した計算機資源が実行していた処理を他の計算機資源に引き継ぐ。そのため、事業者は、上記のような業務システムについての試験を行う場合、中断した計算機資源が発生した場合の試験についても行う必要がある。
【０００６】
しかしながら、例えば、業務システムを構成する計算機資源の数が膨大である場合、事業者は、各計算機資源の処理が中断した場合における試験を網羅的に行うことができない。
【０００７】
そのため、事業者は、例えば、業務システムを構成する計算機資源から、中断させる計算機資源を無作為に決定し、決定した計算機資源の処理が中断した場合における試験を行う。これにより、事業者は、試験を行うことができる範囲内において異常の検知を行うことが可能になる。
【０００８】
しかしながら、この場合、事業者は、試験が行われた際の条件（例えば、計算機資源を中断させたタイミング等）を事後的に特定することができない。そのため、事業者は、試験を行うことによって異常の存在を検知した場合であっても、同じ状態を再現することができず、検知した異常に関する調査を十分に行うことができない場合がある。
【０００９】
そこで、一つの側面では、過去に試験を行った際の状態を再現することを可能とする試験装置、試験方法、試験プログラム及び試験システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
実施の形態の一つの態様によれば、１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う試験装置は、前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成する命令追加部と、前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する処理指示部と、を有する。
【発明の効果】
【００１１】
一つの側面によれば、過去に試験を行った際の状態を再現することを可能とする。
【図面の簡単な説明】
【００１２】
【図１】図１は、情報処理システム１０の全体構成を示す図である。
【図２】図２は、各仮想マシン３の動作の具体例について説明する図である。
【図３】図３は、各仮想マシン３の動作の具体例について説明する図である。
【図４】図４は、試験装置１のハードウエア構成を説明する図である。
【図５】図５は、情報処理装置２のハードウエア構成を説明する図である。
【図６】図６は、試験装置１の機能ブロック図である。
【図７】図７は、情報処理装置２の機能ブロック図である。
【図８】図８は、第１の実施の形態における試験処理の概略を説明するフローチャートである。
【図９】図９は、第１の実施の形態における試験処理の概略を説明する図である。
【図１０】図１０は、第１の実施の形態における試験処理の概略を説明する図である。
【図１１】図１１は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１２】図１２は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１３】図１３は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１４】図１４は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１５】図１５は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１６】図１６は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。
【図１７】図１７は、ソースコード２３１の具体例を説明する図である。
【図１８】図１８は、追加済ソースコード２３２の具体例を説明する図である。
【図１９】図１９は、ログ情報１３１の具体例を説明する図である。
【図２０】図２０は、Ｓ３３の処理の詳細を説明する図である。
【図２１】図２１は、指示情報１３２の具体例を説明する図ある。
【図２２】図２２は、Ｓ５３の処理の具体例を説明する図である。
【図２３】図２３は、Ｓ５３の処理の具体例を説明する図である。
【図２４】図２４は、Ｓ５３の処理の具体例を説明する図である。
【図２５】図２５は、Ｓ５３の処理の具体例を説明する図である。
【図２６】図２６は、Ｓ５３の処理の具体例を説明する図である。
【図２７】図２７は、Ｓ５３の処理の具体例を説明する図である。
【図２８】図２８は、Ｓ５３の処理の具体例を説明する図である。
【発明を実施するための形態】
【００１３】
［情報処理システムの構成］
図１は、情報処理システム１０の全体構成を示す図である。図１に示す情報処理システム１０は、試験装置１と、情報処理装置２とを有する。
【００１４】
情報処理装置２は、例えば、複数の物理マシンから構成される。各物理マシンは、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｃｏｍｐｕｔｉｎｇ  Ｕｎｉｔ）と、メモリ（ＤＲＡＭ：Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、ハードディスク（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等とを有する。そして、各物理マシンの物理リソースは、利用者に対してサービスの提供を行う各仮想マシン３に割当てられる。
【００１５】
試験装置１は、例えば、１台以上の物理マシンによって構成される。そして、試験装置１は、情報処理装置２上に生成された仮想マシン３の動作についての試験を行う。なお、試験装置１は、仮想マシン３によって構成されるものであってもよい。
【００１６】
仮想化ソフトウエア４は、仮想マシン３の管理を行う管理装置（図示しない）からの指示に応じて、情報処理装置２のＣＰＵ、メモリ及びハードディスク等を割当てることにより、仮想マシン３を動作させる基盤ソフトウエアである。仮想化ソフトウエア４は、例えば、情報処理装置２上で動作する。
【００１７】
［各仮想マシン３の動作の具体例］
次に、各仮想マシン３の動作の具体例について説明を行う。図２及び図３は、各仮想マシン３の動作の具体例について説明する図である。
【００１８】
図２及び図３に示す例において、仮想マシン群ＭＧ１に含まれる仮想マシン３１と、仮想マシン群ＭＧ２に含まれる仮想マシン３２と、仮想マシン群ＭＧ３に含まれる仮想マシン３３、３４及び３５と、仮想マシン群ＭＧ４に含まれる仮想マシン３６とは、互いに連動して試験対象処理（以下、特定の処理とも呼ぶ）を行う。以下、仮想マシン３１、３２、３３、３４、３５及び３６を総称して仮想マシン３とも呼ぶ。
【００１９】
また、図２及び図３に示す例において、同じ仮想マシン群に含まれる仮想マシン３は、それぞれ同一の処理を行う仮想マシンである。そのため、各仮想マシン３は、例えば、同じ仮想マシン群に含まれる他の仮想マシンが障害等の発生に伴って中断した場合、中断した仮想マシンが行っていた処理を引き継いで実行することが可能である。具体的に、各仮想マシン３の管理装置（図示しない）は、例えば、中断した仮想マシン３が発生したことを検知した場合、中断した仮想マシン３と同じ仮想マシン群に含まれる他の仮想マシンに、中断した仮想マシン３が行っていた処理を実行させる。
【００２０】
さらに、図２及び図３に示す例における試験装置１は、仮想マシン３に対して無作為に中断（シャットダウン）を指示する。
【００２１】
具体的に、仮想マシン３１は、図２に示すように、例えば、試験装置１から指示を受けたクライアント端末（図示しない）からデータを受信した場合、受信したデータに基づく処理を開始する（図２の（１））。そして、仮想マシン３２は、例えば、処理を開始した仮想マシン３１からデータを受信した場合、受信したデータに基づく処理を開始する（図２の（２））。同様に、仮想マシン３３は、例えば、処理を開始した仮想マシン３２からデータを受信した場合、受信したデータに基づく処理を開始する。
【００２２】
その後、試験装置１は、例えば、仮想マシン３３が処理を実行している間に、仮想マシン３３に対して中断指示を送信する（図２の（３））。そして、仮想マシン３３は、試験装置１から送信された中断指示の受信に応じて、仮想マシン３３自体を中断する（図２の（４））。
【００２３】
続いて、仮想マシン３４は、仮想マシン３３が実行していた処理を引き継いで実行を開始し、例えば、データベースＤＢ１に対してデータの書き込み指示の送信を行う（図２の（５）及び（６））。そして、データベースＤＢ１は、仮想マシン３４から受信した書き込み指示の内容に応じたデータの書き込みを行う（図２の（７））。
【００２４】
さらに、試験装置１は、図３に示すように、例えば、仮想マシン３４が処理を実行している間に、仮想マシン３４に対して中断指示を送信する（図３の（８））。そして、仮想マシン３４は、試験装置１から送信された中断指示の受信に応じて、仮想マシン３４自体を中断する（図３の（９））。
【００２５】
続いて、仮想マシン３５は、仮想マシン３４が実行していた処理を引き継いで実行を開始し、例えば、データベースＤＢ１に対してデータの書き込み指示の送信を行う（図３の（１０）及び（１１））。そして、データベースＤＢ１は、仮想マシン３５から受信した書き込み指示の内容に応じたデータの書き込みを行う（図３の（１２））。
【００２６】
その後、仮想マシン３１は、例えば、クライアント端末から受信したデータに基づく処理の実行に伴って、仮想マシン３６に対して処理要求を送信する（図３の（１３））。そして、仮想マシン３６は、仮想マシン３１から送信された処理要求を受信したことに応じて、受信した処理要求の内容に従い、データベースＤＢ１に記憶されたデータに対する読み込みを行う（図３の（１４））。
【００２７】
ここで、図２及び図３に示す例において、仮想マシン３４及び仮想マシン３５は、データベースＤＢ１に対する書き込みをそれぞれ行っている。そのため、例えば、仮想マシン３４及び仮想マシン３５によってそれぞれ行われた書き込みが、仮想マシン３４における中断の発生に伴って重複して行われた処理であった場合、データベースＤＢ１では、データの不整合等の異常が発生する。したがって、データベースＤＢ１に記憶されたデータの読み込みを行った仮想マシン３６は、例えば、データベースＤＢ１において異常が発生していることを検知し、試験対象処理の実行に伴って異常が発生している旨の通知を試験装置１に送信する（図３の（１５））。
【００２８】
このように、試験装置１は、例えば、試験対象処理を実行している仮想マシン３を中断することによって、仮想マシン３に内在する異常を検知することが可能になる。これにより、事業者は、利用者に対するサービスの提供の開始後において、サービスの提供に影響を与える障害の発生を抑制することが可能になる。
【００２９】
しかしながら、上記のように、中断させる仮想マシン３を無作為に決定する試験を行う場合、事業者は、試験が行われた際の条件（例えば、仮想マシン３を中断させたタイミング等）を事後的に特定することができない。そのため、事業者は、試験を行うことによって異常の存在を検知した場合であっても、同じ状態を再現することができず、検知した異常に関する調査を十分に行うことができない場合がある。
【００３０】
そこで、試験装置１は、複数の仮想マシン３のそれぞれが実行する試験対象処理の各ソースコードにおける所定の位置に、試験装置１に指示を要求する指示要求命令を追加して追加済ソースコードを生成する。
【００３１】
また、試験装置１は、試験対象処理の実行中に、仮想マシン３のいずれかにおいて指示要求命令が実行されたことに応じて、各仮想マシン３が実行する追加済ソースコードに追加された指示要求命令のそれぞれと各仮想マシン３が行う処理とを対応付けた指示情報が記憶された記憶部を参照する。そして、試験装置１は、指示要求命令を実行した仮想マシン３に対し、実行された指示要求命令に対応する処理の実行を指示する。
【００３２】
すなわち、本実施の形態における試験装置１は、例えば、予め用意された指示情報に含まれる仮想マシン３の情報及び仮想マシン３を中断するタイミングを示す情報に従って、仮想マシン３の中断を行いながら試験を行う。
【００３３】
これにより、試験装置１は、試験を行うことによって異常を検知した場合、指示情報を参照して再度試験を行うことで、検知した異常の再現を行うことが可能になる。そのため、試験装置１は、試験によって検知した異常に関する調査を十分に行うことが可能になる。
【００３４】
［情報処理システムのハードウエア構成］
次に、情報処理システム１０のハードウエア構成について説明する。図４は、試験装置１のハードウエア構成を説明する図である。また、図５は、情報処理装置２のハードウエア構成を説明する図である。
【００３５】
試験装置１は、図４に示すように、プロセッサであるＣＰＵ１０１と、メモリ１０２と、外部インターフェース（Ｉ／Ｏユニット）１０３と、記憶媒体（ストレージ）１０４とを有する。各部は、バス１０５を介して互いに接続される。
【００３６】
記憶媒体１０４は、記憶媒体１０４内のプログラム格納領域（図示しない）に、各仮想マシン３が実行する試験対象処理の試験を行う処理（以下、試験処理とも呼ぶ）を行うためのプログラム１１０を記憶する。
【００３７】
ＣＰＵ１０１は、図４に示すように、プログラム１１０の実行時に、プログラム１１０を記憶媒体１０４からメモリ１０２にロードし、プログラム１１０と協働して試験処理を行う。
【００３８】
記憶媒体１０４は、例えば、試験処理を行う際に用いられる情報を記憶する情報格納領域１３０（以下、記憶部１３０とも呼ぶ）を有する。また、外部インターフェース１０３は、情報処理装置２と通信を行う。
【００３９】
また、情報処理装置２は、図５に示すように、プロセッサであるＣＰＵ２０１と、メモリ２０２と、外部インターフェース（Ｉ／Ｏユニット）２０３と、記憶媒体（ストレージ）２０４とを有する。各部は、バス２０５を介して互いに接続される。
【００４０】
記憶媒体２０４は、記憶媒体２０４内のプログラム格納領域（図示しない）に、試験処理を行うためのプログラム２１０を記憶する。
【００４１】
ＣＰＵ２０１は、図５に示すように、プログラム２１０の実行時に、プログラム２１０を記憶媒体２０４からメモリ２０２にロードし、プログラム２１０と協働して試験処理を行う。
【００４２】
記憶媒体２０４は、例えば、試験処理を行う際に用いられる情報を記憶する情報格納領域２３０（以下、記憶部２３０とも呼ぶ）を有する。また、外部インターフェース２０３は、試験装置１と通信を行う。
【００４３】
［情報処理システムのソフトウエア構成］
次に、情報処理システム１０のソフトウエア構成について説明する。図６は、試験装置１の機能ブロック図である。また、図７は、情報処理装置２の機能ブロック図である。
【００４４】
ＣＰＵ１０１は、図６に示すように、プログラム１１０と協働することにより、命令追加部１１１と、情報受信部１１２と、情報送信部１１３（以下、処理指示部１１３とも呼ぶ）と、ログ出力部１１４と、異常検知部１１５と、情報生成部１１６として動作する。また、情報格納領域１３０には、図６に示すように、ログ情報１３１と、指示情報１３２とが記憶される。
【００４５】
そして、ＣＰＵ２０１は、図７に示すように、プログラム２１０と協働することにより、各仮想マシン３の機能として、情報送信部２１１と、情報受信部２１２と、処理実行部２１３として動作する。また、情報格納領域２３０には、図７に示すように、ソースコード２３１と、追加済ソースコード２３２とが記憶される。
【００４６】
初めに、試験装置１の機能について説明を行う。試験装置１の機能である命令追加部１１１は、各仮想マシン３のそれぞれが実行する試験対象処理の各ソースコード２３１における所定の位置に、試験装置１に指示を要求する指示要求命令を追加して追加済ソースコード２３２を生成する。所定の位置は、例えば、各ソースコード２３１において、データの書き込みや読み込みを行う命令の位置の前後であってよい。具体的に、命令追加部１１１は、例えば、情報処理装置２の情報格納領域２３０に記憶されたソースコード２３１を取得し、追加済ソースコード２３２の生成を行う。そして、命令追加部１１１は、例えば、生成した追加済ソースコード２３２を情報格納領域２３０に記憶する。
【００４７】
試験装置１の機能である情報受信部１１２は、各仮想マシン３による試験対象処理の実行に伴って、指示要求命令が実行されたことを示す通知を各仮想マシン３から受信する。
【００４８】
試験装置１の機能である情報送信部１１３は、仮想マシン３のいずれかにおいて指示要求命令が実行されたことに応じて、例えば、指示要求命令を実行した仮想マシン３に対し、無作為に決定した処理の実行を指示する。具体的に、情報送信部１１３は、情報受信部１１２が仮想マシン３のいずれかから指示要求命令が実行されたことを示す通知を受信したことに応じて、仮想マシン３の中断または仮想マシン３が実行していた処理の再開を無作為に決定し、決定した処理を実行する旨の指示を送信する。
【００４９】
試験装置１の機能であるログ出力部１１４は、仮想マシン３のいずれかにおいて指示要求命令を実行したことに応じて、指示要求命令を実行した仮想マシン３の状態を示すログ情報１３１を出力する。そして、ログ出力部１１４は、例えば、出力したログ情報１３１を情報格納領域１３０に蓄積する。ログ情報１３１の具体例については後述する。
【００５０】
試験装置１の機能である異常検知部１１５は、情報送信部１１３が無作為に決定した処理の実行に伴って各仮想マシン３において発生した所定の異常を検知する。
【００５１】
試験装置１の機能である情報生成部１１６は、異常検知部１１５が所定の異常の発生を検知した場合、ログ情報１３１に基づいて指示情報１３２を生成する。指示情報１３２は、例えば、各仮想マシン３が実行する追加済ソースコード２３２に追加された指示要求命令のそれぞれと、各指示要求命令の実行に伴って各仮想マシン３が行った処理とを対応付けた情報である。指示情報１３２の具体例については後述する。
【００５２】
その後、情報送信部１１３は、所定の異常を再現するために各仮想マシン３において試験対象処理が再度行われた場合、各仮想マシン３のいずれかにおいて指示要求命令が実行されたことに応じて、情報格納領域１３０に記憶された指示情報１３２を参照する。そして、情報送信部１１３は、指示要求命令を実行した仮想マシン３に対し、実行された指示要求命令に対応する処理の実行を指示する。具体的に、情報送信部１１３は、情報受信部１１２が仮想マシン３のいずれかから指示要求命令が実行されたことを示す通知を受信したことに応じて、実行された指示要求命令に対応する処理を実行する旨の指示を送信する。
【００５３】
次に、仮想マシン３の機能について説明を行う。仮想マシン３の機能である情報受信部２１２は、例えば、他の仮想マシン３から送信されたデータを受信する。
【００５４】
仮想マシン３の機能である処理実行部２１３は、例えば、情報受信部２１２が他の仮想マシン３から送信されたデータを受信した場合、受信したデータを用いて試験対象処理を実行する。
【００５５】
仮想マシン３の機能である情報送信部２１１は、処理実行部２１３が試験対象処理の実行に伴って指示要求命令を実行したことに応じて、次に実行する処理の指示要求を試験装置１に対して送信する。
【００５６】
また、情報受信部２１２は、情報送信部２１１が送信した処理の指示要求に対して試験装置１が送信した処理の指示を受信する。そして、処理実行部２１３は、この場合、情報受信部２１２が受信した処理の指示に対応する処理を実行する。具体的に、処理実行部２１３は、情報受信部２１２が受信した指示の内容に従って、仮想マシン３の中断または仮想マシン３が実行していた処理の再開を行う。さらに、情報送信部２１１は、例えば、他の仮想マシン３に対して、処理実行部２１３における処理の実行によって生成されたデータの送信を行う。
【００５７】
［第１の実施の形態の概略］
次に、第１の実施の形態の概略について説明する。図８は、第１の実施の形態における試験処理の概略を説明するフローチャートである。図９及び図１０は、第１の実施の形態における試験処理の概略を説明する図である。図９及び図１０を参照しながら、図８に示す試験処理を説明する。
【００５８】
試験装置１は、図８に示すように、試験開始タイミングになるまで待機する（Ｓ１のＮＯ）。試験開始タイミングは、例えば、事業者が試験装置１に対して試験対象処理の試験を開始する旨の入力を行ったタイミングであってよい。
【００５９】
そして、試験開始タイミングなった場合（Ｓ１のＹＥＳ）、試験装置１は、各仮想マシン３のそれぞれが実行する試験対象処理の各ソースコード２３１における所定の位置に、試験装置１に指示を要求する指示要求命令を追加して追加済ソースコード２３２を生成する（Ｓ２）。所定の位置は、例えば、各ソースコード２３１において、データの書き込みや読み込みを行う命令の位置の前後であってよい。
【００６０】
その後、試験装置１は、仮想マシン３のいずれかにおいて指示要求命令が実行されるまで待機する（Ｓ３のＮＯ）。すなわち、試験装置１は、仮想マシン３において試験対象処理の実行が開始され、仮想マシン３のいずれかにおいて指示要求命令が実行されるまで待機する。
【００６１】
そして、指示要求命令が実行された場合（Ｓ３のＹＥＳ）、試験装置１は、各仮想マシン３が実行する追加済ソースコード２３２に追加された指示要求命令のそれぞれと、各仮想マシン３が行う処理とを対応付けた指示情報１３２が記憶された記憶部を参照し、Ｓ３の処理において指示要求命令を実行した仮想マシン３に対し、Ｓ３の処理において実行された指示要求命令に対応する処理の実行を指示する（Ｓ４）。
【００６２】
具体的に、試験装置１は、図９に示すように、例えば、仮想マシン３３において指示要求命令が実行された場合、仮想マシン３３が送信した通知（指示要求命令が実行された旨の通知）を受信する。そして、試験装置１は、この場合、図１０に示すように、情報格納領域１３０に記憶された指示情報１３２を参照し、Ｓ３の処理において実行された指示要求命令に対応する処理を特定する。その後、試験装置１は、特定した処理の実行を、仮想マシン３３に指示する。
【００６３】
すなわち、本実施の形態における試験装置１は、例えば、予め用意された指示情報１３２に含まれる仮想マシン３の情報及び仮想マシン３を中断するタイミングを示す情報に従って、仮想マシン３の中断を行いながら試験を行う。
【００６４】
これにより、試験装置１は、試験を行うことによって異常の存在を検知した場合、指示情報１３２を参照して再度試験を行うことで、検知した異常の再現を行うことが可能になる。そのため、試験装置１は、試験によって検知した異常に関する調査を十分に行うことが可能になる。
【００６５】
なお、以下、１以上の仮想マシン群に含まれる複数の仮想マシン３が試験対象処理を行う場合について説明を行うが、１以上の物理マシン群（１以上のサーバ群）に含まれる複数の物理マシン（複数のサーバ）が試験対象処理を行うものであってもよい。また、１以上の物理マシンまたは仮想マシン上に生成された複数のコンテナにおいて試験対象処理が行われるものであってもよい。
【００６６】
［第１の実施の形態の詳細］
次に、第１の実施の形態の詳細について説明する。図１１から図１６は、第１の実施の形態における試験処理の詳細を説明するフローチャートである。また、図１７から図２８は、第１の実施の形態における試験処理の詳細を説明する図である。図１７から図２８を参照しながら、図１１から図１６に示す試験処理を説明する。なお、以下、図２等で説明した各仮想マシン３において試験対象処理が行われるものとして説明を行う。
【００６７】
［試験装置が行う命令追加処理］
初めに、試験装置１が行う試験処理のうち、追加済ソースコード２３２を生成する処理（以下、命令追加処理とも呼ぶ）について説明を行う。図１１は、試験装置１が行う命令追加処理を説明する図である。
【００６８】
命令追加部１１１は、命令追加タイミングになるまで待機する（Ｓ１１のＮＯ）。命令追加タイミングは、例えば、事業者が試験装置１に対して追加済ソースコード２３２の生成を開始する旨の入力を行ったタイミングであってよい。
【００６９】
そして、命令追加タイミングになった場合（Ｓ１１のＹＥＳ）、命令追加部１１１は、仮想マシン３のそれぞれが実行する試験対象処理の各ソースコード２３１における所定の位置に、試験装置１に指示を要求する指示要求命令を追加して追加済ソースコード２３２を生成する（Ｓ１２）。以下、ソースコード２３１及び追加済ソースコード２３２の具体例について説明を行う。
【００７０】
［ソースコードの具体例］
初めに、ソースコード２３１の具体例について説明を行う。図１７は、ソースコード２３１の具体例を説明する図である。図１７（Ａ）は、仮想マシン群ＭＧ３に含まれる各仮想マシン３（仮想マシン３３、仮想マシン３４及び仮想マシン３５）において実行されるソースコード２３１ａの具体例であり、図１７（Ｂ）は、仮想マシン群ＭＧ４に含まれる各仮想マシン３（仮想マシン３６）において実行されるソースコード２３１ｂの具体例である。
【００７１】
具体的に、図１７（Ａ）に示すソースコード２３１ａには、「Ｌｏｇｉｃ＿Ａ」、「Ｌｏｇｉｃ＿Ｂ」、「Ｌｏｇｉｃ＿Ｃ，ｗｒｉｔｅ  ｎｅｗ  ｄａｔａ」及び「Ｌｏｇｉｃ＿Ｄ」がそれぞれ記述されている。
【００７２】
そして、図１７（Ｂ）に示すソースコード２３１ｂには、「Ｌｏｇｉｃ＿Ｅ，ｒｅａｄ  ｎｅｗ  ｄａｔａ」がそれぞれ記述されている。
【００７３】
［追加済ソースコードの具体例］
次に、追加済ソースコード２３２の具体例について説明を行う。図１８は、追加済ソースコード２３２の具体例を説明する図である。図１８（Ａ）は、仮想マシン群ＭＧ３に含まれる各仮想マシン３（仮想マシン３３、仮想マシン３４及び仮想マシン３５）において実行される追加済ソースコード２３２ａの具体例であり、図１８（Ｂ）は、仮想マシン群ＭＧ４に含まれる各仮想マシン３（仮想マシン３６）において実行される追加済ソースコード２３２ｂの具体例である。
【００７４】
図１８（Ａ）に示す追加済ソースコード２３２ａには、図１７（Ａ）で説明したソースコード２３１ａと比較して、各命令の前後に指示要求命令が追加されている。
【００７５】
具体的に、図１８（Ａ）に示す追加済ソースコード２３２ａには、例えば、「Ｌｏｇｉｃ＿Ａ」の前に「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」が記述されている。また、図１７（Ａ）に示す追加済ソースコード２３２ａには、例えば、「Ｌｏｇｉｃ＿Ａ」と「Ｌｏｇｉｃ＿Ｂ」との間に「Ｉｆ（ｌｉｓｔｅｎ＿３２）｛Ｅｘｉｔ（２）；｝」が記述されている。図１８（Ａ）に含まれる他の命令については説明を省略する。
【００７６】
そして、図１８（Ｂ）に示す追加済ソースコード２３２ａには、「Ｌｏｇｉｃ＿Ｅ，ｒｅａｄ  ｎｅｗ  ｄａｔａ」の前に「Ｉｆ（ｌｉｓｔｅｎ＿４１）｛Ｅｘｉｔ（１）；｝」が記述されている。また、図１８（Ｂ）に示す追加済ソースコード２３２ａには、「Ｌｏｇｉｃ＿Ｅ，ｒｅａｄ  ｎｅｗ  ｄａｔａ」の後に「Ｉｆ（ｌｉｓｔｅｎ＿４２）｛Ｅｘｉｔ（２）；｝」が記述されている。
【００７７】
［各仮想マシンが行う試験処理］
次に、各仮想マシン３が行う試験処理について説明を行う。図１２は、各仮想マシン３が行う試験処理を説明する図である。
【００７８】
処理実行部２１３は、試験対象処理の実行タイミングまで待機する（Ｓ１０１のＮＯ）。具体的に、試験対象処理の実行タイミングは、例えば、試験対象処理のうちの前段の処理を行う仮想マシン３からデータを受信したタイミングである。そして、試験対象処理の実行タイミングになった場合（Ｓ１０１のＹＥＳ）、処理実行部２１３は、Ｓ１２の処理で生成された追加済ソースコード２３２の実行を開始する（Ｓ１０２）。
【００７９】
続いて、情報送信部２１１は、追加済ソースコード２３２に含まれる命令のうち、指示要求命令を実行するまで待機する（Ｓ１０３のＮＯ）。そして、指示要求命令を実行した場合（Ｓ１０３のＹＥＳ）、情報送信部２１１は、次の処理の指示要求を試験装置１に対して送信する（Ｓ１０４）。
【００８０】
その後、情報受信部２１２は、試験装置１から次の処理の指示を受信するまで待機する（Ｓ１０５のＮＯ）。そして、次の処理の指示を受信した場合（Ｓ１０５のＹＥＳ）、処理実行部２１３は、Ｓ１０５の処理において受信した指示に対応する処理を実行する（Ｓ１０６）。
【００８１】
すなわち、本実施の形態における試験装置１は、各仮想マシン３が指示要求命令を実行する毎に、各仮想マシンが次に実行する処理の決定を行う。これにより、試験装置１は、試験対象処理の実行中における各仮想マシン３の状態を制御することが可能になる。
【００８２】
さらに、処理実行部２１３は、追加済ソースコード２３２に含まれる全ての指示要求命令が実行されたか否かを判定する（Ｓ１０７）。その結果、全ての指示要求命令が実行されていないと判定した場合（Ｓ１０７のＮＯ）、仮想マシン３は、Ｓ１０３以降の処理を再度行う。一方、全ての指示要求命令が実行されたと判定した場合（Ｓ１０７のＹＥＳ）、処理実行部２１３は、Ｓ１２の処理で生成された追加済ソースコード２３２に含まれる命令のうち、実行されていない命令を実行する（Ｓ１０８）。
【００８３】
［試験装置が行う異常検知処理］
次に、試験装置１が行う試験処理のうち、各仮想マシン３における試験対象処理の実行中に発生した異常を検知する処理（以下、異常検知処理とも呼ぶ）について説明を行う。図１３及び図１４は、試験装置１が行う異常検知処理を説明する図である。異常検知処理は、各仮想マシン３が試験対象処理を実行している間に行われる処理である。
【００８４】
情報受信部１１２は、異常検知タイミングまで待機する（Ｓ２１のＮＯ）。異常検知タイミングは、例えば、各仮想マシン３において試験対象処理の実行が開始されたタイミングであってよい。
【００８５】
そして、異常検知タイミングになった場合（Ｓ２１のＹＥＳ）、情報受信部１１２は、仮想マシン３のいずれかから次の処理の指示要求を受信するまで待機する（Ｓ２２のＮＯ）。その後、次の処理の指示要求を受信した場合（Ｓ２２のＹＥＳ）、情報送信部１１３は、Ｓ２２の処理で受信した指示要求を送信した仮想マシン３に対し、無作為に決定した処理を実行する旨の指示を送信する（Ｓ２３）。具体的に、情報送信部１１３は、この場合、仮想マシン３の中断を行う旨の指示または仮想マシン３が実行していた処理の再開を行う旨の指示を送信する。
【００８６】
さらに、ログ出力部１１４は、Ｓ２２の処理で受信した指示要求を送信した仮想マシン３の状態を示すログ情報１３１を出力し、情報格納領域１３０に記憶する（Ｓ２４）。以下、ログ情報１３１の具体例について説明を行う。
【００８７】
［ログ情報の具体例］
図１９は、ログ情報１３１の具体例を説明する図である。図１９に示すログ情報１３１は、ログ情報１３１に含まれる各情報を識別する「項番」と、Ｓ２４の処理が行われた日時を示す「日時」と、Ｓ２４の処理を行った仮想マシン３が含まれる仮想マシン群を識別する「仮想マシン群」とを項目として有する。また、図１９に示すログ情報１３１は、Ｓ２４の処理を行った仮想マシン３を識別する「仮想マシン」と、実行された指示要求命令を識別する「通知箇所」と、Ｓ２４の処理を行った仮想マシン３が行った処理を示す「処理状態」とを項目として有する。
【００８８】
なお、「処理状態」には、Ｓ２３の処理において仮想マシン３を中断させる旨の指示を仮想マシン３に送信したことを示す「中断」と、Ｓ２３の処理において処理を再開させる旨の指示を仮想マシン３に送信したことを示す「再開」とのうちのいずれかが設定される。
【００８９】
また、図１９に示すログ情報１３１において、「仮想マシン」に「ＶＭ３３」、「ＶＭ３４」及び「ＶＭ３５」が設定された情報における「通知箇所」に設定された「１」から「５」は、図１８（Ａ）で説明した追加済ソースコード２３２ａにおける「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」、「Ｉｆ（ｌｉｓｔｅｎ＿３２）｛Ｅｘｉｔ（２）；｝」、「Ｉｆ（ｌｉｓｔｅｎ＿３３）｛Ｅｘｉｔ（３）；｝」、「Ｉｆ（ｌｉｓｔｅｎ＿３４）｛Ｅｘｉｔ（４）；｝」及び「Ｉｆ（ｌｉｓｔｅｎ＿３５）｛Ｅｘｉｔ（５）；｝」にそれぞれ対応する。そして、図１９に示すログ情報１３１において、「仮想マシン」に「ＶＭ３６」が設定された情報における「通知箇所」に設定された「１」及び「２」は、図１８（Ｂ）で説明した追加済ソースコード２３２ｂにおける「Ｉｆ（ｌｉｓｔｅｎ＿４１）｛Ｅｘｉｔ（１）；｝」及び「Ｉｆ（ｌｉｓｔｅｎ＿４２）｛Ｅｘｉｔ（２）；｝」にそれぞれ対応する。
【００９０】
具体的に、図１９に示すログ情報１３１において、「項番」が「１」である情報には、「日時」として「２０１７／２／７  １３：４５：０１」が設定され、「仮想マシン群」として「ＭＧ３」が設定され、「仮想マシン」として「ＶＭ３３」が設定されている。また、図１９に示すログ情報１３１において、「項番」が「１」である情報には、「通知箇所」として「１」が設定され、「処理状態」として「再開」が設定されている。
【００９１】
また、図１９に示すログ情報１３１において、「項番」が「２」である情報には、「日時」として「２０１７／２／７  １３：４５：０２」が設定され、「仮想マシン群」として「ＭＧ３」が設定され、「仮想マシン」として「ＶＭ３３」が設定されている。また、図１９に示すログ情報１３１において、「項番」が「２」である情報には、「通知箇所」として「２」が設定され、「処理状態」として「中断」が設定されている。図１９に含まれる他の情報については説明を省略する。
【００９２】
すなわち、図１９に示すログ情報１３１は、仮想マシン３３が追加済ソースコード２３２ａにおける「Ｉｆ（ｌｉｓｔｅｎ＿３２）｛Ｅｘｉｔ（２）；｝」まで処理を行った後に中断し、仮想マシン３４が追加済ソースコード２３２ａにおける「Ｉｆ（ｌｉｓｔｅｎ＿３４）｛Ｅｘｉｔ（４）；｝」まで処理を行った後に中断したことを示している。
【００９３】
図１４に戻り、異常検知部１１５は、Ｓ２３の処理で実行を指示された無作為に決定した処理の実行に伴って、各仮想マシン３において所定の異常が発生しているか否かを判定する（Ｓ３１）。具体的に、異常検知部１１５は、例えば、各仮想マシン３から所定の異常が発生した旨のメッセージ（エラーメッセージ）が出力された場合に、各仮想マシン３において所定の異常が発生したものと判定するものであってよい。
【００９４】
そして、各仮想マシン３において所定の異常が発生していると判定した場合（Ｓ３２のＹＥＳ）、情報生成部１１６は、Ｓ２４の処理で出力されたログ情報１３１に基づいて指示情報１３２を生成し、情報格納領域１３０に記憶する（Ｓ３３）。以下、Ｓ３３の処理の詳細について説明を行う。
【００９５】
［Ｓ３３の処理の詳細］
図１５は、Ｓ３３の処理の詳細を説明するフローチャートである。また、図２０は、Ｓ３３の処理の詳細を説明する図である。
【００９６】
情報生成部１１６は、情報格納領域１３０に記憶されたログ情報１３１を、各仮想マシン３に対応するログ情報毎にグルーピングする（Ｓ４１）。具体的に、情報生成部１１６は、Ｓ２４の処理において情報格納領域１３０に蓄積されたログ情報１３１を、各仮想マシン３に対応するログ情報毎にグルーピングする。
【００９７】
そして、情報生成部１１６は、Ｓ４１の処理でグルーピングしたログ情報毎に、出力順が最初である第１ログ情報と出力順が最後である第２ログ情報とをそれぞれ特定する（Ｓ４２）。
【００９８】
具体的に、情報生成部１１６は、図２０に示すように、例えば、図１９で説明したログ情報１３１において、「仮想マシン」に「ＶＭ３３」が設定された情報であって「日時」に設定された日時が最も早い情報及び最も遅い情報（「項番」が「１」及び「２」である情報）を抽出する。また、情報生成部１１６は、図２０に示すように、例えば、図１９で説明したログ情報１３１において、「仮想マシン」に「ＶＭ３４」が設定された情報であって「日時」に設定された日時が最も早い情報及び最も遅い情報（「項番」が「３」及び「６」である情報）を抽出する。図２０に含まれる他の情報については説明を省略する。
【００９９】
その後、情報生成部１１６は、Ｓ４２の処理で特定した第２ログ情報と、各第２ログ情報の後に出力された第１ログ情報のうち、出力順が最初である第１ログ情報とを対応付けた情報を、指示情報１３２として生成する（Ｓ４３）。以下、指示情報１３２の具体例について説明を行う。
【０１００】
［指示情報の具体例］
図２１は、指示情報１３２の具体例を説明する図ある。図２１に示す指示情報１３２は、指示情報１３２に含まれる各情報を識別する「項番」と、仮想マシン群を示す「仮想マシン群」と、追加済ソースコード２３２における指示要求命令の位置を示す「通知箇所」とを項目として有する。また、図２１に示す指示情報１３２は、「通知箇所」に設定された指示要求命令が実行された際に仮想マシン３に指示する必要がある処理を示す「指示」と、「指示」に設定された処理の実施条件を示す「条件」とを項目として有する。
【０１０１】
具体的に、図２０に示すログ情報１３１において、第２ログ情報と、その第２ログ情報の後に出力された第１ログ情報のうち、出力順が最初である第１ログ情報との組合せは、「項番」が「２」である情報と「項番」が「３」である情報との組合せ、「項番」が「６」である情報と「項番」が「７」である情報との組合せ、及び「項番」が「１１」である情報と「項番」が「１２」である情報との組合せである。
【０１０２】
そのため、情報生成部１１６は、例えば、図２１に示すように、「項番」が「１」である情報の「仮想マシン群」、「通知箇所」及び「指示」に、図２０で説明したログ情報１３１における「項番」が「２」である情報の「仮想マシン群」、「通知箇所」及び「指示」に設定された情報である「ＭＧ３」、「２」及び「中断」をそれぞれ設定する。また、情報生成部１１６は、図２１に示すように、「項番」が「２」である情報の「仮想マシン群」、「通知箇所」及び「指示」に、図２０で説明したログ情報１３１における「項番」が「３」である情報の「仮想マシン群」、「通知箇所」及び「指示」に設定された情報である「ＭＧ３」、「１」及び「再開」をそれぞれ設定する。
【０１０３】
ここで、図２等で説明した例において、仮想マシン３４は、仮想マシン３３の中断の発生に伴って処理を開始する仮想マシン３である。そのため、図２等で説明した状態の再現を行う場合、仮想マシン３３の中断は、仮想マシン３４における処理の再開よりも先に行われる必要がある。したがって、情報生成部１１６は、例えば、図２１に示すように、「項番」が「２」である情報の「条件」に、「項番」が「１」である情報に対応する指示が行われた後に「項番」が「２」である情報に対応する指示を行う旨を示す「１」を設定する。
【０１０４】
すなわち、情報生成部１１６は、通常処理以外の処理（例えば、仮想マシンの中断）の実行タイミングを示す情報と、通常処理以外の処理を行った直後に行う必要がある処理の実行タイミングを示す情報とを指示情報１３２に含める。これにより、試験装置１は、指示情報１３２を参照し、過去に異常が発生した場合と同じタイミングにおいて各処理を行うことで、過去に異常が発生した際の状態の再現を行うことが可能になる。
【０１０５】
一方、仮想マシン３３の中断は、他の仮想マシン３が特定の状態になったことに伴って行われる処理ではない。そのため、情報生成部１１６は、例えば、図２１に示すように、「項番」が「１」である情報の「条件」に、実施条件が存在しないことを示す「なし」を設定する。図２１に含まれる他の情報については説明を省略する。
【０１０６】
図１４に戻り、処理実行部２１３は、追加済ソースコード２３２に含まれる全ての指示要求命令が実行されたか否かを判定する（Ｓ３４）。
【０１０７】
その結果、全ての指示要求命令が実行されていないと判定した場合（Ｓ３４のＮＯ）、試験装置１は、Ｓ２２以降の処理を再度行う。一方、全ての指示要求命令が実行されたと判定した場合（Ｓ３４のＹＥＳ）、試験装置１は、異常検知処理を終了する。
【０１０８】
これにより、試験装置１は、試験対象処理の実行中に異常が発生した場合において、試験装置１が各仮想マシン３に対して行った指示の内容を指示情報１３２として記憶することが可能になる。そのため、試験装置１は、後述するように、指示情報１３２を参照することによって、発生した異常の再現を行うことが可能になる。
【０１０９】
［試験装置が行う異常再現処理］
次に、試験装置１が行う試験処理のうち、異常検知処理において検知された異常の再現を行う処理（以下、異常再現処理とも呼ぶ）について説明を行う。図１６は、試験装置１が行う異常再現処理を説明する図である。異常再現処理は、各仮想マシン３が試験対象処理を実行している間に行われる処理である。すなわち、各仮想マシン３は、試験装置１が異常検知処理と異常再現処理とを行うために、試験対象処理を複数回実行する必要がある。
【０１１０】
情報受信部１１２は、異常再現タイミングまで待機する（Ｓ５１のＮＯ）。異常再現タイミングは、例えば、各仮想マシン３において試験対象処理の実行が開始されたタイミングであってよい。
【０１１１】
続いて、異常再現タイミングになった場合（Ｓ５１のＹＥＳ）、情報受信部１１２は、仮想マシン３のいずれかから次の処理の指示要求を受信するまで待機する（Ｓ５２のＮＯ）。そして、次の処理の指示要求を受信した場合（Ｓ５２のＹＥＳ）、情報送信部１１３は、Ｓ３３の処理で生成した指示情報１３２を参照し、Ｓ５２の処理で受信した通知を送信した仮想マシン３に対し、Ｓ５２の処理で受信した通知に対応する指示要求命令に対応する処理を指示する（Ｓ５３）。
【０１１２】
すなわち、情報送信部１１３は、指示情報１３２を参照することで、異常検知処理において異常が検知された際に行っていた指示と同じ内容の指示を、異常検知処理において異常が検知された際と同じタイミングで行う。これにより、試験装置１は、異常検知処理において発生した異常の再現を行うことが可能になる。
【０１１３】
その後、処理実行部２１３は、追加済ソースコード２３２に含まれる全ての指示要求命令が実行されたか否かを判定する（Ｓ５４）。その結果、全ての指示要求命令が実行されていないと判定した場合（Ｓ５４のＮＯ）、試験装置１は、Ｓ５２以降の処理を再度行う。一方、全ての指示要求命令が実行されたと判定した場合（Ｓ５４のＹＥＳ）、試験装置１は、異常再現処理を終了する。以下、Ｓ５３の処理の具体例について説明を行う。
【０１１４】
［Ｓ５３の処理の具体例］
図２２から図２８は、Ｓ５３の処理の具体例を説明する図である。具体的に、図２２から図２８は、Ｓ５３の処理が複数回実行された場合の具体例を説明する図である。
【０１１５】
仮想マシン３３は、例えば、図１８（Ａ）で説明した追加済ソースコード２３２ａにおける「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」を実行した場合、試験装置１に対して次の処理の指示要求を送信する（Ｓ１０４）。そして、試験装置１は、この場合、情報格納領域１３０に記憶された指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」に対応する情報が存在しないため、処理の「再開」を仮想マシン３３に対して指示する（Ｓ５３）。
【０１１６】
続いて、例えば、仮想マシン３３が「Ｉｆ（ｌｉｓｔｅｎ＿３２）｛Ｅｘｉｔ（２）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３２）｛Ｅｘｉｔ（２）；｝」に対応する「項番」が「１」である情報が存在するため、図２２に示すように、「中断」を仮想マシン３３に対して指示する（Ｓ５３）。
【０１１７】
その後、例えば、仮想マシン３４（中断した仮想マシン３３に代わって試験対象処理を開始した仮想マシン）が「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」に対応する「項番」が「２」である情報が存在するため、図２３に示すように、処理の「再開」を仮想マシン３４に対して指示する（Ｓ５３）。そして、例えば、仮想マシン３４が「Ｉｆ（ｌｉｓｔｅｎ＿３３）｛Ｅｘｉｔ（３）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３３）｛Ｅｘｉｔ（３）；｝」に対応する情報が存在しないため、処理の「再開」を仮想マシン３３に対して指示する（Ｓ５３）。そのため、仮想マシン３４は、図２３に示すように、「Ｌｏｇｉｃ＿Ｃ，ｗｒｉｔｅ  ｎｅｗ  ｄａｔａ」を実行し、データベースＤＢ１に対してデータの書き込みを行う。
【０１１８】
さらに、例えば、仮想マシン３４が「Ｉｆ（ｌｉｓｔｅｎ＿３４）｛Ｅｘｉｔ（４）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３４）｛Ｅｘｉｔ（４）；｝」に対応する「項番」が「３」である情報が存在するため、図２４に示すように、「中断」を仮想マシン３３に対して指示する（Ｓ５３）。
【０１１９】
その後、例えば、仮想マシン３５（中断した仮想マシン３３に代わって試験対象処理を開始した仮想マシン）が「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３１）｛Ｅｘｉｔ（１）；｝」に対応する「項番」が「４」である情報が存在するため、図２５に示すように、処理の「再開」を仮想マシン３５に対して指示する（Ｓ５３）。そして、例えば、仮想マシン３５が「Ｉｆ（ｌｉｓｔｅｎ＿３３）｛Ｅｘｉｔ（３）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３３）｛Ｅｘｉｔ（３）；｝」に対応する情報が存在しないため、処理の「再開」を仮想マシン３３に対して指示する（Ｓ５３）。そのため、仮想マシン３５は、図２５に示すように、「Ｌｏｇｉｃ＿Ｃ，ｗｒｉｔｅ  ｎｅｗ  ｄａｔａ」を実行し、データベースＤＢ１に対してデータの書き込みを行う。すなわち、データベースＤＢ１では、仮想マシン３４及び仮想マシン３５のそれぞれが「Ｌｏｇｉｃ＿Ｃ，ｗｒｉｔｅ  ｎｅｗ  ｄａｔａ」を実行したことによって、同一データの二重書き込みが行われた状態になる。
【０１２０】
次に、仮想マシン３６は、例えば、図２６に示すように、仮想マシン３１から処理要求の送信があった場合、試験対象処理を開始する。そして、仮想マシン３６は、例えば、図１８（Ｂ）で説明した追加済ソースコード２３２ｂにおける「Ｉｆ（ｌｉｓｔｅｎ＿４１）｛Ｅｘｉｔ（１）；｝」を実行した場合、試験装置１に対して次の処理の指示要求を送信する（Ｓ１０４）。
【０１２１】
ここで、情報格納領域１３０に記憶された指示情報１３２には、「Ｉｆ（ｌｉｓｔｅｎ＿４１）｛Ｅｘｉｔ（１）；｝」に対応する「項番」が「６」である情報が存在する。しかしながら、図２６に示す例では、仮想マシン群ＭＧ３に含まれる仮想マシン３のいずれかによって、「Ｉｆ（ｌｉｓｔｅｎ＿３５）｛Ｅｘｉｔ（５）；｝」が行われていないため、指示情報１３２における「項番」が「６」である情報の「条件」に設定された実施条件が満たされていない。そのため、試験装置１は、この場合、図２７に示すように、指示情報１３２における「項番」が「６」である情報に対応する指示（仮想マシン３６に対する処理の「再開」を行う旨の指示）を行わずに待機する。
【０１２２】
続いて、例えば、仮想マシン３５が「Ｉｆ（ｌｉｓｔｅｎ＿３５）｛Ｅｘｉｔ（５）；｝」を実行した場合（Ｓ１０４）、試験装置１は、指示情報１３２に「Ｉｆ（ｌｉｓｔｅｎ＿３５）｛Ｅｘｉｔ（５）；｝」に対応する「項番」が「５」である情報が存在するため、図２８に示すように、処理の「再開」を仮想マシン３５に対して指示する（Ｓ５３）。
【０１２３】
そして、試験装置１は、この場合、指示情報１３２における「項番」が「６」である情報の「条件」に設定された実施条件が満たされたため、図２８に示すように、指示情報１３２における「項番」が「６」である情報に対応する指示を行う。そのため、仮想マシン３６は、「Ｌｏｇｉｃ＿Ｅ，ｒｅａｄ  ｎｅｗ  ｄａｔａ」を実行し、図２８に示すように、データベースＤＢ１に記憶されたデータの読み込みを行う。その後、仮想マシン３６は、この場合、データベースＤＢ１において同一データの二重書き込みが行われていることを検知し、例えば、異常が発生していることを試験装置１に対して通知する。
【０１２４】
これにより、試験装置１は、指示情報１３２を参照することで、再現検知処理において検知した異常を再現することが可能になる。
【０１２５】
以上の実施の形態をまとめると、以下の付記の通りである。
【０１２６】
（付記１）
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う試験装置であって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成する命令追加部と、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する処理指示部と、を有する、
ことを特徴とする試験装置。
【０１２７】
（付記２）
付記１において、
前記指示要求命令は、各計算機資源が次に実行する処理の指示を要求する命令である、
ことを特徴とする試験装置。
【０１２８】
（付記３）
付記１において、
前記指示情報は、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと、各計算機資源が行う処理と、所定の条件とを対応付けた情報であり、
前記処理指示部は、前記所定の条件が満たされている場合に、実行された前記指示要求命令に対応する処理の実行の指示を行う、
ことを特徴とする試験装置。
【０１２９】
（付記４）
付記３において、
前記所定の条件は、前記複数の計算機資源のうち、前記処理指示部が処理の実行を指示した計算機資源以外の特定の計算機資源において、所定の処理が実行されたことである、
ことを特徴とする試験装置。
【０１３０】
（付記５）
付記１において、
前記処理指示部は、前記指示情報において、実行された前記指示要求命令に対応する処理が計算機資源の中断である場合、前記指示要求命令を実行した計算機資源に対して中断を指示する、
ことを特徴とする試験装置。
【０１３１】
（付記６）
付記５において、
前記複数の計算機資源の管理を行う管理装置は、前記処理指示部による中断の指示に伴って前記複数の計算機資源のうちのいずれかの計算機資源が中断した場合、前記いずれかの計算機資源と同じ前記追加済ソースコードを実行する他の計算機資源に、前記いずれかの計算機資源が実行する処理を実行させる、
ことを特徴とする試験装置。
【０１３２】
（付記７）
付記１において、
前記処理指示部は、前記指示情報において、実行された前記指示要求命令に対応する処理が計算機資源における処理の再開である場合、前記指示要求命令を実行した計算機資源に対して処理の再開を指示する、
ことを特徴とする試験装置。
【０１３３】
（付記８）
付記１において、さらに、
前記複数の計算機資源のそれぞれから、前記指示要求命令が実行されたことを示す通知を受信する通知受信部を有し、
前記処理指示部は、前記通知受信部が前記通知を受信したことに応じて、前記指示情報の参照を行う、
ことを特徴とする試験装置。
【０１３４】
（付記９）
付記１において、
前記命令追加部は、前記ソースコードに含まれる命令のうち、データの読み込みまたは書き込みを行う命令の前後に前記指示要求命令を追加する、
ことを特徴とする試験装置。
【０１３５】
（付記１０）
付記１において、
前記処理指示部は、前記特定の処理の実行の前に行われる前記特定の処理の事前処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、前記指示要求命令を実行した計算機資源に対し、無作為に決定した処理の実行を指示し、さらに、
前記複数の計算機資源のうちのいずれかの計算機資源が前記指示要求命令を実行したことに応じて、前記いずれかの計算機資源の状態を示すログ情報を出力するログ出力部と、
前記無作為に決定した処理の実行に伴って前記複数の計算機資源において発生した所定の異常を検知する異常検知部と、
前記異常検知部が前記所定の異常の発生を検知した場合、前記ログ情報に基づいて前記指示情報を生成する情報生成部と、を有する、
ことを特徴とする試験装置。
【０１３６】
（付記１１）
付記１０において、
前記情報生成部は、
前記ログ情報を前記複数の計算機資源のそれぞれに対応するログ情報毎にグルーピングし、
グルーピングした前記ログ情報毎に、出力順が最初である第１ログ情報と出力順が最後である第２ログ情報とをそれぞれ特定し、
特定した前記第２ログ情報のそれぞれと、各第２ログ情報の後に出力された前記第１ログ情報のうち、出力順が最初である第１ログ情報とを対応付けた情報を、前記指示情報として生成する、
ことを特徴とする試験装置。
【０１３７】
（付記１２）
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う試験方法であって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成し、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する、
ことを特徴とする試験方法。
【０１３８】
（付記１３）
１または複数のコンピュータにより提供される複数の計算機資源が連動して行う特定の処理の試験を行う処理をコンピュータに実行させる試験プログラムであって、
前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成し、
前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する、
処理をコンピュータに実行させることを特徴とする試験プログラム。
【０１３９】
（付記１４）
１または複数のコンピュータにより提供される複数の計算機資源と、
前記複数の計算機資源が連動して行う特定の処理の試験を行う試験装置と、を有し、
前記試験装置は、前記複数の計算機資源のそれぞれが実行する前記特定の処理の各ソースコードにおける所定の位置に、前記試験装置に指示を要求する指示要求命令を追加して追加済ソースコードを生成する命令追加部を有し、
前記複数の計算機資源は、前記特定の処理を実行し、
前記試験装置は、前記特定の処理の実行中に、前記複数の計算機資源のいずれかにおいて前記指示要求命令が実行されたことに応じて、各計算機資源が実行する前記追加済ソースコードに追加された前記指示要求命令のそれぞれと各計算機資源が行う処理とを対応付けた指示情報が記憶された記憶部を参照し、前記指示要求命令を実行した計算機資源に対し、実行された前記指示要求命令に対応する処理の実行を指示する処理指示部と、を有する、
ことを特徴とする試験システム。
【符号の説明】
【０１４０】
１：試験装置                ２：情報処理装置
３：仮想マシン              ４：仮想化ソフトウエア
【図１】
2018165902.tif 000003
【図２】
2018165902.tif 000004
【図３】
2018165902.tif 000005
【図４】
2018165902.tif 000006
【図５】
2018165902.tif 000007
【図６】
2018165902.tif 000008
【図７】
2018165902.tif 000009
【図８】
2018165902.tif 000010
【図９】
2018165902.tif 000011
【図１０】
2018165902.tif 000012
【図１１】
2018165902.tif 000013
【図１２】
2018165902.tif 000014
【図１３】
2018165902.tif 000015
【図１４】
2018165902.tif 000016
【図１５】
2018165902.tif 000017
【図１６】
2018165902.tif 000018
【図１７】
2018165902.tif 000019
【図１８】
2018165902.tif 000020
【図１９】
2018165902.tif 000021
【図２０】
2018165902.tif 000022
【図２１】
2018165902.tif 000023
【図２２】
2018165902.tif 000024
【図２３】
2018165902.tif 000025
【図２４】
2018165902.tif 000026
【図２５】
2018165902.tif 000027
【図２６】
2018165902.tif 000028
【図２７】
2018165902.tif 000029
【図２８】
2018165902.tif 000030