(57)【特許請求の範囲】
【請求項１】
ドメイン固有言語コードをデバッグするためのシステムであって、
コンピュータ読取可能媒体およびプロセッサを含むウェブサーバを備え、前記ウェブサーバは、バーチャルマシンと、デバッグ実行マシンと、ドメイン固有言語（ＤＳＬ）に特有のツールインターフェースとを含み、
前記デバッグ実行マシンは、前記ＤＳＬに特有のツールインターフェースを介して、開発者コンピュータと通信し、
前記ウェブサーバは、
ＤＳＬコードとデバッグ情報を前記開発者コンピュータから受取り、
前記開発者コンピュータから受取られたＤＳＬコードをコンパイルするように構成され、コンパイル中、前記ＤＳＬコードは、前記開発者コンピュータから受取られたデバッグ情報を含むようにインストルメント化され、前記デバッグ情報は、変数値を含む状態情報を前記デバッグ実行マシンに送信するための命令を含み、前記ウェブサーバはさらに、
前記バーチャルマシンが前記インストルメント化されたコードを実行するように構成され、且つ実行中、前記デバッグ実行マシンの状態が前記バーチャルマシンの状態を反映するように、前記バーチャルマシンが、前記インストルメント化されたコードにより前記デバッグ実行マシンと通信するように構成される、システム。
【請求項２】
ウェブサーバにおいてドメイン固有言語（ＤＳＬ）コードをデバッグするための方法であって、
前記ウェブサーバは、バーチャルマシンと、デバッグ実行マシンと、ＤＳＬに特有のツールインターフェースを含み、前記デバッグ実行マシンは、前記ＤＳＬに特有のツールインターフェースを介して、コンピュータ読取可読媒体およびプロセッサを含む開発者コンピュータと通信し、
前記方法は、
前記開発者コンピュータからＤＳＬコードおよびデバッグ情報をウェブサーバにおいて受取るステップを備え、前記デバッグ情報は、変数値を含む状態情報を前記デバッグ実行マシンに送るための命令を含み、
前記方法は、さらに、
前記開発者コンピュータから受取られた前記ＤＳＬコードをコンパイルするステップと、
コンパイル中、前記開発者コンピュータから受取られたデバッグ情報を含むように前記ＤＳＬコードをインストルメント化するステップと、
前記インストルメント化されたコードを前記バーチャルマシンで実行するステップとを備え、実行中は、前記デバッグ実行マシンの状態が前記バーチャルマシンの状態を反映するように、前記バーチャルマシンが、前記インストルメント化されたコードにより前記デバッグ実行マシンと通信する、方法。
【請求項３】
前記デバッグ実行マシンはリスナを実装し、前記リスナは、前記開発者コンピュータにおけるデバッグインターフェースからデバッグ要求を受取り、前記デバッグインターフェースにデバッグイベントを送ることができる、請求項２に記載の方法。
【請求項４】
前記デバッグ実行マシンは、前記ＤＳＬに特有のツールインターフェースを実装する、請求項３に記載の方法。
【請求項５】
前記ウェブサーバは、前記ウェブサーバにおけるデバッグインターフェースを介して、前記開発者コンピュータにおけるデバッグクライアントから前記デバッグ情報を受取る、請求項２から４のいずれか１項に記載の方法。
【請求項６】
前記デバッグインターフェースは、Ｊａｖａデバッグインターフェース（ＪＤＩ）である、請求項５に記載の方法。
【請求項７】
前記デバッグインターフェースは、Ｊａｖａデバッグワイヤプロトコル（ＪＤＷＰ）を使用して前記ＤＳＬに特有のツールインターフェースと通信する、請求項６に記載の方法。
【請求項８】
前記方法は、さらに、
前記実行中、前記デバッグ実行マシンで前記開発者コンピュータからデバッグ命令を受けとるステップと、
前記デバッグ命令に基づき、前記デバッグ実行マシンから前記バーチャルマシンに実行命令を送信するステップと、
前記デバッグ命令に応答して、前記ＤＳＬに特有のツールインターフェースを介して、前記開発者コンピュータに要求された情報を返信するステップと、を備え、
前記デバッグ命令は、ブレークポイントを設定するための命令、変数値の要求および実行を継続するための命令のうちの１つ以上を含み得る、請求項２から７のいずれか１項に記載の方法。
【請求項９】
前記ウェブサーバは、クラウドベースの開発環境における複数のウェブサーバのうちの１つである、請求項２から８のいずれか１項に記載の方法。
【請求項１０】
前記開発者コンピュータは、クライアントアプリケーションを使用して、ネットワークを介して、前記クラウドベースの開発環境における前記ウェブサーバにアクセスする、請求項９に記載の方法。
【請求項１１】
前記デバッグ情報は、前記クライアントアプリケーションを通じて、前記ネットワークを介して受取られる、請求項１０に記載の方法。
【請求項１２】
請求項２から１１のいずれかに記載の方法をコンピュータに実行させるためのプログラム。
【請求項１３】
前記ウェブサーバは、さらに、
前記実行中、前記デバッグ実行マシンで前記開発者コンピュータからデバッグ命令を受けとり、
前記デバッグ命令に基づき、前記デバッグ実行マシンから前記バーチャルマシンに実行命令を送信し、
前記デバッグ命令に応答して、前記ＤＳＬに特有のツールインターフェースを介して、前記開発者コンピュータに要求された情報を返信するよう構成され、
前記デバッグ命令は、ブレークポイントを設定するための命令、変数値の要求および実行を継続するための命令のうちの１つ以上を含み得る、請求項１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
ビジネスユーザは、クラウドコンピューティングシステムを介して自身のカスタムソフトウェアを開発することがますます可能になってきている。会計士または経営者などの一般的なビジネスユーザは、ソフトウェア開発者ではない。そのため、ソフトウェア開発を行うためにビジネスユーザに提供されるリソースは、一般に、特定の問題またはビジネスドメインに合わせられる。例えば、ビジネスユーザは、ドメイン固有言語（domain specific language：ＤＳＬ）を利用してもよく、当該ドメイン固有言語は、Ｊａｖａ（登録商標）などの汎用プログラミング言語と比較して、平均的なビジネスユーザが作業するのをより容易かつ直感的なものにするビジネスに特有のロジックを含み得る。
【０００２】
ソフトウェア開発者は、コードを書込んでいるとき、デバッグモードで当該コードをコンパイルおよび実行することができる。デバッグモードは、開発者が書込んだコードがいかに実行されているかを知るための手がかりを開発者に与える。コードがデバッグモードで実行されると、一般的に言って、開発者は、実行中に変数値を見て、開発者が実行の継続をトリガするまでコードの実行が停止するブレークポイントを設定し、および／または、ラインベースでコードの実行を一ステップずつ実行し得る。
【０００３】
クラウドにおいてビジネスロジックを指定するためのＤＳＬの使用は、それらの言語をサポートするためにデバッガを作成することを必要とする。クラウドベースの開発が増加するにつれて、ＤＳＬおよびそれらのデバッガの数も増加してきた。現在のデバッガの機能の多くは、全ての言語に共通である。例えば、デバッガは、制御フローを視覚化し、マシン変数の検査をサポートする。しかし、デバッガを作成するための普遍的な共通のアーキテクチャはない。このため、デバッガを作成するにあたっての努力が業界全体で重複することになり、デバッガ間の互換性がないことになる。
【発明の概要】
【課題を解決するための手段】
【０００４】
簡単な概要
ドメイン固有言語をデバッグするためのシステムおよび方法を提供する。実施例によれば、１つのこのようなシステムは、バーチャルマシンと、デバッグ実行マシンと、ドメイン固有言語（ＤＳＬ）に特有のツールインターフェースとを含むウェブを備え得る。ウェブサーバは、開発者コンピュータから受取られたＤＳＬコードをコンパイルするように構成される。コンパイル中、ＤＳＬコードは、開発者コンピュータから受取られたデバッグ情報を含むようにインストルメント化される。また、ウェブサーバは、インストルメント化されたコードをバーチャルマシンが実行するように構成される。実行中、デバッグ実行マシンの状態がバーチャルマシンの状態を反映するように、インストルメント化されたコードはデバッグ実行マシンと通信する。本発明の実施例は、ＤＳＬのためのデバッガを作成するための普遍的な共通のアーキテクチャとしてＪａｖａプラットフォームデバッグアーキテクチャ（Java Platform Debug Architecture：ＪＰＤＡ）を利用するものとして本明細書に記載されている。本明細書では特にＪＰＤＡおよびＪａｖａプラットフォームを参照するが、他のデバッグアーキテクチャも同様に利用されてもよい。
【０００５】
実施例によれば、ＤＳＬに特有のツールインターフェースは、デバッグ実行マシンによって実装される。デバッグ実行マシンは、デバッグクライアントとコードを実行するバーチャルマシンとの間の媒介役の役割を果たし得る。さらに、デバッグ実行マシンはリスナを実装し得て、リスナは、開発者コンピュータにおけるデバッグインターフェースからデバッグ要求を受取り、デバッグインターフェースにデバッグイベントを送ることができる。開発者コンピュータから受取られたデバッグ情報は、ブレークポイントを設定するための命令、変数値の要求および実行を継続するための命令のうちの１つ以上を含み得る。
【０００６】
いくつかの実施例では、ウェブサーバは、開発者コンピュータにおけるデバッグクライアントからデバッグ情報を受取り、デバッグクライアントは、デバッグインターフェースを介して、デバッグ情報をウェブサーバに送る。実施例によれば、デバッグインターフェースは、Ｊａｖａデバッグインターフェース（Java Debug Interface：ＪＤＩ）であり得て、デバッグインターフェースは、Ｊａｖａデバッグワイヤプロトコル（Java Debug Wire Protocol：ＪＤＷＰ）を使用してＤＳＬに特有のツールインターフェースと通信し得る。
【０００７】
実施例によれば、ドメイン固有言語（ＤＳＬ）コードをデバッグするための方法を１つ以上のプロセッサに実行させるためのコンピュータプログラムを提供する。当該コンピュータプログラムは、コンピュータ読取可能媒体およびプロセッサを含む開発者コンピュータからＤＳＬコードをウェブサーバにおいて受取るステップと、開発者コンピュータから受取られたＤＳＬコードをコンパイルするステップと、コンパイル中、開発者コンピュータから受取られたデバッグ情報を含むようにＤＳＬコードをインストルメント化するステップと、インストルメント化されたコードをバーチャルマシンで実行するステップとを１つ以上のプロセッサに実行させ、実行中、デバッグ実行マシンの状態がバーチャルマシンの状態を反映するように、インストルメント化されたコードはデバッグ実行マシンと通信する。
【０００８】
別の実施例は、ドメイン固有言語コードをデバッグするためのシステムを提供し、当該システムは、ウェブサーバを備え、当該ウェブサーバは、デバッグ実行マシンと、開発者コンピュータから受取られたＤＳＬコードをコンパイルするためのコンパイラとを含み、コンパイル中、ＤＳＬコードは、開発者コンピュータから受取られたデバッグ情報を含むようにインストルメント化され、当該ウェブサーバはさらに、インストルメント化されたコードを実行するためのバーチャルマシンを含み、実行中、デバッグ実行マシンの状態がバーチャルマシンの状態を反映するように、インストルメント化されたコードはデバッグ実行マシンと通信する。
【０００９】
いくつかの実施例では、デバッグ実行マシンは、ＤＳＬに特有のツールインターフェースをさらに備える。
【００１０】
いくつかの実施例では、デバッグ実行マシンは、デバッグインターフェースからデバッグ要求を受取り、デバッグインターフェースにデバッグイベントを送るように接続を構築するために使用可能なリスナをさらに備える。
【００１１】
いくつかの実施例では、ウェブサーバは、ウェブサーバにおけるデバッグインターフェースを介して、開発者コンピュータにおけるデバッグクライアントからデバッグ情報を受取る。デバッグインターフェースは、Ｊａｖａデバッグインターフェース（ＪＤＩ）であり得る。デバッグインターフェースは、Ｊａｖａデバッグワイヤプロトコル（ＪＤＷＰ）を使用してＤＳＬに特有のツールインターフェースと通信し得る。
【００１２】
いくつかの実施例では、デバッグ情報は、ブレークポイントを設定するための命令、変数値の要求および実行を継続するための命令のうちの１つ以上を含み得る。
【００１３】
いくつかの実施例では、ウェブサーバは、クラウドベースの開発環境における複数のウェブサーバのうちの１つである。
【００１４】
いくつかの実施例では、開発者コンピュータは、クライアントアプリケーションを使用して、ネットワークを介して、クラウドベースの開発環境におけるウェブサーバにアクセスし得る。
【００１５】
いくつかの実施例では、デバッグ情報は、クライアントアプリケーションを通じて、ネットワークを介して受取られる。
【図面の簡単な説明】
【００１６】
【図１】ＪＰＤＡを使用してＪａｖａコードをデバッグするためのシステムを示す。
【図２】本発明の実施例に係るドメイン固有言語に書込まれたコードをデバッグするための普遍的なデバッグアーキテクチャを示す。
【図３】本発明の実施例に係るデバッグ機能を含むＤＳＬコードをコンパイルするように構成されたシステムの実施例を示す。
【図４】本発明の実施例に係る普遍的なデバッグアーキテクチャを使用してデバッグする方法を示す。
【図５】コンピュータシステムの実施例を示す。
【発明を実施するための形態】
【００１７】
詳細な説明
以下の説明では、説明の目的で、本発明の実施例が完全に理解されるように具体的な詳細について説明する。しかし、これらの具体的な詳細がなくても本発明の実施例を実施できることは明らかであろう。
【００１８】
ビジネスユーザは、クラウドコンピューティング環境にホストされる開発環境へのウェブインターフェースを介するなどして、自身のソフトウェアを開発することがますます可能になっている。これらのビジネスユーザは一般にソフトウェア開発者ではないので、ソフトウェア開発は一般に、ドメイン固有言語（ＤＳＬ）を使用して行われる。ＤＳＬは、特定の問題またはビジネスドメインに特有の特化された機能を提供する。ＪａｖａまたはＣ♯などの汎用プログラミング言語とは対照的に、ＤＳＬは、ビジネスユーザがより高いレベルで、例えばよりユーザフレンドリで学習しやすい機能および方法を使用してプログラムすることを可能にする。例えば、ＤＳＬは、会計または保険に特有の機能を実行することができるようにする表現を含んでいてもよい。ＤＳＬは、Ｇｒｏｏｖｙなどの他の言語またはプラットフォームを使用して開発可能であり、当該Ｇｒｏｏｖｙは、Ｊａｖａの上位セットであり、そのためＤＳＬ構造とともに標準的なＪａｖａインプリメンテーションの全ての機能を提供する。本明細書で詳細に説明する類似の原理は、他のプログラミング言語および非ビジネスロジック構成にも適用可能であるということが理解されるべきである。
【００１９】
特化されたＤＳＬの普及に加えて、デバッガなどのビジネスユーザソフトウェア開発をサポートするためにさらに他のソフトウェア開発ツールが必要である。現在のデバッガの多くの機能は、全てのプログラミング言語に共通である。例えば、デバッガは、制御フローを視覚化し、マシン変数の検査をサポートする。各ＤＳＬごとに新たなデバッガを作成するのは、費用がかかりかつ冗長な作業である。したがって、デバッガの作成のための普遍的なアーキテクチャが必要である。
【００２０】
実施例によれば、このような普遍的なデバッガプラットフォームとしての機能を果たすようにＪａｖａプラットフォームデバッグアーキテクチャ（ＪＰＤＡ）をカスタマイズすることができる。ＪＰＤＡを参照して本発明の実施例を説明するが、他のデバッグアーキテクチャも利用可能である。普遍的なデバッグアーキテクチャを作成するためにＪＰＤＡを利用することによって、既存のＪＰＤＡツールもＤＳＬとともに利用できる。ＪＰＤＡは、例えば開発者のコンピュータにおけるデバッグクライアント（本明細書ではデバッガとも呼ばれる）が、例えばウェブサーバ上のバーチャルマシンで実行されるプログラムまたはプロセスと通信し、モニタリングし、制御することを可能にする基本的なアーキテクチャを提供する。
【００２１】
図１は、ＪＰＤＡを使用してＪａｖａコードをデバッグするためのシステムを示す。図１に示されるように、システム１００は、開発者コンピュータシステム１０２と、ウェブサーバ１０４とを含み得る。ＪＰＤＡは、開発者コンピュータシステム１０２を使用する開発者が、ウェブサーバ１０４において実行されるコードをデバッグすることを可能にする。ＪＰＤＡは、いくつかの層、すなわちＪａｖａバーチャルマシンツーリングインターフェース（Java Virtual Machine Tooling Interface：ＪＶＭ  ＴＩ）１０６、Ｊａｖａデバッグワイヤプロトコル（ＪＤＷＰ）１０８およびＪａｖａデバッグインターフェース（ＪＤＩ）１１０を含んでいる。
【００２２】
ＪＶＭ  ＴＩ１０６は、デバッグされるアプリケーションが実行されるバーチャルマシン１１２によって実装されるインターフェースである。ＪＶＭ  ＴＩ１０６は、情報の要求（例えば現在のスタックフレーム）、アクション（例えばブレークポイントの設定）および通知（例えば実行中にブレークポイントに到達したとき）などの、デバッグのためにバーチャルマシン１１２が提供するサービスを規定する。一般的なＪａｖａデバッガでは、ＪＶＭ  ＴＩは、ＪＶＭと対話するためのインターフェースを規定する。一般的なＪａｖａ開発環境では、開発されるコードを実行しているＪａｖａバーチャルマシンがＪＶＭ  ＴＩを実装し、そのためＪＶＭは、開発者システムから受取られたデバッグオペレーションを受取って、実行することができる。
【００２３】
Ｊａｖａデバッグインターフェース（ＪＤＩ）１１０は、バーチャルマシン１１２と通信するためにデバッグクライアント１１４が使用可能な情報および要求をユーザコードレベルで規定する開発者コンピュータシステム１０２によって実装されるＪａｖａインターフェースである。Ｊａｖａデバッグワイヤプロトコル（ＪＤＷＰ）１０８は、デバッグされるプログラムまたはプロセスとデバッグクライアントとの間で転送される情報および要求のフォーマットを規定する。ＪＤＷＰにより、デバッグされるコード１１６およびデバッグクライアント１１４は、別々のバーチャルマシンインプリメンテーション下でおよび／または別々のプラットフォーム上で実行されることが可能になる。
【００２４】
図１に示されるシステムでは、開発者は、デバッグクライアント１１４を使用して、デバッグ命令、例えばブレークポイントの設定を入力し得る。この命令は、デバッグクライアントからＪＤＩ１１０に通信され、次いで、ＪＤＩ１１０は、ＪＤＷＰ１０８を使用してネットワーク１１８を介してウェブサーバ１０４に当該命令を送ることができ、当該命令は、ＪＶＭ  ＴＩ１０６によって受取られる。コード１１６は、コンパイラ１２０によってコンパイルされると、デバッグ情報でインストルメント化され得る。バーチャルマシン１１２は、コード１１６を実行するとき、ブレークポイントをチェックし得て、ブレークポイントに到達すると、通知が開発者に返され得る。当該通知は、ＪＤＷＰ１０８を使用してＪＶＭ  ＴＩ１０６からＪＤＩ１１０に送られ、次いでデバッグクライアント１１４を介して開発者に提示され得る。デバッグクライアントとウェブサーバとの間の通信は、デバッグが完了するまで同様に継続し得る。
【００２５】
図２は、本発明の実施例に係るドメイン固有言語に書込まれたコードをデバッグするための普遍的なデバッグアーキテクチャを示す。システム２００は、開発者コンピュータシステム２０４と対話するウェブサーバ２０２を含み得る。実施例によれば、システム２００は、各々が１つ以上の異なる開発者コンピュータシステムを提供する複数の開発者コンピュータシステムと複数のウェブサーバとを含むより大きなシステムの一部であってもよい。実施例によれば、開発者コンピュータシステム２０４は、デバッグクライアント２０８を含み得る。さらに、ウェブサーバ２０２は、バーチャルマシン２１０と、デバッグ実行マシン２１２と、コンパイラ２１４とを含み得る。バーチャルマシン２１０は、開発中のＤＳＬコード２１８を実行することができ、デバッグ実行マシン２１２は、カスタムツールインターフェース２１６およびリスナ２２０を実装し得る。開発者コンピュータシステム２０４は、ネットワーク２２２を介してウェブサーバ２０２と通信し得る。デバッグインターフェース２０６も提供され得る。実施例によれば、デバッグインターフェース２０６は、ウェブサーバ２０２または開発者コンピュータシステム２０４のいずれかで実行され得る。
【００２６】
図２に示されるように、ＤＳＬデバッグ実行マシン２１２は、ＪＶＭ  ＴＩのようなカスタムツールインターフェース２１６を実装する。図１に示される例では、デバッグされるコードを実行しているバーチャルマシンが、ＴＩを実装し、開発者から直接デバッグ命令を受取る。しかし、図２に示される実施例では、デバッグ実行マシン２１２が、開発者とコードを実行するバーチャルマシン２１０との間の媒介役の役割を果たし得る。カスタムツールインターフェース２１６を実装することによって、デバッグ実行マシンは、デバッグインターフェース２０６およびＤＳＬコード２１８を実行しているバーチャルマシン２１０などの別個の実行マシンと通信することができる。
【００２７】
実施例によれば、普遍的なデバッグアーキテクチャは、デバッグクライアント２０８とデバッグ実行マシン２１２との間の通信のためのプロトコルとしてＪＤＷＰ２２４を使用し得る。ＤＳＬデバッガは、ＪＤＷＰリスナ２２０を実装し得る。デバッグクライアント２０８が開始されると、デバッグクライアント２０８は、デバッグインターフェース２０６を介してリスナとの接続を構築し得る。デバッグ実行マシン２１２は、デバッグインターフェース２０６からデバッグ要求を受取り、デバッグインターフェース２０６にデバッグイベントを送るために当該接続を使用し得る。ＪＤＷＰを使用することにより、実行マシンとその他のＪＰＤＡデバッグクライアントとの互換性とともに、対話のための正式なテストされたプロトコルが提供される。実施例によれば、ＤＳＬデバッガは、デバッグインターフェースとして標準的なＪＤＩインプリメンテーションを使用し得る。これにより、デバッグクライアントを書込むために必要な作業の量が減少する。
【００２８】
コード２１８などのＤＳＬプログラムがコンパイルされると、当該プログラムにおけるＤＳＬ命令がデバッグ情報でインストルメント化され得る。例えば、デバッグ情報は、表現実行についての情報、または、変数値などの状態情報をデバッグ実行マシン２１２に送るための命令を含み得る。実施例によれば、デバッグ実行マシン２１２は状態マシンであり、インストルメント化は、開発中のコードがバーチャルマシン２１０によって実行されるとデバッグ実行マシン２１２において状態遷移を開始させることを担っている。このように、デバッグ実行マシンは、ＤＳＬプログラムを実行しているバーチャルマシンの状態を反映する。さらに、バーチャルマシン２１０は、コードのインストルメント化を介してデバッグ実行マシン２１２と通信し得て、表現の評価および変数の変化をデバッグ実行マシン２１２に通知する。デバッグ実行マシン２１２は、表現についてブレークポイントが要求されたか否かを確認するためにチェックを行い、要求されていればバーチャルマシンスレッドの実行を一時停止して、ＪＤＷＰを使用してデバッグインターフェース２０６に通知し得る。したがって、デバッグ実行マシンは、コードを実行しているバーチャルマシンと開発者との間の媒介役として動作する。
【００２９】
実施例によれば、デバッグ実行マシンおよびカスタムツールインターフェースは、ＤＳＬに関連付けられ得る。カスタムツールインターフェースは、ＤＳＬに特有のサービスを規定し得る。異なるＤＳＬに対するサポートを提供するために、当該異なるＤＳＬに特有の第２のデバッグ実行マシンおよび第２のカスタムツールインターフェースが実装されてもよい。
【００３０】
上記のように、実施例によれば、デバッグクライアント２０８は、ＪＤＷＰ２２４によってデバッグインターフェース２０６を介してデバッグ情報をウェブサーバ２０２に送り得る。いくつかの実施例では、デバッグインターフェースは、開発者コンピュータシステム２０４で実行され、ＪＤＷＰ２２４によってネットワーク２２２を介してウェブサーバ２０２と通信してもよい。しかし、いくつかのクラウドベースの開発環境では、所与のサーバの全てのポートがオープンであるとは限らない。例えば、ウェブサーバ２０２のＪＤＷＰポートはオープンになっていないかもしれず、または、利用可能なポートはサーバごとに異なり得る。これは、デバッグ命令の通信を妨げる可能性がある、クラウドベースの開発環境における開発者コンピュータシステム２０４とウェブサーバ２０２との間の通信問題を生じさせる。この通信問題に対処して、これらの開発環境を適合させるために、開発者コンピュータにおけるデバッグクライアント２０８は、ウェブサーバ２０２において実行されるデバッグインターフェース２０６のインプリメンテーションに、ＨＴＴＰなどの非ＪＤＷＰアプリケーションプロトコルによってネットワーク２２２を介してデバッグ情報を送り得る。ウェブサーバ２０２におけるデバッグインターフェースインプリメンテーション２０６は、開発者コンピュータシステムから受取られたデバッグ情報を通信するために、カスタムツールインターフェースとのローカルなＪＤＷＰ接続をオープンにし得る。
【００３１】
図３は、デバッグ機能を含むＤＳＬコードをコンパイルするように構成されたシステム３００の実施例を示す。実施例によれば、システム３００に示される各モジュールは、別段の指示がない限り、ウェブサーバ２０４の一部であってもよい。したがって、少なくともいくつかの実施例では、システム３００は、システム２００の一部として理解されることができる。システム３００は、さまざまなモジュールを備え、各モジュールは、ソフトウェア、ファームウェアおよび／またはハードウェアを使用して実現されてもよい。構成要素は、コードソースモジュール３１０と、プリコンパイルモジュール３１５と、パーサモジュール３２０と、変換エンジン３３０と、コンパイラ３４０と、バーチャルマシン３５０と、デバッグ実行マシン３６０とを含んでいる。
【００３２】
コードソースモジュール３１０は、ＤＳＬコードを受取る働きをし得る。このコードは、コンパイルされると構文木レベルで編集され得るプログラミング言語の構文に書込まれ得る。例えば、ＤＳＬコードのためのプログラミング言語としてＧＲＯＯＶＹが使用されてもよい。いくつかの実施例では、コードソースモジュール３１０は、図２に示されるように、ウェブベースのインターフェースを介して提出されるコードなどのＤＳＬコードをリモートコンピュータシステムから受取るように構成され得る。コードソースモジュール３１０は、コンパイルされるコードを含むファイルにアクセスする働きをし得る。
【００３３】
プリコンパイルモジュール３１５は、コードソースモジュール３１０によって受取られたＤＳＬコードのコンパイルプロセスの一部を完了させ得る。いくつかの実施例では、プリコンパイルモジュール３１５は、コードソースモジュール３１０によって受取られたＤＳＬコードに１つ以上の表現を挿入し得る。パーサモジュール３２０は、構文木を作成するために、表現を含むＤＳＬコードをパーズし得る。構文木は、抽象構文木であってもよい。現時点で、いくつかのプログラミング言語では、バイトコードがコンパイルされる前に構文木を変更することが可能であり得る。
【００３４】
変換エンジン３３０は、パーサモジュール３２０によって作成された構文木を変更し得る。変換エンジン３３０は、構文木の中の表現のうちのいくつかまたは全ての表現を追加または変更し得る。変数値が変更されるたびに、当該変数値がデバッグ実行マシン３６０に出力されるように構文木は変更され得る。したがって、実行中、デバッグ実行マシン３６０は、ＤＳＬコードに存在する各変数の現在の値を維持し得る。図２に示されるデバッグクライアント２０８などの開発者のデバッグクライアントは、それに応答してデバッグ実行マシン３６０が提供し得る変数の値を要求し得る。ＤＳＬコードに存在する各表現が実行された後、デバッグ実行マシン３６０から命令が受取られるまで実行が停止される（例えば一時停止またはループモードにされる）ように、表現が追加され得る。さらに、実行された表現または実行されようとしている表現の表示がデバッグ実行マシン３６０に提供され得る。次いで、デバッグ実行マシン３６０は、どの表現がたった今実行されたか、またはどの表現が実行されようとしているかということの表示を開発者のデバッグクライアントに提供し得る。デバッグ実行マシン３６０は、バーチャルマシン３５０が実行を継続することを可能にする前に、デバッグクライアントを介した開発者からの入力を待ち得る。開発者が特定の表現についてブレークポイントを示さなかった場合、デバッグ実行マシン３６０は、開発者がブレークポイントを示した表現に到達するまでＤＳＬコードの実行が継続することを可能にし得る。
【００３５】
使用中のＤＳＬによっては、コンパイラ３４０は、変更された構文木をバイトコードなどのより低いレベルの実行可能なコードにコンパイルし得る。コードソースモジュール３１０によって受取られたＤＳＬコードは、プリコンパイルモジュール３１５および変換エンジン３３０によって変更されると、コンパイラ３４０によってコンパイルされ得る。
【００３６】
デバッグ実行マシン３６０と通信するバーチャルマシン３５０は、コンパイラ３４０によってコンパイルされたバイトコードを実行し得る。変換エンジン３３０によって変更された各表現ごとに、実行が継続すべきか否かを判断するためにデバッグ実行マシン３６０が照会され得る。また、デバッグ実行マシン３６０は、例えばこのような変数値がバーチャルマシン３５０から変更され得るたびに、変数の値を受取り得る。また、デバッグ実行マシン３６０は、実行されたＤＳＬコードまたは実行されようとしているＤＳＬコードの現在の表現の表示を受取り得る。このような情報は、デバッグ実行マシン３６０によって受取られ得る。バイトコードが次に進むことを許可される前に開発者コンピュータシステムからの入力がデバッグ実行マシン３６０によって要求され得て、および／または、デバッグ実行マシン３６０によってデバッグクライアントを介して（変数値などの）情報が開発者に出力され得る。
【００３７】
図４は、本発明の実施例に係る普遍的なデバッグアーキテクチャを使用してデバッグする方法を示す。ステップ４００において、ウェブサーバは、コンピュータ読取可能媒体およびプロセッサを含む開発者コンピュータからＤＳＬコードを受取り得る。このコードは、ウェブベースのインターフェースを介してＤＳＬコードを提供する開発者の形態で受取られてもよく、または、コンパイルされていないＤＳＬコードを含む１つ以上のファイルを提供することによって受取られてもよい。ＤＳＬコードがコンパイルされる前に、デバッグ注釈がＤＳＬコードに追加可能である。当該注釈は、特定のクラスが呼出されるべきであることをコンパイラに示す役割を果たし得る。注釈は、ユーザによって手作業で追加されてもよく、またはコンパイラなどによって自動的に追加されてもよい。プログラミング言語としてＧＲＯＯＶＹが使用される場合には、このような注釈は、全文変形または局所変形のいずれかとして追加され得て、コマンドラインまたはGroovyShell.parse()などのＧＲＯＯＶＹ  ＡＰＩからのものであり得るコンパイルステップでトリガされ得る。いくつかの実施例では、注釈の代わりに、構成スイッチ、プロパティファイルまたは環境変数などの他のトリガ機構が使用されてもよい。
【００３８】
ステップ４０２において、ＤＳＬコードがコンパイルされる。ＤＳＬコードのタイプによっては、コンパイルは構文木の作成を含み得る。構文木の各ノードは、コンパイルされていないＤＳＬコードにおける表現に対応し得る。また、使用されるＤＳＬは、使用されるＤＳＬによって、バイトコード（もしくはマシンコード）または他のより低いレベルの実行可能なコードをコンパイルするために構文木が使用される前に、構文木の編集を許可し得る。構文木の表現は、構文木をパーズすることによって特定され得る。さらに、変数の値が変更され得る表現が、追加的に特定され得る。
【００３９】
ステップ４０４において、コンパイル中に、ＤＳＬコードがインストルメント化され得る。例えば、特定された各表現ごとに、変更された表現または追加の表現が追加され得る。このような変更された表現または追加の表現は、デバッグ実行マシンからの入力が受取られるまで、変更された変数値がデバッグ実行マシンに出力されるまで、実行が開始したという命令文の表示がデバッグ実行マシンに出力されるべきであるまで、および／または、命令文の実行が終了したという表示がデバッグ実行マシンに出力されるべきであるまで、実行を停止させ得る。ＤＳＬコードがインストルメント化されると、ＤＳＬコードはコンパイルを終了し得る。
【００４０】
ステップ４０６において、コンパイルされたインストルメント化されたコードが、例えばバーチャルマシン上で実行され得る。実行中、デバッグ実行マシンの状態がバーチャルマシンの状態を反映するように、インストルメント化されたコードはデバッグ実行マシンと通信する。デバッグ機能は、ビジネスロジックコードから作成された構文木内の表現の変更および／または追加により開発者に提供され得る。インストルメント化されたコードの実行中、バーチャルマシンは、例えば表現の実行を許可して変数の値をデバッグ実行マシンに出力するためにデバッグ実行マシンと通信し得る。次いで、デバッグ実行マシンは、デバッグ機能にアクセスするために開発者が使用しているデバッグクライアントと（カスタムツーリングインターフェース、ＪＤＷＰおよびＪＤＩを介して）通信し得る。
【００４１】
図５は、コンピュータシステムの実施例を示す。図５に示されるコンピュータシステムは、上記のコンピュータ化された装置の一部として組込まれてもよい。例えば、コンピュータシステム５００は、本願で説明したウェブサーバ、ユーザコンピュータシステムおよび開発者コンピュータシステムの構成要素のうちのいくつかを表わし得る。図５は、さまざまな実施例によって提供される方法を実行することができるコンピュータシステム５００の一実施例の概略図である。なお、図５は、さまざまな構成要素の一般化された図を示すよう意図されているに過ぎず、当該構成要素のうちのいずれかまたは全てが適宜利用されてもよい。したがって、図５は、比較的分離された態様または比較的一体化された態様で個々のシステム要素をいかに実現できるかを大まかに示している。
【００４２】
バス５０５を介して電気的に結合可能な（またはそうでなければ適宜通信し得る）ハードウェア要素を備えるコンピュータシステム５００が示されている。当該ハードウェア要素は、１つ以上の汎用プロセッサおよび／または１つ以上の特殊用途プロセッサ（デジタル信号処理チップ、グラフィック加速プロセッサなど）を含むがこれらに限定されない１つ以上のプロセッサ５１０と、マウス、キーボードなどを含み得るがこれらに限定されない１つ以上の入力装置５１５と、ディスプレイ装置、プリンタなどを含み得るがこれらに限定されない１つ以上の出力装置５２０とを含んでいてもよい。
【００４３】
コンピュータシステム５００は、１つ以上の非一時的な記憶装置５２５をさらに含んでいてもよく（および／または通信し得て）、当該１つ以上の非一時的な記憶装置５２５は、ローカルなおよび／またはネットワークアクセス可能なストレージを備え得るがこれらに限定されるものではなく、および／または、ディスクドライブ、ドライブアレイ、光学記憶装置、プログラム可能、フラッシュ更新可能などであり得るランダムアクセスメモリ（random access memory：ＲＡＭ）および／またはリードオンリメモリ（read-only memory：ＲＯＭ）などのソリッドステート記憶装置を含み得るがこれらに限定されるものではない。このような記憶装置は、さまざまなファイルシステム、データベース構造などを含むがこれらに限定されない任意の適切なデータストアを実装するように構成され得る。
【００４４】
また、コンピュータシステム５００は、通信サブシステム５３０を含んでいてもよく、当該通信サブシステム５３０は、モデム、ネットワークカード（無線または有線）、赤外線通信装置、無線通信装置および／またはチップセット（ブルートゥース（登録商標）装置、８０２．１１装置、ＷｉＦｉ装置、ＷｉＭａｘ装置、セルラ通信設備など）などを含み得るがこれらに限定されるものではない。通信サブシステム５３０は、ネットワーク（一例を挙げると、以下に記載のネットワークなど）、他のコンピュータシステムおよび／または本明細書に記載されているその他の装置とデータをやり取りすることを可能にし得る。多くの実施例では、コンピュータシステム５００は、上記のＲＡＭまたはＲＯＭ装置を含み得るワーキングメモリ５３５をさらに備えている。
【００４５】
また、コンピュータシステム５００は、現在のところワーキングメモリ５３５内に位置しているように示されているソフトウェア要素を備えていてもよく、当該ソフトウェア要素は、オペレーティングシステム５４０、装置ドライバ、実行可能なライブラリ、および／または、１つ以上のアプリケーションプログラム５４５などの他のコードを含み、当該１つ以上のアプリケーションプログラム５４５は、本明細書に記載されているように、さまざまな実施例によって提供されるコンピュータプログラムを備えていてもよく、および／または、他の実施例によって提供される方法を実行するようにおよび／またはシステムを構成するように設計されてもよい。単に一例として、上記の方法に関して記載される１つ以上の手順は、コンピュータ（および／またはコンピュータ内のプロセッサ）によって実行可能なコードおよび／または命令として実行されてもよい。そして、ある局面では、このようなコードおよび／または命令は、上記の方法に従って１つ以上のオペレーションを実行するように汎用コンピュータ（または他の装置）を構成および／または適合させるために使用され得る。
【００４６】
１組のこれらの命令および／またはコードは、上記の非一時的な記憶装置５２５などの非一時的なコンピュータ読取可能記憶媒体に格納されてもよい。いくつかの例では、記憶媒体は、コンピュータシステム５００などのコンピュータシステム内に組込まれてもよい。他の実施例では、記憶媒体は、コンピュータシステムから分離していてもよく（例えばコンパクトディスクなどの取外し可能な媒体）、および／または、命令／コードを格納した状態で汎用コンピュータをプログラム、構成および／または適合させるために記憶媒体を使用できるようにインストールパッケージに設けられてもよい。これらの命令は、コンピュータシステム５００によって実行可能である実行可能なコードの形態をとってもよく、および／または、（例えばさまざまな一般的に入手可能なコンパイラ、インストールプログラム、圧縮／復元ユーティリティなどのうちのいずれかを使用して）コンピュータシステム５００でコンパイルおよび／またはインストールすると実行可能なコードの形態をとるソースおよび／またはインストール可能なコードの形態をとってもよい。
【００４７】
具体的な要件に従って実質的な変更を行ってもよいということが当業者に明らかであろう。例えば、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素がハードウェア、（アプレットなどの高移植性ソフトウェアを含む）ソフトウェア、またはそれら両方で実現されてもよい。さらに、ネットワーク入力／出力装置などの他の計算装置への接続が利用されてもよい。
【００４８】
上記のように、一局面では、いくつかの実施例は、本発明のさまざまな実施例に従って方法を実行するために（コンピュータシステム５００などの）コンピュータシステムを利用し得る。１組の実施例によれば、このような方法の手順のうちのいくつかまたは全ては、プロセッサ５１０がワーキングメモリ５３５に含まれる（オペレーティングシステム５４０および／またはアプリケーションプログラム５４５などの他のコードに組込まれ得る）１つ以上の命令の１つ以上のシーケンスを実行することに応答して、コンピュータシステム５００によって実行される。このような命令は、非一時的な記憶装置５２５のうちの１つ以上などの別のコンピュータ読取可能媒体からワーキングメモリ５３５に読取られてもよい。単に一例として、ワーキングメモリ５３５に含まれる命令のシーケンスの実行により、プロセッサ５１０は、本明細書に記載されている方法の１つ以上の手順を実行し得る。
【００４９】
本明細書で用いられる「マシン読取可能媒体」および「コンピュータ読取可能媒体」という用語は、特定の態様でマシンを動作させるデータの提供に関与する任意の媒体を指す。コンピュータシステム５００を使用して実現される実施例では、さまざまなコンピュータ読取可能媒体が、命令／コードをプロセッサ５１０に提供して実行することに関与し得て、および／または、このような命令／コードを格納および／または搬送するために使用され得る。多くの実現例では、コンピュータ読取可能媒体は、物理的な記憶媒体および／または有形の記憶媒体である。このような媒体は、不揮発性媒体または揮発性媒体の形態をとってもよい。不揮発性媒体としては、例えば、非一時的な記憶装置５２５などの光ディスクおよび／または磁気ディスクが挙げられる。揮発性媒体としては、ワーキングメモリ５３５などのダイナミックメモリが挙げられるが、これに限定されるものではない。
【００５０】
物理的なコンピュータ読取可能媒体および／または有形のコンピュータ読取可能媒体の一般的形態としては、例えば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、またはその他の磁気媒体、ＣＤ−ＲＯＭ、その他の光学媒体、パンチカード、紙テープ、穴のパターンを有するその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、その他のメモリチップもしくはカートリッジ、またはコンピュータが命令および／またはコードを読取ることができるその他の媒体が挙げられる。
【００５１】
コンピュータ読取可能媒体のさまざまな形態が、１つ以上の命令の１つ以上のシーケンスをプロセッサ５１０に搬送して実行することに関与し得る。単に一例として、当該命令は、最初は、リモートコンピュータの磁気ディスクおよび／または光ディスクで搬送され得る。リモートコンピュータは、当該命令をそのダイナミックメモリにロードし、コンピュータシステム５００によって受取られおよび／または実行されるように伝送媒体を介して信号として当該命令を送り得る。
【００５２】
通信サブシステム５３０（および／またはその構成要素）は一般に信号を受取り、次いで、バス５０５が当該信号（および／または信号によって搬送されるデータ、命令など）をワーキングメモリ５３５に搬送し得て、プロセッサ５１０は、ワーキングメモリ５３５から命令を検索して実行する。ワーキングメモリ５３５によって受取られた命令は、プロセッサ５１０による実行の前または後のいずれかにおいて、任意に非一時的な記憶装置５２５に格納され得る。
【００５３】
上記の方法、システムおよび装置は、例である。さまざまな構成は、さまざまな手順または構成要素を適宜省略、置換または追加してもよい。例えば、代替的な構成では、方法は、上記の順序とは異なる順序で実行されてもよく、および／または、さまざまな段階が追加、省略および／または組合わせられてもよい。また、特定の構成に関して記載された特徴は、さまざまな他の構成において組合わせられてもよい。同様に、構成の異なる局面および要素は組合わせられてもよい。また、科学技術は進化するので、要素の多くは例であり、本開示または請求項の範囲を限定するものではない。
【００５４】
（実現例を含む）例示的な構成が完全に理解されるように具体的な詳細が明細書に記載されている。しかし、これらの具体的な詳細がなくても構成は実施可能である。例えば、構成を曖昧にすることを避けるために、周知の回路、プロセス、アルゴリズム、構造および技術が不必要な詳細なしに示されている。この説明は、例示的な構成を提供しているに過ぎず、請求項の範囲、適用可能性または構成を限定するものではない。むしろ、構成の先の説明は、上記の技術を実現するための実施可能に十分な説明を当業者に提供する。本開示の精神または範囲から逸脱することなく、要素の機能および配置の点でさまざまな変更がなされてもよい。
【００５５】
また、構成は、フロー図またはブロック図として示されるプロセスとして記載されてもよい。各々はシーケンシャルなプロセスとしてオペレーションを記載し得るが、オペレーションの多くは、並列にまたは同時に実行されてもよい。また、オペレーションの順序は、再編成されてもよい。プロセスは、図に含まれない追加のステップを有していてもよい。さらに、方法の例は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語またはそれらの任意の組合わせによって実現されてもよい。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードで実現される場合、必要なタスクを実行するためのプログラムコードまたはコードセグメントは、記憶媒体などの非一時的なコンピュータ読取可能媒体に格納されてもよい。プロセッサが上記のタスクを実行してもよい。
【００５６】
いくつかの例示的な構成について説明してきたが、本開示の精神から逸脱することなくさまざまな変形例、代替的な構造および等価物が使用されてもよい。変形例は、開示されている特徴の任意の関連の組合わせを含む。例えば、上記の要素は、より大きなシステムの構成要素であってもよく、他の規則が本発明の適用に優先してもよく、またはそうでなければ本発明の適用を変更してもよい。また、上記の要素を検討する前、最中または後に、いくつかのステップが行われてもよい。したがって、上記の説明は、特許請求の範囲を縛るものではない。
【図１】
0006280126.tif 000002
【図２】
0006280126.tif 000003
【図３】
0006280126.tif 000004
【図４】
0006280126.tif 000005
【図５】
0006280126.tif 000006