(57)【要約】      （修正有）【課題】不具合が発生したソフトウエアプログラムを修復する方法及びプログラムを提供する。【解決手段】テストプログラムセットを用いてソフトウエアプログラムの不具合位置での不具合を特定し、不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで複数のテキスト類似度スコアを決定し、複数の修復候補をテキスト類似度スコアに基づき分類し、分類に基づき複数の修復候補から特定の修復候補を選択し、特定の修復候補の選択に基づき、不具合位置において特定の修復候補を適用する。【選択図】図３
2017151977.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサが、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置での不具合を特定し、
前記不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行する方法。
【請求項２】
前記プロセッサが、
最長共通部分列の決定に基づき前記テキスト類似度スコアを決定する
処理をさらに実行する請求項１記載の方法。
【請求項３】
前記不具合は、複数のパラメータを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記複数のパラメータの各々について１以上のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータの各々のパラメータ位置について位置スコアを決定する処理を含む、
請求項１記載の方法。
【請求項４】
前記メソッド呼び出しは第１のメソッド呼び出しであり、
前記位置スコアを、特定のパラメータ位置について決定する処理は、
前記第１のメソッド呼び出しにより呼び出されるメソッドの第２のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
前記第１のメソッド呼び出しの前記特定のパラメータ位置における第１のパラメータと、前記第２のメソッド呼び出しの前記特定のパラメータ位置における第２のパラメータとの間のパラメータテキスト類似度スコアを決定する処理を含む、
請求項３記載の方法。
【請求項５】
前記位置スコアを、特定のパラメータ位置について決定する処理は、
前記メソッド呼び出しにより呼び出されるメソッドの複数の他のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
前記メソッド呼び出しの前記特定のパラメータ位置におけるパラメータと、特定された前記複数の他のメソッド呼び出しの各々の前記特定のパラメータ位置におけるパラメータとの間で、パラメータテキスト類似度スコアを決定することで、複数のパラメータテキスト類似度スコアを取得し、
前記複数のパラメータテキスト類似度スコアの平均を求める処理を含む、
請求項３記載の方法。
【請求項６】
前記不具合は、パラメータを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記パラメータについての複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々についてパラメータ置換スコアを決定する処理を含む、
請求項１記載の方法。
【請求項７】
前記複数のパラメータ置換候補は、前記パラメータと同じ種類のパラメータを含む各パラメータ置換候補に基づくパラメータ置換候補として選択される、
請求項６記載の方法。
【請求項８】
前記不具合はメソッドを呼び出すメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッドと同一のシグネチャを有するソフトウエアプログラムにおける複数の他のメソッドを含み、
前記複数のテキスト類似度スコアを決定する処理は、前記メソッドの名前と前記複数の他のメソッドの名前の各々との間でメソッドテキスト類似度スコアを決定することで、複数のメソッド置換スコアを決定する処理を含む、
請求項１記載の方法。
【請求項９】
前記複数の修復候補は、第１の複数の修復候補であり、
前記プロセッサが、
前記テキスト類似度スコアに基づき前記第１の複数の修復候補の一部を取り除くことで、第２の複数の修復候補を取得し、
分類に基づき、前記第２の複数の修復候補から前記特定の修復候補を選択する、
処理をさらに実行する請求項１記載の方法。
【請求項１０】
前記不具合は、複数のパラメータを含むメソッド呼び出しを含み、
前記複数のパラメータの各々は、前記メソッド呼び出しにおけるパラメータ位置に有り、
前記複数の修復候補は、前記複数のパラメータの各々に対する複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々について置換スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、各パラメータ位置について位置スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数の修復候補の各々について、当該修復候補に関連付けられた、対応する置換スコアと対応する位置スコアとに基づく合成スコアを決定する処理を含む、
請求項１記載の方法。
【請求項１１】
前記不具合は、レシーバオブジェクトを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記レシーバオブジェクトに対する複数のレシーバ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、レシーバ置換スコアを前記複数のレシーバ置換候補の各々について決定する処理を含む、
請求項１記載の方法。
【請求項１２】
前記複数のレシーバ置換候補は、前記レシーバオブジェクトと同じ種類のレシーバオブジェクトを含む各レシーバ置換候補に基づくレシーバ置換候補として選択される、
請求項１１記載の方法。
【請求項１３】
前記レシーバ置換スコアを、前記複数のレシーバ置換候補のうち特定のレシーバ置換候補について決定する処理は、前記レシーバオブジェクトの名前と前記特定のレシーバ置換候補の名前との間の最長共通部分列に基づきレシーバ置換スコアを決定する処理を含む、
請求項１１記載の方法。
【請求項１４】
プロセッサに、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、メソッドを呼び出すメソッド呼び出しを含む不具合を特定し、
前記メソッド呼び出しを含む前記不具合に応じて、前記不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行させるプログラム。
【請求項１５】
前記複数の修復候補は、前記メソッドと同一のシグネチャを有するソフトウエアプログラムにおける複数の他のメソッドを含み、
前記複数のテキスト類似度スコアを決定する処理は、前記メソッドと前記複数の他のメソッドの各々との間でメソッドテキスト類似度スコアを決定することで、複数のメソッド置換スコアを決定する処理を含む、
請求項１４記載のプログラム。
【請求項１６】
前記複数の修復候補は、第１の複数の修復候補であり、
前記プロセッサに、
前記テキスト類似度スコアに基づき前記第１の複数の修復候補の一部を取り除くことで、第２の複数の修復候補を取得し、
分類に基づき前記第２の複数の修復候補から前記特定の修復候補を選択する、
請求項１４記載のプログラム。
【請求項１７】
前記メソッド呼び出しは、複数のパラメータを含み、
前記複数のパラメータの各々は、前記メソッド呼び出しにおけるパラメータ位置に有り、
前記複数の修復候補は、前記複数のパラメータの各々に対する複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々について置換スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、各パラメータ位置について位置スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数の修復候補の各々について、当該修復候補に関連付けられた、対応する置換スコアと対応する位置スコアとに基づく合成スコアを決定する処理を含む、
請求項１４記載のプログラム。
【請求項１８】
前記メソッド呼び出しは、レシーバオブジェクトを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記レシーバオブジェクトに対する複数のレシーバ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、レシーバ置換スコアを前記複数のレシーバ置換候補の各々について決定する処理を含む、
請求項１４記載のプログラム。
【請求項１９】
前記プロセッサに、
最長共通部分列の決定に基づき前記テキスト類似度スコアを決定する
処理をさらに実行させる請求項１４記載のプログラム。
【請求項２０】
プロセッサが、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、メソッドを呼び出し且つパラメータとレシーバオブジェクトとのうち少なくともいずれかを含むメソッド呼び出しを含む不具合を特定し、
前記不具合に対する複数の修復候補であって且つ前記パラメータに対する１以上のパラメータ置換候補、前記メソッドに対する１以上のメソッド置換候補および前記レシーバオブジェクトに対する１以上のレシーバ置換候補のうちの少なくともいずれかを含む前記複数の修復候補を、前記メソッド呼び出しを含む前記不具合に基づき特定し、
前記メソッド呼び出しを含む前記不具合に応じて、前記不具合に対する複数の修復候補の各々に対して、前記メソッド呼び出しを含む前記不具合に基づきテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアプログラムの修復に関する。
【背景技術】
【０００２】
ソフトウエアプログラムには不具合（一般的に「バグ」と呼ばれる）がよく有るので、ソフトウエアプログラムが思い通りに動作しないことがある。ソフトウエアプログラムにある不具合を特定して修正するために自動修復システムがしばしば使用される。
【０００３】
本開示で請求される事項は、欠点を解決する実施形態または上記のような環境だけで動作する実施形態に限られるわけではない。むしろ、この背景は本開示におけるいくつかの実施形態を適用可能な技術分野の一例を示すために提供されるにすぎない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、１つの側面では、不具合が発生したソフトウエアプログラムを修復する技術を提供することである。
【課題を解決するための手段】
【０００５】
本実施の形態の一態様の方法は、テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置での不具合を特定し、不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、複数の修復候補を、テキスト類似度スコアに基づき分類し、分類に基づき、複数の修復候補から特定の修復候補を選択し、特定の修復候補の選択に基づき、不具合位置において特定の修復候補を適用する処理を含む。
【０００６】
実施形態の目的と利点は、少なくとも特許請求の範囲において詳細に示されている要素、特徴、および組み合わせにより実現され且つ達成される。上記の概略的な説明と下記の詳細な説明は例として与えられており且つ説明のためのものであり、請求される発明を限定するものではない。
【発明の効果】
【０００７】
不具合が発生したソフトウエアプログラムを修復できるようになる。
【図面の簡単な説明】
【０００８】
実施形態は、添付の図面を参照することによりさらに明確に且つ詳細に説明される。
【図１】図１は、ソフトプログラムの修復に関係する環境の一例を示す図である。
【図２】図２は、ソフトウエアプログラムを修復するために構成された計算システムの一例である。
【図３】図３は、ソフトウエアプログラムを修復する方法の一例のフローチャートである。
【図４】図４は、ソフトウエアプログラム修復処理の方法の一例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
本開示に記載されている幾つかの実施形態は、ソフトウエアプログラムを修復するための方法及びシステムに関する。ソフトウエアプログラムはしばしば、そのソフトウエアプログラムを思い通りに動作させない不具合（一般的に「バグ」とも呼ばれる）を含む。また、ソフトウエアプログラムを修復するために、不具合を検出して是正するための自動修復システム及び技術がよく利用されている。しかし、一般的に使用されている自動修復システム及び技術は、不具合を修復しようとするとき、効果的ではない試行錯誤をしばしば行う。
【００１０】
本開示に記載される一つ以上の実施形態においては、ソフトウエアプログラムの不具合に対する修復候補について、修復効果指標が決定されてもよい。特に、特定の不具合に対する複数の修復候補の各々について、テキスト類似度スコアが決定されてもよい。以下で説明するように、特定の修復候補についてのテキスト類似度スコアは、その特定の修復候補が特定の不具合位置における不具合を修復することに関して、どの程度効果的であるかについての指標であってもよい。１又は複数の修復候補は、テキスト類似度スコアによって分類され又は一部が取り除かれてもよい。また、特定の修復候補が、分類され又は一部が取り除かれた結果に基づき選択され且つ適用されてもよい。したがって、自動修復システムは、不具合に対する修復候補の選択のために及び適用の優先順位を付けるために、テキスト類似度スコアを決定して利用してもよい。
【００１１】
本開示の実施形態は添付の図面を参考にして説明される。
【００１２】
図１は、本開示に記載される少なくとも一つの実施形態に従って用意される、ソフトウエアプログラムを修復することに関する環境１００の例を示す図である。環境１００は、テスト対象コード１０４を不具合のために分析する修復モジュール１０６を含んでもよい。修復モジュール１０６は、修正されたテスト対象コード１０８を出力してもよい。修正されたテスト対象コード１０８は、修復モジュール１０６による修復処理によってテスト対象コード１０４に生成された一つ以上の修正箇所を含んでもよい。
【００１３】
テスト対象コード１０４は、例えば、処理装置が実行するソフトウエアプログラム、ソフトウエアプログラムのコード、ライブラリー、アプリケーション、スクリプト、その他の論理または命令等の電子データを含んでもよい。幾つかの実施形態において、テスト対象コード１０４は、ソフトウエアプログラム全体を含んでもよい。追加的にまたは代替的に、テスト対象コード１０４は、ソフトウエアプログラムの一部を含んでもよい。テスト対象コード１０４は、ソフトウエアプログラムのために使用できる適切な種類のいかなるコンピュータ言語で書き込まれてもよい。
【００１４】
修復モジュール１０６は、修正されたテスト対象コード１０８を生成するために計算装置がテスト対象コード１０４に一つ以上の修正を行えるようにするコードおよびルーチンを含んでもよい。追加的にまたは代替的に、修復モジュール１０６は、プロセッサ、（例えば、一つ以上の処理又は制御を行うための）マイクロプロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は特定用途向け集積回路（ＡＳＩＣ）等のハードウエアを用いることにより実現されてもよい。いくつかの他の例では、修復モジュール１０６はハードウエアとソフトウエアとの組み合わせにより実現されてもよい。本開示では、修復モジュール１０６により実行されるとして記載された処理は、修復モジュール１０６の指示によって同様のシステムが行う処理を含んでもよい。
【００１５】
修復モジュール１０６は、テスト対象コード１０４にある一つ以上の不具合を修復（修正とも呼ぶ）するための一連の修復処理を、テスト対象コード１０４に対して行ってもよい。また、幾つかの実施形態では、修復モジュール１０６は、修復テンプレート１１２と一つ以上のテストプログラムセット１１１とに基づいて一つ以上の修復処理を行ってもよい。
【００１６】
修復テンプレート１１２は適切な種類のいかなる命令あるいはルーチンを含んでもよく、その命令あるいはルーチンが実行された場合には、テスト対象コード１０４の不具合の存在に応じて、テスト対象コード１０４に対して一つ以上の修正がなされてもよい。その修正は、テスト対象コード１０４の不具合を修復する又は修復しようとする変更を含んでもよい。
【００１７】
幾つかの実施形態では、修復テンプレート１１２により行われた修正は、不具合に関連し得る修復候補に基づいていてもよい。例えば、幾つかの実施形態では、ある修復位置での不具合はメソッドの呼び出し（「メソッド呼び出し」）を含んでもよい。そして、修復候補は、そのメソッド呼び出しに関して行われ得る様々な変更を含んでもよい。一例として、メソッド呼び出しは一つ以上のパラメータを含んでもよく、修復候補は一つ以上の引数を含んでもよい。そして、その引数はそれぞれのパラメータのためのパラメータ置換候補であってもよい。これらの実施形態または他の実施形態では、修復候補は、メソッド呼び出しに含まれているメソッドを置換するために使用される他のメソッド（「メソッド置換候補」）を一つ以上含んでもよい。追加的にまたは代替的に、メソッド呼び出しは、レシーバオブジェクトを含んでもよく、修復候補は、レシーバオブジェクトのためのレシーバオブジェクト置換候補（「レシーバ置換候補」）を一つ以上含んでもよい。
【００１８】
テストプログラムセット１１１は、テスト対象コード１０４のためのテストケースとして機能するルーチンを一つ以上含んでもよい。テストプログラムセット１１１は、テスト対象コード１０４が特定の方法で動作するか判定してもよい。テストプログラムセット１１１は、適切ないかなる技術により構成されてもよい。
【００１９】
修復モジュール１０６は、テスト対象コード１０４の一つ以上の不具合と対応する不具合位置とを検出又は決定するために、テスト対象コード１０４に対して一つ以上のテストプログラムセット１１１を適用してもよい。幾つかの実施形態では、修復モジュール１０６は、テストプログラムセット１１１に含まれている一つ以上のテストを実行してもよい。この処理はテスト実行の実施と呼ばれてもよい。合格するテスト実行は、「合格テスト実行」と呼ばれてもよい。そして、合格しないテスト実行は、「不合格テスト実行」と呼ばれてもよい。幾つかの実施形態では、テスト対象コード１０４の不具合位置と対応する不具合とは、不具合位置で現れる、不合格テスト実行において実行されるコードに基づいて特定されてもよい。
【００２０】
上記のように、修復モジュール１０６は、テスト対象コード１０４において特定された一つ以上の不具合のそれぞれのための修復候補に対して、修復効果指標を決めてもよい。例えば、修復モジュール１０６は、特定の不具合に対する一つ以上の修復候補の各々について、テキスト類似度スコアを決定してもよい。特に、幾つかの実施形態では、不具合はメソッド呼び出しを含んでもよく、修復モジュール１０６は、パラメータ置換候補、レシーバ置換候補、またはメソッド置換候補についてテキスト類似度スコアを決定してもよい。
【００２１】
例えば、修復モジュール１０６は、テキスト類似度の分析を用いて、メソッド呼び出しに含まれ得るパラメータ位置のそれぞれの位置スコアを決定してもよい。位置スコアは、対応するパラメータ位置でパラメータを置換することの有効性を表してもよい。これらの実施形態または他の実施形態では、修復モジュール１０６は、テキスト類似度の分析を用いて、メソッド呼び出しに含まれている各パラメータについて、一つ以上のパラメータ置換候補のパラメータ置換スコアを決定してもよい。追加的にまたは代替的に、修復モジュール１０６は、各修復候補について合成スコアを決定してもよい。そして、合成スコアは、対応する修復候補のパラメータ置換スコアに基づいていてもよく、また、対応する修復候補が挿入されるパラメータ位置についての対応する位置スコアに基づいていてもよい。
【００２２】
修復モジュール１０６は、テキスト類似度の分析を用いて、メソッド呼び出しに含まれ得るメソッドのレシーバオブジェクトについての一つ以上のレシーバ置換候補に対して、レシーバ置換スコアを決定してもよい。これらの実施形態または他の実施形態では、修復モジュール１０６は、テキスト類似度の分析を用いて、それぞれのメソッド置換候補についてメソッド置換スコアを決定してもよい。
【００２３】
テキスト類似度スコアは、文字の列（「文字列」）に含まれ得るテキスト間の類似度を表す適切ないかなる方法あるいは技術を用いて決定されてもよい。例えば、幾つかの実施形態では、テキスト類似度スコアは最長共通部分列の決定に基づいていてもよい。特に、第１の文字列「str1」と第２の文字列「str2」との間のテキスト類似度スコア「TSS」は、以下の式（１）に基づき決定されてもよい。
(1)  TSS = (2 * |LCS(str1, str2)|)/(|str1| + |str2|)
【００２４】
上記の式では、「|LCS(str1, str2)|」は「str1」と「str2」との間の最長共通部分列の絶対値を表し、|str1| と |str2|は「str1」と「str2」の長さをそれぞれ表す。上記の式に関しては、スコアは「0」から「１」の範囲内であり、スコアが高いほど「str1」と「str2」との間の類似度が高いことを表す。幾つかの実施形態では、テキスト相違度スコア（「TDS」）を生成するために、以下の式（２）に従って「TSS」が「1」から引かれる。
(2) TDS = 1 - TSS
【００２５】
上記では、最長共通部分列に関するテキスト類似度スコアを説明したが、他の適切なテキスト類似度スコアを決定してもよい。例えば、文字列の間の統語的距離を決定する他の方法を幾つかの実施形態で使用してもよい。特に、幾つかの実施形態では、レーベンシュタイン距離、ダムラウレーベンシュタイン距離、ハミング距離、ジャロウィンクラー距離、または最頻文字「k」の類似度計算技術を使用してもよい。これらの実施形態または他の実施形態では、文字列あるいは単語列の間の意味的類似度を決定するための他の適切な技術を使用してもよい。
【００２６】
修復モジュール１０６は、テキスト類似度スコアに基づいて、修復候補を分類し又はその一部を取り除いてもよい。加えて、修復モジュール１０６は、分類し又は一部を取り除いた結果に基づいて、特定の修復候補を選択して適用してもよい。これらの実施形態または他の実施形態では、修復モジュール１０６は、特定の修復候補が選択されて適用された後、テストプログラムセット１１１に含まれている一つ以上のテストを実行してもよい。合格テスト実行に応じて、修復モジュール１０６は、修正されたテスト対象コード１０８を出力してもよく、修正されたテスト対象コード１０８は適用された特定の修復候補を含んでもよい。
【００２７】
本開示の範囲を逸脱しなければ、図１に対して修正、追加または省略をしてもよい。例えば、環境１００は、本開示に示して説明した要素の数よりも多いまたは少ない要素を含んでもよい。加えて、幾つかの実施形態では、一つ以上のルーチン、一つ以上の命令、または修復モジュール１０６、テストプログラムセット１１１及び修復テンプレート１１２のコードの少なくとも一部は同じものとして扱われるように統合されてもよく、あるいは、修復モジュール１０６、テストプログラムセット１１１及び修復テンプレート１１２のうち二つ以上の一部分として扱われるような共通部分を有してもよい。
【００２８】
図２は、本開示の少なくとも一つの実施形態に係る計算システム２０２のブロック図の例である。計算システム２０２は、修復モジュール（例えば、修復モジュール１０６）に関する一つ以上の処理を実行し又は制御してもよい。計算システム２０２は、プロセッサ２５０、メモリ２５２、及びデータ格納部２５４を含んでもよい。プロセッサ２５０、メモリ２５２、及びデータ格納部２５４は通信可能に接続されてもよい。
【００２９】
一般的には、プロセッサ２５０は、適切ないかなる専用コンピュータ、汎用コンピュータ、計算エンティティ、様々なコンピュータハードウエア又はソフトウエアモジュールを含む処理装置等を含んでもよく、コンピュータが読み取り可能で適用可能ないかなる記憶媒体に記憶された命令を実行してもよい。例えば、プロセッサ２５０は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（DSP）、特定用途向け集積回路（ASIC）、フィールドプログラマブルゲートアレイ（FPGA）、プログラムの命令を解釈及び／あるいは実行するように及び／あるいはデータを処理するように構成されているデジタル又はアナログ回路等を含んでもよい。プロセッサ２５０は、図２に一つのプロセッサとして示されているが、プロセッサ２５０は本開示に記載されている任意の数の処理を個別及び／あるいは一括で実行するかあるいは制御するためにいかなる数のプロセッサを含んでもよい。加えて、一つ以上のプロセッサは、一つ以上の異なる電子装置（例えば、異なるサーバ等）に存在してよい。
【００３０】
幾つかの実施形態では、プロセッサ２５０は、メモリ２５２、データ格納部２５４、またはメモリ２５２及びデータ格納部２５４に記憶したプログラムの命令及び／又はプロセスデータを解釈及び／又は実行してもよい。幾つかの実施形態では、プロセッサ２５０は、データ格納部２５４からプログラムの命令をフェッチして、そのプログラムの命令をメモリ２５２にロードしてもよい。プログラムの命令がメモリ２５２にロードされた後、プロセッサ２５０は、そのプログラムの命令を実行してもよい。
【００３１】
例えば、幾つかの実施形態では、修復モジュールは、プログラムの命令として、データ格納部２５４に含まれてもよい。プロセッサ２５０は、データ格納部２５４から修復モジュールのプログラムの命令をフェッチして、修復モジュールのプログラムの命令をメモリ２５２にロードしてもよい。修復モジュールのプログラムの命令がメモリ２５２にロードされた後、プロセッサ２５０は、計算システム２０２が命令に従って修復モジュールに関する処理を実行するように、そのプログラムの命令を実行してもよい。
【００３２】
メモリ２５２及びデータ格納部２５４は、コンピュータが実行可能な命令やデータ構造を記憶して運ぶためあるいは持つための、コンピュータが読み取り可能な記憶媒体を含んでもよい。このようなコンピュータが読み取り可能な記憶媒体は、プロセッサ２５０のような専用コンピュータまたは汎用コンピュータがアクセス出来るいかなる利用可能な媒体を含んでもよい。制限としてではなく、例として、このようなコンピュータが読み取り可能な記憶媒体は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read-Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）、ＣＤ（Compact Disc）−ＲＯＭまたは他の光ディスク記憶媒体、磁気ディスク記憶媒体または他の磁気記憶装置、フラッシュメモリ装置（例えば、ソリッドステートメモリ装置）、または特定のプログラムコードをコンピュータが実行可能な命令やデータ構造として運ぶあるいは記憶するために使用され且つ専用コンピュータまたは汎用コンピュータがアクセス出来る利用可能ないかなる媒体を含む、有形のまたは一時的でないコンピュータが読み取り可能な記憶媒体であってもよい。上記の媒体の組み合わせも、コンピュータが読み取り可能な記憶媒体の範囲に含まれてもよい。コンピュータが実行可能な命令は、例えば、プロセッサ２５０に或る処理あるいは処理群を行わせる命令やデータを含んでもよい。
【００３３】
本開示の範囲を逸脱しなければ、計算システム２０２に対して修正、追加または省略をしてもよい。例えば、幾つかの実施形態では、計算システム２０２は、明確に示されていないまたは記載されていない他のいかなる数の構成要素を含んでもよい。
【００３４】
図３は、本開示に記載された少なくとも一つの実施形態に係る、ソフトウエアプログラムを修復する方法３００の一例のフローチャートである。方法３００は、テスト対象コードに対して、適切ないかなるシステム、装置、デバイス等により行われてもよい。例えば、図１の修復モジュール１０６または図２の計算システム２０２（修復モジュールによる制御に従う）は、テスト対象コード１０４に対して方法３００に関する一つ以上の処理を行ってもよい。さらに、別々のブロックとして示されているが、方法３００の一つ以上のブロックに関するステップと処理とを、その実装によっては、さらに別のブロックに分けたり、もっと少ない数のブロックに統合したり、取り除いてもよい。
【００３５】
方法３００は、テスト対象コードにある不具合が位置し得るブロック３０２で始まってもよい。不具合位置特定は、テスト対象コードに対して、適切ないかなる技術により行われてもよい。幾つかの実施形態では、不具合位置特定により、不具合の位置又はその位置における一つ以上の潜在的な不具合を特定してもよい。不具合位置特定は、テスト対象コードに対して、一つ以上のテストプログラムセットを適用することにより行われてもよい。
【００３６】
ブロック３０４では、テキスト類似度スコアを、不具合の位置における一つ以上の潜在的な不具合に対する一つ以上の修復候補について決定してもよい。テキスト類似度スコアの決定については、図４の方法４００を用いてさらに詳しく説明する。
【００３７】
ブロック３０６では、ブロック３０２で特定した不具合位置における不具合に対する修復候補が分類されたり、一部が取り除かれたりしてもよい。修復候補は、ブロック３０４において決定したテキスト類似度スコアに基づいて、分類されたり、一部が取り除かれたりしてもよい。例えば、幾つかの実施形態では、修復候補を、テキスト類似度スコアで表された修復効果の順にリストに並べてもよい。これらの実施形態または他の実施形態では、比較的低い修復効果を表すテキスト類似度スコアを有する修復候補を、対応する不具合の修復候補リストから削除してもよい。追加的にまたは代替的に、特定の修復候補をリストから削除することが、特定の閾値を超えないテキスト類似度スコアを有する修復候補に基づいて行われてもよい。幾つかの実施形態では、その特定の閾値を経験的に決めてもよい。例えば、実証的研究をしてもよく、研究の結果は、テキスト類似度が修復決定の基準であることを表してもよい。また、その研究は、テキスト類似度の「程度」が修復の有効性についての有意義な指標であることを表してもよい。従って、特定の閾値を、テキスト類似度の「程度」に基づき設定してもよい。これらの実施形態または他の実施形態では、特定の閾値は、可能性を有する候補のプールを評価するために必要な計算資源の制限に基づいてもよい。例えば、特定の閾値は、各パラメータ、メソッド名、またはレシーバオブジェクト置換などの修復候補のトップ５あるいはトップ１０だけを選択することに基づいてもよい。
【００３８】
ブロック３０８においては、修復候補を選択して、適用してもよい。幾つかの実施形態では、テキスト類似度スコアにより示された潜在的有効性が最も高い修復候補を選択して、適用してもよい。これらの実施形態または他の実施形態では、幾つかの実施形態で修復候補を分類した結果に従って修復候補を選択してもよい。例えば、幾つかの実施形態では、修復候補のリストにおける修復候補をそれぞれのテキスト類似度スコアに基づいて並べてもよく、例えば、修復候補をテキスト類似度スコアが示す潜在的有効性が最も高いものから潜在的有効性が最も低いものまでの順に並べてもよい。これらの実施形態または他の実施形態では、ブロック３０８において、リストのトップの修復候補を選択して、適用してもよい。
【００３９】
ブロック３１０では、選択された修復候補をテスト対象コードに使用している状態において、テストプログラムセットを実行してもよい。ブロック３１２では、修復が行われた後、テストプログラムセットの全テストが合格できたかを判断してもよい。幾つかの実施形態では、以前の不合格テスト実行が修復により合格テスト実行になったかを判断してもよい。例えば、修復でなされた修正により、不具合がもはや不具合とみなされないようなものになったかどうかを判断してもよい。これらの実施形態または他の実施形態では、修正が今までになかった他の不具合を引き起こしたかどうかを判断するためのテストを行ってもよい。
【００４０】
テストが合格であったと判断したことに応じて、方法３００は、ブロック３１２からブロック３１４へ進んでもよい。テストが不合格であったと判断したことに応じて、方法３００は、ブロック３１２からブロック３０８へ戻って、そして別の修復候補を選択してもよい。
【００４１】
ブロック３１４では、修正されたテスト対象コードを出力してもよい。修正されたテスト対象コードは、テストプログラムセットのテストを合格した修正を含んでもよく、修正されたテスト対象コードは、ブロック３０２で受信したテスト対象コードの修復版を含んでもよい。
【００４２】
このように、方法３００によれば、ソフトウエアプログラムのテスト及び修復の効果を改善することが可能である。例えば、修復の効果と、対応する修復候補の優先順位付けとを示すテキスト類似度スコアとを決定することで、行われる処理の量を減らすことができるようになる。
【００４３】
本開示の範囲を逸脱しなければ、方法３００に修正、追加または省略をしてもよい。例えば、方法３００の処理を別の順序で実行してもよい。追加的にまたは代替的に、二つ以上の処理を同時に行ってもよい。さらに、概説された処理および動作は単なる例として与えられており、記載された実施形態の本質を損なわなければ、幾つかの処理および動作がオプションとして使用されたり、処理および動作の数を減らすために組み合わされたり、または、処理および動作の数を増やすために拡張させられてもよい。
【００４４】
加えて、幾つかの実施形態では、方法３００を反復的に行い、一つの不具合又は一つの不具合位置を一度に分析してもよい。追加的にまたは代替的に、ひとつ以上のブロックに関するひとつ以上の処理を多数の不具合や多数の不具合位置に対して一度に行ってもよい。
【００４５】
図４は、本開示に記載されている少なくとも一つの実施形態に係る、ソフトウエアプログラム修復処理の方法４００の一例の処理フローチャートである。方法４００は、テスト対象コードに対して、適切ないかなるシステム、装置、デバイス等により行われてもよい。例えば、図１の修復モジュール１０６または図２の計算システム２０２（修復モジュールによる制御に従う）は、テスト対象コード１０４に対して方法４００に関する一つ以上の処理を行ってもよい。加えて、幾つかの実施形態では、方法４００の一つ以上の処理を幾つかの実施形態における方法３００のブロック３０４、３０６、３０８、３１０、３１２及び３１４に対して行ってもよい。特に、下記のブロック４０２、４０４、４０６、４０８、４１０、４１２、４１４、４１６、４１８及び４２０に関する処理を、方法３００のブロック３０４に対して行ってもよい。加えて、上記のブロック３０６、３０８、３１０、３１２及び３１４に関する処理を下記のブロック４２２に対して行ってもよい。別々のブロックとして示してあるが、方法４００の一つ以上のブロックに関するステップと処理とを、その特定の実行に応じて、さらに追加のブロックに分けたり、より少ない数のブロックに組み合わせたり、取り除いたりしてもよい。
【００４６】
方法４００はブロック４０２において開始し、ブロック４０２において、特定の不具合位置（例えば、図３のブロック３０２において特定した不具合位置）における特定の不具合についての修復候補を特定してもよい。上記のように、幾つかの実施形態では、特定の不具合は特定のメソッドのメソッド呼び出しを含んでもよく、不具合はそのメソッド呼び出しを含んでもよい。そして、修復候補は、特定のメソッドのメソッド呼び出しに関する一つ以上のパラメータ置換候補、一つ以上のレシーバ置換候補、または一つ以上のメソッド置換候補を含んでもよい。
【００４７】
幾つかの実施形態では、メソッド呼び出しに含まれているパラメータのそれぞれについて、一つ以上のパラメータ置換候補を特定してもよい。特に、各パラメータについて変数の種類を特定してもよく、同じ種類の変数を有するテスト対象コードにある他の変数のそれぞれを、対応するパラメータについてのパラメータ置換候補として特定してもよい。幾つかの実施形態では、分析に利用可能な変数（例えば、プログラムの実行中に不具合位置と疑われる或る範囲に含まれている変数）であって且つ特定のパラメータと同じ種類である全ての変数を、その特定のパラメータについてのパラメータ置換候補として特定してもよい。
【００４８】
追加的にまたは代替的に、一つ以上のメソッド置換候補をテスト対象コードの他のメソッドから特定してもよい。特に、特定のメソッドと同じシグネチャまたは実質的に同じシグネチャを持つテスト対象コードにおける一つ以上のメソッドのそれぞれを、メソッド置換候補として特定してもよい。幾つかの実施形態では、分析に利用可能な変数であって且つ特定のメソッドと同じシグネチャを持つ全てのメソッドを、メソッド置換候補として特定してもよい。本開示では、同じ数、順番及び種類のパラメータを持つメソッドを、同じ又は実質的に同じシグネチャを持つメソッドであるとしてもよい。
【００４９】
これらの実施形態または他の実施形態では、メソッド呼び出しはレシーバオブジェクトを含んでもよく、一つ以上のレシーバ置換候補を、そのレシーバオブジェクトについて特定してもよい。特に、テスト対象コードにある一つ以上のレシーバオブジェクトのうち、メソッド呼び出しのレシーバオブジェクトと同じ種類のレシーバオブジェクトのそれぞれをレシーバ置換候補として特定してもよい。幾つかの実施形態では、分析に利用可能なレシーバオブジェクトであって且つメソッド呼び出しのレシーバオブジェクトと同じ種類である全てのレシーバオブジェクトを、レシーバ置換候補として特定してもよい。
【００５０】
ブロック４０４では、ブロック４０２で特定された修復候補から修復候補を選択してもよい。ブロック４０６では、選択された修復候補がパラメータ置換候補であるかを判断してもよい。特に、幾つかの実施形態では、修復候補が、あるパラメータを置換するために使用できる引数であるかどうかを判断してもよく、もしそうであれば、その修復候補がパラメータ置換候補であると判断してもよい。修復候補がパラメータ置換候補である（例えば、引数である）と判断することに応じて、方法４００はブロック４０６からブロック４０８に進んでもよい。修復候補がパラメータ置換候補ではない（例えば、引数ではない）と判断することに応じて、方法４００はブロック４０６からブロック４１６に進んでもよい。
【００５１】
ブロック４０８では、パラメータ置換候補について位置スコアを決定してもよい。特に、パラメータ置換候補は、メソッド呼び出しにおける特定のパラメータ位置に対応してもよい。位置スコアは、メソッド呼び出しの特定のパラメータ位置における特定のパラメータを置換する場合の有効性を表してもよい。例えば、幾つかの場合においては、特定のメソッドの他の呼び出しにおける特定のパラメータ位置での他のパラメータの文字列に対する、特定のパラメータの文字列の相違度は、その特定のパラメータを置き換えることに関する修復有効性に正比例してもよい。したがって、幾つかの実施形態では、位置スコアが、特定のパラメータの文字列と、特定のメソッドの他の呼び出しの特定のパラメータ位置における他のパラメータの文字列との間の相違度を反映するように、位置スコアを決定してもよい。
【００５２】
幾つかの実施形態では、位置スコアを、特定のパラメータと、特定のメソッドの他のメソッド呼び出しの特定のパラメータ位置での他のパラメータとの間におけるパラメータテキスト類似度スコアに基づいて決定してもよい。幾つかの実施形態では、テスト対象コードに現れる特定のメソッドの全メソッド呼び出しを特定してもよい。加えて、幾つかの実施形態では、特定のパラメータと、特定のパラメータ位置にある、他のメソッド呼び出しの各パラメータとの間について、パラメータテキスト類似度スコアを決定してもよい。これらの実施形態または他の実施形態では、これらのテキスト類似度スコアを使用して、位置スコアを決定してもよい。例えば、特定のパラメータ位置と、他のメソッド呼び出しとに対応する別のパラメータテキスト類似度スコアの平均値を求めることで、位置スコアを決定してもよい。
【００５３】
幾つかの実施形態では、位置スコアの決定に使用されるパラメータテキスト類似度スコアは、テキスト相違度スコアを含んでもよい。そして、そのテキスト相違度スコアを、特定のパラメータと特定のパラメータ位置にある他の対応するパラメータとの間の最長共通部分列に基づいて、上記の式（２）を用いて決定してもよい。そのような場合には、より高い位置スコアが、特定のパラメータ位置において特定のパラメータを置換する効果を高める可能性があることを示してもよい。
【００５４】
ブロック４１０では、パラメータ置換候補についてパラメータ置換スコアを決定してもよい。パラメータ置換スコアは、メソッド呼び出しにある特定のパラメータ位置における特定のパラメータをパラメータ置換候補に置換することの有効性を示してもよい。例えば、幾つかの場合では、パラメータ置換候補の文字列に対する、特定のパラメータの文字列の類似度は、特定のパラメータをパラメータ置換候補で置換することの修復有効性に正比例してもよい。したがって、幾つかの実施形態では、パラメータ置換スコアを、特定のパラメータの文字列と、パラメータ置換候補の文字列との間の類似度を反映するように決定してもよい。
【００５５】
幾つかの実施形態では、パラメータ置換スコアを、特定のパラメータとパラメータ置換候補との間のパラメータテキスト類似度スコアとして決定してもよい。幾つかの実施形態では、パラメータテキスト類似度スコアを、特定のパラメータとパラメータ置換候補との間の最長共通部分列に基づいて、上記の式（１）を用いて決定してもよい。そのような場合には、より高いパラメータ置換スコアが、特定のパラメータをパラメータ置換候補に置換する効果を高める可能性があることを示してもよい。
【００５６】
ブロック４１２では、パラメータ置換候補に対して合成スコアを決定してもよい。幾つかの実施形態では、合成スコアは、ブロック４０８で決定した位置スコアと、パラメータ置換候補についてブロック４１０で決定したパラメータ置換スコアとに基づいてもよい。例えば、幾つかの実施形態では、位置スコアを上記の式（２）を用いて決定してもよく、パラメータ置換スコアを上記の式（１）を用いて決定してもよい。これらの実施形態のうち幾つかの実施形態においては、合成スコアは位置スコアとパラメータ置換スコアとの積を含んでもよい。追加的にまたは代替的に、位置スコアとパラメータ置換スコアとが、位置スコアとパラメータ置換スコアの平均または加重平均により合成されてもよい。
【００５７】
ブロック４１２に続いて、方法４００は、以下で詳細に説明するブロック４１４に進んでもよい。ブロック４０６の説明に戻り、選択された修復候補がパラメータ置換候補ではない場合、方法４００は上述のようにブロック４０６からブロック４１６まで進んでもよい。ブロック４１６では、選択された修復候補がメソッド置換候補であるかどうかを判断してもよい。選択された修復候補がメソッド置換候補である場合、方法４００は、ブロック４１６からブロック４１８まで進んでもよい。選択された修復候補がメソッド置換候補ではない場合、方法４００は、ブロック４１６からブロック４２０まで進んでもよい。
【００５８】
ブロック４１８では、メソッド置換候補のためにメソッド置換スコアを決定してもよい。メソッド置換スコアは、特定のメソッドをメソッド置換候補に置き換えることの有効性を示してもよい。例えば、幾つかの場合においては、置換候補のメソッド名の文字列に対する、特定のメソッド名の文字列の類似度は、特定のメソッドをメソッド置換候補に置き換えることについての修復有効性と正比例してもよい。したがって、幾つかの実施形態では、メソッド置換スコアを、特定のメソッド名の文字列と、置換候補のメソッド名の文字列との類似度を反映するように決定してもよい。
【００５９】
幾つかの実施形態では、メソッド置換スコアを、特定のメソッド名とメソッド置換候補名との間のメソッドテキスト類似度スコアとして決定してもよい。幾つかの実施形態では、メソッドテキスト類似度スコアを、特定のメソッド名とメソッド置換候補名との間の最長共通部分列に基づいて、上記の式（１）により決定してもよい。そのような場合には、より高いメソッド置換スコアが、特定のメソッドをメソッド置換候補に置換する効果を高める可能性があることを示してもよい。
【００６０】
ブロック４１８に続いて、方法４００は、下記でさらに詳細に説明するブロック４１４に進んでもよい。ブロック４１６の説明に戻って、選択された修復候補がメソッド置換候補ではない場合、選択された修復候補がレシーバ置換候補であると判断されてもよい。そして、上記のように、方法４００は、ブロック４１６からブロック４２０へ進んでもよい。
【００６１】
ブロック４２０では、レシーバ置換候補について、レシーバ置換スコアを決定してもよい。レシーバ置換スコアは、特定のメソッドの特定のレシーバオブジェクトを、レシーバ置換候補に置換することの有効性を示してもよい。例えば、幾つかの場合においては、レシーバ置換候補名の文字列に対する、特定のレシーバオブジェクト名の文字列の類似度は、特定のレシーバオブジェクトをレシーバ置換候補に置換することの修復有効性に正比例してもよい。したがって、幾つかの実施形態においては、レシーバ置換スコアを、特定のレシーバオブジェクト名の文字列と、レシーバ置換候補名の文字列との類似度を反映するように決定してもよい。
【００６２】
幾つかの実施形態においては、レシーバ置換スコアを、特定のレシーバオブジェクト名とレシーバ置換候補名との間のレシーバテキスト類似度スコアとして決定してもよい。幾つかの実施形態においては、レシーバテキスト類似度スコアを、特定のレシーバオブジェクトとレシーバ置換候補との間の最長共通部分列に基づいて、上記の式（１）により決定してもよい。そのような場合においては、より高いレシーバ置換スコアが、特定のレシーバオブジェクトをレシーバ置換候補で置換する効果を高める可能性があることを示してもよい。
【００６３】
方法４００は、ブロック４２０の後、ブロック４１４に進んでもよい。ブロック４１４では、ブロック４０２で特定された修復候補のうち、まだスコアが決定されていない修復候補があるかどうかを判断してもよい。一つ以上のスコアが決定されるべき修復候補がある場合、方法４００はブロック４０４に戻り、別の修復候補が選択されてもよい。全ての修復候補がスコア付けされた場合、方法４００は、ブロック４１４からブロック４２２へ進んでもよい。
【００６４】
ブロック４２２では、テスト対象コードに対する修復処理を、スコア付けされた修復候補を使用して継続してもよい。例えば、幾つかの実施形態においては、ブロック３０６、３０８、３１０、３１２及び３１４について先に述べた処理をブロック４２２で行ってもよい。
【００６５】
このように、方法４００を、テスト対象コードにある特定の不具合に対して一つ以上の修復候補の修復有効性を決めるために使用してもよい。また、決定された修復有効性を用いて、どの修復候補を選択して使用するか優先付けしてもよい。これにより、テスト対象コードに対する修復効率を改善してもよい。
【００６６】
本開示の範囲を逸脱しなければ、方法４００に修正、追加または省略をしてもよい。例えば、方法４００のそれぞれの処理を異なる順番で行ってもよい。追加的にまたは代替的に、二つ以上の処理を同時に行ってもよい。さらに、概説された処理および動作は単なる例として与えられており、記載された実施形態の本質を損なわなければ、幾つかの処理および動作がオプションとして使用されたり、処理および動作の数を減らすために組み合わされたり、または、処理および動作の数を増やすために拡張させられてもよい。
【００６７】
加えて、幾つかの実施形態では、方法４００を反復的に行い、一つの不具合または一つの修復候補を一度に分析してもよい。追加的にまたは代替的に、ひとつ以上のブロックに関するひとつ以上の処理を、多数の不具合や多数の修復候補に対して一度に行ってもよい。また、方法４００は、特に、テスト対象コードのメソッド呼び出しに対応するテキスト類似度スコアを決定することについて説明されているが、同様な原則で、メソッド呼び出しを含んでいない他の不具合についてテキスト類似度スコアを決定してもよい。例えば、上記のようなテキスト類似度は、不具合のある数式又は論理式を、その式の中の部分式又は個別変数をプログラムの他部分に（しばしば）ある適切な変数に置換することで修復するために使用されてもよい。
【００６８】
上で述べたように、本開示に記載されている実施形態は、専用コンピュータ、あるいは、以下にさらに詳細に説明するコンピュータハードウエアやソフトウエアモジュールを含む汎用コンピュータ（例えば、図２のプロセッサ２５０）を含んでもよい。また、上で述べたように、本開示に記載されている実施形態は、コンピュータが実行可能な命令あるいはデータ構造を運ぶためのあるいは記憶するための媒体であってコンピュータが読み取り可能な媒体（例えば、図２のメモリ２５２）を使用して実装されてもよい。
【００６９】
本開示で使われている「モジュール」あるいは「コンポーネント」という用語は、モジュールあるいはコンポーネントを使用するために構成された特定のハードウエアの実装、および／または、計算システムの汎用ハードウエア（例えば、コンピュータが読み取り可能な媒体、処理装置等）に記憶され且つ／または実行されるソフトウエアオブジェクトあるいはソフトウエアルーチンを意味する。幾つかの実施形態においては、本開示で説明されているコンポーネント、モジュール、エンジン、サービス等とは別で、計算システムにより実行されるオブジェクトあるいは工程として実装されてもよい。一般的には、本開示で説明されているシステム及びメソッドの一部はソフトウエアで実装される（汎用なハードウエアに記憶され且つ／または実行される）と説明されるが、特定なハードウエアでの実装、あるいは、ソフトウエアと特定のハードウエアでの実装との組み合わせも可能であり且つ考えられる。この仕様では、「コンピューティングエンティティ」とは、本開示において既に定義したどの計算システムであってもよく、または、計算システムで実行されるモジュールやモジュールの組み合わせであってもよい。
【００７０】
本開示で使われている用語、特に添付の請求項（例えば、請求項の本文）で使われている用語は、全般に「広義の（ＯＰＥＮ）」用語として用いられている（例えば、「含んでいる」という用語は「含んでいるがそれに限定されない」として解釈され、「有る」という用語は「少なくとも有する」として解釈され、「含む」という用語は「含むがそれに限定されない」等として解釈されるべきである）。
【００７１】
さらに、導入された請求項の記述に特定の数を意図している場合、そのような意図は請求項の中で明示的に記述され、そのような記述がなければ、そのような意図がない。例えば、理解の手助けとして、以下に示す添付の請求項は、導入された請求項の記述に「少なくとも一つ」や「一つ以上」などの導入節を使用した部分を含んでもよい。
【００７２】
さらに、導入された請求項の記述に特定の数が明示的に記載されている場合、当業者は、そのような記述は少なくともその数であると解釈されるべきと認識する（例えば、他の修節語句がなければ、「二つの記述」とだけ記載されている場合、少なくても二つの記述又は二つ以上の記述と解釈される）。さらに、「少なくともＡ、ＢおよびＣのいずれか」や「Ａ、ＢおよびＣのうち一つ以上」のような慣用節を使う場合、一般的に、そのような構成はＡだけ、Ｂだけ、Ｃだけ、ＡおよびＢ、ＡおよびＣ、ＢおよびＣ、または、Ａ、ＢおよびＣ、などを含むものとして使用されている。
【００７３】
また、二つ以上の代替用語を持つ離接的な語や節は、明細書、請求項又は図面のいずれにあったとしても、それらのうち１つの用語、どちらかの用語、または両方の用語を含む可能性があると理解されるべきである。例えば、「Ａ及びＢ」という節は、「Ａ」、「Ｂ」または「Ａ及びＢ」を含む可能性があると理解されるべきである。
【００７４】
本開示に記載された例及び条件付き用語は、技術の発展のために発明者により提供された概念および本開示の理解の手助けをするという教育的目的で用いられており、詳細に説明した例及び条件を限定するものではないと解釈されるべきである。本開示の実施形態は、詳細に説明されたが、本開示の趣旨と範囲から逸脱することがなければ、様々な変更、入れ換え、改変などをしてもよい。
【００７５】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７６】
（付記１）
プロセッサが、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置での不具合を特定し、
前記不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行する方法。
【００７７】
（付記２）
前記プロセッサが、
最長共通部分列の決定に基づき前記テキスト類似度スコアを決定する
処理をさらに実行する付記１記載の方法。
【００７８】
（付記３）
前記不具合は、複数のパラメータを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記複数のパラメータの各々について１以上のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータの各々のパラメータ位置について位置スコアを決定する処理を含む、
付記１記載の方法。
【００７９】
（付記４）
前記メソッド呼び出しは第１のメソッド呼び出しであり、
前記位置スコアを、特定のパラメータ位置について決定する処理は、
前記第１のメソッド呼び出しにより呼び出されるメソッドの第２のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
前記第１のメソッド呼び出しの前記特定のパラメータ位置における第１のパラメータと、前記第２のメソッド呼び出しの前記特定のパラメータ位置における第２のパラメータとの間のパラメータテキスト類似度スコアを決定する処理を含む、
付記３記載の方法。
【００８０】
（付記５）
前記位置スコアを、特定のパラメータ位置について決定する処理は、
前記メソッド呼び出しにより呼び出されるメソッドの複数の他のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
前記メソッド呼び出しの前記特定のパラメータ位置におけるパラメータと、特定された前記複数の他のメソッド呼び出しの各々の前記特定のパラメータ位置におけるパラメータとの間で、パラメータテキスト類似度スコアを決定することで、複数のパラメータテキスト類似度スコアを取得し、
前記複数のパラメータテキスト類似度スコアの平均を求める処理を含む、
付記３記載の方法。
【００８１】
（付記６）
前記不具合は、パラメータを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記パラメータについての複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々についてパラメータ置換スコアを決定する処理を含む、
付記１記載の方法。
【００８２】
（付記７）
前記複数のパラメータ置換候補は、前記パラメータと同じ種類のパラメータを含む各パラメータ置換候補に基づくパラメータ置換候補として選択される、
付記６記載の方法。
【００８３】
（付記８）
前記不具合はメソッドを呼び出すメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッドと同一のシグネチャを有するソフトウエアプログラムにおける複数の他のメソッドを含み、
前記複数のテキスト類似度スコアを決定する処理は、前記メソッドの名前と前記複数の他のメソッドの名前の各々との間でメソッドテキスト類似度スコアを決定することで、複数のメソッド置換スコアを決定する処理を含む、
付記１記載の方法。
【００８４】
（付記９）
前記複数の修復候補は、第１の複数の修復候補であり、
前記プロセッサが、
前記テキスト類似度スコアに基づき前記第１の複数の修復候補の一部を取り除くことで、第２の複数の修復候補を取得し、
分類に基づき、前記第２の複数の修復候補から前記特定の修復候補を選択する、
処理をさらに実行する付記１記載の方法。
【００８５】
（付記１０）
前記不具合は、複数のパラメータを含むメソッド呼び出しを含み、
前記複数のパラメータの各々は、前記メソッド呼び出しにおけるパラメータ位置に有り、
前記複数の修復候補は、前記複数のパラメータの各々に対する複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々について置換スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、各パラメータ位置について位置スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数の修復候補の各々について、当該修復候補に関連付けられた、対応する置換スコアと対応する位置スコアとに基づく合成スコアを決定する処理を含む、
付記１記載の方法。
【００８６】
（付記１１）
前記不具合は、レシーバオブジェクトを含むメソッド呼び出しを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記レシーバオブジェクトに対する複数のレシーバ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、レシーバ置換スコアを前記複数のレシーバ置換候補の各々について決定する処理を含む、
付記１記載の方法。
【００８７】
（付記１２）
前記複数のレシーバ置換候補は、前記レシーバオブジェクトと同じ種類のレシーバオブジェクトを含む各レシーバ置換候補に基づくレシーバ置換候補として選択される、
付記１１記載の方法。
【００８８】
（付記１３）
前記レシーバ置換スコアを、前記複数のレシーバ置換候補のうち特定のレシーバ置換候補について決定する処理は、前記レシーバオブジェクトの名前と前記特定のレシーバ置換候補の名前との間の最長共通部分列に基づきレシーバ置換スコアを決定する処理を含む、
付記１１記載の方法。
【００８９】
（付記１４）
プロセッサに、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、メソッドを呼び出すメソッド呼び出しを含む不具合を特定し、
前記メソッド呼び出しを含む前記不具合に応じて、前記不具合に対する複数の修復候補の各々に対してテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行させるプログラム。
【００９０】
（付記１５）
前記複数の修復候補は、前記メソッドと同一のシグネチャを有するソフトウエアプログラムにおける複数の他のメソッドを含み、
前記複数のテキスト類似度スコアを決定する処理は、前記メソッドと前記複数の他のメソッドの各々との間でメソッドテキスト類似度スコアを決定することで、複数のメソッド置換スコアを決定する処理を含む、
付記１４記載のプログラム。
【００９１】
（付記１６）
前記複数の修復候補は、第１の複数の修復候補であり、
前記プロセッサに、
前記テキスト類似度スコアに基づき前記第１の複数の修復候補の一部を取り除くことで、第２の複数の修復候補を取得し、
分類に基づき前記第２の複数の修復候補から前記特定の修復候補を選択する、
付記１４記載のプログラム。
【００９２】
（付記１７）
前記メソッド呼び出しは、複数のパラメータを含み、
前記複数のパラメータの各々は、前記メソッド呼び出しにおけるパラメータ位置に有り、
前記複数の修復候補は、前記複数のパラメータの各々に対する複数のパラメータ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数のパラメータ置換候補の各々について置換スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、各パラメータ位置について位置スコアを決定する処理を含み、
前記複数のテキスト類似度スコアを決定する処理は、前記複数の修復候補の各々について、当該修復候補に関連付けられた、対応する置換スコアと対応する位置スコアとに基づく合成スコアを決定する処理を含む、
付記１４記載のプログラム。
【００９３】
（付記１８）
前記メソッド呼び出しは、レシーバオブジェクトを含み、
前記複数の修復候補は、前記メソッド呼び出しに含まれる前記レシーバオブジェクトに対する複数のレシーバ置換候補を含み、
前記複数のテキスト類似度スコアを決定する処理は、レシーバ置換スコアを前記複数のレシーバ置換候補の各々について決定する処理を含む、
付記１４記載のプログラム。
【００９４】
（付記１９）
前記プロセッサに、
最長共通部分列の決定に基づき前記テキスト類似度スコアを決定する
処理をさらに実行させる付記１４記載のプログラム。
【００９５】
（付記２０）
プロセッサが、
テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、メソッドを呼び出し且つパラメータとレシーバオブジェクトとのうち少なくともいずれかを含むメソッド呼び出しを含む不具合を特定し、
前記不具合に対する複数の修復候補であって且つ前記パラメータに対する１以上のパラメータ置換候補、前記メソッドに対する１以上のメソッド置換候補および前記レシーバオブジェクトに対する１以上のレシーバ置換候補のうちの少なくともいずれかを含む前記複数の修復候補を、前記メソッド呼び出しを含む前記不具合に基づき特定し、
前記メソッド呼び出しを含む前記不具合に応じて、前記不具合に対する複数の修復候補の各々に対して、前記メソッド呼び出しを含む前記不具合に基づきテキスト類似度スコアを決定することで、複数のテキスト類似度スコアを決定し、
前記複数の修復候補を、前記テキスト類似度スコアに基づき分類し、
分類に基づき、前記複数の修復候補から特定の修復候補を選択し、
前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
処理を実行する方法。
【符号の説明】
【００９６】
１００    環境
１０４    テスト対象コード
１０６    修復モジュール
１０８    修正されたテスト対象コード
１１１    テストプログラムセット
１１２    修復テンプレート
２０２    計算システム
２５０    プロセッサ
２５２    メモリ
２５４    データ格納部
【図１】
2017151977.tif 000003
【図２】
2017151977.tif 000004
【図３】
2017151977.tif 000005
【図４】
2017151977.tif 000006