(57)【特許請求の範囲】
【請求項１】
コンピュータ化された機器によってコンピュータ・プログラムを動作させることにより、前記コンピュータ・プログラムを検査するステップであって、前記コンピュータ化された機器が、前記コンピュータ・プログラムにリソースへのアクセスを提供するように動作する、ステップと、
前記コンピュータ・プログラムによる前記リソースへのアクセス要求を遮断するステップと
を含み、前記遮断するステップが、
前記コンピュータ・プログラムに提供される応答を決定するステップと、
前記要求に対する前記リソースからの応答の代わりに、前記決定された応答を前記コンピュータ・プログラムに提供するステップと
を含む、コンピュータにより実装される方法であって、
前記決定するステップが、
以前に提供された時間を取得することと、
以前に提供された時間の所定の範囲内で時間をランダム化することと
を含み、前記ランダム化された時間が、前記決定された応答である
コンピュータにより実装される方法。
【請求項２】
前記リソースがクロックであり、前記応答がクロックの時間である、請求項１に記載の方法。
【請求項３】
ユーザから前記所定の範囲を受け取るステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記決定するステップが、
以前に提供された時間を取得することと、
前記時間を、前記以前に提供された時間よりも前になるように決定することと
を含んで動作する、請求項２に記載の方法。
【請求項５】
前記決定するステップが、
前記クロックから現在時間を取得することと、
前記時間を、該時間が前記現在時間から少なくとも所定の持続時間だけ後になるように決定することと
を含む、請求項４に記載の方法。
【請求項６】
前記遮断するステップが、前記リソースに対する複数のアクセス要求に関して、複数回実施される、請求項１に記載の方法。
【請求項７】
前記検査するステップが、クラウド・コンピューティング環境における前記コンピュータ・プログラムの動作の妥当性を検査することを含む、請求項１に記載の方法
【請求項８】
前記動作の妥当性を検査するステップの完了に応答して、前記コンピュータ・プログラムを前記クラウド・コンピューティング環境にロードするステップをさらに含む、請求項７に記載の方法。
【請求項９】
前記コンピュータ・プログラムを前処理するステップと、前記リソースにアクセスするように動作する関数呼び出しを識別するステップとをさらに含む、請求項１に記載の方法。
【請求項１０】
前記コンピュータ・プログラムを、前記関数呼び出しを置き換えるように動作するコードで計装化するステップをさらに含み、前記遮断するステップが、前記コードを実行するステップを含む、請求項９に記載の方法。
【請求項１１】
プロセッサを有する、コンピュータ化された装置であって、
コンピュータ・プログラムを動作させるように動作する検査モジュールであって、前記コンピュータ・プログラムにリソースへのアクセスを提供するように構成される、検査モジュールと、
前記コンピュータ・プログラムによる前記リソースへのアクセス要求を遮断するように動作する遮断器であって、前記コンピュータ・プログラムに提供される応答を決定するように動作する応答決定器を含み、さらに、前記要求に対する前記リソースからの応答の代わりに、前記決定された応答を前記コンピュータ・プログラムに提供するように動作する、遮断器と
を含む、装置であって、
前記応答決定器がさらに、以前に提供された時間を取得するように動作し、前記応答決定器が、以前に提供された時間の所定の範囲内で時間をランダム化するように動作するランダム化モジュールに動作可能に結合され、前記ランダム化された時間が、前記決定された応答である
装置。
【請求項１２】
前記リソースがクロックであり、
前記応答がクロックの時間である、
請求項１１に記載の装置。
【請求項１３】
ユーザから前記所定の範囲を受け取るように動作する入力モジュールをさらに含む、請求項１１に記載の装置。
【請求項１４】
前記応答決定器がさらに、以前に提供された時間を取得するように動作し、前記決定された応答が、前記以前に提供された時間よりも前の時間である、請求項１２に記載の装置。
【請求項１５】
前記応答決定器がさらに、前記クロックから現在時間を取得し、前記時間を、該時間が前記現在時間から少なくとも所定の持続時間だけ後になるように決定するように動作する、請求項１２に記載の装置。
【請求項１６】
前記検査モジュールが、クラウド・コンピューティング環境における前記コンピュータ・プログラムの動作の妥当性を検査するように構成される、請求項１１に記載の装置。
【請求項１７】
前記コンピュータ・プログラムを前処理し、前記リソースにアクセスするように動作する関数呼び出しを識別する、アクセス識別器をさらに含む、請求項１１に記載の装置。
【請求項１８】
前記コンピュータ・プログラムを前処理することが、前記コンピュータ・プログラムを、前記関数呼び出しを置き換えるように動作するコードで計装化することを含む、請求項１７に記載の装置。
【請求項１９】
請求項１−１０のいずれか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータ・プログラムの検証に関し、特に、コンピュータ・プログラムの動作中に第１のホストから第２のホストに移行することができるコンピュータ・プログラムの検査に関する。
【背景技術】
【０００２】
コンピュータ化された機器は、文書作成から信号の制御までにわたって、我々の生活のほぼ全ての局面を制御している。しかしながら、コンピュータ化された機器では、バグが発生する傾向があるので、バグを発見する検査フェーズが必要とされる。検査フェーズは、コンピュータ化された機器の設計における最も困難な作業のひとつであると考えられている。バグが引き起こす結果は被害甚大となることがあるので、バグが発見されなかった場合のコストは莫大なものになりかねない。例えば、バグは、コンピュータ化された機器が指示する挙動に依存する人を、負傷させることがある。さらに、ハードウェア又はファームウェア内のバグは、パッチを当てるためにそのコンピュータ化された機器の回収を必要とするので、修理費用が高額になることがある。それゆえ、コンピュータ化された機器の開発者の多くは、開発サイクルのうちのかなりの部分を、コンピュータ化された機器のエラー挙動の発見に費やす。
【０００３】
コンピュータ・プログラムは、コンピュータ・サーバのようなホストによって動作させることができる。今日、クラウド・コンピューティングは、確立され、利用されているコンピュータ・パラダイムである。クラウド・コンピューティングにおいて、コンピュータ・プログラムは、サーバ及び同様の計算機のネットワークのような、処理機器の「クラウド」によって実行することができる。クラウドによるコンピュータ・プログラムの実行中に、コンピュータ・プログラムは、第１のホストから第２のホストへと移行することがある。例えば、コンピュータ・プログラムは、仮想マシンによって実行されることがある。仮想マシンは、最初は第１のサーバによって処理されることがあり、その後で、仮想マシンは、第２のサーバへと移行して、コンピュータ・プログラムの実行を続けることがある。サーバ及びその他の計算機は、ホストとみなされる。ホストは、仮想マシンに対して、従ってコンピュータ・プログラムに対してリソースを提供する役割を担うことができる。リソースは、例えば、フリー・メモリ、共有メモリ、記憶空間、擬似乱数生成器へのアクセス、クロックへのアクセスなどとすることができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｐｅｔｅｒ  Ｍｅｌｌ及びＴｉｍ  Ｇｒａｎｃｅ著、「Ｄｒａｆｔ  ＮＩＳＴ  Ｗｏｒｋｉｎｇ  Ｄｅｆｉｎｉｔｉｏｎ  ｏｆ  Ｃｌｏｕｄ  Ｃｏｍｐｕｔｉｎｇ」、２００９年１０月７日起草
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の目的は、コンピュータ・プログラムの動作中に第１のホストから第２のホストに移行することができるコンピュータ・プログラムの検査に関する、方法、装置及びコンピュータ・プログラムを提供することである。
【課題を解決するための手段】
【０００６】
本発明の１つの例示的な実施形態は、コンピュータにより実装された方法であり、この方法は、コンピュータ化された機器によってコンピュータ・プログラムを動作させることにより該コンピュータ・プログラムを検査するステップであって、コンピュータ化された機器が、コンピュータ・プログラムにリソースへのアクセスを提供するように動作する、ステップと、コンピュータ・プログラムによるリソースへのアクセス要求を遮断するステップとを含み、遮断するステップは、コンピュータ・プログラムに提供される応答を決定するステップと、要求に対するリソースからの応答の代わりに、決定された応答をコンピュータ・プログラムに提供するステップとを含む。
【０００７】
本発明の別の例示的な実施形態は、プロセッサを有するコンピュータ化された装置であり、この装置は、コンピュータ・プログラムを動作させるように動作する検査モジュールであって、コンピュータ・プログラムにリソースへのアクセスを提供するように構成される、検査モジュールと、コンピュータ・プログラムによるリソースへのアクセス要求を遮断するように動作する遮断器であって、コンピュータ・プログラムに提供される応答を決定するように動作する応答決定器を含み、さらに、要求に対するリソースからの応答の代わりに、決定された応答をコンピュータ・プログラムに提供するように動作する、遮断器とを含む。
【０００８】
本発明のさらに別の例示的な実施形態は、コンピュータ・プログラムであり、このコンピュータ・プログラムは、コンピュータ化された機器によってコンピュータ・プログラムを動作させることにより該コンピュータ・プログラムを検査するための第１のプログラム命令であって、コンピュータ化された機器が、コンピュータ・プログラムにリソースへのアクセスを提供するように動作する、第１のプログラム命令と、コンピュータ・プログラムによる前記リソースへのアクセス要求を遮断するための第２のプログラム命令とを含み、前記第２のプログラム命令は、コンピュータ・プログラムに提供される応答を決定するための第３の命令と、要求に対するリソースからの応答の代わりに、決定された応答をコンピュータ・プログラムに提供するための第４の命令とを含む。
【０００９】
本開示の主題は、以下の詳細な説明を図面と共に検討することでより良く理解され、認識され、図中、対応する又は同様の数字又は記号は、対応する又は同様の構成要素を示す。特に断りのない限り、図面は、本開示の例示的な実施形態又は態様を提供するものであって、本開示の範囲を限定するものではない。
【図面の簡単な説明】
【００１０】
【図１】本主題のいくつかの例示的な実施形態による、本発明が用いられるコンピュータ化された環境を示す。
【図２】本発明のいくつかの例示的な実施形態による、装置のブロック図を示す。
【図３】本発明のいくつかの例示的な実施形態による、方法のフローチャート図を示す。
【図４】本発明のいくつかの例示的な実施形態による、クラウド・コンピューティング環境を示す。
【図５】本発明のいくつかの例示的な実施形態による、抽象モデル層を示す。
【発明を実施するための形態】
【００１１】
本発明を、主題の実施形態による、方法、装置（システム）及びコンピュータ・プログラムのフローチャート図及び/又はブロック図を参照して、以下で説明する。フローチャート図及び/又はブロック図の各々、並びにフローチャート図及び/又はブロック図中のブロックの組合せは、コンピュータ・プログラム命令によって実装することができることが理解されるであろう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに与えて機械を製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するための手段を作り出すようにすることができる。
【００１２】
これらのコンピュータ・プログラム命令を、コンピュータ又は他のプログラム可能データ処理装置に特定の方式で機能するように指示することができるコンピュータ可読媒体に格納して、それにより、そのコンピュータ可読媒体に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装する命令手段を含む製品を製造するようにさせることもできる。
【００１３】
コンピュータ・プログラム命令を、コンピュータ又は他のプログラム可能データ処理装置にロードして、コンピュータ又は他のプログラム可能データ処理装置上で、コンピュータ実装プロセスを生成するための一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにさせることもできる。
【００１４】
本発明が取り組む１つの技術的課題は、クラウドによって動作されているときにコンピュータ・プログラムを検査することである。別の技術的課題は、ホスト間の移行が、コンピュータ・プログラムの動作を無効化することがあるかどうかを検査することである。さらに別の技術的課題は、コンピュータ・プログラムを単一のホスト上で又は別の非クラウド処理システムにより実行することによって、そのコンピュータ・プログラムをクラウド処理スキーマに関して検査することである。さらに他の技術的課題は、クラウド・コンピューティング環境に特に関連していない、可能性のある移行に関して、コンピュータ・プログラムを検査することである。
【００１５】
１つの技術的解決策は、コンピュータ・プログラムによるホストから要求へのリソース応答をシミュレートすることである。シミュレートされる応答は、移行が生じた場合に生じ得る応答をシミュレートするように構成することができる。別の技術的解決策は、リソース要求を遮断し、代替的なシミュレートされた応答を提供することである。さらに他の技術的解決は、ホストのクロックに向けられた時間要求を遮断すること、及び代替的な応答をシミュレートすることである。さらに他の技術的解決策は、以前に提供された応答の所定の範囲内の応答をランダムに選択することによって、代替的な応答をシミュレートすることである。例えば、０６：３２：１６という時間が以前に提供されていた場合、シミュレートされた応答は、以前に提供された時間から１分間の範囲内（すなわち、０６：３１：１６と０６：３３：１６との間の時間）のランダムな時間とすることができる。
【００１６】
本発明を使用することのひとつの技術的効果は、検査フェーズ中に実際の移行を行うことなく、移行の技術的効果をシミュレートすることである。検査環境は、比較的単純な処理環境とすることができ、クラウド処理環境とする必要はない。他の技術的効果は、単一ホスト環境においては予期されないがクラウド処理環境においては生じ得るリソース応答を、シミュレートすることである。例えば、時間は狭義単調増加関数であるので、第１に提供される時間は、その後で提供される、第２に提供される時間よりも必ず早くなるはずである。しかしながら、クラウド・コンピューティング環境においては、第１の時間は第１のクロックに基づいて提供されることがあり、第２の時間は第２のクロックに基づいて提供されることがあるので、この提供される時間の固有の特徴に違反することがある。本発明は、このようなシナリオを、コンピュータ・プログラムを単一のホストで実行するときにシミュレートする、技術的効果をもたらす。さらに他の技術的特徴は、戻される時間が狭義単調増加関数によって表されないコンピュータ・プログラムの実行をシミュレートすることである。さらに他の技術的効果は、前方にスキップするクロックに関して、コンピュータ・プログラムの動作を検査することである。いくつかの例示的な実施形態において、前方にスキップするクロックにより、タイムアウト動作を起動することができ、タイムアウト値に対するそのコンピュータ・プログラムの感度を検査することができる。
【００１７】
ここで、本主題のいくつかの例示的な実施形態による、本発明が用いられるコンピュータ化された環境を示す、図１を参照する。
【００１８】
コンピュータ環境１００は、コンピュータ・プログラム１１０を含むことができる。コンピュータ・プログラム１１０は、ホストとも呼ばれるプロセッサのような処理マシンを動作させるように動作する命令の集合とすることができる。コンピュータ・プログラム１１０は、コンピュータ可読媒体上に埋め込まれることができる。コンピュータ・プログラム１１０は、クラウド１０５によって動作させることできる。クラウド１０５は、ホスト１０６のような、複数のホストを含むことができる。クラウド１０５のホストは、ＬＡＮ、ＷＡＮ、ＷｉＦｉ、ＷｉＭＡＸ、インターネット、イントラネット、それらの組合せ、又はその他の通信ネットワークのようなコンピュータ・ネットワーク内で接続することができる。いくつかの例示的な実施形態において、コンピュータ・プログラム１１０は、クラウド１０５の具体的な実装の詳細には無関係であり得る。例えば、コンピュータ・プログラム１１０は、クラウド１０５のホストの数、そこで用いられているハードウェアの種類、ホストの接続様式などには無関係ではないものとすることができる。いくつかの例示的な実施形態において、コンピュータ・プログラム１１０は、仮想マシン（ＶＭ）（図示せず）を用いて実行することができる。ＶＭを用いて、コンピュータ・プログラム１１０から実装の詳細を抽出することができる。ＶＭは、クラウド１０５によって実行することが可能であり得る。コンピュータ・プログラム１１０の実行中に、クラウドは、ＶＭを１つのホストから別のホストへと移行させることができる。コンピュータ・プログラム１１０は、そのような事象が生じていることに気づかないでいることができる。いくつかの例示的な実施形態において、移行は、ＶＭが用いられていない例示的な実施形態において生じることもあり得る。
【００１９】
いくつかの例示的な実施形態において、移行は、ＶＭに割り当てられたメモリのスナップショットを取得すること、他のホストのメモリをこのスナップショットで設定すること、及び割り当てられたメモリを解放することを含むことができる。メモリは、コンピュータ・プログラム１１０の現在の状態を保持しているので、これをコピーすることは、コンピュータ・プログラム１１０が、１つのホストから他のホストに移行したものとみなすことができる。特定の状態（例えば、ファイル・ハンドラ、又はセマフォなど）におけるオペレーション・システム（ＯＳ）エンティティの設定のような、追加動作を必要とすることがあることに留意されたい。当業者であれば、コンピュータ・プログラム１１０を（仮想マシンあり又はなしで）クラウド内の１つのホストからクラウド内の別のホストへと移行させることが可能である。
【００２０】
移行は、非クラウド・コンピューティング環境においても生じることがあることに留意されたい。例えば、プログラムのスナップショットを取得し、後でこれを用いて、リブート後に同じマシン内でコンピュータ・プログラムを再開することができる。別の例として、スナップショットは用いて、別のマシン（これは、必ずしもクラウドの一部である必要はない）上でコンピュータ・プログラムの動作を再開することができる。
【００２１】
いくつかの例示的な実施形態において、コンピュータ・プログラム１１０の実行を検査するように、検証装置１２０を構成することができる。検証装置１２０は、検査のベンチマーク内で保持するなど、コンピュータ・プログラム１１０の検査を実行するように構成することができる。検査は、ユーザからの入力、又はコンピュータ・プログラム１１０を実行する環境からの入力などのような、コンピュータ・プログラム１１０に対する刺激事象を定めることができる。検証装置１２０は、実行されているコンピュータ・プログラム１１０に対して計算能力及び／又はその他のリソースを提供する、実行ホスト１３０を含むことができる。いくつかの例示的な実施形態において、実行ホスト１３０は、１０６のような単一のホストとすることができる。他の例示的な実施形態において、実行ホスト１３０は、１０５のようなクラウドとすることができる。本発明の目的のためには、実行ホスト１３０の実装の詳細は、一般に特に重要ではない。
【００２２】
いくつかの例示的な実施形態において、ユーザ１４０は、端末、ディスプレイ、キーボード、又は入力デバイスなどのようなマン−マシン・インタフェース（ＭＭＩ）１４５を用いて、検証装置１２０と対話することができる。ユーザ１４０は、コンピュータ・プログラム１１０に関して用いられる検査を定めることができる。ユーザ１４０は、検証装置１２０に対して、規則、コマンド、優先度、及びパラメータを提供することができる。ユーザ１４０は、検証装置１２０の出力を見ることができる。出力に基づいて、ユーザ１４０は、新たな検査を設計すること、又は検査（又は、生成ベースの検査の場合、検査を生成するために利用される検査テンプレート）を変更することなどを決定することができる。ユーザ１４０は、さらに、バグを識別し、識別されたバグを報告し、及び／又は識別されたバグを修正することができる。
【００２３】
ここで、本発明のいくつかの例示的な実施形態による、装置を示す図２を参照する。図１の１２０のような装置２００は、図１の１１０のようなコンピュータ・プログラムの機能的動作を検査するように構成することができる。
【００２４】
いくつかの例示的な実施形態において、検査モジュール２１０は、図１の１１０のようなコンピュータ・プログラムを動作させるように構成することができる。検査モジュール２１０は、プログラムを実行することによりコンピュータ・プログラムの検査を促進するように構成することができる。いくつかの例示的な実施形態において、検査プログラムは、コンピュータ・プログラムを実行しているホストのリソースにアクセスするように構成される。いくつかの例示的なリソースは、性能の統計量（例えば、フリー・メモリ空間、実行されているプロセスの数、又はＣＰＵ使用量など）、ホストに関連付けられたメモリのメモリ位置、又はクロックなどであり得る。いくつかの例示的な実施形態において、検査モジュール２１０は、クラウド処理環境において実行される場合のコンピュータ・プログラムの動作を検査するように動作する。
【００２５】
いくつかの例示的な実施形態において、検査モジュール２１０は、検査プログラムをホスト（又は複数のホスト）上で実行し、コンピュータ・プログラムの検査に関連付けられた適切な刺激をホストに提供するように動作することができる。刺激例は、これに尽きないが、コンピュータ・プログラムに提供される入力、又はスレッドのような並行エンティティのスケジューリングなどを含むことができる。
【００２６】
いくつかの例示的な実施形態において、アクセス識別器２２０は、コンピュータ・プログラムによるリソースに対するアクセス要求を識別するように構成することができる。アクセス識別器２２０は、リソース要求にフックを付加することによって、例えば、システム・コール要求にフックアップすることによって、アクセスを識別することができる。いくつかの例示的な実施形態において、アクセス識別器２２０は、コンピュータ・プログラムのプログラム・コードを精査し、関連のある関数呼び出しの起動を識別することによって、アクセスを識別することができる。いくつかの例示的な実施形態において、アクセス識別器２２０は、コンピュータ・プログラムが検査モジュール２１０によって実行される前に、該コンピュータ・プログラムを前処理するように構成することができる。前処理中に、リソースにアクセスするように動作する関数呼び出しが識別され、実行中のその起動を用いて、アクセス要求を識別することができる。
【００２７】
いくつかの例示的な実施形態において、コード計装器２２５を使用して、関数の起動に関連して起動されるように動作するコードを計装することができる。例えば、コードは、関数の始めに計装することができる。別の例として、マクロ定義（例えば、Ｃ言語における＃定義コマンド）を用いて、計装されたコードの起動で関数呼び出しを置き換えることができる。いくつかの例示的な実施形態において、計装化は、ソースコードが利用可能ではない（すなわち「ブラックボックス」の検査）場合のように、コンピュータ・プログラムの二進表現に関して行うことができる。二進数は、例えば、システム・コール、又はアプリケーション・プログラム・インタフェース（ＡＰＩ）などの起動のような、アクセス要求の実施に関連付けられる部分として計装化することができる。当業者であれば、付加的又は代替的な方式で、アクセス識別器２２０による識別をイネーブルにすることができる。
【００２８】
いくつかの例示的な実施形態において、クロックにアクセスし、時間を戻すように動作する関数、例えばＣ時間ライブラリの関数の起動を、アクセス識別器２２０によって識別することができる。いくつかの例示的な実施形態において、以下でさらに詳細に説明されるように、コード計装器２２５は、関数に対する関数呼び出しを、遮断器２３０に関連付けられた関数のような代替的な関数で置き換えるように動作することができる。
【００２９】
いくつかの例示的な実施形態において、遮断器２３０は、アクセス識別器２２０によって識別されたようなアクセス要求を遮断し、その決定された応答を提供するように動作することができる。応答は、応答決定器２４０によって決定することができる。アクセス要求の遮断は、コード計装器２２５によって計装された計装化コードを用いて行うことができる。遮断器２３０は、実行ホストのリソースにアクセスし又はアクセスすることなく、応答を提供するように動作することができる。例えば、マシンのクロックに対するアクセス要求の場合、クロック自体にアクセスし又はアクセスすることなく、時間を戻すことができる。決定された応答は、クロックが戻すはずの時間とは異なる時間とすることができる。
【００３０】
いくつかの例示的な実施形態において、応答決定器２４０は、アクセス要求に対する応答を決定するように構成することができる。いくつかの例示的な実施形態において、応答決定器２４０は、ランダムな応答を決定することができる。いくつかの例示的な実施形態において、応答決定器２４０は、以前に提供された応答に基づいた応答を決定することができる。いくつかの例示的な実施形態において、応答決定器２４０は、提供された応答を保持し、今後の応答決定のためにそれを利用するように動作することができる。いくつかの例示的な実施形態において、以前に提供された応答を基準値として用いることができ、決定された応答は、基準値の所定範囲内の値とすることができる。この範囲は、図１の１４０のようなユーザが決定することができ、２０５のような入力モジュールを用いて、随意に装置２００に提供することができる。範囲は、種々の追加的な要因によって影響を受けることがある。例として、「クロック」というリソースを考えると、これは「時間」という応答を提供する。決定された時間は、基準点としての以前に提供された時間に基づいたものとすることができる。決定された時間は、以前の応答から２分間の範囲内とすることができる。１つの例示的な実施形態において、範囲は、以前の応答から経過した時間によって影響を受けることができる。いくつかの例示的な実施形態において、いくつかの決定された応答、例えば第１の応答は、実際のリソース（例えば、ホスト・マシンのクロック）にアクセスすることによって決定することができる。
【００３１】
いくつかの例示的な実施形態において、応答決定器２４０は、以前に提供された時間より前の時間を提供するように動作することができる。時間は狭義単調増加関数なので、このような応答は、非クラウド・コンピューティング環境においては、一般に妥当な応答ではない。しかしながら、クラウド・コンピューティング環境においては、第１の応答は第１のホストの第１のクロックによって提供されることがあり、他方、第２の応答は第２のホストの第２のクロックによって提供されることがあるので、このような応答が生じることがある。
【００３２】
いくつかの例示的な実施形態において、応答決定器２４０は、その時間と以前に提供された時間との間の差が、以前に提供された時間を提供したときとその時間との間の実際の時間差よりも長いような時間を提供するように動作することができる。このような方法で、クロックの前方へのスキップをシミュレートすることができる。あるいは、これを用いて、コンピュータ・プログラムを実行するコンピュータにより、動作の遅い性能のいくつかの態様をシミュレートすることができる。いくつかの例示的な実施形態において、コンピュータ・プログラムは、タイムアウト値に応答するものとすることができ、提供された時間を用いて、タイムアウト値に達したときのコンピュータ・プログラムの動作を検査することができる。いくつかの例示的な実施形態において、コンピュータ・プログラムは、動作の近似タイミングを潜在的に仮定していることがある。例えば、コンピュータ・プログラムのプログラマは、所定量の時間中にいくつかの並行動作が完了することを仮定しているので、所定量の時間が経つとスリープ・コマンドが起動されることがある。
【００３３】
いくつかの例示的な実施形態において、応答決定器２４０は、クロックにアクセスして現在時間を決定することができる。決定された時間は、現在時間から少なくとも所定の持続時間だけ後の時間とすることができる。例えば、現在時間が０９：１０：２０であって、所定の持続時間が１分間の場合、決定された時間は、０９：１１：２２、０９：２０：００、１０：００：００、又は２３：００：００などとすることができる。いくつかの例示的な実施形態において、時間の最小シフトに加えて又はその代わりに、時間の最大シフトを予め定めることができる。例えば、時間は、２分間の最小シフトでシフトさせることができ、１０分間の最大シフトでシフトさせることができる。いくつかの例示的な実施形態において、装置２００は、第１の要求に応答して現在の時間を提供し、連続した要求に応答して、この段落に従う時間を提供するように構成することができ、それゆえ、高速クロック（ｓｐｅｅｄｙ  ｃｌｏｃｋ）を有する場合のシミュレーションを提供する。高速クロックは、実質的にペースが速いものであり得る（例えば、高速クロックは、１秒ごとに１０秒スキップする）。いくつかの例示的な実施形態において、報告される２つの連続した時間要求間の時間の経過が実際よりも長く／短く報告されるので、この応答は、遅い又は速い処理デバイスによるコンピュータ・プログラムの実行のシミュレーションを提供する。別の言い方をすれば、ある時間間隔の間に現実に実施される命令の数が、より短い／長い時間間隔の間に実施されたものとして報告される。
【００３４】
いくつかの例示的な実施形態において、ランダム化モジュール２４５を利用して、ランダム又は擬似ランダムな方式で応答を決定することができる。ランダム化モジュール２４５を利用して、基準値の所定範囲内の応答を決定することができる。
【００３５】
いくつかの例示的な実施形態において、装置２００は、プロセッサ２０２を含むことができる。プロセッサ２０２は、中央処理装置（ＣＰＵ）、マイクロプロセッサ、電子回路、又は集積回路（ＩＣ）などとすることができる。プロセッサ２０２を利用して、装置２００又はそのいずれかのサブコンポーネントによって要求される計算を実施することができる。
【００３６】
本発明のいくつかの例示的な実施形態において、装置２００は、入力／出力（Ｉ／Ｏ）モジュール２０５を含むことができる。Ｉ／Ｏモジュール２０５を利用して、図１の１４０のようなユーザに出力を提供し、かつユーザから入力を受け取ることができる。
【００３７】
いくつかの例示的な実施形態において、装置２００は、記憶デバイス２０７を含むことができる。記憶デバイス２０７は、ハードディスク・ドライブ、フラッシュ・ディスク、ランダム・アクセス・メモリ（ＲＯＭ）、メモリ・チップなどとすることができる。いくつかの例示的な実施形態において、記憶デバイス２０７は、装置２００のサブコンポーネントのいずれかに関連付けられた動作をプロセッサ２０２に行わせるよう動作する、プログラム・コードを保持することができる。いくつかの例示的な実施形態において、記憶デバイス２０７は、以前に提供された応答を保持することができる。
【００３８】
ここで、本発明のいくつかの例示的な実施形態による、方法のフローチャート図を示す図３を参照する。図３は、特に、アクセスされるリソースが、時間を戻すクロックである例に言及しているが、本発明は、この例に限定されない。
【００３９】
ステップ３００において、検査されるコンピュータ・プログラムを得ることができる。コンピュータ・プログラムの二進表現を得ることができる。ソースコード表現を得ることができる。コンピュータ・プログラムは、図２の２０５のような入力モジュールによって得ることができる。
【００４０】
ステップ３１０において、コンピュータ・プログラムを、コンピュータ化された機器によって実行することができる。コンピュータ・プログラムは、その動作の検査を目的として実行することができる。コンピュータ・プログラムは、図２の２１０のような検査モジュールによって実行され、検査されることができる。
【００４１】
ステップ３２０において、クロックに対するアクセス要求を識別することができる。識別は、図２の２２０のようなアクセス識別器によって行うことができる。いくつかの例示的な実施形態において、識別は、コンピュータ・プログラムを前処理すること、又はコンピュータ・プログラムをその実行の前に適切なコードで計装化することなどによって、イネーブルにすることができる。
【００４２】
ステップ３３０において、アクセス要求を遮断することができる。いくつかの例示的な実施形態において、アクセス要求は遮断されることがあり、かつ、クロックは、アクセスされることも、されないこともある。いくつかの例示的な実施形態において、アクセス要求は、図２の２２５のようなコード計装器によって計装化されたコードを実行することによって遮断することができる。遮断は、図２の２３０のような遮断器によって行うことができる。
【００４３】
ステップ３４０において、アクセスに応答して提供される時間を決定することができる。この時間は、図２の２４０のような応答決定器によって決定することができる。この時間を、コンピュータ・プログラムに提供することができる。決定と決定された時間の提供とが行われた後、さらなるアクセス要求を識別し、本発明に従ってこれに応答することができる。
【００４４】
いくつかの例示的な実施形態において、提供される時間を決定することは、ステップ３４２及び３４４を含む。
【００４５】
ステップ３４２において、以前に提供された時間を得ることができる。この時間は、図２の２０７のような記憶デバイスから得ることができる。
【００４６】
ステップ３４４において、以前に提供された時間より前の時間をランダムに決定することができる。この決定は、図２の２４５のようなランダム化モジュールを用いて行うことができる。決定された時間は、以前に提供された時間よりも早い時間であり得るので、戻される時間が狭義単調増加関数であるという、クラウド・コンピューティング環境においては正しくないことがある仮定を無効化することができる。決定される時間は、この時間と以前に提供された時間との間の時間差が、これらの２つの時間値の提供の間に実際に経過した時間よりも長くなるように、決定することができる。
【００４７】
いくつかの例示的な実施形態において、提供される時間を決定することは、ステップ３４６及び３４８を含む。
【００４８】
ステップ３４６において、ステップ３４２と同様の方法で、以前に提供された時間を得ることができる。
【００４９】
ステップ３４８において、以前に提供された時間の所定の範囲内のランダムな時間を決定することができる。ランダムな時間は、図２の２４５のようなランダム化モジュールを用いて決定することができる。所定の範囲は、図１の１４０の様なユーザによって決定された範囲とすることができる。
【００５０】
いくつかの例示的な実施形態において、コンピュータ・プログラムの十分な検査が（例えば、カバレージ・メトリクス（ｃｏｖｅｒａｇｅ  ｍｅｔｒｉｃｓ）、又はＱＡスタッフ・メンバによる決定などに基づいて）実行された後は、そのコンピュータ・プログラムは、クラウド上にロードしてそこで動作させるのに「安全」であるとみなすことができる。いくつかの例示的な実施形態において、クラウドの管理権限は、十分に検査されていないコンピュータ・プログラムのロードを禁止することができる。本発明は、コンピュータ・プログラムがクラウド上にロードされる前に、単独の検査又は追加検査として用いることができる。
【００５１】
以下の実施例は、開示を明確にするためにのみ提供されるものであって、本発明の範囲を限定するものと解釈されるべきではない。以下のコード断片を考える：
ｔｉｍｅ１＝ｇｅｔｔｉｍｅ（）；
ｔｉｍｅ２＝ｇｅｔｔｉｍｅ（）；
ｔｉｍｅｒｓｕｂ（ｔｉｍｅ１，  ｔｉｍｅ２，  ＆ｄｉｆｆ）；
ａｓｓｅｒｔ（ｄｉｆｆ．ｔｖ＿ｓｅｃ  ＞＝  ０）；
ｔｉｍｅ１＝ｇｅｔｔｉｍｅ（）
ここでｔｉｍｅｒｓｕｂは、「ｔｉｍｅ２」から「ｔｉｍｅ１」を差し引くことによって「ｔｉｍｅ１」と「ｔｉｍｅ２」との間の時間差を求め、この時間差を「ｄｉｆｆ」に代入するように動作する関数である。このコード断片は、非クラウド・コンピューティング環境において検査される場合、「ｔｉｍｅ１」が、設定「ｔｉｍｅ２」に関連付けられたクロック読み取りの前に行われたクロック読み取りに基づいて設定されるので、安定である。しかしながら、クラウド・コンピューティング環境においては、「ｔｉｍｅ１」は、「ｔｉｍｅ２」の後の時間を含むことができるので、この仮定は誤りである場合がある。本発明を利用して、このコード断片を検査し、クラウド・コンピューティング環境におけるいくつかのシナリオにおいて、「ｔｉｍｅ２」が「ｔｉｍｅ１」の後で設定されたとしても、「ｔｉｍｅ１」の前の時間であり得ることを判定する。
【００５２】
本発明を利用して、コンピュータ・プログラムを実行し、リソースに対するアクセス要求（例えば、関数「ｇｅｔｔｉｍｅ」の呼び出し）を識別し、アクセス要求を遮断し、戻りで提供すべき応答を決定することによって、このコード断片を含むコンピュータ・プログラムを検査することができる。
【００５３】
本開示はクラウド・コンピューティングに関する詳細な説明を含んでいるが、ここで述べられている教示の実装は、クラウド・コンピューティング環境に限定されるものではないことを理解されたい。むしろ、本発明の実施形態は、現在公知の又は今後開発されるその他の任意の種類のコンピューティング環境に関連して実装することが可能である。
【００５４】
便宜のため、以下の定義は、クラウド・コンピューティング環境の完全な理解に備えて開示される。定義は、本出願と共に提出されたＩＤＳにおいて引用され、その複写がここに添付される、非特許文献１に由来したものである。
【００５５】
クラウド・コンピューティングは、最小限の管理努力又はサービスのプロバイダとの対話で、迅速に供給及び解放されることができる、構成可能なコンピューティング・リソース（例えば、ネットワーク、ネットワーク帯域、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、及びサービス）の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にする、サービス・デリバリーのモデルである。このクラウド・モデルは、少なくとも５つの特性と、少なくとも３つのサービス・モデルと、少なくとも４つの配置モデルとを含むことができる。
【００５６】
特性は、下記の通りである。
【００５７】
オンデマンド・セルフサービス：クラウド・コンシューマは、サービスプロバイダとの人的対話を必要とすることなく、必要に応じて自動的に、サーバ時間及びネットワーク・ストレージといったコンピューティング能力を一方向に供給することができる。
【００５８】
広範なネットワーク・アクセス：機能は、ネットワークを介して利用可能であり、異種のシン又はシック・クライアント・プラットフォーム（例えば、携帯電話、ラップトップ、及びＰＤＡ）による使用を促進する標準機構を通じてアクセスされる。
【００５９】
リソースのプール：プロバイダのコンピューティング・リソースはプールされ、マルチテナント・モデルを用いて複数のコンシューマに供され、異なる物理リソース及び仮想リソースが、要求に応じて動的に割当てされ、かつ再割当てされる。コンシューマは、一般に、提供されるリソースの正確な位置に関する制御又は知識を持たないが、より高次の抽象レベル（例えば、国、州、又はデータセンタ）で位置を指定することができるという意味で、位置独立という概念がある。
【００６０】
迅速な弾力性：機能は、すばやくスケールアウトするように、迅速かつ弾力的に、場合によっては自動的に供給されることが可能であり、かつ、すばやくスケールインするように、迅速に解放されることが可能である。コンシューマにとっては、供給のために利用可能な機能は多くの場合、無限に見え、いつでも任意の量で購入することができる。
【００６１】
計測されるサービス：クラウドシステムは、サービスの種類（例えば、ストレージ、処理、帯域幅、及びアクティブ・ユーザ・アカウント）に適したいくつかの抽象層における計量機能を強化することによって、リソースの使用を自動的に制御し、最適化する。リソース使用量を監視し、制御し、報告することで、使用されているサービスのプロバイダ及びコンシューマの両方に対して透明性を提供することができる。
【００６２】
サービス・モデルは、以下の通りである。
【００６３】
サービスとしてのソフトウェア（Ｓｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）（ＳａａＳ）：コンシューマに提供される機能は、クラウド・インフラストラクチャ上で実行されるプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ（例えば、ウェブベースの電子メール）のようなシン・クライアント・インタフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ特有のアプリケーション構成設定を可能な例外として、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーションの機能さえ含む、基礎をなすクラウド・インフラストラクチャを管理又は制御することはない。
【００６４】
サービスとしてのプラットフォーム（Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）（ＰａａＳ）：コンシューマに提供される機能は、プロバイダがサポートするプログラミング言語及びツールを用いて作成された、コンシューマが作成した又は獲得したアプリケーションをクラウド・インフラストラクチャ上に配置することである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージを含む、基礎をなすクラウド・インフラストラクチャを管理又は制御することはないが、配置されたアプリケーションと、可能であれば環境構成をホストするアプリケーションとに対する制御を有する。
【００６５】
サービスとしてのインフラストラクチャ（Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ）（ＩａａＳ）：コンシューマに提供される機能は、処理、ストレージ、ネットワーク、及びその他の基本的なコンピューティング・リソースの提供であり、コンシューマは、オペレーティング・システム及びアプリケーションを含むことができる任意のソフトウェアを配置し、実行させることが可能である。コンシューマは、基礎をなすクラウド・インフラストラクチャを管理又は制御することはないが、オペレーティング・システム、ストレージ、配置されたアプリケーションに対する制御と、可能であれば選択ネットワーキング・コンポーネント（例えば、ホストのファイアウォール）の限定された制御とを有する。
【００６６】
配置モデルは、以下の通りである。
【００６７】
プライベート・クラウド：クラウド・インフラストラクチャは、１つの組織のために単独で動作する。これは、その組織又は第三者によって管理することができ、構内又は構外に存在することができる。
【００６８】
コミュニティ・クラウド：クラウド・インフラストラクチャは、いくつかの組織によって共有され、共有された利害関係（例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンスの考慮事項）を有する特定のコミュニティをサポートする。これは、それらの組織又は第三者によって管理することができ、構内又は構外に存在することができる。
【００６９】
パブリック・クラウド：クラウド・インフラストラクチャは、公衆又は大きな産業グループにとって利用可能なものとされ、クラウド・サービスを販売する組織によって所有される。
【００７０】
ハイブリッド・クラウド：クラウド・インフラストラクチャは、２つ又はそれ以上のクラウド（プライベート、コミュニティ、又はパブリック）の複合体であり、これらは、ユニークなエンティティのままであるが、データ及びアプリケーションのポータビリティを可能にする標準化技術又は所有技術によって、互いに結合される（例えば、クラウド間の負荷バランスのためのクラウド・バースティング）。
【００７１】
クラウド・コンピューティング環境は、サービス指向であり、国籍のないこと、低カップリング、モジュール性、及び意味論的相互運用性に焦点を合わせている。クラウド・コンピューティングの核心は、相互接続されたノードのネットワークを含む、インフラストラクチャである。
【００７２】
ここで、図１の１０５のような例証的なクラウド・コンピューティング環境５０が描かれた、図４を参照する。図示されているように、クラウド・コンピューティング環境５０は、例えば、携帯型情報端末（ＰＤＡ）又は携帯電話５４Ａ、デスクトップ・コンピュータ５４Ｂ、ラップトップ・コンピュータ５４Ｃ、及び/又は自動車コンピュータ・システム５４Ｎのようなクラウド・コンシューマによって使用されるローカル・コンピューティング機器が通信する、１つ又は複数のクラウド・コンピューティング・ノードを含む。ノード１０は、互いに通信することができる。これらは、例えば、上述のようなプライベート、コミュニティ、パブリック、又はハイブリッド・クラウド又はそれらの組合せのような１つ又は複数のネットワークに、物理的又は仮想的にグループ化することができる（図示せず）。これにより、クラウド・コンピューティング環境５０は、クラウド・コンシューマがローカル・コンピューティング機器上でリソースを維持する必要がないサービスとして、インフラストラクチャ、プラットフォーム及び/又はソフトウェアを提供することが可能になる。図４に示されるコンピューティング機器５４Ａ−Ｎの種類は、例示のみを意図していること、並びに、コンピューティング・ノード１０及びクラウド・コンピューティング環境５０は、任意の種類のネットワーク及び/又はネットワーク・アドレス可能な接続を介して（例えば、ウェブ・ブラウザを用いて）、任意の種類のコンピューティング機器と通信することができることを理解されたい。
【００７３】
ここで、図５を参照すると、クラウド・コンピューティング環境５０（図４）によって提供される機能的抽象層の集合が示される。図５に示されるコンポーネント、層、及び機能は、例示のみを意図しており、本発明の実施形態は、それらに限定されないことを、予め理解されたい。図示されているように、以下の層及び対応する機能が提供される。
【００７４】
ハードウェア及びソフトウェア層６０は、ハードウェア及びソフトウェアコンポーネントを含む。ハードウェア・コンポーネントの例には、一例としてＩＢＭ（登録商標）ｚＳｅｒｉｅｓ（登録商標）システムがある、メインフレーム、一例としてＩＢＭ  ｐＳｅｒｉｅｓ（登録商標）システムがある、ＲＩＳＣ（縮小命令セット・コンピュータ）アーキテクチャ・ベースのサーバ、ＩＢＭ  ｘＳｅｒｉｅｓ（登録商標）、ＩＢＭ  ＢｌａｄｅＣｅｎｔｅｒ（登録商標）システム、ストレージ、ネットワーク及びネットワーキング・コンポーネントが含まれる。ソフトウェアコンポーネントの例には、一例としてＩＢＭ  ＷｅｂＳｐｈｅｒｅ（登録商標）アプリケーション・サーバ・ソフトウェアがある、ネットワーク・アプリケーション・サーバ・ソフトウェア、及び、一例としてＩＢＭ  ＤＢ２（登録商標）データベース・ソフトウェアがあるデータベース・ソフトウェアが含まれる。（ＩＢＭ、ｚＳｅｒｉｅｓ、ｐＳｅｒｉｅｓ、ｘＳｅｒｉｅｓ、ＢｌａｄｅＣｅｎｔｅｒ、ＷｅｂＳｐｈｅｒｅ及びＤＢ２は、世界中の多数の管轄において登録された、インターナショナル・ビジネス・マシーンズ・コーポレーションの商標である）
【００７５】
仮想化層６２は、以下の仮想エンティティの例、すなわち、仮想サーバ、仮想ストレージ、仮想私設ネットワークを含めた仮想ネットワーク、仮想アプリケーション及びオペレーション・システム、並びに仮想クライアントがそこから提供される、抽象層を提供する。
【００７６】
一例において、管理層６４は、以下で説明される機能を提供することができる。リソース提供は、クラウド・コンピューティング環境内でタスクを実施するために利用される、コンピューティング・リソース及びその他のリソースの動的な調達を提供する。計量及び価格決定は、リソースがクラウド・コンピューティング環境内で利用されているときのコスト追跡、及び、これらのリソースの消費についての請求書作成又はインボイス送付を提供する。一例において、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティは、クラウド・コンシューマ及びタスクに対する識別検証、並びにデータ及び他のリソースに対する保護を提供する。ユーザ・ポータルは、コンシューマ及びシステム管理者に対して、クラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理は、要求されるサービス・レベルに合致するように、クラウド・コンピューティング・リソースの割り当て及び管理を提供する。サービス・レベル同意（ＳＬＡ）計画及び遂行は、ＳＬＡに従って将来的な要求が予期されるクラウド・コンピューティング・リソースのための、事前準備及び調達を提供する。
【００７７】
作業負荷層６６は、クラウド・コンピューティング環境を利用することができる目的となる機能の例を提供する。この層から提供される作業負荷及び機能の例には、マッピング及びナビゲーション、ソフトウェア開発及び寿命サイクル管理、仮想教室教育配信、データ解析処理、及びトランザクション処理などが含まれる。
【００７８】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態によるシステム、方法及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を例証する。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理関数を実装するための１つ又は複数の実行可能な命令を含む、モジュール、セグメント、又はプログラム・コードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図中に記された順序とは異なる順序で生じることがあることにも留意されたい。例えば、連続して図示された２つのブロックが、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又は、これらのブロックは、ときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図内の各ブロック、並びにブロック図及び／又はフローチャート図内のブロックの組合せは、指定された機能又は動作を実行する専用ハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組合せによって実装することができることにも留意されたい。
【００７９】
当業者であれば分かるように、本発明は、システム、方法又はコンピュータ・プログラム製品として具体化することができる。従って、本発明は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロ・コードなどを含む）、又はソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書においてはこれらの全てを一般に、「回路」、「モジュール」又は「システム」と呼ぶことできる。さらに、本発明の態様は、コンピュータ可読プログラム・コードが組み入れられたいずれかの有形の表現媒体内で具体化されたコンピュータ・プログラム製品の形を取ることができる。
【００８０】
１つ又は複数のコンピュータ使用可能媒体又はコンピュータ可読媒体の任意の組み合わせを利用することができる。コンピュータ使用可能媒体又はコンピュータ可読媒体は、例えば、電子、磁気、光学、電磁気、赤外線若しくは半導体のシステム、装置、デバイス若しくは伝搬媒体とすることができるが、これらに限定されるものではない。コンピュータ可読媒体のより具体的な例（非網羅的なリスト）として、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤＲＯＭ）、光記憶デバイス、インターネット又はイントラネットをサポートする伝送媒体、又は磁気記憶デバイスが挙げられる。プログラムが印刷された紙又は他の適切な媒体でさえも、そのプログラムを例えば、その紙又は他の媒体の光学スキャンによって電子的にキャプチャし、次いで、必要に応じて、コンパイルし、解釈し、又はそれ以外の適切な手法で処理し、その後、コンピュータ・メモリ内に格納することができるので、コンピュータ使用可能媒体又はコンピュータ可読媒体とすることができることに留意されたい。本明細書の文脈では、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスによって又はこれらと関連して用いるためのプログラムを収納し、格納し、通信し、伝搬し又は輸送することができる任意の媒体とすることができる。コンピュータ使用可能媒体は、コンピュータ使用可能なプログラム・コードが、ベースバンド内で又は搬送波の一部としてその中で具体化された、伝搬されるデータ信号を含むものとすることができる。コンピュータ使用可能プログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、及びＲＦなどを含むいずれかの適切な媒体を用いて伝送することができる。
【００８１】
本発明の動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋などのようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、１つ又は複数のプログラミング言語のいずれかの組合せで記述することができる。プログラム・コードは、全体をユーザのコンピュータ上で実行することができ、スタンドアロン型のソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行することができ、一部をユーザのコンピュータ上で実行し、一部をリモート・コンピュータ上で実行することができ、又は、全体をリモート・コンピュータ若しくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続することができ、又は、（例えば、インターネット・サービス・プロバイダを用いるインターネットを通じて）外部コンピュータに対する接続を行うこともできる。
【００８２】
以下の特許請求の範囲における全ての「手段又はステップと機能との組合せ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作及び均等物は、その機能を、明確に特許請求されているように他の特許請求された要素と組み合わせて実行するための、いかなる構造、材料又は動作をも含むことが意図される。本発明の説明は、例示及び説明の目的で提示されたものであるが、網羅的であることを意図するものではなく、本発明を開示された形態に限定することを意図するものでもない。本発明の範囲及び精神から逸脱することのない多くの変更及び変形が、当業者には明らかである。実施形態は、本発明の原理及び実際の用途を最も良く説明するため、及び、当業者が本発明を種々の変更を有する種々の実施形態について企図される特定の使用に適したものとして理解することを可能にするために、選択及び記載された。
【符号の説明】
【００８３】
１０：コンピューティング・ノード
５０：クラウド・コンピューティング環境
５４Ａ−Ｎ：コンピューティング機器
１００：コンピュータ環境
１０５：クラウド
１０６：ホスト
１４０：ユーザ
１４５：マン−マシン・インタフェース
【図１】
0005689400.tif 000002
【図２】
0005689400.tif 000003
【図３】
0005689400.tif 000004
【図４】
0005689400.tif 000005
【図５】
0005689400.tif 000006