(57)【要約】      （修正有）【課題】開発者がデバッグのためにコードパッケージの１つ以上の部分を指定して他の部分を排除するる方法、システム及び媒体を提供する。【解決手段】ウェブサービスコンピュータシステムは、コードをコンパイルしてコンパイル済みコードにする。このコードは、第１のタスクフローを含む１つ以上のサブセクションを含む。第１のタスクフローの選択を遠隔の開発者コンピュータシステムからネットワークを介して受ける。第１のタスクフローの選択は、第１のタスクフローをデバッグする予定であることを表示する。コンパイル済みコードの第１のタスクフローの実行は、コンピュータシステムによって行なうことができる。コンピュータシステムがコンパイル済みコードの第１のタスクフローを実行している間に、第１のタスクフローのデバッグ機能を開発者コンピュータシステムに与える。【選択図】図４
2020024717.tif 000002
【特許請求の範囲】
【請求項１】
コードをデバッグする方法であって、
コンピュータシステムがコードをコンパイルしてコンパイル済みコードにするステップを含み、前記コードの第１の部分は第１のタスクフローに対応し、前記コードの第２の部分は第２のタスクフローに対応し、
前記コンピュータシステムが前記第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるステップを含み、前記選択は前記第１のタスクフローをデバッグする予定であることを表示し、
前記コンピュータシステムによる前記第１のタスクフローの実行を開始するステップと、
前記コンピュータシステムが前記コンパイル済みコードの前記第１のタスクフローを実行している間に、前記コンピュータシステムが前記コードの前記第１の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与えるステップとを含む、方法。
【請求項２】
前記方法は、前記コンピュータシステムが、前記コードをコンパイルする前に、コンパイルする対象である前記コードを、前記開発者コンピュータシステムから、ウェブブラウザインターフェイスおよび前記ネットワークを介して受けるステップをさらに含み、
前記コンピュータシステムは、複数の開発者コンピュータシステムに対するコンパイルサービスを提供するウェブサービスコンピュータシステムである、請求項１に記載のコードをデバッグする方法。
【請求項３】
前記コンピュータシステムが前記第２のタスクフローを実行するステップをさらに含み、
前記第２のタスクフローをデバッグするための選択は前記開発者コンピュータシステムから前記ネットワークを介して受けておらず、
前記コードの前記第２の部分に関連するデバッグ機能は前記開発者コンピュータシステムに与えない、請求項１または２に記載のコードをデバッグする方法。
【請求項４】
前記コンピュータシステムがインターフェイスをウェブブラウザを介して前記開発者コンピュータシステムに与えるステップをさらに含み、前記インターフェイスは複数のタスクフローの中から選択することを許可し、前記複数のタスクフローは前記第１のタスクフローおよび前記第２のタスクフローを含む、請求項１〜３のいずれか１項に記載のコードをデバッグする方法。
【請求項５】
前記コンピュータシステムが、前記第１のタスクフローの実行中に、前記第２のタスクフローの選択を前記開発者コンピュータシステムから受けるステップと、
前記コンピュータシステムによる前記第２のタスクフローの実行を開始するステップと、
前記コンピュータシステムが前記コンパイル済みコードの前記第２のタスクフローを実行している間に、前記コンピュータシステムが前記コードの前記第２の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与えるステップとをさらに含む、請求項４に記載のコードをデバッグする方法。
【請求項６】
前記コンピュータシステムによる前記第１のタスクフローの実行は、前記コンピュータシステムが実行する仮想マシンによって行なわれ、前記仮想マシンは前記コンパイル済みコードをランタイムスレッドとして実行する、請求項１〜５のいずれか１項に記載のコードをデバッグする方法。
【請求項７】
前記コンピュータシステムが実行する前記仮想マシンが、前記第１のタスクフローを実行している間に、第２のランタイムスレッドを実行するステップをさらに含み、前記第２のランタイムスレッドは任意のユーザに与えられるデバッグ機能を備えていない、請求項６に記載のコードをデバッグする方法。
【請求項８】
前記コードをコンパイルしてコンパイル済みコードにするステップは、
コンパイル中に前記コードの前記第１の部分と前記コードの前記第２の部分とを修正して追加コードを含めるステップを含み、前記追加コードがデバッグ機能を与える、請求項１〜７のいずれか１項に記載のコードをデバッグする方法。
【請求項９】
前記デバッグ機能は、
前記開発者コンピュータシステムにおいて前記コードの前記第１の部分の中のブレークポイントで前記第１のタスクフローの実行を停止するという特徴、
前記第１のタスクフローの実行中に前記開発者コンピュータシステムに対して前記コードの前記第１の部分の中から変数値を出力するという特徴、および
前記コードの前記第１の部分の中の個々の式の処理の発生をトリガする入力を前記開発者コンピュータシステムから受けるという特徴、
からなる群より選択される１つ以上の特徴を含む、請求項１〜８のいずれか１項に記載のコードをデバッグする方法。
【請求項１０】
コードをデバッグするためのシステムであって、
ウェブサービスコンピュータシステムを備え、前記ウェブサービスコンピュータシステムは、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに通信可能に結合されかつ前記１つ以上のプロセッサによる読取が可能なメモリとを含み、プロセッサによる読取が可能な命令が前記メモリに格納されており、前記１つ以上のプロセッサは、前記命令を実行するとき、前記命令により、
コードをコンパイルしてコンパイル済みコードにし、前記コードの第１の部分は第１のタスクフローに対応し、前記コードの第２の部分は第２のタスクフローに対応し、
前記第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受け、前記選択は前記第１のタスクフローをデバッグする予定であることを表示し、
前記第１のタスクフローの実行を開始し、
前記ウェブサービスコンピュータシステムが前記コンパイル済みコードの前記第１のタスクフローを実行している間に、前記コードの前記第１の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与える、システム。
【請求項１１】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令を実行するとき、前記命令により、さらに、
前記コードをコンパイルする前に、コンパイルする対象である前記コードを、前記開発者コンピュータシステムから、ウェブブラウザインターフェイスおよび前記ネットワークを介して受ける、請求項１０に記載のシステム。
【請求項１２】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令を実行するとき、前記命令により、さらに、前記第２のタスクフローを実行し、
前記第２のタスクフローをデバッグするための選択は前記開発者コンピュータシステムから前記ネットワークを介して受けておらず、
前記コードの前記第２の部分に関連するデバッグ機能は前記開発者コンピュータシステムに与えない、請求項１０または１１に記載のシステム。
【請求項１３】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令を実行するとき
、前記命令により、さらに、インターフェイスをウェブブラウザを介して前記開発者コンピュータシステムに与え、前記インターフェイスは複数のタスクフローの中から選択することを許可し、前記複数のタスクフローは前記第１のタスクフローおよび前記第２のタスクフローを含む、請求項１０〜１２のいずれか１項に記載のシステム。
【請求項１４】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令を実行するとき、前記命令により、さらに、
前記第１のタスクフローの実行中に、前記第２のタスクフローの選択を前記開発者コンピュータシステムから受け、
前記第２のタスクフローの実行を開始し、
前記コンピュータシステムが前記コンパイル済みコードの前記第２のタスクフローを実行している間に、前記コードの前記第２の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与える、請求項１３に記載のシステム。
【請求項１５】
前記第１のタスクフローの実行は、前記コンピュータシステムが実行する仮想マシンによって行なわれ、前記仮想マシンは前記コンパイル済みコードをランタイムスレッドとして実行する、請求項１０〜１４のいずれか１項に記載のシステム。
【請求項１６】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令を実行するとき、前記命令により、さらに、
前記仮想マシンが、前記第１のタスクフローを実行している間に、第２のランタイムスレッドを実行し、前記第２のランタイムスレッドは任意のユーザに与えられるデバッグ機能を備えていない、請求項１５に記載のシステム。
【請求項１７】
前記１つ以上のプロセッサが前記プロセッサによる読取が可能な命令を実行するときに前記命令により前記コードをコンパイルしてコンパイル済みコードにすることは、前記１つ以上のプロセッサが、前記プロセッサによる読取が可能な命令を実行するとき、前記命令により、
コンパイル中に前記コードの前記第１の部分と前記コードの前記第２の部分とを修正して追加コードを含め、前記追加コードがデバッグ機能を与える、請求項１０〜１６のいずれか１項に記載のシステム。
【請求項１８】
前記デバッグ機能は、
前記開発者コンピュータシステムにおいて前記コードの前記第１の部分の中のブレークポイントで前記第１のタスクフローの実行を停止するという特徴、
前記第１のタスクフローの実行中に前記開発者コンピュータシステムに対して前記コードの前記第１の部分の中から変数値を出力するという特徴、および
前記コードの前記第１の部分の中の個々の式の処理の発生をトリガする入力を前記開発者コンピュータシステムから受けるという特徴、
からなる群より選択される１つ以上の特徴を含む、請求項１０〜１７のいずれか１項に記載のシステム。
【請求項１９】
コードをデバッグするための非一時的なプロセッサ読取可能な媒体であって、前記媒体はプロセッサによる読取が可能な命令を含み、前記命令により、１つ以上のプロセッサが、
コードをコンパイルしてコンパイル済みコードにし、前記コードの第１の部分は第１のタスクフローに対応し、前記コードの第２の部分は第２のタスクフローに対応し、
前記第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受け、前記選択は前記第１のタスクフローをデバッグする予定であることを表示し、
前記第１のタスクフローの実行を開始し、
前記コンパイル済みコードの前記第１のタスクフローを実行している間に、前記コードの前記第１の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与える、非一時的なプロセッサ読取可能な媒体。
【請求項２０】
前記１つ以上のプロセッサは、前記プロセッサによる読取が可能な命令により、さらに、
前記コードをコンパイルする前に、コンパイルする対象である前記コードを、前記開発者コンピュータシステムから、ウェブブラウザインターフェイスおよび前記ネットワークを介して受け、
前記コンピュータシステムは、複数の開発者コンピュータシステムに対するコンパイルサービスを提供するウェブサービスコンピュータシステムである、請求項１９に記載のコードをデバッグするための非一時的なプロセッサ読取可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願との相互参照
本願は、２０１４年５月１日に出願され「Targeted Cloud-based Debugging」と題された同時係属中の米国特許出願第１４／２６７，３６１号、および、２０１３年８月２２日に出願され「Taskflow Targeted Debugging in the Cloud」と題された同時係属中の米国仮特許出願第６１／８６８，７６３号に基づく優先権を主張するものであり、各出願の開示全体をすべての目的のために本明細書に引用により援用する。
【背景技術】
【０００２】
背景
典型的に、ソフトウェア開発者がコードを記述する際、開発者はデバッグモードでコードをコンパイルして実行する。デバッグモードにより、開発者は、実行時にコードがどのように機能しているか見ることができる。コードがデバッグモードで実行されるとき、典型的に、開発者は、実行時に変数値を見ることができ、開発者が実行の継続をトリガするまでコードの実行が停止するブレークポイントを設定することができ、および／または、コードの実行を一行ずつステップスルーすることができる。
【０００３】
このような構成は、開発者のローカルコンピュータシステムにおいてコードがコンパイル、デバッグ、および／または実行される場合にはうまく機能する。従来の構成では、コードの実行を、全体的に（デバッグ機能を許可する）デバッグモードで行なうかまたは（従来はデバッグ機能を許可しない）ランタイムモードで行なうかについての選択をする必要があるであろう。このような選択は、開発者がコンピュータシステムを使用する唯一の人物である場合には、開発者が容易に行なうことができる。
【０００４】
さらに、デバッグすることを所望するコードを開発者が有している場合、開発者はコードの一部をデバッグすることにしか興味がない場合があり、コードの残りはデバッグ機能なしで実行させる。コードの全体に対して提供されるデバッグ機能は、開発者の注意を奪う、および／または開発者の時間を無駄にするかもしれない。このため、これらおよびそれ以外の理由から、開発者がデバッグのためにコードパッケージの１つ以上の部分を指定して他の部分を排除できることが望ましい。
【発明の概要】
【課題を解決するための手段】
【０００５】
概要
一部の実施形態において、コードをデバッグする方法が提示される。この方法は、コンピュータシステムがコードをコンパイルしてコンパイル済みコードにすることを含み得る。コードの第１の部分は第１のタスクフローに対応し、コードの第２の部分は第２のタスクフローに対応する。この方法は、コンピュータシステムが第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けることを含み得る。この選択は第１のタスクフローをデバッグする予定であることを表示する。この方法は、コンピュータシステムによる第１のタスクフローの実行を開始することを含み得る。この方法は、コンピュータシステムがコンパイル済みコードの第１のタスクフローを実行している間に、コンピュータシステムがコードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して提供することを含み得る。
【０００６】
このような方法の実施形態は、以下の特徴のうち１つ以上を含み得る。この方法は、コンピュータシステムが、コードをコンパイルする前に、コンパイルする対象であるコード
を、開発者コンピュータシステムから、ウェブブラウザインターフェイスおよびネットワークを介して受けることを含み得る。コンピュータシステムは、複数の開発者コンピュータシステムに対するコンパイルサービスを提供するウェブサービスコンピュータシステムである。この方法は、コンピュータシステムが第２のタスクフローを実行することを含み得る。第２のタスクフローをデバッグするための選択は開発者コンピュータシステムからネットワークを介して受けないようにしてもよい。コードの第２の部分に関連するデバッグ機能は開発者コンピュータシステムに与えないようにしてもよい。この方法は、コンピュータシステムがインターフェイスをウェブブラウザを介して開発者コンピュータシステムに与えることを含み得る。インターフェイスは複数のタスクフローの中から選択することを許可する。複数のタスクフローは第１のタスクフローおよび第２のタスクフローを含む。この方法は、コンピュータシステムが、第１のタスクフローの実行中に、第２のタスクフローの選択を開発者コンピュータシステムから受けることを含み得る。この方法は、コンピュータシステムによる第２のタスクフローの実行を開始することを含み得る。この方法は、コンピュータシステムがコンパイル済みコードの第２のタスクフローを実行している間に、コンピュータシステムがコードの第２の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して提供することを含み得る。コンピュータシステムによる第１のタスクフローの実行は、コンピュータシステムが実行する仮想マシンによって行なわれてもよい。仮想マシンはコンパイル済みコードをランタイムスレッドとして実行する。この方法は、コンピュータシステムが実行する仮想マシンが、第１のタスクフローを実行している間に、第２のランタイムスレッドを実行することを含み得る。第２のランタイムスレッドは任意のユーザに与えられるデバッグ機能を備えていない。コードをコンパイルしてコンパイル済みコードにすることは、コンパイル中にコードの第１の部分およびコードの第２の部分を修正して追加コードを含めることを含み得る。追加コードがデバッグ機能を与える。デバッグ機能は、開発者コンピュータシステムにおいてコードの第１の部分の中のブレークポイントで第１のタスクフローの実行を停止するという特徴、第１のタスクフローの実行中に開発者コンピュータシステムに対してコードの第１の部分の中から変数値を出力するという特徴、および、コードの第１の部分の中の個々の式の処理の発生をトリガする入力を開発者コンピュータシステムから受けるという特徴からなる群より選択される１つ以上の特徴を含み得る。
【０００７】
一部の実施形態において、コードをデバッグするためのシステムが提示される。システムは、ウェブサービスコンピュータシステムを含み得る。ウェブサービスコンピュータシステムは、１つ以上のプロセッサと、１つ以上のプロセッサに通信可能に結合されかつ１つ以上のプロセッサによる読取が可能なメモリとを含み得る。プロセッサによる読取が可能な命令がメモリに格納されている。１つ以上のプロセッサは、命令を実行するとき、この命令により、コードをコンパイルしてコンパイル済みコードにし、コードの第１の部分は第１のタスクフローに対応し、コードの第２の部分は第２のタスクフローに対応する。１つ以上のプロセッサは、命令により、第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けてもよい。この選択は第１のタスクフローをデバッグする予定であることを表示する。１つ以上のプロセッサは、命令により、第１のタスクフローの実行を開始し得る。１つ以上のプロセッサは、命令により、ウェブサービスコンピュータシステムがコンパイル済みコードの第１のタスクフローを実行している間に、コードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して与え得る。
【０００８】
このようなシステムの実施形態は、以下の特徴のうちの１つ以上を含み得る。１つ以上のプロセッサは、命令により、コードをコンパイルする前に、コンパイルする対象であるコードを、開発者コンピュータシステムから、ウェブブラウザインターフェイスおよびネットワークを介して受けることができる。１つ以上のプロセッサは、命令により、第２のタスクフローを実行し得る。第２のタスクフローをデバッグするための選択は開発者コン
ピュータシステムからネットワークを介して受けないようにしてもよい。コードの第２の部分に関連するデバッグ機能は開発者コンピュータシステムに与えないようにしてもよい。１つ以上のプロセッサは、命令により、インターフェイスをウェブブラウザを介して開発者コンピュータシステムに与えてもよく、このインターフェイスは複数のタスクフローの中からの選択を許可し得る。複数のタスクフローは第１のタスクフローおよび第２のタスクフローを含む。１つ以上のプロセッサは、命令により、第１のタスクフローの実行中に、第２のタスクフローの選択を開発者コンピュータシステムから受けてもよい。１つ以上のプロセッサは、命令により、第２のタスクフローの実行を開始してもよい。１つ以上のプロセッサは、命令により、コンピュータシステムがコンパイル済みコードの第２のタスクフローを実行している間に、コードの第２の部分に対するデバッグ機能を開発者コンピュータにネットワークを介して提供してもよい。第１のタスクフローの実行は、コンピュータシステムが実行する仮想マシンによって行なわれてもよく、仮想マシンはコンパイル済みコードをランタイムスレッドとして実行する。１つ以上のプロセッサは、命令により、仮想マシンが、第１のタスクフローを実行している間に、第２のランタイムスレッドを実行し、第２のランタイムスレッドは任意のユーザに与えられるデバッグ機能を備えていない。１つ以上のプロセッサがプロセッサによる読取が可能な命令を実行するときにこの命令によりコードをコンパイルしてコンパイル済みコードにすることは、１つ以上のプロセッサが、プロセッサによる読取が可能な命令を実行するとき、この命令により、コンパイル中にコードの第１の部分とコードの第２の部分とを修正して追加コードを含めることを含み得る。追加コードがデバッグ機能を与える。デバッグ機能は、開発者コンピュータシステムにおいてコードの第１の部分の中のブレークポイントで第１のタスクフローの実行を停止するという特徴、第１のタスクフローの実行中に開発者コンピュータシステムに対してコードの第１の部分の中から変数値を出力するという特徴、およびコードの第１の部分の中の個々の式の処理の発生をトリガする入力を開発者コンピュータシステムから受けるという特徴、からなる群より選択される１つ以上の特徴を含む。
【０００９】
一部の実施形態において、コードをデバッグするための非一時的なプロセッサ読取可能な媒体が提示される。命令により、１つ以上のプロセッサがコードをコンパイルしてコンパイル済みコードにするように構成し得る。コードの第１の部分は第１のタスクフローに対応し、コードの第２の部分は第２のタスクフローに対応する。命令により、１つ以上のプロセッサが第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるように構成し得る。選択は第１のタスクフローをデバッグする予定であることを表示する。命令により、１つ以上のプロセッサが、第１のタスクフローの実行を開始させるように構成し得る。命令により、１つ以上のプロセッサが、コンパイル済みコードの第１のタスクフローを実行している間に、コードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して提供するように構成し得る。一部の実施形態において、命令により、１つ以上のプロセッサが、コードをコンパイルする前に、コンパイルする対象であるコードを、開発者コンピュータシステムから、ウェブブラウザインターフェイスおよびネットワークを介して受けるように構成し得る。コンピュータシステムは、複数の開発者コンピュータシステムに対するコンパイルサービスを提供するウェブサービスコンピュータシステムである。
【００１０】
一部の実施形態において、コードをデバッグするためのシステムが提示される。システムはウェブサービスコンピュータシステムを含み得る。ウェブサービスコンピュータシステムはさらに、コードをコンパイルしてコンパイル済みコードにするように構成されたコンパイラを含み得る。コードの第１の部分は第１のタスクフローに対応し、コードの第２の部分は第２のタスクフローに対応する。ウェブサービスコンピュータシステムは、第１または第２のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるように構成された選択部をさらに含み、選択は、第１または第２のタスクフローをデバッグする予定であることを表示する。ウェブサービスコンピュータシステムは、第
１のタスクフローが選択されたときに第１のタスクフローの実行を開始するように構成された第１の実行部と、第１の実行部がコンパイル済みコードの第１のタスクフローを実行している間に、コードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して提供するように構成された第１のデバッグ機能部とをさらに含む。一例において、ウェブサービスコンピュータシステムは、コードをコンパイルする前に、コンパイルする対象であるコードを、開発者コンピュータシステムからウェブブラウザインターフェイスおよびネットワークを介して受けるように構成されたコード受取部をさらに含み得る。一例において、ウェブサービスコンピュータシステムは、第２のタスクフローを実行するように構成された第２の実行部をさらに含み得る。第２のタスクフローをデバッグするための選択は開発者コンピュータシステムからネットワークを介して受けないようにする。コードの第２の部分に関連するデバッグ機能は開発者コンピュータシステムに与えないようにする。一例において、ウェブサービスコンピュータシステムは、第１のタスクフローと第２のタスクフローとを含む複数のタスクフローからの選択を許可するインターフェイスをウェブブラウザを介して開発者コンピュータシステムに提供するように構成されたインターフェイス提供部をさらに含み得る。一例において、ウェブサービスコンピュータシステムは、第１のタスクフローの実行時に第２のタスクフローの選択を開発者コンピュータから選択部が受けたときに、第２のタスクフローの実行を開始するように構成された第３の実行部と、コンパイル済みコードの第２のタスクフローを第３の実行部が実行している間に、コードの第２の部分に対するデバッグ機能をネットワークを介して開発者コンピュータシステムに提供するように構成された第２のデバッグ機能部とをさらに含み得る。一例において、第１の実行部は、コンピュータシステムによって実行される仮想マシンであり、コンパイル済みコードをランタイムスレッドとして実行する。一例において、第１のタスクフローを実行している間に、仮想マシンは第２のランタイムスレッドを実行し、第２のランタイムスレッドは、任意のユーザに提供されるデバッグ機能を有さない。一例において、コンパイラは、コードの第１の部分およびコードの第２の部分を修正して追加コードを含めるためのコード修正部をさらに含み得る。追加コードはデバッグ機能を提供する。一例において、第１および第２のデバッグ機能部はそれぞれ、開発者コンピュータシステムにおいてコードの第１および第２の部分の中のブレークポイントで第１および第２のタスクフローの実行を停止させるように構成された停止部と、第１および第２のタスクフローの実行中にコードの第１および第２の部分の中から変数値を開発者コンピュータシステムに出力するように構成された出力部と、コードの第１および第２の部分における個々の式の処理の発生をトリガする開発者コンピュータシステムからの入力を受けるように構成された入力部とを含む。
【００１１】
一部の実施形態において、コードをデバッグするための装置が提示される。装置は、コンピュータシステムによって、コードをコンパイルしてコンパイル済みコードにするための手段を含み得る。コードの第１の部分は第１のタスクフローに対応し、コードの第２の部分は第２のタスクフローに対応する。装置は、コンピュータシステムによって、第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるための手段をさらに含み得る。選択は、第１のタスクフローをデバッグする予定であることを表示する。装置は、コンピュータシステムによって、第１のタスクフローの実行を開始するための手段と、コンピュータシステムがコンパイル済みコードの第１のタスクフローを実行している間に、コンピュータシステムによって、コードの第１の部分に対するデバッグ機能をネットワークを介して開発者コンピュータに提供するための手段とをさらに含み得る。一例において、装置は、コードをコンパイルする前に、コンピュータシステムによって、コンパイルする対象であるコードを、開発者コンピュータシステムからウェブブラウザ―インターフェイスおよびネットワークを介して受けるための手段をさらに含み得る。コンピュータシステムは、複数の開発者コンピュータシステムのためのコンパイルサービスを提供するウェブサービスコンピュータシステムである。一例において、装置は、コンピュータシステムによって第２のタスクフローを実行するための手段をさらに含み得る
。第２のタスクフローをデバッグするための選択は開発者コンピュータシステムからネットワークを介して受けないようにする。コードの第２の部分に関するデバッグ機能は開発者コンピュータシステムに与えないようにする。一例において、装置は、複数のタスクフローからの選択を許可するインターフェイスを、コンピュータシステムによって、ウェブブラウザを介して開発者コンピュータシステムに提供するための手段をさらに含み得る。複数のタスクフローは第１のタスクフローと第２のタスクフローとを含む。一例において、装置は、コンピュータシステムによって、第１のタスクフローの実行時に開発者コンピュータシステムから第２のタスクフローの選択を受けるための手段と、コンピュータシステムによって、第２のタスクフローの実行を開始するための手段と、コンピュータシステムがコンパイル済みコードの第２のタスクフローを実行している間に、コンピュータシステムによって、コードの第２の部分に対するデバッグ機能をネットワークを介して開発者コンピュータに提供するための手段とを含み得る。一例において、コンピュータシステムによって第１のタスクフローを実行するための手段は、コンピュータシステムによって実行される仮想マシンであり、仮想マシンはコンパイル済みコードをランタイムスレッドとして実行する。一例において、装置は、第１のタスクフローを実行している間に、コンピュータシステムによって実行される仮想マシンによって、第２のランタイムスレッドを実行するための手段をさらに含み得る。第２のランタイムスレッドは任意のユーザに提供されるデバッグ機能を有さない。一例において、コードをコンパイルしてコンパイル済みコードにするための手段は、コンパイル中にコードの第１の部分およびコードの第２の部分を修正して追加コードを含めるための手段をさらに含み得る。追加コードはデバッグ機能を提供する。一例において、コードの第１の部分に対するデバッグ機能を提供するための手段は、開発者コンピュータシステムにおいてコードの第１の部分の中のブレークポイントで第１のタスクフローの実行を停止するための手段と、第１のタスクフローの実行中にコードの第１の部分の中から変数値を開発者コンピュータシステムに出力するための手段と、コードの第１の部分における個々の式の処理の発生をトリガする開発者コンピュータシステムからの入力を受けるための手段とをさらに含み得る。
【００１２】
さまざまな実施形態の性質および利点は、以下の図面を参照することによってさらに理解されるであろう。添付の図面において、同様の構成要素または特徴は同じ参照符号を有する場合がある。さらに、同じタイプのさまざまな構成要素は、ダッシュが続く参照符号および同様の構成要素を識別する第２の符号によって識別し得る。第１の参照符号のみが明細書で使用されている場合、その説明は、第２の参照符号に関わらず、同じ第１の参照符号を有する同様の構成要素のうちのどの構成要素にも適用できる。
【図面の簡単な説明】
【００１３】
【図１】１つ以上のランタイムスレッドおよび１つ以上のロジックインサイトスレッドを同時に実行するように構成されたシステムの実施形態を示す図である。
【図２】選択されたタスクフローのみに関連付けられたデバッグ機能が開発者に利用可能となるようにロジックインサイト注入コードをコンパイルおよび実行するように構成されたシステムの実施形態を示す図である。
【図３】タスクフローをターゲットとするデバッグのために構成されたシステムの実施形態を示すブロック図である。
【図４】タスクフローをターゲットとするデバッグのための方法の実施形態を示す図である。
【図５】タスクフローをターゲットとするデバッグのための方法の他の実施形態を示す図である。
【図６】リモート開発者コンピュータシステムの使用を許可する分散型システムの実施形態を示す図である。
【図７】クラウドサービスとして提供し得るサービスによるシステム環境の実施形態を示すブロック図である。
【図８】本明細書において詳述されるさまざまな実施形態を実施するために使用し得るコンピュータシステムの実施形態を示す図である。
【図９】本明細書において詳述される原理に従って構成されたコードをデバッグするためのシステムの実施形態を示す機能ブロック図である。
【発明を実施するための形態】
【００１４】
詳細な説明
ウェブサービスを提供するコンピュータシステム（たとえば、ウェブサーバ）は、１人以上のユーザのためのビジネスロジックコードなどのコードを同時にコンパイルおよび実行するために使用し得る。このような構成は、ユーザにとって大きな利点を有し得る。ユーザによって使用されているローカルデバイスはコードのコンパイルおよび実行を行なわないので、ローカルデバイスで使用するおよび／または必要とする処理能力は低くてもよい。ウェブサービスによってコンパイルされ実行されるコードは、注入コード（injected
code）と呼ばれることがある。このような注入コードは、リモートコンピュータシステ
ムからコンパイルおよび／または実行のために提供される。コードを記述またはコンパイルする開発者は、コードを見たりコンパイルしたりするためにローカルコンピュータシステムを使用し得るが、コンパイルおよび実行のためにウェブサービスへコードを転送し得る。
【００１５】
リモートコンピューティングデバイスからネットワーク接続を介してウェブサービスへアクセスし得る一部のユーザは、ウェブサービスコンピュータシステムによって実行されるランタイムスレッドを有し得る。このようなランタイムスレッドは、デバッグ機能なしに実行されているコンパイル済みビジネスロジックコードなどのコンパイル済み注入コードであってもよい。このようなことから、ウェブサービスコンピュータシステムによって実行されているランタイムスレッドは、ブレークポイントを含まないかもしくは実施しなくてもよく、コードにおける各々の式の実行を進める入力のために停止および待機しなくてもよく、注入コード内にあるさまざまな変数の値を出力しなくてもよい。ウェブサービスの異なるユーザは、異なるランタイムスレッドに関連付けられ得る。異なるユーザについて実行されているランタイムスレッドは、コンパイル済みコードの同じまたは異なるピースに対応し得る（たとえば、特定のコンパイル済みのコードのピースが複数のユーザのための複数のスレッドとして実行し得る）。このようなことから、ネットワーク（たとえば、インターネット）を介してウェブサービスへアクセスするユーザは、ランタイムスレッドを実行するウェブサービスを有し得る一方、ネットワークを介してウェブサービスへアクセスする他のユーザは、第１のランタイムスレッドとは無関係の第２のランタイムスレッドを実行するウェブサービスを有し得る。
【００１６】
これらのランタイムスレッドの各々は、ウェブサービスコンピュータシステムの同じ仮想マシンによって実行し得る。このような仮想マシンは、排他的に特定のモードで実行するように構成し得る。たとえば、この仮想マシンは、デバッグモードまたはランタイムモードのいずれかで実行するように構成し得る。これらのモードは、排他的であってもよい。仮想マシンによって実行されるすべてのスレッドはデバッグモードで実行される必要がある場合がある、または仮想マシンによって実行されるすべてのスレッドはランタイムモードで実行される必要がある場合がある。
【００１７】
開発者が記述または修正したビジネスロジックコード等のコードを特定のユーザ（たとえば、ビジネスロジック開発者）がデバッグしたい場合、開発者はデバッグモードを所望してもよい。デバッグにより、開発者は、実行を継続することを開発者が表示するまでビジネスロジックの実行を停止する点であるブレークポイントを注入コード内に設定すること、式ごとに注入コードの実行をステップスルーすること、ならびにコンパイル済み注入コードの実行時に変数の値を見るおよび／またはコンパイルすることなどのデバッグアク
ティビティのうちの１つ以上を行なうことが可能となり得る。
【００１８】
さらに、開発者によってデバッグされるコードは１つ以上のサブセクションを有することなどによって複雑になる場合があることを理解すべきである。開発者が注入コードの部分をデバッグすることを望み得る一方、開発者は注入コードの他の部分をデバッグ機能なしに実行することを望み得る。このような構成により、注入コードの特定の部分をターゲットとしてデバッグすることを可能にし得る一方、デバッグ機能が開発者に提供されることなく注入コードの残りを実行することができる。
【００１９】
１人以上の開発者がコードをデバッグできるように仮想マシンがデバッグモードで実行される場合、ウェブサーバ上の他のユーザのための注入コードの実行は有効となり、デバッグモードで実行するよう強いられ得る。このようなことから、１つ以上の他のスレッドがランタイムモードで実行されている（デバッグ機能なし）間に一部が同時にデバッグされる１つ以上のスレッドを同じ仮想マシンに実行させることは、ウェブサーバにアクセスするすべてのユーザが所望のモードでコードを実行するために望まれるものであってもよい。
【００２０】
ウェブサービスによってデバッグ機能なしにランタイムモードで他のスレッドが同時に実行されている間に１人以上の開発者が注入コードをデバッグできるようにするために、ウェブサービスの仮想マシンはランタイムモードで排他的に実行し得る。デバッグすることが望まれる注入コードがコンパイルされるとき、コンパイラは、デバッグ機能を含むようにコンパイルされている注入コードをコンパイルし得る。ひとたびコンパイルされると、注入コードから作成されるバイトコードがランタイムとして仮想マシンによって実行し得る。このようなことから、ウェブサービスの仮想マシンの視点からは、コンパイル済み注入コードに基づくスレッドがランタイムとして実行される。しかしながら、開発者の視点からは、仮想マシンがデバッグモードであった場合と比較すると、スレッドは同一または類似のデバッグ機能を有する。デバッグ機能により、注入コードをデバッグすることができ、これはこのようなデバッグ機能がコンパイル処理時に注入コードに加えられたためである。
【００２１】
開発者は注入コードの特定の部分をデバッグすることを望み得る一方、開発者は注入コードの他の部分を開発者に提供されるデバッグ機能なしに実行することを望み得る。デバッグすることが望ましくない注入コードの部分に対してデバッグ機能を有効にすると、開発者がデバッグすることを望むコードの１つ以上の部分をデバッグする開発者の能力を阻害、遅延、および／またはそれ以外に悪影響を与えるよう作用し得る。
【００２２】
注入コードは、さまざまなタスクフローによって呼出され得る。「タスクフロー」は、一連の要求であるコードの１つ以上のセクションまたはピース、および／または共通関数に関連するコードの部分を定義し得る。タスクフローは、アプリケーションにおける特定の機能タスクを行なうために合わせてシーケンスで実行されるアクティビティの集合を定義する。アクティビティは、新しいページの表示、アプリケーションデータの入力、またはアプリケーションデータの保存など、全体的なアプリケーションコードの一部の部分集合を行なうように定義し得る。コードからコンパイルされたウェブアプリケーションにおいて、特定のタスクフローのアクティビティは、ユーザのブラウザから発信される要求によって呼出し得る。タスクフローは、注入コードの特定のピースまたは部分を呼出し得る。タスクフローは、注入コードを呼出し得るとともに、静的コードも呼出し得る。静的コードは、注入されていない、および／または開発者がコンパイルすることができないコードを意味し得る。このような静的コードは、アプリケーションが呼出し得る元のアプリケーション開発者、および／または他のサービスのプロバイダによって提供し得る。タスクフローは、事前に定義し得る（すなわち、開発者がコンパイルすることができない）、ま
たは開発者による作成および／または修正が可能であってもよい。タスクフローは、注入コードを呼出すことが可能な１つ以上の事前に定義された「フック」ポイントを含み得る。このため、タスクフローは、静的コードの１つ以上のピースの実行を含み得るものであり、かつ、任意で注入コードの１つ以上のピースが実行されることを可能にし得る。
【００２３】
全体的に、Ｏｒａｃｌｅ（登録商標）ＥＲＰアプリケーション開発者によって実行されるコードは、Ｏｒａｃｌｅ（登録商標）によって提供されたコードに大きく依存し得る。静的コードとともに、タスクフローは、静的コードの機能を修正および／またはカスタマイズすることを可能にする１つ以上の注入コードのピースを呼出し得る。このような静的コードは、開発者によって注入されるのではなく、ウェブサーバを用いて展開し得る。このため、開発者はコンパイルされるべき注入コードを提供し得るものの、静的コードは既に格納されているか、そうでなければウェブサーバからアクセス可能である。静的コードは、注入コードを実行している同一のランタイムの一部として実行し得る。このため、特定のランタイムスレッドは、静的コードと注入コードとに関連付けられたランタイムを実行し得る。
【００２４】
タスクフローは、アプリケーション（たとえば、注入コードおよび／または静的コードから構築される）における制御の流れを定義するためのモジュール方式を提供し得る。このため、アプリケーションは、さまざまなタスクを達成するために複数の異なるタスクフローを呼出し得る。単一の大きなページフローとしてアプリケーションを表わす代わりに、アプリケーションは、再使用可能なタスクフローの集合に分解することができる。各タスクフローは、アプリケーションナビゲーショナルグラフの部分を含み得る。一例として、航空システムは、航空予約をコンパイルするのに必要な注入および静的コードを呼出す作成／コンパイル予約タスクフローを含み得る。頻度の高いフライヤータスクフローは、頻度の高いフライヤーアカウントの作成および／または使用に必要な注入および静的コードを呼出し得る。他の例として、管理アカウントタスクフローは、アカウント保持者のアドレス、誕生日、パスワードなどを管理するためのコードを含み得る。異なるタスクフローは異なるコンテキストにおける同じ注入コードのピースを呼出し得ることを理解すべきである。このため、注入コードのピースは、複数のタスクフローによって呼出し得る。一例として、航空システムの例では、同じ注入コードのピースが、航空機の利用可能な座席の合計数を判定する際に使用されるものと同様に、どの座席が利用可能であるかを判定するために使用し得る。
【００２５】
デバッグすることが望まれる注入コードのコンパイルは、開発者から受取った修正済みのコード内にある式、および／または加えられた付加的な式を伴い得る。このような追加および／修正により、各式の実行後に停止する（開発者が次の式の実行についての承認を提供するまで）、式が処理を開始したことについての表示を出力する、式が処理を完了したことについての表示を出力する、コード内にある変数の値の表示を出力する、および／または、１つ以上の式の実行前に変数の値を設定することを可能にする、コンパイル済みコードを与え得る。注入コードに対するこれらの追加および／または修正の各々により、コードがランタイムとして実行されている（たとえば、リアルタイムで）間に開発者がコードをデバッグすることが可能になり得る。
【００２６】
開発者は、デバッグのための１つ以上のタスクフローを選択または表示することが可能になり、選択されたタスクフローに関連付けられた注入コードをデバッグできるようになる。デバッグのためのタスクフローインスタンスを示すことにより、開発者は、開発者が示されたタスクフローに関連付けられた注入コードの１つ以上の部分のためのデバッグ機能を望むが示されたタスクフローインスタンスに関連付けられていない注入コードの１つ以上の部分のためのデバッグ機能を望まないことを示している。（さらに、静的コードのためのデバッグは、デバッグのために関連付けられたタスクフローが選択されているかに
関わらず、利用可能でない。）一部の実施形態において、開発者は、デバッグのための複数のタスクフローを選択することができる。タスクフローのタスクフローインスタンスをデバッグすることにより、開発者は、タスクフローの他のインスタンスがデバッグ機能なしに実行される間にタスクフローをデバッグすることができる。注入コードのピースが複数のタスクフローによって呼出される場合、注入コードはデバッグの対象として選択された１つ以上のタスクフローにおいてのみ利用可能であってもよく、デバッグの対象として選択されなかった１つ以上のタスクフローが実行されているときは利用可能でない。
【００２７】
仮想マシンは、デバッグされておらず他のユーザのためのランタイムとして実行されている他の（場合によっては注入済みの）コードに対応する他のスレッドと同時にデバッグされているコンパイル済み注入コードのスレッド（タスクフローによって呼出された）をランタイムモードで実行し得る。デバッグを行なっている開発者に対し、開発者のコードにおける式の修正および／または追加は、デバッグモードで実行されている仮想マシンなしに開発者にデバッグ機能を提供する。デバッグ機能は、デバッグが望まれることを開発者が示す特定のタスクフローについてのみ開発者に提供し得る。このため、開発者の注入コードは、開発者の注入コードが呼出される示されたタスクフローの実行時にのみデバッグ機能を有し得る。同じ注入コードのピースまたは他の注入コードのピースは、少なくとも開発者からの視点において、デバッグ機能が要求されなかったタスクフローの一部として実行されるときには、デバッグ機能のないランタイムとして実行されるように表われ得る。デバッグ機能が望まれないコードのこのような部分について、コードの部分は、各式の実行後に停止する、式が処理を開始したことについての表示を出力する、式が処理を完了したことについての表示を出力する、コード内にある変数の値の表示を出力する、および／または１つ以上の式の実行前に変数の値を設定することを可能にする機能を起動し得ない。一部の実施形態において、式の修正および／または追加は、開発者がデバッグを望まないタスクフローに関連付けられたコードの部分に対して加えられ得る。しかしながら、注入コードを実行するウェブサービスコンピュータシステムは、開発者がデバッグを望むタスクフローに関連付けられた注入コードの部分に到達するまでこのようなデバッグ式を無視してコードの実行を継続し得る。コードのこの部分について、コードがロジックインサイトスレッドとして実行されている間、デバッグ式は無視され得ず、開発者にデバッグ機能を提供するために使用し得る。
【００２８】
以下のシステムおよび方法は、１人以上の開発者がデバッグのためのスレッドを実行している間に１人以上のユーザのためにランタイムモードでスレッドを同時に実行するためにクラウドベースのウェブサービスコンピュータシステムなどのマルチユーザシステムがどのように使用し得るのかについての詳細を提供する。さらに、以下では、注入コードの残りをランタイムとして実行させながらデバッグのための１つ以上のタスクフロー内の注入コードを開発者がどのように分離することができるのかについて詳述する。
【００２９】
本明細書において記載される原理は、さまざまなプログラミング言語で記述されたさまざまなコードの形式に適用可能であってもよい。本明細書において詳述するように、例はビジネスロジックコードと呼ばれるものに焦点を当てている。ビジネスロジックコードは、Ｊａｖａ（登録商標）およびＧｒｏｏｖｙ（登録商標）などのプログラミング言語で記述されてもよく、特定の「事業ドメイン」に適用し得る。たとえば、式は、会計または保険に固有の関数について行なうことが可能であってもよい。ビジネスロジックは、それ自体がＪａｖａ（登録商標）などの一部の一般的なプログラミング言語よりも高水準のプログラミングを可能とするものとして考えられ得る。本明細書で詳述されている同様の原理を、他のプログラミング言語および非ビジネスロジック構成に適用し得ることが、理解されるはずである。
【００３０】
この文書の全体にわたってさまざまな用語が使用される。明瞭化のために、これらの用
語は以下のとおりに定義される。
【００３１】
「注入コード」とは、第１のコンピュータシステムから第２のコンピュータシステムによるコンパイルおよび／実行のために提供（「注入」）されるコードのことである。第１のコンピュータシステムは、第２のコンピュータシステムから遠隔の場所に位置していてもよく、ネットワークを介して互いに通信し得る。たとえば、一部の実施形態において、開発者コンピュータシステムは、コードの記述および／またはコンパイルに使用され、コードは、注入コードのコンパイルおよび／または実行を行なうウェブサービスコンピュータシステムに注入コードとして注入される。注入コードは、デバッグ機能なしに、またはデバッグ機能を含むようにコンパイルおよび実行し得る。
【００３２】
「注入コードランタイム」は、ランタイムモードで仮想マシンによって実行される注入コードに少なくとも部分的に基づくコンパイル済みコードのことである。仮想マシンは、注入コードランタイムのためのデバッグ機能を提供しない。
【００３３】
「ランタイムスレッド」は、注入コードランタイムを実行するスレッドのことである。ランタイムスレッドは、デバッグ機能を提供しない。注入コードランタイムスレッドは、ランタイムモードで仮想マシンによって実行される。同じ注入コードランタイムの複数のランタイムスレッドは同時にウェブサービスコンピュータシステムによって実行し得る。ランタイムスレッドは、静的コードに基づいて１つ以上のランタイムを付加的に実行し得る。
【００３４】
「ロジックインサイト注入コードランタイム」は、ランタイムモードで仮想マシンによって実行されるとともにデバッグ機能を提供するコンパイル済みコード（ビジネスロジックコードに基づき得る）のことである。ロジックインサイト注入コードは、開発者（デバッグ機能を望む開発者と同じ、または同じでない）から受けた注入コードから少なくとも部分的にコンパイルされる。
【００３５】
「ロジックインサイトスレッド」は、ロジックインサイト注入コードランタイムを実行するスレッドのことである。ロジックインサイトスレッドは、開発者にデバッグ機能を提供する。ロジックインサイトスレッドは、ランタイムモードでウェブサービスコンピュータシステムの仮想マシンによって実行される。ロジックインサイトスレッドは、静的コードに基づいて１つ以上のランタイムを付加的に実行し得る。
【００３６】
図１は、複数のユーザのためにランタイムスレッドおよびロジックインサイトスレッドを同時に実行するように構成されたシステム１００の実施形態を示す。システム１００はさらに、デバッグの対象として１つ以上の特定のタスクフローを開発者が指定できるように、かつ、デバッグを望まないタスクフローに関連付けられた他のコードの部分のためのデバッグ機能が開発者に提示されないように、構成し得る。システム１００は、ユーザコンピュータシステム１１０と、ネットワーク１２０と、開発者コンピュータシステム１３０と、ウェブサービスコンピュータシステム１４０とを含み得る。ウェブサービスコンピュータシステム１４０は、仮想マシン１５０と、コンパイラ１６０と、ランタイムスレッド１７０と、ロジックインサイトスレッド１８０とを含み得る。
【００３７】
ランタイムスレッド１７０およびロジックインサイトスレッド１８０の両方は、どのコンパイル済みコードのピースが実行されるかを判定するために使用される１つ以上のタスクフローを参照し得る。異なるランタイムスレッド１７０および／または異なるロジックインサイトスレッド１８０は、異なるタスクフローを参照し得る。このようなタスクフローは、ウェブサービスコンピュータシステム１４０に格納されてもよく、ウェブサービスコンピュータシステム１４０によってアクセス可能であり、および／または注入コードと
同様の方法で開発者によって提供される。
【００３８】
各ユーザコンピュータシステム１１０は、ウェブサービスコンピュータシステム１４０の仮想マシン１５０によって実行されるランタイムスレッド１７０のランタイムスレッドに関連付けられるユーザによって操作し得る。ユーザコンピュータシステム１１０のユーザは、ランタイムスレッド１７０がデバッグ機能なしにコンパイルされる、および／または実行されることを、所望し指定することができる。このため、ユーザコンピュータシステム１１０のためのランタイムスレッド１７０の各々の実行には、ブレークポイント、ビジネスロジックコード内からユーザコンピュータシステム１１０への変数値の出力、またはランタイムスレッド１７０内の式の処理を発生させるためにユーザコンピュータシステム１１０から要求される入力を含むユーザに対して提供されるデバッグ機能は、伴い得ない。ユーザコンピュータシステム１１０は、互いに関連がないものであってもよい。たとえば、各ユーザコンピュータシステム１１０は、インターネットを介してウェブサービスコンピュータシステム１４０へアクセスするユーザとは異なるユーザによって操作し得る。代替的には、一部またはすべてのユーザコンピュータシステム１１０は、特定の事業組織など、特定の組織のユーザによって操作し得る。ウェブサービスコンピュータシステム１４０によって実行されるランタイムスレッドは、同じまたは異なるランタイムスレッドに基づき得る。ランタイムスレッド１７０は、ユーザコンピュータシステム１１０を介して、または一部の他のコンピュータシステム（開発者コンピュータシステム１３０の開発者コンピュータシステムなど）によってウェブサービスコンピュータシステム１４０に提供される（ビジネス）コードに基づいて（ウェブサービスコンピュータシステムによって）コンパイルされた注入コードランタイムに基づき得る。図１において、３つのユーザコンピュータシステムが示され、これは例示のみを目的としている。より少ない数または追加のユーザコンピュータシステム１１０が、ウェブサービスコンピュータシステム１４０の仮想マシン１５０によって実行されるランタイムスレッドに対応付けられ得る。ウェブサービスコンピュータシステム１４０は「ウェブサービス」コンピュータシステムと呼ばれているが、コンパイルおよび実行サービスは、インターネットおよび私的イントラネットを含むさまざまな形式のネットワークを介して提供し得ることを理解すべきである。
【００３９】
ユーザコンピュータシステム１１０は、ウェブベースインターフェイスを介してウェブサービスコンピュータシステム１４０と対話し得る。たとえば、ウェブベースインターフェイスは、ウェブサービスコンピュータシステム１４０によってユーザコンピュータ１１０に提供することができ、コンパイルのためにウェブサービスコンピュータシステム１４０にコードを注入することを可能にする。ウェブブラウザを介してユーザコンピュータシステム１１０上に提示し得るウェブベースインターフェイスは、注入コードから作成された注入コードランタイムに基づいて実行されるランタイムスレッドに対するユーザコンピュータシステム１１０のユーザの対話を可能にする。明確にすると、「ウェブベース」インターフェイスは、ブラウザを介して動作することができ、インターネットおよび私的イントラネットを含むさまざまな形態のネットワークを通したデータの交換を可能にする。
【００４０】
ウェブサービスコンピュータシステム１４０は第三者によって操作し得ることを理解すべきである。たとえば、企業体は、ウェブサービスコンピュータシステム１４０を操作し、コンパイル、デバッグ、および／または実行サービスを１つ以上の他の実体（ユーザコンピュータシステム１１０のユーザがそのメンバーであってもよい）に提供し得る。代替的には、ウェブサービスコンピュータシステム１４０は、エージェント（たとえば、従業員）のためのコンパイル、デバッグ、および／または実行サービスを提供する実体によって操作し得る。
【００４１】
ネットワーク１２０−１は、１つ以上の公衆ネットワークおよび／または１つ以上の私的ネットワークを示し得る。公衆ネットワークはインターネットであってもよく、私的ネ
ットワークは、企業のローカルエリアネットワークなどのイントラネットであってもよい。ユーザコンピュータシステム１１０の各々は、ネットワーク１２０−１を介してウェブサービスコンピュータシステム１４０と通信し得る。ユーザコンピュータシステム１１０の代わりに実行されるランタイムスレッド１７０は、ネットワーク１２０−１を介してユーザコンピュータシステム１１０とウェブサービスコンピュータシステム１４０との間で交換される情報を伴い得る。ランタイムスレッド１７０−１の実行をウェブサービスコンピュータシステム１４０に代わりに実行させるユーザコンピュータシステム１１０−１は、ネットワーク１２０−１を介したＨＴＴＰ要求および／または他の形式の情報の交換の発生を伴い得る。
【００４２】
ネットワーク１２０−２も１つ以上の公衆ネットワークおよび／または１つ以上の私的ネットワークを表わし得る。公衆ネットワークはインターネットであってもよく、私的ネットワークは、企業のローカルエリアネットワークなどのイントラネットであってもよい。ネットワーク１２０−２は、ネットワーク１２０−１と同じネットワークまたは異なるネットワークを表わし得る。開発者コンピュータシステム１３０の各々は、ネットワーク１２０−２を介してウェブサービスコンピュータシステム１４０と通信し得る。開発者コンピュータシステム１３０−１の代わりに実行されるロジックインサイトスレッド１８０−１は、ネットワーク１２０−２を介した開発者コンピュータシステム１３０−１とウェブサービスコンピュータシステム１４０との間の情報の交換を伴い得る。このような情報は、ネットワーク１２０−２を介したＨＴＴＰ要求および／または他の形式の情報の交換の発生を伴い得る。
【００４３】
開発者コンピュータシステム１３０の各開発者コンピュータシステムは、ビジネスロジックコードなどのコードのコーディング、コンパイル、修正、デバッグ、および／または実行テストを行なう開発者によって操作し得る。開発者コンピュータシステム１３０を操作する開発者は、開発者によってコーディングされた一部またはすべてのビジネスロジックをデバッグ機能とともに実行することを望み得る。このようなことから、ランタイム機能は、ビジネスロジックコードの全ピースについて開発者によって望まれない。図１において、ロジックインサイトスレッド１８０は、仮想マシン１５０によって実行されるものとして示される。仮想マシン１５０は、１人以上のユーザのためにランタイムスレッドを実行する同じ仮想マシンである。ロジックインサイトスレッド１８０は、デバッグ機能を含むようにロジックインサイト注入コードランタイムとしてコンパイルされた１つ以上の注入コードのピースに基づき得る。ロジックインサイトスレッド１８０の実行には、ブレークポイント、実行時におけるビジネスロジックコードから開発者コンピュータシステム１３０の開発者コンピュータシステムへの変数値の出力、またはロジックインサイトスレッド１８０−１のビジネスロジックコードにおける個別の式の処理を発生させるために開発者コンピュータシステム１３０の開発者コンピュータシステムから要求される入力の使用を伴い得る。開発者コンピュータシステム１３０は、互いに関連がない場合がある。たとえば、各開発者コンピュータシステム１３０は、インターネットを介してウェブサービスコンピュータシステム１４０上のビジネスロジックコードをコーディング、コンパイル、および／またはデバッグする異なる開発者によって操作し得る。代替的には、一部またはすべての開発者コンピュータシステム１３０は、事業組織などの特定の組織の開発者によって操作し得る。図１において、３つの開発者コンピュータシステム１３０が示されるが、これは例示のみを目的としている。より少ない数または追加の開発者コンピュータシステム１３０がビジネスロジックコードの記述、コンパイル、修正、および／またはデバッグに対応付けられてもよく、このような注入コードは、ロジックインサイトランタイムスレッドとしてウェブサービスコンピュータシステム１４０の仮想マシン１５０によってコンパイルおよび実行される。
【００４４】
開発者コンピュータシステム１３０は、ウェブベースインターフェイスを介してウェブ
サービスコンピュータシステム１４０と対話し得る。たとえば、ウェブベースインターフェイスは、ウェブサービスコンピュータシステム１４０によって開発者コンピュータシステム１３０に提供されてもよく、コンパイルのためにウェブサービスコンピュータシステム１４０へのコードの注入を可能にする。このウェブベースインターフェイスは、コードを見ることおよびコンパイルすることを可能にし得るとともに、ウェブサービスコンピュータシステムによって提供されるデバッグ機能に対して開発者が対話することも可能にする。ウェブブラウザを介して開発者コンピュータシステム１３０上に提示されるウェブベースのインターフェイスは、開発者コンピュータシステム１３０の１つを使用する開発者が注入コード（ウェブベースインターフェイスを介して開発者によって提供され得た）から作成されたロジックインサイト注入コードランタイムに基づいて実行されるロジックインサイトスレッドと対話することを可能にし得る。
【００４５】
開発者コンピュータシステム１３０およびユーザコンピュータシステム１１０は、図１において区別して示される。これは、ロジックインサイト注入コードランタイムとして注入コードをコーディング、コンパイル、コンパイル、およびデバッグする開発者と、ランタイムスレッドとして注入コードの実行を代行させるユーザとを異ならせる目的のためであることを理解すべきである。開発者コンピュータシステム１３０およびユーザコンピュータシステム１１０のハードウェアは、類似または同一であってもよい。注入コードがランタイムスレッドとしてコンパイルおよび実行されることを開発者が示す場合、開発者の開発者コンピュータシステムはユーザコンピュータシステムとして考慮し得る。同様に、ロジックインサイト注入コードランタイムとして注入コードがデバッグのためにコンパイルおよび実行されることをユーザが示す場合、ユーザのユーザコンピュータシステムは開発者コンピュータシステムとして考慮し得る。このため、開発者コンピュータシステムまたはユーザコンピュータシステムとしてのコンピュータシステムの指定は、開発者によるデバッグのために注入コードがランタイムスレッドまたはランタイムスレッドとしてコンパイルおよび実行されるかに基づいて異なる。
【００４６】
ウェブサービスコンピュータシステム１４０は、１つ以上のコンピュータシステムを含み得る。ウェブサービスコンピュータシステム１４０は、ユーザコンピュータシステム１１０および開発者コンピュータシステム１３０との１つ以上のネットワークを介した通信を扱う１つ以上のウェブサーバを含み得る。これらの同じウェブサーバまたは別個のコンピュータシステムは、注入コードおよびスレッドのコンパイルおよび／または実行を行ない得る。ウェブサービスコンピュータシステム１４０は、複数の開発者によって記述されたビジネスロジックコードをコンパイルおよび／または実行するために使用し得る。このようなビジネスロジックコードは、ユーザコンピュータシステム１１０および開発者コンピュータシステム１３０から受けてもよい。ウェブサービスコンピュータシステム１４０によってコンパイルおよび実行されるビジネスロジックコードは、さまざまなユーザおよび開発者からネットワーク１２０を介して受けてもよい。コンパイラ１６０は、ユーザコンピュータシステム１１０および開発者コンピュータシステム１３０から受けた注入コードをコンパイルするために使用し得る。注入コードは、ひとたびコンパイルされると、仮想マシン１５０を使用して実行し得る。一部の実施形態において、コンパイラ１６０は、仮想マシン１５０の一部であってもよい。ウェブサービスコンピュータシステム１４０が受けた注入コードは、注入コードランタイムまたはロジックインサイト注入コードランタイムへコンパイルし得る。デバッグ機能がユーザによって望まれない場合には注入コードランタイムにコンパイルが行なわれる。デバッグ機能がユーザによって望まれる場合にはロジックインサイト注入コードランタイムにコンパイルが行なわれる。注入コードランタイムおよびロジックインサイト注入コードランタイムの両方は、ランタイムモードで仮想マシン１５０によって実行し得る。このため、ウェブサービスコンピュータシステム１４０の仮想マシン１５０の視点から、すべてのコードがランタイムとして実行される。
【００４７】
仮想マシン１５０は、ウェブサービスコンピュータシステム１４０によって実行し得る。仮想マシン１５０は、プログラミング言語インタプリタとして機能し得る。仮想マシン１５０は、異なる下層ハードウェア（たとえば、ウェブサービスコンピュータシステム１４０）による同じコードの実行を可能にし得る。仮想マシン１５０は、ウェブサービスコンピュータシステム１４０によって実行されるランタイムスレッド１７０およびロジックインサイトスレッドを実行するために使用し得る。仮想マシン１５０は、所与の時間にデバッグモードまたはランタイムモードで排他的に機能することを可能にし得る。このようなことから、仮想マシン１５０によって実行されるすべてのランタイムスレッドおよびロジックインサイトスレッドは、仮想マシン１５０が機能することを可能にするように同じモードで仮想マシン１５０によって実行されることが要求される。
【００４８】
同じ注入コードランタイムに対応する複数のスレッドは、同時に実行し得る。たとえば、ランタイムスレッド１７０−１はユーザコンピュータシステム１１０−１に関連付けられてもよく、ランタイムスレッド１７０−２はユーザコンピュータシステム１１０−２に関連付けられてもよく、ランタイムスレッド１７０−ｎはユーザコンピュータシステム１１０−ｎに関連付けられてもよい。ランタイムスレッド１７０の各ランタイムスレッドは、デバッグ機能なしにランタイムスレッドとして実行し得る。このようなことから、ランタイムスレッド１７０は、ユーザからの進めるための入力を待たずして実行し得る、および／またはランタイムスレッド１７０のコード内からの変数の値はユーザコンピュータシステム１１０のユーザが見ることまたはコンパイルすることのために出力されない。ランタイムスレッド１７０は、同じ注入コードランタイムまたは異なる注入コードランタイムに基づき得る。このようなことから、複数の異なる注入コードランタイムは、ランタイムスレッドとして同時に仮想マシン１５０によって実行し得る。デバッグ機能なしでユーザコンピュータシステム１１０（および関連付けられたユーザ）に望まれるように実行されるランタイムスレッド１７０について、仮想マシン１５０は、デバッグモードではなく、ランタイムモードであってもよい。
【００４９】
図１では３つのランタイムスレッドが仮想マシン１５０によって実行されるように示されているが、より少ない数または多い数のランタイムスレッドは、ウェブサービスコンピュータシステム１４０の仮想マシン１５０によって同時に実行し得ることを理解すべきである。
【００５０】
ロジックインサイトスレッド１８０は、開発者コンピュータシステム１３０−１などの開発者コンピュータシステムを介してデバッグが開発者によって行なわれる、実行中のロジックインサイト注入コードランタイムを表わす。ロジックインサイトスレッド１８０は、コンパイラ１６０によってコンパイルし得る。コンパイル時において、開発者は、開発者コンピュータシステム１３０−１を介して、注入コードを供給し得る（たとえば、ウェブベースインターフェイスを介して）とともに、開発者コンピュータシステム１３０−１によってコンパイラ１６０へ供給された注入コードのデバッグが望ましいという表示をコンパイラ１６０に対して提供する。１人以上の開発者は、デバッグすることが望ましいビジネスロジックコード内の１つ以上のタスクフローを指定し得る。このため、コンパイルされる注入コードについて、ウェブベースのインターフェイスは、開発者に対し、開発者がデバッグ機能を得ることを望む（および望まない）さまざまなタスクフローを選択する（および選択から外す）ためのオプションを提供し得る。デバッグの対象として選択されたタスクフローによって呼出されたコードは、デバッグ機能が設けられた唯一のコードであってもよい。
【００５１】
コンパイラ１６０は、開発者コンピュータシステム１３０−１によって供給された注入コードをロジックインサイトスレッド１８０−１として実行されるロジックインサイト注入コードランタイムへコンパイルし得る。開発者コンピュータシステム１３０−１から受
取ったデバッグを望むという表示に基づき、供給されたビジネスロジックコードは、注入コードランタイムではなくロジックインサイト注入コードランタイムにコンパイルし得る。コンパイルされたロジックインサイト注入コードランタイムは、デバッグ機能を提供する式を含み得るが、コンパイルされたロジックインサイト注入コードはランタイムモードで仮想マシンによって実行される。したがって、ロジックインサイト注入コードランタイムのデバッグ機能属性は、デバッグモードで動作することを仮想マシン１５０に要求し得ない。コンパイルされているとき、コンパイラ１６０は、開発者コンピュータシステム１３０−１から受けた注入コードに対して式の修正および／または追加を行ない、開発者の操作する開発者コンピュータシステム１３０−１にデバッグ機能を提供し得る。デバッグ機能は、開発者によってコーディングされたロジックインサイトスレッド１８０−１の各式が実行される前にロジックインサイト仮想マシン（ＬＩＶＭ）２１０からの入力を待つこと、開発者によってコーディングされたビジネスロジックコードまたは式ごとに実行されるビジネスロジックコード内へのブレークポイントの設定を可能にすること、および開発者への表示のためにロジックインサイトスレッド１８０の式からの変数値の表示を開発者コンピュータシステム１３０に提供することを含み得る。
【００５２】
注入コードを呼出すタスクフローの部分集合についてのみデバッグ機能が望まれることを開発者が示した場合、コンパイラ１６０は、すべてのタスクフローにおけるデバッグ機能を可能にする式を修正および／または挿入し得る。デバッグ機能がユーザによって望まれていないロジックインサイト注入コードランタイムのタスクフローが実行されているとき、ウェブサービコンピュータシステム１４０は、単にデバッグ機能を開発者に提供するのではない場合がある。このような構成により、開発者は、ロジックインサイト注入コードランタイムの実行時において、タスクフローデバッグ機能が提供される選択を修正することが可能となり得る。注入コード内のデバッグされる１つ以上の特定のタスクフローを開発者が指定した場合、デバッグ機能は、開発者によってデバッグの対象として選択されたタスクフローのうちの１つが実行されない限り、ウェブサービスコンピュータシステムによって無視し得る。静的コードは、デバッグの対象として選択されたタスクフローの一部として呼出されたか否かに関わらず、開発者のために提供されたデバッグ機能を有さないであろう。
【００５３】
コンパイル時にコンパイラ１６０によって行なわれるビジネスロジック注入コードに対する追加および／または修正に基づき、（バイトコードとして）作成されたロジックインサイト注入コードランタイムは、開発者に対してデバッグ機能を提供する。しかしながら、仮想マシンに対して、ロジックインサイトスレッドとして実行されるロジックインサイト注入コードは、ランタイムモードで実行されるランタイムスレッド１７０と同様のランタイムである。ロジックインサイト注入コードランタイムがデバッグ機能を開発者に対して提供するが、ロジックインサイト注入コードランタイムは仮想マシンによってデバッグモードで実行されないであろう。ロジックインサイトスレッド１８０およびランタイムスレッド１７０は、同時に実行されてもよく、仮想マシンはこれらのスレッドのすべてについてランタイムモードで機能する。さらに、ロジックインサイトスレッドの実行は、他のランタイムスレッドと異なる態様でランタイムスレッド１７０の実行に影響を与えるものではない。同様に、ランタイムスレッドの実行は、追加のロジックインサイトスレッドの実行と異なる態様でロジックインサイトスレッドの実行に影響を与えるものではない。図１において、３つのロジックインサイトスレッド１８０が示されているが、これは例示のみを目的としている。より少ない数または追加のロジックインサイトスレッドを仮想マシン１５０によって実行し得る。
【００５４】
デバッグのために開発者コンピュータシステム１３０−１を介して供給される注入ビジネスロジックコードがコンパイルされる予定であるという表示を開発者コンピュータシステム１３０−１の開発者が提供しない場合、ビジネスロジックコードは、ロジックインサ
イト注入コードではなく注入コードランタイムへコンパイルし得る。コンパイラ１６０は、複数のユーザ／開発者のために複数の注入コードのピースを同時にコンパイルするように構成し得る。コンパイラ１６０は、注入ビジネスロジックコードを注入コードランタイムおよび／またはロジックインサイト注入コードランタイムへコンパイルし得る一方、仮想マシン１５０は、１つ以上のランタイムスレッド１７０および１つ以上のロジックインサイトスレッド１８０を実行する。所与の時間において、仮想マシン１５０は、ランタイムスレッド１７０またはロジックインサイトスレッド１８０のいずれかのみを実行することも可能であってもよい。
【００５５】
図２は、ロジックインサイト注入コード内の一部のタスクフローのみの実行がデバッグのために開発者に利用可能となるようにロジックインサイト注入コードをコンパイルおよび実行するように構成されたシステム２００の実施形態を示す。システム２００は、特定の開発者コンピュータシステム１３０−１と対話するウェブサービスコンピュータシステム１４０の実施形態を示し得る。このようなことから、少なくとも一部の実施形態において、システム２００はシステム１００の一部である。システム２００は、開発者コンピュータシステム１３０−１と、ネットワーク１２０−２と、ウェブサービスコンピュータシステム１４０と、仮想マシン１５０と、コンパイラ１６０と、ロジックインサイトスレッド１８０−１と、ロジックインサイト仮想マシン２１０とを含み得る。システム２００は、開発者コンピュータシステム１３０−１によって提示されるロジックインサイトユーザインターフェイス２２０を付加的に含み得る。
【００５６】
ロジックインサイト仮想マシン（ＬＩＶＭ）２１０は、デバッグ機能が開発者によって要求されたときに特定の開発者セッションに関連付けられ得る。「セッション」は、ウェブサービスコンピュータシステム１４０に対して開かれた開発者コンピュータシステムまたはユーザのウェブブラウザのインスタンスのことである。開発者コンピュータシステム１３０−１からウェブサービスコンピュータシステム１４０が受けた情報をウェブサービスコンピュータシステム１４０において適切なデータに適用し得るように、各ＨＴＴＰセッションに識別子が割当てられてもよい。ＨＴＴＰセッションが確立された後、セッション識別子は、開発者コンピュータシステム１３０−１による各応答を伴ってウェブサービスコンピュータシステム１４０へ送信し得る。
【００５７】
このようなことから、ウェブサービスコンピュータシステム１４０との開発者コンピュータシステム１３０−１のＨＴＴＰセッションは、ロジックインサイトスレッド１８０−１およびＬＩＶＭ２１０とリンクされる。ＬＩＶＭ２１０は、ロジックインサイトスレッド１８０−１と開発者コンピュータシステム１３０−１との間の仲介として機能し得る。ＬＩＶＭ２１０は、ウェブサービスコンピュータシステム１４０、ウェブサービスコンピュータシステム１４０の仮想マシン１５０、リモートコンピュータシステム、または開発者コンピュータシステム１３０−１によって実行し得る。別個のＬＩＶＭ２１０は、さまざまな開発者コンピュータシステムの各セッションのためにウェブサービスコンピュータシステム１４０によって実行し得る。ロジックインサイト注入コードランタイム（そのロジックインサイトスレッド１８０−１は実行済みインスタンスである）を作成するためにコンパイラ１６０がビジネスロジックコードをコンパイルするとき、付加的な式が加えられてもよく、および／または開発者によってコーディングされた各式が実行される前に入力が要求されるように注入コードにおいて式を修正してもよい。たとえば、注入コードに対応するロジックインサイトスレッド１８０−１における各式の後、ロジックインサイトスレッド１８０−１の次の式が実行される前にＬＩＶＭ２１０から入力が受取られるように要求し得る。静的コードに基づく式は、入力が要求されることなく処理し得る。ＬＩＶＭ２１０は、これらの入力をロジックインサイトスレッド１８０へ提供するように機能し得る。開発者によってコーディングされた各式が実行される前に入力を必要とするロジックインサイトスレッド１８０−１により、開発者は、式ごとにビジネスロジックコードの
実行をステップスルーする、ブレークポイントを設定する（およびブレークポイントにおけるコード／変数の状態を見る）、ならびに／または注入コード内の変数の値を見るおよび／または修正することができる。
【００５８】
開発者によって選択されたブレークポイントは、デバッグの対象として選択されたタスクフロー内において、開発者によって設定されたブレークポイントのうちの１つに達するまで、ロジックインサイトスレッド１８０の実行の継続を許可するよう、ＬＩＶＭ２１０に命令する機能を有し得る。このようなことから、ＬＩＶＭ２１０は、デバッグの対象として選択されたタスクフローのコード内のブレークポイントに達するまでロジックインサイトスレッドの各式の実行を許可するためにロジックインサイトスレッド１８０−１入力を提供し得る。この点において、入力が開発者からＬＩＶＭ２１０に要求されてもよく、ＬＩＶＭ２１０は、ロジックインサイトスレッド１８０−１の実行を継続するために仮想マシン１５０に命令を送信する。開発者が式ごとにビジネスロジックコードの実行を望む場合、ＬＩＶＭは、デバッグの対象として選択されたタスクフロー内でロジックインサイトスレッドの次の式が実行される前に実行された各式の後に開発者から入力が受取られるまで待機し得る。選択されたタスクフロー外の式の実行は、開発者の対話なしにＬＩＶＭによって実行し得る。このため、ＬＩＶＭ２１０の視点から、入力は、実行を継続するために、ロジックインサイトスレッド１８０−１の各実行された式の後に仮想マシン１５０へ提供されるよう要求し得る。この入力が自動的に、または開発者コンピュータシステム１３０−１を介して受取られた開発者入力に応答してＬＩＶＭ２１０によって仮想マシン１５０に提供されるかどうかは、ブレークポイントに達したか、またはロジックインサイトスレッドの実行を式ごとにステップスルーすることを開発者が要求したかどうかに基づき得る。
【００５９】
ＬＩＶＭ２１０は、タスクフローアナライザ２１２を含み得る。タスクフローアナライザ２１２は、ロジックインサイトスレッド１８０−１において現在実行されている（注入コードからの）式がデバッグのために開発者によって選択されたタスクフローに対応するかしないかを評価し得る。式が選択されたタスクフローの一部である場合、ロジックインサイトユーザインターフェイス２２０を介して開発者にデバッグ機能が提供される。ロジックインサイトスレッド１８０−１において現在実行されている式が選択されたタスクフローに対応しない場合、タスクフローアナライザ２１２は、ロジックインサイトユーザインターフェイス２２０を介して開発者に提供されているデバッグ機能なしに式の実行をＬＩＶＭ２１０に継続させてもよい。このようなことから、ランタイムモードでの実行中にデバッグ機能を有するようにロジックインサイト注入コードをコンパイラ１６０がコンパイルした一部の実施形態において、ＬＩＶＭ２１０は、デバッグのためにユーザによって示された、または選択されたタスクフローの式がアクティブであるときに、このようなデバッグ機能をロジックユーザインターフェイス２２０に提供するのみである。
【００６０】
ロジックインサイトスレッド１８０−１のランタイムにおいて、デバッグのためにロジックインサイト注入コードの１つ以上のタスクフローを開発者が選択および除外する可能性があり得ることから、その式を変更することにより、デバッグ機能が開発者に提供される結果となる。このような構成は、コンパイルされている注入コードにおける式をコンパイラ１６０が追加および／または修正し、注入コードのすべてのタスクフローにおいてデバッグ機能を可能とした場合に可能であってもよい。選択されていないタスクフローが実行されているとき、ＬＩＶＭ２１０は、ロジックインサイトスレッド１８０−１の実行を進めるべきであることを示す仮想マシン１５０に対して自動的に（開発者による入力なしに）入力を提供し得る。
【００６１】
ＬＩＶＭ２１０は、変数値の変更をロジックインサイトスレッド１８０から受けるように機能し得る。これらの変更は、デバッグの対象として選択されたタスクフローが仮想マ
シン１５０によって実行されているときに開発者コンピュータシステム１３０−１に対して変数値を提供するために使用し得る（たとえば、開発者への提示のために）。ロジックインサイト注入コードランタイムは、変数が作成または修正される度に変数の値および変数の表示がＬＩＶＭ２１０に出力されるようにコンパイラ１６０によってコンパイルし得る。この変数の値および変数の表示は、デバッグのためにユーザによって選択された、タスクフローアナライザ２１２によって判定されるタスクフローが実行中の式の１つ以上を有しているときに、ＬＩＶＭ２１０によって受取られてもよく、ロジックインサイトユーザインターフェイス２２０を介して開発者に変数の表示および変数値を提示するために使用し得る。開発者は、ロジックインサイトユーザインターフェイス２２０を介して変数値の１つ以上を修正することが可能となり得る。選択されていないタスクフローがアクティブである場合、変数値は、ＬＩＶ２１０によってロジックユーザインターフェイス２２０へ出力されないであろう（しかしながら、ＬＩＶＭ２１０は、それらを依然として仮想マシン１５０から受けてもよいが、受けた値を記憶、無視、または廃棄してもよい）。ＬＩＶＭ２１０は、式が実行されているデバッグの対象として選択されたタスクフローの一部である場合（しかし、選択されていないタスクフローの式が仮想マシン１５０によって実行されているときではない）、現在実行されている（またはもうすぐ実行される）ロジックインサイトスレッドの注入コードにおける現在の式を開発者に対して示し得る。
【００６２】
ＬＩＶＭ２１０の視点から、ロジックインサイトスレッド１８０−１によって実行されるすべてのタスクフローは、コードの後の実行後に中断し、変数値を出力するように構成し得る。しかしながら、ＬＩＶＭ２１０のタスクフローアナライザ２１２は、ロジックインサイトユーザインターフェイス２２０のタスクフロー選択モジュール２２５を介して受取られた１つ以上の選択されたタスクフローの表示に基づき、ＬＩＶＭ２１０によって実行がいつ継続されるか、およびロジックインサイトユーザインターフェイス２２０を介してデバッグ機能がいつ提示されるかを判定し得る。
【００６３】
ロジックインサイトユーザインターフェイス（ＬＩＵＩ）２２０は、開発者コンピュータシステム１３０−１を介して開発者から注入コードを受けるために使用し得る。ＬＩＵＩ２２０は、コードが関連付けられる適切なタスクフローが選択されることを可能にし得る。ＬＩＵＩ２２０は、ウェブベースインターフェイスであってもよく、ウェブブラウザを介して実施し得る。たとえば、ＬＩＵＩ２２０は、ユーザが直接的に（たとえば、テキストとして）入力すること、および／またはコンパイルおよび場合によっては実行のためにウェブサービスコンピュータシステム１４０に対してアップロード（注入）されるビジネスロジックコードを含むファイルを選択することを可能にするウェブページの一部として提示し得る。ＬＩＵＩ２２０は、ビジネスロジックコードをデバッグのために（ロジックインサイト注入コード実行時として）コンパイルおよび実行するのが望ましいことを開発者が示すことを可能にし得る。ＬＩＵＩ２２０は、ロジックインサイトスレッド１８０が実行されている間にユーザが少なくとも注入コードに対してデバッグ機能を行なうことを可能にし得る。したがって、ロジックインサイトスレッド１８０が実行されている間にこのようなデバッグが発生することから、これはリアルタイムデバッグと言われる。ＬＩＵＩ２２０を使用して行なわれ得るこのようなデバッグ機能は、ブレークポイントを設定すること（およびこのようなブレークポイントにおける変数の状態を見ること）、式ごとにビジネスロジックコードの実行をステップスルーすること、および／または変数の値を見ること（および／またはコンパイルすること）を含む。ウェブサービスコンピュータシステム１４０とのセッションを介して、ＬＩＶＭ２１０を介して開発者からの入力を送信してロジックインサイトスレッド１８０の実行を制御するために、および開発者への提示のためにＬＩＵＩ２２０へ出力されるロジックインサイトスレッド１８０の実行についての情報を受けるために、ロジックインサイトユーザインターフェイス２２０を使用できる。
【００６４】
ＬＩＵＩ２２０はタスクフロー選択モジュール２２５を含み得る。ＬＩＵＩ２２０は、ＬＩＶＭ２１０から、実行されているアプリケーションによって定義されるさまざまなタスクフローの表示を受けることができる。タスクフロー選択モジュール２２５は、開発者がデバッグすることを望む１つ以上のタスクフローを開発者が選択することを許可し得る。タスクフロー選択モジュール２２５は、（たとえばタスクフローを選択しないことによって）開発者がデバッグすることを望まない１つ以上のタスクフローを、開発者が表示することを許可し得る。開発者によってデバッグの対象として選択されたタスクフローの表示は、開発者によって選択されたタスクフローの一部である式についてのみデバッグ機能（たとえば、変数値、実行の中断）が開発者に提供されるように、ＬＩＶＭ２１０に提供されてもよい。ＬＩＶＭ２１０は、他のタスクフローについてはデバッグ機能なしで実行を続行させることができる。開発者は、ロジックインサイトスレッド１８０−１の実行中に、タスクフロー選択モジュール２２５を介して、どのタスクフローを選択するかを調整してもよい。このようなタスクフローの選択の修正はＬＩＶＭ２１０に伝達することができ、そうするとＬＩＶＭ２１０は、ＬＩＵＩ２２０を介して開発者に対してデバック機能を与えるタスクフローをどのタスクフローにするか修正する。たとえば、開発者は、特定のタスクフローのデバッグを可能にし、その後、未来のある時点でタスクフローが実行されている間にこのデバックを不能にすることができる。このような選択および選択解除は、どのタスクフローに対してＬＩＶＭ２１０がデバッグ機能をロジックインサイトユーザインターフェイス２２０に出力するかに影響する。いくつかの実施形態において、タスクフロー選択モジュール２２５を用いて、ロジックインサイトスレッド１８０−１の実行の前に、１つ以上のタスクフローを選択する。いくつかの実施形態において、タスクフローの選択は、ロジックインサイトスレッド１８０−１の実行中に行なわれてもよい。
【００６５】
図３は、タスクフローを対象とするデバッグ用に構成されたシステム３００の実施形態のブロック図を示す。システム３００は、ロジックインサイト注入コードランタイムを作成するのに使用し得る、さまざまなハードウェア、ファームウェア、および／またはソフトウェアモジュールを表わす。特に指定されない限り、示されているモジュールは各々、図１および図２それぞれのシステム１００および２００のウェブサービスコンピュータシステム１４０の一部であってもよい（またはウェブサービスコンピュータシステム１４０によって実行されてもよい）。したがって、少なくともいくつかの実施形態において、システム３００はシステム１００および／またはシステム２００の一部であってもよい。システム３００はさまざまなモジュールを含み、これらモジュールは各々、ソフトウェア、ファームウェア、および／またはハードウェアを用いて実装されてもよい。コンポーネントは、コードソースモジュール３１０、プレコンパイルモジュール３１５、パーサモジュール３２０、変換エンジン３４０、コンパイラ１６０、仮想マシン１５０、およびＬＩＶＭ２１０を含む。このようなコンポーネントは、より多くの数のコンポーネントに分割してもよく、および／または組み合わせてより少ない数のコンポーネントにしてもよいことが理解されるはずである。
【００６６】
コードソースモジュール３１０は、注入された（ビジネスロジック）コードを受ける役割を果たすことができる。このコードは、コンパイル時に、構文木レベルでコンパイルできるプログラミング言語の構文で記述することができる。たとえば、ビジネスロジックコードのためのプログラミング言語としてＪａｖａ（登録商標）を使用してもよい。いくつかの実施形態において、コードソースモジュール３１０は、ユーザコンピュータシステムまたは開発者コンピュータシステムからウェブベースのインターフェイス（たとえば図２に示されるＬＩＵＩ２２０）を介して提示されるコードのようなコードを、リモートコンピュータシステムから受けるように構成されてもよい。受けるこのようなコードを「注入」コードと呼んでもよい。なぜなら、このコードはコンパイルおよび／または実行のためにリモートコンピュータシステムから受けるものであるからである。コードソースモジュール３１０は、これからコンパイルするコードを含むファイルにアクセスする役割を果た
すことができる。注入コードは、他の注入コードを同時にコンパイルおよび実行しているシステムがコンパイルおよび実行してもよい。
【００６７】
プレコンパイルモジュール３１５は、コードソースモジュール３１０が受けたビジネスロジックコードのコンパイルプロセスの一部を完成することができる。いくつかの実施形態において、プレコンパイルモジュール３１５は、コードソースモジュール３１０が受けたビジネスロジックコードに１つ以上の式を挿入することができる。パーサモジュール３２０は、この式を含むビジネスロックコードを構文解析して構文木を作成することができる。作成された構文木は抽象構文木であってもよい。この時点で、バイトコードがロジックインサイト注入コードランタイムとしてコンパイルされる前に、何らかのプログラミング言語ではこの構文木を修正することが可能であろう。
【００６８】
変換エンジン３４０は、パーサモジュール３２０によって作成された構文木を修正することができる。変換エンジン３４０は、構文木における式のうちのいくつかまたはすべての式を追加または修正することができる。変数値が最初に設定または修正される場合は常に、変数および変数値の表示がＬＩＶＭ２１０に出力されるように、構文木を修正することができる。したがって、実行中、ＬＩＶＭ２１０は、注入されたビジネスロジックコード内の各変数の現在値を維持することができる。プッシュまたはプルを介して、開発者のＬＩＵＩは、ＬＩＶＭ２１０から、設定または修正された変数および関連する値の表示を受けることができる。式の追加は、ビジネスロジックコード内の各式の実行後に、実行が少なくとも次の式に進むことを示す命令をＬＩＶＭ２１０から受けるまで、実行が停止される（たとえば延期またはループモードにされる）ように、行なえばよい。実行された式またはこれから実行される式の表示をＬＩＶＭ２１０に与えることができる。そうすると、ＬＩＶＭ２１０は、どの式が実行された直後であるかまたはどの式をこれから実行しようとしているかの表示を、開発者のＬＩＵＩに与えることができる（そうすると、ユーザは注入コードの実行の流れをモニタリングすることができる）。
【００６９】
いくつかの実施形態において、変換エンジン３４０は、どのタスクフローが選択されたかに関わらず、注入コードをすべて修正してデバッグを許可する。他の実施形態では、デバッグする予定のタスクフローに関連する注入コードの部分のみが、変換エンジン３４０によって修正される。このような実施形態では、開発者が、コンパイル前に、デバッグすることを望む１つ以上のタスクフローを特定することが必要な場合がある。すべてのタスクフローが変換エンジン３４０によって修正される実施形態では、開発者は、実行中に、どのタスクフローについてデバッグ機能をＬＩＵＩ２２０を介して開発者に与えるかを変更できる。
【００７０】
コンパイラ１６０は、修正された構文木をコンパイルしてバイトコードにすることができる。このバイトコードは、ロジックインサイトスレッドとして実行されることになるロジックインサイト注入コードランタイムとして参照される。コードソースモジュール３１０が受け、プレコンパイルモジュール３１５および変換エンジン３４０が修正した注入コードを、コンパイラ１６０はコンパイルできる。このロジックインサイト注入コードランタイムは、ランタイムモードの仮想マシンによって実行されるように構成されている。
【００７１】
ＬＩＶＭ２１０と通信する仮想マシン１５０は、ロジックインサイト注入コードランタイムとして、コンパイラ１６０によってコンパイルされたバイトコードを実行することができる。変換エンジン３４０によって修正された式ごとに、ＬＩＶＭがコンタクトされて実行を続けるべきか否か判断してもよい。したがって、ＬＩＶＭ２１０は、どのタスクフローがデバッグ機能を有する予定であるかモニタリングするとともに、（たとえば、開発者が設定したブレークポイントで、および／または開発者が式ごとに実行を要求している場合）どの式で、開発者入力を受けるまで実行を停止すべきかモニタリングする。ＬＩＶ
Ｍ２１０はまた、変数の値を受けることができる（たとえばこのような変数値が仮想マシン１５０によって設定または修正される度に）。ＬＩＶＭ２１０はまた、実行されたまたはこれから実行されるビジネスロジックコードの現在の式の表示を受けることができる。このような情報をＬＩＶＭ２１０は受けることができる。バイトコードの続行が許可される前にＬＩＶＭ２１０が開発者コンピュータシステムからの入力を要求してもよく、および／またはＬＩＶＭ２１０が情報をＬＩＵＩを介して開発者に出力してもよい。
【００７２】
ロジックインサイト注入コードランタイムが、ロジックインサイト注入コードのすべてのタスクフローにデバッグ機能が存在するようにコンパイルされた場合、タスクフローアナライザ２１２は、モニタリングを行なって、ロジックインサイトスレッドのどのタスクフローの式が実行されるか判断し、デバッグ機能を開発者が利用できるようにすべきか否か判断することができる。仮想マシン１５０が実行している式が、開発者がデバッグを望むと表示したタスクフローと関連していなければ、タスクフローアナライザ２１２は、ＬＩＶＭ２１０に、実行を続行すべきであることを、仮想マシン１５０に対して表示させることができる。この式についてはデバッグ情報を開発者に与えなくてもよい。たとえば、ＬＩＶＭ２１０が仮想マシン１５０に対して実行を自動的に続行するよう命令してもよく、および／または変数値を開発者コンピュータシステムに与えなくてもよい。しかしながら、タスクフローアナライザ２１２が、開発者がデバッグすると表示したタスクフローの式が実行されていることを検出した場合、デバッグ機能がＬＩＵＩ２２０に与えられるように、ＬＩＶＭ２１０がデバッグ機能を実施してもよい。このことは、ブレークポイントを実施すること、変数値を開発者コンピュータシステムに出力すること、および、どの式を実行するかという表示を与えることを含み得る。ロジックインサイトスレッド内で、さまざまなタスクフローを識別できる。タスクフローは、開発者が挿入したタグまたはその他の識別子によって識別されてもよい。これらタグまたはその他の識別子は、開発者によってコードに挿入されて、特定のタスクの実行に関連するロジックコードグループ等のロジックコードグループにコードをグループ化することができる。
【００７３】
図１〜図３のシステム１００〜３００を用いてさまざまな方法を実行することができる。図４は、タスクフローを対象とするデバッグのための方法４００の実施形態を示す。方法４００は、図１〜図３それぞれのシステム１００、システム２００、および／またはシステム３００によって実行されることができる。方法４００はまた、ランタイムスレッドを実行しロジックインサイト注入コードをコンパイルして実行するための他の形態のシステムによって実行されることができる。ウェブサーバ等の１つ以上のコンピュータシステムを用いて方法４００を実行してもよい。方法４００を実行するための手段は、１つ以上のコンピュータシステムおよびネットワークを含む。方法４００の各ステップはコンピュータシステムを用いて実行することができる。このコンピュータシステムは、１つ以上のウェブサーバ等の互いに通信する１つ以上の個別のコンピュータを含み得る。図２および図３を参照して、方法４００の各ステップは、ウェブサービスコンピュータシステム１４０によって実行されることができる。
【００７４】
ステップ４１０において、コンピュータシステムは、注入コードを、コンパイルしてロジックインサイト注入コードランタイムにしロジックインサイトスレッドとして実行するために、受けることができる。このコードは、図１および図２に関連して示されているような、開発者コンピュータシステムを介して開発者に与えられるウェブブラウザインターフェイスとネットワーク接続とを介して注入することができる。ステップ４１０の進行中であって、方法４００の他の部分の実行中に、コンピュータシステムは、注入コードランタイム等のさまざまなランタイムスレッドを実行することができる。
【００７５】
コンピュータシステムは、方法４００の間に、１人以上のユーザについてランタイムスレッドを実行することができる。図１を参照して、ウェブサービスコンピュータシステム
１４０は、インターネットでもよいネットワーク１２０−１を介して遠隔からウェブサービスコンピュータシステム１４０にアクセスするユーザについて、ランタイムスレッドを実行することができる。このランタイムスレッドは、コンパイルおよび／または実行のためにウェブサービスコンピュータシステムに与えられる他の注入コードに基づいていてもよい。実行されているどのランタイムスレッドも、ウェブサービスコンピュータシステムの仮想マシンによって実行されることができる。各ランタイムスレッドは、ウェブサービスコンピュータシステムとの特定のユーザのＨＴＴＰセッションと関連付けられていてもよい。これらランタイムスレッドは各々、デバッグ機能なしで実行されてもよい。ランタイムスレッドを実行しているウェブサービスコンピュータシステムの仮想マシンは、これらスレッドをランタイムモードで実行していてもよい。
【００７６】
ステップ４２０において、開発者は、開発者コンピュータシステムに、注入コードはデバッグ機能を用いて実行される予定であるという表示を与えることができる。ロジックインサイト注入コードランタイムはランタイムモードにおいて仮想マシンが実行することになるが、開発者の観点からすると、これはデバッグモードとみなすことができる。ステップ４２０で、この表示は、方法４００を実行するウェブサービスコンピュータシステムが、受けることができる。ステップ４３０で、開発者は、デバッグすべき１つ以上のタスクフローの表示を与えることができる。以前に開発者が注入コードを選択して適切なタスクフローと関連付けている場合がある。タスクフローが予め定義されており開発者による編集が不可能な場合、このようなタスクフローは、注入コードを呼出すことができる予め定められた１つ以上のフックポイントを有していてもよい。このような入力は、これから実行すべきタスクフローのリストからユーザが選択して与えてもよい。これに代えて、開発者が、デバッグを所望する１つ以上のタスクフローの名称を与えてもよい。これに加えてまたはこれに代えて、デバッグする１つ以上のタスクフローを、ステップ４３５のコンパイル後に選択（または選択解除）してもよい。デバッグする１つ以上のタスクフローを表示することにより、注入コード内にある他のタスクフローの実行が開発者に与えられているデバッグ機能とならないようにすることができる。ウェブブラウザベースのインターフェイスは、開発者に、ネットワーク接続および開発者コンピュータシステムを介して、アプリケーション内にあると判断されるさまざまなタスクフローの選択を与えることができる。開発者が１つ以上のタスクフローを選択してもよいが、本実施形態の残りの部分では、開発者がデバッグのための１つのタスクフローを特定すると想定する。ステップ４３０で、ウェブサービスコンピュータシステムは、開発者が選択したタスクフローの表示を受けることができる。
【００７７】
ステップ４３５において、注入された注入ビジネスロジックコードをコンパイルしてロジックインサイト注入コードランタイムにすることができる。コンパイルは、図２のコンパイラ１６０等のコンパイラによって実行することができる。このコンパイルプロセスは、デバッグ機能が所望されるので、通常のコンパイルから変更したものであってもよい。このため、デバッグ機能を、図３に関連して詳述したように構文木レベルのビジネスロジックコードに追加し、コンパイルしてロジックインサイト注入コードランタイムにしてもよい。ステップ４３５における注入コードのコンパイルは、ウェブサービスコンピュータシステムの仮想マシンによってコンパイルおよび／または実行されている１つ以上のランタイムスレッドと同時に発生してもよい。ロジックインサイト注入コードランタイムは、デバッグ機能を有していてもよいが、このような機能の実現において仮想マシンがデバッグモードで実行することを要求しなくてもよい。デバッグ機能は以下に示すもののうちの１つ以上を含み得る。すなわち、ロジックインサイト注入コードランタイムの実行が停止される、ビジネスロジックコード内の１つ以上のブレークポイントを開発者が選択する機能、式ごとに（リアルタイムで）開発者が与えた注入ビジネスロジックコードの実行をステップスルーする機能、実行中に（リアルタイムで）ビジネスロジックコードの式の中にある変数値を見る（および／または修正する）機能、式の実行がいつ開始されるかの表示
を受ける機能、および／または式の実行がいつ完了するかの表示を受ける機能である。他のデバッグ機能も可能である。いくつかの実施形態において、ロジックインサイト注入コードランタイムは、コンパイル済みコードのすべてのタスクフローにデバッグ機能が挿入されるように、コンパイルされる。他の実施形態において、ロジックインサイト注入コードランタイムは、開発者が特に選択したタスクフローにおいてのみデバッグ機能を利用できるように、コンパイルされる。
【００７８】
ステップ４４０において、ウェブサーバの仮想マシンは、ロジックインサイト注入コードランタイムを、ロジックインサイトスレッドとして実行することができる。このため、実行は、この注入コードを与えた開発者コンピュータシステムから遠隔の場所で生じる。ロジックインサイトスレッドの実行は、１つ以上のランタイムスレッドの実行と同時に発生してもよい。仮想マシンは、ロジックインサイトスレッド（および実行されている他のランタイムスレッド）を仮想マシンのランタイムモードで実行することができる。このため、仮想マシンは、すべてのスレッドをランタイムとして実行し、スレッドをデバッグモード実行しない。しかしながら、ロジックインサイトスレッドはデバッグ機能を有する。なぜなら、ロジックインサイトスレッドのコードはコンパイル中に修正されたからである。ロジックインサイトスレッドが仮想マシンに対してランタイムとして機能している間、コンパイル中の修正は、開発者に、デバッグモードで動作している仮想マシンに一般的に関連する機能を与える。ロジックインサイト注入コードランタイムに存在するデバッグ機能は、開発者が１つ以上のブレークポイントをビジネスロジックコード内にセットする（および実行中にブレークポイントに達したときにコードおよび変数値を見る）機能、（リアルタイムの実行において）式ごとに実行中に開発者によって与えられた注入コードをステップスルーする機能、（リアルタイムの実行において）実行中にビジネスロジックコードの式の中にある変数値を見る（および／または修正する）機能、式の実行をいつ開始するかの表示を受ける機能、および／または式の実行がいつ完了するかの表示を受ける機能を、含み得る。
【００７９】
ロジックインサイトスレッドの実行は、偶然実行されているランタイムスレッドのうちのいずれにも、（これがメモリ、処理、およびネットワークリソースを消費する点を除いて）影響を与えないであろう。より具体的には、デバッグ機能、たとえば、開発者がブレークポイントを設定できるようにする機能、または、ロジックインサイトスレッドに関連するビジネスロジック注入コードを式ごとに実行できるようにする機能は、このようなデバッグ機能がランタイムスレッド内にあることを必要としない。同様に、ランタイムスレッドの実行は、ロジックインサイトスレッドの実行に、（これがメモリ、処理、およびネットワークリソースを消費する点を除いて）影響しない。方法４００は、１つのロジックインサイト注入コードランタイムがランタイムモードで動作している仮想マシンによってコンパイルおよび実行されることしか想定していないが、複数のロジックインサイト注入コードがコンパイルおよび／または実行されてもよい。なぜなら、スレッドは、同じウェブサービスコンピュータシステムの同じ仮想マシンによるものだからである。
【００８０】
ステップ４５０において、コードが実行されている間に、仮想マシンが実行する各式を（ロジックインサイト仮想マシンが）検査することにより、これが、ステップ４３０においてデバッグを所望すると開発者が表示したタスクフローに関連するか否か判断することができる。そうであれば、この式についてステップ４６０を実行する。ステップ４６０で、デバッグ機能を開発者コンピュータシステムが利用できるようにする。これは、次の式の実行を許可する入力を待つこと、変数値を開発者コンピュータシステムに出力すること、（ロジックインサイト仮想マシンに格納されていてもよい）開発者が以前に設定した式に関連するブレークポイントを実施すること、実行されている（またはこれから実行されようとしている）式の表示を与えること、および／または変数値として使用すべき入力を受けることを、含み得る。
【００８１】
ステップ４５０において、デバッグされることが所望されていないタスクフローに式が関連していると判断した場合、ステップ４７０を実行する。ステップ４７０において、開発者コンピュータシステムが利用できるデバッグ機能はない。このことは、次のラインのコードの実行を許可する入力を待たないこと（開発者の入力を待たずに実行を続行する）、開発者コンピュータシステムに変数値を出力しないこと、ブレークポイントを実施しないこと、実行されている（またはこれから実行されようとしている）式の表示を与えないこと、および／または変数値として使用すべき入力を受けないまたは処理しないことを、含み得る。ステップ４７０は、ロジックインサイト仮想マシンが、自動的に、実行を続行することを表示する入力を、ロジックインサイトスレッドを実行している仮想マシンに与えることを含み得る。式ごとに実行が続行されるので、ステップ４５０は、この式が開発者がデバッグすることを所望すると表示したタスクフローの一部であるか否か判断するものであると、評価してもよい。
【００８２】
このような実行中に、どの１つ以上のタスクフローをデバッグするかを開発者が修正することを許可してもよい。デバッグの対象として選択したタスクフローのこのような修正は、ステップ４５０で行なった判断を変える可能性がある。たとえば、特定のタスクフローが実行されている間、開発者は、このタスクフローについてのデバッグ機能を可能にするか不能にするか切換えることができる。このような切換えにより、評価する次の式についてステップ４５０の結果が変わる可能性がある。開発者のデバッグの目標が満たされるようこのような切換えを必要な回数行なうことを開発者に許可してもよい。
【００８３】
開発者がデバッグする対象であると表示したタスクフローにおいてロジックインサイトスレッドとしてロジックインサイト注入コードランタイムを実行している間、このスレッドの実行は、実行の続行を許可することをＬＩＶＭが仮想マシンに表示するまで、停止するかまたはループモードになる場合がある。ＬＩＶＭは、式ごとに、この式について開発者が指定したブレークポイントの場所であるポイントに達しない限り、この式の実行の続行を許可することができる。ブレークポイントが存在する場合、実行は、実行の継続を許可するという入力を開発者がＬＩＵＩを介してＬＩＶＭに与えるまで、停止してもよい。ブレークポイントにおいて、変数値および実行すべき式の表示を、ＬＩＶＭを介してＬＩＵＩに与えることができる。いくつかの実施形態において、実行を続行することを開発者がＬＩＵＩを介してＬＩＶＭに表示するまで、選択されたタスクフローにおける各式の後に実行を停止してもよい。
【００８４】
図５は、タスクフローを対象とするデバッグのための方法の別の実施形態を示す。方法５００は、図１および図２それぞれのシステム１００および／またはシステム２００によって実行することができる。方法５００はまた、注入コードをコンパイルし実行するリモートウェブサービスコンピュータシステムと開発者が対話できるようにする他の形態のシステムによって実行してもよい。開発者コンピュータ等の１つ以上のコンピュータシステムを用いて方法５００を実行することができる。方法５００を実行するための手段は、１つ以上のコンピュータシステムおよびネットワークを含む。方法５００の各ステップは、互いに通信する１つ以上の個別のコンピュータを含み得るコンピュータシステムを用いて実行することができる。図１および図２を参照して、方法５００の各ステップは、開発者コンピュータシステム１３０の開発者コンピュータシステムによって実行することができる。方法４００はウェブサービスコンピュータシステムによって実行するが、方法５００のステップは開発者コンピュータシステムによって実行することができる。
【００８５】
ステップ５１０において、ウェブベースインターフェイスを、開発者コンピュータシステムによって開発者に与えることができる。ウェブベースインターフェイスは、方法４００を実行している可能性があるウェブサービスコンピュータシステムから受けてもよい。
ウェブベースインターフェイスにより、開発者は、コンパイルおよび実行のためにウェブサービスコンピュータシステムに注入すべきコードを提供することができる。このコードは、ウェブベースインターフェイスのコードエディタに直接タイピングしてもよく、または、予め記述されたコードの１つ以上のファイルを、ウェブベースインターフェイスを介してウェブサービスコンピュータシステムにアップロードするために選択してもよい。ステップ５２０で、このコードを、ウェブサービスコンピュータシステムに、ウェブベースインターフェイスと１つ以上のネットワークを介して送信することができる。コードをウェブサービスコンピュータシステムに送信することは、方法４００のステップ４１０に対応し得る。
【００８６】
ステップ５３０において、ウェブベースインターフェイスは、タスクフローの選択を開発者に提示することができ、そのタスクフローの間に、ステップ５２０で送信したコードを実行する。ウェブベースインターフェイスはまた、開発者が提供した注入コードをデバッグのためにコンパイルするか否かを開発者に選択させるという選択肢を有していてもよい。ステップ５３０で、ウェブベースインターフェイスを介して、開発者は、注入コードをデバッグすることを指定することができ、開発者は、注入コードを実行してデバッグする１つ以上のタスクフローを指定してもよい。（この例におけるこの目的のために、１つの第１のタスクフローがデバッグの対象として表示され第２のタスクフローはデバッグの対象として選択されなかったと想定する。）いくつかの実施形態において、ユーザは、方法５００における後の時点で、どのタスクフローをデバッグすべきか選択してもよい。加えて、ステップ５３０で、注入コードを開発者に提示してもよく、開発者に、１つ以上のブレークポイントを指定することを許可してもよく、および／またはデバッグすべきタスクフローを、ブレークポイントまたはエラーが発生するまで実行すべきかまたは式ごとに実行すべきか表示することを許可してもよい。ステップ５４０で、注入コードをデバッグする予定でありタスクフローをデバッグする予定であるという表示をウェブサービスコンピュータシステムに送信する。ステップ５４０では、ステップ４２０〜ステップ４７０等の、方法４００のさまざまなステップを、ウェブサービスコンピュータシステムによって実行することができる。したがって、ウェブサービスコンピュータシステムは、ロジックインサイト注入コードランタイムを作成してもよく、ロジックインサイト注入コードランタイムをロジックインサイトスレッド（ランタイムモードにおいてウェブサービスコンピュータシステムの仮想マシンが実行しているロジックインサイトスレッド）として実行してもよい。
【００８７】
ステップ５５０において、デバッグ機能を、開発者がデバッグの対象として選択したタスクフローのために、開発者コンピュータシステムによって提示することができる。デバッグ機能は、コンパイル済みの注入コードに対応するタスクフローの部分に対してのみ与えることができる。デバッグ機能は、デバッグの対象として選択されたタスクフローの実行が開始されて初めて（または選択されたタスクフロー内のブレークポイントに達したときに）提示することができる。選択されていない他のタスクフローについて、ロジックインサイトスレッドは、少なくとも開発者の視点から、ランタイムスレッドとして実行してもよい。デバッグ機能は、ウェブベースインターフェイスの一部としてのウェブブラウザ内のＬＩＵＩが提示してもよい。デバッグ機能は、開発者が、変数および関連する変数値の表示（および場合によってはこのような変数値を修正する機会）を提示されること、および、実行されている（またはこれから実行されるまたは直前に実行された）注入コード内の式の表示を提示されることを含み得る。デバッグ機能はさらに、１つの式について実行を続行するという選択肢を含み得る（そうすることによりロジックインサイトスレッドの実行をステップスルーできるようする）。もう１つの選択肢は、ブレークポイントまたはエラーが発生するまで実行を続行できるという選択肢である。実行中、ウェブサービスコンピュータシステムは、ステップ４５０〜ステップ４７０を実行している可能性がある。すなわち、注入コードランタイムを実行し、選択されたタスクフローに対するデバッグ
機能を与える。他のタスクフロー中において、ＬＩＶＭは、仮想マシンに対し、実行を自動的に（開発者の入力なしで）続行することを命令してもよい。
【００８８】
ロジックインサイトスレッドの実行中に、開発者は、デバッグする予定のタスクフローの選択を修正してもよい。開発者に提示されるウェブインターフェイスを介し、デバッグの対象として、さらに他の、より少ない、または異なるタスクフローを選択してもよい。このようなデバッグするタスクフローの修正は、ウェブサービスコンピュータシステムに送ることができる。図２を参照して、タスクフローアナライザ２１２は、実行すべき（実行中の）更新されたタスクフローを受けた後に、非選択タスクフローに対してデバッグ機能を開発者に与えることをＬＩＶＭに実行させてもよい。ステップ５７０で、修正後の選択された１つ以上のタスクフローに対し、デバッグ機能が開発者コンピュータシステムおよびウェブベースインターフェイスを介して、開発者に提供される。開発者は引続き、ロジックインサイトスレッドがウェブサービスコンピュータシステムによって実行されるときに、デバッグすべきタスクフローを修正してもよい。
【００８９】
方法５００を実行している間に、（同一のまたは異なるロジックインサイト注入コードランタイムに基づく）１つ以上の他のロジックインサイトスレッド、および、１つ以上の注入コードランタイムを、同時に、ウェブサービスコンピュータシステムの仮想マシンによって、１人以上の他の開発者および／またはユーザに対して実行し得ることが、理解されるはずである。したがって、ウェブサービスコンピュータシステムは、ランタイムモードで機能するウェブサービスコンピュータシステムの仮想マシンで、同時に、複数の開発者／ユーザに対し、コンパイル、実行（デバッグ機能有りまたは無し）を提供することができる。
【００９０】
図６〜図８は、ユーザと開発者がウェブサービスコンピュータシステムと遠隔から対話できるようにする分散型システムを如何にして実装し得るかをさらに詳細に示す。図６は、リモート開発者コンピュータシステムの使用を許可する分散型システム６００の実施形態を示す。例示された実施形態では、分散型システム６００は、（ユーザおよび／または開発者コンピュータシステムを表わし得る）１つ以上のクライアントコンピューティングデバイス６０２，６０４，６０６，および６０８を含み、これらは、１つ以上のネットワーク６１０を通じて、ウェブブラウザ、専用クライアント（たとえば、Ｏｒａｃｌｅ（登録商標）  Ｆｏｒｍｓ）などのクライアントアプリケーションを実行および動作させるように構成される。（ウェブサービスコンピュータシステムであってもよい）サーバ６１２は、ネットワーク６１０を介してリモートクライアントコンピューティングデバイス６０２，６０４，６０６，および６０８と通信可能に結合し得る。
【００９１】
さまざまな実施形態において、サーバ６１２は、システムのコンポーネントの１つ以上によって提供される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させることができる。一部の実施形態において、これらのサービスは、ウェブベースまたはクラウドサービスとして、またはサービス（ＳａａＳ）モデルとしてのソフトウェアの下で、クライアントコンピューティングデバイス６０２，６０４，６０６，および／または６０８のユーザに提供し得る。クライアントコンピューティングデバイス６０２、６０４および６０６，および／または６０８を動作させるユーザはひいては、１つ以上のクライアントアプリケーションを利用して、サーバ６１２と対話して、これらのコンポーネントによって提供されるサービスを利用し得る。
【００９２】
図に示される構成において、システム６００のソフトウエアコンポーネント６１８、６２０および６２２は、サーバ６１２上で実施されるものとして示される。他の実施形態において、システム６００のコンポーネントの１つ以上および／またはこれらのコンポーネントによって提供されるサービスは、クライアントコンピューティングデバイス６０２，
６０４，６０６，および／または６０８のうち１つ以上によっても実施し得る。クライアントコンピューティングデバイスを動作させるユーザは次いで、１つ以上のクライアントアプリケーションを利用して、これらのコンポーネントによって提供されるサービスを使用し得る。これらのコンポーネントは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせにおいて実施し得る。分散型システム６００とは異なり得るさまざまな異なるシステムコンフィギュレーションが可能であることが認識されるべきである。図に示される実施形態は、したがって実施形態のシステムを実施するための分散型システムの一例であり、限定するものとは意図されていない。
【００９３】
クライアントコンピューティングデバイス６０２，６０４，６０６，および／または６０８は、ポータブルハンドヘルドデバイス（たとえばｉＰｈｏｎｅ（登録商標）、携帯電話、ｉＰａｄ（登録商標）、コンピューティングタブレット、携帯情報端末（ＰＤＡ））、またはウェアラブルデバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウンテッドディスプレイ）、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ  Ｍｏｂｉｌｅ（登録商標）などの実行ソフトウェア、および／またはｉＯＳ（登録商標）、ウィンドウズフォン、アンドロイド、ＢｌａｃｋＢｅｒｒｙ（登録商標）  １０、Ｐａｌｍ  ＯＳ等といったさまざまなモバイルオペレーティングシステムであり得、インターネット、電子メール、ショートメッセージサービス（ＳＭＳ）、Ｂｌａｃｋｂｅｒｒｙ（登録商標）、または他の通信プロトコルに対応する。クライアントコンピューティングデバイスは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）、および／またはＬｉｎｕｘ（登録商標）オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび／またはラップトップコンピュータを例として含む汎用パーソナルコンピュータであってもよい。クライアントコンピューティングデバイスは、たとえばＧｏｏｇｌｅ  Ｃｈｒｏｍｅ  ＯＳなどのさまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステムを含み、限定されないさまざまな商業的に利用可能なＵＮＩＸ（登録商標）またはＵＮＩＸのようなオペレーティングシステムのいずれかを実行するワークステーションコンピュータであってもよい。代替的に、または加えて、クライアントコンピューティングデバイス６０２，６０４，６０６，および６０８は、ネットワーク６１０を通じて通信可能な、シンクライアントコンピュータ、インターネット対応ゲーミングシステム（たとえばＫｉｎｅｃｔ（登録商標）ジェスチャー入力デバイスの有無に関わらずＭｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）ゲーミングコンソール）、および／またはパーソナルメッセージングデバイスなどの任意の他の電子デバイスであってもよい。
【００９４】
４つのクライアントコンピューティングデバイスを用いて例示的な分散型システム６００が示されているが、任意の数のクライアントコンピューティングデバイスをサポートし得る。センサーを有するデバイスなどの他のデバイスが、サーバ６１２と対話してもよい。
【００９５】
分散型システム６００のネットワーク６１０は、ＴＣＰ／ＩＰ（Transmission control
protocol/Internet protocol）、ＳＮＡ（systems network architecture）、ＩＰＸ（Internet packet exchange）、ＡｐｐｌｅＴａｌｋ（登録商標）などを含みこれらに限定
されないさまざまな商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであってもよい。単に例示であるが、ネットワーク６１０は、イーサネット（登録商標）および／またはトークンリングなどに基づくものなどの、ローカルエリアネットワーク（ＬＡＮ）であってもよい。ネットワーク６１０は、広域ネットワークおよびインターネットであってもよい。これは、仮想プライベートネットワーク（ＶＰＮ）を含むがこれに限定されない仮想ネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網（ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（たとえば、Institute of Ele
ctrical and Electronics （ＩＥＥＥ）８０２．１１プロトコルスイート、Ｂｌｕｅｔｏｏｔｈ（登録商標）、および／または任意の他の無線プロトコルのうちのいずれかにおいて動作するネットワーク）、および／またはこれらおよび／または他のネットワークの組み合わせを含むことができる。
【００９６】
サーバ６１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（たとえば、ＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウントサーバなどを含む）、サーバファーム、サーバクラスタ、または任意の他の適切な構成および／または組み合わせで構成し得る。さまざまな実施形態において、サーバ６１２は、上記の開示において記載される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合させることができる。たとえば、サーバ６１２は、本開示の実施形態に係る、上記の処理を行なうためのサーバに対応し得る。
【００９７】
サーバ６１２は、上記のいずれかを含むオペレーティングシステム、ならびに商業的に利用可能なサーバオペレーティングシステムのいずれかを実行し得る。また、サーバ６１２は、ＨＴＴＰ（hypertext transport protocol）サーバ、ＦＴＰ（file transfer protocol）サーバ、ＣＧＩ（common gateway interface）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含む、さまざまな付加的なサーバアプリケーションおよび／またはミッドティアアプリケーションのいずれかを実行し得る。例示的なデータベースサーバは、Ｏｒａｃｌｅ、Ｍｉｃｒｏｓｏｆｔ、Ｓｙｂａｓｅ、ＩＢＭ（International Business Machines）などから商業的に入手可能なものも含むが、これらに限定されない
。
【００９８】
一部の実施において、サーバ６１２は、クライアントコンピューティングデバイス６０２，６０４，６０６，および６０８のユーザから受信されたデータフィードおよび／またはイベントアップデートを分析し統合するための１つ以上のアプリケーションを含み得る。一例として、データフィードおよび／またはイベントアップデートは、限定はしないが、１つ以上の第三者情報源および連続データストリームから受信されたＴｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）更新、またはリアルタイム更新を含み得る。これらはデータアプリケーション、株式相場ディスプレイデバイス、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車トラフィック監視などに関連するリアルタイムイベントを含み得る。サーバ６１２は、クライアントコンピューティングデバイス６０２，６０４，６０６，および６０８の１つ以上のディスプレイデバイスを介してデータフィードおよび／またはリアルタイムイベントを表示するための１つ以上のアプリケーションも含み得る。
【００９９】
また、分散型システム６００は、１つ以上のデータベース６１４および６１６を含み得る。データベース６１４および６１６は、さまざまな場所に置かれ得る。たとえば、データベース６１４および６１６のうちの１つ以上は、サーバ６１２に対してローカルの（および／またはそこに置かれる）非一時的な記録媒体上に置かれ得る。代替的に、データベース６１４および６１６は、サーバ６１２から遠隔に設けられてもよく、ネットワークベースまたは専属接続を介してサーバ６１２と通信し得る。一組の実施形態において、データベース６１４および６１６は、ストレージエリアネットワーク（ＳＡＮ）内に置かれ得る。同様に、サーバ６１２に帰する機能を行なうために必要な任意のファイルを、適宜、サーバ６１２にローカルに格納することができる、および／または遠隔的に格納することができる。一組の実施形態において、データベース６１４および６１６は、ＳＱＬフォーマットの命令に応答してデータを記憶、更新、および検索するように適合される、Ｏｒａｃｌｅ（登録商標）によって提供されるデータベースなどのリレーショナルデータベース
を含み得る。
【０１００】
図７は、サービスをクラウドサービスとして提供し得るシステム環境の実施形態のブロック図を示す。例示される実施形態では、システム環境７００は、クラウドサービスを提供するクラウドインフラストラクチャシステム７０２と対話するためにユーザによって用いられ得る１つ以上のクライアントコンピューティングデバイス７０４，７０６，および７０８を含む。クライアントコンピューティングデバイスは、クラウドインフラストラクチャシステム７０２と対話してクラウドインフラストラクチャシステム７０２によって提供されるサービスを使用するためにクライアントコンピューティングデバイスのユーザによって用いられ得るウェブブラウザ、専用クライアントアプリケーション（たとえばＯｒａｃｌｅ（登録商標）  Ｆｏｒｍｓ）または何らかの他のアプリケーションなどのクライアントアプリケーションを動作させるように構成し得る。
【０１０１】
図に示されるクラウドインフラストラクチャシステム７０２は、図に示されているもの以外のコンポーネントを有し得ることが認識されるべきである。さらに、図に示される実施形態は、開示の実施形態を組込み得るクラウドインフラストラクチャシステムの単なる一例である。一部の他の実施形態において、クラウドインフラストラクチャシステム７０２は図に示されるよりも多いかまたは少ないコンポーネントを有してもよいし、２つ以上のコンポーネントを組み合わせてもよいし、または異なる構成または配置のコンポーネントを有してもよい。
【０１０２】
クライアントコンピューティングデバイス７０４，７０６，および７０８は、６０２，６０４，６０６，および６０８について上記したのと同様のデバイスであってもよい。典型的なシステム環境７００は、３つのクライアントコンピューティングデバイスを用いて例示的なシステム環境７００が示されているが、任意の数のクライアントコンピューティングデバイスをサポートすることができる。センサーを有するデバイスなどの他のデバイスが、クラウドインフラストラクチャシステム７０２と対話し得る。
【０１０３】
ネットワーク７１０は、クライアント７０４，７０６、７０８とクラウドインフラストラクチャシステム７０２との間のデータの通信および交換を容易にし得る。各ネットワークは、ネットワーク６１０について上記したものを含むさまざまな商業的に利用可能なプロトコルのいずれかを使用してデータ通信をサポートすることができる、当業者によく知られた任意のタイプのネットワークであってもよい。
【０１０４】
クラウドインフラストラクチャシステム７０２は、サーバ６１２について上記したものを含み得る１つ以上のコンピュータおよび／またはサーバを含み得る。特定の実施形態において、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータストレージおよびバックアップソリューション、ウェブベースの電子メールサービス、ホストされたオフィスパッケージおよびドキュメントコラボレーションサービス、データベース処理、管理された技術サポートサービス等といったクラウドインフラストラクチャシステムのユーザに対してオンデマンドで利用可能とされる多数のサービスを含み得る。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザのニーズを満たすために動的にスケール変更することができる。クラウドインフラストラクチャシステムによって提供されるサービスの具体的なインスタンス化は、本明細書において「サービスインスタンス」と称される。一般に、クラウドサービスプロバイダのシステムから、インターネットなどの通信ネットワークを介してユーザに利用可能とされる任意のサービスは、「クラウドサービス」と称される。典型的に、パブリッククラウド環境において、クラウドサービスプロバイダのシステムを構築するサーバおよびシステムは、カスタマー自身のオンプレミスサーバおよびシステムとは異なる。たとえば、クラウドサービスプロバイダのシステムはアプリケーションをホストしてもよく、ユーザは、イ
ンターネットなどの通信ネットワークを介してオンデマンドにアプリケーションをオーダし、使用し得る。
【０１０５】
一部の例において、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、クラウドベンダーによってユーザに提供される記憶部、ホストされたデータベース、ホストされたウェブサーバ、ソフトウェアアプリケーション、または他のサービスに対する保護されたコンピュータネットワークアクセスを含み得るか、または当技術において他の方法で知られている。たとえば、サービスは、インターネットを通じてクラウド上の遠隔ストレージに対するパスワードで保護されたアクセスを含むことができる。別の例として、サービスは、ネットワーク化されたデベロッパーによる私的使用のためのウェブサービスベースのホストされたリレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含むことができる。別の例として、サービスは、クラウドベンダーのウェブサイト上にホストされた電子メールソフトウェアアプリケーションに対するアクセスを含むことができる。
【０１０６】
特定の実施形態において、クラウドインフラストラクチャシステム７０２は、セルフサービスで、申込みに基づき、弾力的に拡張可能で、確実で、非常に有効で、安全なやり方でカスタマーに与えられるアプリケーション、ミドルウェアおよびデータベースサービス提供物一式を含み得る。そのようなクラウドインフラストラクチャシステムの一例は、本願の譲受人によって提供されるＯｒａｃｌｅ（登録商標）  Ｐｕｂｌｉｃ  Ｃｌｏｕｄである。
【０１０７】
さまざまな実施形態において、クラウドインフラストラクチャシステム７０２は、クラウドインフラストラクチャシステム７０２によって提供されるサービスに対するカスタマーの申込みを自動的にプロビジョニングし、管理し、かつトラックするように適合させることができる。クラウドインフラストラクチャシステム７０２は、異なるデプロイメントモデルを介してクラウドサービスを提供し得る。たとえば、サービスは、（たとえばＯｒａｃｌｅ所有の）クラウドサービスを販売する組織によってクラウドインフラストラクチャシステム７０２が所有されるパブリッククラウドモデルの下で提供されてもよく、サービスは、一般大衆または異なる産業企業にとって利用可能とされる。別の例として、サービスは、クラウドインフラストラクチャシステム７０２が単一の組織のためにのみ動作され、組織内の１つ以上のエンティティのためのサービスを提供し得る個人のクラウドモデルの下で提供し得る。また、クラウドサービスは、クラウドインフラストラクチャシステム７０２およびクラウドインフラストラクチャシステム７０２によって提供されるサービスが、関連するコミュニティー内の一部の組織によって共有されるコミュニティークラウドモデルの下で提供し得る。また、クラウドサービスは、２つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルの下で提供し得る。
【０１０８】
一部の実施形態において、クラウドインフラストラクチャシステム７０２によって提供されるサービスは、Ｓｅｒｖｉｃｅ（ＳａａＳ）カテゴリーとしてのソフトウェア、Ｓｅｒｖｉｃｅ（ＰａａＳ）カテゴリーとしてのプラットフォーム、Ｓｅｒｖｉｃｅ（ＩａａＳ）カテゴリーとしてのインフラストラクチャ、またはハイブリッドサービスを含む他のカテゴリーのサービスの下で提供される１つ以上のサービスを含み得る。カスタマーは、クラウドインフラストラクチャシステム７０２によって提供される１つ以上のサービスを申込みオーダによってオーダし得る。クラウドインフラストラクチャシステム７０２は次いで、カスタマーの申込みオーダにおけるサービスを提供するための処理を行なう。
【０１０９】
一部の実施形態において、クラウドインフラストラクチャシステム７０２によって提供されるサービスは、限定はしないが、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含み得る。一部の例において、アプリケーシ
ョンサービスは、クラウドインフラストラクチャシステムによってＳａａＳプラットフォームを介して提供し得る。ＳａａＳプラットフォームは、ＳａａＳカテゴリーに入るクラウドサービスを提供するように構成し得る。たとえば、ＳａａＳプラットフォームは、統合された開発およびデプロイメントプラットフォーム上のオンデマンドのアプリケーション一式を構築し、伝える能力を提供し得る。ＳａａＳプラットフォームは、ＳａａＳサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャを管理し、制御し得る。ＳａａＳプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャシステム上で実行するアプリケーションを利用することができる。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、アプリケーションサービスを得ることができる。さまざまな異なるＳａａＳサービスが提供し得る。例は、限定はしないが、大きな組織のための販売実績管理、企業統合およびビジネス上のフレキシビリティのためのソリューションを提供するサービスを含む。
【０１１０】
一部の実施形態において、プラットフォームサービスは、クラウドインフラストラクチャシステムによってＰａａＳプラットフォームを介して提供し得る。ＰａａＳプラットフォームは、ＰａａＳカテゴリーに入るクラウドサービスを提供するように構成し得る。プラットフォームサービスの例は、共有の共通アーキテクチャ上の既存のアプリケーションを組織（Ｏｒａｃｌｅ（登録商標）など）が統合することを可能にするサービスと、プラットフォームによって提供される共有サービスを活用する新しいアプリケーションを構築する能力とを含み得る。ＰａａＳプラットフォームは、ＰａａＳサービスを提供するための基礎的なソフトウェアおよびインフラストラクチャを管理し、制御し得る。カスタマーは、カスタマーが別個のライセンスおよびサポートを購入する必要なしに、クラウドインフラストラクチャシステムによって提供されるＰａａＳサービスを得ることができる。プラットフォームサービスの例は、限定はしないが、Ｏｒａｃｌｅ（登録商標）  Ｊａｖａ
Ｃｌｏｕｄ  Ｓｅｒｖｉｃｅ（ＪＣＳ）、Ｏｒａｃｌｅ（登録商標）  Ｄａｔａｂａｓｅ  Ｃｌｏｕｄ  Ｓｅｒｖｉｃｅ（ＤＢＣＳ）他を含む。
【０１１１】
ＰａａＳプラットフォームによって提供されるサービスを利用することによって、カスタマーは、クラウドインフラストラクチャシステムによってサポートされたプログラミング言語およびツールを採用し、また、デプロイされたサービスを制御することができる。一部の実施形態において、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービス（たとえばＯｒａｃｌｅ  Ｆｕｓｉｏｎ  Ｍｉｄｄｌｅｗａｒｅ  ｓｅｒｖｉｃｅｓ）、およびＪａｖａクラウドサービスを含み得る。一実施形態において、データベースクラウドサービスは、組織がデータベースリソースをプールし、かつデータベースクラウドの形態でのサービスとしてカスタマーにデータベースを提示することを可能にする共有サービスデプロイメントモデルをサポートし得る。ミドルウェアクラウドサービスは、カスタマーがさまざまなビジネスアプリケーションを展開しデプロイするためのプラットフォームを提供してもよく、Ｊａｖａクラウドサービスは、クラウドインフラストラクチャシステムにおいてカスタマーがＪａｖａアプリケーションをデプロイするためのプラットフォームを提供し得る。
【０１１２】
さまざまな異なるインフラストラクチャサービスは、クラウドインフラストラクチャシステムにおいてＩａａＳプラットフォームによって提供し得る。インフラストラクチャサービスは、ＳａａＳプラットフォームおよびＰａａＳプラットフォームによって提供されるサービスを利用するカスタマーのための記憶部、ネットワーク、および他の基本のコンピューティングリソースといった基礎的なコンピューティングリソースの管理および制御を容易にする。
【０１１３】
特定の実施形態において、クラウドインフラストラクチャシステム７０２は、クラウドインフラストラクチャシステムのカスタマーにさまざまなサービスを提供するために用いられるリソースを提供するためのインフラストラクチャリソース７３０を含み得る。一実施形態において、インフラストラクチャリソース７３０は、ＰａａＳプラットフォームおよびＳａａＳプラットフォームによって提供されるサービスを実行するためのサーバ、記憶部、およびネットワークのリソースといったハードウェアの予め統合され最適化された組み合わせを含み得る。
【０１１４】
一部の実施形態において、クラウドインフラストラクチャシステム７０２におけるリソースは、複数のユーザによって共有され、要求ごとに動的に再び割当てられ得る。加えて、リソースは、異なるタイムゾーンのユーザに割当てられ得る。たとえば、クラウドインフラストラクチャシステム７３０は、第１のタイムゾーンでの第１の組のユーザに特定数の時間クラウドインフラストラクチャシステムのリソースを利用させ、次いで異なるタイムゾーンに位置する別の組のユーザに対する同じリソースの再割当てを可能にすることが可能であり、それによってリソースの利用を最大化し得る。
【０１１５】
特定の実施形態において、クラウドインフラストラクチャシステム７０２の異なるコンポーネントまたはモジュールによって、かつクラウドインフラストラクチャシステム７０２により提供されるサービスによって共有される多数の内部共有サービス７３２が提供し得る。これらの内部共有サービスは、限定はしないが、セキュリティおよびアイデンティティサービス、インテグレーションサービス、企業リポジトリサービス、企業マネージャーサービス、ウィルススキャン、およびホワイトリストサービス、高アベイラビリティ、保存後修復サービス、クラウドサポートを可能にするためのサービス、電子メールサービス、通知サービス、ファイル転送サービス等を含み得る。
【０１１６】
特定の実施形態において、クラウドインフラストラクチャシステム７０２は、クラウドインフラストラクチャシステムにおいてクラウドサービス（たとえばＳａａＳ、ＰａａＳおよびＩａａＳサービス）の包括的な管理を提供し得る。一実施形態において、クラウド管理機能性は、クラウドインフラストラクチャシステム７０２によって受信されたカスタマーの申込みをプロビジョニングし、管理し、トラックする機能を含み得る。
【０１１７】
一実施形態において、図に示されるように、クラウド管理機能性は、オーダ管理モジュール７２０、オーダオーケストレーションモジュール７２２、オーダプロビジョニングモジュール７２４、オーダ管理および監視モジュール７２６、およびアイデンティティ管理モジュール７２８といった１つ以上のモジュールによって提供し得る。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、および／または任意の他の適切な配置および／または組み合わせであってもよい１つ以上のコンピュータおよび／またはサーバを含み得るか、またはそれらを用いて提供し得る。
【０１１８】
典型的な動作７３４において、クライアントデバイス７０４、７０６、または７０８などのクライアントデバイスを用いるカスタマーは、クラウドインフラストラクチャシステム７０２によって提供される１つ以上のサービスを要求し、クラウドインフラストラクチャシステム７０２によって提示される１つ以上のサービスに申込むためのオーダを行なうことによって、クラウドインフラストラクチャシステム７０２と対話し得る。たとえば、このような構成は、注入すべき開発者のコードのコンパイルおよび実行をウェブサービスコンピュータシステムに行なわせるために、カスタマーおよび／または開発者が、使用してもよい。特定の実施形態において、カスタマーは、クラウドユーザインターフェイス（ＵＩ）、クラウドＵＩ７１２、クラウドＵＩ７１４、および／またはクラウドＵＩ７１６にアクセスし、これらのＵＩを介して申込みオーダを行ない得る。カスタマーがオーダを行ったことに応じてクラウドインフラストラクチャシステム７０２によって受信されるオ
ーダ情報は、カスタマーを識別する情報と、カスタマーが申込むつもりのクラウドインフラストラクチャシステム７０２によって提供される１つ以上のサービスとを含み得る。カスタマーによってオーダが行なわれた後、オーダ情報は、クラウドＵＩ７１２，７１４，および／または７１６によって受信される。
【０１１９】
動作７３６において、オーダはオーダデータベース７１８に記憶される。オーダデータベース７１８は、クラウドインフラストラクチャシステム７１８によって動作され、他のシステムエレメントとともに動作される一部のデータベースの１つであってもよい。動作７３８において、オーダ情報はオーダ管理モジュール７２０に転送される。一部のインスタンスにおいて、オーダ管理モジュール７２０は、オーダを確認し、確認後にオーダを記入するなどの、オーダに関連する課金および会計機能を行なうように構成し得る。動作７４０において、オーダに関する情報がオーダオーケストレーションモジュール７２２に伝えられる。オーダオーケストレーションモジュール７２２は、カスタマーによって行なわれたオーダのためのサービスおよびリソースのプロビジョニングを調整するためにオーダ情報を利用し得る。一部のインスタンスにおいて、オーケストレーションモジュール７２２は、リソースのプロビジョニングをオーケストレーションして、申込まれたサービスをオーダプロビジョニングモジュール７２４のサービスを用いてサポートし得る。
【０１２０】
特定の実施形態において、オーダオーケストレーションモジュール７２２は、各オーダに関連付けられるビジネスプロセスの管理を可能にし、オーダがプロビジョニングに進むべきかどうか判定するためにビジネスロジックを適用する。動作７４２において、新規申込みのためのオーダを受信すると、オーダオーケストレーションモジュール７２２は、オーダプロビジョニングモジュール７２４に要求を送信して、リソースを割当て、申込みオーダを遂行するために必要とされるリソースを構成する。オーダプロビジョニングモジュール７２４は、カスタマーによってオーダされたサービスのためのリソースの割当てを可能にする。オーダプロビジョニングモジュール７２４は、クラウドインフラストラクチャシステム７００によって提供されるクラウドサービスと、要求されたサービスを提供するためにリソースをプロビジョニングのために用いられる物理的な実施層との間に抽象化レベルを提供する。オーダオーケストレーションモジュール７２２はしたがって、サービスおよびリソースが実際にオンザフライでプロビジョニングされるかまたは予めプロビジョニングされ、かつ要求後に割当て／アサインされたかどうかといった実施詳細から分離し得る。
【０１２１】
動作７４４において、ひとたびサービスおよびリソースがプロビジョニングされると、プロビジョニングされたサービスの通知が、クラウドインフラストラクチャシステム７０２のオーダプロビジョニングモジュール７２４によってクライアントデバイス７０４、７０６および／または７０８上のカスタマーに送信し得る。動作７４６において、カスタマーの申込みオーダは、オーダ管理および監視モジュール７２６によって管理され、追跡されてもよい。一部のインスタンスにおいて、オーダ管理および監視モジュール７２６は、用いられる記憶部の量、転送されるデータ量、ユーザ数、ならびにシステムアップタイムおよびシステムダウンタイムの量といった、申込みオーダにおけるサービスのための使用統計を収集するように構成し得る。
【０１２２】
特定の実施形態において、クラウドインフラストラクチャシステム７００は、アイデンティティ管理モジュール７２８を含み得る。アイデンティティ管理モジュール７２８はクラウドインフラストラクチャシステム７００へのアクセス管理および権限付与のサービスといったアイデンティティサービスを提供するように構成し得る。一部の実施形態において、アイデンティティ管理モジュール７２８は、クラウドインフラストラクチャシステム７０２によって提供されるサービスを利用したいカスタマーに関する情報を制御し得る。そのような情報は、そのようなカスタマーのアイデンティティを認証する情報と、どの動
作によってさまざまなシステムリソース（たとえばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど）に対してそれらのカスタマーが行なうことを権限付与されるかを記述する情報とを含むことができる。アイデンティティ管理モジュール７２８は、各カスタマーについての、またどのように誰によってその記述情報がアクセスされ変更することができるかについての記述情報の管理も含み得る。
【０１２３】
図８は、ウェブサービスコンピュータシステム、開発者コンピュータシステム、およびユーザコンピュータシステム等の本明細書で詳述したさまざまな実施形態を実装するために使用し得る、コンピュータシステム８００の実施形態を示す。上述のコンピュータシステムはコンピュータシステム８００等のコンピュータの１つ以上のインスタンスを含み得ることが理解されるはずである。たとえば、一群のサーバがウェブサービスコンピュータシステムの機能を実行してもよい。図に示されるように、コンピュータシステム８００は、バスサブシステム８０２を介して多くの周辺サブシステムと通信する処理部８０４を含む。これらの周辺サブシステムは、処理加速部８０６、Ｉ／Ｏサブシステム８０８、記憶サブシステム８１８、および通信サブシステム８２４を含み得る。記憶サブシステム８１８は、有形のコンピュータ読取可能記録媒体８２２およびシステムメモリ８１０を含む。
【０１２４】
バスサブシステム８０２は、コンピュータシステム８００のさまざまなコンポーネントおよびサブシステムを意図されるとおりに互いに通信させるためのメカニズムを提供する。バスサブシステム８０２は、単母線として概略的に示されるが、バスサブシステムの代替的な実施形態は複数のバスを利用し得る。バスサブシステム８０２は、多様なバスアーキテクチャのうちのいずれかを用いて、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含むいくつかのタイプのバス構造のいずれかであってもよい。たとえば、そのようなアーキテクチャは、ＩＥＥＥ  Ｐ１３８６．１規格で製造されたMezzanineバスとして実施することができるIndustry Standard Architecture（ＩＳＡ）バス
、Micro Channel Architecture（ＭＣＡ）バス、Enhanced ISA（ＥＩＳＡ）バス、Video Electronics Standards Association（ＶＥＳＡ）ローカルバス、およびPeripheral Component Interconnect（ＰＣＩ）を含み得る。
【０１２５】
１つ以上の集積回路（たとえば従来のマイクロプロセッサまたはマイクロコントローラ）として実施することができる処理部８０４は、コンピュータシステム８００の動作を制御する。１つ以上のプロセッサが処理部８０４に含まれ得る。これらのプロセッサは、シングルコアまたはマルチコアプロセッサを含み得る。特定の実施形態において、処理部８０４は、各処理部に含まれるシングルまたはマルチコアプロセッサを有する１つ以上の独立した処理部８３２および／または８３４として実施し得る。他の実施形態において、処理部８０４は、２つのデュアルコアプロセッサをシングルチップに統合することによって形成されたクアッドコア処理部としても実施し得る。
【０１２６】
さまざまな実施形態において、処理部８０４はプログラムコードに応じてさまざまなプログラムを実行することができ、複数の同時に実行するプログラムまたはプロセスを維持することができる。任意の所与の時間において、実行されるべきプログラムコードの一部またはすべては、プロセッサ８０４におよび／または記憶サブシステム８１８に存在し得る。適切なプログラミングによって、プロセッサ８０４は、上記したさまざまな機能を提供することができる。コンピュータシステム８００は加えて、デジタル信号プロセッサ（ＤＳＰ）、専用プロセッサなどを含むことができる処理加速部８０６を含み得る。
【０１２７】
Ｉ／Ｏサブシステム８０８は、ユーザインターフェイス入力デバイスおよびユーザインターフェイス出力デバイスを含み得る。ユーザインターフェイス入力デバイスは、キーボード、マウスまたはトラックボールなどのポインティングデバイス、ディスプレイに組込まれたタッチパッドまたはタッチスクリーン、スクロールホイール、クリックホイール、
ダイヤル、ボタン、スイッチ、キーパッド、音声コマンド認識システム付きオーディオ入力デバイス、マイクロフォン、および他の種類の入力デバイスを含み得る。ユーザインターフェイス入力デバイスは、たとえば、ジェスチャーおよび口頭での指示を用いた生来のユーザインターフェイスによって、Ｍｉｃｒｏｓｏｆｔ  Ｘｂｏｘ（登録商標）３６０ゲームコントローラなどの入力デバイスをユーザが制御しそれと対話することを可能にするＭｉｃｒｏｓｏｆｔ  Ｋｉｎｅｃｔ（登録商標）モーションセンサなどの動き検知および／またはジェスチャー認識装置を含み得る。ユーザインターフェイス入力デバイスは、ユーザから目の動作（たとえば撮影および／またはメニュー選択を行っている間の「まばたき」）を検出し、アイジェスチャーを入力デバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標））への入力として変換するＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）まばたき検出器などのアイジェスチャー認識装置を含み得る。加えて、ユーザインターフェイス入力デバイスは、ユーザが音声コマンドによって音声認識システム（たとえばＳｉｒｉ（登録商標）ナビゲーター）と対話することを可能にする音声認識検知装置を含み得る。
【０１２８】
ユーザインターフェイス入力デバイスは、限定はしないが、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびスピーカーなどのオーディオ／ビジュアル装置、デジタルカメラ、デジタルビデオカメラ、ポータブルメディアプレイヤー、ウェブカメラ、イメージスキャナ、指紋スキャナ、バーコードリーダー、３Ｄスキャナ、３Ｄプリンター、レーザー測距装置、およびアイゲイズトラッキング装置を含み得る。加えて、ユーザインターフェイス入力デバイスは、たとえば、コンピュータ断層撮影装置、磁気共鳴画像装置、ポジトロン断層撮影装置、医療用超音波検査装置などの医療用撮像入力デバイスを含み得る。ユーザインターフェイス入力デバイスは、たとえば、ＭＩＤＩキーボード、デジタル楽器などといった音声入力装置も含み得る。
【０１２９】
ユーザインターフェイス出力デバイスは、ディスプレイサブシステム、表示灯、または音声出力装置などの非視覚的ディスプレイを含み得る。ディスプレイサブシステムは、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）またはプラズマディスプレイを用いるものなどのフラットパネルデバイス、投影デバイス、タッチスクリーンなどであってもよい。一般に、「出力デバイス」という用語の使用は、コンピュータシステム８００からユーザまたは他のコンピュータに情報を出力するためのあらゆる可能な種類の装置およびメカニズムを含むことが意図されている。たとえば、ユーザインターフェイス出力デバイスは、限定はしないが、モニタ、プリンター、スピーカー、ヘッドホン、カーナビ、プロッタ、音声出力デバイス、およびモデムといった、テキスト、図形、およびオーディオ／ビデオ情報を視覚的に伝えるさまざまなディスプレイデバイスを含み得る。
【０１３０】
コンピュータシステム８００は、現在システムメモリ８１０内にあるものとして示される、ソフトウェア要素を含む記憶サブシステム８１８を含み得る。システムメモリ８１０は、処理部８０４上でローディング可能および実行可能なプログラム命令ならびにこれらのプログラムの実行時に生成されるデータを記憶し得る。
【０１３１】
コンピュータシステム８００の構成およびタイプに応じて、システムメモリ８１０は、揮発性（ランダムアクセスメモリ（ＲＡＭ）など）および／または不揮発性（読取専用メモリ（ＲＯＭ）、フラッシュメモリなど）であってもよい。ＲＡＭは、処理部８０４に直ちにアクセス可能であり、かつ／または処理部８０４によって現在動作され実行されているデータおよび／またはプログラムモジュールを典型的に含む。一部の実施において、システムメモリ８１０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）またはダイナミックランダムアクセスメモリ（ＤＲＡＭ）などの複数の異なるタイプのメモリを含み得る。一部の実施において、起動中などにコンピュータシステム８００内の要素間で情報を転送するのを支援する基本的なルーチンを含んでいる基本入力／出力システム（ＢＩＯＳ
）は、典型的にＲＯＭに格納してもよい。例として、限定ではないが、システムメモリ８１０は、アプリケーションプログラム８１２も例示する。アプリケーションプログラム８１２は、クライアントアプリケーション、ウェブブラウザ、ミッドティアアプリケーション、リレーショナルデータベース管理システム（ＲＤＢＭＳ）等、プログラムデータ８１４、およびオペレーティングシステム８１６を含み得る。例として、オペレーティングシステム８１６は、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ａｐｐｌｅ  Ｍａｃｉｎｔｏｓｈ（登録商標）および／またはＬｉｎｕｘオペレーティングシステムのさまざまなバージョン、さまざまな商業的に利用可能なＵＮＩＸ（登録商標）またはＵＮＩＸのようなオペレーティングシステム（限定はしないがさまざまなＧＮＵ／Ｌｉｎｕｘオペレーティングシステム、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳ等を含む）、および／またはｉＯＳ、Ｗｉｎｄｏｗｓ（登録商標）フォン、Ａｎｄｒｏｉｄ（登録商標）ＯＳ、ＢｌａｃｋＢｅｒｒｙ（登録商標）８  ＯＳおよびＰａｌｍ（登録商標）ＯＳオペレーティングシステムなどのモバイルオペレーティングシステムを含み得る。
【０１３２】
記憶サブシステム８１８は、一部の実施形態の機能性を提供する基本的なプログラミングおよびデータ構造体を記憶するための有形のコンピュータ読取可能記録媒体も提供し得る。プロセッサによって実行されると上記した機能性を提供するソフトウェア（プログラム、コードモジュール、命令）は、記憶サブシステム８１８に格納してもよい。これらのソフトウェアモジュールまたは命令は、処理部８０４によって実行し得る。記憶サブシステム８１８は、本開示に従って用いられるデータを記憶するためのリポジトリを提供し得る。
【０１３３】
記憶サブシステム７１８は、コンピュータ読取可能記録媒体８２２にさらに接続することができるコンピュータ読取可能記録媒体読取装置８２０も含み得る。これらは合わせて、および、選択的には、システムメモリ８１０と組み合わせて包括的に、遠隔、ローカル、固定、および／またはリムーバブル記憶デバイスと、コンピュータ読取可能情報を一時的および／またはより永続的に含み、記憶し、送信し、かつ取り出すための記録媒体とを加えたものを表わす。
【０１３４】
コードまたはコードの一部を含むコンピュータ読取可能記録媒体８２２は、当該技術において知られる、または使用される任意の適切な媒体も含むことができ、この媒体には、情報の記憶および／または伝達のための任意の方法および技術において実施される揮発性および不揮発性（非一時的）のリムーバブルおよび非リムーバブル媒体などの記録媒体および通信媒体が含まれる。これは、ＲＡＭ、ＲＯＭ、電気的消去可能プログラム可能なＲＯＭ(ＥＥＰＲＯＭ）、フラッシュメモリ、または他のメモリ技術、ＣＤ−ＲＯＭ、デジ
タルバーサタイルディスク（ＤＶＤ）、または他の光学記憶部、磁気カセット、磁気テープ、磁気ディスク記憶部、または他の磁気記憶デバイス、または他の有形のコンピュータ読取可能媒体が含むことができる。これは、データ信号、データ伝送、または所望の情報を送信するために用いることができ、コンピューティングシステム８００によってアクセスすることができる任意の他の媒体などの非有形のコンピュータ読取可能媒体も含むことができる。
【０１３５】
例として、コンピュータ読取可能記録媒体８２２は、非リムーバブルで不揮発性の磁気媒体から読出すかまたはそこに書込むハードディスクドライブ、リムーバブルで不揮発性の磁気ディスクから読出すかまたはそこに書込む磁気ディスクドライブ、およびＣＤ  ＲＯＭ、ＤＶＤ、およびＢｌｕ−Ｒａｙ（登録商標）ディスクなどのリムーバブルで不揮発性の光ディスクから読出すかまたはそこに書込む光ディスクドライブ、または他の光媒体を含み得る。コンピュータ読取可能記録媒体８２２は、限定はしないが、Ｚｉｐ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ、セキュアデジタル（ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープ
などを含み得る。コンピュータ読取可能記録媒体８２２は、フラッシュメモリベースのＳＳＤ、企業フラッシュドライブ、ソリッドステートＲＯＭ等といった不揮発性メモリベースのソリッドステートドライブ（ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（ＭＲＡＭ）ＳＳＤ、ならびにＤＲＡＭおよびフラッシュメモリベースのＳＳＤの組み合わせを用いるハイブリッドＳＳＤなどの揮発性メモリベースのＳＳＤも含み得る。ディスクドライブおよびそれらの関連付けられたコンピュータ読取可能媒体は、コンピュータ読取可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性記憶装置をコンピュータシステム８００に提供し得る。
【０１３６】
通信サブシステム８２４は、他のコンピュータシステムおよびネットワークへのインターフェイスを提供する。通信サブシステム８２４は、データを受信し、コンピュータシステム８００から他のシステムにデータを送信するためのインターフェイスとして機能する。たとえば、通信サブシステム８２４は、コンピュータシステム８００がインターネットを介して１つ以上の装置に接続することを可能にし得る。一部の実施形態において、通信サブシステム８２４は、（たとえば携帯電話技術、３Ｇ、４ＧまたはＥＤＧＥ（enhanced
data rates for global evolution）などの高度データネットワーク技術、ＷｉＦｉ（ＩＥＥＥ  ８０２．１１系列基準、または他の移動通信技術、またはそれらの任意の組み合わせを用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（ＲＦ）トランシーバーコンポーネント、全地球測位システム（ＧＰＳ）レシーバーコンポーネント、ならびに／または他のコンポーネントを含むことができる。一部の実施形態において、通信サブシステム８２４は、無線インターフェイスに加えて、またはその代わりに、有線ネットワークコネクティビティ（たとえばイーサネット（登録商標））を提供することができる。
【０１３７】
一部の実施形態において、通信サブシステム８２４は、コンピュータシステム８００を使用し得る一人以上のユーザのために、構造化されたおよび／または構造化されていないデータフィード８２６、イベントストリーム８２８、イベントアップデート８３０などの形態の入力通信も受信し得る。
【０１３８】
例として、通信サブシステム８２４は、Ｔｗｉｔｔｅｒ（登録商標）フィード、Ｆａｃｅｂｏｏｋ（登録商標）更新、Rich Site Summary（ＲＳＳ）フィードなどのウェブフィ
ード、および／または１つ以上の第三者情報源からのリアルタイム更新などのソーシャルネットワークおよび／または他の通信サービスのユーザからリアルタイムにデータフィード８２６を受信するように構成し得る。
【０１３９】
加えて、通信サブシステム８２４は、明示的な終わりのない本質的に連続的または無限であり得るリアルタイムイベントのイベントストリーム８２８および／またはイベントアップデート８３０を含み得る連続的なデータストリームの形態でデータを受信するようにも構成し得る。連続的なデータを生成するアプリケーションの例は、たとえば、センサーデータアプリケーション、株式相場表示装置、ネットワーク性能測定ツール（たとえば、ネットワーク監視およびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車トラフィック監視などを含み得る。
【０１４０】
通信サブシステム８２４はまた、構造化されたデータおよび／または構造化されていないデータフィード８２６、イベントストリーム８２８、イベントアップデート８３０等を、コンピュータシステム８００に結合された１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに出力するように構成し得る。
【０１４１】
コンピュータシステム８００は、ハンドヘルドポータブルデバイス（たとえばｉＰｈｏ
ｎｅ（登録商標）携帯電話、ｉＰａｄ（登録商標）コンピューティングタブレット、ＰＤＡ）、ウェアラブルデバイス（たとえばＧｏｏｇｌｅ  Ｇｌａｓｓ（登録商標）ヘッドマウンテッドディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバラック、または任意の他のデータ処理システムを含むさまざまな種類のうちの１つであってもよい。
【０１４２】
コンピュータおよびネットワークの常に変化する性質により、図に示されるコンピュータシステム８００の説明は具体的な一例としてのみ意図される。図に示されるシステムよりも多いかまたは少ないコンポーネントを有する他の多くの構造が可能である。たとえば、カスタマイズされるハードウェアも使用し得る、および／または特定の要素がハードウェア、ファームウェア、ソフトウェア（アプレットを含む）、または組み合わせで実施し得る。さらに、ネットワーク入力／出力デバイスなどの他のコンピューティングデバイスへの接続も採用し得る。本明細書において提供される開示および教示に基づいて、当該分野の当業者は、さまざまな実施形態を実施する他のやり方および／または方法を認識するであろう。
【０１４３】
上記方法、システム、および装置は例である。さまざまな構成において、さまざまな手順またはコンポーネントを適宜削除、置換、または追加してもよい。たとえば、代替の構成において、方法は、記載しているものと異なる順序で実行してもよく、および／またはさまざまな段階を追加、削除、および／または組み合わせてもよい。また、特定の構成に関して説明した特徴を、他のさまざまな構成において組み合わせてもよい。構成の異なる側面および要素を同様のやり方で組み合わせてもよい。また、技術は進化するので、要素のうちの多くは、例であり、本開示または請求項の範囲を制限するものではない。
【０１４４】
本明細書では具体的な詳細事項を示すことによって代表的な構成（実装例を含む）が十分に理解されるようにしている。しかしながら、構成はこれら詳細事項がなくとも実施し得る。たとえば、周知の回路、プロセス、アルゴリズム、構造、および技術は、構成が曖昧になるのを避けるために、不必要な詳細事項なしで示している。本明細書は、代表的な構成のみを示し、請求項の範囲、適用可能性、または構成を制限しない。むしろ、構成についてのこれまでの説明は、記載されている技術の実装を可能にする説明を当業者に提供するであろう。本開示の精神と範囲から逸脱することなく、要素の機能および構成に変更をなすことができる。
【０１４５】
また、フロー図またはブロック図として示されるプロセスとして構成を説明することもできる。各々動作を逐次プロセスとして説明している場合があるが、動作のうちの多くは並列にまたは同時に実行することが可能である。プロセスは、図面に含まれていない追加のステップを有し得る。さらに、方法の例は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはその任意の組み合わせによって実現し得る。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実現されるとき、必要なタスクを実行するためのプログラムコードまたはコードセグメントを、記録媒体等の非一時的なコンピュータ読取可能媒体に格納してもよい。プロセッサは記述されているタスクを実行してもよい。
【０１４６】
図９は、上記本発明の原理に従い構成されたコードをデバッグするためのシステムの実施形態の機能ブロック図を示す。この装置の機能ブロックは、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせによって実装されて本発明の原理を実行してもよい。図９に示される機能ブロックを組み合わせてまたはサブブロックに分割して上記本発明の原理を実現し得ることを、当業者は理解する。したがって、本明細書における説明は、本明細書に記載の機能ブロックの、可能ないかなる組み合わせまたは分割または他の定義もサポートし得る。
【０１４７】
図９に示されるように、コードをデバッグするためのシステム９００が提供される。このシステム９００はウェブサービスコンピュータシステム９１０を含み得る。ウェブサービスコンピュータシステム９１０はさらに、コンパイラ９１２と、選択部９１４と、第１の実行部９１６と、第１のデバッグ機能部９１８とを含み得る。コンパイラ９１２はコードをコンパイルしてコンパイル済みコードにするように構成されてもよく、コードは、第１のタスクフローに対応する第１の部分と第２のタスクフローに対応する第２の部分とを含み得る。選択部９１４は、第１または第２のタスクフローの選択を開発者コンピュータシステム（図示せず）からネットワーク（図示せず）を介して受けるように構成し得る。この選択は、デバッグする予定である第１または第２のタスクフローを示し得る。第１の選択部９１６は、第１のタスクフローが選択されたときに第１のタスクフローの実行を開始するように構成し得る。第１のデバッグ機能部９１８は、コンパイル済みコードの第１のタスクフローを第１の実行部９１６が実行している間に、コードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して与えるように構成し得る。
【０１４８】
一例として、ウェブサービスコンピュータシステム９１０は、コードをコンパイルする前に、コンパイルする対象であるコードを、開発者コンピュータシステムからウェブブラウザインターフェイスおよびネットワークを介して受信するように構成し得るコード受信部９１１をさらに含み得る。
【０１４９】
一例において、ウェブサービスコンピュータシステム９１０はさらに、第２のタスクフローを実行するように構成し得る第２の実行部９２０を含み得る。第２のタスクフローをデバッグするための選択は開発者コンピュータシステムからネットワークを介して受けておらず、コードの第２の部分に関連するデバッグ機能は開発者コンピュータシステムに与えない。一例において、ウェブサービスコンピュータシステム９１０はさらに、第１のタスクフローと第２のタスクフローとを含む複数のタスクフローの中から選択することを許可するインターフェイスをウェブブラウザを介して開発者コンピュータシステムに与えるように構成し得るインターフェイス提供部９２２を含み得る。一例において、ウェブサービスコンピュータシステム９１０はさらに、第１のタスクフローの実行中に第２のタスクフローの選択を開発者コンピュータシステムから選択部９１４が受けるときに、第２のタスクフローの実行を開始するように構成し得る第３の実行部９２４と、第３の実行部９２４がコンパイル済みコードの第２のタスクフローを実行している間に、コードの第２の部分に対するデバッグ機能をネットワークを介して開発者コンピュータシステムに与えるように構成し得る第２のデバッグ機能部９２６とを含み得る。一例において、第１の実行部９１６は、コンパイル済みコードをランタイムスレッドとして実行する、コンピュータシステムによって実行される仮想マシンである。一例において、第１のタスクフローを実行している間に、仮想マシンは第２のランタイムスレッドを実行し、第２のランタイムスレッドにはユーザに提供されるデバッグ機能がない。一例において、コンパイラ９１２はさらに、コンパイル中にコードの第１の部分とコードのダイ２の部分とを修正して追加コードを含むように構成されたコード修正部（図示せず）を含み得る。このスイカコードはデバッグ機能を与える。一例において、第１および第２のデバッグ機能部９１８および９２６はそれぞれ、開発者コンピュータシステムにおいてコードの第１の部分および第２の部分の中のブレークポイントで第１および第２のタスクフローの実行を停止させるように構成された停止部（図示せず）、第１および第２のタスクフローの実行中にコードの第１および第２の部分の中から変数を開発者コンピュータシステムに出力するように構成された出力部（図示すせず）、および、コードの第１および第２の部分における個々の式の処理の発生をトリガする開発者コンピュータシステムからの入力を受けるように構成された入力部（図示せず）を含む。
【０１５０】
いくつかの実施形態において、コードをデバッグするための装置が提供される。この装置は、コードをコンパイルしてコンパイル済みコードにするための手段を含み得る。このコードの第１の部分は第１のタスクフローに対応し、このコードの第２の部分は第２のタスクフローに対応する。この装置は、第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるための手段を含み得る。この選択は第１のタスクフローをデバッグする予定であることを表示する。この装置は、コンピュータシステムによる第１のタスクフローの実行を開始するための手段を含み得る。この装置は、コンピュータシステムがコンパイル済みコードの第１のタスクフローを実行している間に、コードの第１の部分に対するデバッグ機能を開発者コンピュータシステムにネットワークを介して与えるための手段を含み得る。
【０１５１】
いくつかの代表的な構成について説明してきたが、本開示の精神から逸脱することなく、さまざまな変形、代替構造、および均等物を用いることができる。たとえば、上記要素はより大きなシステムのコンポーネントであってもよく、その場合に、他の規則が本発明のアプリケーションより優先度が高くてもよくそうでなければ本発明のアプリケーションを修正してもよい。また、上記要素が考慮される前、中、または後に、多数のステップが実行されてもよい。
【図１】
2020024717.tif 000003
【図２】
2020024717.tif 000004
【図３】
2020024717.tif 000005
【図４】
2020024717.tif 000006
【図５】
2020024717.tif 000007
【図６】
2020024717.tif 000008
【図７】
2020024717.tif 000009
【図８】
2020024717.tif 000010
【図９】
2020024717.tif 000011
【手続補正書】
【提出日】令和1年10月29日(2019.10.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コードをデバッグする方法であって、
コンピュータシステムがコードをコンパイルしてコンパイル済みコードにするステップを含み、前記コードの第１の部分は第１のタスクフローに対応し、前記コードの第２の部分は第２のタスクフローに対応し、
前記コンピュータシステムが前記第１のタスクフローの選択を開発者コンピュータシステムからネットワークを介して受けるステップを含み、前記選択は前記第１のタスクフローをデバッグする予定であることを表示し、
前記コンピュータシステムによる前記第１のタスクフローの実行を開始するステップと、
前記コンピュータシステムが前記コンパイル済みコードの前記第１のタスクフローを実行している間に、前記コンピュータシステムが前記コードの前記第１の部分に対するデバッグ機能を前記開発者コンピュータシステムに前記ネットワークを介して与えるステップとを含む、方法。
【外国語明細書】
2020024717000001.pdf