JP6878933B2 - ソフトウエアプログラムの修復のための方法及びプログラム - Google Patents

ソフトウエアプログラムの修復のための方法及びプログラム Download PDF

Info

Publication number
JP6878933B2
JP6878933B2 JP2017022071A JP2017022071A JP6878933B2 JP 6878933 B2 JP6878933 B2 JP 6878933B2 JP 2017022071 A JP2017022071 A JP 2017022071A JP 2017022071 A JP2017022071 A JP 2017022071A JP 6878933 B2 JP6878933 B2 JP 6878933B2
Authority
JP
Japan
Prior art keywords
parameter
score
repair
candidates
candidate
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.)
Active
Application number
JP2017022071A
Other languages
English (en)
Other versions
JP2017151977A (ja
Inventor
ヒロアキ ヨシダ
ヒロアキ ヨシダ
リポン クマル サハ
リポン クマル サハ
ムクル アール プラサド
ムクル アール プラサド
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 JP2017151977A publication Critical patent/JP2017151977A/ja
Application granted granted Critical
Publication of JP6878933B2 publication Critical patent/JP6878933B2/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/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/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24578Query processing with adaptation to user needs using ranking
    • 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/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

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

Claims (6)

  1. プロセッサが、
    テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、複数のパラメータを含むメソッド呼び出しを特定し、
    前記メソッド呼び出しにより呼び出されるメソッドの複数の他のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
    前記メソッド呼び出しの各パラメータ位置について、前記メソッド呼び出しのパラメータと、特定された前記複数の他のメソッド呼び出しの各々のパラメータとの間で、パラメータテキスト類似度スコアを決定し、当該パラメータテキスト類似度スコアを平均することで位置スコアを決定し、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、当該パラメータ置換候補のパラメータ位置における位置スコアを用いてスコアを算出し、
    前記複数のパラメータの各々についての前記1又は複数のパラメータ置換候補を、前記スコアに基づき分類し、
    分類に基づき、前記複数のパラメータの各々についての前記1又は複数のパラメータ置換候補から特定の修復候補を選択し、
    前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
    処理を実行する方法。
  2. 前記パラメータテキスト類似度スコアを決定する処理において、
    最長共通部分列の決定に基づき前記パラメータテキスト類似度スコアを決定する
    請求項1記載の方法。
  3. 前記スコアを算出する処理が、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、テキスト類似度に基づく置換スコアを算出し、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、当該パラメータ置換候補の置換スコアと当該パラメータ置換候補のパラメータ位置における位置スコアとを用いて前記スコアを算出する
    処理を含む請求項1又は2記載の方法。
  4. プロセッサに、
    テストプログラムセットを用いて、ソフトウエアプログラムの不具合位置における、複数のパラメータを含むメソッド呼び出しを特定し、
    前記メソッド呼び出しにより呼び出されるメソッドの複数の他のメソッド呼び出しを、前記ソフトウエアプログラムにおいて特定し、
    前記メソッド呼び出しの各パラメータ位置について、前記メソッド呼び出しのパラメータと、特定された前記複数の他のメソッド呼び出しの各々のパラメータとの間で、パラメータテキスト類似度スコアを決定し、当該パラメータテキスト類似度スコアを平均することで位置スコアを決定し、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、当該パラメータ置換候補のパラメータ位置における位置スコアを用いてスコアを算出し、
    前記複数のパラメータの各々についての前記1又は複数のパラメータ置換候補を、前記スコアに基づき分類し、
    分類に基づき、前記複数のパラメータの各々についての前記1又は複数のパラメータ置換候補から特定の修復候補を選択し、
    前記特定の修復候補の選択に基づき、前記不具合位置において前記特定の修復候補を適用する、
    処理を実行させるプログラム。
  5. 前記パラメータテキスト類似度スコアを決定する処理において、
    最長共通部分列の決定に基づき前記パラメータテキスト類似度スコアを決定する
    請求項4記載のプログラム。
  6. 前記スコアを算出する処理が、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、テキスト類似度に基づく置換スコアを算出し、
    前記複数のパラメータの各々についての1又は複数のパラメータ置換候補の各々に対して、当該パラメータ置換候補の置換スコアと当該パラメータ置換候補のパラメータ位置における位置スコアとを用いて前記スコアを算出する
    処理を含む請求項4又は5記載のプログラム。
JP2017022071A 2016-02-23 2017-02-09 ソフトウエアプログラムの修復のための方法及びプログラム Active JP6878933B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/051,503 2016-02-23
US15/051,503 US10133657B2 (en) 2016-02-23 2016-02-23 Textual similarity based software program repair

Publications (2)

Publication Number Publication Date
JP2017151977A JP2017151977A (ja) 2017-08-31
JP6878933B2 true JP6878933B2 (ja) 2021-06-02

Family

ID=59629965

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017022071A Active JP6878933B2 (ja) 2016-02-23 2017-02-09 ソフトウエアプログラムの修復のための方法及びプログラム

Country Status (2)

Country Link
US (1) US10133657B2 (ja)
JP (1) JP6878933B2 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10180897B2 (en) * 2016-09-26 2019-01-15 Fujitsu Limited Automated software program repair
US10678673B2 (en) * 2017-07-12 2020-06-09 Fujitsu Limited Software program fault localization
US10268572B2 (en) * 2017-08-03 2019-04-23 Fujitsu Limited Interactive software program repair
US10496459B2 (en) * 2017-11-24 2019-12-03 Fujitsu Limited Automated software program repair candidate selection
US10521224B2 (en) 2018-02-28 2019-12-31 Fujitsu Limited Automatic identification of relevant software projects for cross project learning
JP2019153056A (ja) * 2018-03-02 2019-09-12 富士ゼロックス株式会社 情報処理装置、及び情報処理プログラム
US10664383B2 (en) 2018-08-22 2020-05-26 Fujitsu Limited Automated software program repair of similar code snippets
US10761961B2 (en) * 2018-12-21 2020-09-01 Fujitsu Limited Identification of software program fault locations
RU2739866C2 (ru) * 2018-12-28 2020-12-29 Акционерное общество "Лаборатория Касперского" Способ обнаружения совместимых средств для систем с аномалиями
US10853051B2 (en) * 2019-02-05 2020-12-01 Fujitsu Limited Automated candidate repair patch generation
US10782941B1 (en) 2019-06-20 2020-09-22 Fujitsu Limited Refinement of repair patterns for static analysis violations in software programs
JP7423497B2 (ja) 2020-12-01 2024-01-29 株式会社日立製作所 計算機及びソフトウェアの修正箇所の選択方法
KR102605212B1 (ko) * 2021-10-22 2023-11-24 슈어소프트테크주식회사 동일 위치에 대한 다수의 패치들 중 최종 패치를 선택하는 방법 및 최종 패치 선택 모듈

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63245738A (ja) * 1987-04-01 1988-10-12 Nec Corp プログラム未定義デ−タ項目の自動修正方式
JPH01154256A (ja) * 1987-12-11 1989-06-16 Hitachi Ltd プログラムのエラー位置検出方法
JPH05173844A (ja) * 1991-12-19 1993-07-13 Nec Corp コーディングミス修正方式
JP2636720B2 (ja) * 1993-12-08 1997-07-30 日本電気株式会社 コーディング時の入力文字列修正装置
WO2009104268A1 (ja) * 2008-02-21 2009-08-27 富士通株式会社 パッチ候補選択装置、パッチ候補選択プログラムおよびパッチ候補選択方法
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
JP5200719B2 (ja) * 2008-07-15 2013-06-05 富士通株式会社 Webアプリケーション検査プログラム、テスト実行装置、およびテスト実行方法
JP5301411B2 (ja) * 2009-10-16 2013-09-25 日本電信電話株式会社 類似性算出装置、類似性算出方法、類似性算出プログラム、及び類似性解析装置
US8645761B2 (en) * 2011-01-13 2014-02-04 International Business Machines Corporation Precise fault localization
JP2013003664A (ja) * 2011-06-13 2013-01-07 Sony Corp 情報処理装置および方法
JP5578625B2 (ja) * 2011-06-27 2014-08-27 Necソリューションイノベータ株式会社 プログラム分析装置、プログラム分析方法、及びプログラム
US20130339929A1 (en) * 2012-06-14 2013-12-19 Microsoft Corporation Program repair
US10108526B2 (en) * 2012-11-27 2018-10-23 Purdue Research Foundation Bug localization using version history
US9665467B2 (en) * 2015-06-30 2017-05-30 International Business Machines Corporation Error and solution tracking in a software development environment

Also Published As

Publication number Publication date
JP2017151977A (ja) 2017-08-31
US20170242782A1 (en) 2017-08-24
US10133657B2 (en) 2018-11-20

Similar Documents

Publication Publication Date Title
JP6878933B2 (ja) ソフトウエアプログラムの修復のための方法及びプログラム
US10296447B2 (en) Automated software program repair
JP7095408B2 (ja) ソフトウェアプログラムフォールト位置特定
JP6787046B2 (ja) 機械学習ベースのソフトウェアプログラム修復
JP7110789B2 (ja) 自動化されたソフトウェアプログラム修復候補の選択
US8621441B2 (en) System and method for software immunization based on static and dynamic analysis
JP6627658B2 (ja) ソフトウェアプログラムを修復する方法、記憶媒体及びシステム
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
JP6891703B2 (ja) 自動ソフトウェアプログラム修復
JP7404839B2 (ja) ソフトウェアプログラム不良位置の識別
US20200065226A1 (en) Automated software program repair of similar code snippets
JP7070195B2 (ja) インタラクティブなソフトウェアプログラムの修復
CN109643271B (zh) 识别不稳定测试
JP7056139B2 (ja) ソフトウェアプログラム修復のためのメソッド呼び出し合成
JP6416588B2 (ja) ソースコード検証システム
JP7384054B2 (ja) 自動化されたソフトウェアプログラム修復
JP2020129372A (ja) 自動化されたソフトウェアプログラム修復
JP2020126603A (ja) 自動候補修正パッチ生成
RU2458386C1 (ru) Способ определения ошибочного использования памяти
Spiridonov et al. MODEL CORRECT OPERATION OF COMPUTER PROGRAMS WITH MEMORY
CN112988563A (zh) 污点动态分析方法和装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20191112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201117

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210104

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: 20210330

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210412

R150 Certificate of patent or registration of utility model

Ref document number: 6878933

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150