JP2022022115A - 自動ソフトウェアプログラム修復 - Google Patents

自動ソフトウェアプログラム修復 Download PDF

Info

Publication number
JP2022022115A
JP2022022115A JP2021112191A JP2021112191A JP2022022115A JP 2022022115 A JP2022022115 A JP 2022022115A JP 2021112191 A JP2021112191 A JP 2021112191A JP 2021112191 A JP2021112191 A JP 2021112191A JP 2022022115 A JP2022022115 A JP 2022022115A
Authority
JP
Japan
Prior art keywords
source code
clusters
valid
version
identifying
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021112191A
Other languages
English (en)
Inventor
浩章 吉田
Hiroaki Yoshida
アール プラサド・ムクル
R Prasad Mukul
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2022022115A publication Critical patent/JP2022022115A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】自動ソフトウェアプログラム修復のための方法等を提供する。【解決手段】1つ以上の実施形態に従って、動作は、第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することを含んでよい。動作はまた、ソースコード編集の複数のクラスタを識別することを含んでよい。各クラスタは、複数のソースコード編集のうちの1つ以上のソースコード編集を含む。動作はまた、第1ソースコードのコンパイルに基づいて、複数のクラスタの中から複数の有効なクラスタ及び1つ以上の無効なクラスタを識別することを含んでよい。更に、動作は、1つ以上の無効なクラスタを考慮すべき事項から外しながら、複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を第1エラーの第1修復として識別することを含んでよい。【選択図】図4

Description

本開示で議論されている実施形態は、自動ソフトウェアプログラム修復に関係がある。
ソフトウェアプログラムは、しばしば、その中にエラー(一般的に「バグ」と呼ばれている。)を有している。その場合に、ソフトウェアプログラムは、意図されたように動作しない可能性がある。しばしば、自動修復システムが、ソフトウェアプログラム内のエラーを識別し直そうとして使用される。
本開示で請求されている対象は、上述されたような環境でしか動作しない実施形態又は如何なる欠点も解消する実施形態に限定されない。むしろ、この背景は、本開示で説明されるいくつかの実施形態が実施される可能性がある技術分野の一例を示すためにのみ与えられている。
実施形態の態様に従って、動作は、第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することを含んでよい。バグのあるバージョンは、第1エラーを含み、第1エラーは、修復されたバージョンでは直されている。動作はまた、ソースコード編集の複数のクラスタを識別することを含んでよい。複数のクラスタの各クラスタは、複数のソースコード編集のうちの1つ以上のソースコード編集を含む。動作はまた、複数のクラスタの中の複数の有効なクラスタを、その複数の有効なクラスタの各有効なクラスタに関する第1ソースコードの成功したコンパイルに基づいて、識別することを含んでよい。更に、動作は、複数のクラスタの中の1つ以上の無効なクラスタを、その1つ以上の無効なクラスタの夫々に関する第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することを含んでよい。更に、動作は、1つ以上の無効なクラスタを考慮すべき事項から外しながら、複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を第1エラーの第1修復として識別することを含んでよい。
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって実現及び達成される。
上記の概要及び下記の詳細な説明は、例でありかつ説明であり、請求されている発明を限定するものではない。
添付の図面の使用を通じて、更なる特定及び詳細をもって、例となる実施形態について記載及び説明する。
ソフトウェアプログラムに対して行われた修復を識別することに関係がある環境の例を表す図である。 ソフトウェアプログラムを修復することに関係がある環境の例を表す図である。 例となるコンピュータシステムのブロック図を表す。 ソフトウェアプログラムに対して行われた修復を識別する方法の例のフローチャートである。 編集の有効な及び/又は無効なクラスタを識別する方法の例のフローチャートである。 編集の有効なクラスタから修復を識別する方法の例のフローチャートである。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。 ソフトウェアプログラムに対して行われた修復を識別することに関するソースコードの例を表す。
本開示で説明されるいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関係がある。ソフトウェアプログラムは、意図しないよう様態でソフトウェアプログラムを動作させる可能性があるエラー(一般的に「バグ」と呼ばれている。)をしばしば含む。更に、自動修復システム及び技術は、ソフトウェアプログラムを修復すべくエラーを検出し直すためにしばしば使用される。
更に、既存のソフトウェアプログラムのリポジトリは、対応するソフトウェアプログラム内のエラーを直すべく、対応するコードに対して行われた編集を識別するために使用されることがある。いくつかの事例では、既存のソフトウェアプログラムのリポジトリは、多数のソフトウェアプログラム(例えば、数千、数万、数十万、数百万などのソフトウェアプログラム)のソースコードを含むことがある。本開示では、そのようなリポジトリに記憶されており、他のソフトウェアプログラムを開発するのを助けるために使用され得る既存のソフトウェアプログラム及び対応するソースコードは、「ビッグコード」と呼ばれ得る。
ビッグコードリポジトリは、各々のソフトウェアプログラムのソースコードの異なるバージョン(又は時々「イタレーション」と呼ばれている。)を含んでよく、異なるバージョンは、ソースコードに対して行われた1つ以上の編集を通じて生成される。いくつかの事例で、ソースコードの異なるバージョンは、特定のエラーを含むソースコードのバグのあるバージョンを含むことがある。更に、異なるバージョンはまた、特定のエラーを修復されているソースコードの対応する修復されたバージョンを含むこともある。本開示では、ソースコードの「修復されたバージョン」との言及は、あるエラーが修復されていること意味するのであって、ソースコード内の全てのエラーが修復されていることを必ずしも意味するわけではない。修復されたバージョンは、バグのあるバージョンと比較して複数の編集を含む可能性があるが、全ての編集が、特定のエラーを修復すること、又は対応するソフトウェアプログラムの基礎機能に影響を及ぼすことに寄与しているわけではない。本開示では、エラーの修復に寄与していると識別された編集は、「一次編集」と呼ばれる。更に、エラーを修復することに寄与していないと識別され、対応するソースコードの基礎機能を変化させる可能性がない編集は、「二次編集」と呼ばれ得る。例えば、二次編集は、表面的な修正のために(例えば、信頼性を改善するために)行われた編集、又はデバッグ目的のために使用され得る編集を含む。
本開示の1つ以上の実施形態に従って、動作は、エラーの修復を識別するために実行されてよく、修復は、エラーを含むコードのバグのあるバージョンと、エラーを直したコードの対応する修復されたバージョンとの間で行われた編集を含む。修復の編集の識別によれば、修復に含まれている二次編集の数は減らされるか、最小限にされるか、削除され得る。二次編集の低減は、他のソースコードの開発及び試験にとって有用である可能性がある既存のソースコードから導出されたより良い修復例を提供するのを助け得る。
本開示の1つ以上の実施形態に従って、ソフトウェア開発の技術分野は、対応するソースコードに同じく含まれ得る二次編集と比較してソフトウェアプログラムを修復するために使用される一次編集を識別及び取り出すようコンピュータシステムを構成することによって、改善され得る。そのような構成は、コンピュータシステムが、ビッグコードから修復例をより良く識別し取り出すことを可能にし得る。
これら及び他の実施形態では、コンピュータシステムは、取り出された修復例を、他のソフトウェアプログラムを試験及び/又は開発することに対して使用するよう構成されてよい。例えば、コンピュータシステムは、取り出された修復例に関連したコードパターンをビッグコードにおいて識別するよう構成されてよい。これら及び他の実施形態では、識別されたコードパターンは、修復例の識別されたコードパターンが、試験中のコードに関連したコードパターンと同じか又は類似していることに応答して、試験中のコードに対して修復例の修復を選択又は実装するために(例えば、類似したコードパターンを有する修復を選択又は実装するために)使用されてよい。例えば、2017年11月24日付けで出願された米国特許出願第15/822106号及び2018年3月8日付けで出願された米国特許出願第15/915894号は、両方ともそれらの全文を参照により援用されており、他のソースコードにおいて修復を実装するための既存のソースコード内のコードパターンの使用について説明している。
本開示の実施形態について、添付の図面を参照して説明する。
図1は、本開示で説明されている少なくとも1つの実施形態に従って配置される、ソフトウェアプログラムのソースコードに対して行われた修復を識別することに関係がある、例となる環境100を表す図である。環境100は、ソースコード104に対して行われた修復108を識別するためにソフトウェアプログラムのソースコード104を解析するよう構成された解析モジュール106を含んでよい。
ソースコード104は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又はプロセッシングデバイスによる実行のための他のロジック若しくは命令などの電子データを含んでよい。いくつかの実施形態で、ソースコード104は、ソフトウェアプログラムの完全なインスタンスを含んでよい。追加的に、又は代替的に、ソースコード104は、ソフトウェアプログラムの一部を含んでもよい。ソースコード104は、ソフトウェアプログラムのために使用され得る如何なる適切なタイプのコンピュータ言語でも記述されてよい。
いくつかの実施形態で、ソースコード104は、ソフトウェアプログラムのコードの複数のバージョンを含んでよい。例えば、複数の編集は、更新、パッチ、プラットフォームマイグレーション、バグ修復、表面的な再配置、などとしてソースコード104に対して行われてよい。よって、複数の編集は、ソースコード104の2つ以上の異なるバージョンをもたらす可能性がある。これら又は他の実施形態で、ソースコード104は、ソフトウェアプログラムのコードのそのようなバージョンの2つ以上を含んでよく、異なるバージョン間には、イタレーション間で行われた編集により1つ以上の相違が存在する可能性がある。追加的に、又は代替的に、本開示におけるソースコードへの「編集」との言及は、コードの1行以上に行われ得る任意の数の修正を含んでよい。例えば、編集は、コードの1つの行での単一の要素名変更、要素追加、又は要素削除と同じくらい簡単なものから、コードの多数の行を導入又は削除するのと同じくらい複雑なものにまで及んでよい。いくつかの実施形態で、ソースコード104は、特定のエラーを含む可能性があるコードのバグのあるバージョンを含んでよい。更に、ソースコード104は、バグのあるバージョンの特定のエラーを直した1つ以上の一次編集を含むコードの対応する修復されたバージョンを含んでもよい。対応する修復されたバージョンはまた、バグのあるバージョンの特定のエラーを直すことに寄与しない1つ以上の二次編集を含んでもよい。修復108は、特定のエラーに関して行われた一次編集を含んでよく、かつ、コードの修復されたバージョンの二次編集の1つ以上を除いてもよい。
解析モジュール106は、コンピュータデバイスが、修復108を識別するためにソースコード104に対して1つ以上の動作を実行することを可能にするよう構成されたコード及びルーチンを含んでよい。追加的に、又は代替的に、解析モジュール106は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行するか又はその実行を制御するためのもの)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを用いて実装されてよい。いくつかの他の事例では、解析モジュール106は、ハードウェアとソフトウェアとの組み合わせを用いて実装されてもよい。本開示では、解析モジュール106によって実行されるものとして説明されている動作は、解析モジュール106が対応するシステムに実行することを指示し得る動作を含んでもよい。解析モジュール106は、以下の通りに、修復108に含まれる可能性がある二次編集を低減し、最小限にし、又は削除するために使用され得るソースコード104に対する一連の操作を実行するよう構成されてよい。
解析モジュール106は、ソースコード104の1つ以上のバグのあるバージョン及び1つ以上の対応する修復されたバージョンなどのソースコード104の複数のバージョンを含め、ソースコード104を取得するよう構成されてよい。いくつかの実施形態で、解析モジュール106は、ビッグコードデータベース102からソースコード104を取得するよう構成されてよい。ビッグコードデータベース102は、既存のソフトウェアプログラム及びそれらの各々のソースコードのリポジトリであってよい。これら又は他の実施形態では、ビッグコードデータベース102は、バグのあるバージョン及び対応する修復されたバージョンなどのソースコード104の異なるバージョンを含んでもよい。追加的に、又は代替的に、ビッグコードデータベース102は、解析のために利用可能にされてよく、このことは、他のソフトウェアプログラムの開発及びデバッグを容易にするのを助けることができる。
いくつかの実施形態で、解析モジュール106は、ソースコード104のバグのあるバージョンとソースコード104の対応する修復されたバージョンとの間で行われている編集を識別するよう構成されてよい。識別された編集は、バグのあるバージョンに含まれておりかつ修復されたバージョンでは直されている特定のエラーを直す1つ以上の一次編集を含んでよい。
いくつかの実施形態で、修復108を識別する部分として、解析モジュール106は、編集をクラスタに編成するよう構成されてよく、各クラスタは1つ以上の編集を含んでよい。これら又は他の実施形態では、クラスタの総数は、編集のあらゆる可能な、順序づけられていない組み合わせについて、異なるクラスタを含んでよい。例えば、編集は、第1編集“A”、第2編集“B”、及び第3編集“C”を含んでよい。クラスタは、従って、次の通り:{A}、{B}、{C}、{A,B}、{A,C}、{B,C}、及び{A,B,C}であってよい。
解析モジュール106は、編集のクラスタの1つ以上から修復108を識別するよう構成されてよい。追加的に、又は代替的に、解析モジュール106は、同じく特定のエラーを直す全体編集の数が最少であるクラスタ又はクラスタの組み合わせを修復108として識別するよう構成されてよい。解析モジュール106は、修復108を識別するために、夫々図3、図5及び図6に関連して以下で詳細に説明されている方法300、500及び/又は600の1つ以上の動作を実行するよう構成されてよい。
本開示の範囲から逸脱せずに、図1に対して、変更、追加、又は削除が行われてよい。例えば、環境100は、本開示で例示及び記載されているよりも多い又は少ない要素を含んでもよい。
図2は、本開示で説明される少なくとも1つの実施形態に従って配置される、ソフトウェアプログラムを修復することに関係がある、例となる環境200を表す図である。環境200は、試験中のコード204をエラーについて解析するよう構成された修復モジュール206を含んでよい。修復モジュール206はまた、修正された試験中のコード208を出力するよう構成されてよい。修正された試験中のコード208は、修復モジュール206によって実行された修復操作によって試験中のコード204に対して行われた1つ以上の修正を含んでよい。
試験中のコード204は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのソースコード、ライブラリ、アプリケーション、スクリプト、又はプロセッシングデバイスによる実行のための他のロジック若しくは命令などの電子データを含んでよい。いくつかの実施形態で、試験中のコード204は、ソフトウェアプログラムの完全なインスタンスを含んでよい。追加的に、又は代替的に、試験中のコード204は、ソフトウェアプログラムの一部を含んでもよい。試験中のコード204は、ソフトウェアプログラムのために使用され得る如何なる適切なタイプのコンピュータ言語でも記述されてよい。
修復モジュール206は、コンピュータデバイスが、修正された試験中のコード208を生成するために試験中のコード204の1つ以上の修正を実行することを可能にするよう構成されたコード及びルーチンを含んでよい。追加的に、又は代替的に、修復モジュール206は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行するか又はその実行を制御するためのもの)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを用いて実装されてよい。いくつかの他の事例では、修復モジュール206は、ハードウェアとソフトウェアとの組み合わせを用いて実装されてもよい。本開示では、修復モジュール206によって実行されるものとして説明されている動作は、修復モジュール206が対応するシステムに実行することを指示し得る動作を含んでもよい。
修復モジュール206は、試験中のコード204内の1つ以上のエラーを修復する(「直す」とも呼ばれる。)ために使用され得る試験中のコード204に対する一連の修復操作を実行するよう構成されてよい。いくつかの実施形態で、修復モジュール206は、修復テンプレート212及び1つ以上のテストスイート211に基づいて修復操作の1つ以上を実行するよう構成されてよい。
修復テンプレート212は、実行される場合に、試験中のコード204内のエラーの存在に応答して試験中のコード204に対して1つ以上の修正を実装するよう構成され得る如何なる適切なタイプの命令又はルーチンも含んでよい。修正は、エラーを修復するか又は修復しようと試み得る試験中のコード204の変更を含んでよい。本開示では、実行される可能性がある修正は、「修復候補」又は「修復」と呼ばれ得る。いくつかの実施形態で、修復テンプレート212は、前に修復されたソースコードから、修復を達成するために行われた一次編集を識別することによって識別された1つ以上の修復を含んでよい。例えば、修復テンプレート212は、解析モジュール106によって識別され得る図1の修復108を含んでよい。
テストスイート211は、試験中のコード204のためのテストケースとなり得る1つ以上のルーチンを含んでよい。テストスイート211は、試験中のコード204が指定された様態で動くかどうかを判定するよう構成されてよい。テストスイート211は、如何なる適切な技術に従っても構成されてよい。
修復モジュール206は、試験中のコード204内の1つ以上のエラー及び対応するエラー位置を検出又は決定するために試験中のコード204に対してテストスイート211の1つ以上を適用するよう構成されてよい。いくつかの実施形態で、修復モジュール206は、テストスイート211に含まれている1つ以上のテストを実行するよう構成されてよく、これは、テスト実行を実行する、とも呼ばれ得る。合格するテスト実行は、「合格テスト実行」と呼ばれてよく、失敗するテスト実行は、「落第テスト実行」と呼ばれてよい。いくつかの実施形態で、試験中のコード204のエラー位置及び対応するエラーは、エラー位置に現れるコードを実行する落第テスト実行に基づいて、識別されてよい。
いくつかの実施形態で、修復モジュール206は、検出されたエラーを修復するために行われる可能性がある潜在的な修正として修復テンプレート212から修復候補を取得するよう構成されてよい。いくつかの実施形態で、修復モジュール206は、修復候補の修復コードパターンを取得してもよい。例えば、いくつかの実施形態で、修復モジュール206は、米国特許出願第15/822106号で記載されているような修復コードパターンを取得するよう構成されてもよい。
いくつかの実施形態で、修復モジュール206は、共通コードパターンデータベース214にアクセスするよう構成されてよい。共通コードパターンデータベース214は、ビッグコードから導出され得る共通のコードパターンを含んでよい。例えば、共通のコードパターンは、既存のソフトウェアプログラムの1つ以上のリポジトリに格納され得る既存のソフトウェアプログラムの既存のコードから導出されてよい。いくつかの実施形態で、共通のコードパターンは、米国特許出願第15/822106号で記載されるように取得されてよい。
いくつかの実施形態で、修復モジュール206は、米国特許出願第15/822106号で記載されるように、修復候補のコードパターンと共通のコードパターンとの間の関連付けに基づいてエラーの訂正のために修復候補を選択又は優先順位付けするよう構成されてよい。
いくつかの実施形態で、修復モジュール206はまた、修復候補の優先順位付けに基づいて、試験中のコード204に対して修復を実行するよう構成されてよい。例えば、修復モジュール206は、可能性がある修復として、最も高い優先順位付けから最も低い優先順位付けまで降順で修復候補を実装してよい。追加的に、又は代替的に、修復モジュール206は、修正された試験中のコード208を出力するよう構成されてよく、修正された試験中のコード208は、修復候補の優先順位付けに基づいて実装され得る1つ以上の修復を含んでよい。
本開示の範囲から逸脱せずに、図2に対して、変更、追加、又は削除が行われてよい。例えば、環境200は、本開示で例示及び記載されているよりも多い又は少ない要素を含んでもよい。更に、いくつかの実施形態で、修復モジュール206、テストスイート211、及び修復テンプレート212の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部は、それらが同じ要素と見なされ得るように、あるいは、それが修復モジュール206、テストスイート211、及び修復テンプレート212のうちの2つ以上の部分と見なされ得る共通のセクションを有するように、組み合わされてよい。
図3は、本開示の少なくとも1つの実施形態に従って、例となるコンピュータシステム302のブロック図を表す。コンピュータシステム302は、解析モジュール(図1の解析モジュール106)及び/又は修復モジュール(例えば、図2の修復モジュール206)に関連した1つ以上の動作を実装又は指示するよう構成されてよい。コンピュータシステム302は、プロセッサ350、メモリ352、及びデータストレージ354を含んでよい。プロセッサ350、メモリ352、及びデータストレージ354は、通信可能に結合されてよい。
一般に、プロセッサ350は、様々なコンピュータハードウェア又はソフトウェアを含む如何なる適切な専用又は汎用のコンピュータ、コンピュータエンティティ、又はプロセッシングデバイスも含んでよく、如何なる適用可能なコンピュータ可読記憶媒体でも記憶されている命令を実行するよう構成されてよい。例えば、プロセッサ350は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは、プログラム命令を解釈及び/又は実行するようかつ・あるいはデータを処理するよう構成されたあらゆる他のデジタル又はアナログ回路を含んでよい。図3では単一のプロセッサとして表されているが、プロセッサ350は、本開示で記載されている動作の任意の数を個別的に又は集合的に実行するか又はその実行を指示するよう構成されたプロセッサをいくつでも含んでよい。更に、プロセッサの1つ以上は、異なるサーバなどの1つ以上の異なる電子機器に存在してもよい。
いくつかの実施形態で、プロセッサ350は、メモリ352、データストレージ354、又はメモリ352及びデータストレージ354に記憶されているプログラム命令を解釈及び/又は実行しかつ/あるいは記憶されているデータを処理するよう構成されてよい。いくつかの実施形態で、プロセッサ350は、データストレージ354からプログラム命令をフェッチし、プログラム命令をメモリ352にロードしてよい。プログラム命令がメモリ352にロードされた後、プロセッサ350はプログラム命令を実行し得る。
例えば、いくつかの実施形態で、上記のモジュール(例えば、解析モジュール及び/又は修復モジュール)の1つ以上は、プログラム命令としてデータストレージ354に含まれてよい。プロセッサ350は、対応するモジュールのプログラム命令をデータストレージ354からフェッチしてよく、対応するモジュールのプログラム命令をメモリ352にロードしてよい。対応するモジュールのプログラム命令がメモリ352にロードされた後、プロセッサ350は、コンピュータシステムが、命令によって記載されているように対応するモジュールに関連した動作を実装し得るように、プログラム命令を実行してよい。
メモリ352及びデータストレージ354は、コンピュータ実行可能命令又はデータ構造を搬送するか又は記憶しているコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ350などの汎用又は専用のコンピュータによってアクセスされ得る如何なる利用可能な媒体も含んでよい。例として、限定としてでなく、そのようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、電気消去可能なプログラム可能リードオンリーメモリ(EEPROM)、コンパクトディスク型リードオンリーメモリ(CD-ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、固体状態メモリデバイス)、又はコンピュータ実行可能命令若しくはデータ構造の形で特定のプログラムコードを搬送若しくは記憶するために使用され得かつ汎用若しくは専用のコンピュータによってアクセスされ得るあらゆる他の記憶媒体を含む有形な又は非一時的なコンピュータ可読媒体を含んでよい。上記のものの組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれてよい。コンピュータ実行可能命令は、例えば、プロセッサ350に特定の動作又は動作のグループを実行させるよう構成された命令及びデータを含んでよい。
本開示の範囲から逸脱せずに、コンピュータシステム302に対して、変更、追加、又は削除が行われてよい。例えば、いくつかの実施形態で、コンピュータシステム302は、明示的に例示又は記載されていないことがある他のコンポーネントをいくつでも含んでよい。
図4は、本開示で説明されている少なくとも1つの実施形態に従って、ソフトウェアプログラムに対する修復を識別する、例となる方法400のフローチャートである。方法400は、試験中のコードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の解析モジュール106及び図2の修復モジュール206の1つ以上又は(例えば1つ以上のモジュールによって指示される)図3のコンピュータシステム302が、方法400に関連した動作の1つ以上を実行してよい。別個のブロックで表されているが、方法400のブロックの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックにまとめられても、又は削除されてもよい。
方法400はブロック402から開始してよく、ソフトウェアプログラムのソースコードのソースコード編集が識別されてよい。編集は、ソースコードのバグのあるバージョンとソースコードの対応する修復されたバージョンとの間で行われてよい。バグのあるバージョンは、特定のエラーを含む可能性があり、特定のエラーは、修復されたバージョンでは直され得る。ソースコード及び対応するバージョンは、いくつかの実施形態では、ビッグコードリポジトリから取得されてよい。
ブロック404で、編集のクラスタが識別されてよい。例えば、編集はクラスタに編成されてよく、各クラスタは1つ以上の編集を含んでよい。編集をクラスタに編成する解析モジュール106に関連して上述されたように、いくつかの実施形態では、クラスタの総数は、クラスタの夫々の異なった、順序づけられていない組み合わせについて、異なるクラスタを含んでよい。
ブロック406で、1つ以上の有効なクラスタが、ブロック404で識別されたクラスタから識別されてよい。有効なクラスタは、1つ以上の有効なクラスタの夫々に関する第1ソースコードの成功したコンパイルに基づいて識別されてよい。有効なクラスタは、図5に関連して以下で更に詳細に記載される方法500の1つ以上の動作に従って識別されてよい。
ブロック408で、1つ以上の無効なクラスタが、ブロック404で識別されたクラスタから識別されてよい。無効なクラスタは、1つ以上の無効なクラスタの夫々に関する第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて識別されてよい。無効なクラスタは、図5に関連して以下で更に詳細に記載される方法500の1つ以上の動作に従って識別されてよい。
ブロック410で、ソースコードのバグのあるバージョンのエラーの修復は、有効なクラスタから識別されてよい。いくつかの実施形態で、有効なクラスタの組及びその組に対応する編集は、修復として識別されてよい。有効なクラスタの組は、単一の有効なクラスタ又は2つ以上の有効なクラスタの組み合わせを含んでよい。これら又は他の実施形態では、有効なクラスタの組は、同じく第1エラーを直す全体編集の数が最少である特定の有効なクラスタ又は有効なクラスタの特定の組み合わせであってよい。更に、修復の識別は、ブロック408で識別される無効なクラスタの検討から外してよい。修復は、図6に関連して以下で更に詳細に記載される方法600の1つ以上の動作に従って、有効なクラスタから識別されてよい。
本開示の範囲から逸脱せずに、方法400に対して、変更、追加、又は削除が行われてよい。例えば、方法400の動作のいくつかは、異なった順序で実装されてよい。追加的に、又は代替的に、2つ以上の動作は同時に実行されてもよい。更に、説明されている操作及び動作は、単に例として与えられており、操作及び動作のいくつかは、開示されている実施形態の本質から外れずに、任意であっても、より少ない操作及び動作にまとめられても、又は更なる操作及び動作に拡張されてもよい。
例えば、いくつかの実施形態で、方法400で解析されるソースコードは、第1ソースコードであってよく、第1ソースコードのバグのあるバージョン内のエラーは、第1エラーであってよい。これら又は他の実施形態で、方法400は、第2ソフトウェアプログラムの第2ソースコード内の第2エラーを識別することを含んでよい。第2エラーは、第1エラーと同じタイプのエラーであってよい。追加的に、又は代替的に、第2エラーは、第2エラーが第1エラーと同じタイプであることに基づいて、かつ、ブロック410で識別された修復が第1エラーを直すことに基づいて、識別された修復に基づいて修復されてよい。
図5は、本開示で説明されている少なくとも1つの実施形態に従って、編集の有効な及び/又は無効なクラスタを識別する、例となる方法500のフローチャートである。いくつかの実施形態で、図4の方法400に関して上述されたブロック406及び408の動作の1つ以上は、方法500に従って実行されてよい。
方法500は、試験中のコードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の解析モジュール106及び図2の修復モジュール206の1つ以上又は(例えば1つ以上のモジュールによって指示される)図3のコンピュータシステム302が、方法500に関連した動作の1つ以上を実行してよい。別個のブロックで表されているが、方法500のブロックの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックにまとめられても、又は削除されてもよい。
方法500はブロック502から開始してよく、編集の特定のクラスタが選択されてよい。特定のクラスタは、いくつかの実施形態では、図4の方法400のブロック404で識別されたクラスタから選択されてよい。上述されたように、特定のクラスタの編集は、エラーを含むエラーコードのバグのあるバージョンと、そのエラーが直されているソースコードの修復されたバージョンとの間で行われている編集であってよい。
ブロック504で、特定のクラスタは、ソースコードの第1の修正されたバージョンを生成するようソースコードのバグのあるバージョンに適用されてよい。例えば、特定のクラスタに含まれている編集は、第1の修正されたバージョンを生成するようソースコードのバグのあるバージョンに対して行われてよい。
ブロック506で、ソースコードの第1の修正されたバージョンをコンパイルしようと試みられてよい。ブロック508で、第1の修正されたバージョンがコンパイルに成功したか、それとも1つ以上のコンパイルエラーを含んでいたかが決定されてよい。第1の修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、方法500はブロック518へ進んでよい。ブロック518で、特定のクラスタは、無効なクラスタとして識別されてよい。対照的に、第1の修正されたバージョンがコンパイルに成功した(すなわち、如何なるコンパイルエラーも有していない)ことに応答して、方法500はブロック510へ進んでよい。
ブロック510で、特定のクラスタは、ソースコードの第2の修正されたバージョンを生成するようソースコードの修復されたバージョンから破棄されてよい。例えば、特定のクラスタに含まれている編集は、対応するコードが、バグのあるバージョンにあったように元通りになるように、修復されたバージョンから破棄されてよい。例えば、バグのあるバージョン内の第1変数名を、修復されたバージョン内の第2変数名に変える第1編集は、第2の修正されたバージョンが第2変数名ではなく第1変数名を含むように、無効にされてよい。更に、選択されたクラスタに含まれていない、バグのあるバージョンと修復されたバージョンとの間で行われた編集は、無効にされなくてもよい。
ブロック512で、ソースコードの第2の修正されたバージョンをコンパイルしようと試みられてよい。ブロック514で、第2の修正されたバージョンがコンパイルに成功したか、それとも1つ以上のコンパイルエラーを含んでいたかが決定されてよい。第2の修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、方法500はブロック518へ進んでよく、特定のクラスタは、無効なクラスタとして識別されてよい。対照的に、第2の修正されたバージョンがコンパイルに成功した(すなわち、如何なるコンパイルエラーも有していない)ことに応答して、方法500はブロック516へ進んでよい。ブロック516で、特定のクラスタは、有効なクラスタとして識別されてよい。
本開示の範囲から逸脱せずに、方法500に対して、変更、追加、又は削除が行われてよい。例えば、方法500の動作は、異なった順序で実装されてよい。例えば、いくつかの実施形態で、ブロック510、512、及び514は、ブロック504、506、及び508より前に、又はそれらと同時に実行されてよい。
更に、いくつかの実施形態で、方法500は、図4のブロック404で識別され得る編集の各クラスタに関して繰り返し又は同時に実行されてよい。追加的に、又は代替的に、方法500は、クラスタがそれらのサイズに従って昇順で選択される場合に繰り返し実行されてよい。これら又は他の実施形態では、編集の数が最少であるクラスタが最初に選択されてよく、編集の数が最多であるクラスタは最後に選択されてよい。
図6は、本開示で説明されている少なくとも1つの実施形態に従って、編集の有効なクラスタから修復を識別する、例となる方法600のフローチャートである。いくつかの実施形態で、図4の方法400に関して上述されたブロック410の動作の1つ以上は、方法500に従って実行されてよい。
方法600は、試験中のコードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の解析モジュール106及び図2の修復モジュール206の1つ以上又は(例えば1つ以上のモジュールによって指示される)図3のコンピュータシステム302が、方法600に関連した動作の1つ以上を実行してよい。別個のブロックで表されているが、方法600のブロックの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックにまとめられても、又は削除されてもよい。
方法600はブロック602から開始してよく、有効なクラスタは、有効なクラスタの組に編成されてよい。例えば、有効なクラスタは、有効なクラスタの各組が1つ以上の有効な組を含み得るように、有効なクラスタの組に編成されてよい。有効なクラスタの各組は、単一の有効なクラスタ又は複数の有効なクラスタを含んでよい。有効なクラスタの組の総数は、上述されたように編集がクラスタに編成され得る様態と同様に、有効なクラスタの夫々の異なった、順序づけられていない組み合わせについて、異なる組を含んでよい。
ブロック604で、有効なクラスタの特定の組が選択されてよい。いくつかの実施形態で、方法600は、繰り返し実行されてよく、有効なクラスタの特定の組は、有効なクラスタの組のサイズの昇順に基づいて選択されてよい。そのようなものとして、ブロック604で選択される有効なクラスタの特定の組は、方法600により未だ解析されていない他の組と比較して、対応する編集の数が最も少ない組であってよい。
ブロック606で、特定の組は、ソースコードの第1の修正されたバージョンを生成するようソースコードのバグのあるバージョンに適用されてよい。例えば、特定の組に含まれている編集は、第1の修正されたバージョンを生成するようソースコードのバグのあるバージョンに対して行われてよい。
ブロック608で、ソースコードの第1の修正されたバージョンは実行されてよい。ブロック610で、第1の修正されたバージョンの実行に基づいて、バグのあるバージョンに含まれておりかつ修復されたバージョンでは直されているエラーが、第1の修正されたバージョンで直されているかどうかが決定されてよい。エラーが直されていないことに応答して、方法600はブロック620へ進んでよい。ブロック620で、有効なクラスタの特定の組は、エラーのスタンドアロン修復としての考慮から除外されてよい。対照的に、第1の修正されたバージョンが成功裏にエラーを直したことに応答して、方法600はブロック612へ進んでよい。
ブロック612で、特定の組は、ソースコードの第2の修正されたバージョンを生成するようソースコードの修復されたバージョンから破棄されてよい。例えば、有効なクラスタの特定の組に含まれている編集は、対応するコードが、バグのあるバージョンにあったように元通りになるように、修復されたバージョンから破棄されてよい。図5のブロック510と同様に、選択されたクラスタに含まれていない、バグのあるバージョンと修復されたバージョンとの間で行われた編集は、ブロック612で無効にされなくてもよい。
ブロック614で、ソースコードの第2の修正されたバージョンは実行されてよい。ブロック616で、第2の修正されたバージョンの実行に基づいて、バグのあるバージョンにもともとあったエラーが第2の修正されたバージョンによって再現されているかどうかが決定される。第2の修正されたバージョンがエラーを再現していないことに応答して、方法600はブロック620へ進んでよく、特定の組は、エラーのスタンドアロン修復としての考慮から除外されてよい。対照的に、第2の修正されたバージョンがエラーを再現していることに応答して、方法600はブロック618へ進んでよい。ブロック618で、有効なクラスタの特定の組は、エラーのスタンドアロン修復として識別されてよい。
いくつかの実施形態で、有効なクラスタの1つより多い組は、有効なクラスタの組の中の複数組の夫々に関してブロック604、606、608、610、612、614、616、618及び620の動作を繰り返すことによって、エラーのスタンドアロン修復として識別されてよい。しかし、スタンドアロン修復として識別された有効なクラスタの組の1つ以上はまた、エラーを修復することに寄与しない可能性がある二次編集も含むことがある。いくつかの実施形態で、同じくスタンドアロン修復として識別される、編集の数が最少である有効なクラスタの組は、二次編集の数が最少である(いくつかの事例では、二次編集を含まないことがある)修復を識別するようエラーの修復として選択されてよい。そのようなものとして、修復内の二次編集の数は低減され得る。
追加的に、又は代替的に、ブロック604、606、608、610、612、614、616、618及び620の動作は、有効なクラスタの組に対して繰り返し実行されてよく、有効なクラスタの組は、それらのサイズ(例えば、有効なクラスタの組内の編集の数)に基づいて昇順で選択される。これら又は他の実施形態では、エラーを修復する有効なクラスタの最初の組を識別することに応答して、反復的なプロセスは終了してよい。このようにして方法600を実行することは、エラーのスタンドアロン修復でもある、編集の数が最少である(二次編集の数も最少であり得る)有効なクラスタの組も識別しながら、計算資源の量を低減することができる。
本開示の範囲から逸脱せずに、方法600に対して、変更、追加、又は削除が行われてよい。例えば、方法600の動作は、異なった順序で実装されてよい。例えば、いくつかの実施形態で、ブロック612、614、及び616は、ブロック606、608、及び610より前に又はそれらと同時に実行されてよい。
方法400、500及び600の動作の1つ以上が、ソースコードのバグのあるバージョンの例702及びソースコードの修復されたバージョンの例704に関してどのように実行され得るかに関して例を与えるために、これより、図7A~7Eについて説明する。表されている例では、6つの編集、Edit1、Edit2、Edit3、Edit4、Edit5及びEdit6(概して「Edit」と呼ばれる。)が、バグのあるバージョン702と修復されたバージョン704との間で行われている。特に、図7Aに表されているように、Edit1は、ソースコードの行708内の要素「String key」を「Map.Entry<String,String>entry」に変更しており、Edit2は、行708内の要素「keySet()」を「entrySet()」に変更しており、Entry3は、「String key=entry.getKey()」の行710を追加しており、編集4は、行712内の要素「checkValue」を「testValue」に変更しており、Edit5は、行712内の要素「table.get」を「entry.getValue」に変更しており、Edit6は、行714の要素「checkValue」を「testValue」に変更している。
更に、修復されたバージョン704は、バグのあるバージョン702にあるエラーを直している。方法400、500及び600の動作は、どのEditがエラーを直すことに寄与したか(例えば、どれが一次編集であるか)と、どのEditが二次編集である可能性があるかとを決定するためにコンピュータシステムによって実行されてよい。
Editは、編集のクラスタに編成されてよく、各クラスタは、1つ以上の編集を含んでよい。いくつかの実施形態で、クラスタの総数は、クラスタの異なる順序づけられていない組み合わせの総数であってよく、6つのEditに関しては63個の異なるクラスタに等しくてよい。
次いで、編集のクラスタは、例えば、個々のクラスタに対して方法500の動作の1つ以上を実行することによって、有効又は無効であると識別されてよい。例えば、図7Bは、{Edit1}のクラスタが、図5の方法500のブロック504に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン716を表す。図7Bはまた、クラスタ{Edit1}が、図5の方法500のブロック510に関して上述されたように、修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン718を表す。図7Bに表されているように、第1の修正されたバージョン716及び第2の修正されたバージョン718は、夫々、コンパイルエラーを有してよく、それにより、{Edit1}のクラスタは、図5の方法のブロック506、508及び518並びに/又はブロック512、514及び518に基づいて、無効と見なされ得る。
他の例として、図7Cは、{Edit1,Edit2,Edit3}のクラスタが、図5の方法500のブロック504に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン720を表す。図7Cはまた、クラスタ{Edit1,Edit2,Edit3}が、図5の方法500のブロック510に関して上述されたように、修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン722を表す。図7Cに表されているように、第1の修正されたバージョン720は、コンパイルに成功していてよいが、第2の修正されたバージョン722は、コンパイルエラーを有してよい。従って、たとえ第1の修正されたバージョン720がコンパイルに成功したとしても、第2の修正されたバージョン722が1つ以上のコンパイルエラーを有しているので、図5の方法のブロック504、506、508、510、512、514及び518に基づいて、{Edit1,Edit2,Edit3}のクラスタは無効と見なされ得る。
他の例として、図7Dは、{Edit1,Edit2,Edit3,Edit4}のクラスタが、図5の方法500のブロック504に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン724を表す。図7Dはまた、クラスタ{Edit1,Edit2,Edit3,Edit4}が、図5の方法500のブロック510に関して上述されたように、修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン726を表す。図7Dに表されているように、第1の修正されたバージョン724及び第2の修正されたバージョン726は、夫々、コンパイルに成功していてよい。従って、{Edit1,Edit2,Edit3,Edit4}のクラスタは、図5の方法のブロック504、506、508、510、512、514及び516に基づいて、有効と見なされ得る。
以上は、Editのクラスタのいくつかへの方法500の適用の例にすぎない。いくつかの実施形態で、方法500は、有効なクラスタ及び無効なクラスタを識別するために夫々の異なるクラスタに対して実行されてよい。表されている例では、Editの2つの有効なクラスタ、すなわち、Valid Cluster1-{Edit1,Edit2,Edit3,Edit4}及びValid Cluster2-{Edit5,Edit6}が識別されてよい。
次いで、方法600の1つ以上の動作が、識別されたValid Cluster1及びValid Cluster2に適用されてよい。例えば、Valid Cluster1及びValid Cluster2は、方法600のブロック602に関して上述されたように、有効なクラスタの次の組、{Valid Cluster1}、{Valid Cluster2}、及び{Valid Cluster1,Valid Cluster2}に編成されてよい。
次いで、方法600の他のブロックの1つ以上の動作が、ブロック602で識別された有効なクラスタの組に適用されてよい。例えば、図7Eは、組{Valid Cluster1}が、図6の方法600のブロック606に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン728を表す。図7Eはまた、組{Valid Cluster1}が、図6の方法600のブロック612に関して上述されたように、図7Aの修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン730を表す。図7Eに表されているように、第1の修正されたバージョン728は、エラーを直してよく、第2の修正されたバージョン730は、エラーを再現してよい。そのようなものとして、組{Valid Cluster1}は、図6のブロック604~618に基づいて、エラーの修復として識別され得る。
他の例として、図7Fは、組{Valid Cluster2}が、図6の方法600のブロック606に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン732を表す。図7Fはまた、組{Valid Cluster2}が、図6の方法600のブロック612に関して上述されたように、図7Aの修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン734を表す。図7Fに表されているように、第1の修正されたバージョン732は、エラーを直さなくてよく、第2の修正されたバージョン734は、エラーを再現しなくてよい。そのようなものとして、組{Valid Cluster2}は、図6のブロック604~618に基づいて、エラーの修復として識別され得ない。
他の例として、図7Gは、組{Valid Cluster1,Valid Cluster2}が、図6の方法600のブロック606に関して上述されたように、図7Aのバグのあるバージョン702に適用されているソースコードの第1の修正されたバージョン736を表す。図7Gはまた、組{Valid Cluster1,Valid Cluster2}が、図6の方法600のブロック612に関して上述されたように、図7Aの修復されたバージョン704から破棄されているソースコードの第2の修正されたバージョン738を表す。図7Gに表されているように、第1の修正されたバージョン736は、エラーを直してよく、第2の修正されたバージョン738は、エラーを再現してよい。そのようなものとして、組{Valid Cluster1,Valid Cluster2}は、図6のブロック604~618に基づいて、エラーの修復として識別され得る。
いくつかの実施形態で、図7A~7Gの例に関して、組{Valid Cluster1,Valid Cluster2}ではなく、組{Valid Cluster1}が選択されてよい。これは、組{Valid Cluster1}の方が、それに含まれている編集が少ないからである。更に、組{Valid Cluster1,Valid Cluster2}が、修復として動作し得る組{Valid Cluster1}を既に含んでいることを考えれば、Valid Cluster2の編集は、エラーに関して二次編集である、と決定され得る。方法400、500及び600の適用は、Edit5及びEdit6を省略しながら、このようにしてEdit1、Edit2、Edit3及びEdit4を修復として識別し得る。これは、Edit5及びEdit6が含まれていた場合と比較して、識別された修復の品質を改善し得る。
上述されたように、本開示で説明されている実施形態は、以下で更に詳細に説明されるように、様々なコンピュータハードウェア又はソフトウェアを含む専用又は汎用のコンピュータの使用を含んでよい。更に、上述されたように、本開示で説明されている実施形態は、コンピュータ実行可能命令を搬送するか又は記憶しているコンピュータ可読媒体を用いて実装されてもよい。
本開示で使用されるように、「モジュール」又は「コンポーネント」という用語は、モジュール若しくはコンポーネントの動作を実行するよう構成された特定のハードウェア実装、並びに/又はコンピュータシステムの汎用のハードウェア(例えば、コンピュータ可読媒体、プロセッシングデバイス、など)に記憶され及び/若しくはそれによって実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを指し得る。いくつかの実施形態で、本開示で記載される異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで(例えば、別個のスレッドとして)実行するオブジェクト又はプロセスとして実装されてもよい。本開示で記載されるシステム及び方法のいくつかは、(汎用のハードウェアに記憶され及び/又はそれによって実行される)ソフトウェアにおいて実装されるものとして概して記載されているが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせも可能であり、考えられている。本明細書中、「コンピュータエンティティ」は、本開示で先に定義されたあらゆるコンピュータシステム、又はコンピュータシステムで実行されるあらゆるモジュール若しくはモジュールの組み合わせであってよい。
本開示で、特に添付の特許請求の範囲(例えば、添付の特許請求の本文)で使用される用語は、一般的に、“非限定的な(open)”用語として意図されている(例えば、語「含んでいる(including)」は、“~を含んでいるが、~に限定されない”との意に解釈されるべきであり、語「備えている(having)」は、「少なくとも~を備えている」との意に解釈されるべきであり、語「含む(includes)」は、“~を含むが、~に限定されない”との意に解釈されるべきである、など。)。
更に、導入されたクレーム記載(introduced claim recitation)において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも1つの(at least one)」及び「1つ以上の(one or more)」といった導入句を使用し、クレーム記載を導入することがある。しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を1しか含まない例に限定されるということが示唆されると解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味すると解釈されるべきである。)。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
更には、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、通常、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう(例えば、他に修飾語のない、単なる「2つの記載事項」という記載がある場合、この記載は、少なくとも2つの記載事項、又は2つ以上の記載事項を意味する。)。更に、「A、B及びCなどのうち少なくとも1つ」又は「A、B及びCなどのうちの1つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Aのみ、Bのみ、Cのみ、AとBの両方、AとCの両方、BとCの両方、及び/又はAとBとCの全て、などを含むよう意図される。「A又はB」との言い回しのこの解釈は、たとえ「A及び/又はB」が、「A」若しくは「B」又は「A及びB」の可能性を含むよう折に触れて使用され得るとしても、依然として適用可能である。
更に、2つ以上の選択可能な用語を表す如何なる離接語及び/又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「A又はB」という句は、「A又はB」、あるいは、「A及びB」の可能性を含むことが理解されるべきである。
本開示で挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することと、
前記1つ以上の無効なクラスタを考慮すべき事項から外しながら、前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
を有する方法。
(付記2)
第2ソフトウェアプログラムの第2ソースコード内の第2エラーを識別することと、
前記第1修復に基づいて、前記第2エラーに関して、前記第2ソースコードに修復操作を実行することと
を更に有する、付記1に記載の方法。
(付記3)
前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
を含む、
付記1に記載の方法。
(付記4)
前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
を含む、
付記1に記載の方法。
(付記5)
前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
を含む、
付記1に記載の方法。
(付記6)
前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
を含む、
付記1に記載の方法。
(付記7)
前記1つ以上の有効なクラスタの特定の組は、前記第1エラーを直す全体編集の数が、同じく前記第1エラーを直す有効なクラスタの他の組と比較して最も少ない、
付記1に記載の方法。
(付記8)
前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが前記第1エラーを修復することに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
を含む、
付記1に記載の方法。
(付記9)
前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
を含む、
付記1に記載の方法。
(付記10)
実行されることに応答して、システムに、
第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することと、
前記1つ以上の無効なクラスタを考慮すべき事項から外しながら、前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
を有する動作を実行させる1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記11)
前記動作は、
第2ソフトウェアプログラムの第2ソースコード内の第2エラーを識別することと、
前記第1修復に基づいて、前記第2エラーに関して、前記第2ソースコードに修復操作を実行することと
を更に有する、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記12)
前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記13)
前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記14)
前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記15)
前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記16)
前記1つ以上の有効なクラスタの特定の組は、前記第1エラーを直す全体編集の数が、同じく前記第1エラーを直す有効なクラスタの他の組と比較して最も少ない、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記17)
前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが前記第1エラーを修復することに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記18)
前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
前記第1ソースコードの前記修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
を含む、
付記10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
(付記19)
1つ以上のプロセッサと、命令を記憶するよう構成された1つ以上の非一時的なコンピュータ可読記憶媒体とを有するシステムであって、
前記命令は、前記1つ以上のプロセッサによって実行されることに応答して、当該システムに、
第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
を有し、
前記複数の有効なクラスタの各々の有効なクラスタを識別することが、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの第1の修正されたバージョンを生成することと、
前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの第2の修正されたバージョンを生成することと、
前記第1ソースコードの前記第1の修正されたバージョン及び前記第1ソースコードの前記第2の修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
を含み、
前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することが、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの第3の修正されたバージョンを生成することと、
前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードに対応する第4の修正されたバージョンを生成することと、
前記第1ソースコードの前記第3の修正されたバージョンが前記第1エラーを修復することに応答して、かつ、前記第1ソースコードの前記第4の修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
を含む、動作を実行させる、
システム。
(付記20)
前記動作は、前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することを更に有し、
前記1つ以上の無効なクラスタは、前記第1修復を識別するときに、考慮すべき事項から外される、
付記19に記載のシステム。
100,200 環境
102 ビッグコードデータベース
104 ソースコード
106 解析モジュール
108 修復
204 試験中のコード
206 修復モジュール
208 修正された試験中のコード
211 テストスイート
212 修復テンプレート
214 共通コードパターンデータベース
302 コンピュータシステム
350 プロセッサ
352 メモリ
354 データストレージ
702 バグのあるバージョン
704 修復されたバージョン

Claims (20)

  1. 第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
    前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
    前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
    前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することと、
    前記1つ以上の無効なクラスタを考慮すべき事項から外しながら、前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
    を有する方法。
  2. 第2ソフトウェアプログラムの第2ソースコード内の第2エラーを識別することと、
    前記第1修復に基づいて、前記第2エラーに関して、前記第2ソースコードに修復操作を実行することと
    を更に有する、請求項1に記載の方法。
  3. 前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
    を含む、
    請求項1に記載の方法。
  4. 前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
    を含む、
    請求項1に記載の方法。
  5. 前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
    前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
    を含む、
    請求項1に記載の方法。
  6. 前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
    前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
    を含む、
    請求項1に記載の方法。
  7. 前記1つ以上の有効なクラスタの特定の組は、前記第1エラーを直す全体編集の数が、同じく前記第1エラーを直す有効なクラスタの他の組と比較して最も少ない、
    請求項1に記載の方法。
  8. 前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが前記第1エラーを修復することに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
    を含む、
    請求項1に記載の方法。
  9. 前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
    を含む、
    請求項1に記載の方法。
  10. 実行されることに応答して、システムに、
    第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
    前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
    前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
    前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することと、
    前記1つ以上の無効なクラスタを考慮すべき事項から外しながら、前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
    を有する動作を実行させる1つ以上の非一時的なコンピュータ可読記憶媒体。
  11. 前記動作は、
    第2ソフトウェアプログラムの第2ソースコード内の第2エラーを識別することと、
    前記第1修復に基づいて、前記第2エラーに関して、前記第2ソースコードに修復操作を実行することと
    を更に有する、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  12. 前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  13. 前記複数の有効なクラスタの各々の有効なクラスタを識別することは、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  14. 前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
    前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  15. 前記1つ以上の無効なクラスタの各々の無効なクラスタを識別することは、
    前記各々の無効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが1つ以上のコンパイルエラーを有していることに応答して、前記各々の無効なクラスタを妥当でないと識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  16. 前記1つ以上の有効なクラスタの特定の組は、前記第1エラーを直す全体編集の数が、同じく前記第1エラーを直す有効なクラスタの他の組と比較して最も少ない、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  17. 前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが前記第1エラーを修復することに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  18. 前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することは、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの修正されたバージョンを生成することと、
    前記第1ソースコードの前記修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
    を含む、
    請求項10に記載の1つ以上の非一時的なコンピュータ可読記憶媒体。
  19. 1つ以上のプロセッサと、命令を記憶するよう構成された1つ以上の非一時的なコンピュータ可読記憶媒体とを有するシステムであって、
    前記命令は、前記1つ以上のプロセッサによって実行されることに応答して、当該システムに、
    第1ソフトウェアプログラムの第1ソースコードのバグのあるバージョンと、前記第1ソースコードの修復されたバージョンとの間で行われた複数のソースコード編集を識別することであり、前記バグのあるバージョンは第1エラーを含み、該第1エラーは前記修復されたバージョンでは直されている、ことと、
    前記ソースコード編集の複数のクラスタを識別することであり、前記複数のクラスタの各クラスタは、前記複数のソースコード編集のうちの1つ以上のソースコード編集を含む、ことと、
    前記複数のクラスタの中の複数の有効なクラスタを、該複数の有効なクラスタの各有効なクラスタに関する前記第1ソースコードの成功したコンパイルに基づいて、識別することと、
    前記複数の有効なクラスタのうちの1つ以上の有効なクラスタの特定の組を前記第1エラーの第1修復として識別することと
    を有し、
    前記複数の有効なクラスタの各々の有効なクラスタを識別することが、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの第1の修正されたバージョンを生成することと、
    前記各々の有効なクラスタに対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードの第2の修正されたバージョンを生成することと、
    前記第1ソースコードの前記第1の修正されたバージョン及び前記第1ソースコードの前記第2の修正されたバージョンがコンパイルに成功したことに応答して、前記各々の有効なクラスタを妥当であると識別することと
    を含み、
    前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することが、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記バグのあるバージョンに適用することによって、前記第1ソースコードの第3の修正されたバージョンを生成することと、
    前記1つ以上の有効なクラスタの特定の組に対応する前記1つ以上のソースコード編集を前記第1ソースコードの前記修復されたバージョンから破棄することによって、前記第1ソースコードに対応する第4の修正されたバージョンを生成することと、
    前記第1ソースコードの前記第3の修正されたバージョンが前記第1エラーを修復することに応答して、かつ、前記第1ソースコードの前記第4の修正されたバージョンが前記第1エラーを含むことに応答して、前記1つ以上の有効なクラスタの特定の組を前記第1修復として識別することと
    を含む、動作を実行させる、
    システム。
  20. 前記動作は、前記複数のクラスタの中の1つ以上の無効なクラスタを、該1つ以上の無効なクラスタの夫々に関する前記第1ソフトウェアプログラムの1つ以上のコンパイルエラーに基づいて、識別することを更に有し、
    前記1つ以上の無効なクラスタは、前記第1修復を識別するときに、考慮すべき事項から外される、
    請求項19に記載のシステム。
JP2021112191A 2020-07-22 2021-07-06 自動ソフトウェアプログラム修復 Pending JP2022022115A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/936,390 US11119889B1 (en) 2020-07-22 2020-07-22 Automated software program repair
US16/936390 2020-07-22

Publications (1)

Publication Number Publication Date
JP2022022115A true JP2022022115A (ja) 2022-02-03

Family

ID=77665645

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021112191A Pending JP2022022115A (ja) 2020-07-22 2021-07-06 自動ソフトウェアプログラム修復

Country Status (2)

Country Link
US (1) US11119889B1 (ja)
JP (1) JP2022022115A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024177377A1 (ko) * 2023-02-23 2024-08-29 삼성전자 주식회사 인공지능 모델을 이용하여 연산을 수행하는 전자 장치 및 전자 장치의 동작 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7810081B2 (en) * 2006-08-22 2010-10-05 International Business Machines Corporation Compilation error isolation, optimization and resolution
US10459695B2 (en) * 2017-10-05 2019-10-29 Sap Se Correction of code errors using machine learning

Also Published As

Publication number Publication date
US11119889B1 (en) 2021-09-14

Similar Documents

Publication Publication Date Title
Arcuri Evolutionary repair of faulty software
US8589892B2 (en) Verification of speculative execution
US7681180B2 (en) Parameterized test driven development
JP7110789B2 (ja) 自動化されたソフトウェアプログラム修復候補の選択
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
GB2508643A (en) Method for Performing a Regression Test after Modifying Source Code File
US20080168426A1 (en) Automatic inspection of compiled code
JP7384054B2 (ja) 自動化されたソフトウェアプログラム修復
Guerrero Balaguera et al. Understanding the Effects of Permanent Faults in GPU's Parallelism Management and Control Units
US10761962B1 (en) Automated software program repair
JP2022022115A (ja) 自動ソフトウェアプログラム修復
US11520689B2 (en) System and method for automatic program repair using fast-result test cases
US20090235234A1 (en) Determining minimal sets of bugs solutions for a computer program
US11740895B2 (en) Generation of software program repair explanations
Toth et al. Using version control history to follow the changes of source code elements
US10481969B2 (en) Configurable system wide tests
CN115964045A (zh) 一种跨架构的操作系统快速自动化构建的方法、装置及介质
CN106294130A (zh) 一种单元测试方法及装置
Nakajima et al. Toward developer-like automated program repair—Modification comparisons between genprog and developers
JP2022059580A (ja) ソフトウェアプログラム修復例の生成
US7412692B2 (en) Determining minimal sets of bug solutions for a computer program
CN113971042A (zh) 自动化软件程序修复
JP2021124852A (ja) 修正パターンのデータ駆動型合成
JP7456843B2 (ja) プログラム修正装置、プログラム修正方法、および、プログラム修正プログラム
JP2013008304A (ja) プログラム分析装置、プログラム分析方法、及びプログラム