JP2022078962A - エラーに関連するコードの行の自動識別 - Google Patents
エラーに関連するコードの行の自動識別 Download PDFInfo
- Publication number
- JP2022078962A JP2022078962A JP2021182606A JP2021182606A JP2022078962A JP 2022078962 A JP2022078962 A JP 2022078962A JP 2021182606 A JP2021182606 A JP 2021182606A JP 2021182606 A JP2021182606 A JP 2021182606A JP 2022078962 A JP2022078962 A JP 2022078962A
- Authority
- JP
- Japan
- Prior art keywords
- keyword
- elements
- code
- line
- text
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/33—Intelligent editors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】 エラーに関連するコードの行の自動識別を提供する。【解決手段】 動作は、ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することを含み得、バグのあるコードスニペットは、エラーとコードの複数の行とを含む。動作は、質問に対する回答からテキストを取得することと、テキストからキーワードを識別することをさらに含み得る。さらに、動作は、複数の行からの特定の行に、キーワードの1つ以上が特定の行の1つ以上の要素に対応することに基づいて、エラーに関連するものとしてマーク付けすることを含み得る。さらに、動作は、特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することを含み得る。【選択図】 図1
Description
本開示で論じられる実施形態は、エラーに関連するコードの行の自動化された識別に関する。
ソフトウェア開発者フォーラムなどのディスカッションフォーラムは、ソフトウェアプログラムにおけるエラー(バグ又はエラーとも呼ばれる)を直すことなどのソフトウェアプログラムの開発に関連する自然言語記述及びコードスニペットの豊富なハイブリッド知識ベースを提示している。ソフトウェア開発ツールは、フォーラムの投稿を分析して他のソフトウェアプログラムにおけるエラーの訂正に関連する情報を識別するために、機械分析動作を実行するように構成されることがある。
本開示において請求される主題事項は、何らかの欠点を解決する、又は上記などの環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、本開示に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される
動作は、ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することを含み得、バグのあるコードスニペットは、エラーとコードの複数の行とを含む。動作は、質問に対する回答からテキストを取得することと、テキストからキーワードを識別することをさらに含み得る。さらに、動作は、複数の行からの特定の行に、キーワードの1つ以上が特定の行の1つ以上の要素に対応することに基づいて、エラーに関連するものとしてマーク付けすることを含み得る。さらに、動作は、特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することを含み得る。
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。
前述の一般的な説明及び以下の詳細な説明の双方が例として与えられており、説明的であり、請求される発明の限定ではない。
例示的な実施形態が、添付図面の使用を通してさらなる特定性及び詳細と共に記載され、説明される。
エラーに関連するコードの行の自動化された識別に関連する一例示的な環境を表す図である。
エラーに関連するコード行を識別するために使用され得る一例示的なコンピューティングシステムのブロック図を示す。
エラーに関連するコード行を識別する一例示的な方法のフローチャートである。
エラーに関連するコード行を識別するのを助けるためのテキスト内のキーワードを識別する一例示的な方法のフローチャートである。
コードスニペットの行の構造及び内容を識別する一例示的な方法のフローチャートである。
バグのあるコードスニペットのエラーに関連する、バグのあるコードスニペットの行を識別する一例示的な方法のフローチャートである。
本開示に記載されるいくつかの実施形態は、開発者フォーラムの投稿からエラー(バグ又は違反とも呼ばれる)に関連するコードの行を識別する方法及びシステムに関する。特に、開発者フォーラムは、ソフトウェアプログラム及び開発されているソフトウェアプログラムに存在し得る問題を議論するために使用され得る任意のディスカッションフォーラム(例えば、オンラインディスカッションフォーラム)を含み得る。フォーラムのユーザは、バグのあるコードスニペット(「バグのあるスニペット(buggy snippet)」)で見つかったエラーを訂正する方法について質問をフォーラムに投稿することができる。次いで、1以上の他のユーザが、エラーを訂正する方法を説明する回答をフォーラムに投稿することができる。ソフトウェア開発ツールは、質問投稿及び対応する回答投稿を分析して、バグのあるスニペットに含まれるのと同じタイプのエラーに関連するソフトウェアパッチを識別及び生成するように構成され得る。しかしながら、バグのあるスニペットは、バグのあるスニペットに含まれるエラーに関連しないコードの行を含むことがある。これらの非関連行は、パッチの識別及び/又は生成において非効率性をもたらす可能性がある。さらに、非関連行は、生成されたパッチをより有効性のないものにする結果をもたらす可能性がある。本開示において、バグのあるスニペットの「関連する行」への参照は、バグのあるスニペットのエラーに関連する行を指すことができる。さらに、バグのあるスニペットの「非関連行」への参照は、バグのあるスニペットのエラーに非関連の行を指すことができる。行は、その行が何らかの方法でエラーに寄与することに応答して、エラーに「関連する」とみなされ得る。さらに、行は、その行がエラーに何ら寄与しないことに応答して、「非関連」とみなされ得る。
本開示の1つ以上の実施形態によれば、動作は、開発者フォーラムに投稿され得る質問投稿のバグのあるスニペットを抽出するために実行され得る。さらに、動作は、バグのあるスニペットのどの行がバグのあるスニペットのエラーに関連し得るかを識別するために実行され得る。特に、回答投稿は、バグのあるスニペットをそれに含まれるエラーを訂正するために変更する方法についての記述を含むことがある。回答投稿は、自然言語でその中にコード要素が含まれた状態で書かれることがある。さらに、回答投稿は、バグのあるスニペットのどの行がエラーに関連するかについての手がかりを提供することがある。
本明細書に開示される1つ以上の実施形態によれば、したがって、質問投稿に対応する1つ以上の回答投稿に対して自然言語処理が実行され得る。自然言語処理は、質問投稿のバグのあるスニペットのどの行が対応するエラーに関連するかを示す回答投稿のテキストを識別するために使用することができる。いくつかの実施形態において、バグのあるスニペットは、エラーの理解及び/又はエラーの訂正を容易にするのを助けるためにどの行が関連するかを示すために注釈付けされ(annotated)てもよい。これら又は他の実施形態において、バグのあるスニペットは、エラーに関連するものとして識別又は注釈付けされない行を除去するために切り取られ(pruned)てもよい。さらに又は代わりに、切り取られたバグのあるスニペットを使用して、バグのあるスニペット全体が使用された場合より効果的なソフトウェア修復を生成してもよい。
このように、本開示の1つ以上の実施形態によれば、ソフトウェア開発の技術分野は、コンピューティングシステムが、対応するエラーに関連するバグのあるスニペットの部分をより良く識別することができるようにコンピュータシステムを構成することにより、改善され得る。コンピュータシステムは、エラーに関連しないバグのあるスニペットの行を無視することにより、バグのあるスニペットのエラーに類似する他のエラーを修復するためのより良いパッチを生成することもできる。さらに又は代わりに、コンピュータシステムは、開発者がエラーの原因をより良く理解するのを助けるために、エラーに関連するバグのあるスニペットの行に注釈付けすることにより、開発者に役立つ情報を提供することができる。
本開示の実施形態は、添付の図面を参照して説明される。
図1は、バグのあるコードスニペットのエラーに関連する、バグのあるコードスニペットのコードの行の自動化された識別に関する一例示的な環境100を表す図である。環境100は、本開示に記載される少なくとも1つの実施形態に従って配置され得る。環境100は、開発者フォーラム102及び分析モジュール112を含み得る。
開発者フォーラム102は、アイデアを交換するためにソフトウェアプログラム開発者により使用され得る任意の適用可能なディスカッションフォーラムを含むことができる。いくつかの実施形態において、開発者フォーラムは、インターネット上の任意の適用可能なウェブサイトを含み得る1つ以上のウェブサイト上にホストされ得る。代わりに又はさらに、いくつかの実施形態において、ウェブサイトは、内部のリポジトリ又はリソース、例えば内部イントラネットサイト上の文書のコレクションを含んでもよい。
開発者フォーラム102は、ユーザが質問を投稿でき、他のユーザが質問に対する対応する回答を投稿できるフォーラムであってよい。例えば、あるユーザが、ソフトウェアプログラムのバグのあるコードスニペット108(「バグのあるスニペット108」)を含み得る質問104(「質問投稿104」)を投稿することができる。バグのあるスニペット108は、エラーを含むソフトウェアプログラムのコードの行を含むことができ、質問投稿104は、エラーを修復する際の支援を求めることができる。さらに、別のユーザが、バグのあるスニペット108のエラーを訂正する方法を説明するテキスト110を含む回答106(「回答投稿106」)を投稿することができる。テキスト110は、自然言語(例えば、人間により使用される言語)及び/又はコードマークアップ(例えば、コードの行に含まれるテキスト)を含む、テキスト文字列を含むことができる。上述したように、いくつかの例において、バグのあるスニペット108は、エラーに非関連であるコードの行と、エラーに関連する他のものとを含み得る。さらに、テキスト110は、バグのあるスニペットのどの行がエラーに関連し得るかを示す情報を提供することができる。
分析モジュール112は、コンピューティングシステムがテキスト110からバグのあるスニペット108の関連する行を識別することに関連する1つ以上の動作を実行することを可能にするように構成されたコード及びルーチンを含んでもよい。さらに又は代わりに、分析モジュール112は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行し又はその実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実装されてもよい。いくつかの他の例において、分析モジュール112は、ハードウェア及びソフトウェアの組み合わせを使用して実装されてもよい。本開示において、分析モジュール112により実行されるものとして記載された動作は、分析モジュール112が実行するように構成されるか又は対応するシステムに実行するよう指示するように構成された動作を含んでもよい。
分析モジュール112は、開発者フォーラム102にアクセスし、開発者フォーラム102の投稿からテキストを抽出するように構成され得る。例えば、分析モジュール112は、質問投稿104からバグのあるスニペット108を取得し、回答投稿からテキスト110を取得するように構成されてもよい。いくつかの実施形態において、分析モジュール112は、テキストを取得するために、開発者フォーラム102をホストするウェブサイトにアクセスするために使用され得る任意の適切なネットワークに通信上結合され得る。
以下でさらに詳細に論じるように、分析モジュール112は、テキスト110からキーワードを識別するように構成され得る。キーワードは、バグのあるスニペット108の要素に対応し得る特定のタイプの単語又は句を形成する文字の文字列を含み得る。例えば、テキスト110の名詞及び動詞などの特定の品詞が、他の品詞より多く、バグのあるスニペット108の要素に対応し得る。このように、いくつかの実施形態において、キーワードは、名詞、名詞句、動詞、及び/又は動詞句を含んでもよい。さらに又は代わりに、コードに従ってフォーマットされた(formatted)テキスト110のテキスト文字列(「コードマークアップ(code markup)」と呼ばれる)が、テキスト110内の他のタイプのテキスト文字列より、バグのあるスニペット108の要素に対応する可能性も高い。したがって、いくつかの実施形態において、キーワードは、「コードマークアップ」として識別される1つ以上のテキスト文字列を含んでもよい。
これら又は他の実施形態において、分析モジュール112は、識別されたキーワードの1つ以上がバグのあるスニペット108の行のうち各々の1つ以上の要素に対応するかどうかを決定するように構成され得る。キーワードが行の要素に対応することに応答して、分析モジュール112は、対応する行をバグのあるスニペット108のエラーに関連するものとして識別することができる。これら又は他の実施形態において、分析モジュール112は、バグのあるスニペット108においてそのようなものとして識別された関連する行の1つ以上にマーク付けして、マーク付けされたバグのあるスニペット114を生成するように構成されてもよい。いくつかの実施形態において、分析モジュール112は、関連する行の全てをマーク付けするように構成されてもよい。図3、図4、図5、及び図6それぞれに関して以下でさらに詳細に論じられる方法300、400、500、及び600は、マーク付けされたバグのあるスニペット114を生成するために分析モジュール112により実行され得る動作の例を提供する。
本開示の範囲から逸脱することなく、図1に修正、追加、又は省略がなされ得る。例えば、環境100は、本開示において図示及び説明されたものより多くの又は少ない要素を含んでもよい。
代わりに又はさらに、いくつかの実施形態において、分析モジュール112及び分析モジュール112に対して論じられた動作は、単一のデバイスにより実行されてもよく、あるいは異なるシステムにわたり分散されてもよい。さらに、分析モジュール112、又は別のシステム若しくはモジュールは、マーク付けされたバグのあるスニペット114に基づいて1つ以上の修復動作を実行するように構成されてもよく、いくつかの例示的な修復動作が、図3に関して以下でさらに詳細に論じられる。
図2は、本開示の少なくとも1つの実施形態による、ソフトウェアパッチを生成するために使用され得る一例示的なコンピューティングシステム202のブロック図を示す。コンピューティングシステム202は、いくつかの実施形態において、図1の分析モジュール112に関連づけられた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はプログラム命令を実行することができる。
例えば、いくつかの実施形態において、バグのあるコードスニペットの関連する行を識別するように構成されたモジュール(例えば、図1の分析モジュール112)が、プログラム命令としてデータ記憶装置254に含まれてもよい。プロセッサ250は、データ記憶装置254からモジュールのプログラム命令を取り出すことができ、モジュールのプログラム命令をメモリ252にロードすることができる。モジュールのプログラム命令がメモリ252にロードされた後、プロセッサ250はプログラム命令を実行することができ、それにより、コンピューティングシステムは、命令により指示されるとおりモジュールに関連づけられた動作を実施することができる。
メモリ252及びデータ記憶装置254は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能記憶媒体を含んでもよい。そのようなコンピュータ読取可能記憶媒体は、プロセッサ250などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体を含んでもよい。限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、コンパクトディスク読取専用メモリ(CD‐ROM)若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令又はデータ構造の形式で特定のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、有形の又は非一時的なコンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ250に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
本開示の範囲から逸脱することなく、コンピューティングシステム202に修正、追加、又は省略がなされ得る。例えば、いくつかの実施形態において、コンピューティングシステム202は、明示的に図示又は説明されない可能性のある任意の数の他のコンポーネントを含んでもよい。
図3は、本開示に記載される少なくとも1つの実施形態による、エラーに関連するコード行を識別する一例示的な方法300のフローチャートである。方法300は、任意の適切なシステム、装置、又はデバイスにより実行することができる。例として、図1の分析モジュール112、又は図2のコンピューティングシステム202(例えば、いくつかの実施形態において分析モジュールにより指示される)は、方法300に関連づけられた動作の1つ以上を実行することができる。離散的なブロックで示されているが、方法300のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
ブロック302において、バグのあるコードスニペット(「バグのあるスニペット」)が取得され得る。バグのあるスニペットは、開発者フォーラムに投稿され得る質問投稿、例えば、図1の開発者フォーラム102の質問投稿104などから取得することができる。バグのあるスニペットはエラーを含み得る。さらに、バグのあるスニペットはコードの複数の行を含み得、これにおいて、行の1つ以上はエラーに関連し得、かつ/あるいは1つ以上の行はエラーに非関連であり得る。
ブロック304において、質問投稿の質問に対する回答からテキストが取得され得る。図1のテキスト110は、取得され得るテキストの一例である。
ブロック306において、1つ以上のキーワードがテキストから取得され得る。上述したように、キーワードは、バグのあるスニペットの要素に対応し得る特定のタイプの単語又は句を形成する文字の文字列を含み得る。例えば、上述したように、キーワードは、テキストに含まれ得る名詞、動詞、名詞句、動詞句、及び/又はコードマークアップを含み得る。いくつかの実施形態において、キーワードは、図4の方法400に関して以下に記載される1つ以上の動作を実行することにより取得及び/又は識別され得る。
ブロック308において、バグのあるスニペットのエラーに関連する、バグのあるスニペットの行が識別され得る。いくつかの実施形態において、関連する行は、キーワードに基づいて識別することができる。例えば、キーワードの1つ以上がバグのあるスニペットの行のうち各々の1つ以上の要素に対応するかどうかが決定されてもよい。キーワードが行の要素に対応することに応答して、この対応する行は、バグのあるスニペットのエラーに関連するものとして識別され得る。
いくつかの実施形態において、キーワードが1つ以上の要素に対応するかどうかの決定は、バグのあるスニペットの注釈付けされた行に対してキーワードを比較することを含んでもよい。行は、行のどの要素が行の構造に関連するか、及びどの要素が行の内容に関連するかを示すために、注釈付けすることができる。「構造(Constructs)」は、行によりどのような動作が実行されているかに関連し又はそれを示すコード要素を含むことができる。例えば、構造には、ループなどを含むことができる。「内容(Content)」には、メソッド名などの、動作を実行するために使用されるコード要素を含むことができる。いくつかの実施形態において、バグのあるスニペットの行は、図5の方法500に関して以下に説明する1つ以上の動作を実行することにより注釈付けすることができる。さらに又は代わりに、関連する行は、図6の方法600に関して以下に説明する1つ以上の動作を実行することにより識別することができる。
いくつかの実施形態において、方法300はブロック310を含み得る。ブロック310において、ブロック308でエラーに関連するものとして識別されたバグのあるスニペットの行の1つ以上が、エラーに関連するものとしてマーク付けされ得る。これら又は他の実施形態において、ブロック308で識別された行の全てがマークを付けされてもよい。
さらに又は代わりに、いくつかの実施形態において、方法300はブロック312を含み得る。ブロック312において、マーク付けされたバグのあるスニペットに基づいて1つ以上のソフトウェアプログラム修復動作が実行され得る。例えば、いくつかの実施形態において、バグのあるスニペットは、エラーに関連すると識別された行のみを含むように切り取られてもよい。次いで、切り取られたバグのあるスニペットを使用して、任意の適切な手法に従って修復パッチを生成することができる。さらに又は代わりに、修復パッチは、ソフトウェアプログラムのエラーがバグのあるスニペットのエラーと同じ又は類似であることに応答して、テスト下のソフトウェアプログラムのエラーに対する潜在的な訂正として提示されてもよい。これら又は他の実施形態において、修復パッチは、テスト下のソフトウェアプログラムで実装されてもよい。さらに又は代わりに、修復動作は、ユーザがバグのあるスニペット内の関連する行を識別することを可能にする何らかの方法で、関連する行を強調することを含むことができる。行を強調することにより、ユーザは、バグのあるスニペットのどの部分がエラーを引き起こしたのかにより良く焦点を合わせて、将来エラーを訂正及び/又は回避する方法をより良く識別することができ得る。
当業者は、本明細書に開示されるこの及び他のプロセス、動作、及び方法について、実行される機能及び/又は動作が異なる順序で実施され得ることを理解するであろう。さらに、概説された機能及び動作は例として提供されているに過ぎず、機能及び動作のいくつかが、開示される実施形態の本質を損なうことなく任意でもよく、より少ない機能及び動作に組み合わせられてもよく、あるいはさらなる機能及び動作に拡張されてもよい。いくつかの実施形態において、方法300は、さらなるブロック又はより少ないブロックを含んでもよい。例えば、いくつかの実施形態において、方法300は、選択された特定の投稿に基づいてテスト下のコードに対して修復動作を実行することに関連する1つ以上の動作を含んでもよい。例えば、特定の投稿の特定の例示的なコードスニペットは、バグのあるコードスニペットに適用され得るパッチを含み得る。さらに又は代わりに、特定の投稿は、バグのあるコードスニペットの特定のエラーに対する潜在的な解決策を提供するものとして、テスト下のコードの開発者に提示されてもよい。
図4は、本開示に記載される少なくとも1つの実施形態による、応答テキストのキーワードを識別する一例示的な方法400のフローチャートである。方法400は、任意の適切なシステム、装置、又はデバイスにより実行することができる。例として、図1の分析モジュール112、又は図2のコンピューティングシステム202(例えば、いくつかの実施形態において分析モジュールにより指示される)は、方法400に関連づけられた動作の1つ以上を実行することができる。離散的なブロックで示されているが、方法400のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。いくつかの実施形態において、方法400の動作の1つ以上は、図3のブロック306に関して実行することができる。
一般に、方法400は、開発者フォーラム(例えば、図1の開発者フォーラム102)に投稿された質問に対する回答のテキスト(「回答テキスト」)に関して実行され得る。方法400は、上述したように、質問のバグのあるスニペットの関連する行を識別するために使用され得る、回答テキストに含まれるキーワードを識別するために使用することができる。
ブロック402において、回答テキストが、インラインコードマークアップテキスト文字列(「コードマークアップ」)を識別するために分析され得る。コードマークアップは、ソフトウェアプログラムのソースコードに典型的に見られる方法で書かれ又はフォーマットされたテキストの文字列を含み得る。コードマークアップの識別は、任意の適切な手法に従って実行されてよい。
ブロック404において、自然言語処理(「NLP」)が回答テキストに対して実行され得る。NLPは、回答テキストからのキーワードの識別を容易にするように、回答テキストを修正することができる。NLPには、任意の適切なNLP手法を含んでよい。例えば、NLPは、コードマークアップとして識別されないテキスト(「残りのテキスト」と呼ばれる)を小文字に変換することを含んでもよい。これら又は他の実施形態において、NLPは、英数字文字を除去することを含んでもよい。さらに又は代わりに、NLPは、プログラミング構造又は内容を指し示し得ない「ストップワード(stopwords)」を回答テキストから除去することを含んでもよい。例えば、ストップワードは、前置詞、冠詞、代名詞等を含んでもよい。これら又は他の実施形態において、NLPは、レンマ化(lemmatization)を実行することを含んでもよく、これは、単語の形態を正規化することを含み得る。例えば、動詞は、不定詞形態に正規化することができる。さらに又は代わりに、NLPは、回答テキストをトークン化することを含んでもよく、これは、回答テキスト内の個々の単語の識別を含み得る。
ブロック406において、残りのテキストの品詞(parts of speech)が識別され得る。いくつかの実施形態において、NLPは、品詞の識別を容易にするのを助け得る。例えば、動詞、名詞、形容詞、副詞などを識別することができる。いくつかの実施形態において、異なる単語は、そのそれぞれの品詞の指標で注釈付けされ得る。
ブロック408において、1つ以上のキーワードが回答テキストから識別され得る。上述したように、キーワードには、コードマークアップ、名詞、又は動詞を含むことができる。したがって、いくつかの実施形態において、ブロック402で識別されたコードマークアップは、それぞれのキーワードとして識別されてもよい。さらに又は代わりに、ブロック408で名詞又は動詞として識別される単語も、それぞれのキーワードとして識別されてもよい。
いくつかの実施形態において、キーワードは抽出され、保存され得る。これら又は他の実施形態において、キーワードは、そのそれぞれのキーワードタイプで注釈付けされてもよい(例えば、「マークアップ」、「名詞」、又は「動詞」として注釈付けされてもよい)。さらに又は代わりに、回答テキストが注釈付けされてもよく、これにおいて、識別されたキーワードはそのようなものとして示され得る。これら又は他の実施形態において、注釈は、それぞれのキーワードタイプを含んでもよい。
したがって、方法400を使用して、例示的なバグのあるコードスニペットと、この例示的なバグのあるコードスニペットのエラーを訂正する対応する修復されたコードスニペットとから、具体的なパッチを決定することができる。さらに又は代わりに、方法400は、具体的パッチを決定する際にバグパターンライブラリのバグパターンを使用してもよい。
当業者は、本明細書に開示されるこの及び他のプロセス、動作、及び方法について、方法400の機能及び/又は動作の実行が、記載されたものと異なる順序で実施され得ることを理解するであろう。例えば、概説された機能及び動作は例として提供されているに過ぎず、機能及び動作のいくつかが、開示される実施形態の本質を損なうことなく任意でもよく、より少ない機能及び動作に組み合わせられてもよく、あるいはさらなる機能及び動作に拡張されてもよい。いくつかの実施形態において、方法400は、さらなるブロック又はより少ないブロックを含んでもよい。
図5は、本開示に記載される少なくとも1つの実施形態による、バグのあるコードスニペット(「バグのあるスニペット」)の行の構造及び内容を識別する一例示的な方法500のフローチャートである。方法500は、任意の適切なシステム、装置、又はデバイスにより実行することができる。例として、図1の分析モジュール112、又は図2のコンピューティングシステム202(例えば、いくつかの実施形態において分析モジュールにより指示される)は、方法500に関連づけられた動作の1つ以上を実行することができる。離散的なブロックで示されているが、方法500のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。
一般に、方法500は、開発者フォーラム(例えば、図1の開発者フォーラム102)に投稿された質問のバグのあるスニペットに関して実行され得る。方法500は、行の構造又は行の内容に関連する、バグのあるスニペットの行の要素を識別するために使用することができる。
ブロック502において、バグのあるスニペットが、各行が個々に分析され得るように別個の行に分割され得る。ブロック504において、訪問されていない行が選択され得る。「訪問されていない(unvisited)」行は、行の内容又は構造を識別するためにまだ分析されていない、バグのあるスニペットの任意の行であり得る。
ブロック506において、ブロック504で選択された行のプログラミング構造(「構造」)が識別され得る。上述したように、構造は、選択された行で実行されている動作のタイプに関連し及び/又は該タイプを示すコード要素を含むことができる。構造は、任意の適切な手法を使用して識別されてよい。いくつかの実施形態において、選択された行は、構造に対応するものとして識別された要素がそのようなものとして示され得るように注釈付けされ得る。
ブロック508において、ブロック504で選択された行のプログラミング内容(「内容」)が識別され得る。上述したように、内容は、選択された行の動作を実行するために使用されるコード要素を含むことができる。内容は、任意の適切な手法を使用して識別されてよい。いくつかの実施形態において、選択された行は、内容に対応するものとして識別された要素がそのようなものとして示され得るように注釈付けされ得る。
当業者は、本明細書に開示されるこの及び他のプロセス、動作、及び方法について、方法500の機能及び/又は動作の実行が、記載されたものと異なる順序で実施され得ることを理解するであろう。例えば、概説された機能及び動作は例として提供されているに過ぎず、機能及び動作のいくつかが、開示される実施形態の本質を損なうことなく任意でもよく、より少ない機能及び動作に組み合わせられてもよく、あるいはさらなる機能及び動作に拡張されてもよい。いくつかの実施形態において、方法500は、さらなるブロック又はより少ないブロックを含んでもよい。
図6は、本開示に記載される少なくとも1つの実施形態による、バグのあるコードスニペット(「バグのあるスニペット」)のエラーに関連する、バグのあるスニペットの行を識別する一例示的な方法600のフローチャートである。方法600は、任意の適切なシステム、装置、又はデバイスにより実行することができる。例として、図1の分析モジュール112、又は図2のコンピューティングシステム202(例えば、いくつかの実施形態において分析モジュールにより指示される)は、方法600に関連づけられた動作の1つ以上を実行することができる。離散的なブロックで示されているが、方法600のブロックの1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは削除されてもよい。いくつかの実施形態において、方法600の動作の1つ以上は、図3の方法300のブロック308に関して実行することができる。
ブロック602において、キーワード「t」が選択され得る。キーワードは、開発者フォーラムに投稿された回答の回答テキストから選択することができる。いくつかの実施形態において、キーワード「t」は、回答テキストから抽出されたキーワードのリストから選択されてもよい。さらに又は代わりに、キーワード「t」は、キーワード「t」が回答テキストの注釈付けされたバージョンにおいてそのようなものとして示されていることに基づいて回答テキストから選択されてもよく、該回答テキストは、図4の方法400の1つ以上の動作に従って注釈され得る。
いくつかの実施形態において、キーワード「t」のキーワードタイプがさらに決定されてもよい。例えば、キーワード「t」がコードマークアップか、名詞か、又は動詞かが決定されてもよい。これら又は他の実施形態において、キーワードタイプは、方法400の1つ以上の動作に従って決定されてもよい。さらに又は代わりに、キーワードは、キーワードタイプ「t」を示す注釈を含んでもよい。キーワードタイプ注釈は、キーワードのリスト及び/又は回答テキストの注釈に含まれてもよい。
ブロック604において、コードの行「c」(「行c」)が選択され得る。行「c」は、バグのあるスニペットから選択することができる。バグのあるスニペットは、開発者フォーラムの質問投稿に含まれ得る。キーワード「t」が選択され得る回答が、バグのあるスニペットを含む質問投稿の質問に対する回答であり得る。いくつかの実施形態において、行「c」は、行「c」のどの要素がコード構造に対応するか、及びどれがコード内容に対応するかを示す注釈を含むことができる。いくつかの実施形態において、行「c」は、図5の方法500の1つ以上の動作に従って注釈付けされ得る。いくつかの実施形態において、ブロック602及び604の動作は、異なる順序で及び/又は同時に実行されてもよい。
ブロック606、608、610、612、614、616、及び618において、1つ以上の動作を実行して、キーワード「t」及び行「c」の要素に基づいて1つ以上の比較を実行することにより、キーワード「t」が行「c」に対応するかどうかを決定することができる。いくつかの実施形態において、及び以下で詳細に説明するように、ブロック606、608、610、612、614、616、及び618の動作は、キーワード「t」のキーワードタイプ、及び/又はコード構造又はコード内容に対応するものとしての行「c」の要素の指定を使用して、決定及び比較を容易にし、かつ/あるいはそれらの速度を改善することができる。しかしながら、いくつかの実施形態において、キーワードタイプ及び/又は指定の使用は、利用されなくてもよい。
例えば、ブロック606において、キーワード「t」のキーワードタイプがコードマークアップであるかどうかが決定され得る。キーワードタイプがコードマークアップであることに応答して、方法600はブロック606からブロック608に進み得る。
ブロック608において、キーワード「t」が行「c」に含まれるかどうかが決定され得る。例えば、キーワード「t」を行「c」内の要素(例えば、テキスト)に対して比較して、キーワード「t」が要素のいずれかに一致又は類似するかどうかを決定することができる。キーワード「t」が行「c」の要素の少なくとも1つに一致又は類似することに応答して、方法600はブロック610に進み得る。ブロック610において、行「c」は、バグのあるスニペットのエラーに関連するものとしてマーク付けされ得る。ブロック610に続き、方法600はブロック604に戻り得る。さらに、キーワード「t」が行「c」の要素の少なくとも1つに一致又は類似しないことに応答して、方法600はブロック608からブロック604に進み得る。ブロック604では、バグのあるスニペットの別のコード行が選択されて、キーワード「t」がバグのあるスニペットの該別のコード行に関連するかどうかを決定することができる。
ブロック606に戻り、キーワード「t」のキーワードタイプがコードマークアップでないことに応答して、方法600はブロック606からブロック612に進み得る。ブロック612において、キーワード「t」のキーワードタイプが動詞であるかどうかが決定され得る。キーワードタイプが動詞であることに応答して、方法600はブロック612からブロック614に進み得る。
動詞はしばしば、コード内容に対応するが、コード構造には対応しない。したがって、方法600の効率を改善するために、行「c」の要素の全てに対して動詞を比較するのでなく、動詞は、コード内容に対応する要素に対してのみ比較されてもよい。このように、いくつかの実施形態において、ブロック614において、行「c」がコード内容を含むかどうかが決定され得る。例えば、行「c」の1つ以上の要素がコード内容に対応するかどうかが決定されてもよい。いくつかの実施形態において、行「c」の注釈を使用して、行「c」がコード内容を含むかどうかを決定することができる。行「c」がコード内容を含まないという決定に応答して、方法600は、キーワード「t」に関して比較するための別のコード行の選択のために、ブロック614からブロック604に進み得る。
行「c」がコード内容を含むという決定に応答して、方法600はブロック614からブロック616に進み得る。ブロック616において、キーワード「t」に対応するコード要素「t’」が識別され得る。コード要素「t’」は、自然言語キーワード「t」にしばしば関連づけられるコードの要素であり得る。いくつかの実施形態において、コード要素「t’」は、自然言語の単語とコード要素との間の関連づけを含むルックアップ辞書から識別することができる。ブロック616に続き、方法600はブロック618に進み得る。
ブロック618において、行「c」が、ブロック616で識別されたコード要素「t’」を含むかどうかが決定され得る。例えば、コード要素「t’」を行「c」の要素(例えば、テキスト)に対して比較して、コード要素「t’」が行「c」の要素のいずれかに一致又は類似するかどうかを決定することができる。キーワードタイプが動詞である例において、比較は、コード内容に対応する要素に限定されてもよく、これは、いくつかの例において方法600の効率を改善し得る。
コード要素「t’」が行「c」の要素の少なくとも1つに一致又は類似することに応答して、方法600はブロック610に進み得る。上述したように、ブロック610では、行「c」は、バグのあるスニペットのエラーに関連するものとしてマーク付けされ得る。さらに上述したように、ブロック610に続き、方法600はブロック604に戻り得る。さらに、コード要素「t’」が行「c」の要素の少なくとも1つに一致又は類似しないことに応答して、方法600はブロック608からブロック604に進み得る。上述したように、ブロック604では、バグのあるスニペットの別のコード行が選択されて、キーワード「t」がバグのあるスニペットの該別のコード行に関連するかどうかを決定することができる。
ブロック612に戻り、キーワードタイプが動詞、名詞、又はコードマークアップである例において、キーワード「t」は名詞であり得る。名詞は、コード内容又はコード構造に対応し得、したがって、いくつかの実施形態において、行「c」が内容を含むかどうかに関連する動作は、このような例では省略されてもよい。このように、キーワード「t」のキーワードタイプがブロック612で動詞でない(及び、ブロック606から決定されたとおり、コードマークアップでない)ことに応答して、方法600はブロック612からブロック616に進み得る。
したがって、方法600の動作を実行して、バグのあるスニペットのどの行がキーワード「t」に対応し、したがってバグのあるスニペットのエラーに関連するものとしてマーク付けされるかを決定することができる。いくつかの実施形態において、方法600の動作の1つ以上は、回答テキストのあらゆるキーワードに関して実行されてもよく、これにおいて、各それぞれのキーワードは、バグのあるスニペットのあらゆる行に関して分析される。
当業者は、本明細書に開示されるこの及び他のプロセス、動作、及び方法について、方法600に関して実行される機能及び/又は動作が異なる順序で実施され得ることを理解するであろう。さらに、概説された機能及び動作は例として提供されているに過ぎず、機能及び動作のいくつかが、開示される実施形態の本質を損なうことなく任意でもよく、より少ない機能及び動作に組み合わせられてもよく、あるいはさらなる機能及び動作に拡張されてもよい。さらに、いくつかの実施形態において、方法600は、さらなるブロック又はより少ないブロックを含んでもよい。
例えば、キーワードタイプに関する方法600の特定の順序及びフローは一例に過ぎず、キーワードタイプがマークアップか動詞か名詞かを最初に決定するかどうかに関する限り、多くの異なる実装が使用されてよい。さらに、上述したように、コード内容又はコード構造に関する注釈の使用は、いくつかの実装において省略されてもよい。さらに又は代わりに、2つ以上のキーワードタイプとそれらの使用との間の区別が省略されてもよい。例えば、名詞と動詞との間の区別は、いくつかの実施形態において省略されてもよい
上述したように、本開示に記載される実施形態は、以下でより詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用コンピュータ(例えば、図2のプロセッサ250)の使用を含んでもよい。さらに、上述したように、本開示に記載される実施形態は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能媒体(例えば、図2のメモリ252又はデータ記憶装置254)を使用して実施されてもよい。
本開示で用いられるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントのアクションを実行するように構成された特定のハードウェア実装、及び/又はコンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読取可能媒体、処理デバイスなど)に記憶及び/又は実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを参照し得る。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実現されてもよい。本開示に記載されるシステム及び方法のいくつかは、(汎用ハードウェアに記憶及び/又は実行される)ソフトウェアで実現されるものとして一般に記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又はコンピューティングシステム上で動作する任意のモジュール又はモジュレートの組み合わせでもよい。
本開示において、特に別記の特許請求の範囲(例えば、別記の特許請求の範囲の本文)において用いられる用語は、一般に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むがこれに限定されない」と解釈されるべきである等)。
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも1つの」及び「1つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」(“a”又は“an”)による請求項記載の導入が、同じ請求項が導入フレーズ「1つ以上の」又は「少なくとも1つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を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」の可能性を含むよう理解されるべきである。フレーズ「A又はB」のこの解釈は、用語「A及び/又はB」が「A」又は「B」又は「A及びB」の可能性を含むように時に用いられ得るとしても、依然として適用可能である。
本開示に記載される全ての例及び条件付き言語は、本開示及び発明者が当該技術分野を促進するために寄与した概念を理解する際に読者を助けるための教育的目的が意図され、このように具体的に記載された例及び条件に限定されないものとみなされるべきである。本開示の実施形態が詳細に説明されたが、本開示の主旨及び範囲から逸脱することなく様々な変更、置換、及び改変がなされ得る。
上記の実施形態につき以下の付記を残しておく。
(付記1)
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得するステップであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ステップと、
前記質問に対する回答からテキストを取得するステップと、
前記テキストからキーワードを識別するステップと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けするステップと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行するステップと、
を含む方法。
(付記2)
特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定するステップ、をさらに含む付記1に記載の方法。
(付記3)
特定のキーワードに関連づけられた関連づけ辞書(association dictionary)から特定のコード要素を識別するステップと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定するステップと、
をさらに含む付記1に記載の方法。
(付記4)
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すステップと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定するステップと、
をさらに含む付記1に記載の方法。
(付記5)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記4に記載の方法。
(付記6)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記1に記載の方法。
(付記7)
前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、付記6に記載の方法。
(付記8)
実行されることに応答してシステムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記9)
前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記10)
前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記11)
前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記12)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記11に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記13)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記14)
前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、付記13に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記15)
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサにより実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、システム。
(付記16)
前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、付記15に記載のシステム。
(付記17)
前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、付記15に記載のシステム。
(付記18)
前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、付記15に記載のシステム。
(付記19)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記18に記載のシステム。
(付記20)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記15に記載のシステム。
(付記1)
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得するステップであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ステップと、
前記質問に対する回答からテキストを取得するステップと、
前記テキストからキーワードを識別するステップと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けするステップと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行するステップと、
を含む方法。
(付記2)
特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定するステップ、をさらに含む付記1に記載の方法。
(付記3)
特定のキーワードに関連づけられた関連づけ辞書(association dictionary)から特定のコード要素を識別するステップと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定するステップと、
をさらに含む付記1に記載の方法。
(付記4)
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すステップと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定するステップと、
をさらに含む付記1に記載の方法。
(付記5)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記4に記載の方法。
(付記6)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記1に記載の方法。
(付記7)
前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、付記6に記載の方法。
(付記8)
実行されることに応答してシステムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記9)
前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記10)
前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記11)
前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記12)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記11に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記13)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記8に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記14)
前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、付記13に記載の1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記15)
システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサにより実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、システム。
(付記16)
前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、付記15に記載のシステム。
(付記17)
前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、付記15に記載のシステム。
(付記18)
前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、付記15に記載のシステム。
(付記19)
前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、付記18に記載のシステム。
(付記20)
前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、付記15に記載のシステム。
Claims (20)
- ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得するステップであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ステップと、
前記質問に対する回答からテキストを取得するステップと、
前記テキストからキーワードを識別するステップと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けするステップと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行するステップと、
を含む方法。 - 特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定するステップ、をさらに含む請求項1に記載の方法。
- 特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別するステップと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定するステップと、
をさらに含む請求項1に記載の方法。 - 前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すステップと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定するステップと、
をさらに含む請求項1に記載の方法。 - 前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、請求項4に記載の方法。
- 前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、請求項1に記載の方法。
- 前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、請求項6に記載の方法。
- システムに動作を実行させるコンピュータプログラムであって、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、コンピュータプログラム。 - 前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、請求項8に記載のコンピュータプログラム。
- 前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、請求項8に記載のコンピュータプログラム。 - 前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、請求項8に記載のコンピュータプログラム。 - 前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、請求項11に記載のコンピュータプログラム。
- 前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、請求項8に記載のコンピュータプログラム。
- 前記キーワードタイプのセットは、コードマークアップ、名詞、及び動詞を含む、請求項13に記載のコンピュータプログラム。
- システムであって、
1つ以上のプロセッサと、
前記1つ以上のプロセッサにより実行されることに応答して当該システムに動作を実行させる命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体と、を含み、前記動作は、
ディスカッションフォーラムの投稿に含まれる質問からバグのあるコードスニペットを取得することであり、前記バグのあるコードスニペットは、エラーとコードの複数の行とを含む、ことと、
前記質問に対する回答からテキストを取得することと、
前記テキストからキーワードを識別することと、
前記複数の行からの特定の行に、前記キーワードの1つ以上が前記特定の行の1つ以上の要素に対応することに基づいて、前記エラーに関連するものとしてマーク付けすることと、
前記特定の行のマーク付けに基づいて1つ以上のソフトウェアプログラム修復動作を実行することと、
を含む、システム。 - 前記動作は、特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のキーワードが前記1つ以上の要素に一致することに応答して決定することをさらに含む、請求項15に記載のシステム。
- 前記動作は、
特定のキーワードに関連づけられた関連づけ辞書から特定のコード要素を識別することと、
前記特定のキーワードが前記特定の行の1つ以上の要素に対応することを、前記特定のコード要素が前記特定の行の前記1つ以上の要素に一致することに応答して決定することと、
をさらに含む、請求項15に記載のシステム。 - 前記動作は、
前記バグのあるコードスニペットの前記複数の行の各それぞれの行に注釈付けして前記それぞれの行の要素の特徴を示すことと、
特定のキーワードが前記特定の行の1つ以上の要素に対応するかどうかを、前記特定のキーワードのキーワードタイプと前記注釈付けにより示される前記要素の特徴との間の関係に基づいて決定することと、
をさらに含む、請求項15に記載のシステム。 - 前記要素の特徴は、前記要素により実行される動作に関連する構造と、前記動作の実行に使用される要素に関連する内容とを含む、請求項18に記載のシステム。
- 前記キーワードの各々は、前記テキストの1つ以上の文字のテキスト文字列であり、前記テキストから特定のキーワードを識別することは、第1のキーワードとして、キーワードタイプのセットに含まれるタイプである第1のテキスト文字列を識別することを含む、請求項15に記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/098277 | 2020-11-13 | ||
US17/098,277 US11366742B2 (en) | 2020-11-13 | 2020-11-13 | Automated identification of lines of code related to errors field |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022078962A true JP2022078962A (ja) | 2022-05-25 |
Family
ID=81586658
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021182606A Pending JP2022078962A (ja) | 2020-11-13 | 2021-11-09 | エラーに関連するコードの行の自動識別 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11366742B2 (ja) |
JP (1) | JP2022078962A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116340263B (zh) * | 2023-06-01 | 2023-08-29 | 北京无忧创想信息技术有限公司 | 一种基于机器识别的word文档转换方法、装置及存储介质 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8296278B2 (en) * | 2008-09-17 | 2012-10-23 | Microsoft Corporation | Identifying product issues using forum data |
US9092314B2 (en) * | 2012-12-19 | 2015-07-28 | Xilinx, Inc. | On-the-fly technical support |
US9703536B2 (en) * | 2014-08-11 | 2017-07-11 | International Business Machines Corporation | Debugging code using a question and answer system based on documentation and code change records |
US10572245B1 (en) * | 2016-08-30 | 2020-02-25 | Amazon Technologies, Inc. | Identifying versions of running programs using signatures derived from object files |
US10649833B1 (en) * | 2017-07-13 | 2020-05-12 | EMC IP Holding Company LLC | Consensus-based remediation of offerings' problems |
US10705943B2 (en) * | 2017-09-08 | 2020-07-07 | Devfactory Innovations Fz-Llc | Automating identification of test cases for library suggestion models |
US10649836B2 (en) * | 2018-05-14 | 2020-05-12 | Dell Products L.L.P. | Detecting an error message and automatically presenting links to relevant solution pages |
CN110716852B (zh) * | 2018-07-12 | 2023-06-23 | 伊姆西Ip控股有限责任公司 | 用于生成自动化测试脚本的系统、方法和介质 |
US10884893B2 (en) * | 2018-08-24 | 2021-01-05 | International Business Machines Corporation | Detecting software build errors using machine learning |
US11468134B2 (en) * | 2018-09-26 | 2022-10-11 | International Business Machines Corporation | Provisioning a customized software stack for network-based question and answer services |
US20200278842A1 (en) * | 2019-03-01 | 2020-09-03 | Valorbec s.e.c | Systems and Methods for Mining Software Repositories using Bots |
US10938752B2 (en) * | 2019-03-20 | 2021-03-02 | International Business Machines Corporation | Online forum automated feedback generator |
US11442932B2 (en) * | 2019-07-16 | 2022-09-13 | Thoughtspot, Inc. | Mapping natural language to queries using a query grammar |
US11194553B2 (en) * | 2019-09-17 | 2021-12-07 | International Business Machines Corporation | Identifying and recommending code snippets to be reused by software developer |
-
2020
- 2020-11-13 US US17/098,277 patent/US11366742B2/en active Active
-
2021
- 2021-11-09 JP JP2021182606A patent/JP2022078962A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
US11366742B2 (en) | 2022-06-21 |
US20220156174A1 (en) | 2022-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10169337B2 (en) | Converting data into natural language form | |
Al Omran et al. | Choosing an NLP library for analyzing software documentation: a systematic literature review and a series of experiments | |
US9703536B2 (en) | Debugging code using a question and answer system based on documentation and code change records | |
US10564939B2 (en) | Method and system for arbitrary-granularity execution clone detection | |
Kondo et al. | The impact of context metrics on just-in-time defect prediction | |
Niu et al. | Traceability-enabled refactoring for managing just-in-time requirements | |
US20150082277A1 (en) | Automatic Pre-detection of Potential Coding Issues and Recommendation for Resolution Actions | |
Ruan et al. | DeepLink: Recovering issue-commit links based on deep learning | |
Zhang et al. | Towards automatically generating descriptive names for unit tests | |
US8972938B2 (en) | Determining functional design/requirements coverage of a computer code | |
US11042467B2 (en) | Automated searching and identification of software patches | |
Newman et al. | An empirical study of abbreviations and expansions in software artifacts | |
Huq et al. | Review4Repair: Code review aided automatic program repairing | |
US11385988B2 (en) | System and method to improve results of a static code analysis based on the probability of a true error | |
Rath et al. | Structured information in bug report descriptions—influence on IR-based bug localization and developers | |
JP2022078962A (ja) | エラーに関連するコードの行の自動識別 | |
Pirapuraj et al. | Analyzing source code identifiers for code reuse using NLP techniques and WordNet | |
Rath et al. | Influence of structured information in bug report descriptions on ir-based bug localization | |
US11556455B2 (en) | Automated identification of posts related to software patches | |
Wang et al. | WheaCha: A method for explaining the predictions of models of code | |
Chen et al. | Bashon: A Hybrid Crowd-Machine Workflow for Shell Command Synthesis | |
Eder et al. | Selecting manual regression test cases automatically using trace link recovery and change coverage | |
KR102117165B1 (ko) | 바이너리 분석을 위한 중간 언어 테스트 방법 및 장치 | |
Bouzenia et al. | TraceFixer: Execution trace-driven program repair | |
Ronchieri et al. | Sentiment analysis for software code assessment |