JP2019096292A - 自動化されたソフトウェアプログラム修復候補の選択 - Google Patents

自動化されたソフトウェアプログラム修復候補の選択 Download PDF

Info

Publication number
JP2019096292A
JP2019096292A JP2018139293A JP2018139293A JP2019096292A JP 2019096292 A JP2019096292 A JP 2019096292A JP 2018139293 A JP2018139293 A JP 2018139293A JP 2018139293 A JP2018139293 A JP 2018139293A JP 2019096292 A JP2019096292 A JP 2019096292A
Authority
JP
Japan
Prior art keywords
repair
code
code pattern
normalized
existing
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.)
Granted
Application number
JP2018139293A
Other languages
English (en)
Other versions
JP7110789B2 (ja
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 JP2019096292A publication Critical patent/JP2019096292A/ja
Application granted granted Critical
Publication of JP7110789B2 publication Critical patent/JP7110789B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • 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/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0718Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in an object-oriented system
    • 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/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】自動化されたソフトウェアプログラム修復候補の選択のための方法等を提供する。【解決手段】実施形態の態様に従って、方法は、テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、欠陥のための修復候補を取得することを含んでよい。更に、方法は、修復候補の修復コードパターンを取得し、複数の既存のソフトウェアプログラムの既存のコードにおける修復コードパターンの発生回数を決定することを含んでよい。更には、方法は、修復コードパターンの発生回数に基づき、修復候補を、テスト済みソフトウェアプログラムの修復として優先順位付けすることを含んでよい。方法はまた、修復候補の優先順位付けに従って、テスト済みソフトウェアプログラムに対して修復動作を実行することを含んでよい。【選択図】図3

Description

本開示で説明される実施形態は、自動化されたソフトウェアプログラム修復候補の選択に関係がある。
ソフトウェアプログラムは、それらの中にしばしば欠陥(“バグ”と広く呼ばれる。)を有している。その場合に、ソフトウェアプログラムは、意図されたように動作しないことがある。しばしば、自動化された修復システムが、ソフトウェアプログラム内の欠陥を特定及び修正しようとして使用される。
本開示で請求される主題は、上述されたもののような環境でしか動作しない実施形態又は如何なる欠点も解消する実施形態に制限されない。むしろ、この背景は、本開示で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ与えられる。
実施形態の態様に従って、方法は、テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、欠陥のための修復候補を取得することを含んでよい。更に、方法は、修復候補の修復コードパターンを取得し、複数の既存のソフトウェアプログラムの既存のコードにおける修復コードパターンの発生回数を決定することを含んでよい。更には、方法は、修復コードパターンの発生回数に基づき、修復候補を、テスト済みソフトウェアプログラムの修復として優先順位付けすることを含んでよい。方法はまた、修復候補の優先順位付けに従って、テスト済みソフトウェアプログラムに対して修復動作を実行することを含んでよい。
実施形態の目的及び利点は、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって少なくとも実現及び達成されるだろう。
前述の概要及び以下の詳細な説明はいずれも例として与えられており、説明のためであって、請求される発明の限定ではない。
例となる実施形態は、添付の図面の使用を通じて、更なる特定及び詳細をもって記載及び説明されることになる。
ソフトウェアプログラムを修復することに関連した環境の例を表す図である。
ソフトウェアプログラムを修復するよう構成され得るコンピュータシステムの例を表す。
ソフトウェアプログラムを修復する方法の例のフローチャートである。
共通コードパターンデータベースにポピュレートする方法の例のフローチャートである。
コードパターンを取得する方法の例のフローチャートである。
本開示で記載されるいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関係がある。ソフトウェアプログラムは、ソフトウェアプログラムを意図されていない様態で動作させることがある欠陥(“バグ”とも広く呼ばれる。)をしばしば含む。その上、自動修復システム及び技術は、欠陥を検出及び修正してソフトウェアプログラムを修復するためにしばしば使用される。しかし、自動修復システム及び技術は、欠陥を修正するための修復を選択するときにしばしばうまく働かない。
本開示の1つ以上の実施形態に従って、テスト済みソフトウェアプログラムの修復候補は、既に存在しているコードに基づき、テスト済みソフトウェアプログラム内で欠陥を修正するよう、優先順位付けされて選択され得る。例えば、いくつかの実施形態では、既存のソフトウェアプログラムの1つ以上のリポジトリがアクセスされてよく、対応するコード内のパターンが取得され得る。本開示において、既存のソフトウェアプログラムから取得されるコードパターンは、“共通コードパターン”と呼ばれ得る。その上、既存のソフトウェアプログラムのリポジトリは、ある種類の共通コードパターンがどのくらいの頻度で比較的大規模に使用され得るかが決定され得るように、多数のソフトウェアプログラム(例えば、数千、数万、数十万、数百万、等といったソフトウェアプログラム)を含んでよい。本開示において、解析のために例えば1つ以上のリポジトリにおいて利用可能であり得るソフトウェアプログラム及びそれらの対応するコードは、“ビッグコード”と呼ばれ得る。
本開示のいくつかの実施形態では、共通コードパターンと、解析されたビッグコード内で各共通コードパターンが遭遇される回数とは、共通コードパターンデータベースに格納されてよい。その上、いくつかの実施形態では、特定の修復候補の特定のコードパターン(本開示では“修復コードパターン”と呼ばれる。)も取得されてよい。それら又は他の実施形態において、特定の修復コードパターンは、解析されたビッグコード内で特定の修復コードパターンが何回現れ得るかを決定するよう、共通コードパターンデータベースに含まれている共通コードパターンと比較されてよい。その上、以下で詳細に説明されるように、特定の修復候補は、解析されたビッグコードにおける特定の修復コードパターンの発生の回数に基づき、テスト済みソフトウェアプログラムの修復として優先順位付けされてよい。それら又は他の実施形態において、修復動作は、特定の修復候補の優先順位付け及び/又は1つ以上の他の修復候補の優先順位付けに従って、テスト済みソフトウェアプログラムに対して実行されてよい。記載される修復候補の解析及び優先順位付けは、既存のソフトウェアプログラムにおいて一般に使用されており、よって、一般に使用されていないような修復候補よりも有効である可能性が高いコードパターンを有している修復候補を選択することによって、自動ソフトウェアプログラム修復の効率を改善し得る。
本開示の実施形態は、添付の図面を参照して説明される。
図1は、本開示で記載される少なくとも1つの実施形態に従って配置される、ソフトウェアプログラムを修復することに関連した、例となる環境100を表す図である。環境100は、欠陥について被試験コード(code under test)104を解析するよう構成された修復モジュール106を含んでよい。修復モジュール106はまた、変更された被試験コード108を出力するよう構成されてよい。変更された被試験コード108は、修復モジュール106によって行われた修復動作により被試験コード104に対してなされた1つ以上の変更を含んでよい。
被試験コード104は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、若しくは他のロジック、又はプロセッシングデバイスによる実行のための命令のような、電子データを含んでよい。いくつかの実施形態では、被試験コード104は、ソフトウェアプログラムの完全なインスタンスを含んでよい。その上、又は代替的に、被試験コード104は、ソフトウェアプログラムの部分を含んでよい。被試験コード104は、ソフトウェアプログラムのために使用され得る如何なる適切なタイプのコンピュータ言語でも記述されてよい。
修復モジュール106は、変更された被試験コード108を生成するよう被試験コード104の1つ以上の変更を実行することをコンピュータデバイスに可能にするよう構成されたコード及びルーチンを含んでよい。その上、又は代替的に、修復モジュール106は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行するか又はその実行を制御するもの)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを用いて実装されてよい。いくつかの他の例では、修復モジュール106は、ハードウェアとソフトウェアとの組み合わせを用いて実装されてよい。本開示では、修復モジュール106によって実行されるものとして記載される動作は、修復モジュール106が対応するシステムに実行するよう指示し得る動作を含んでよい。
修復モジュール106は、被試験コード104内の1つ以上の欠陥を修復(修正とも呼ばれる。)するために使用され得る一連の修復動作を被試験コード104に対して実行するよう構成されてよい。いくつかの実施形態では、修復モジュール106は、修復テンプレート112及び1つ以上のテストスイート111に基づき1つ以上の修復動作を実行するよう構成されてよい。
修復テンプレート112は、如何なる適切なタイプの命令又はルーチンも含んでよく、命令又はルーチンは、実行される場合に、被試験コード104における欠陥の存在に応答して1つ以上の変更を被試験コード104に対して実装するよう構成され得る。変更は、欠陥を修復するか又は修復しようと試みることができる変更点を被試験コードに含めてよい。本開示において、実行され得る変更は、“修復候補”又は“修復”と呼ばれ得る。
テストスイート111は、被試験コード104のためのテストケースとなり得る1つ以上のルーチンを含んでよい。テストスイート111は、被試験コード104が特定の様態で動くかどうかを判定するよう構成されてよい。テストスイート111は、如何なる適切な技術にも従って構成されてよい。
修復モジュール106は、1つ以上のテストスイート111を被試験コード104に対して適用して被試験コード104内で1つ以上の欠陥及び対応する欠陥位置を検出又は決定するよう構成されてよい。いくつかの実施形態では、修復モジュール106は、テストスイート111に含まれている1つ以上のテストを実行するよう構成されてよい。これは、テスト実行を実施するとも呼ばれ得る。通過するテスト実行は、“テスト実行合格”と呼ばれてよく、失敗するテスト実行は、“テスト実行落第”と呼ばれてよい。いくつかの実施形態では、被試験コード104の欠陥位置及び対応する欠陥は、テスト実行落第が欠陥位置で現れることに基づき特定されてよい。
いくつかの実施形態では、修復モジュール106は、検出された欠陥を修復するよう行われ得る潜在的な変更として、修復テンプレートから、修復候補を取得するよう構成されてよい。それら又は他の実施形態において、修復モジュール106は、修復候補のコードを正規化するよう構成されてよい。本開示において、修復候補のコードは“修復コード”と呼ばれ得る。その上、又は代替的に、いくつかの実施形態では、修復コードの部分が正規化されてよく、あるいは、修復コードの全体が正規化されてよい。
いくつかの実施形態では、修復コードは、図5に関して以下で記載される1つ以上の動作に従って正規化されてよい。
いくつかの実施形態では、修復モジュール106は、正規化された修復コードに基づき、修復コードパターンを取得してよい。例えば、いくつかの実施形態では、正規化された修復コードが修復コードパターンとして使用されてよい。その上、又は代替的に、ハッシュ関数が、修復コードの特定のパターンを示し得るハッシュ値を得るよう、正規化された修復コードに適用されてよい。それら又は他の実施形態において、得られたハッシュ値は、修復コードパターンとして使用されてよい。
いくつかの実施形態では、修復モジュール106は、共通コードパターンデータベース114にアクセスするよう構成されてよい。共通コードパターンデータベース114は、ビッグコードから導出され得る共通コードパターンを含んでよい。例えば、共通コードパターンは、既存のソフトウェアプログラムの1つ以上のリポジトリに格納され得る既存のソフトウェアプログラムの既存のコードから導出されてよい。その上、いくつかの実施形態では、共通コードパターンデータベース114は、共通コードパターンの夫々とともに格納されている入力カウンタ値を含んでよい。入力カウンタ値は、共通コードパターンを取得するために実行され得るビッグコードの解析中に見つけられ得るその対応する共通コードパターンの発生の回数を示すことができる。
いくつかの実施形態では、共通コードパターンは、既存のソフトウェアプログラムの既存のコードの正規化された部分に基づいてよい。正規化は、修復コード及び共通コードに特有であり得るが、一般的なパターン及び構造も有し得るパラメータが、一般的なパターン及び構造を反映する一般的な形式に正規化され得るようにするものであってよい。よって、正規化は、異なるコードのコードパターンの比較を可能にし得る。
いくつかの実施形態では、既存のコードの部分は、図5に関して以下で記載される1つ以上の動作に従って正規化されてよい。
いくつかの実施形態では、共通コードパターンは、正規化された既存のコードに基づいてよい。例えば、いくつかの実施形態では、特定の部分に対応する正規化された既存のコードが、特定の共通コードパターンとして使用されてよい。その上、又は代替的に、ハッシュ関数が、既存のコードの対応する部分の特定のパターンを示し得るハッシュ値を得るよう、正規化された既存のコードに適用されてよい。それら又は他の実施形態において、得られたハッシュ値は、対応する共通コードパターンとして使用されてよい。いくつかの実施形態では、共通コードパターンデータベース114に含まれている共通コードパターン及び共通コードパターンの発生は、図4及び5に関して以下で記載される1つ以上の動作に従って取得されてよい。
修復モジュール106は、修復候補の修復コードパターンを、共通コードパターンデータベース114に含まれている共通コードパターンと比較して、解析されたビッグコード内で特定の修復コードパターンが何回現れ得るかを決定するよう構成されてよい。例えば、いくつかの実施形態では、修復モジュール106は、修復コードパターンが、共通コードパターンデータベース114に含まれている共通コードパターンのうちの1つと一致するか否かを判定してよい。修復コードパターンが特定の共通コードパターンと一致するとの決定に応答して、修復モジュール106は、特定の共通コードパターンと併せて共通コードパターンデータベース114に格納され得る特定の共通コードパターンの発生回数に関連した入力カウンタ値を取得するよう構成されてよい。このようにして、取得された値は、ビッグコードにおける修復コードパターンの発生回数を示すことができ、よって、修復候補と同じコードパターンを有しているコードがビッグコード内で如何に広く使用され得るかを示し得る。その上、又は代替的に、修復コードパターンが特定の共通コードパターンと一致しないとの決定に応答して、修復モジュール106は、修復候補コードパターンの発生回数として“0”を使用するよう構成されてよい。
いくつかの実施形態では、修復モジュール106は、修復コードパターンの決定された発生回数に基づき、修復候補を欠陥の修復として優先順位付けするよう構成されてよい。例えば、いくつかの実施形態では、複数の修復候補は、解析されたビッグコード内で夫々の対応する修復コードパターンが見つけられ得る発生の回数を決定するよう、上述されたように解析されてよい。複数の修復候補は、発生回数に基づき優先順位付けされてよく、その場合に、より多く発生する修復候補は、発生がより少ない修復候補に対して優先される。その上、又は代替的に、いくつかの実施形態では、特定の閾数よりも発生が少ないと決定された修復候補は、潜在的な修復として完全に検討から外されてよい。
いくつかの実施形態では、発生閾値は、(1)共通コードパターンについて解析されたビッグコード内のソフトウェアプログラムの数、(2)ビッグコードの解析において特定された異なる共通コードパターンの数、及び(3)解析されたビッグコード内で特定された全ての共通コードパターンの発生の総数、に基づいてよい。例えば、パターンの平均発生回数は、全ての共通コードパターンの発生の総数を異なる共通コードパターンの数で除すること(“因子(3)/因子(2)”)によって計算され得る。いくつかの実施形態では、発生閾値は、平均と比較して相対的に小さな数、例えば、平均の1%、2%、5%、10%、等として設定されてよい。例えば、平均発生回数が300であり、閾値が平均の1%に基づく場合に、発生閾値は3に設定され得る。
いくつかの実施形態では、修復モジュール106はまた、修復候補の優先順位付けに基づき被試験コード104に対して修復を実行するよう構成されてよい。例えば、修復モジュール106は、最も高い優先順位から最も低い優先順位までの降順において修復候補を潜在的な修復として実装してよい。その上、又は代替的に、修復モジュール106は、変更された被試験コード108を出力するよう構成されてよい。変更された被試験コード108は、修復候補の優先順位付けに基づき実装され得る1つ以上の修復を含んでよい。
変更、追加、又は省略が、本開示の適用範囲から外れることなしに、図1に対して行われてよい。例えば、環境100は、本開示で図解及び記載されているものよりも多い又は少ない要素を含んでよい。その上、いくつかの実施形態では、修復モジュール106の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部分と、テストスイート111と、修復テンプレート112とは、それらが同じ要素と見なされ得るか、あるいは、修復モジュール106、テストスイート111、及び修復テンプレート112のうちの2つ以上の部分と見なされ得る共通のセクションを有し得るように、組み合わされてよい。
図2は、本開示の少なくとも1つの実施形態に従う、例となるコンピュータシステム202のブロック図を表す。コンピュータシステム202は、修復モジュール(例えば、修復モジュール106)と関連する1つ以上の動作を実装又は指示するよう構成されてよい。コンピュータシステム202は、プロセッサ250、メモリ252、及びデータストレージ254を含んでよい。プロセッサ250、メモリ252、及びデータストレージ254は、通信上結合されてよい。
一般に、プロセッサ250は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む如何なる適切な専用又は汎用コンピュータ、コンピュータエンティティ、又はプロセッシングデバイスも含んでよく、如何なる適用可能なコンピュータ可読記憶媒体においても記憶された命令を実行するよう構成されてよい。例えば、プロセッサ250は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは、プログラム命令を解釈するよう及び/若しくは実行するよう並びに/又はデータを処理するよう構成された如何なる他のデジタル又はアナログ回路構成も含んでよい。図2では単一のプロセッサとして表されているが、プロセッサ250は、本開示で記載される動作をいくつでも個々に又は集合的に実行するか又はそのような実行を指示するよう構成されるプロセッサをいくつでも含んでよい。その上、プロセッサの1つ以上は、1つ以上の異なる電子デバイス、例えば、異なるサーバにおいて存在してよい。
いくつかの実施形態では、プロセッサ250は、メモリ252、データストレージ254、又はメモリ252及びデータストレージ254に記憶されているプログラム命令を解釈及び/若しくは実行し、並びに/又はそのように記憶されているデータを処理するよう構成されてよい。いくつかの実施形態では、プロセッサ250は、データストレージ254からプログラム命令をフェッチし、プログラム命令をメモリ252にロードしてよい。プログラム命令がメモリ252にロードされた後、プロセッサ250はプログラム命令を実行してよい。
例えば、いくつかの実施形態では、修復モジュールは、プログラム命令としてデータストレージ254に含まれてよい。プロセッサ250は、修復モジュールのプログラム命令をデータストレージ254からフェッチしてよく、そして、修復モジュールのプログラム命令をメモリ252にロードしてよい。修復モジュールのプログラム命令がメモリ252にロードされた後、プロセッサ250は、コンピュータシステムが、命令によって指示されるように、修復モジュールに関連した動作を実装し得るように、プログラム命令を実行してよい。
メモリ252及びデータストレージ254は、コンピュータ実行可能な命令又はデータ構造を搬送するか、又はそれらが記憶されているコンピュータ可読記憶媒体を含んでよい。そのようなコンピュータ可読記憶媒体は、プロセッサ250のような汎用又は専用のコンピュータによってアクセスされ得る如何なる利用可能な媒体も含んでよい。一例として、制限なしに、そのようなコンピュータ可読記憶媒体には、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、電気的消去可能なプログラム可能リードオンリーメモリ(EEPROM)、コンパクトディスク・リードオンリーメモリ(CD−ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、固体状態メモリデバイス)、あるいは、コンピュータ実行可能な命令又はデータ構造の形で特定のプログラムコードを搬送又は記憶するために使用され得、且つ、汎用又は専用のコンピュータによってアクセスされ得る如何なる他の記憶媒体も含む有形又は非一時的なコンピュータ可読記憶媒体が含まれ得る。上記の組み合わせも、コンピュータ可読記憶媒体の適用範囲内に含まれ得る。コンピュータ実行可能命令は、例えば、プロセッサ250に特定の動作又は動作群を実行させるよう構成される命令及びデータを含んでよい。
変更、追加、又は省略は、本開示の適用範囲から外れることなしに、コンピュータシステム202に対して行われてよい。例えば、いくつかの実施形態では、コンピュータシステム202は、明示的に図解又は記載され得ない他のコンポーネントをいくつでも含んでよい。
図3は、本開示で記載される少なくとも1つの実施形態に従って配置されるソフトウェアプログラムを修復する、例となる方法300のフローチャートである。方法300は、被試験コードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の修復モジュール106又は図2のコンピュータシステム202(例えば、修復モジュールによって指示されるもの)が、被試験コード104に対して、方法300に関連した動作のうちの1つ以上を実行してよい。別個のブロックにより表されているが、方法300のブロックのうちの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
方法300はブロック302から開始してよい。ブロック302において、欠陥及びその対応する欠陥位置が被試験コード内で特定されてよい。欠陥の特定は、如何なる適切な技術を用いても、被試験コードに対して実行されてよい。例えば、いくつかの実施形態では、欠陥の特定は、1つ以上のテストスイートのテスト実行を被試験コードに対して実行することに基づき、実行されてよい。
ブロック304において、修復候補が取得されてよい。いくつかの実施形態では、修復候補は、例えば上述されたように、修復テンプレートに基づき取得されてよい。
ブロック306において、修復候補の修復コードパターンが取得される。いくつかの実施形態では、修復コードパターンは、図5に関して以下で記載される1つ以上の動作に従って取得されてよい。
ブロック308において、前もって解析されているビッグコード内での修復コードパターンの発生回数が決定されてよい。例えば、発生回数は、例えば図1に関して上述されたように、共通コードパターンデータベースに含まれている情報に基づき、決定されてよい。
ブロック310において、優先順位付けが、解析されたビッグコードにおける決定された発生回数に基づき、修復候補について決定されてよい。いくつかの実施形態では、優先順位付けは、図1に関して上述されたのと類似又は同じであってよい。
ブロック312において、ブロック310で決定され得る修復候補の優先順位付けに基づき、修復が実行されてよい。例えば、いくつかの実施形態では、修復候補がその決定された発生回数と発生閾値との間の比較に基づき受け入れられると見なされることを優先順位付けが示す場合に、修復候補はブロック312で受け入れられ実装されてよい。対照的に、修復候補がその決定された発生回数と発生閾値との間の比較に基づき受け入れられないと見なされることを優先順位付けが示す場合に、修復候補は拒絶されてよく、そして、他の修復候補が選択されてよい。
それら又は他の実施形態において、欠陥位置に対応し得る複数の修復候補は、ブロック304、306、308、及び310に基づき優先順位付けされてよい。ブロック312では、複数の修復候補のうちの、最も高い優先順位を有している修復候補が、実装されてよい。
ブロック314において、変更された被試験コードが出力されてよい。変更された被試験コードは、上述された修復の優先順位付けに基づき実装され得る1つ以上の修復候補を含んでよく、それにより、変更された被試験コードは、ブロック302で受け取られ得る被試験コードの修復されたバージョンを含むことができる。
方法300は、ソフトウェアプログラムのテスト及び修復の効率及び有効性を改善し得る。例えば、記載されるような修復候補の優先順位付けの決定は、修復候補の実効性に関して、より良い決定を行うことを助ける。
変更、追加、又は省略は、本開示の適用範囲から外れることなしに、方法300に対して行われてよい。例えば、方法300の動作は、異なる順序で実施されてよい。その上、又は代替的に、2つ以上の動作は、同時に実行されてよい。更には、説明されているアクション及び動作は、単に例として与えられており、アクション及び動作の一部は、開示されている実施形態の本質から逸脱することなしに、任意であっても、より少ないアクション及び動作へとまとめられても、あるいは、更なるアクション及び動作に拡張されてもよい。
例えば、いくつかの実施形態では、方法300は繰り返し実行されてよく、その場合に、一度に1つの欠陥位置及び該欠陥位置に対応する1つの修復候補が解析され得る。その上、又は代替的に、1つ以上のブロックに関連する1つ以上の動作は、一度に複数の欠陥位置及び/又は複数の修復候補に対して実行されてよい。
図4は、本開示で記載される少なくとも1つの実施形態に従って共通コードパターンデータベースにポピュレートする、例となる方法400のフローチャートである。方法400は、ソフトウェアコードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の修復モジュール106又は図2のコンピュータシステム202(例えば、修復モジュールによって指示されるもの)が、ビッグコードの部分であってよい既存のソフトウェアプログラムの既存のコードに対して、方法400に関連した動作のうちの1つ以上を実行してよい。別個のブロックにより表されているが、方法400のブロックのうちの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
方法400はブロック402から開始してよい。ブロック402において、ビッグコードの部分であってよい既存のソフトウェアプログラムのウィンドウが、選択されてよい。ウィンドウは、既存のソフトウェアプログラムの既存のコードの1つ以上の行を含んでよい。いくつかの実施形態では、ウィンドウのサイズ(例えば、行の数)は、具体的な設計又は実施の検討に基づいてよい。例えば、より大きいウィンドウサイズは、コードパターンに対するより高品位の決定をもたらし得るが、より大きい計算時間も導入する可能性がある。
その上、又は代替的に、いくつかの実施形態では、ウィンドウは、既存のソフトウェアプログラムに対する前のウィンドウ選択に基づき選択されてよい。例えば、既存のソフトウェアプログラムが未だ解析されていない場合に、前のウィンドウ選択が実行され得ないので、ウィンドウは既存のソフトウェアプログラムのコードの最初の行を含んでよい。その上、又は代替的に、前のウィンドウが解析されている場合に、選択されたウィンドウは、コードの次の行を含んでよい。例えば、ウィンドウは、コードの5つの行を含んでよく、前のウィンドウは、既存のコードの行5〜10を含んでいてよい。この例においてブロック402で選択されたウィンドウは、次いで、既存のコードの行11〜15を含み得る。
ブロック404において、ウィンドウ内の既存のコードの共通コードパターンが取得されてよい。いくつかの実施形態では、共通コードパターンは、図5に関して以下で記載される1つ以上の動作に従って取得されてよい。
ブロック406において、ブロック404で取得された共通コードパターンを共通コードパターンデータベースが含むかどうかが判定されてよい。共通コードパターンデータベースが共通コードパターンを含まないことに応答して、方法400はブロック408へ進んでよい。対照的に、共通コードパターンデータベースが共通コードパターンを含むことに応答して、方法400はブロック410へ進んでよい。
ブロック408において、新しいデータベース入力が、共通コードパターンのために生成されてよい。いくつかの実施形態では、新しいデータベース入力は共通コードパターンを含んでよい。それら又は他の実施形態において、共通コードパターンの発生回数を示す値を持った入力カウンタも生成され、“0”の値を与えられてよい。ブロック408の後に、方法400はブロック410へ進んでよい。
ブロック410において、入力カウンタ値がインクリメントされてよい。例えば、ブロック408から起こることに応答して、入力カウンタ値は“1”にインクリメントされ得る。他の例として、ブロック406から起こることに応答して、入力カウンタ値は、ブロック406からブロック410へ進む前に“n”であってよく、そして、“n+1”にインクリメントされ得る。
然るに、共通コードパターンデータベースは、ビッグコードの既存のコードのウィンドウに対応し得る共通コードパターンに関する情報をポピュレートされてよい。いくつかの例において、方法400は、既存のコードのウィンドウの如何なる数についても且つソフトウェアプログラムの如何なる数についても繰り返されてよい。
変更、追加、又は省略は、本開示の適用範囲から外れることなしに、方法400に対して行われてよい。例えば、方法400の動作は、異なる順序で実施されてよい。その上、又は代替的に、2つ以上の動作は、同時に実行されてよい。更には、説明されているアクション及び動作は、単に例として与えられており、アクション及び動作の一部は、開示されている実施形態の本質から逸脱することなしに、任意であっても、より少ないアクション及び動作へとまとめられても、あるいは、更なるアクション及び動作に拡張されてもよい。
例えば、いくつかの実施形態では、方法400は繰り返し実行されてよく、その場合に、既存のコードの1つのウィンドウが一度に解析され得る。その上、又は代替的に、1つ以上のブロックに関連する1つ以上の動作は、一度に既存のコードの複数のウィンドウに対して実行されてよい。
図5は、本開示で記載される少なくとも1つの実施形態に従ってコードパターンを取得する、例となる方法500のフローチャートである。方法500は、ソフトウェアコードに対して如何なる適切なシステム、装置、又はデバイスによっても実行されてよい。例えば、図1の修復モジュール106又は図2のコンピュータシステム202(例えば、修復モジュールによって指示されるもの)が、修復候補のふゅうくこー度に対して、又は既存のソフトウェアプログラムの既存のコードに対して、方法500に関連した動作のうちの1つ以上を実行してよい。別個のブロックにより表されているが、方法500のブロックのうちの1つ以上に関連したステップ及び動作は、特定の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
方法500はブロック502から開始してよい。ブロック502において、コードが取得されてよい。いくつかの例において、コードは、例えば図4に関して上述されたように、既存のソフトウェアプログラムのウィンドウ内の既存のコードを含んでよい。他の例において、コードは、修復候補の修復コードを含んでよい。それら又は他の実施形態において、取得され得る修復コードの行の数は、生成され得る修復コードパターンと比較され得る共通コードパターンを取得するために使用され得るウィンドウのサイズに対応してよい。例えば、いくつかの実施形態では、取得され得る修復コードの行の数は、共通コードパターンを取得するために使用されるウィンドウと同じサイズであってよい。
方法500のブロック504、506、508、及び510は、ブロック502で取得されたコードを正規化することに関係がある。上述されたように、正規化は、取得されたコード及び対応するソフトウェアプログラムに特有であり得るが、一般的なパターン及び構造も有し得るパラメータが、一般的なパターン及び構造を反映する一般的な形式に正規化され得るようにするものであってよい。よって、正規化は、異なるコードのコードパターンの比較を可能にし得る。
例えば、いくつかの実施形態では、方法500はブロック504を含んでよい。ブロック504において、取得されたコードのいずれかの部分表現(subexpression)を簡約すべきかどうかが判定されてよい。例えば、いくつかの例において、コードは、特定のタイプの構造を有し得るが、対応する構造を反映するのに必要とされるよりも複雑でもあり得る部分表現を含んでよい。そのようなものとして、ブロック504において、複雑度が、コードに含まれ得る1つ以上の部分表現について決定されてよい。いくつかの実施形態では、複雑度は、コードに含まれ得るあらゆる部分表現について決定されてよい。
いくつかの実施形態では、複雑度は、特定の部分表現について、その特定の部分表現に含まれ得るパラメータ(例えば、値、定数、変数、演算子、及び関数、等)の数に基づき決定されてよい。それら又は他の実施形態において、パラメータの数は、複雑度閾値と比較されてよい。パラメータの数が複雑度閾値以上であることに応答して、特定の部分表現が複雑度閾値を満足し、簡約されるべきであることが決定されてよい。対照的に、パラメータの数が複雑度閾値に満たないことに応答して、特定の部分表現は複雑度閾値を満足せず、よって、如何なる簡約化も受けないことが決定されてよい。
簡約されるべきである如何なる部分表現も存在しないとの決定に応答して、方法500は、ブロック504からブロック508へ進んでよい。簡約されるべきである1つ以上の部分表現が存在するとの決定に応答して、方法は、ブロック504からブロック506へ進んでよい。ブロック506において、簡約されるべきである部分表現が簡約されてよい。いくつかの実施形態では、適用可能な部分表現は、複雑な表現をより簡単な表現で置換する抽象(abstraction)プロセスによって簡約されてよく、これにおいて、置換表現は複雑度閾値を満足しない。いくつかの実施形態では、置換表現は、同じタイプの全ての表現のために使用され得る一般的な形式を含んでよく、それにより、置換表現は、コードパターンが取得され得るコードの異なる部分にわたって正規化され得る。ブロック506の後に、方法500はブロック508へ進んでよい。
ブロック508において、ブロック502で取得されたコードに含まれているいずれかのオブジェクト(例えば、値、定数、変数、及び関数、等)が正規化されていないかどうかが決定されてよい。正規化されていないオブジェクトは、コード及び対応するプログラムソフトウェアに特有である名称又は識別子を与えられている特定のタイプのオブジェクトを含んでよく、これにおいて、使用される命名規則は一貫して従われない。
正規化されていない如何なるオブジェクトも存在しないとの決定に応答して、方法500は、ブロック508からブロック512へ進んでよい。1つ以上のオブジェクトが正規化されていないとの決定に応答して、方法500は、ブロック508からブロック510へ進んでよい。ブロック510において、正規化されていないオブジェクトが正規化されてよい。いくつかの実施形態では、特定の正規化されていないオブジェクトの正規化は、慣例に従わない又は一貫性のない様態で特にラベルを付され得る特定のオブジェクトを、同じタイプであって、そのタイプの全てのオブジェクトのために使用され得る一般的にラベルを付されたオブジェクトに変えることを含んでよい。例えば、特定の正規化されていないオブジェクトが特定の名称又はラベルを持った整数である場合に、オブジェクトは、全ての整数のために使用され得る一般的な名称又はラベルを持った整数へ変更されてよい。ブロック510の後に、方法500はブロック512へ進んでよい。
ブロック512において、ブロック504、506、508、及び510で正規化され得るコードは、正規化されたコードとして取得されてよい。その上、ブロック512において、ハッシュ関数は、正規化された部分に対応し得るハッシュ値を得るよう、正規化されたコードに適用されてよい。ハッシュ値は、ブロック502で取得されたコードに対応し得るコードパターンを示してよい。例えば、いくつかの例において、コードの2つの異なる部分に対応する同じハッシュ値は、コードのそれら2つの部分が同じコードパターンを含むことを示し得る。いくつかの実施形態では、ブロック514において、ハッシュ値は、ブロック502で取得されたコードのコードパターンとして出力されてよい。
変更、追加、又は省略は、本開示の適用範囲から外れることなしに、方法500に対して行われてよい。例えば、方法500の動作は、異なる順序で実施されてよい。例えば、コードを正規化することに関連した動作は、記載又は図解されているのとは異なる順序で実行されてよく、あるいは、同時に実行されてよい。
その上、又は代替的に、2つ以上の動作は、同時に実行されてよい。更には、説明されているアクション及び動作は、単に例として与えられており、アクション及び動作の一部は、開示されている実施形態の本質から逸脱することなしに、任意であっても、より少ないアクション及び動作へとまとめられても、あるいは、更なるアクション及び動作に拡張されてもよい。例えば、いくつかの実施形態では、ハッシュ関数を計算することに関連した動作は省略されてよい。その上、いくつかの実施形態では、方法500は繰り返し実行されてよく、その場合に、既存のコードの1つのウィンドウが一度に解析され得る。その上、又は代替的に、1つ以上のブロックに関連する1つ以上の動作は、一度に既存のコードの複数のウィンドウに対して実行されてよい。
上述されたように、本開示で記載される実施形態は、以下で更に詳細に説明されるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又汎用のコンピュータ(例えば、図2のプロセッサ250)の使用を含んでよい。更には、上述されたように、本開示で記載される実施形態は、コンピュータ実行可能な命令又はデータ構造を搬送するか又はそれらが記憶されているコンピュータ可読媒体(例えば、図2のメモリ252)を用いて実装されてよい。
本開示で使用されるように、語“モジュール”又は“コンポーネント”は、コンピュータシステムの汎用ハードウェア(例えば、コンピュータ可読媒体、プロセッシングデバイス)において記憶及び/又は実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチン及び/又はモジュール若しくはコンポーネントのアクションを実行するよう構成される特定のハードウェア実装を表し得る。いくつかの実施形態では、本開示で記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで(例えば、別個のスレッドとして)実行するオブジェクト又はプロセスとして実装されてよい。本開示で記載されるシステム及び方法の一部は、ソフトウェア(汎用ハードウェアにおいて記憶及び/又は実行される。)で実装されるものとして概して記載されるが、特定のハードウェア実装、ファームウェア実装、又はそれらの如何なる組み合わせも、可能であって考えられている。本明細書において、“コンピュータエンティティ”は、本開示で先に記載されている如何なるコンピュータシステムであっても、あるいは、コンピュータシステムで実行する如何なるモジュール又はモジュールの組み合わせであってもよい。
一般的に、本明細書内及び添付の請求の範囲内(例えば、添付の請求の範囲の要部)で使用される用語は、一般的に「非限定的な(open)」用語として意図されている(例えば、「含んでいる(including)」という用語は、「・・・を含んでいるが限定されない(including, but not limited to)」と解釈されるべきであり、「有している(having)」という用語は、「少なくとも・・・を有している(having at least)」と解釈されるべきであり、「含む(includes)」という用語は、「・・・を含むが限定されない(includes, but is not limited to)」と解釈されるべきである。)。
加えて、導入されたクレーム記載(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の全て、などを有するものとして意図される。
更には、2つ以上の代替的な項目を提示する如何なる離切語又は語句も、明細書、特許請求の範囲、又は図面のいずれであろうとも、項目のうちの1つ、項目のうちのいずれか、又は両方の項目を含む可能性を意図すると理解されるべきである。例えば、「A又はB」との語句は、A若しくはB、又はA及びBの可能性を含むと理解されるべきである。
ここで挙げられている全ての例及び条件付き語は、当該技術の促進に対して発明者によって寄与される概念及び発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないものとして解釈されるべきである。本発明の実施形態が詳細に記載されてきたが、様々な変更、置換及び代替は、本発明の主旨及び適用範囲から逸脱することなしに行われてよいことが理解されるべきである。
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、
前記欠陥のための修復候補を取得し、
前記修復候補の修復コードパターンを取得し、
複数の既存のソフトウェアプログラムの既存のコードにおける前記修復コードパターンの発生回数を決定し、
前記修復コードパターンの前記発生回数に基づき、前記修復候補を、前記テスト済みソフトウェアプログラムの修復として優先順位付けし、
前記修復候補の前記優先順位付けに従って、前記テスト済みソフトウェアプログラムに対して修復動作を実行する
ことを有する方法。
(付記2)
複数の共通コードパターンを前記既存のコードから取得し、
前記既存のコードにおける前記複数の共通コードパターンの発生回数を決定し、
前記修復コードパターンが前記複数の共通コードパターンの中の特定の共通コードパターンと一致するとの決定に基づき、且つ、前記特定の共通コードパターンの決定された特定の発生回数に基づき、前記修復コードパターンの発生回数を決定する
ことを更に有する、付記1に記載の方法。
(付記3)
前記特定の共通コードパターンを取得することは、
特定の既存のソフトウェアプログラムの特定の既存のコードの部分を取得し、
前記特定の既存のコードの前記部分を正規化し、
前記正規化された部分において前記特定の共通コードパターンにバイアスをかける
ことを含む、付記2に記載の方法。
(付記4)
前記特定の既存のコードの前記部分を正規化することは、前記部分の特にラベルを付されたオブジェクトを、一般的にラベルを付されたオブジェクトへ変更することを含み、
前記特にラベルを付されたオブジェクト及び前記一般的にラベルを付されたオブジェクトは、同じオブジェクトタイプである、
付記3に記載の方法。
(付記5)
前記特定の既存のコードの前記部分を正規化することは、
前記部分の表現の複雑度が複雑度閾値を満足すると決定し、
前記複雑度が前記複雑度閾値を満足すると決定することをに応答して前記表現を簡約する
ことを含む、付記3に記載の方法。
(付記6)
前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、前記正規化された部分を前記特定の共通コードパターンとして使用することを含む、
付記3に記載の方法。
(付記7)
前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、
前記正規化された部分に対応するハッシュ値を得るようハッシュ関数を前記正規化された部分に適用し、
前記ハッシュ値を前記特定の共通コードパターンとして使用する
ことを含む、付記3に記載の方法。
(付記8)
前記修復候補の前記修復コードパターンを取得することは、
前記修復候補の修復コードを正規化し、
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかける
ことを含む、付記1に記載の方法。
(付記9)
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、前記正規化された修復コードを前記修復コードパターンとして使用することを含む、
付記8に記載の方法。
(付記10)
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、
前記正規化された修復コードに対応するハッシュ値を得るようハッシュ関数を前記正規化された修復コードに適用し、
前記ハッシュ値を前記修復コードパターンとして使用する
ことを含む、付記8に記載の方法。
(付記11)
実行されることに応答して、システムに、
テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、
前記欠陥のための修復候補を取得し、
前記修復候補の修復コードパターンを取得し、
複数の既存のソフトウェアプログラムの既存のコードにおける前記修復コードパターンの発生回数を決定し、
前記修復コードパターンの前記発生回数に基づき、前記修復候補を、前記テスト済みソフトウェアプログラムの修復として優先順位付けし、
前記修復候補の前記優先順位付けに従って、前記テスト済みソフトウェアプログラムに対して修復動作を実行する
ことを有する動作を実行させる命令を記憶するよう構成された非一時的なコンピュータ可読記憶媒体。
(付記12)
前記動作は、
複数の共通コードパターンを前記既存のコードから取得し、
前記既存のコードにおける前記複数の共通コードパターンの発生回数を決定し、
前記修復コードパターンが前記複数の共通コードパターンの中の特定の共通コードパターンと一致するとの決定に基づき、且つ、前記特定の共通コードパターンの決定された特定の発生回数に基づき、前記修復コードパターンの発生回数を決定する
ことを更に有する、付記11に記載のコンピュータ可読記憶媒体。
(付記13)
前記特定の共通コードパターンを取得することは、
特定の既存のソフトウェアプログラムの特定の既存のコードの部分を取得し、
前記特定の既存のコードの前記部分を正規化し、
前記正規化された部分において前記特定の共通コードパターンにバイアスをかける
ことを含む、付記12に記載のコンピュータ可読記憶媒体。
(付記14)
前記特定の既存のコードの前記部分を正規化することは、前記部分の特にラベルを付されたオブジェクトを、一般的にラベルを付されたオブジェクトへ変更することを含み、
前記特にラベルを付されたオブジェクト及び前記一般的にラベルを付されたオブジェクトは、同じオブジェクトタイプである、
付記13に記載のコンピュータ可読記憶媒体。
(付記15)
前記特定の既存のコードの前記部分を正規化することは、
前記部分の表現の複雑度が複雑度閾値を満足すると決定し、
前記複雑度が前記複雑度閾値を満足すると決定することをに応答して前記表現を簡約する
ことを含む、付記13に記載のコンピュータ可読記憶媒体。
(付記16)
前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、前記正規化された部分を前記特定の共通コードパターンとして使用することを含む、
付記13に記載のコンピュータ可読記憶媒体。
(付記17)
前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、
前記正規化された部分に対応するハッシュ値を得るようハッシュ関数を前記正規化された部分に適用し、
前記ハッシュ値を前記特定の共通コードパターンとして使用する
ことを含む、付記13に記載のコンピュータ可読記憶媒体。
(付記18)
前記修復候補の前記修復コードパターンを取得することは、
前記修復候補の修復コードを正規化し、
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかける
ことを含む、付記11に記載のコンピュータ可読記憶媒体。
(付記19)
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、前記正規化された修復コードを前記修復コードパターンとして使用することを含む、
付記18に記載のコンピュータ可読記憶媒体。
(付記20)
前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、
前記正規化された修復コードに対応するハッシュ値を得るようハッシュ関数を前記正規化された修復コードに適用し、
前記ハッシュ値を前記修復コードパターンとして使用する
ことを含む、付記18に記載のコンピュータ可読記憶媒体。
100 環境
104 被試験コード
106 修復モジュール
108 変更された被試験コード
111 テストスイート
112 修復テンプレート
114 共通コードパターンデータベース
202 コンピュータシステム
250 プロセッサ
252 メモリ
254 データストレージ

Claims (20)

  1. テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、
    前記欠陥のための修復候補を取得し、
    前記修復候補の修復コードパターンを取得し、
    複数の既存のソフトウェアプログラムの既存のコードにおける前記修復コードパターンの発生回数を決定し、
    前記修復コードパターンの前記発生回数に基づき、前記修復候補を、前記テスト済みソフトウェアプログラムの修復として優先順位付けし、
    前記修復候補の前記優先順位付けに従って、前記テスト済みソフトウェアプログラムに対して修復動作を実行する
    ことを有する方法。
  2. 複数の共通コードパターンを前記既存のコードから取得し、
    前記既存のコードにおける前記複数の共通コードパターンの発生回数を決定し、
    前記修復コードパターンが前記複数の共通コードパターンの中の特定の共通コードパターンと一致するとの決定に基づき、且つ、前記特定の共通コードパターンの決定された特定の発生回数に基づき、前記修復コードパターンの発生回数を決定する
    ことを更に有する、請求項1に記載の方法。
  3. 前記特定の共通コードパターンを取得することは、
    特定の既存のソフトウェアプログラムの特定の既存のコードの部分を取得し、
    前記特定の既存のコードの前記部分を正規化し、
    前記正規化された部分において前記特定の共通コードパターンにバイアスをかける
    ことを含む、請求項2に記載の方法。
  4. 前記特定の既存のコードの前記部分を正規化することは、前記部分の特にラベルを付されたオブジェクトを、一般的にラベルを付されたオブジェクトへ変更することを含み、
    前記特にラベルを付されたオブジェクト及び前記一般的にラベルを付されたオブジェクトは、同じオブジェクトタイプである、
    請求項3に記載の方法。
  5. 前記特定の既存のコードの前記部分を正規化することは、
    前記部分の表現の複雑度が複雑度閾値を満足すると決定し、
    前記複雑度が前記複雑度閾値を満足すると決定することをに応答して前記表現を簡約する
    ことを含む、請求項3に記載の方法。
  6. 前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、前記正規化された部分を前記特定の共通コードパターンとして使用することを含む、
    請求項3に記載の方法。
  7. 前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、
    前記正規化された部分に対応するハッシュ値を得るようハッシュ関数を前記正規化された部分に適用し、
    前記ハッシュ値を前記特定の共通コードパターンとして使用する
    ことを含む、請求項3に記載の方法。
  8. 前記修復候補の前記修復コードパターンを取得することは、
    前記修復候補の修復コードを正規化し、
    前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかける
    ことを含む、請求項1に記載の方法。
  9. 前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、前記正規化された修復コードを前記修復コードパターンとして使用することを含む、
    請求項8に記載の方法。
  10. 前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、
    前記正規化された修復コードに対応するハッシュ値を得るようハッシュ関数を前記正規化された修復コードに適用し、
    前記ハッシュ値を前記修復コードパターンとして使用する
    ことを含む、請求項8に記載の方法。
  11. 実行されることに応答して、システムに、
    テストスイートを用いてテスト済みのソフトウェアプログラムにおいて欠陥の欠陥位置を特定し、
    前記欠陥のための修復候補を取得し、
    前記修復候補の修復コードパターンを取得し、
    複数の既存のソフトウェアプログラムの既存のコードにおける前記修復コードパターンの発生回数を決定し、
    前記修復コードパターンの前記発生回数に基づき、前記修復候補を、前記テスト済みソフトウェアプログラムの修復として優先順位付けし、
    前記修復候補の前記優先順位付けに従って、前記テスト済みソフトウェアプログラムに対して修復動作を実行する
    ことを有する動作を実行させる命令を記憶するよう構成された非一時的なコンピュータ可読記憶媒体。
  12. 前記動作は、
    複数の共通コードパターンを前記既存のコードから取得し、
    前記既存のコードにおける前記複数の共通コードパターンの発生回数を決定し、
    前記修復コードパターンが前記複数の共通コードパターンの中の特定の共通コードパターンと一致するとの決定に基づき、且つ、前記特定の共通コードパターンの決定された特定の発生回数に基づき、前記修復コードパターンの発生回数を決定する
    ことを更に有する、請求項11に記載のコンピュータ可読記憶媒体。
  13. 前記特定の共通コードパターンを取得することは、
    特定の既存のソフトウェアプログラムの特定の既存のコードの部分を取得し、
    前記特定の既存のコードの前記部分を正規化し、
    前記正規化された部分において前記特定の共通コードパターンにバイアスをかける
    ことを含む、請求項12に記載のコンピュータ可読記憶媒体。
  14. 前記特定の既存のコードの前記部分を正規化することは、前記部分の特にラベルを付されたオブジェクトを、一般的にラベルを付されたオブジェクトへ変更することを含み、
    前記特にラベルを付されたオブジェクト及び前記一般的にラベルを付されたオブジェクトは、同じオブジェクトタイプである、
    請求項13に記載のコンピュータ可読記憶媒体。
  15. 前記特定の既存のコードの前記部分を正規化することは、
    前記部分の表現の複雑度が複雑度閾値を満足すると決定し、
    前記複雑度が前記複雑度閾値を満足すると決定することをに応答して前記表現を簡約する
    ことを含む、請求項13に記載のコンピュータ可読記憶媒体。
  16. 前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、前記正規化された部分を前記特定の共通コードパターンとして使用することを含む、
    請求項13に記載のコンピュータ可読記憶媒体。
  17. 前記正規化された部分において前記特定の共通コードパターンにバイアスをかけることは、
    前記正規化された部分に対応するハッシュ値を得るようハッシュ関数を前記正規化された部分に適用し、
    前記ハッシュ値を前記特定の共通コードパターンとして使用する
    ことを含む、請求項13に記載のコンピュータ可読記憶媒体。
  18. 前記修復候補の前記修復コードパターンを取得することは、
    前記修復候補の修復コードを正規化し、
    前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかける
    ことを含む、請求項11に記載のコンピュータ可読記憶媒体。
  19. 前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、前記正規化された修復コードを前記修復コードパターンとして使用することを含む、
    請求項18に記載のコンピュータ可読記憶媒体。
  20. 前記正規化された修復コードにおいて前記修復コードパターンにバイアスをかけることは、
    前記正規化された修復コードに対応するハッシュ値を得るようハッシュ関数を前記正規化された修復コードに適用し、
    前記ハッシュ値を前記修復コードパターンとして使用する
    ことを含む、請求項18に記載のコンピュータ可読記憶媒体。
JP2018139293A 2017-11-24 2018-07-25 自動化されたソフトウェアプログラム修復候補の選択 Active JP7110789B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/822106 2017-11-24
US15/822,106 US10496459B2 (en) 2017-11-24 2017-11-24 Automated software program repair candidate selection

Publications (2)

Publication Number Publication Date
JP2019096292A true JP2019096292A (ja) 2019-06-20
JP7110789B2 JP7110789B2 (ja) 2022-08-02

Family

ID=66633198

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018139293A Active JP7110789B2 (ja) 2017-11-24 2018-07-25 自動化されたソフトウェアプログラム修復候補の選択

Country Status (2)

Country Link
US (1) US10496459B2 (ja)
JP (1) JP7110789B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7456843B2 (ja) 2020-05-08 2024-03-27 株式会社日立製作所 プログラム修正装置、プログラム修正方法、および、プログラム修正プログラム

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761961B2 (en) * 2018-12-21 2020-09-01 Fujitsu Limited Identification of software program fault locations
US10970200B2 (en) * 2019-01-11 2021-04-06 Microsoft Technology Licensing, Llc Test result triage for a failed code validation
US11080179B2 (en) * 2019-04-24 2021-08-03 United States Of America As Represented By The Secretary Of The Navy Device, system, and method for automatically detecting and repairing a bug in a computer program using a genetic algorithm
CN112860496A (zh) * 2019-11-27 2021-05-28 华为技术有限公司 故障修复操作推荐方法、装置及存储介质
US11099817B1 (en) 2020-10-01 2021-08-24 Fujitsu Limited Generation of software program repair examples

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004185063A (ja) * 2002-11-29 2004-07-02 Hitachi Information Systems Ltd デバッグ支援方法
JP2008020972A (ja) * 2006-07-11 2008-01-31 Hitachi Ltd ソフトウエア解析システム
JP2008250914A (ja) * 2007-03-30 2008-10-16 Canon Software Inc プログラム修正装置及び方法、並びにプログラム
JP2017102912A (ja) * 2015-12-02 2017-06-08 富士通株式会社 機械学習ベースのソフトウェアプログラム修復
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296605B2 (en) * 2008-12-10 2012-10-23 Sap Ag Systems and methods for correcting software errors
US8578213B2 (en) * 2011-04-27 2013-11-05 Microsoft Corporation Analyzing software performance issues
EP2829970B1 (en) * 2013-07-26 2017-02-01 Fujitsu Limited A method and apparatus for porting source code
US9852041B2 (en) * 2013-09-27 2017-12-26 Microsoft Technology Licensing, Llc Systems and methods for categorizing exceptions and logs
US10152406B2 (en) 2015-08-25 2018-12-11 Fujistu Limited Software program repair
US10289536B2 (en) * 2016-08-31 2019-05-14 Synopsys, Inc. Distinguishing public and private code in testing environments

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004185063A (ja) * 2002-11-29 2004-07-02 Hitachi Information Systems Ltd デバッグ支援方法
JP2008020972A (ja) * 2006-07-11 2008-01-31 Hitachi Ltd ソフトウエア解析システム
JP2008250914A (ja) * 2007-03-30 2008-10-16 Canon Software Inc プログラム修正装置及び方法、並びにプログラム
JP2017102912A (ja) * 2015-12-02 2017-06-08 富士通株式会社 機械学習ベースのソフトウェアプログラム修復
JP2017151977A (ja) * 2016-02-23 2017-08-31 富士通株式会社 ソフトウエアプログラムの修復のための方法及びプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7456843B2 (ja) 2020-05-08 2024-03-27 株式会社日立製作所 プログラム修正装置、プログラム修正方法、および、プログラム修正プログラム

Also Published As

Publication number Publication date
US20190163619A1 (en) 2019-05-30
JP7110789B2 (ja) 2022-08-02
US10496459B2 (en) 2019-12-03

Similar Documents

Publication Publication Date Title
JP7110789B2 (ja) 自動化されたソフトウェアプログラム修復候補の選択
US10296447B2 (en) Automated software program repair
US10152406B2 (en) Software program repair
US10133657B2 (en) Textual similarity based software program repair
US10606570B2 (en) Representing software with an abstract code graph
US8621441B2 (en) System and method for software immunization based on static and dynamic analysis
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
US10664383B2 (en) Automated software program repair of similar code snippets
US11237943B2 (en) Generating inputs for computer-program testing
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
US10268572B2 (en) Interactive software program repair
US11586534B2 (en) Identifying flaky tests
US10180897B2 (en) Automated software program repair
JP7384054B2 (ja) 自動化されたソフトウェアプログラム修復
US10761962B1 (en) Automated software program repair
US10853051B2 (en) Automated candidate repair patch generation
US11740895B2 (en) Generation of software program repair explanations
US11119889B1 (en) Automated software program repair
CN113971042A (zh) 自动化软件程序修复
JP2021124852A (ja) 修正パターンのデータ駆動型合成
CN114265718A (zh) 软件程序修复示例的生成

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210408

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220323

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220405

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220421

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220621

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220704

R150 Certificate of patent or registration of utility model

Ref document number: 7110789

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150