(57)【要約】  仮想計算機システムは、ハードウェア２と、各々がＣＰＵ上で動作するプログラムを備える複数の仮想計算機３と、複数の仮想計算機３の制御を行う仮想計算機モニタ１とを備える。このテスト方法において、アプリケーションのテストを実行するゲストＯＳ３３が、アプリケーションのテストにおける条件の選択を、仮想計算機モニタ１を介して、仮想計算機システムを制御するホストＯＳ３１に要求する。仮想計算機モニタ１が、条件の選択が要求された場合、ゲストＯＳ３３の複製であるクローンを作成する。ゲストＯＳ３３及び作成されたクローンが、アプリケーションのテストを実行する。
2010038307.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテスト方法であって、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを含む
ことを特徴とする仮想計算機システムのテスト方法。
【請求項２】
前記第１の仮想計算機及び前記作成されたクローンが、前記仮想計算機モニタを介して、入出力命令を実行する第３の仮想計算機に前記入出力命令の実行を要求することにより、前記アプリケーションのテストを実行する
ことを特徴とする請求項１に記載の仮想計算機システムのテスト方法。
【請求項３】
前記仮想計算機モニタが、前記第１の仮想計算機及び前記作成されたクローンから前記第３の仮想計算機への前記入出力命令をトラップして、前記第２の仮想計算機に通知し、
前記通知を受信した前記第２の仮想計算機が、前記メモリに前記クローンを作成するための領域が存在する場合に、前記仮想計算機モニタに前記クローンの作成を依頼する
ことを特徴とする請求項１に記載の仮想計算機システムのテスト方法。
【請求項４】
前記仮想計算機モニタが、前記第２の仮想計算機からの前記依頼を受けた場合、前記クローンを作成する
ことを特徴とする請求項３に記載の仮想計算機システムのテスト方法。
【請求項５】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテストプログラムであって、
前記仮想計算機システムであるコンピュータに、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを実行させる
ことを特徴とする仮想計算機システムのテストプログラム。
【請求項６】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテストプログラムを記録するコンピュータ読み取り可能な記録媒体であって、
前記テストプログラムは、前記仮想計算機システムであるコンピュータに、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを実行させるテストプログラムを記録する
ことを特徴とする仮想計算機システムのテストプログラムの記録媒体。
【請求項７】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムであって、
アプリケーションのテストを実行する第１の仮想計算機と、
前記仮想計算機システムを制御する第２の仮想計算機と、
前記仮想計算機モニタに設けられた、前記第１の仮想計算機の複製であるクローンを作成するクローン作成手段とを備え、
前記第１の仮想計算機がアプリケーションのテストにおける条件の選択を前記仮想計算機モニタを介して前記第２の仮想計算機に要求した場合、前記クローン作成手段が、前記クローンを作成し、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行する
ことを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムのテスト方法、テストプログラム並びにその記録媒体、仮想計算機システムに関し、特に、アプリケーションを実行する仮想計算機上で動作するアプリケーションのテストを、短時間で効率良く高い信頼性で実行することができる仮想計算機システムのテスト方法、テストプログラム並びにその記録媒体、仮想計算機システムに関する。
【背景技術】
【０００２】
仮想計算機システムは、ＯＳ（オペレーティングシステム）により構成される複数の仮想計算機を備える。複数の仮想計算機には、各々、特定の役割が割り当てられる。アプリケーションプログラム（以下、アプリケーションという）を実行する仮想計算機即ちＯＳは、ゲストＯＳと呼ばれる。ゲストＯＳ上で動作するアプリケーションについては、それが正しく動作するか否かについて、出荷前にテストする必要がある。【０００３】
なお、計算機システムの自動テスト方式において、被テスト計算機が実計算機の場合だけでなく、仮想計算機の場合もテスト環境として存在させ、どちらの場合でも自動テストを実行する手段を備えることが提案されている。【０００４】
また、シミュレーション処理を使用するクラスタ間の相互作用のシステム・オン・チップの設計検証の方法及びシステムにおいて、既知のシーケンスに依存するテストケースを作成するステップと、テストケースを既知の点に到達するまで親プロセッサ上で実行するステップを含む方法及びシステムが提案されている。【０００５】
更に、計算機プログラム部品のテスト支援装置において、テストケース記憶手段により記憶されたテストケースに基づいて、テスト状況を集計するテスト状況集計手段と、テスト状況を報知するテスト状況報知手段を備えることが提案されている。
【特許文献１】特開平４−１９５４３６号公報
【特許文献２】特開２００７−１６４７８１号公報
【特許文献３】特開平９−６９０５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
図１２は、本発明者が検討した仮想計算機システムにおけるアプリケーションのテストについての説明図である。【０００７】
ゲストＯＳ上で動作するアプリケーションのテストは、想定される種々の条件を選択的に組み合わせて、網羅的にテストすることが望ましい。そこで、例えば、ゲストＯＳ上で動作するアプリケーションのテストは、アプリケーションが要求する選択子（選択肢）に応じて、テストを実行するオペレータが、選択を繰り返す。これにより、想定される種々の条件を選択的に組み合わせて、当該条件の下でのテスト（組み合わせテスト）を実行する。【０００８】
例えば、仮想計算機システムのＯＳ上で動作するアプリケーションのテスト時に、図１２に示すように、コンソール上での表示画面９１１が、アプリケーションをテストするオペレータに対して表示される。例えば、アプリケーションの開始の表示画面９１１（Ｓｔａｒｔ）が表示された後に、第１の選択画面（Ｓｅｌｅｃｔ１）が表示される。この場合、オペレータは、アプリケーションが要求する選択子９１１１（ｙｅｓ）又は選択子９１１２（ｎｏ）の選択を行う。以下、同様にして、オペレータは、第２の選択画面（Ｓｅｌｅｃｔ２−１又はＳｅｌｅｃｔ２−２）の選択子（ｙｅｓ／ｎｏ）を選択し、第３の選択画面（Ｓｅｌｅｃｔ３−１〜３−４のいずれか一つ）の選択子（ｙｅｓ／ｎｏ）を選択する。【０００９】
第１のテストケースＣＡＳＥ１は、オペレータが選択画面Ｓｅｌｅｃｔ１でｙｅｓを選択し、選択画面Ｓｅｌｅｃｔ２−１でｙｅｓを選択し、選択画面Ｓｅｌｅｃｔ３−１でｙｅｓを選択した組合せであり、当該組合せによるテストである。選択画面Ｓｅｌｅｃｔ２−１は、選択画面Ｓｅｌｅｃｔ１でｙｅｓを選択した場合の選択画面である（他も同様である）。第２のテストケースＣＡＳＥ２等も、同様である。【００１０】
この場合、全てのケースについてのテストを実施するには、選択が３回行われるので、合計で８種類のテストケース（ＣＡＳＥ１〜ＣＡＳＥ８に対応）を実施する必要がある。このように、全てのケースについてのテスト（網羅テスト）を実行しようとする場合、本発明者の検討によれば、以下に示す問題がある。【００１１】
即ち、第１に、条件が１つ増える毎にテストケースが倍になる。このため、条件の数が多ければ莫大なテストケースが生じ、また、オペレータによる選択を繰り返すために多大な時間を要する。第２に、オペレータにより条件を選択する場合、テスト漏れが発生する可能性があり、テストの信頼性を低下させる要因となる。第３に、網羅テストを自動化した場合、テスト漏れを防止することはできるが、個々のテストケース毎に最初の条件からテストをやり直す必要があり、テストの効率が悪くなる。【００１２】
本発明は、アプリケーションを実行する仮想計算機上で動作するアプリケーションのテストを、短時間で効率良く高い信頼性で実行することができる仮想計算機システムのテスト方法、テストプログラム及びその記録媒体を提供することを目的とする。【００１３】
また、本発明は、アプリケーションを実行する仮想計算機上で動作するアプリケーションのテストを、短時間で効率良く高い信頼性で実行することができる仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一実施態様である仮想計算機システムのテスト方法は、ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテスト方法である。このテスト方法は、アプリケーションのテストを実行する第１の仮想計算機が、アプリケーションのテストにおける条件の選択を、仮想計算機モニタを介して、仮想計算機システムを制御する第２の仮想計算機に要求するステップと、仮想計算機モニタが、条件の選択が要求された場合、第１の仮想計算機の複製であるクローンを作成するステップと、第１の仮想計算機及び前記作成されたクローンが、アプリケーションのテストを実行するステップとを含む。【００１５】
本発明の一実施態様である仮想計算機システムのテストプログラムは、仮想計算機システムにおいて実行されて、前述の仮想計算機システムのテスト方法を実現する。【００１６】
本発明の一実施態様である仮想計算機システムのテストプログラムの記録媒体は、前述の仮想計算機システムのテストプログラムを提供する。【００１７】
本発明の一実施態様である仮想計算機システムは、前述の仮想計算機システムのテスト方法を実現する構成を備える。
【発明の効果】
【００１８】
本発明の一実施態様である仮想計算機システムのテスト方法によれば、テストにおける条件の選択が要求された場合、第１の仮想計算機の複製であるクローンが作成され、この後、第１の仮想計算機及び作成されたクローンの双方がテストを実行する。これにより、テストの条件が増えてテストケースが増えたとしても、オペレータによる条件の選択を不要とすることができるので、このための時間を省略してテスト時間を短縮し、テスト漏れを防止してテストの信頼性を向上することができる。また、テストケースが増えたとしても、個々のテストケース毎に最初の条件からテストをやり直す必要がないので、テストを効率良く行うことができる。【００１９】
本発明の一実施態様である仮想計算機システムのテストプログラム及びその記録媒体によれば、前述の仮想計算機システムのテスト方法を実現し、前述の効果を得ることができる。【００２０】
本発明の一実施態様である仮想計算機システムによれば、前述の仮想計算機システムのテスト方法を実現し、前述の効果を得ることができる。
【図面の簡単な説明】
【００２１】
【図１】仮想計算機システムの構成の一例を示す図である。
【図２】仮想計算機システムの構成の一例を示す図である。
【図３】仮想計算機システムの構成の一例を示す図である。
【図４】監視テーブル、ログデータ及び制御テーブルの構造の一例を示す図である。
【図５】仮想計算機システムの動作を説明する図である。
【図６】仮想計算機システムの動作を説明する図である。
【図７】仮想計算機システムの動作を説明する図である。
【図８】図１の仮想計算機システムにおけるテスト処理フローである。
【図９】図１の仮想計算機システムにおけるテスト処理フローである。
【図１０】図１の仮想計算機システムにおけるテスト結果出力処理フローである。
【図１１】テスト実行時の動作を示す図である。
【図１２】本発明者が検討した仮想計算機システムの説明図である。
【符号の説明】
【００２２】
１    仮想計算機モニタ
２    ハードウェア
３    仮想計算機
５    アプリケーション
１１    ゲストＯＳ監視部
１２    クローン作成部
２１、３１１、３３１    メモリ部
３１    ホストＯＳ
３２    ドライバＯＳ
３３    ゲストＯＳ
４１    コンソール
４２    磁気ディスク装置
４３    ネットワーク
１１１    監視テーブル
３１２    ログ部
３１３    テスト進行状態制御テーブル
３２３    バックエンドドライバ
３２４    実Ｉ／Ｏドライバ
３３３    フロントエンドドライバ
【発明を実施するための最良の形態】
【００２３】
図１は、この仮想計算機システムの構成の一例を示す図である。仮想計算機システムは、仮想計算機モニタ（ＶＭＭ：Virtual Machine Monitor 又はHypervisor）１、ハードウェア２、複数の仮想計算機（ＶＭ：Virtual Machine ）３を備える。ハードウェア２上で仮想計算機モニタ１及び仮想計算機３が動作する。【００２４】
仮想計算機システムは、複数の仮想計算機３を備える。即ち、ホストＯＳ（オペレーティングシステム即ち制御プログラム）３１、ドライバＯＳ３２、ゲストＯＳ３３が、各々、仮想計算機３である。各々の仮想計算機３は、各々のＯＳ３１〜３３がハードウェア２の物理（又は実）ＣＰＵの制御権を獲得して当該物理ＣＰＵ上で実行されることにより実現される。仮想計算機モニタ１も同様にして実現される。【００２５】
仮想計算機モニタ１は、この仮想計算機システムの全体を制御する。即ち、仮想計算機モニタ１は、複数の仮想計算機３、即ち、ＯＳ３１〜３３のディスパッチ（物理ＣＰＵの制御権の割当て）、ＯＳ３１〜３３が実行する特権命令のエミュレーション、物理ＣＰＵ等のハードウェア２の制御等を行う。【００２６】
ホストＯＳ３１は、１個設けられ、仮想計算機（ドメイン）として動作し、仮想計算機システム全体の管理を行う。ホストＯＳ３１は、仮想計算機システムのブート時に起動され、ドライバＯＳ３２やゲストＯＳ３３の制御（起動及び停止等を含む全ての制御）を行う。ホストＯＳ３１は、同時に、ドライバＯＳ３２としても動作可能である。ホストＯＳ３１は、入出力装置等のコンソール（端末）４１を備える。【００２７】
ドライバＯＳ３２は、物理（又は実）入出力装置（Ｉ／Ｏ装置）４２、４３を制御するＯＳである。物理Ｉ／Ｏ装置４２、４３は、複数の種類、例えば磁気ディスク装置４２、ネットワーク４３等を備える。ドライバＯＳ３２は、複数の種類の物理Ｉ／Ｏ装置４２、４３毎に、設けられる。物理Ｉ／Ｏ装置４２、４３の制御はドライバＯＳ３２が実行する。ドライバＯＳ３２は、ホストＯＳ３１上やゲストＯＳ３３上でも動作可能である。ドライバＯＳ３２がゲストＯＳ３３上で動作する場合、そのゲストＯＳ３３は、見かけ上ドライバＯＳ３２となる。【００２８】
ゲストＯＳ３３は、物理Ｉ／Ｏ装置４２、４３を持たないＯＳである。ゲストＯＳ３３は、通常の（いわゆる）ＯＳと考えてよい。例えば、アプリケーションプログラム（以下、アプリケーション）５は、いずれかのゲストＯＳ３３上で動作する。アプリケーション５は、テストの対象となるプログラム（アプリケーション５）である。ゲストＯＳ３３は、ドライバＯＳ３２に対してＩ／Ｏ命令の実行を依頼することにより、そのＩ／Ｏ命令の実行が可能となる。【００２９】
図２は、図１の仮想計算機システムにおけるドライバの構成の一例を示す図である。ドライバＯＳ３２は、バックエンドドライバ（Backend Driver）３２３、実Ｉ／Ｏ（Input/Output）ドライバ３２４を備える。ゲストＯＳ３３は、各々、フロントエンドドライバ（Frontend Driver）３３３を備える。【００３０】
バックエンドドライバ３２３は、ドライバＯＳ３２に設けられ、ドライバＯＳ３２とゲストＯＳ３３間でＩ／Ｏ命令を受け渡すドライバである。フロントエンドドライバ３３３は、ゲストＯＳ３３に設けられ、ゲストＯＳ３３とドライバＯＳ３２間でＩ／Ｏ命令を受け渡すドライバである。【００３１】
例えば、ゲストＯＳ３３は、フロントエンドドライバ３３３からバックエンドドライバ３２３へＩ／Ｏ命令の実行を依頼する。このＩ／Ｏ命令の実行の依頼は、仮想計算機モニタ１を介して実行される。即ち、フロントエンドドライバ３３３は、仮想計算機モニタ１にバックエンドドライバ３２３へＩ／Ｏ命令の実行を依頼するように要求する。これに応じて、仮想計算機モニタ１は、バックエンドドライバ３２３へ当該Ｉ／Ｏ命令の実行を依頼する。【００３２】
実Ｉ／Ｏドライバ３２４は、ドライバＯＳ３２に設けられ、物理Ｉ／Ｏ装置４２、４３に対して、バックエンドドライバ３２３へ依頼された当該Ｉ／Ｏ命令を実行するドライバである。これにより、例えば磁気ディスク装置４２からデータが読み出され、又は、データが書き込まれる。なお、図２においては、ネットワーク４３の図示を省略している。【００３３】
図３は、仮想計算機モニタ１及びハードウェア２の構成の一例を示す図である。【００３４】
仮想計算機モニタ１は、ゲストＯＳ監視部１１、クローン作成部１２を備える。ゲストＯＳ監視部１１は、監視テーブル１１１を備える。ハードウェア２は、物理ＣＰＵ（図示省略）、メモリ部２１を備える。メモリ部２１は、複数のメモリ２１１を備える。ホストＯＳ３１は、メモリ部３１１、ログ部３１２、テスト進行状態制御テーブル３１３を備える。ゲストＯＳ３３は、メモリ部３３１を備える。なお、図３において、図２に示すバックエンドドライバ３２３等の図示は省略している。【００３５】
ゲストＯＳ監視部１１は、ゲストＯＳ３３からのＩ／Ｏ命令の実行の依頼について監視を行う。Ｉ／Ｏ命令は所定のフォーマットを備える。従って、Ｉ／Ｏ命令か否かは、ゲストＯＳ３３からの命令のフォーマットを調べることにより知ることができる。Ｉ／Ｏ命令がコンソール４１のＩ／Ｏ命令（後述する）であるか否かも、同様に、知ることができる。Ｉ／Ｏ命令がゲストＯＳ３３からの選択要求（後述する）であるか否かも、同様である。また、ゲストＯＳ監視部１１は、監視テーブル１１１に基づいて、アプリケーション５のテストが開始されてその時点でテスト中であるか否かを判定する。ゲストＯＳ監視部１１は、監視テーブル１１１に、テスト中であるかどうかを識別するデータを格納する。【００３６】
図４（Ａ）は、監視テーブル１１１のテーブルの構造の一例を示す。監視テーブル１１１は、アプリケーション５のテスト（テスト名）毎に、テスト中であるかどうかを識別するデータを格納する。テスト中かどうかを識別するデータは、テスト中である場合にはｙｅｓとされ、テスト中でない場合にはｎｏとされる。【００３７】
即ち、ゲストＯＳ監視部１１は、アプリケーション５のテストが開始されて終了していなければ、テスト中と判断する。この場合、ゲストＯＳ監視部１１は、監視テーブル１１１において、そのテストについて「ｙｅｓ」を格納する。また、これ以外の場合、ゲストＯＳ監視部１１は、監視テーブル１１１において、そのテストについて「ｎｏ」を格納する。これにより、ゲストＯＳ監視部１１は、ホストＯＳ３１に対して、ゲストＯＳ３３のアプリケーション５のテストの状態を通知することができる。【００３８】
クローン作成部１２は、アプリケーション５のテストにおいて、ホストＯＳ３１からゲストＯＳ３３のクローンの作成又は削除の要求を受信する。これにより、クローン作成部１２は、対象となるゲストＯＳ３３のクローンの作成又は削除を行う。【００３９】
ここで、クローンとは、ある時点において、あるゲストＯＳ３３（ゲストＯＳ＃１）のメモリを他のゲストＯＳ３３（ゲストＯＳ＃２）にコピーし、同一の状態から他のゲストＯＳ３３が動作し得るようにする（又は、動作させる）ことをいう。  例えば、ゲストＯＳ＃１の使用するメモリ部２１のメモリ＃１が、ゲストＯＳ＃２の使用するメモリ＃２としてコピーされる。この場合、ゲストＯＳ＃２は、ゲストＯＳ＃１のクローンである。メモリ＃１はゲストＯＳ＃１のメモリ部３３１に対応する実メモリであり、メモリ＃２はゲストＯＳ＃２のメモリ部３３１に対応する実メモリである。ゲストＯＳ＃１のメモリ部３３１は、ゲストＯＳ＃１が使用する仮想メモリである。ゲストＯＳ＃２のメモリ部３３１も同様である。【００４０】
ハードウェア２において、仮想計算機モニタ１により、実ＣＰＵ及び実メモリが、各々の仮想計算機３に割当てられる。メモリ部２１は、ゲストＯＳ３３がアプリケーション５を実行するための実メモリである。メモリ部２１は、複数のメモリ（メモリ領域）２１１を含む。【００４１】
メモリ＃１はゲストＯＳ＃１の使用するメモリ領域であるものとし、メモリ＃２はゲストＯＳ＃２の使用するメモリ領域であるものとする。例えば、ゲストＯＳ＃１のアプリケーション５には、クローン作成部１２により、メモリ＃１が割当てられる。同様にして、ゲストＯＳ＃２のアプリケーション５には、メモリ＃２が割当てられる。クローンであるゲストＯＳ＃２の削除において、クローン作成部１２により、メモリ＃２が開放される。【００４２】
ホストＯＳ３１は、仮想計算機モニタ１から通知される、ゲストＯＳ３３からのＩ／Ｏ命令がコンソール４１へのＩ／Ｏ命令であるか否かを判定する。ホストＯＳ３１は、コンソール４１へのＩ／Ｏ命令である場合、更に、ゲストＯＳ３３からの選択要求（選択子の選択を実行する要求）か否かを判定する。ゲストＯＳ３３からの選択要求の場合、ホストＯＳ３１は、テスト進行状態制御テーブル３１３を参照して、この選択要求のデータが格納済みか否かを判定する。【００４３】
図４（Ｃ）は、テスト進行状態制御テーブル３１３のテーブルの構造の一例を示す。テスト進行状態制御テーブル３１３は、アプリケーション５のテストのテストケース毎に、複数の選択子の取った値と、ドメイン名と、当該テストの状況とを格納する。従って、複数のテストケース（例えば、図１１のＣＡＳＥ１〜ＣＡＳＥ８）が並列に実行される場合、複数のテスト進行状態制御テーブル３１３が設けられる。選択子の取った値は、ｙｅｓ又はｎｏとされる。ドメイン名は、当該アプリケーション５を実行している（又は、実行した）ドメイン（即ち、仮想計算機又はＯＳ）の名前である。テストの状況は、テストが終了した場合にはテスト済とされ、テストが終了していない場合にはテスト中とされる。【００４４】
ホストＯＳ３１は、テスト進行状態制御テーブル３１３に、当該テストケースに対応する選択要求のデータ（選択子の値）が格納済みでない場合（未選択項目である場合）、該当データを格納する。一方、ホストＯＳ３１は、当該選択要求のデータが格納済みである場合、当該データを格納しない。【００４５】
更に、ホストＯＳ３１は、当該選択要求のデータが未選択項目である場合、ゲストＯＳ３３のクローンを作成するために必要な資源があるか否かを判定する。ここで、必要な資源とは、メモリ部２１に、ゲストＯＳ＃１のメモリ＃１をコピーできる大きさの空き領域をいう。ホストＯＳ３１は、当該選択要求のデータが未選択項目で、かつ、前記資源がある場合、ゲストＯＳ３３（＃１）のクローンの作成を、クローン作成部１２に依頼する。【００４６】
一方、ホストＯＳ３１は、選択要求を行ったゲストＯＳ３３に対する応答（いずれの選択子を選択するかの返答）を送信し、その応答に関するログ（選択要求に対する選択項目の内容）を記憶する。即ち、ホストＯＳ３１は、アプリケーション５の選択子に対応したテスト結果（ログ）をログ部３１２へ記憶する。【００４７】
図４（Ｂ）は、ログ部３１２に記憶されるログの構造の一例を示す。ログ部３１２は、アプリケーション５の選択子に対応したテスト結果（ログ）を記憶するためのメモリである。ログ部３１２は、選択情報（ｓｅｌｅｃｔ）と、結果情報（ｒｅｓｕｌｔ）とを格納する。選択情報は、アプリケーション５のテストの選択子毎に、当該選択子として選択された値を格納する。選択子として選択された値は、選択子（又はその値、以下同じ）ｙｅｓが選択された場合にはｙｅｓとされ、選択子ｎｏが選択された場合にはｎｏとされる。結果情報は、当該テストの結果であるログファイル（例えば、ｆｉｌｅ−１）、パケット（ｎｅｔｗｏｒｋ  ｐａｃｋｅｔ−１）、画面（ｃｏｎｓｏｌｅ  ｓｃｒｅｅｎ  １）等を含む。【００４８】
なお、ｙｅｓ又はｎｏのような選択子以外の応答が必要な場合がある。例えば、ユーザＩＤなどの文字列をテストプログラムが要求する場合である。このようなテストケースの場合、ａａａのように、ランダムに選択した文字列を応答するものとする。これは、ランダムな文字列のテストケースにおいては、ある１個のパターンの文字列のテストが実施されれば、アプリケーション５が要求する応答が得られるためである。【００４９】
一方、ホストＯＳ３１は、ゲストＯＳ３３のテストが完了すると、クローンの削除をクローン作成部１２へ要求する。この要求を受信したクローン作成部１２は、クローンであるゲストＯＳ３３（＃２）の削除を実行する。更に、ホストＯＳ３１は、クローンの削除依頼の要求の通知後、その時点でログ部３１２に格納されているログを読込み、読み込んだログを、テスト結果４１２として、物理Ｉ／Ｏ装置（４１、４２又は４３）等へ出力、又は、保存する。【００５０】
図４（Ｄ）は、コンソール４１へ出力されるテスト結果４１２の例を示す。テスト結果４１２は、ログ部３１２が出力されたものである。テスト結果４１２は、例えば、当該テストにおいて、複数の選択子の取った値と、当該選択子を実行した時点におけるテスト結果を格納するファイル名（例えば、ｆｉｌｅ１：ａａ．ａａ．ｂｂ．ｃｃ）とを含む。なお、ホストＯＳ３１は、ログ部３１２を予め定められた処理により編集して、テスト結果４１２として出力する。【００５１】
ゲストＯＳ３３は、以上のようなアプリケーション５のテストを開始した場合、仮想計算機モニタ１にテスト開始を通知する。テスト開始の通知後、ゲストＯＳ３３は、コンソール４１へ選択要求のＩ／Ｏ命令を実行する。ホストＯＳ３１から選択要求に対する応答を受信したゲストＯＳ３３が、その応答内容（選択子の選択内容）をアプリケーション５に対して実行する。【００５２】
即ち、クローンであるゲストＯＳ３３（＃２）がこの応答を受信した場合、この応答を受信したクローンであるゲストＯＳ３３がその応答内容を実行する。これ以後、ゲストＯＳ３３は、同様な動作を繰り返し、テストが完了した場合、ホストＯＳ３１に対してアプリケーション５のテストの完了の通知を行う。【００５３】
このテスト完了通知を受信したホストＯＳ３１は、クローン作成部１２に対してクローンであるゲストＯＳ３３（＃２）の削除を依頼する。これに応じて、クローン作成部１２が、メモリ部２１のメモリ＃２を解放する。この結果、クローンであるゲストＯＳ３３は削除される。【００５４】
以上のように、この例においては、仮想計算機モニタ１のクローン作成部１２は、ゲストＯＳ３３の複製であるクローンを作成する。例えば、前述したように、ゲストＯＳ＃１のメモリ＃１を他のゲストＯＳ＃２のメモリ＃２にコピーすることにより、ゲストＯＳ＃１のクローンを作成することができる。【００５５】
クローンの作成は、所定の場合に実行される。このために、仮想計算機モニタ１のゲストＯＳ監視部１１は、ゲストＯＳ３３を監視する。そして、ゲストＯＳ監視部１１は、ゲストＯＳ３３が、アプリケーション５のテストにおける条件の選択を、仮想計算機モニタ１を介して、ホストＯＳ３１に要求した場合、これを検出する。この検出に基づいて、クローン作成部１２が、前記条件の選択が要求された場合、クローンを作成する。なお、前記条件の選択は、仮想計算機モニタ１を介して要求される。【００５６】
この結果、ゲストＯＳ＃１及び作成されたクローンであるゲストＯＳ＃２が、アプリケーション５のテストを実行する。アプリケーション５のテストは、ゲストＯＳ＃１及びクローンであるゲストＯＳ＃２が、仮想計算機モニタ１を介して、入出力命令を実行するドライバＯＳ３２にＩ／Ｏ命令の実行を要求し、そのログを記録することにより、実行される。【００５７】
このために、仮想計算機モニタ１のゲストＯＳ監視部１１は、ゲストＯＳ＃１及びクローンであるゲストＯＳ＃２からドライバＯＳ３２へのＩ／Ｏ命令をトラップ（又はコピー）して、ホストＯＳ３１に通知する。この通知を受信したホストＯＳ３１が、メモリ部２１にクローンを作成するための領域が存在する場合に、仮想計算機モニタ１のクローン作成部１２にクローンの作成を依頼する。このホストＯＳ３１からの依頼に応じて、仮想計算機モニタ１のクローン作成部１２が、クローンを作成する。【００５８】
以下、図５、図６及び図７に従って、ホストＯＳ３１、ゲストＯＳ３３及び仮想計算機モニタ１について、詳細に説明する。【００５９】
図５は、ゲストＯＳ３３上のアプリケーション５が要求する選択の監視とホストＯＳ３１の応答を示す図である。【００６０】
ゲストＯＳ３３が、アプリケーション５のテスト開始を仮想計算機モニタ１へ通知する（処理＃１−０−１）。ゲストＯＳ３３のテスト開始の通知を受信した後、仮想計算機モニタ１は、テスト開始の通知の情報を監視テーブル１１１へ記憶する（処理＃１−０−２）。【００６１】
ゲストＯＳ３３は、コンソール４１へ、テストプログラム（アプリケーション５）の選択要求であるＩ／Ｏ命令を出力する（処理＃１−１）。仮想計算機モニタ１は、ゲストＯＳ３３からのコンソール４１へのＩ／Ｏ命令を監視し、テストが開始されたと判断した場合、“テスト開始済み”であるとホストＯＳ３１へ通知する（処理＃１−２）。なお、図５においては、Ｉ／Ｏ命令を単にＩＯと表記している（図６〜８においても同じ）。【００６２】
ホストＯＳ３１は、仮想計算機モニタ１から通知されたＩ／Ｏ命令がコンソール４１へのＩ／Ｏ命令か否かを判定する（処理＃１−３）。ホストＯＳ３１は、Ｉ／Ｏ命令がコンソール４１へのＩ／Ｏ命令出力である場合、更に、ゲストＯＳ３３からの選択要求か否かの判定を行う（処理＃１−４）。【００６３】
ホストＯＳ３１は、ゲストＯＳ３３からの選択要求である場合、テスト進行状態制御テーブル３１３へ選択項目のデータ更新を行う（処理＃１−５−１）。具体的には、ホストＯＳ３１は、テスト進行状態制御テーブル３１３から対応するテストケースについて、「状況」項目について、“テスト中”であることの更新を行う。【００６４】
更に、ホストＯＳ３１は、選択項目（未選択の項目）を選択する（処理＃１−５−２）。ホストＯＳ３１は、その選択項目の選択子の値を決定した後、その決定した値にテスト進行状態制御テーブル３１３のデータを更新する（処理＃１−６）。【００６５】
次に、ホストＯＳ３１は、選択項目の選択子の値をゲストＯＳ３３へ応答する（処理＃１−７）。ホストＯＳ３１は、その応答した選択子の値のログ及び選択子以外のログの情報をログ部３１２へ保存する（処理＃１−８及び処理＃１−９）。【００６６】
ゲストＯＳ３３は、ホストＯＳ３１からの応答を受けて、応答された選択子によりテストを続行する（処理＃１−１０）。【００６７】
図６は、ゲストＯＳ３３が要求した選択の要求時にクローンの作成及び並列でテストを実行する動作を説明する図である。【００６８】
ゲストＯＳ３３が、例えば、ホストＯＳ３１へのＩ／Ｏ命令、即ち、コンソール４１への選択要求を送信する（処理＃２−１）。ゲストＯＳ３３を監視している仮想計算機モニタ１のゲストＯＳ監視部１１が、これを検出して、ホストＯＳ３１へ通知する（処理＃２−２）。この通知を受信したホストＯＳ３１が、ゲストＯＳ３３のクローンを作成するメモリ部２１の資源があるか否かを判定して（処理＃２−３）、資源がある場合、仮想計算機モニタ１のクローン作成部１２にクローンの作成を依頼する（処理＃２−４）。【００６９】
この依頼に応じて、クローン作成部１２が、ゲストＯＳ３３（＃１）のクローンであるゲストＯＳ３３（＃２）を作成する（処理＃２−５）。【００７０】
ホストＯＳ３１が、選択要求に応じて、例えば、選択子Ａを応答としてゲストＯＳ３３（＃１）に返信する（処理＃２−６）。また、ホストＯＳ３１が、選択要求に応じて、例えば、選択子Ｂを応答としてゲストＯＳ３３（＃２）に返信する（処理＃２−７）。更に、ホストＯＳ３１が、ゲストＯＳ３３に返信した選択子Ａ及びＢをログとしてログ部３１２に格納する（処理＃２−８）。【００７１】
なお、後述する図１１において、選択子Ａは選択子４１１１（ｙｅｓ）に相当し、選択子Ｂは選択子４１１２（ｎｏ）に相当する。ゲストＯＳ３３（＃１）は、元々存在するゲストＯＳ３３である。ゲストＯＳ３３（＃１）が、選択子Ａの選択により生成されるようにしても良い。ゲストＯＳ３３（＃２）は、選択子Ｂの選択により生成されたゲストＯＳ３３（＃１）のクローンである。【００７２】
図６は、便宜的に、処理＃２−６及び処理＃２−７が、連続して従って並列に実行される場合を示す。しかし、処理＃２−６及び処理＃２−７は、必要に応じて、個々に実行されるようにされるようにしても良い。【００７３】
一方、ゲストＯＳ３３（＃１）が選択子Ａを実行し（処理＃２−９）、クローンであるゲストＯＳ３３（＃２）が選択子Ｂを実行する（処理＃２−１０）。【００７４】
図７は、ホストＯＳ３１がアプリケーション５の出力の結果をログする動作を説明する図である。【００７５】
ゲストＯＳ３３が、コンソール４１への選択要求以外のＩ／Ｏ命令を送信する（処理＃３−１）。ゲストＯＳ監視部１１が、これを検出して、ホストＯＳ３１へ通知する（処理＃３−２）。この通知を受信したホストＯＳ３１が、選択子に応じた出力結果をログ部３１２にログする（処理＃３−３）。【００７６】
ゲストＯＳ３３は、テストが完了すると（処理＃３−４）、これをホストＯＳ３１に通知する。この通知を受信したホストＯＳ３１は、クローン作成部１２にクローンの削除を依頼する（処理＃３−５−１）。【００７７】
この依頼に応じて、クローン作成部１２が、ゲストＯＳ３３（＃１）のクローンであるゲストＯＳ３３（＃２）を削除する（処理＃３−５−２）。【００７８】
削除依頼の後に、ホストＯＳ３１が、その時点で格納されているログを読み込んで（処理＃３−６）、選択子と結果とをレポートとして出力する（処理＃３−７）。【００７９】
図８及び図９は、図１の仮想計算機システムにおけるテスト処理フローである。【００８０】
ゲストＯＳ３３が、当該ゲストＯＳ３３上で実行されるアプリケーション５について、仮想計算機モニタ１にテスト開始を通知する（ステップＳ１１）。ステップＳ１１は、例えば処理＃１−０−１に対応する。【００８１】
この通知を受信した仮想計算機モニタ１が、通知を受信したゲストＯＳ３３のテスト開始の情報を、ゲストＯＳ監視部１１に記憶する（ステップＳ１２）。ステップＳ１２は、例えば処理＃１−０−２に対応する。ステップＳ１２において、ゲストＯＳ監視部１１は、監視テーブル１１１に、テスト毎に、テスト中かどうかを識別するデータ（ｙｅｓ）を格納する。また、例えば、仮想計算機モニタ１は、当該テスト開始をホストＯＳ３１に通知する。この通知を受信したホストＯＳ３１は、図４（Ｂ）のログ部３１２及び図４（Ｃ）のテスト進行状態制御テーブル３１３を生成する。例えば、ログ部３１２において、選択子の数及び結果情報の数は１個とされ、各項目は空とされる。例えば、テスト進行状態制御テーブル３１３において、テストケースの数は１個とされ、各項目は空とされる。【００８２】
ゲストＯＳ３３が、ホストＯＳ３１又はドライバＯＳ３２に対するＩ／Ｏ命令を実行する（ステップＳ１３）。ステップＳ１３は、例えば処理＃１−１、＃２−１及び＃３−１に対応する。ステップＳ１３において、ゲストＯＳ３３は、ホストＯＳ３１又はドライバＯＳ３２へ当該Ｉ／Ｏ命令の実行を要求するように、仮想計算機モニタ１に依頼する。【００８３】
これに応じて、仮想計算機モニタ１が、監視テーブル１１１に基づいて、テスト開始済みか否かを判定する（ステップＳ１４）。ステップＳ１４は、例えば処理＃１−２に対応する。テスト開始済みである場合、仮想計算機モニタ１は、ゲストＯＳ３３からの当該Ｉ／Ｏ命令をトラップ（コピー）して、当該トラップしたＩ／Ｏ命令をホストＯＳ３１へ通知する（ステップＳ１５）。ステップＳ１５は、例えば処理＃１−２、＃２−２及び＃３−２に対応する。テスト開始済みでない場合、仮想計算機モニタ１は、処理を終了する。【００８４】
トラップしたＩ／Ｏ命令の通知を受信したホストＯＳ３１は、当該通知されたＩ／Ｏ命令がコンソール４１のＩ／Ｏ命令であるか否かを判定する（ステップＳ１６）。ステップＳ１６は、例えば処理＃１−３に対応する。コンソール４１のＩ／Ｏ命令である場合、ホストＯＳ３１は、更に、当該Ｉ／Ｏ命令がゲストＯＳ３３からの選択要求であるか否かを判定する（ステップＳ１７）。ステップＳ１７は、例えば処理＃１−４に対応する。【００８５】
ステップＳ１６において当該通知されたＩ／Ｏ命令がコンソール４１のＩ／Ｏ命令でない場合、ホストＯＳ３１は、テスト結果として、ログをログ部３１２の結果情報（ｒｅｓｕｌｔ）へ保存する（ステップＳ１８）。また、ステップＳ１７において当該Ｉ／Ｏ命令がゲストＯＳ３３からの選択要求でない場合にも、ホストＯＳ３１は、ステップＳ１８を実行する。ステップＳ１８の実行後、仮想計算機モニタ１は、ステップＳ１５以下の処理を繰り返す。ステップＳ１８は、例えば処理＃１−９及び＃３−３に対応する。【００８６】
ステップＳ１７において当該Ｉ／Ｏ命令がゲストＯＳ３３からの選択要求である場合、ホストＯＳ３１は、ゲストＯＳ３３からの選択要求の選択子がテスト進行状態制御テーブル３１３に格納済みか否かを判定する（ステップＳ１９）。格納済みでない場合、ホストＯＳ３１は、テスト進行状態制御テーブル３１３に、テストケース毎に、これに対応する当該選択子を追加する（ステップＳ２０）。ステップＳ１９及びＳ２０は、例えば処理＃１−５−１に対応する。格納済みである場合、ステップＳ２０は省略される。【００８７】
例えば、図４（Ｂ）のテスト進行状態制御テーブル３１３において、選択子１（の値）及び選択子２（の値）が格納され、選択子３（の値）が格納されていないとする。即ち、テスト進行状態制御テーブル３１３において、「選択子の続き」の欄は空であるとする。また、第１のテストケースＣＡＳＥ１は、テスト済みでなく、テスト中であるとする。【００８８】
この状態で、第１のテストケースＣＡＳＥ１において、ゲストＯＳ３３（＃１）の処理が進んで、ゲストＯＳ３３（＃１）即ちｇｕｅｓｔ１からコンソール４１に対して、選択子３の選択要求が発行される。選択子３は格納されていないので、ホストＯＳ３１により、テスト進行状態制御テーブル３１３において、以下のように、データが追加される。【００８９】
当該選択要求は、ｙｅｓ又はｎｏのいずれかの選択を要求する。これに基づいて、選択子３がｙｅｓ又はｎｏの２個の値を取ることが判る。１個の処理（例えば、選択子３＝ｙｅｓの処理）を現在処理中のゲストＯＳ３３（＃１）が引き続き処理する場合、残りの１個の処理（例えば、選択子３＝ｎｏの処理）を他のゲストＯＳ３３が処理することになる。そこで、第１のテストケースＣＡＳＥ１と第２のテストケースＣＡＳＥ２との間に空行が挿入され、当該空行にその時点の第１のテストケースＣＡＳＥ１のデータのコピーが格納される。【００９０】
この時、「実行ドメイン名」は、「空」とされる。「状況」は、「テスト未」とされる。次に、「選択子の続き」に「選択子３の値」が追加される。即ち、他のゲストＯＳ３３が処理する選択子３＝ｎｏが記述される。【００９１】
一方、第１のテストケースＣＡＳＥ１において、「選択子の続き」に「選択子３の値」が追加され、ゲストＯＳ３３（＃１）が処理する選択子３＝ｙｅｓが記述される。【００９２】
なお、実際には、第２〜第４のテストケースＣＡＳＥ２〜ＣＡＳＥ４についても、同様の処理により、空行が挿入され、各々のデータが格納される。これに伴って、第２〜第４のテストケースＣＡＳＥ２〜ＣＡＳＥ４において、当該ゲストＯＳ３３が処理する選択子３＝ｙｅｓが記述される。【００９３】
また、例えば、第１のテストケースＣＡＳＥ１と第２のテストケースＣＡＳＥ２の間に挿入された行が、新たな第２のテストケースＣＡＳＥ２とされる。それまでの第２のテストケースＣＡＳＥ２は、第３のテストケースＣＡＳＥ３とされる（他も同様である）。以上により、新たな第２、第４、第６及び第８のテストケースＣＡＳＥ２、ＣＡＳＥ４、ＣＡＳＥ６及びＣＡＳＥ８（以下、「新たなテストケース」という）が作成され、第１〜第８のテストケースＣＡＳＥ１〜ＣＡＳＥ８が存在することになる。【００９４】
また、ホストＯＳ３１は、「新たなテストケース」について、これに対応するログ部３１２を新たに生成して、テスト進行状態制御テーブル３１３と同様にして、その時点までに選択された選択子の値を記述する。例えば、前述の新たな第２のテストケースＣＡＳＥ２について、ログ部３１２が新たに生成されて、これに第１のテストケースＣＡＳＥ１のログ部３１２のコピーが格納される。この時、例えば、選択子３即ちｓｅｌｅｃｔ３を追加し、その値ｎｏを格納する。また、第１のテストケースＣＡＳＥ１のログ部３１２において、当該選択子即ちｓｅｌｅｃｔ３を追加し、その値ｙｅｓを格納する。他についても、同様である。【００９５】
この後、ホストＯＳ３１が、ゲストＯＳ３３のクローンを作成する必要がある場合、当該クローンを作成する資源（ハードウェア２のメモリ部２１の空き領域）があるか否かを判定する（ステップＳ２１）。ステップＳ２１は、例えば処理＃２−３に対応する。例えば、前述の「新たなテストケース」の全部を実行するためのクローンを作成する資源があるかが判定される。資源がない場合、ホストＯＳ３１は、予め定められた時間の経過を待ち（ステップＳ２２）、この後、ステップＳ２１を繰り返す。なお、ホストＯＳ３１は、ステップＳ２１の開始に際して、ゲストＯＳ３３のクローンを作成する必要があるか（「新たなテストケース」が存在するか）否かを調べる。作成する必要がある場合にはステップＳ２１が続行され、作成する必要がない場合には、ステップＳ２１〜Ｓ２５が省略される。【００９６】
資源がある場合、ホストＯＳ３１が、ゲストＯＳ３３のクローンの作成を、仮想計算機モニタ１に依頼する（ステップＳ２３）。ステップＳ２３は、例えば処理＃２−４に対応する。この依頼を受信した仮想計算機モニタ１は、クローン作成部１２に対し、対象となるゲストＯＳ３３のクローンの作成を指示する。これに応じて、クローン作成部１２は、メモリ部２１の空き領域に、対象となるゲストＯＳ３３のクローンを作成する（ステップＳ２４）。ステップＳ２４は、例えば処理＃２−５に対応する。これにより、例えば、「新たなテストケース」の各々について、これを実行するクローンが作成される。【００９７】
ホストＯＳ３１が、例えば仮想計算機モニタ１からクローン作成の通知を受信した場合、テスト進行状態制御テーブル３１３において、「状況」が「テスト未」であるテストケース（以下、未選択項目という）を選択し（ステップＳ２５）、当該選択された未選択項目を更新する（ステップＳ２６）。ステップＳ２５は、例えば処理＃１−５−２に対応する。ステップＳ２６は、例えば、処理＃１−６に対応する。【００９８】
ステップＳ２６において、当該選択された未選択項目の「状況」が「テスト未」から「テスト中」に変更され、「実行ドメイン名」が当該テストケースを実行するゲストＯＳ３３の名前とされる。このゲストＯＳ３３は、基本的には、ステップＳ２４において作成されたゲストＯＳ３３のクローンである。但し、図４（Ｃ）に示すように、例えば、第１のテストケースＣＡＳＥ１がテスト済である場合には、これを実行したゲストＯＳ３３（ｇｕｅｓｔ１）に、他のテストケースＣＡＳＥ３を実行させるようにしても良い。【００９９】
この後、ホストＯＳ３１が、ステップＳ１５で通知された選択要求についてゲストＯＳ３３に対して応答する（ステップＳ２７）。例えば、選択要求に対応する値である「選択子３＝ｙｅｓ」が、ゲストＯＳ３３に返信される。ステップＳ２７は、例えば処理＃１−７及び＃２−６に対応する。更に、ホストＯＳ３１が、ゲストＯＳ３３のクローン（ゲストクローン）が存在する場合には、当該ゲストクローンに対して、当該選択された未選択項目について応答する（ステップＳ２８）。例えば、選択要求に対応する値である「選択子３＝ｎｏ」が、ゲストＯＳ３３のクローンに返信される。ステップＳ２８は、例えば処理＃２−７に対応する。更に、ホストＯＳ３１が、当該選択要求に関するログを、対応するログ部３１２に記録する（ステップＳ２９）。例えば、選択子３＝ｙｅｓに関するログを、テストケースＳＡＳＥ１のログとして、各々の対応するログ部３１２に記録する。ステップＳ２９は、例えば処理＃１−８及び＃２−８に対応する。【０１００】
この後、応答を受信したゲストＯＳ３３が、ステップＳ２７及びＳ２８の応答により得た選択子を実行することにより、テストを続行する（ステップＳ３０）。即ち、ステップＳ１３以下が実行される。ステップＳ３０は、例えば処理＃１−１０、＃２−９及び＃２−１０に対応する。例えば、ゲストＯＳ３３が選択子３＝ｙｅｓを実行し、ゲストＯＳ３３のクローンが選択子３＝ｎｏを実行する。ゲストＯＳ３３のクローンは、ゲストＯＳ３３をコピーしているので、最初からテストを繰り返すことなく、途中の選択子２以降を実行すれば良い。【０１０１】
図１０は、図１の仮想計算機システムにおけるテスト結果の出力処理フローである。【０１０２】
ゲストＯＳ３３が、当該ゲストＯＳ３３上で実行されるアプリケーション５について、仮想計算機モニタ１を介して、ホストＯＳ３１にテスト終了を通知する（ステップＳ３１）。ステップＳ３１は、例えば処理＃３−４に対応する。この通知は、アプリケーション５についてのテストが終了した場合に行われる。【０１０３】
この通知を受信したホストＯＳ３１が、仮想計算機モニタ１に当該ゲストＯＳ３３のクローンの削除を依頼し、この依頼を受けた仮想計算機モニタ１が当該クローンを削除する（ステップＳ３２）。ステップＳ３２は、例えば処理＃３−５−１及び＃３−５−２に対応する。具体的には、仮想計算機モニタ１からの指示を受けたクローン作成部１２が、ハードウェア２のメモリ部２１において、当該クローンに関するメモリ２１１を開放する。また、仮想計算機モニタ１は、通知を受信したゲストＯＳ３３のテスト終了の情報を、ゲストＯＳ監視部１１に記憶する。即ち、ゲストＯＳ監視部１１が、監視テーブル１１１に、テスト毎に、テスト中かどうかを識別するデータ（ｎｏ）を格納する。【０１０４】
この後、ホストＯＳ３１が、アプリケーション５について実行されたテストケースについて、その時点までにログ部３１２に格納されたログを読み出して（ステップＳ３３）、読み出したログをテスト結果として例えばコンソール４１に出力する（ステップＳ３４）。これにより、例えば、図４（Ｄ）に示すテスト結果４１２が得られる。ステップＳ３３は、例えば処理＃３−６に対応する。ステップＳ３３は、例えば処理＃３−７に対応する。【０１０５】
図１１は、アプリケーションのテスト実行時の動作を示す図である。図１１において、仮想計算機システムのＯＳ上で動作するアプリケーション５のテスト時のコンソール上での表示画面４１１を示す。【０１０６】
アプリケーション５のテスト時に、図１１に示すように、コンソール４１において、表示画面４１１が、アプリケーション５をテストするオペレータに対して表示される。アプリケーション５の開始の表示画面４１１（Ｓｔａｒｔ）が表示された後に、第１の選択画面（Ｓｅｌｅｃｔ１）が、オペレータに対して表示される。この場合、オペレータは、アプリケーション５が要求する選択子４１１１（ｙｅｓ）又は選択子４１１２（ｎｏ）の選択を行う。【０１０７】
この時、選択子の選択要求は、アプリケーション５を実行するゲストＯＳ３３（＃１）から、仮想計算機モニタ１を介して、ホストＯＳ３１に通知される。そこで、仮想計算機モニタ１において、クローン作成部１２が、ゲストＯＳ＃１のクローンであるゲストＯＳ＃２を作成する。【０１０８】
なお、図１１において、第１の選択画面（Ｓｅｌｅｃｔ１）についてのみ、クローンの作成について示す。他の選択画面（Ｓｅｌｅｃｔ）については、記号Ｃを付して、クローン作成処理が実行されることを示す。【０１０９】
以下、同様にして、オペレータは、第２の選択画面（Ｓｅｌｅｃｔ２−１又はＳｅｌｅｃｔ２−２）の選択子（ｙｅｓ／ｎｏ）を選択し、第３の選択画面（Ｓｅｌｅｃｔ３−１〜３−４のいずれか一つ）の選択子（ｙｅｓ／ｎｏ）を選択する。この選択子の選択要求の都度、その時点でのゲストＯＳ３３のクローンが作成される。【０１１０】
即ち、クローン作成部１２は、選択要求された時点におけるゲストＯＳ＃１をコピーして、ゲストＯＳ＃２を作成する。この結果、２個の同じ状態のゲストＯＳ３３が存在することになる。これにより、選択画面Ｓｅｌｅｃｔ１における選択子ｙｅｓを条件として含むアプリケーション５（選択画面Ｓｅｌｅｃｔ２−１に対応する）と、選択子ｎｏを条件として含むアプリケーション５（選択画面Ｓｅｌｅｃｔ２−２に対応する）とを、双方共に、実行することができる。また、この実行は、並列に実行するようにしても良い。【０１１１】
第１のテストケースＣＡＳＥ１は、オペレータが選択画面Ｓｅｌｅｃｔ１でｙｅｓを選択し、選択画面Ｓｅｌｅｃｔ２−１でｙｅｓを選択し、選択画面Ｓｅｌｅｃｔ３−１でｙｅｓを選択した組合せであり、当該組合せによるテストである。選択画面Ｓｅｌｅｃｔ２−１は、選択画面Ｓｅｌｅｃｔ１でｙｅｓを選択した場合の選択画面である（他も同様である）。第２のテストケースＣＡＳＥ２等も、同様である。【０１１２】
この場合、全てのケースについてのテストを実施するには、選択が３回行われるので、合計で８種類のテストケース（ＣＡＳＥ１〜ＣＡＳＥ８に対応）を実施する必要がある。しかし、ホストＯＳ３１からのゲストＯＳ３３への選択要求を監視するので、ゲストＯＳ３３のアプリケーション５の網羅テストを実現することができる。その結果、アプリケーション５のテストの信頼性及びテストの効率性を実現することができる。【０１１３】
また、本実施態様によれば、ゲストＯＳ３３の選択の要求時に、ゲストＯＳ３３のクローンを作成し、作成したクローンに並列にテストを実行することができる。このため、１テストケース毎に最初の条件からテストをやり直す必要はない。その結果、アプリケーション５のテスト時間を大幅に短縮できる。更に、例えば、アプリケーション５において、初回起動時のみに発生するバグが存在していた場合、アプリケーション５の１回目の選択のテストを完了する前のクローンを作成する。このため、１回目のテストも繰り返し実施が可能となる。そのため、初回起動時のみに発生するバグ等の検出が容易となる。従って、この点からも、アプリケーション５のテストの信頼性及びテストの効率性を実現することができる。
【図１】
2010038307.tif 000003
【図２】
2010038307.tif 000004
【図３】
2010038307.tif 000005
【図４】
2010038307.tif 000006
【図５】
2010038307.tif 000007
【図６】
2010038307.tif 000008
【図７】
2010038307.tif 000009
【図８】
2010038307.tif 000010
【図９】
2010038307.tif 000011
【図１０】
2010038307.tif 000012
【図１１】
2010038307.tif 000013
【図１２】
2010038307.tif 000014
【手続補正書】
【提出日】平成23年3月30日(2011.3.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテスト方法であって、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを含む
ことを特徴とする仮想計算機システムのテスト方法。
【請求項２】
前記第１の仮想計算機及び前記作成されたクローンが、前記仮想計算機モニタを介して、入出力命令を実行する第３の仮想計算機に前記入出力命令の実行を要求することにより、前記アプリケーションのテストを実行する
ことを特徴とする請求項１に記載の仮想計算機システムのテスト方法。
【請求項３】
前記仮想計算機モニタが、前記第１の仮想計算機及び前記作成されたクローンから前記第３の仮想計算機への前記入出力命令をトラップして、前記第２の仮想計算機に通知し、
前記通知を受信した前記第２の仮想計算機が、前記メモリに前記クローンを作成するための領域が存在する場合に、前記仮想計算機モニタに前記クローンの作成を依頼する
ことを特徴とする請求項２に記載の仮想計算機システムのテスト方法。
【請求項４】
前記仮想計算機モニタが、前記第２の仮想計算機からの前記依頼を受けた場合、前記クローンを作成する
ことを特徴とする請求項３に記載の仮想計算機システムのテスト方法。
【請求項５】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテストプログラムであって、
前記仮想計算機システムであるコンピュータに、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを実行させる
ことを特徴とする仮想計算機システムのテストプログラム。
【請求項６】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムのテストプログラムを記録するコンピュータ読み取り可能な記録媒体であって、
前記テストプログラムは、前記仮想計算機システムであるコンピュータに、
アプリケーションのテストを実行する第１の仮想計算機が、前記アプリケーションのテストにおける条件の選択を、前記仮想計算機モニタを介して、前記仮想計算機システムを制御する第２の仮想計算機に要求するステップと、
前記仮想計算機モニタが、前記条件の選択が要求された場合、前記第１の仮想計算機の複製であるクローンを作成するステップと、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行するステップとを実行させるテストプログラムを記録する
ことを特徴とする仮想計算機システムのテストプログラムの記録媒体。
【請求項７】
ＣＰＵとメモリとを含むハードウェアと、各々が前記ＣＰＵ上で動作するプログラムを備える複数の仮想計算機と、前記複数の仮想計算機の制御を行う仮想計算機モニタとを備える仮想計算機システムであって、
アプリケーションのテストを実行する第１の仮想計算機と、
前記仮想計算機システムを制御する第２の仮想計算機と、
前記仮想計算機モニタに設けられた、前記第１の仮想計算機の複製であるクローンを作成するクローン作成手段とを備え、
前記第１の仮想計算機がアプリケーションのテストにおける条件の選択を前記仮想計算機モニタを介して前記第２の仮想計算機に要求した場合、前記クローン作成手段が、前記クローンを作成し、
前記第１の仮想計算機及び前記作成されたクローンが、前記アプリケーションのテストを実行する
ことを特徴とする仮想計算機システム。
【国際調査報告】
2010038307.tif 000015
2010038307.tif 000016
2010038307.tif 000017
2010038307.tif 000018