(57)【特許請求の範囲】
【請求項１】
統合開発環境（ＩＤＥ）における非同期コード・テストの方法であって、前記方法は、
コンピュータのプロセッサが、ソース・コード・エディタを介してユーザによって提供された入力に従って、データベース内に入力コードを作成するステップであって、前記ＩＤＥは、前記ソース・コード・エディタ、影響アナライザ、テスト・ケース・ランチャ、およびグラフィカル・ユーザ・インターフェース（ＧＵＩ）を含み、前記データベースは、前記ＩＤＥをホストしている前記コンピュータに結合されている、前記ステップと、
前記影響アナライザを使用して、前記入力コードからテスト・ケース・リストを生成するステップであって、前記影響アナライザは、前記ユーザが前記入力コードのコード・ブロックを変更した直後に前記テスト・ケース・リストが生成されるように、前記ソース・コード・エディタと同時に実行され、前記テスト・ケース・リストの各テスト・ケースは、個別のテスト・ケース識別子と、個別の開始優先度とを含む少なくとも１つのテスト・ケースを含み、前記個別の開始優先度は、前記変更されたコード・ブロックに各テスト・ケースがどの程度強く関連するかを定量化し、前記各テスト・ケースは、前記個別のテスト・ケース識別子によって一意的に特定される、前記ステップと、
前記変更されたコード・ブロックに関するテスト実行結果を、前記テスト・ケース・リストの前記少なくとも１つのテスト・ケースを各テスト・ケースの前記個別の開始優先度に基づき前記テスト・ケース・ランチャを使用して非同期的に実行することによって、発生させるステップと、
前記テスト実行結果を、前記ＧＵＩを用いて前記ユーザに伝達するステップと、
を含む方法。
【請求項２】
前記テスト・ケース・リストを前記生成するステップは、
前記作成するステップからの前記入力コードの第１のスナップショットを取得するステップであって、前記第１のスナップショットは、前記影響アナライザの実行スタックの一部である、前記ステップと、
前記第１のスナップショットを構文解析することによって、前記入力コードのコード・ブロック構造を構築するステップであって、前記コード・ブロック構造は、前記入力コードにおいて採用されているプログラミング言語によって決定される、前記ステップと、
前記ユーザが前記入力コードの変更を完了したことを検出すると、前記入力コードの第２のスナップショットを取得するステップと、
前記変更されたコード・ブロックを、前記第１のスナップショットと、前記第２のスナップショットとを比較することによって決定するステップと、
前記変更されたコード・ブロックによる影響を受ける少なくとも１つのコード・ブロックを、前記構築するステップからの前記コード・ブロック構造から選択し、その後、選択されたコード・ブロックそれぞれが前記変更されたコード・ブロックにどの程度強く関連するかを定量化する個別の関連強度に、前記選択されたコード・ブロックそれぞれを関係付けるステップと、
前記選択された少なくとも１つのコード・ブロックおよび前記個別の関連強度を含む、テスト・ケースを作成し、前記選択された少なくとも１つのコード・ブロックのすべての関連強度の合計として、前記テスト・ケースの開始優先度を計算するステップと、
前記作成されたテスト・ケースおよび計算された開始優先度を、前記テスト・ケース・リストのエントリとして前記データベースに記憶するステップと、
を含む、請求項１に記載の方法。
【請求項３】
選択されたコード・ブロックそれぞれの前記個別の関連強度は、前記選択されたコード・ブロックそれぞれと、前記変更されたコード・ブロックとの間の、前記コード・ブロック構造において決定される包含関係および呼び出し関係によって決定され、前記コード・ブロックそれぞれおよび前記変更されたコード・ブロックが相互に直接的に呼び出す場合、ならびに前記コード・ブロックそれぞれおよび前記変更されたコード・ブロックが互いを直接包含する場合、前記関連強度はより強く、前記コード・ブロックそれぞれの関連強度すべての合計が小さいほど、前記開始優先度はより強い、請求項２に記載の方法。
【請求項４】
前記テスト実行結果を前記発生させるステップは、
前記データベースから前記テスト・ケース・リストを読み出すステップであって、前記データベースはリアルタイムのメモリ動作のために使用可能である、前記ステップと、
前記読み出されたテスト・ケース・リストの少なくとも１つのテスト・ケースを有する実行キューをセットするステップと、
前記ＧＵＩを使用して、前記実行キューを前記ユーザに対して表示するステップと、
前記表示された実行キューからの前記少なくとも１つのテスト・ケースを、前記少なくとも１つのテスト・ケースの各テスト・ケースに関連する個別の開始優先度の順に、非同期的に実行するステップと、
前記各テスト・ケースの前記テスト実行結果を生成するステップであって、前記テスト実行結果は、前記テスト・ケース識別子と、前記テスト・ケースが成功か、または失敗かについてのインジケーションとを含む、前記ステップと、
を含む、請求項１に記載の方法。
【請求項５】
前記テスト実行結果を前記発生させるステップは、
前記表示の後で、前記ユーザに、実行する第１のテスト・ケースを選択するよう促すステップであって、その結果前記ユーザは、前記第１のテスト・ケースに関連する開始優先度にかかわらず前記テスト・ケースを選択する、前記ステップと、
第１のテスト実行結果を、前記選択された第１のテスト・ケースを非同期的に実行することによって生成するステップと、
をさらに含む、請求項４に記載の方法。
【請求項６】
請求項１−５のいずれか１項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【請求項７】
プロセッサと、前記プロセッサに結合されたコンピュータ可読メモリ・ユニットとを含むコンピュータ・システムであって、前記コンピュータ可読メモリ・ユニットは、前記プロセッサによって実行されると統合開発環境（ＩＤＥ）における非同期コード・テストの方法を実装する命令を含み、前記方法は、
ソース・コード・エディタを介してユーザによって提供された入力に従って、データベース内に入力コードを作成するステップであって、前記ＩＤＥは、前記ソース・コード・エディタ、影響アナライザ、テスト・ケース・ランチャ、およびグラフィカル・ユーザ・インターフェース（ＧＵＩ）を含み、前記データベースは、前記ＩＤＥをホストしている前記コンピュータに結合されている、前記ステップと、
前記影響アナライザを使用して、前記入力コードからテスト・ケース・リストを生成するステップであって、前記影響アナライザは、前記ユーザが前記入力コードのコード・ブロックを変更した直後に前記テスト・ケース・リストが生成されるように、前記ソース・コード・エディタと同時に実行され、前記テスト・ケース・リストの各テスト・ケースは、個別のテスト・ケース識別子と、個別の開始優先度とを含む少なくとも１つのテスト・ケースを含み、前記個別の開始優先度は、前記変更されたコード・ブロックに各テスト・ケースがどの程度強く関連するかを定量化し、前記各テスト・ケースは、前記個別のテスト・ケース識別子によって一意的に特定される、前記ステップと、
前記変更されたコード・ブロックに関するテスト実行結果を、前記テスト・ケース・リストの前記少なくとも１つのテスト・ケースを各テスト・ケースの前記個別の開始優先度に基づき前記テスト・ケース・ランチャを使用して非同期的に実行することによって、発生させるステップと、
前記テスト実行結果を、前記ＧＵＩを用いて前記ユーザに伝達するステップと、
を含む、コンピュータ・システム。
【請求項８】
前記テスト・ケース・リストを前記生成するステップは、
前記作成するステップからの前記入力コードの第１のスナップショットを取得するステップであって、前記第１のスナップショットは、前記影響アナライザの実行スタックの一部である、前記ステップと、
前記第１のスナップショットを構文解析することによって、前記入力コードのコード・ブロック構造を構築するステップであって、前記コード・ブロック構造は、前記入力コードにおいて採用されているプログラミング言語によって決定される、前記ステップと、
前記ユーザが前記入力コードの変更を完了したことを検出すると、前記入力コードの第２のスナップショットを取得するステップと、
前記変更されたコード・ブロックを、前記第１のスナップショットと、前記第２のスナップショットとを比較することによって決定するステップと、
前記変更されたコード・ブロックによる影響を受ける少なくとも１つのコード・ブロックを、前記構築するステップからの前記コード・ブロック構造から選択し、その後、選択されたコード・ブロックそれぞれが前記変更されたコード・ブロックにどの程度強く関連するかを定量化する個別の関連強度に、前記選択されたコード・ブロックそれぞれを関係付けるステップと、
前記選択された少なくとも１つのコード・ブロックおよび前記個別の関連強度を含む、テスト・ケースを作成し、前記選択された少なくとも１つのコード・ブロックのすべての関連強度の合計として、前記テスト・ケースの開始優先度を計算するステップと、
前記作成されたテスト・ケースおよび計算された開始優先度を、前記テスト・ケース・リストのエントリとして前記データベースに記憶するステップと、
を含む、請求項７に記載のコンピュータ・システム。
【請求項９】
選択されたコード・ブロックそれぞれの前記個別の関連強度は、前記選択されたコード・ブロックそれぞれと、前記変更されたコード・ブロックとの間の、前記コード・ブロック構造において決定される包含関係および呼び出し関係によって決定され、前記コード・ブロックそれぞれおよび前記変更されたコード・ブロックが相互に直接的に呼び出す場合、ならびに前記コード・ブロックそれぞれおよび前記変更されたコード・ブロックが互いを直接包含する場合、前記関連強度はより強く、前記コード・ブロックそれぞれの関連強度すべての合計が小さいほど、前記開始優先度はより強い、請求項８に記載のコンピュータ・システム。
【請求項１０】
前記テスト実行結果を前記発生させるステップは、
前記データベースから前記テスト・ケース・リストを読み出すステップであって、前記データベースはリアルタイムのメモリ動作のために使用可能である、前記ステップと、
前記読み出されたテスト・ケース・リストの少なくとも１つのテスト・ケースを有する実行キューをセットするステップと、
前記ＧＵＩを使用して、前記実行キューを前記ユーザに対して表示するステップと、
前記表示された実行キューからの前記少なくとも１つのテスト・ケースを、前記少なくとも１つのテスト・ケースの各テスト・ケースに関連する個別の開始優先度の順に、非同期的に実行するステップと、
前記各テスト・ケースの前記テスト実行結果を生成するステップであって、前記テスト実行結果は、前記テスト・ケース識別子と、前記テスト・ケースが成功か、または失敗かについてのインジケーションとを含む、前記ステップと、
を含む、請求項７に記載のコンピュータ・システム。
【請求項１１】
前記テスト実行結果を前記発生させるステップは、
前記表示の後で、前記ユーザに、実行する第１のテスト・ケースを選択するよう促すステップであって、その結果前記ユーザは、前記第１のテスト・ケースに関連する開始優先度にかかわらず前記テスト・ケースを選択する、前記ステップと、
第１のテスト実行結果を、前記選択された第１のテスト・ケースを非同期的に実行することによって生成するステップと、
をさらに含む、請求項１０に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、統合開発環境（ＩＤＥ：Ｉｎｔｅｇｒａｔｅｄ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｅｎｖｉｒｏｎｍｅｎｔ）と一般に呼ばれる統合プログラミング・ツールにおいてコンピュータ・プログラムを開発しながら、プログラム・コードを非同期的にテストするシステムおよび関連する方法を開示する。
【背景技術】
【０００２】
従来のコンピュータ・プログラム開発モデルでは、プログラマは、プログラム・コードの入力、プログラム・コードの実行可能フォーマットへの変換、および意図した結果を求めてプログラム・コードを検証するための実行可能プログラム・コードの実行という、典型的なサイクルを繰り返す。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
プログラム・コードは、複数のモジュールを含み、これらが互いに呼び出しを行って、リターン時にデータを交換するため、プログラム・コードのデバッギングは、従来のＩＤＥツールを用いても効率が悪く、大きな労働力を要する。
【課題を解決するための手段】
【０００４】
本発明の一実施形態によれば、統合開発環境（ＩＤＥ）における非同期コード・テスト（ａｓｙｎｃｈｒｏｎｏｕｓ  ｃｏｄｅ  ｔｅｓｔｉｎｇ）の方法は、コンピュータのプロセッサが、ソース・コード・エディタを介してユーザによって提供された入力に従って、データベース内に入力コードを作成するステップであって、ＩＤＥは、ソース・コード・エディタ、影響アナライザ（ｉｍｐａｃｔ  ａｎａｌｙｚｅｒ）、テスト・ケース・ランチャ（ｔｅｓｔ  ｃａｓｅ  ｌａｕｎｃｈｅｒ）、およびグラフィカル・ユーザ・インターフェース（ＧＵＩ：ｇｒａｐｈｉｃａｌ  ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ）を含み、データベースは、ＩＤＥをホストしているコンピュータに結合されている、該ステップと、影響アナライザを使用して、入力コードからテスト・ケース・リストを生成するステップであって、影響アナライザは、ユーザが入力コードのコード・ブロックを変更した直後にテスト・ケース・リストが生成されるように、ソース・コード・エディタと同時に実行され、テスト・ケース・リストの各テスト・ケースは、個別のテスト・ケース識別子と、個別の開始優先度（ｌａｕｎｃｈｉｎｇ  ｐｒｉｏｒｉｔｙ）とを含む少なくとも１つのテスト・ケースを含み、個別の開始優先度は、前記変更されたコード・ブロックに各テスト・ケースがどの程度強く関連するかを定量化し、前記各テスト・ケースは、個別のテスト・ケース識別子によって一意的に特定される、該ステップと、変更されたコード・ブロックに関するテスト実行結果を、テスト・ケース・リストの前記少なくとも１つのテスト・ケースを各テスト・ケースの個別の開始優先度に基づきテスト・ケース・ランチャを使用して非同期的に実行することによって、発生させるステップと、テスト実行結果を、ＧＵＩを用いてユーザに伝達するステップとを含む。
【０００５】
本発明の一実施形態によれば、コンピュータ・プログラム製品は、コンピュータ可読プログラム・コードを具現化するコンピュータ可読メモリ・ユニットを含む。コンピュータ可読プログラム・コードは、コンピュータ・システムのプロセッサによって実行されると統合開発環境（ＩＤＥ）における非同期コード・テストの方法を実装する命令を含む。
【０００６】
本発明の一実施形態によれば、コンピュータ・システムは、プロセッサと、プロセッサに結合されたコンピュータ可読メモリ・ユニットとを含み、コンピュータ可読メモリ・ユニットは、プロセッサによって実行されると統合開発環境（ＩＤＥ）における非同期コード・テストの方法を実装する命令を含む。
【０００７】
本発明の一実施形態によれば、コンピュータ・インフラストラクチャをサポートするプロセスは、コンピューティング・システムにおけるコンピュータ可読コードの作成、統合、ホスト、維持、および展開のうちの少なくとも１つに関して少なくとも１つのサポート・サービスを提供することを含み、このコードは、コンピューティング・システムとともに、統合開発環境（ＩＤＥ）における非同期コード・テストの方法を実行することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態による、統合開発環境（ＩＤＥ）における非同期コード・テストのためのシステムを示す。
【図２】本発明の実施形態による、図１の統合開発環境（ＩＤＥ）ツールによって実行される非同期コード・テストの方法を示すフローチャートである。
【図３】本発明の実施形態による、図２のステップ１２０で影響アナライザによって実行される、入力コードに対する更新のコード・ブロック構造を解析する方法を示すフローチャートである。
【図４】本発明の実施形態による、図２のステップ１３０でテスト・ケース・ランチャによって実行される、テスト・ケース・リストのエントリを実行してテスト実行結果を生成する方法を示すフローチャートである。
【図５】本発明の実施形態による、図３のステップ２２０で影響アナライザによって構築されたコード・ブロック構造を備える、データベースに記憶された入力コードの例である。
【図６】本発明の実施形態による、図５のコード・ブロック間の様々な関係を示す。
【図７】本発明の実施形態による、図３のステップ２６０で影響アナライザによって作成されたテスト・ケース・リストの例を示す。
【図８】本発明の実施形態による、図３のステップ２６０で影響アナライザによって作成されたテスト・ケース・リストの例を示す。
【図９】本発明の実施形態による、図１の統合開発環境（ＩＤＥ）ツールの画面表示を示す。
【図１０】本発明の実施形態による、統合開発環境（ＩＤＥ）における非同期コード・テストに使用されるコンピュータ・システムを示す。
【発明を実施するための形態】
【０００９】
図１は、本発明の実施形態による、統合開発環境（ＩＤＥ）ツール２１における非同期コード・テストのためのシステム１０を示す。
【００１０】
システム１０は、ユーザ１１、統合開発環境（ＩＤＥ）ツール２１、およびＩＤＥツール２１に結合されたデータベース３１を含む。本発明の一実施形態では、データベース３１は、ＩＤＥツール２１をホストするコンピュータ・システムの記憶装置／メモリ・デバイスから割り当てられる。採用されるコンピュータ・システムのコンポーネントの詳細については、下記の図１０の説明を参照されたい。
【００１１】
ＩＤＥツール２１は、ソース・コード・エディタ２２、影響アナライザ２３、テスト・ケース・ランチャ２４、およびグラフィカル・ユーザ・インターフェース（ＧＵＩ）２５を含む。ＩＤＥツール２１はさらに、コンパイラ、ローダ、リンカなどの従来のＩＤＥツールの典型的なコンポーネントを含むが、これらについては本明細書には記載されない。ＩＤＥツール２１によって実行されるステップについては、下記の図２の説明を参照されたい。
【００１２】
ＩＤＥツールは、典型的には、ソフトウェア開発プロジェクトにおいて、プログラマのブログラミング効率および生産性を改善するために採用される。従来の統合開発環境（ＩＤＥ）ツールの例は、特に、Ｅｃｌｉｐｓｅ（ＴＭ）、ＩＢＭ（ＩＢＭ社の登録商標）Ｒａｔｉｏｎａｌ（ＩＢＭ社の登録商標）Ａｐｐｌｉｃａｔｉｏｎ  Ｄｅｖｅｌｏｐｅｒ（ＲＡＤ）、Ｍｉｃｒｏｓｏｆｔ（Ｒ）．ＮＥＴ（ＴＭ）  Ｖｉｓｕａｌ  Ｓｔｕｄｉｏ（Ｒ）などであると考えられる（Ｅｃｌｉｐｓｅは、Ｅｃｌｉｐｓｅ  Ｆｏｕｎｄａｔｉｏｎの米国およびその他の国々における商標であり、ＩＢＭおよびＲａｔｉｏｎａｌはインターナショナル・ビジネス・マシーンズ・コーポレーションの米国およびその他の国々における登録商標であり、Ｍｉｃｒｏｓｏｆｔ、Ｖｉｓｕａｌ  Ｓｔｕｄｉｏおよび．ＮＥＴは、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎの米国およびその他の国々における登録商標または商標である）。
【００１３】
ユーザ１１は、ＧＵＩ２５を介してＩＤＥツール２１と対話して、データベース３１内の入力コード３２を作成し、それを編集し、さらに影響アナライザ２３によって生成される１つ以上のテスト・ケースを実行するためにテスト・ケース・ランチャ２４を動作させる。
【００１４】
入力コード３２は、ユーザ１１がソフトウェア・プロジェクトの一部として開発している対象コードである。典型的なソフトウェア開発方法では、ユーザ１１は、対象コードを編集し、対象コードをテストして対象コードが意図した結果を発生させるかどうか確かめるというサイクルを繰り返す。ユーザ１１が対象コードを変更すると、ユーザ１１はさらに、対象コードの変更に対応するテスト・ケースも書く必要がある。テスト・ケースは、対象コードに出現する各変数のデータ値および条件の組み合わせであり、変更された対象コードがどのように動くかを検査し、変更された対象コードによって生成される結果を得るためのものである。テスト・ケースの実行において、従来のＩＤＥツールは、順次または同期実行モードを利用し、対象コードの呼び出し元（ｃａｌｌｅｒ）は、呼び出し先（ｃａｌｌｅｅ）のリターンを待ってからプログラム・フローを続行する。順次実行モードとは対照的に、対象コードが非同期実行モードで実行される場合、対象コードの呼び出し元は、呼び出し先のリターンを待たず、呼び出し先を呼び出した後は次のステップへと続行する。呼び出されるモジュールはそれぞれ、呼び出し先モジュールまたは単に呼び出し先とも呼ばれ、呼び出し元モジュールのスレッドとは別のスレッドで実行される。呼び出し先は、呼び出し先が実行を完了した後、呼び出し先のスレッドを終了させ、呼び出し元モジュールに制御を返す。マルチスレッド処理環境でのバックグラウンド処理のように、通常、時間のかかる動作は、非同期的に実行される。
【００１５】
本明細書では、「テスト・ケース」という用語は、変更されたコード・ブロックに関連する一連の条件、もしくは変数のインスタンス、またはその両方として定義され、対象コードが正しく動作し、対象コードを変更する際にユーザが意図した結果を発生させるかどうかを、ユーザが判断できるようにするものである。ソフトウェア工学で典型的なテスト・ケース・フォーマットは、特に、テスト・ケース識別子、説明、ステップ番号／実行順序、前提条件（単数または複数）、深度、フラグなどを含む。ＩＢＭ  ＷｅｂＳｐｈｅｒｅ（ＩＢＭ社の登録商標）Ｓｔｕｄｉｏ  Ａｓｓｅｔ  Ａｎａｌｙｚｅｒ（ＷＳＡＡ）は、メインフレーム、Ｊａｖａ（Ｒ）、および複合アプリケーションを含む企業アプリケーション内および企業アプリケーション間の依存関係について自動解析を提供する、市販のＩＴ維持ツールの例である（ＷｅｂＳｐｈｅｒｅは、インターナショナル・ビジネス・マシーンズ・コーポレーションの米国およびその他の国々における登録商標であり、Ｊａｖａは、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓの米国およびその他の国々における商標または登録商標である）。本発明の一実施形態では、テスト・ケース・フォーマットは、ＪＵｎｉｔテスト・ケース・クラス「ｏｒｇ．ｊｕｎｉｔ．Ｔｅｓｔ」をインポートすることによって使用される、Ｊａｖａプログラミング言語のＪＵｎｉｔモデルを採用する。
【００１６】
影響アナライザ２３は、データベース３１への入力コード３２の更新がユーザ１１によって行われると、入力コード３２を自動的に解析する。その後、影響アナライザ２３は、テスト・ケースと、個々に関連する開始優先度との少なくとも１つのペア、すなわち（ｔｅｓｔ  ｃａｓｅ，ｌａｕｎｃｈｉｎｇ  ｐｒｉｏｒｉｔｙ）を含むテスト・ケース・リスト３３を生成し、テスト・ケース・リストをデータベース３１に記憶する。影響アナライザ２３によって実行されるステップおよびテスト・ケース・リスト３３の詳細については、下記の図３の説明を参照されたい。テスト・ケース・リスト３３の例については、下記の図８を参照されたい。
【００１７】
入力コード３２の各コード・ブロックは、ユーザ１１によって変更された入力コード３２のコード・ブロックと関係している。コード・ブロックは、ユーザ１１によって入力コード３２において採用されたプログラミング言語によって定義される。変更されたコード・ブロックと、各コード・ブロックとの間の個別の関連度は、入力コード３２において採用されたプログラミング言語の構造に従って決定される。本明細書では、「コード・ブロック」という用語は、特定可能なプログラミング要素または単位として定義される。変更されたコード・ブロックと、入力コード３２の各コード・ブロックとの間の個別の関連度は、各コード・ブロックの個別の関連強度（ａｓｓｏｃｉａｔｉｏｎ  ｓｔｒｅｎｇｔｈ）値として定量化される。関連強度の計算において考慮される要素は、特に、深度と呼ばれるコード・ブロックのネスティング・レベル、コード・ブロックを呼び出す呼び出し元の数、呼び出しの頻度などであればよい。
【００１８】
影響アナライザ２３は、コード・ブロック単位に基づき各テスト・ケースを生成し、テスト・ケース内のコード・ブロックと、変更されたコード・ブロックとの間のすべての関連強度の合計／優先度を集合的に表すよう、各テスト・ケースの個別の開始優先度を計算する。したがって、テスト・ケースが、変更されたコード・ブロックに強く関連するコード・ブロックを含む場合、テスト・ケースの開始優先度は、そのような、２つのコード・ブロック間の強い関連を反映する。
【００１９】
テスト・ケース・ランチャ２４は、影響アナライザ２３によって生成されたテスト・ケース・リスト３３を、データベース３１から読み出し、様々な実行モードでテスト・ケース・リスト３３のテスト・ケースを実行する。テスト・ケース・ランチャ２４は、テスト・ケース・リスト３３を実行キュー４２に記憶し、実行キュー４２では、テスト・ケース・リスト３３内のテスト・ケースが、各テスト・ケースの個々に関連する開始優先度によって順序付けられる。テスト・ケース・ランチャ２４によって実行されるステップに関しては、下記の図４の説明を参照されたい。
【００２０】
本発明の一実施形態では、テスト・ケース・ランチャ２４は、ＧＵＩ２５を介してユーザ１１によって選択されたテスト・ケースを実行する。テスト・ケース・ランチャ２４は、各テスト・ケースを実行してテスト実行結果３４を生成するためにユーザによってトリガされると、実行キュー４２をポップする。本発明の他の実施形態では、テスト・ケース・ランチャ２４は、各テスト・ケースの個々に関連する開始優先度に従って、テスト・ケース・リスト３３のテスト・ケースを自動的に実行する。本発明の同実施形態では、影響アナライザ２３およびテスト・ケース・ランチャ２４が、リアルタイムで何のユーザ対話もなくシームレスに動作するため、ユーザ１１が入力コード３２のコード・ブロックを更新し、関係のあるテスト・ケースのコンテキストが完成すると、ユーザ１１は、即座にテスト実行結果３４を見ることができる。
【００２１】
データベース３１は、ユーザ１１によって提供された入力コード３２と、影響アナライザ２３によって生成されたテスト・ケース・リスト３３と、テスト・ケース・ランチャ２４によって生成されたテスト実行結果３４とを記憶する。ユーザ１１は、ＧＵＩ２５およびソース・コード・エディタ２２を使用して、入力コード３２を変更する。影響アナライザ２３は、テスト・ケース・ランチャ２４がアクセスするよう、データベース３１内にテスト・ケース・リスト３３を記憶する。影響アナライザ２３およびテスト・ケース・ランチャ２４が同じプラットフォーム上で実行される本発明の実施形態では、データベース３１は、リアルタイム応答のために、ローカル・メモリ・デバイスとして実装されるとよい。
【００２２】
本発明は、ソフトウェア・プロジェクトのデバッギング効率／作業生産性を改善するためのＩＤＥツール２１のコンポーネントとして、ソフトウェア開発の統合テスト段階よりも、特に単体テスト段階で実装されるとよい。入力コードが更新されるたびにテスト・ケースを自動的に実行することによって、ユーザは、入力コードの更新のテスト・ケースを作成および実行する時間を節約することができる。さらに、コーディング段階の間に各更新を自動でテストすることで、累積エラーの可能性が減り、結果として、更新された入力コードにおいて不具合の原因をより容易に特定できるようになる。さらに、テスト・ケースを非同期的に実行することによって、入力コード内の更新されたコード・ブロックのテストにおいて、呼び出し先の動作によってもたらされる遅延を伴わずに、テスト結果が生成されることが可能である。様々なプログラミング言語の従来の単体テスト・フレームワークは、特に、ＪａｖａのＪＵｎｉｔ、Ｃ言語のＣＵｎｉｔ、Ｅｃｌｉｐｓｅ  ＦｏｕｎｄａｔｉｏｎのＥｃｌｉｐｓｅ（ＴＭ）プロセス・フレームワーク（ＥＰＦ：Ｅｃｌｉｐｓｅ  Ｐｒｏｃｅｓｓ  Ｆｒａｍｅｗｏｒｋ）である（ＥｃｌｉｐｓｅはＥｃｌｉｐｓｅ  Ｆｏｕｎｄａｔｉｏｎの米国およびその他の国々における商標または登録商標）。本発明は、ユーザが、変更された入力コードを別々にテストしなくても入力コードの変更の結果をリアルタイムで見ることができるようにする。
【００２３】
図２は、本発明の実施形態による、上記の図１の統合開発環境（ＩＤＥ）ツールによって実行される非同期コード・テストの方法を示すフローチャートである。
【００２４】
ステップ１１０において、ＩＤＥツールは、データベースもしくはその他任意のメモリ・デバイスまたはその両方に、ソース・コード・エディタを用いたユーザ入力に基づき、入力コードを作成するが、この作成は、この入力コードがデータベースもしくはその他任意のメモリ・デバイスまたはその両方に存在しない場合に行われる。入力コードが既にデータベースもしくはその他任意のメモリ・デバイスまたはその両方に存在する場合は、ＩＤＥツールは、データベースに記憶されている入力コードを、ユーザ入力に基づき更新する。ＩＤＥツールは、ステップ１２０に移る。
【００２５】
ステップ１２０でＩＤＥツールの影響アナライザは、ステップ１１０で作成／更新された入力コードに対応するテスト・ケース・リストを生成する。テスト・ケース・リストは、少なくとも１つのテスト・ケースと、前記少なくとも１つのテスト・ケースの各テスト・ケースに関連する個別の開始優先度とを含む。影響アナライザは、ユーザがソース・コード・エディタを用いて入力コードを編集する間、ソース・コード・エディタと同時に実行される。影響アナライザは、ソース・コード・エディタから入力コードの更新を検出すると、入力コードの更新を解析するようトリガされる。影響アナライザによって実行されるステップについては、下記の図３の説明を参照されたい。ＩＤＥツールは、ステップ１３０に移る。
【００２６】
ステップ１３０で、ＩＤＥツールは、テスト・ケース・ランチャを実行して、ステップ１２０で影響アナライザによって作成されたテスト・ケース・リストを実行することによって、テスト実行結果を生成する。本発明の一実施形態では、テスト・ケース・ランチャは、開始優先度に従ってテスト・ケース・リストを自動的に実行するよう構成されている。本発明の他の実施形態では、テスト・ケース・ランチャは、ユーザによってテスト・ケース・ランチャのグラフィカル・ユーザ・インターフェース（ＧＵＩ）を介して選択される、テスト・ケース・リストのエントリを実行するよう構成されている。テスト・ケース・ランチャによって実行されるステップについては、下記の図４の説明を参照されたい。ＩＤＥツールは、ステップ１４０に移る。
【００２７】
ステップ１４０で、ＩＤＥツールは、ステップ１３０でテスト・ケース・ランチャによって生成されたテスト実行結果を、テスト・ケース・ランチャのＧＵＩを介してユーザに伝達する。テスト・ケース・ランチャ・ユーザ・インターフェースの例については、図９および付随する説明を参照されたい。ＩＤＥツールは、ステップ１１０で入力コードに対して行われた更新の非同期コード・テストを完了する。ＩＤＥツールは、ユーザがデータベースの入力コードを修正すれば、ステップ１１０〜１４０を繰り返すとよい。
【００２８】
図３は、本発明の実施形態による、上記の図２のステップ１２０の影響アナライザによって実行される、入力コードに対する更新のコード・ブロック構造を解析する方法を示すフローチャートである。
【００２９】
ステップ２１０で、影響アナライザは、入力コードを、データベースもしくはその他のメモリ・デバイスまたはその両方から、影響アナライザのローカル・メモリにロードする。その後、影響アナライザは、ロードされた入力コードに対応する第１のスナップショットを作る。本明細書では、「スナップショット」という用語は、ソース・コード・エディタを介して表示されるとおりの最新の入力コードを含む、影響アナライザの実行スタック（ｒｕｎ  ｓｔａｃｋ）から獲得される一連のデータとして定義される。デバッギングのコンテキストでは、スナップショットという用語は、Ｊａｖａスタック・トレースにおける、Ｊａｖａ仮想マシン（ＪＶＭ：Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）のスレッド状態を示すようより広く使用されている。任意のプロセスの実行スタックのコンテンツは一時的なものであるが、実行スタック・コンテンツを用いて作られたスナップショットは、通常の１つのデータとして、不変でアクセス可能な状態が保たれる。影響アナライザは、ステップ２２０に移る。
【００３０】
ステップ２２０で、影響アナライザは、ステップ２１０の第１のスナップショットを構文解析し、第１のスナップショットのコード・ブロック構造を構築する。コード・ブロック構造は、入力コード用に採用されたプログラミング言語の構文に従って決定される。入力コードがＪａｖａプログラミング言語を利用するコード・ブロック構造の例については、下記の図５、６、７、８を参照されたい。コード・ブロック構造は、本明細書では、コール・パス情報（ｃａｌｌ  ｐａｔｈ  ｉｎｆｏｒｍａｔｉｏｎ）と呼ばれることもある。影響アナライザは、ステップ２３０に移る。
【００３１】
ステップ２３０で、影響アナライザは、ユーザによる入力コードの更新を検出するが、これはユーザがソース・コード・エディタ内でプログラム・コードの変更を行った場合である。本発明の一実施形態では、ソース・コード・エディタは、ユーザが、入力コードのプログラミング要素を完成させた後に所定の期間タイピングを休止すると、入力コードに対する更新を影響アナライザに通知するよう構成されている。例えば、ユーザが「ｐｒｉｎｔ（ａ）；」をタイピングした後１５秒間休止すると、影響アナライザは入力コードの更新を検出する。影響アナライザは、ステップ２４０に移る。
【００３２】
ステップ２４０で、影響アナライザは、ステップ２３０で検出された変更された入力コードに対応する第２のスナップショットを作る。影響アナライザは、ステップ２５０に移る。
【００３３】
ステップ２５０で、影響アナライザは、ステップ２１０からの第１のスナップショットと、ステップ２４０からの第２のスナップショットとを比較することによって、変更されたコード・ブロックを決定する。影響アナライザは、ステップ２６０に移る。
【００３４】
ステップ２６０で、影響アナライザは、（ｔｅｓｔ  ｃａｓｅ，  ｌａｕｎｃｈｉｎｇ  ｐｒｉｏｒｉｔｙ）として表記される、テスト・ケースと、各テスト・ケースに個々に関連する開始優先度との少なくとも１つのペアを含むテスト・ケース・リストを、ステップ２２０で構築されたコード・ブロック構造に基づき作成する。各テスト・ケースは、（ｃｏｄｅ  ｂｌｏｃｋ，  ａｓｓｏｃｉａｔｉｏｎ  ｓｔｒｅｎｇｔｈ）の１つ以上のペアを含み、第１の引数「ｃｏｄｅ  ｂｌｏｃｋ」は、第２のスナップショットと、第１のスナップショットとの間の変化による影響を受けるコード・ブロックを特定し、第２の引数「ａｓｓｏｃｉａｔｉｏｎ  ｓｔｒｅｎｇｔｈ」は、第１の引数として特定されたコード・ブロックが、変更されたコード・ブロックにどの程度強く関連するかを定量化する。テスト・ケースの開始優先度は、テスト・ケース内の影響されるすべてのコード・ブロックのすべての関連強度の合計／優先度を集合的に表すよう計算される。影響アナライザは、ステップ２７０に移る。
【００３５】
本発明の一実施形態では、影響アナライザは、組（ｓｏｕｒｃｅ  ｆｉｌｅ  ｉｄ，  ｃｏｄｅ  ｂｌｏｃｋ  ｉｄ）を用いてテスト・ケース内のコード・ブロックを示す。本発明の同実施形態において、第２のパラメータのｃｏｄｅ  ｂｌｏｃｋ  ｉｄは、コール・パス情報をさらに含む。テスト・ケース・リストのエントリおよびテスト・ケース・リストのインスタンスの個別の例については、下記の図７および８を参照されたい。
【００３６】
ステップ２７０において、影響アナライザは、テスト・ケース・ランチャがテスト・ケースをリアルタイムで実行するよう、ステップ２６０で生成されたテスト・ケース・リストを、データベースもしくはその他の高速メモリ・デバイスまたはその両方に記憶する。本発明の他の実施形態では、影響アナライザは、生成されたテスト・ケース・リストを、テスト・ケース・ランチャに直接的に伝達するとよい。影響アナライザは、入力コードの更新の処理を完了し、ＩＤＥツールは、上記の図２のステップ１３０に移る。
【００３７】
図４は、本発明の実施形態による、上記の図２のステップ１３０のテスト・ケース・ランチャによって実行される、テスト・ケース・リストのエントリを実行してテスト実行結果を生成する方法を示すフローチャートである。
【００３８】
ステップ３１０で、テスト・ケース・ランチャは、データベースもしくはその他の高速メモリ・デバイスまたはその両方から、上記の図３のステップ２７０で影響アナライザが記憶したテスト・ケース・リストを読み出す。テスト・ケース・ランチャは、ステップ３２０に移る。
【００３９】
ステップ３２０で、テスト・ケース・ランチャは、読み出されたテスト・ケース・リストからのテスト・ケースを有する実行キューを構成する。一実施形態では、実行キューは、テスト・ケース・リスト内の各テスト・ケースの開始優先度に基づき順序付けられる。テスト・ケース・ランチャは、ステップ３３０に移る。
【００４０】
ステップ３３０で、テスト・ケース・ランチャは、実行キューをユーザに表示する。テスト・ケース・ランチャは、ステップ３４０に移る。
【００４１】
ステップ３４０で、テスト・ケース・ランチャは、実行キュー内のテスト・ケースを、各テスト・ケースに関連する個別の開始優先度の順に実行する。本発明の一実施形態では、テスト・ケース・ランチャは、実行キュー内の各テスト・ケースを非同期実行モードで自動的に実行するよう構成されている。別の実施形態では、テスト・ケース・ランチャは、各テスト・ケースの個別の開始優先度にかかわらず、非同期テスト用のテスト・ケース（単数または複数）を選択するようユーザに促すよう構成されている。ユーザが実行キューからテスト・ケースを選択すると、テスト・ケース・ランチャは、選択されたテスト・ケースを非同期実行モードで実行する。テスト・ケース・ランチャは、ステップ３５０に移る。
【００４２】
ステップ３５０で、テスト・ケース・ランチャは、ステップ３４０から生じたデータを記録すること、もしくはデータをデータベースに記憶すること、またはその両方によってテスト実行結果を生成する。テスト・ケース・ランチャは、テスト・ケース・リストの処理を完了し、ＩＤＥツールは、上記の図２のステップ１４０に移る。
【００４３】
図５は、本発明の実施形態による、上記の図３のステップ２２０で影響アナライザによって構築された静的なコード・ブロック構造を有する、データベースに記憶された入力コードの例である。
【００４４】
行Ｌ１０１〜Ｌ１１７は、関数Ｍａｉｎ（）を構成し、これは、Ｊａｖａプログラミング言語のコード・ブロック構造における最上位コード・ブロック「Ａ」である。
【００４５】
行Ｌ１０２〜Ｌ１１３は、関数ｆｕｎｃ１（）を構成し、これは、最上位コード・ブロック「Ａ」内の第１の第２位コード・ブロック「Ｂ」である。
【００４６】
行Ｌ１０３〜Ｌ１１２は、ｆｏｒ（）ループを構成し、これは、第１の第２位コード・ブロック「Ｂ」内の第１の第３位コード・ブロック「Ｃ」である。
【００４７】
行Ｌ１０４〜Ｌ１１１は、ｆｏｒ（）ループの本体を構成し、これは、第１の第３位コード・ブロック「Ｃ」内の第４位コード・ブロック「Ｄ」である。
【００４８】
行Ｌ１０６〜Ｌ１０８は、第１のｉｆ（）条件節を構成し、これは、第４位コード・ブロック「Ｄ」内の第１の第５位コード・ブロック「Ｅ」である。
【００４９】
行Ｌ１０７は、第１のｉｆ（）条件節の本体を構成し、これは、第１の第５位コード・ブロック「Ｅ」内の第１の第６位コード・ブロック「Ｆ」によって表されている。第１の第６位コード・ブロック「Ｆ」は、条件「（ｐ１＞１０００）」が満たされると実行される。第１の第６位コード・ブロック「Ｆ」は、行Ｌ１１４から始まる関数ｆｕｎｃ２（）を呼び出す。
【００５０】
行Ｌ１０９〜Ｌ１１１は、第２のｉｆ（）条件節を構成し、これは、第４位コード・ブロック「Ｄ」内の第２の第５位コード・ブロック「Ｇ」である。
【００５１】
行Ｌ１１０は、第２のｉｆ（）条件節の本体を構成し、これは、第２の第５位コード・ブロック「Ｇ」内の第２の第６位コード・ブロック「Ｈ」によって表されている。第２の第６位コード・ブロック「Ｈ」は、条件「（ｐ２＜０）」が満たされると実行される。第２の第６位コード・ブロック「Ｈ」は、新たな値「１００」を変数ｐ２に代入する。
【００５２】
行Ｌ１１４〜Ｌ１１６は、関数ｆｕｎｃ２（）を構成し、これは、最上位コード・ブロック「Ａ」内の第２の第２位コード・ブロック「Ｉ」である。
【００５３】
行Ｌ１１５は、関数ｆｕｎｃ２（）の本体を構成し、これは、第２の第２位コード・ブロック「Ｉ」内の第２の第３位コード・ブロック「Ｊ」によって表されている。第２の第２位コード・ブロック「Ｉ」は、行Ｌ１０７から関数ｆｕｎｃ２（）が呼び出されると実行される。
【００５４】
図６は、本発明の実施形態による、上記の図５のコード・ブロック間の様々な関係を示す。
【００５５】
本発明の同実施形態において、静的なコード・ブロック構造が、利用されているプログラミング言語の構造に基づき、影響アナライザもしくは従来の静的解析ツールまたはその両方によって自動的に解析されるとよい。上記の図５のＪａｖａコード・ブロックＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈ、Ｉ、およびＪは、上位コード・ブロックが下位コード・ブロックを含むよう、すなわちネストするよう、階層的に構造化されている。実線の矢は、個別の上位コード・ブロックから始まり個別の下位コード・ブロックへ向かう、コード・ブロック間の静的な包含関係を表す。図６に示されている包含関係は、Ａ→Ｂ→Ｃ→Ｄ→Ｅ→Ｆ、Ａ→Ｂ→Ｃ→Ｄ→Ｇ→Ｈ、およびＡ→Ｉ→Ｊである。
【００５６】
ＦからＩへの破線の曲線は、コード・ブロックＦがコード・ブロックＩを呼び出すことを表し、これは、コード・ブロック間の動的呼び出し関係と呼ばれる。
【００５７】
本発明の同実施形態において、テスト・ケースは、ＪＵｎｉｔフォーマットの自動実行可能なソース・コードである。第１のテスト・ケースＴ１は、ｆｕｎｃ１（１０００，  ２０００）であり、すなわち、ｆｕｎｃ１（）を、引数ｉｎｔ  ｐ１＝１０００、ｉｎｔ  ｐ２＝２０００により呼び出し、第１のテスト・ケースＴ１の実行シーケンスは、上記の図５の包含関係および呼び出し関係に基づき、（Ｂ−Ｃ−Ｄ−Ｅ−Ｆ−Ｉ−Ｊ）である。第２のテスト・ケースＴ２は、ｆｕｎｃ２（１２３）であり、すなわち、ｆｕｎｃ２（）を、引数ｉｎｔ  ｄ＝１２３により呼び出し、第２のテスト・ケースＴ２の実行シーケンスは、上記の図５の包含関係および呼び出し関係に基づき、（Ｉ−Ｊ）である。
【００５８】
ユーザがコード・ブロックＪを編集すると、第２のテスト・ケースＴ２が第１のテスト・ケースＴ１よりもコード・ブロックＪにより直接的に関連することから、影響アナライザは、第１のテスト・ケースＴ１よりも高い開始優先度を、第２のテスト・ケースＴ２に指定し、コード・ブロックＪの更新が、第１のテスト・ケースＴ１よりも第２のテスト・ケースＴ２の方に強く影響を及ぼすことを示す。個別の開始優先度に従って、第２のテスト・ケースＴ２が最初に実行され、続いて第１のテスト・ケースＴ１が実行される。本発明の別の実施形態では、ユーザは、個別の開始優先度をオーバーライドして、テスト・ケースを実行する順序を調整することもできる。
【００５９】
図７および８は、本発明の実施形態による、図３のステップ２６０において影響アナライザによって作成されたテスト・ケース・リストの例を示す。
【００６０】
図７は、本発明の実施形態による、テスト・ケース・リストのエントリとしての例示のテスト・ケース・フォーマットである。
【００６１】
テスト・ケースは、テスト・ケースｉｄ  Ａおよびテスト・ケース開始優先度Ｂを含む。テスト・ケースｉｄ  Ａによって表されている各テスト・ケースは、ｍ個のコード・ブロックＡ１．．．Ａｍを含み、ｍは各テスト・ケースの個別の正の整数である。
【００６２】
図８は、本発明の実施形態による、影響アナライザが上記の図３のステップ２７０を実行した後にデータベースに記憶される、テスト・ケース・リストの例を示す。
【００６３】
テスト・ケース・リストは、ｎ個のテスト・ケースを含み、ｎは正の整数である。第ｊのテスト・ケースは、ｍ個のコード・ブロックを有し、ｍはｊの個別の正の整数である。第ｊのテスト・ケース内の第ｋのコード・ブロックは、ＣＢ＿ＩＤ  ｋとして示されている、コード・ブロックを表すコード・ブロック識別子と、ＣＢ＿ＣＰ  ｋとして示されている、コード・ブロックのコール・パスと、ＣＢ＿ＡＳ  ｋとして示されている、コード・ブロックと更新されたコード・ブロックとの間の関連強度とを含む。本発明のこの実施形態では、関連強度の値が小さいほど、呼び出しもしくは包含またはその両方の関係に基づく、２つのブロック間の関連がより強いことを示す。
【００６４】
この例では、変更されたコード・ブロックは、ＳＲＣ＿００１＿００１として示されている第１のソース・ファイルの第１のコード・ブロックとして特定される。第１のテスト・ケースは、テスト・ケースｉｄ  ＴＣ＿００１と、３つのコンポーネント・コード・ブロックのすべての関連強度の合計である、八（８）という開始優先度とを含む。第１のテスト・ケースＴＣ＿００１は、個別のコード・ブロックｉｄ、ＳＲＣ＿００１＿００１、ＳＲＣ＿００１＿００２、およびＳＲＣ＿００２＿０３４によって表されている３つのコード・ブロックを含む。
【００６５】
第１のコード・ブロックＳＲＣ＿００１＿００１は、コール・パスＳＲＣ＿００１によって表されている第１のソース・ファイルを介して呼び出される。第１のコード・ブロックＳＲＣ＿００１＿００１は、一（１）という関連強度を有するが、これは、第１のコード・ブロックＳＲＣ＿００１＿００１の包含深度によって計算される。
【００６６】
第１のテスト・ケースＴＣ＿００１の第２のコード・ブロックＳＲＣ＿００１＿００２も、コール・パスＳＲＣ＿００１によって表されている第１のソース・ファイルを介して呼び出される。第２のコード・ブロックＳＲＣ＿００１＿００２は、二（２）という関連強度を有する。
【００６７】
第３のコード・ブロックＳＲＣ＿００２＿０３４は、コール・パスＳＲＣ＿００２によって表されている第２のソース・ファイルを介して呼び出される。第３のコード・ブロックＳＲＣ＿００２＿０３４は、五（５）という関連強度を有する。
【００６８】
第２のテスト・ケースは、テスト・ケースｉｄ  ＴＣ＿００２と、４つのコンポーネント・コード・ブロックのすべての関連強度の合計である、十八（１８）という開始優先度とを含む。第２のテスト・ケースＴＣ＿００２は、個別のコード・ブロックｉｄ、ＳＲＣ＿００１＿００１、ＳＲＣ＿００１＿００２、ＳＲＣ＿００２＿０３４、およびＳＲＣ＿００２＿０５０によって表されている４つのコード・ブロックを含む。
【００６９】
最初の３つのコード・ブロックは、第１のテスト・ケースＴＣ＿００１と同じである。第４のコード・ブロックＳＲＣ＿００２＿０５０は、コール・パスＳＲＣ＿００２によって表されている第２のソース・ファイルを介して呼び出される。第４のコード・ブロックＳＲＣ＿００２＿０５０は、十（１０）という関連強度を有し、これは、第４のコード・ブロックＳＲＣ＿００２＿０５０が、変更されたコード・ブロックと弱く関連しているということを示す。
【００７０】
２つのテスト・ケースＴＣ＿００１およびＴＣ＿００２の間で、第１のテスト・ケースＴＣ＿００１は、八（８）というより高い開始優先度を有するため、テスト・ケース・ランチャは、まず第１のテスト・ケースＴＣ＿００１を実行して、次に第２のテスト・ケースＴＣ＿００２を実行する。
【００７１】
本発明の別の実施形態では、各コード・ブロックは、コード・ブロックｉｄおよび関連強度のみを含んでもよく、その場合は影響アナライザが、コード・ブロックｉｄ内にコール・パス情報を含め、テスト・ケース・ランチャは、コード・ブロックｉｄからコール・パス情報を復号可能である。
【００７２】
図９は、本発明の実施形態による、上記の図１の統合開発環境（ＩＤＥ）ツールの画面表示４００を示す。
【００７３】
「編集：ｓａｍｐｌｅ．ｊａｖａ」という見出しのフレーム４１０は、ソース・コード・エディタのユーザ・ウィンドウである。フレーム４１０は、上記の図５に示された入力コードを表示し、ユーザがフレーム４１０のウィンドウ内で入力コードを変更できるようにする。ユーザがプログラミング要素の更新を完了すると、影響アナライザは、第２のスナップショットを取得し、第２のスナップショットと、第１のスナップショットとを、入力コードのコード・ブロック構造に基づき比較することによって、変更されたコード・ブロックを特定する。
【００７４】
「実行するテスト・ケース（単数または複数）」という見出しのフレーム４２０は、上記の図４のステップ３３０を実行した結果としての、テスト・ケース・ランチャの実行キューの表示ウィンドウである。本発明の一実施形態では、テスト・ケース・ランチャは、各テスト・ケースの個別のテスト・ケースｉｄおよび簡単な説明を表示する。テスト・ケースの説明の例は、特に、「ｆｕｎｃ１（）の通常システム・テスト」、「ｆｕｎｃ２（）の異常システム・テスト」、「外部呼び出しテスト」などであってもよい。
【００７５】
「テスト結果（単数または複数）」という見出しのフレーム４３０は、テスト・ケース・ランチャによって生成されたテスト実行結果の表示ウィンドウである。テスト実行結果は、テスト・ケースが成功か否か、失敗したテスト・ケース識別子および所定のエラー・コード、欠けているデータ項目などを示すとよい。
【００７６】
図１０は、本発明の実施形態による、統合開発環境（ＩＤＥ）における非同期コード・テストに使用されるコンピュータ・システム９０を示す。
【００７７】
コンピュータ・システム９０は、プロセッサ９１、プロセッサ９１に結合された入力デバイス９２、プロセッサ９１に結合された出力デバイス９３、ならびにプロセッサ９１にそれぞれ結合されたメモリ・デバイス９４および９５を含む。本明細書では、コンピュータ・システム９０は、任意の種類のプログラム可能データ処理装置を表す。
【００７８】
入力デバイス９２は、コンピュータ・システム９０への入力データ９６を受け取るために利用される。入力デバイス９２は、特に、キーボード、マウス、キーパッド、タッチ・スクリーン、スキャナ、音声認識デバイス、センサ、ネットワーク・インターフェース・カード（ＮＩＣ：ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ）、ボイス／ビデオ・オーバー・インターネット・プロトコル（ＶＯＩＰ：Ｖｏｉｃｅ／ｖｉｄｅｏ  ｏｖｅｒ  Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アダプタ、無線アダプタ、電話アダプタ、専用回線アダプタなどとしてもよい。出力デバイス９３は、コンピュータ・プログラム・コード９７によって生成された結果をコンピュータ・システム９０のユーザに伝達するために利用される。出力デバイス９３は、特に、プリンタ、プロッタ、コンピュータ画面、磁気テープ、リムーバブル・ハード・ディスク、フレキシブル・ディスク、ＮＩＣ、ＶＯＩＰアダプタ、無線アダプタ、電話アダプタ、専用回線アダプタ、可聴信号生成器もしくは可視信号生成器、またはその両方、発光ダイオード（ＬＥＤ：ｌｉｇｈｔ  ｅｍｉｔｔｉｎｇ  ｄｉｏｄｅ）などとしてもよい。
【００７９】
本発明のコンポーネントはいずれも、本発明の統合開発環境（ＩＤＥ）における非同期コード・テストのプロセスに関してコンピューティング・インフラストラクチャを展開または統合することを提案するサービス・プロバイダにより展開、管理、サービス提供などされることができる。したがって、本発明は、コンピュータ可読コードをコンピューティング・システム（例えばコンピュータ・システム９０）に統合、ホスト、維持、および展開することを含む、コンピュータ・インフラストラクチャをサポートするプロセスを開示し、このコードは、コンピューティング・システムとともに、統合開発環境（ＩＤＥ）における非同期コード・テストの方法を実行することができる。
【００８０】
別の実施形態では、本発明は、契約、宣伝、もしくは手数料、またはそのいずれかの組み合わせに基づき本発明のプロセス・ステップを実行する方法を提供する。すなわち、ソリューション・インテグレータなどのサービス・プロバイダは、本発明の統合開発環境（ＩＤＥ）における非同期コード・テストのプロセスを、作成、維持、サポートなどすることを提案することができる。この場合、サービス・プロバイダは、１つ以上の顧客に対して本発明のプロセス・ステップを実行するコンピュータ・インフラストラクチャを作成、維持、サポートなどすることができる。見返りとして、サービス・プロバイダは、契約もしくは手数料の取り決めもしくはその両方に従って顧客（単数または複数）から支払いを受け取ること、もしくは１つ以上のサード・パーティに対する広告コンテンツの販売からの支払いを受け取ること、またはその両方ができる。
【００８１】
図１０は、コンピュータ・システム９０を、ハードウェアとソフトウェアとの特定の構成として示すが、当業者には周知であると考えられる、ハードウェアとソフトウェアとの任意の構成が、上記に記載された目的のために、図１０の特定のコンピュータ・システム９０とともに利用されてもよい。例えば、メモリ・デバイス９４および９５は、独立したメモリ・デバイスではなく、単一のメモリ・デバイスの一部であってもよい。
【００８２】
当業者であれば当然のことであるが、本発明の側面は、システム、方法またはコンピュータ・プログラム製品として具現化され得る。したがって、本発明の側面は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または本願明細書においてすべて概して「回路」、「モジュール」もしくは「システム」と呼ばれ得る、ソフトウェアおよびハードウェアの側面を兼ね備えた実施形態の形態をとってもよい。さらに、本発明の側面は、コンピュータ可読プログラム・コードが具現化された１つ以上のコンピュータ可読媒体（単数または複数）において具現化されたコンピュータ・プログラム製品の形態をとることもできる。
【００８３】
１つ以上のコンピュータ可読媒体（単数または複数）の任意の組み合わせが利用され得る。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体とされ得る。本明細書では、「メモリ・デバイス」９４、９５という用語は、コンピュータ可読記憶媒体を表す。コンピュータ可読記憶媒体は、例えば、限定はされないが、電子、磁気、光学、電磁気、赤外線、もしくは半導体システム、装置、もしくはデバイス、または前述のものの任意の適切な組み合わせとすることもできる。コンピュータ可読記憶媒体のより具体的な例（包括的でないリスト）には、１つ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光学式記憶デバイス、磁気記憶デバイスまたは前述のものの任意の適切な組み合わせが含まれるであろう。この文書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを含むこと、または記憶することができる任意の有形の媒体であればよい。
【００８４】
コンピュータ可読信号媒体は、例えば、ベースバンドに、または搬送波の一部として、伝播データ信号において具現化されたコンピュータ可読プログラム・コードを伴う伝播データ信号を含み得る。そのような伝播信号は、限定はされないが、電磁気、光学、またはその任意の適切な組み合わせを含む様々な形態のいずれかをとってよい。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でなく、命令実行システム、装置もしくはデバイスによって、またはそれに関連して使用されるプログラムを伝達すること、伝播させること、または搬送することができる、任意のコンピュータ可読媒体としてよい。
【００８５】
コンピュータ可読媒体上に具現化されたプログラム・コードは、限定はされないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、または前述のものの任意の適切な組み合わせを含む任意の適切な媒体を使用して送られてもよい。
【００８６】
本発明の側面の動作を実行するコンピュータ・プログラム・コード９７は、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋または同様のものなどのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは同様のプログラミング言語などの従来の手続きプログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書かれていてよい。コンピュータ・プログラム・コード９７は、スタンド・アロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で実行されること、部分的にユーザのコンピュータ上で実行されること、または部分的にユーザのコンピュータ上で、かつ部分的にリモート・コンピュータ上で実行されること、または完全にリモート・コンピュータもしくはサーバ上で実行されることもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、もしくは広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続されてもよく、または、外部コンピュータに接続されてもよい（例えば、インターネット・サービス・プロバイダを使用しインターネットを介して）。
【００８７】
本発明の側面は、本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図、またはその両方を参照して記載されている。当然のことながら、フローチャート図もしくはブロック図、またはその両方の各ブロック、およびフローチャート図もしくはブロック図、またはその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令により実装可能である。「コンピュータ・プログラム命令」という用語は、本明細書では「コンピュータ・プログラム・コード」９７という用語と置き換え可能である。当該コンピュータ・プログラム命令が、マシンをもたらすよう、汎用コンピュータ、専用コンピュータ、またはその他のプログラム可能データ処理装置のプロセッサに提供されて、この命令が、コンピュータまたはその他のプログラム可能データ処理装置のプロセッサを用いて実行されて、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装する手段を作り出すようにすることもできる。
【００８８】
さらに、特定の形で機能するようコンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスに指示することができる当該コンピュータ・プログラム命令は、コンピュータ可読記憶媒体に記憶されて、コンピュータ可読記憶媒体に記憶されたこの命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装する命令を含む製品をもたらすようにすることもできる。
【００８９】
さらに、コンピュータ・プログラム命令は、コンピュータ、その他のプログラム可能データ処理装置、またはその他のデバイスにロードされて、コンピュータ、その他のプログラム可能装置、またはその他のデバイス上で一連の動作ステップが実行されるようにしてコンピュータに実装されるプロセスをもたらし、コンピュータまたはその他のプログラム可能装置上で実行される命令が、フローチャートもしくはブロック図またはその両方のブロックもしくは複数ブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにすることもできる。
【００９０】
各図面のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法およびコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能性および動作を示す。この関連で、フローチャートまたはブロック図内の各ブロックは、指定の論理機能（単数または複数）を実装する１つ以上の実行可能命令を含むモジュール、セグメント、またはコードの一部を表すこともできる。なお、さらに、いくつかの代わりの実装では、ブロック内に示されている機能が、図面に示されているのとは異なる順序で生じてもよい。例えば、関連する機能性次第で、連続して示されている２つのブロックが実際には事実上同時に実行されてもよく、または、各ブロックが逆順で実行されることがあってもよい。なお、さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方の複数ブロックの組み合わせは、指定の機能もしくは動作を実行する専用ハードウェア・ベース・システム、または専用ハードウェアおよびコンピュータ命令の組み合わせにより実装することができる。
【００９１】
特許請求の範囲のミーンズまたはステップ・プラス・ファンクション構成要素すべての対応する構造、材料、動作、および等価物は、明確に請求されている他の請求される構成要素とともに機能を実行する任意の構造、材料、または動作を含むものとする。本発明の記載は、例証および説明のために示されたものであるが、包括的であることも、開示された形態の発明に限定されることも目的としていない。当業者には、本発明の範囲および意図から逸脱することのない、多数の変更および変形が明らかであろう。実施形態は、本発明の原理および実際の応用をもっともよく説明して、当業者が、意図される特定の用途に適する様々な変更を用いた様々な実施形態に関して、本発明を理解できるように選ばれ、記載された。
【符号の説明】
【００９２】
１１  ユーザ
２１  統合開発環境（ＩＤＥ）ツール
２２  ソース・コード・エディタ
２３  影響アナライザ
２４  テスト・ケース・ランチャ
２５  グラフィカル・ユーザ・インターフェース（ＧＵＩ）
３１  データベース
３２  入力コード
３３  テスト・ケース・リスト
３４  テスト実行結果
４２  実行キュー
【図１】
0005706276.tif 000002
【図２】
0005706276.tif 000003
【図３】
0005706276.tif 000004
【図４】
0005706276.tif 000005
【図５】
0005706276.tif 000006
【図６】
0005706276.tif 000007
【図７】
0005706276.tif 000008
【図８】
0005706276.tif 000009
【図９】
0005706276.tif 000010
【図１０】
0005706276.tif 000011