(57)【特許請求の範囲】
【請求項１】
アプリケーションのランタイム挙動に基づき自動的に前記アプリケーションを修正する方法であって、前記方法は、
コンピュータのプロセッサが、ユーザ又はチケット発行ツールから前記アプリケーションのインシデントのインシデント詳細を受け取るステップであって、前記インシデントは、少なくとも１つの問題オブジェクトを伴う、前記ステップと、
前記インシデント詳細から前記インシデントのインシデント・フローを特定するステップであって、前記インシデント・フローは、前記少なくとも１つの問題オブジェクトのうちの第１の問題オブジェクトに対応し、前記インシデント・フローは、前記第１の問題オブジェクトと、前記アプリケーション内で前記第１の問題オブジェクトに影響を及ぼす少なくとも１つの代入オブジェクトと、前記アプリケーションの少なくとも１つのコード文とを含み、前記少なくとも１つのコード文において、前記少なくとも１つの代入オブジェクトが前記第１の問題オブジェクトに影響を及ぼす、前記ステップと、
前記第１の問題オブジェクトに関して、前記アプリケーションの先頭から前記インシデントまで、実際に実行されていた前記インシデント・フローのデータ値を追跡することによって、前記インシデント・フローの順方向データ・フローを作成するステップと、
前記アプリケーションの実際の実行とは反対の順序で、前記第１の問題オブジェクトの期待される結論から、前記第１の問題オブジェクトに関する前記少なくとも１つの代入オブジェクトのそれぞれの初期値まで、前記インシデント・フローの前記データ値をシミュレートすることによって、前記インシデント・フローの、少なくとも１つの逆方向データ・フローを作成するステップと、
前記プロセッサが、前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローを使用して、前記インシデントの前記第１の問題オブジェクトの誤り候補リストを生成するステップと、
を含む方法。
【請求項２】
前記少なくとも１つの逆方向データ・フローを作成する前記ステップは、
前記インシデント・フロー内の前記少なくとも１つのコード文のうちの最後のコード文において、前記第１の問題オブジェクトに前記第１の問題オブジェクトの前記期待される結論を代入するステップと、
前記第１の問題オブジェクトの前記期待される結論から、前記少なくとも１つの代入オブジェクトを計算し直すステップと、
前記少なくとも１つの代入オブジェクトが、前記第１の問題オブジェクトに影響を及ぼす前記少なくとも１つの代入オブジェクトの前記それぞれの初期値を有すると判断するステップと、
前記第１の問題オブジェクトの第１の逆方向データ・フローを生成するステップと、
を含む、請求項１に記載の方法。
【請求項３】
前記誤り候補リストを生成する前記ステップは、
前記順方向データ・フロー内と、前記少なくとも１つの逆方向データ・フロー内とで、前記少なくとも１つの代入オブジェクトのそれぞれの値を比較することによって、前記第１の問題オブジェクトを特定するステップであって、第１のコード文において、前記順方向データ・フロー内の前記第１の問題オブジェクトの第１の値が、前記少なくとも１つの逆方向データ・フローのうちの第１の逆方向データ・フロー内の前記第１の問題オブジェクトの第２の値と一致しない、前記ステップと、
前記第１のコード文を第１の誤り候補として特定するステップと、
前記少なくとも１つの代入オブジェクトに対して、異なるセットの入力値を適用することによって、新たなデータ・フローをシミュレートするステップと、
前記新たなデータ・フロー及び前記第１の逆方向データ・フローのそれぞれの値が一致すると判断するステップと、
前記第１の問題オブジェクトの前記誤り候補リスト内に前記第１の誤り候補を追加するステップと、
を含む、請求項１に記載の方法。
【請求項４】
前記方法は、
前記順方向データ・フロー、前記少なくとも１つの逆方向データ・フロー、及び前記誤り候補リストを検査するよう第２のユーザに促し、前記第２のユーザから第１の入力を受け取るステップであって、前記第１の入力は、前記第２のユーザが、前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローに基づき前記生成された誤り候補リストを承認することを示し、前記第２のユーザは、前記アプリケーションを更新する権限を与えられている、前記ステップと、
前記第２のユーザから前記第１の入力を受け取るのに応答して、前記誤り候補リスト及び前記アプリケーションの仕様を使用して、前記アプリケーションの前記インシデントを修正する技術仕様を生成するステップと、
前記技術仕様に従ってソリューションを生成して、前記ユーザ又は前記チケット発行ツールのために前記ソリューションを記述する解決文を生成するステップと、
前記第２のユーザに前記ソリューションを提示して、前記第２のユーザから第２の入力を受け取るステップであって、前記第２の入力は、前記第２のユーザが前記ソリューションを承認することを示す、前記ステップと、
前記第２のユーザから前記第２の入力を受け取るのに応答して、前記アプリケーションが前記インシデントなく実行されるよう、前記ソリューションを用いて前記アプリケーションを更新して、前記解決文を前記ユーザ又は前記チケット発行ツールに伝達するステップと、
をさらに含む、請求項１に記載の方法。
【請求項５】
前記技術仕様を生成する前記ステップは、
前記第１の問題オブジェクトの前記誤り候補リストを含む少なくとも１つの誤り候補リストを読み出し、前記アプリケーションの前記仕様を読み出すステップと、
前記少なくとも１つの誤り候補リストから前記インシデントの開始部分を特定するステップと、
前記開始部分の代わりを案出するステップであって、前記代わりは、新たなデータ・オブジェクト、新たなコード文、及びその組み合わせから成るグループから選択される、前記ステップと、
前記開始部分及び前記代わりを、前記インシデントに関する前記技術仕様に追加するステップと、
を含む、請求項４に記載の方法。
【請求項６】
アプリケーションのランタイム挙動に基づき自動的に前記アプリケーションの修正を実行するためのコンピュータ・プログラムであって、前記プログラムが、コンピュータに、
ユーザ又はチケット発行ツールから前記アプリケーションのインシデントのインシデント詳細を受け取るステップであって、前記インシデントは、少なくとも１つの問題オブジェクトを伴う、前記受け取るステップ、
前記インシデント詳細から前記インシデントのインシデント・フローを特定するステップであって、前記インシデント・フローは、前記少なくとも１つの問題オブジェクトのうちの第１の問題オブジェクトに対応し、前記インシデント・フローは、前記第１の問題オブジェクトと、前記アプリケーション内で前記第１の問題オブジェクトに影響を及ぼす少なくとも１つの代入オブジェクトと、前記アプリケーションの少なくとも１つのコード文とを含み、前記少なくとも１つのコード文において、前記少なくとも１つの代入オブジェクトが前記第１の問題オブジェクトに影響を及ぼす、前記特定するステップ、
前記第１の問題オブジェクトに関して、前記アプリケーションの先頭から前記インシデントまで、実際に実行されていた前記インシデント・フローのデータ値を追跡するステップによって、前記インシデント・フローの順方向データ・フローを作成するステップ、
前記アプリケーションの実際の実行とは反対の順序で、前記第１の問題オブジェクトの期待される結論から、前記第１の問題オブジェクトに関する前記少なくとも１つの代入オブジェクトのそれぞれの初期値まで、前記インシデント・フローの前記データ値をシミュレートすることによって、前記インシデント・フローの、少なくとも１つの逆方向データ・フローを作成するステップ、及び
前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローを使用して、前記インシデントの前記第１の問題オブジェクトの誤り候補リストを生成するステップ、
を実行させる、コンピュータ・プログラム。
【請求項７】
前記少なくとも１つの逆方向データ・フローの前記作成は、
前記インシデント・フロー内の前記少なくとも１つのコード文のうちの最後のコード文において、前記第１の問題オブジェクトに前記第１の問題オブジェクトの前記期待される結論を代入するステップ、
前記第１の問題オブジェクトの前記期待される結論から、前記少なくとも１つの代入オブジェクトを計算し直すステップ、
前記少なくとも１つの代入オブジェクトが、前記第１の問題オブジェクトに影響を及ぼす前記少なくとも１つの代入オブジェクトの前記それぞれの初期値を有すると判断するステップ、及び
前記第１の問題オブジェクトの第１の逆方向データ・フローを生成するステップ、
を含む、請求項６に記載のコンピュータ・プログラム。
【請求項８】
前記誤り候補リストの前記生成は、
前記順方向データ・フロー内と、前記少なくとも１つの逆方向データ・フロー内とで、前記少なくとも１つの代入オブジェクトのそれぞれの値を比較することによって、前記第１の問題オブジェクトを特定するステップであって、第１のコード文において、前記順方向データ・フロー内の前記第１の問題オブジェクトの第１の値が、前記少なくとも１つの逆方向データ・フローのうちの第１の逆方向データ・フロー内の前記第１の問題オブジェクトの第２の値と一致しない、前記特定するステップ、
前記第１のコード文を第１の誤り候補として特定するステップ、
前記少なくとも１つの代入オブジェクトに対して、異なるセットの入力値を適用することによって、新たなデータ・フローをシミュレートするステップ、
前記新たなデータ・フロー及び前記第１の逆方向データ・フローのそれぞれの値が一致すると判断するステップ、及び
前記第１の問題オブジェクトの前記誤り候補リスト内に前記第１の誤り候補を追加するステップ、
を含む、請求項６に記載のコンピュータ・プログラム。
【請求項９】
前記修正は、
前記順方向データ・フロー、前記少なくとも１つの逆方向データ・フロー、及び前記誤り候補リストを検査するよう第２のユーザに促し、前記第２のユーザから第１の入力を受け取るステップであって、前記第１の入力は、前記第２のユーザが、前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローに基づき前記生成された誤り候補リストを承認することを示し、前記第２のユーザは、前記アプリケーションを更新する権限を与えられている、前記受け取るステップ、
前記第２のユーザから前記第１の入力を受け取るのに応答して、前記誤り候補リスト及び前記アプリケーションの仕様を使用して、前記アプリケーションの前記インシデントを修正する技術仕様を生成するステップ、
前記技術仕様に従ってソリューションを生成して、前記ユーザ又は前記チケット発行ツールのために前記ソリューションを記述する解決文を生成するステップ、
前記第２のユーザに前記ソリューションを提示して、前記第２のユーザから第２の入力を受け取るステップであって、前記第２の入力は、前記第２のユーザが前記ソリューションを承認することを示す、前記受け取るステップ、及び
前記第２のユーザから前記第２の入力を受け取るのに応答して、前記アプリケーションが前記インシデントなく実行されるよう、前記ソリューションを用いて前記アプリケーションを更新して、前記解決文を前記ユーザ又は前記チケット発行ツールに伝達するステップ、
をさらに含む、請求項６に記載のコンピュータ・プログラム。
【請求項１０】
前記技術仕様の前記生成は、
前記第１の問題オブジェクトの前記誤り候補リストを含む少なくとも１つの誤り候補リストを読み出し、前記アプリケーションの前記仕様を読み出すステップ、
前記少なくとも１つの誤り候補リストから前記インシデントの開始部分を特定するステップ、
前記開始部分の代わりを案出するステップであって、前記代わりは、新たなデータ・オブジェクト、新たなコード文、及びその組み合わせから成るグループから選択される、前記案出するステップ、及び
前記開始部分及び前記代わりを、前記インシデントに関する前記技術仕様に追加するステップ、
を含む、請求項９に記載のコンピュータ・プログラム。
【請求項１１】
プロセッサと、前記プロセッサに結合されたコンピュータ可読メモリ・ユニットとを含むコンピュータ・システムであって、前記コンピュータ可読メモリ・ユニットは、前記プロセッサによって実行されるとアプリケーションのランタイム挙動に基づき自動的に前記アプリケーションを修正する方法を実装する命令を含み、前記方法は、
ユーザ又はチケット発行ツールから前記アプリケーションのインシデントのインシデント詳細を受け取るステップであって、前記インシデントは、少なくとも１つの問題オブジェクトを伴う、前記ステップと、
前記インシデント詳細から前記インシデントのインシデント・フローを特定するステップであって、前記インシデント・フローは、前記少なくとも１つの問題オブジェクトのうちの第１の問題オブジェクトに対応し、前記インシデント・フローは、前記第１の問題オブジェクトと、前記アプリケーション内で前記第１の問題オブジェクトに影響を及ぼす少なくとも１つの代入オブジェクトと、前記アプリケーションの少なくとも１つのコード文とを含み、前記少なくとも１つのコード文において、前記少なくとも１つの代入オブジェクトが前記第１の問題オブジェクトに影響を及ぼす、前記ステップと、
前記第１の問題オブジェクトに関して、前記アプリケーションの先頭から前記インシデントまで、実際に実行されていた前記インシデント・フローのデータ値を追跡することによって、前記インシデント・フローの順方向データ・フローを作成するステップと、
前記アプリケーションの実際の実行とは反対の順序で、前記第１の問題オブジェクトの期待される結論から、前記第１の問題オブジェクトに関する前記少なくとも１つの代入オブジェクトのそれぞれの初期値まで、前記インシデント・フローの前記データ値をシミュレートすることによって、前記インシデント・フローの、少なくとも１つの逆方向データ・フローを作成するステップと、
前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローを使用して、前記インシデントの前記第１の問題オブジェクトの誤り候補リストを生成するステップと、
を含む、コンピュータ・システム。
【請求項１２】
前記少なくとも１つの逆方向データ・フローを作成する前記ステップは、
前記インシデント・フロー内の前記少なくとも１つのコード文のうちの最後のコード文において、前記第１の問題オブジェクトに前記第１の問題オブジェクトの前記期待される結論を代入するステップと、
前記第１の問題オブジェクトの前記期待される結論から、前記少なくとも１つの代入オブジェクトを計算し直すステップと、
前記少なくとも１つの代入オブジェクトが、前記第１の問題オブジェクトに影響を及ぼす前記少なくとも１つの代入オブジェクトの前記それぞれの初期値を有すると判断するステップと、
前記第１の問題オブジェクトの第１の逆方向データ・フローを生成するステップと、
を含む、請求項１１に記載のコンピュータ・システム。
【請求項１３】
前記誤り候補リストを生成する前記ステップは、
前記順方向データ・フロー内と、前記少なくとも１つの逆方向データ・フロー内とで、前記少なくとも１つの代入オブジェクトのそれぞれの値を比較することによって、前記第１の問題オブジェクトを特定するステップであって、第１のコード文において、前記順方向データ・フロー内の前記第１の問題オブジェクトの第１の値が、前記少なくとも１つの逆方向データ・フローのうちの第１の逆方向データ・フロー内の前記第１の問題オブジェクトの第２の値と一致しない、前記ステップと、
前記第１のコード文を第１の誤り候補として特定するステップと、
前記少なくとも１つの代入オブジェクトに対して、異なるセットの入力値を適用することによって、新たなデータ・フローをシミュレートするステップと、
前記新たなデータ・フロー及び前記第１の逆方向データ・フローのそれぞれの値が一致すると判断するステップと、
前記第１の問題オブジェクトの前記誤り候補リスト内に前記第１の誤り候補を追加するステップと、
を含む、請求項１１に記載のコンピュータ・システム。
【請求項１４】
前記方法は、
前記順方向データ・フロー、前記少なくとも１つの逆方向データ・フロー、及び前記誤り候補リストを検査するよう第２のユーザに促し、前記第２のユーザから第１の入力を受け取るステップであって、前記第１の入力は、前記第２のユーザが、前記順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローに基づき前記生成された誤り候補リストを承認することを示し、前記第２のユーザは、前記アプリケーションを更新する権限を与えられている、前記ステップと、
前記第２のユーザから前記第１の入力を受け取るのに応答して、前記誤り候補リスト及び前記アプリケーションの仕様を使用して、前記アプリケーションの前記インシデントを修正する技術仕様を生成するステップと、
前記技術仕様に従ってソリューションを生成して、前記ユーザ又は前記チケット発行ツールのために前記ソリューションを記述する解決文を生成するステップと、
前記第２のユーザに前記ソリューションを提示して、前記第２のユーザから第２の入力を受け取るステップであって、前記第２の入力は、前記第２のユーザが前記ソリューションを承認することを示す、前記ステップと、
前記第２のユーザから前記第２の入力を受け取るのに応答して、前記アプリケーションが前記インシデントなく実行されるよう、前記ソリューションを用いて前記アプリケーションを更新して、前記解決文を前記ユーザ又は前記チケット発行ツールに伝達するステップと、
をさらに含む、請求項１１に記載のコンピュータ・システム。
【請求項１５】
前記技術仕様を生成する前記ステップは、
前記第１の問題オブジェクトの前記誤り候補リストを含む少なくとも１つの誤り候補リストを読み出し、前記アプリケーションの前記仕様を読み出すステップと、
前記少なくとも１つの誤り候補リストから前記インシデントの開始部分を特定するステップと、
前記開始部分の代わりを案出するステップであって、前記代わりは、新たなデータ・オブジェクト、新たなコード文、及びその組み合わせから成るグループから選択される、前記ステップと、
前記開始部分及び前記代わりを、前記インシデントに関する前記技術仕様に追加するステップと、
を含む、請求項１４に記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア・アプリケーションのランタイム挙動に基づく、プログラム・コード若しくはデータ又はその両方の自動化された分析及び修正のためのシステム及び関連する方法を開示する。
【背景技術】
【０００２】
従来のデバッグ用ツールは、ソフトウェア・アプリケーションの静的な構造及び論理のみに焦点を合わせている。特定の種類のエラーを修復するために、従来のデバッグ用ツールは、類似したエラー及び対応するソリューションを求めてナレッジ・ベース・システムを検索する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来のデバッグ用ツールは、ソフトウェア・アプリケーションのランタイム・インシデントのデバッグにおいて機能性が限られているため、ソフトウェア・アプリケーションのトラブルシューティングには大きな労力が必要であり、ソフトウェア・アプリケーションのメンテナンスは高価である。
【課題を解決するための手段】
【０００４】
本発明の一実施形態によれば、アプリケーションのランタイム挙動に基づき自動的にアプリケーションを修正する方法は、コンピュータのプロセッサが、ユーザ又はチケット発行ツール（ｔｉｃｋｅｔｉｎｇ  ｔｏｏｌ）からアプリケーションのインシデント（ｉｎｃｉｄｅｎｔ）のインシデント詳細を受け取るステップであって、前記インシデントは、少なくとも１つの問題オブジェクト（ｐｒｏｂｌｅｍ  ｏｂｊｅｃｔ）を伴う、該ステップと、インシデント詳細からインシデントのインシデント・フロー（ｉｎｃｉｄｅｎｔ  ｆｌｏｗ）を特定するステップであって、インシデント・フローは、前記少なくとも１つの問題オブジェクトのうちの第１の問題オブジェクトに対応し、インシデント・フローは、第１の問題オブジェクトと、アプリケーション内で第１の問題オブジェクトに影響を及ぼす少なくとも１つの代入オブジェクト（ａｓｓｉｇｎｍｅｎｔ  ｏｂｊｅｃｔ）と、アプリケーションの少なくとも１つのコード文とを含み、該少なくとも１つのコード文において、前記少なくとも１つの代入オブジェクトが第１の問題オブジェクトに影響を及ぼす、該ステップと、第１の問題オブジェクトに関して、アプリケーションの先頭からインシデントまで、実際に実行されていたインシデント・フローのデータ値を追跡することによって、インシデント・フローの順方向データ・フロー（ｆｏｒｗａｒｄ  ｄａｔａ  ｆｌｏｗ）を作成するステップと、アプリケーションの実際の実行とは反対の順序で、第１の問題オブジェクトの期待される結論（ｏｕｔｃｏｍｅ）から、第１の問題オブジェクトに関する前記少なくとも１つの代入オブジェクトのそれぞれの初期値まで、インシデント・フローの前記データ値をシミュレートすることによって、インシデント・フローの、少なくとも１つの逆方向データ・フロー（ｂａｃｋｗａｒｄ  ｄａｔａ  ｆｌｏｗ）を作成するステップと、前記プロセッサが、順方向データ・フロー及び前記少なくとも１つの逆方向データ・フローを使用して、インシデントの第１の問題オブジェクトの誤り候補リスト（ｃａｎｄｉｄａｔｅ  ｆａｕｌｔ  ｌｉｓｔ）を生成するステップとを含む。
【０００５】
本発明の一実施形態によれば、コンピュータ・プログラム製品は、コンピュータ可読プログラム・コードを具現化するコンピュータ可読メモリ・ユニットを含む。コンピュータ可読プログラム・コードは、コンピュータ・システムのプロセッサによって実行されるとアプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正する方法を実装する命令を含む。
【０００６】
本発明の一実施形態によれば、コンピュータ・システムは、プロセッサと、プロセッサに結合されたコンピュータ可読メモリ・ユニットとを含み、コンピュータ可読メモリ・ユニットは、プロセッサによって実行されるとアプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正する方法を実装する命令を含む。
【０００７】
本発明の一実施形態によれば、コンピュータ・インフラストラクチャをサポートするプロセスであって、前記プロセスは、コンピューティング・システムにおけるコンピュータ可読コードの作成、統合、ホスト、維持、及び展開のうちの少なくとも１つに関して少なくとも１つのサポート・サービスを提供することを含み、コードは、コンピューティング・システムとともに、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正する方法を実行することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態による、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正するシステム１０を示す。
【図２】本発明の実施形態による、自動コレクタ（ａｕｔｏ−ｃｏｒｒｅｃｔｏｒ）によって実行される、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に分析及び修正する方法を示すフローチャートである。
【図３】本発明の実施形態による、図２の自動コレクタの第１の下位モジュールであるフロー・アナライザ（ｆｌｏｗ  ａｎａｌｙｚｅｒ）によって実行される、アプリケーションのフローを自動的に分析する方法を示すフローチャートである。
【図４】本発明の実施形態による、図３のフロー・アナライザの第１の下位モジュールであるインシデント・フロー・アイデンティファイア（ｉｎｃｉｄｅｎｔ  ｆｌｏｗ  ｉｄｅｎｔｉｆｉｅｒ）によって実行される、インシデントをもたらすアプリケーションの制御フローを自動的に特定する方法を示すフローチャートである。
【図５】本発明の実施形態による、図３のフロー・アナライザの第２の下位モジュールである順方向フロー・トラッカ（ｆｌｏｗ  ｔｒａｃｋｅｒ）によって実行される、インシデントをもたらすアプリケーションの順方向データ・フローを自動的に追跡する方法を示すフローチャートである。
【図６】本発明の実施形態による、図３のフロー・アナライザの第３の下位モジュールである逆方向フロー・トラッカによって実行される、期待される結論値から、反対方向で得られるアプリケーションの逆方向データ・フローを自動的に追跡する方法を示すフローチャートである。
【図７】本発明の実施形態による、図３のフロー・アナライザの第４の下位モジュールである誤りロケータ（ｆａｕｌｔ  ｌｏｃａｔｏｒ）によって実行される、アプリケーションの誤りを自動的に見つける方法を示すフローチャートである。
【図８】本発明の実施形態による、図２の自動コレクタの第２の下位モジュールであるアプリケーション・フィクサ（ａｐｐｌｉｃａｔｉｏｎ  ｆｉｘｅｒ）によって実行される、アプリケーションの誤りを自動的に修正する方法を示すフローチャートである。
【図９】本発明の実施形態による、図８のアプリケーション・フィクサの第１の下位モジュールである仕様ジェネレータ（ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｇｅｎｅｒａｔｏｒ）によって実行される、ソリューションに関する技術仕様を自動的に生成する方法を示すフローチャートである。
【図１０】本発明の実施形態による、図８のアプリケーション・フィクサの第２の下位モジュールであるソリューション・ジェネレータ（ｓｏｌｕｔｉｏｎ  ｇｅｎｅｒａｔｏｒ）によって実行される、技術仕様に従ってソリューションを自動的に生成する方法を示すフローチャートである。
【図１１】図１１Ａは、本発明の実施形態による、自動コレクタが図２の方法を実行するアプリケーションの疑似コードを示し、図１１Ｂは、本発明の実施形態による、自動コレクタが図２の方法を実行するアプリケーションのフローチャートを示す。
【図１２】本発明の実施形態による、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正するために使用されるコンピュータ・システムを示す。
【発明を実施するための形態】
【０００９】
図１は、本発明の実施形態による、アプリケーション７０のランタイム挙動に基づきアプリケーションを自動的に修正するシステム１０を示す。
【００１０】
システム１０は、ユーザ２１、アプリケーション・サポート・チーム２２、チケット発行ツール３０、自動コレクタ４０、及びアプリケーション７０を含む。
【００１１】
ユーザ２１は、自動コレクタ４０に入力を提供し、自動コレクタ４０によって生成された出力を受け取る。ユーザ２１は、矢印Ａによって示されているようにチケット発行ツール３０にチケットを出すことによって、又は矢印Ｃによって示されているように自動コレクタ４０に直接入力を供給することによって、入力を提供する。チケットは、アプリケーション７０の問題を参照する。チケット発行ツール３０は、ソフトウェア・プログラムのチケットの記録及びステータス追跡を促進するソフトウェア・ツールである。アプリケーション７０は、問題が発生したソフトウェア・プログラムである。本明細書では、「アプリケーション」という用語は、アプリケーションを実行するためのプログラム・コード及びデータ全体として定義される。
【００１２】
チケット発行ツール３０は、矢印Ｂによって示されているように、ユーザ２１によって提供されたインシデント詳細から自動コレクタ４０への入力を提供する。従来のチケット発行ツールの例としては、特に、Ｒａｄｉｘ、Ｒｅｍｅｄｙ、Ｍａｎａｇｅ  Ｎｏｗ、Ｐｅｒｅｇｒｉｎｅなどが考えられる。
【００１３】
自動コレクタ４０への入力は、インシデントを記述する。本明細書では、「インシデント」という用語は、ユーザ２１によって期待されていなかったデータ値を生じさせる、アプリケーション７０のエラーのある任意の実行として定義される。本明細書では、「インシデント」及び「問題」という用語は、「チケット」という用語と置き換え可能なように使用される。本明細書では、入力はインシデント詳細とも呼ばれる。インシデントは、特に、ランタイム・エラー、静的エラー、プログラム・エラー、データ・エラーなどであり得る。入力は、実行されてインシデントをもたらしたアプリケーション７０のコード文、そのコード文がインシデントを生じさせるデータ環境、インシデントによって生成された不正確な結果、及びコード文の実行においてユーザ２１が期待する正確な結果を含む。本明細書では、「データ環境」という用語は、コード文によって使用されるユーザ・データ、システム構成データなどを含むデータの集合として定義される。
【００１４】
自動コレクタ４０は、チケット発行ツール３０若しくはユーザ２１又はその両方からインシデントを記述する入力を受け取り、アプリケーション７０からアプリケーション詳細を読み出す。アプリケーション詳細は、矢印Ｅによって示されている。アプリケーション詳細は、アプリケーション７０のコード文及びデータ環境を含む。自動コレクタ４０は、この入力及びアプリケーション詳細を利用して、アプリケーション７０を修正する。自動コレクタ４０は、フロー・アナライザ５０及びアプリケーション・フィクサ６０を含む。
【００１５】
フロー・アナライザ５０は、アプリケーション７０の順方向フローと、逆方向フローとの間の矛盾を分析する。フロー・アナライザ５０は、インシデント・フローを特定する第１の機能ユニットと、順方向データ・フローを追跡する第２の機能ユニットと、逆方向データ・フローを追跡する第３の機能ユニットと、誤り候補を見つける第４の機能ユニットとを含む。フロー・アナライザ５０の詳細については、下記の図３の説明を参照されたい。
【００１６】
アプリケーション・フィクサ６０は、アプリケーション７０の順方向フローと、逆方向フローとの間の矛盾を解決するソリューションを生成する。矛盾は、フロー・アナライザ５０が生じさせるか、又はアプリケーション・サポート・チーム２２によって提供される、分析結果によって明示される。アプリケーション・フィクサ６０は、ソリューションの技術仕様を生成する第１の機能ユニットと、技術仕様に従ってソリューションを生成する第２の機能ユニットとを含む。アプリケーション・フィクサ６０は、矢印Ｆによって示されているように、このソリューションを用いてアプリケーション７０を更新する。ソリューションは、インシデントを生じさせずにアプリケーション７０の代わりに使用される形式の新たなコード文と、新たなデータ環境とを含む。アプリケーション・フィクサ６０はさらに、ソリューションをテキスト形式で記録に残す（ｄｏｃｕｍｅｎｔ）解決文（ｒｅｓｏｌｕｔｉｏｎ）を生成し、解決文をチケット発行ツール３０に提供する。解決文は、矢印Ｄによって示されている。アプリケーション・フィクサ６０の詳細については、下記の図８の説明を参照されたい。
【００１７】
アプリケーション・サポート・チーム２２は、自動コレクタ４０が実行する間、中間結果を検査することによって、自動コレクタ４０と対話する。そのような、アプリケーション・サポート・チーム２２による介入は、任意選択となるよう設定されて、自動コレクタ４０が完全に自動化された形で実行するようになっていてもよい。
【００１８】
本発明は、インシデント・フロー、順方向データ・フロー、及び逆方向データ・フローの分析を自動化する。インシデント・フローは、アプリケーション７０が実行されるときのランタイム・インシデントの原因になる制御フローである。順方向データ・フローは、実際に実行された、ランタイム・インシデントをもたらした第１のデータ・フローである。逆方向データ・フローは、ランタイム・インシデントがなく、期待される結果から得られる反対のデータ・フローである。本発明はさらに、アプリケーション７０における誤りの特定及び発見、アプリケーション７０の修正、並びに利用へ向けたアプリケーション７０の更新を自動化する。したがって、本発明は、従来のデバッグ・プロセスの労力及び費用の量を削減する。
【００１９】
図２は、本発明の実施形態による、自動コレクタによって実行される、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正する方法を示すフローチャートである。
【００２０】
ステップ４１０において、自動コレクタは、チケット発行ツール若しくはユーザ又はその両方からインシデント詳細を受け取る。インシデント詳細は、実行されインシデントをもたらしたアプリケーションのコード文、そのコード文がインシデントを生じさせるユーザ及びシステム・データ値を含むデータ環境、インシデントによって生成された不正確な結果、及びインシデントを伴わないアプリケーションのコード文の実行においてユーザ２１により期待される正確な結果を含む。
【００２１】
ステップ４２０において、自動コレクタは、インシデントの順方向及び逆方向制御フローを分析するフロー・アナライザを実行する。フロー・アナライザの詳細については、下記の図３のフローチャートを参照されたい。
【００２２】
ステップ４３０において、自動コレクタは、フロー・アナライザが生じさせた分析結果が許容可能であるかどうかを判断する。自動コレクタはステップ４３０の実行を、特に、分析結果をアプリケーション・サポート・チームに提示してその後アプリケーション・サポート・チームから分析結果を承認する入力を受け取ること、分析結果に関する所定の標準データ・セットを分析結果に適用すること、自動コレクタに対して設定されている自動化パラメータによってステップ４４０に移るよう自動的に判断することなどによって行う。自動コレクタが、フロー・アナライザが生じさせた分析結果は許容可能であると判断すれば、自動コレクタはステップ４４０に移る。自動コレクタが、フロー・アナライザが生じさせた分析結果は許容可能でないと判断すれば、自動コレクタは、アプリケーション・サポート・チームの人間のプログラマによる手動分析のために終了する。
【００２３】
ステップ４４０において、自動コレクタは、フロー・アナライザの結果に基づきアプリケーションの各側面を修正するアプリケーション・フィクサを実行する。アプリケーション・フィクサの詳細については、下記の図８のフローチャートを参照されたい。
【００２４】
ステップ４５０において、自動コレクタは、アプリケーション・フィクサによって生成された、アプリケーションを修正するソリューションが許容可能であるかどうかを判断する。自動コレクタはステップ４５０の実行を、特に、ソリューションをアプリケーション・サポート・チームに提示して、その後、ソリューションを承認するアプリケーション・サポート・チームからの入力を受け取ることなどによって行う。自動コレクタが、アプリケーション・フィクサが生じさせたソリューションは許容可能であると判断すれば、自動コレクタはステップ４６０に移る。自動コレクタが、アプリケーション・フィクサが生じさせたソリューションは許容可能でないと判断すれば、自動コレクタは、アプリケーション・サポート・チームの人間のプログラマによるアプリケーションの手動修正のために終了する。
【００２５】
ステップ４６０において、自動コレクタは、ソリューションを用いてアプリケーションを更新し、ソリューションの詳細を記録に残す解決文をチケット発行ツールに送る。
【００２６】
図３は、本発明の実施形態による、上記の図２の自動コレクタの第１の下位モジュールであるフロー・アナライザによって実行される、アプリケーションのフローを自動的に分析する方法を示すフローチャートである。
【００２７】
ステップ５１０において、フロー・アナライザは、インシデントの制御フローを特定するインシデント・フロー・アイデンティファイアを実行する。インシデント・フロー・アイデンティファイアの詳細については、下記の図４の説明を参照されたい。
【００２８】
ステップ５２０とステップ５３０とは独立しているため、ステップ５２０及び５３０は同時に実行されてもよい。ステップ５２０において、フロー・アナライザは、インシデントの順方向データ・フローを追跡する順方向フロー・トラッカを実行する。順方向フロー・トラッカの詳細については、下記の図５の説明を参照されたい。
【００２９】
ステップ５３０において、フロー・アナライザは、インシデントの逆方向データ・フローを追跡する逆方向フロー・トラッカを実行する。インシデントの逆方向データ・フローは、期待される結論値から、反対方向で得られるデータ・フローである。逆方向フロー・トラッカの詳細については、下記の図６の説明を参照されたい。
【００３０】
ステップ５４０において、フロー・アナライザは、ステップ５２０及びステップ５３０両方からの結果を用いて、インシデントの一因となっている誤り位置のリストを生成する誤りロケータを実行する。誤りロケータの詳細については、下記の図７の説明を参照されたい。
【００３１】
図４は、本発明の実施形態による、上記の図３のフロー・アナライザの第１の下位モジュールであるインシデント・フロー・アイデンティファイアによって実行される、インシデントをもたらすアプリケーションの制御フローを自動的に特定する方法を示すフローチャートである。
【００３２】
ステップ５１０１において、インシデント・フロー・アイデンティファイアが、問題オブジェクトに関して、上記の図２のステップ４１０で受け取られたインシデント詳細を読み出す。インシデントをもたらすアプリケーションの制御フローが、インシデント・フローと呼ばれる。本明細書では、「問題オブジェクト」という用語は、チケット発行ツールによってチケットを介し、エラーをもたらすとレポートされたオブジェクトを示し、「代入オブジェクト」という用語は、インシデント・フロー内で特定の問題オブジェクトに直接又は間接的に代入されている中間オブジェクトを示す。問題オブジェクト及び代入オブジェクトは、インシデントに関与する。インシデント・フローに１つを超える問題オブジェクトがあれば、インシデント・フロー・アイデンティファイアは、各問題オブジェクトに関してステップ５１０１〜５１０５を実行する。インシデント・フロー・アイデンティファイアは、ステップ５１０２に移る。
【００３３】
ステップ５１０２において、インシデント・フロー・アイデンティファイアは、アプリケーションのコード文における問題オブジェクトに対するすべての代入文を追跡する。問題オブジェクトの値は、代入文によって変更されるため、インシデント・フローは、新たな値を問題オブジェクトに代入するコード文すべてを含む。インシデント・フロー・アイデンティファイアは、ステップ５１０３に移る。
【００３４】
このすべての代入文で問題オブジェクトに代入される各代入オブジェクトに関して、インシデント・フロー・アイデンティファイアは、ステップ５１０３及び５１０４を実行する。
【００３５】
ステップ５１０３において、インシデント・フロー・アイデンティファイアは、前記代入オブジェクトへの代入を追跡する。代入オブジェクトは、問題オブジェクトの値を変更するため、インシデント・フローは、新たな値を代入オブジェクトに代入するコード文を含む。インシデント・フロー・アイデンティファイアは、ステップ５１０４に移る。
【００３６】
ステップ５１０４において、インシデント・フロー・アイデンティファイアは前記代入オブジェクトが初期値を有するかどうかを、アプリケーションのコード文を検査することによって判断する。代入オブジェクトは、コード文がユーザから入力を受け取る場合、又は代入オブジェクトがアプリケーション開始時の値と等しい値を有する場合、初期値を有する。インシデント・フロー・アイデンティファイアが、代入オブジェクトは初期値を有しないと判断すれば、インシデント・フロー・アイデンティファイアは、代入オブジェクトに対する次の代入に関して５１０３を実行する。インシデント・フロー・アイデンティファイアが、代入オブジェクトは初期値を有すると判断すれば、インシデント・フロー・アイデンティファイアは、ステップ５１０３に戻り、問題オブジェクトに代入された別の代入オブジェクトを処理する。問題オブジェクトに代入されているすべての代入オブジェクトがそれぞれの初期値に達すると、インシデント・フロー・アイデンティファイアはステップ５１０５に移る。
【００３７】
ステップ５１０５において、インシデント・フロー・アイデンティファイアは、インシデントに関与するすべての問題オブジェクト、それぞれの問題オブジェクトに代入されたすべての代入オブジェクト、それぞれの代入オブジェクトのすべての初期値、及び各問題オブジェクトの変更されたそれぞれの一連の値を記述するインシデント・フローを生成して、記憶する。ステップ５１０５を実行した後、インシデント・フロー・アイデンティファイアは、制御を自動コレクタに渡す。インシデント・フローの例については、下記の図１１Ａを参照されたい。
【００３８】
図５は、本発明の実施形態による、上記の図３のフロー・アナライザの第２の下位モジュールである順方向フロー・トラッカによって実行される、インシデントをもたらすアプリケーションの順方向データ・フローを自動的に追跡する方法を示すフローチャートである。
【００３９】
ステップ５２０１において、順方向フロー・トラッカが、問題オブジェクトに関する少なくとも１つの入力バリエーションを用いてインシデント・フローを実行することによって、アプリケーションの計算をシミュレートする。前記少なくとも１つの入力バリエーションは、問題オブジェクトに関するユーザ入力に基づき自動的に生成される。順方向フロー・トラッカは、ステップ５２０２に移る。
【００４０】
インシデント・フロー内の各代入オブジェクトに関して、順方向フロー・トラッカは、ステップ５２０２及び５２０３を実行する。
【００４１】
ステップ５２０２において、順方向フロー・トラッカは、現在の代入オブジェクトの値を追跡する。順方向フロー・トラッカは、ステップ５２０３に移る。
【００４２】
ステップ５２０３において、順方向フロー・トラッカは、問題オブジェクトと、インシデント・フロー内の現在の代入オブジェクトとのそれぞれの値を比較することによって、現在の代入オブジェクトが問題オブジェクトに達したかどうかを判断する。順方向フロー・トラッカが、現在の代入オブジェクトは問題オブジェクトにまだ達していないと判断すれば、順方向フロー・トラッカは、アプリケーションのプログラム・コード内の、現在の代入オブジェクトの直後の代入に対して、ステップ５２０２を実行する。順方向フロー・トラッカが、現在の代入オブジェクトは問題オブジェクトに達したと判断すれば、順方向フロー・トラッカは、ステップ５２０２に戻り、問題オブジェクトに代入された別の代入オブジェクトを処理する。順方向フロー・トラッカが、問題オブジェクトのインシデント・フロー内のすべての代入オブジェクトが問題オブジェクトに達することを判断すると、順方向フロー・トラッカはステップ５２０４に移る。
【００４３】
ステップ５２０４において、順方向フロー・トラッカは、インシデントに関連する順方向データ・フローを生成して、記憶する。順方向データ・フローは、インシデントをもたらしたアプリケーションの実際の実行を示す。
【００４４】
図６は、本発明の実施形態による、上記の図３のフロー・アナライザの第３の下位モジュールである逆方向フロー・トラッカによって実行される、期待される結論値から、反対方向で得られるアプリケーションの逆方向データ・フローを自動的に追跡する方法を示すフローチャートである。
【００４５】
ステップ５３０１において、逆方向フロー・トラッカが、期待される結論値を問題オブジェクトに代入する。期待される結論値は、ユーザによって自動コレクタに入力として提供される。逆方向フロー・トラッカは、ステップ５３０２に移る。
【００４６】
インシデント・フロー内の各代入オブジェクトに関して、逆方向フロー・トラッカは、ステップ５３０２及び５３０３を実行する。
【００４７】
ステップ５３０２において、逆方向フロー・トラッカは、問題オブジェクトから現在の代入オブジェクトを計算し直す。逆方向フロー・トラッカは、ステップ５３０３に移る。
【００４８】
ステップ５３０３において、逆方向フロー・トラッカは、現在の代入オブジェクト及び現在の代入オブジェクトに関するユーザ入力のそれぞれの値を比較することによって、又はインシデント・フローがアプリケーションの先頭にあると判断することによって、現在の代入オブジェクトが初期値を有するかどうかを判断する。逆方向フロー・トラッカが、現在の代入オブジェクトは初期値を有しないと判断すれば、逆方向フロー・トラッカは、アプリケーションのプログラム・コード内で、現在の代入オブジェクトの直前にあるアプリケーションの代入に対して、ステップ５３０２を実行する。逆方向フロー・トラッカが、現在の代入オブジェクトが初期値を有すると判断すれば、逆方向フロー・トラッカは、ステップ５３０２に戻り、問題オブジェクトに代入された別の代入オブジェクトを処理する。逆方向フロー・トラッカが、問題オブジェクトのインシデント・フロー内のすべての代入オブジェクトがそれぞれの初期値を有すると判断すると、逆方向フロー・トラッカは、ステップ５３０４に移る。
【００４９】
ステップ５３０４において、逆方向フロー・トラッカは、インシデントに関連する問題オブジェクトの期待される結論値から得られた少なくとも１つの逆方向データ・フローを生成して、記憶する。前記少なくとも１つの逆方向データ・フローの各逆方向データ・フローは、データ値のセットと、それぞれのデータ値が代入されたそれぞれのコード文とを特定する。データ値は、ユーザ・データ及びシステム構成データを含む。前記各逆方向データ・フローは、問題オブジェクトの期待される結論値を生じさせ、アプリケーションがインシデントを伴わずに実行される、アプリケーションのシミュレートされた実行を示す。
【００５０】
ステップ５３０１〜５３０４は、インシデントに関連する各問題オブジェクトに関して繰り返される。
【００５１】
図７は、本発明の実施形態による、上記の図３のフロー・アナライザの第４の下位モジュールである誤りロケータによって実行される、アプリケーションの誤りを自動的に見つける方法を示すフローチャートである。
【００５２】
ステップ５４０１において、上記の図５及び６の説明にそれぞれ従い問題オブジェクトそれぞれに関して順方向フロー・トラッカによって生成された順方向データ・フローと、問題オブジェクトそれぞれに関して逆方向フロー・トラッカによって生成された対応する少なくとも１つの逆方向データ・フローとを、誤りロケータが比較する。誤りロケータは、ステップ５４０２に移る。
【００５３】
誤りロケータは、各問題オブジェクトのそれぞれの代入オブジェクトに関して、ステップ５４０２〜５４０４を実行する。上記のように、各問題オブジェクトは、チケット発行ツールによってチケットを介し、エラーをもたらすとレポートされたオブジェクトであり、少なくとも１つの代入オブジェクトが、インシデント・フロー内でのそれぞれの代入によって前記各問題オブジェクトに関連付けられている。
【００５４】
ステップ５４０２において、誤りロケータが、誤り候補を特定する。誤り候補は、順方向データ・フロー内と逆方向データ・フロー内とで代入オブジェクトが異なる値を有する代入文、順方向データ・フローによってとられた実際のパスが逆方向データ・フロー内のシミュレートされた期待されるパスと一致しない決定文、及びその組み合わせから成るグループから選択される。誤りロケータは、ステップ５４０３に移る。
【００５５】
ステップ５４０３において、誤りロケータは、少なくとも１つの新たなデータ・フローを、それぞれの入力バリエーションを用いてシミュレートする。入力バリエーションは、期待される結論値を生じさせるアプリケーションの実行をシミュレートする逆方向データ・フローに似るように、新たなデータ・フロー用に生成される。誤りロケータは、生成された入力バリエーションを用いてアプリケーションを実行することによって、新たなデータ・フローを作成する。誤りロケータは、ステップ５４０４に移る。
【００５６】
ステップ５４０４において、誤りロケータは、新たなデータ・フロー内と、逆方向データ・フロー内とで、現在の問題オブジェクトに代入されたそれぞれの値が一致するかどうかを判断する。誤りロケータが、新たなデータ・フロー内と、逆方向データ・フロー内とで、現在の代入オブジェクトに代入されたそれぞれの値が異なると判断すれば、誤りロケータは、現在の代入オブジェクトの別の入力バリエーションに関して、ステップ５４０３を実行する。誤りロケータが、新たなデータ・フロー内と、逆方向データ・フロー内とで、現在の代入オブジェクトに代入されたそれぞれの値が一致すると判断すれば、誤りロケータは、ステップ５４０２に戻り、順方向データ・フロー内と逆方向データ・フロー内とで異なる値を有する別の問題オブジェクトを処理する。順方向データ・フロー内と逆方向データ・フロー内とで異なる値を有するすべての問題オブジェクト及び制御文の処理が完了すると、誤りロケータはステップ５４０５に移る。
【００５７】
ステップ５４０５において、誤りロケータは、インシデント内のすべての問題オブジェクトに関して特定されたすべての誤り候補と、それぞれの誤り候補に関連付けられたそれぞれの代入オブジェクトのデータ値とを含む、誤り候補リストを生成して、記憶する。
【００５８】
図８は、本発明の実施形態による、上記の図２の自動コレクタの第２の下位モジュールであるアプリケーション・フィクサによって実行される、アプリケーションの誤りを自動的に修正する方法を示すフローチャートである。
【００５９】
ステップ６１０において、アプリケーション・フィクサは、ソリューションの技術仕様を生成する仕様ジェネレータを実行する。ソリューションは、インシデントを伴わずに実行する修正されたアプリケーションである。仕様ジェネレータの詳細については、下記の図９の説明を参照されたい。
【００６０】
ステップ６２０において、アプリケーション・フィクサは、ソリューションと、チケット発行ツール若しくはユーザ又はその両方のためにソリューションを記録に残す解決文とを生成する、ソリューション・ジェネレータを実行する。ソリューション・ジェネレータの詳細については、下記の図１０の説明を参照されたい。
【００６１】
図９は、本発明の実施形態による、上記の図８のアプリケーション・フィクサの第１の下位モジュールである仕様ジェネレータによって実行される、ソリューションに関する技術仕様を自動的に生成する方法を示すフローチャートである。
【００６２】
ステップ６１０１において、仕様ジェネレータは、フロー・アナライザの誤りロケータによって生成された誤り候補リスト及びアプリケーションの詳細を読み出す。アプリケーションの詳細は、自動コレクタによって入手可能にされる。
【００６３】
ステップ６１０２において、仕様ジェネレータは、誤り候補リスト及びアプリケーションの詳細を検査することによって、インシデントの開始部分（ｏｒｉｇｉｎ）を特定する。インシデントの開始部分としては、特に、データ・オブジェクト、アプリケーション内のコード文、及びその組み合わせが考えられる。
【００６４】
ステップ６１０３において、仕様ジェネレータは、逆方向データ・フロー内のデータ値に基づき、インシデントの特定された開始部分に代わる、新たなデータ・オブジェクト若しくは新たなコード文又はその両方を案出する。
【００６５】
ステップ６１０４において、仕様ジェネレータは、インシデントを伴わずに実行し、ユーザによって期待されている結論を生じさせる、修正されたアプリケーションであるソリューションの技術仕様を生成する。続いて仕様ジェネレータは、技術仕様を、アプリケーション・フィクサのソリューション・ジェネレータに送る。
【００６６】
図１０は、本発明の実施形態による、上記の図８のアプリケーション・フィクサの第２の下位モジュールであるソリューション・ジェネレータによって実行される、技術仕様に従ってソリューションを自動的に生成する方法を示すフローチャートである。
【００６７】
ステップ６２０１において、ソリューション・ジェネレータは、仕様ジェネレータから技術仕様を受け取り、アプリケーションの詳細を読み出す。アプリケーションの詳細は、自動コレクタによって入手可能にされる。
【００６８】
ステップ６２０２において、ソリューション・ジェネレータは、技術仕様に従って、インシデントのアプリケーションを修正するソリューションを生成する。ソリューションは、インシデントを伴わずに、期待される結果を生成する新たなアプリケーションである。ソリューションは、コード文、設定パラメータ、ユーザ・データ、及びその組み合わせから成るグループから選択される。ソリューションのコード文は、アプリケーションの既存のコード文に取って代わり、インシデントを修正する。ソリューションの設定パラメータは、アプリケーションのランタイム環境を変更して、インシデントを修正する。ソリューションのユーザ・データは、アプリケーションが、インシデントをもたらしたデータのセットとは異なるデータの新たなセットを用いて実行されることを可能にする。
【００６９】
ステップ６２０３において、ソリューション・ジェネレータは、生成されたソリューションを、アプリケーションの記憶装置に記憶する。ソリューション・ジェネレータはさらに、ソリューションをテキスト記述として記録に残す解決文を生成する。ソリューション・ジェネレータは、解決文をユーザ若しくはチケット発行ツール又はその両方に送る。
【００７０】
本発明の一実施形態では、アプリケーションは、「ｍｙｐｒｏｇｒａｍ」と呼ばれるプログラムであり、これは、修正されるべきであると判断された文「ｘ＝４」を含む。文「ｘ＝４」のソリューションは文「ｘ＝５」であり、これがアプリケーションｍｙｐｒｏｇｒａｍ内の文「ｘ＝４」に代わる。解決文は、特に、「問題はプログラム「ｍｙｐｒｏｇｒａｍ」内の誤りが原因でもたらされたものであり、行ｚで変数ｘは値５と照合されるべきであるのに対して、値４と照合された」などの、ソリューションのテキスト記述である。
【００７１】
図１１Ａは、本発明の実施形態による、自動コレクタが上記の図２の方法を実行するアプリケーションの擬似コードを示す。
【００７２】
インシデント・フロー・アイデンティファイアは、上記の図４のステップ５１０１において、問題オブジェクトをパラメータｇとして特定するインシデント詳細を読み出す。インシデント・フロー・アイデンティファイアは、上記の図４のステップ５１０２において、問題オブジェクトｇへの代入文を追跡する。問題オブジェクトｇは、行Ｌ４「ｇ＝ｄ−５０；」内のパラメータｄから代入されているため、パラメータｄが、問題オブジェクトｇの第１の代入オブジェクトである。インシデント・フロー・アイデンティファイアは、上記の図４のステップ５１０３において、パラメータｄが行Ｌ２「ｄ＝ａ＋１０；」内のパラメータａから代入されているため、問題オブジェクト・パラメータｇの第２の代入オブジェクトとしてパラメータａを追跡する。インシデント・フロー・アイデンティファイアは、上記の図４のステップ５１０４において、パラメータａがユーザ入力によって初期化される入力パラメータであるため、パラメータａが初期値を有すると判断し、代入オブジェクトの追跡を終了する。インシデント・フロー・アイデンティファイアは、上記の図４のステップ５１０５に移り、問題オブジェクト・パラメータｇのインシデント・フローを、行Ｌ２及びＬ４並びにパラメータａ、ｄ及びｇとして生成する。
【００７３】
図１１Ｂは、本発明の実施形態による、自動コレクタが上記の図２の方法を実行するアプリケーションのフローチャートを示す。
【００７４】
変数Ｘのユーザ入力が４であるとき、アプリケーションは変数Ｙの値として２を表示するが、ユーザは変数Ｙの値が６となると期待していた、というアプリケーションの問題を記述するチケットをユーザが出す。
【００７５】
順方向フロー・トラッカが、実際に実行されていた順方向データ・フローがステップＥ１−Ｅ２−Ｅ３−Ｅ５であることを発見する。
【００７６】
逆方向フロー・トラッカが、ステップＥ５における変数Ｙの期待される値６を用いて変数Ｙをインスタンス化することによって、実行をシミュレートする。逆方向フロー・トラッカがステップＥ３を試験すると、変数Ｘのシミュレートされる値は８となり、これは、８が５よりも大きいため、ステップＥ２での決定と矛盾する。さらに、変数Ｘのユーザ入力は４であるため、Ｅ３を含むシミュレートされた実行は不正確である。
【００７７】
逆方向フロー・トラッカがステップＥ４を試験すると、変数Ｘのシミュレートされる値は４となり、これも、４が５よりも小さいため、ステップＥ２での決定と矛盾する。ステップＥ２が原因で、アプリケーションは、変数Ｘの入力４から変数Ｙの期待される値６を生成できない。誤りロケータは、順方向データ・フローと逆方向データ・フローとを比較して、ステップＥ２を誤り候補として特定する。
【００７８】
仕様ジェネレータは、アプリケーションを修正するためにステップＥ２に関して「Ｘ＞３」を案出し、ステップＥ２の代わりに「Ｘ＞３」を有する新たなアプリケーションの技術仕様を生成する。ソリューション・ジェネレータは、ソリューションとしてステップＥ２の代わりに「Ｘ＞３」を有する新たなアプリケーションを作成して、このソリューションをテキストで記述する解決文を作成する。
【００７９】
図１２は、本発明の実施形態による、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正するために使用されるコンピュータ・システムを示す。
【００８０】
コンピュータ・システム９０は、プロセッサ９１、プロセッサ９１に結合された入力デバイス９２、プロセッサ９１に結合された出力デバイス９３、並びにプロセッサ９１にそれぞれ結合されたメモリ・デバイス９４及び９５を含むコンピュータ可読メモリ・ユニットを含む。入力デバイス９２は、特に、キーボード、マウス、キーパッド、タッチ・スクリーン、音声認識デバイス、センサ、ネットワーク・インターフェイス・カード（ＮＩＣ：ｎｅｔｗｏｒｋ  ｉｎｔｅｒｆａｃｅ  ｃａｒｄ）、ボイス／ビデオ・オーバー・インターネット・プロトコル（ＶＯＩＰ：Ｖｏｉｃｅ／ｖｉｄｅｏ  ｏｖｅｒ  Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アダプタ、ワイヤレス・アダプタ、電話アダプタ、専用回線アダプタなどであってもよい。出力デバイス９３は、特に、プリンタ、プロッタ、コンピュータ画面、磁気テープ、リムーバブル・ハード・ディスク、フレキシブル・ディスク、ＮＩＣ、ＶＯＩＰアダプタ、ワイヤレス・アダプタ、電話アダプタ、専用回線アダプタ、可聴信号若しくは視覚信号又はその両方のジェネレータ、発光ダイオード（ＬＥＤ：ｌｉｇｈｔ  ｅｍｉｔｔｉｎｇ  ｄｉｏｄｅ）などであってもよい。メモリ・デバイス９４及び９５は、特に、キャッシュ、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、ハード・ディスク、フレキシブル・ディスク、磁気テープ、例えばコンパクト・ディスク（ＣＤ：ｃｏｍｐａｃｔ  ｄｉｓｋ）又はデジタル・ビデオ・ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｉｄｅｏ  ｄｉｓｋ）などの光学式記憶装置であってもよい。メモリ・デバイス９５は、コンピュータ・コード９７を含み、これは、コンピュータ実行可能命令を含むコンピュータ・プログラム・コードである。コンピュータ・コード９７は、特に、本発明に従ってアプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正するために使用されるアルゴリズムを含む。プロセッサ９１は、コンピュータ・コード９７を実行する。メモリ・デバイス９４は、入力データ９６を含む。入力データ９６は、コンピュータ・コード９７によって要求される入力を含む。出力デバイス９３は、コンピュータ・コード９７からの出力を表示する。メモリ・デバイス９４及び９５の何れか又は両方（又は図１２に示されていない１つ以上のさらなるメモリ・デバイス）は、コンピュータ可読プログラム・コードが具現化されている、若しくは他のデータが記憶されている、又はその両方のコンピュータ可読記憶媒体（又はコンピュータ使用可能記憶媒体若しくはプログラム記憶デバイス）として使用されてもよく、コンピュータ可読プログラム・コードは、コンピュータ・コード９７を含む。概して、コンピュータ・システム９０のコンピュータ・プログラム製品（或いは製品）は、前記コンピュータ可読記憶媒体（又は前記プログラム記憶デバイス）を含むとよい。
【００８１】
本発明のコンポーネントは何れも、本発明のデータ収集ルールの通りにウェブ・インターフェイスを動的に構築するプロセスに関してコンピューティング・インフラストラクチャを展開又は統合することを提案するサービス・プロバイダにより展開、管理、サービス提供などされることができる。したがって、本発明は、コンピュータ可読コードをコンピューティング・システム（例えばコンピューティング・システム９０）に統合、ホスト、維持、及び展開することを含む、コンピュータ・インフラストラクチャをサポートするプロセスを開示し、コードは、コンピューティング・システムとともに、アプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正する方法を実行することができる。
【００８２】
別の実施形態では、本発明は、登録、宣伝、若しくは手数料、又はその何れかの組み合わせに基づき本発明のプロセス・ステップを実行するビジネス方法を提供する。すなわち、ソリューション・インテグレータなどのサービス・プロバイダは、本発明のアプリケーションのランタイム挙動に基づきアプリケーションを自動的に修正するプロセスを、作成、維持、サポートなどすることを提案することができる。この場合、サービス・プロバイダは、１以上の顧客に対して本発明のプロセス・ステップを実行するコンピュータ・インフラストラクチャを作成、維持、サポートなどすることができる。見返りとして、サービス・プロバイダは、登録若しくは手数料の取り決め若しくはその両方に従って顧客（単数又は複数）から支払いを受け取ること、若しくは１つ以上のサード・パーティに対する宣伝コンテンツの販売からの支払いを受け取ること、又はその両方ができる。
【００８３】
図１２は、コンピュータ・システム９０を、ハードウェア及びソフトウェアの特定の構成として示すが、当業者には周知であると考えられるハードウェアとソフトウェアとの任意の構成が、図１２の特定のコンピュータ・システム９０と関連して上記に記載された目的のために利用され得る。例えば、メモリ・デバイス９４及び９５は、独立したメモリ・デバイスではなく、単一のメモリ・デバイスの一部であってもよい。
【００８４】
当業者であれば当然のことであるが、本発明は、システム、方法又はコンピュータ・プログラム製品として具現化され得る。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、又はソフトウェア及びハードウェアの側面を兼ね備えた実施形態の形態をとり得、これは本願明細書においてすべて概して「回路」、「モジュール」若しくは「システム」と呼ばれ得る。さらに、本発明は、任意の有形の表現媒体において具現化されたコンピュータ使用可能プログラム・コードを有する該媒体において具現化されたコンピュータ・プログラム製品の形態をとってもよい。
【００８５】
１つ以上のコンピュータ使用可能又はコンピュータ可読媒体（単数又は複数）９４、９５の任意の組み合わせが利用され得る。コンピュータ使用可能媒体又はコンピュータ可読媒体という用語は、コンピュータ使用可能／可読記憶媒体９４、９５を集合的に指す。コンピュータ使用可能又はコンピュータ可読媒体９４、９５は、例えば、限定はされないが、電子、磁気、光学、電磁気、赤外線、若しくは半導体システム、装置、デバイス、又は前述のものの任意の適切な組み合わせとすることもできる。コンピュータ可読媒体９４、９５のより具体的な例（包括的でないリスト）には、１つ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光学式記憶デバイス、磁気記憶デバイス又は前述のものの任意の適切な組み合わせが含まれるであろう。なお、プログラムは、例えば紙又は他の媒体の光学式走査により電子的に獲得され、続いて必要に応じコンパイル、解釈、又は適切な方法により他の形で処理され、続いてコンピュータ・メモリに記憶されることが可能なため、コンピュータ使用可能又はコンピュータ可読媒体９４、９５は、プログラムが印刷される紙又は別の適切な媒体とすることさえもできる。この文書の文脈では、コンピュータ使用可能又はコンピュータ可読媒体９４、９５は、命令を実行するシステム、装置又はデバイスによって、又はそれに関連して使用されるプログラムを含むこと、又は記憶することができる任意の媒体であればよい。
【００８６】
本発明の動作を実行するコンピュータ・コード９７は、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋又は同様のものなどのオブジェクト指向プログラミング言語、及び「Ｃ」プログラミング言語若しくは同様のプログラミング言語などの従来の手続きプログラミング言語を含む、１つ以上のプログラミング言語の任意の組み合わせで書かれていてよい。コンピュータ・コード９７は、スタンド・アロン・ソフトウェア・パッケージとして、完全にユーザのコンピュータ上で実行されること、部分的にユーザのコンピュータ上で実行されること、又は部分的にユーザのコンピュータ上で、かつ部分的にリモート・コンピュータ上で実行されること、又は完全にリモート・コンピュータ若しくはサーバ上で実行されることもできる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークによってリモート・コンピュータがユーザのコンピュータに接続されてもよく、又は、外部コンピュータに接続されてもよい（例えば、インターネット・サービス・プロバイダを使用しインターネットによって）。
【００８７】
本発明は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図若しくはブロック図又はその両方を参照して記載される。当然のことながら、フローチャート図若しくはブロック図又はその両方の各ブロック、及びフローチャート図若しくはブロック図又はその両方の複数ブロックの組み合わせは、コンピュータ・プログラム命令により実装可能である。「コンピュータ・プログラム命令」という用語は、本明細書では「コンピュータ・コード」９７という用語と置き換え可能である。当該コンピュータ・プログラム命令が、機械を生じるよう、汎用コンピュータ、専用コンピュータ、又はその他のプログラム可能データ処理装置のプロセッサに提供されて、この命令が、コンピュータ又はその他のプログラム可能データ処理装置のプロセッサにより実行されて、フローチャート若しくはブロック図又はその両方のブロック若しくは複数ブロックにおいて指定された機能／動作を実装する手段を作り出すようにすることもできる。
【００８８】
さらに、特定の形で機能するようコンピュータ又はその他のプログラム可能データ処理装置に指示することができる当該コンピュータ・プログラム命令は、コンピュータ可読媒体９４、９５に記憶されて、コンピュータ可読媒体に記憶されたこの命令が、フローチャート若しくはブロック図又はその両方のブロック若しくは複数ブロックにおいて指定された機能／動作を実装する命令手段を含む製品を生じるようにすることもできる。
【００８９】
さらに、コンピュータ・プログラム命令は、コンピュータ又はその他のプログラム可能データ処理装置にロードされて、コンピュータ又はその他のプログラム可能装置上で一連の動作ステップが実行されるようにしてコンピュータに実装されるプロセスを生じさせ、コンピュータ又はその他のプログラム可能装置上で実行される命令が、フローチャート若しくはブロック図又はその両方のブロック若しくは複数ブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにすることもできる。
【００９０】
各図面のフローチャート及びブロック図は、本発明の様々な実施形態によるシステム、方法及びコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能性及び動作を示す。この関連で、フローチャート又はブロック図内の各ブロックは、指定の論理機能（単数又は複数）を実装する１つ以上の実行可能命令を含むモジュール、セグメント、又はコードの一部を表現することもできる。なお、さらに、いくつかの代わりの実装では、ブロック内に示されている機能が、図面に示されているのとは異なる順序で発生してもよい。例えば、関連する機能性次第で、連続して示されている２つのブロックが実際には実質的に同時に実行されてもよく、又は、各ブロックが反対の順序で実行されることがあってもよい。なお、さらに、ブロック図若しくはフローチャート図又はその両方の各ブロック、及びブロック図若しくはフローチャート図又はその両方の複数ブロックの組み合わせは、指定の機能若しくは動作を実行する専用ハードウェア・ベース・システム、又は専用ハードウェア及びコンピュータ命令の組み合わせにより実装することができる。
【００９１】
特許請求の範囲のミーンズ又はステップ・プラス・ファンクション構成要素すべての対応する構造、材料、動作、及び等価物は、明確に請求されている他の請求される構成要素とともに機能を実行する任意の構造、材料、又は動作を含むものとする。本発明の記載は、例証及び説明のために示されたものであるが、包括的であることも、開示された形態の発明に限定されることも目的としていない。当業者には、本発明の範囲から逸脱することのない、多数の変更及び変形が明らかであろう。実施形態は、本発明の原理及び実際の応用を最もよく説明して、当業者が、意図される特定の用途に適する様々な変更を用いた様々な実施形態に関して、本発明を理解できるように選ばれ、記載された。
【図１】
0005607741.tif 000002
【図２】
0005607741.tif 000003
【図３】
0005607741.tif 000004
【図４】
0005607741.tif 000005
【図５】
0005607741.tif 000006
【図６】
0005607741.tif 000007
【図７】
0005607741.tif 000008
【図８】
0005607741.tif 000009
【図９】
0005607741.tif 000010
【図１０】
0005607741.tif 000011
【図１１】
0005607741.tif 000012
【図１２】
0005607741.tif 000013