JP2022029423A - ソフトウェア・パッチに関連する投稿の自動識別 - Google Patents

ソフトウェア・パッチに関連する投稿の自動識別 Download PDF

Info

Publication number
JP2022029423A
JP2022029423A JP2021110711A JP2021110711A JP2022029423A JP 2022029423 A JP2022029423 A JP 2022029423A JP 2021110711 A JP2021110711 A JP 2021110711A JP 2021110711 A JP2021110711 A JP 2021110711A JP 2022029423 A JP2022029423 A JP 2022029423A
Authority
JP
Japan
Prior art keywords
bug
similarity
code fragment
pattern
apg
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021110711A
Other languages
English (en)
Inventor
マハジャン・ソナル
Sonal Mahajan
アール プラサド・ムクル
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 JP2022029423A publication Critical patent/JP2022029423A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Landscapes

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

Abstract

【課題】ソフトウェア・パッチに関連する投稿の自動識別方法及びシステムを提供する。【解決手段】方法は、バグのあるソースコードの断片を取得する段階と、バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンの夫々との間のそれぞれの第1の類似性を決定する段階と、特定の第1の類似性に基づいて、複数のバグ・パターンから特定のバグ・パターンを選択する段階と、特定のバグ・パターンと、一つ又は複数のウェブサイトから得られた複数の投稿のそれぞれの投稿から夫々得られた複数の例示的コード断片のそれぞれとの間の、夫々の第2の類似性を決定する段階と、特定の第2の類似性に基づいて、複数の投稿から特定の投稿を選択する段階と、を含む。【選択図】図3

Description

本開示において論じられる実施形態は、ソフトウェア・パッチに関連する投稿の自動化された識別に関する。
ソフトウェア開発者フォーラムは、ソフトウェア・プログラムの開発、たとえばソフトウェア・プログラムにおけるエラー(バグまたはエラーとも呼ばれる)のフィックスに関連する、自然言語記述およびコード断片の豊富な混成的な知識ベースを提示する。ソフトウェア開発ツールは、フォーラムの投稿を分析してどの投稿が特定のエラーの修正に関連しうるかを識別するために、機械分析動作を実行するように構成されてもよい。
本開示において請求される主題は、何らかの欠点を解決する、または上記のような環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、本開示に記載されるいくつかの実施形態が実施されうる1つの例示的な技術分野を示すためにのみ提供されている。
動作は、ソフトウェア・プログラムのソースコードのバグのあるコード断片を得ることを含んでいてもよい。ここで、該バグのあるコード断片は特定のエラーを含む。動作はまた、バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定することを含んでいてもよい。加えて、動作は、特定のバグ・パターンとバグのあるコード断片との間の決定された特定の第1の類似性に基づいて、複数のバグ・パターンから特定のバグ・パターンを選択することを含んでいてもよい。さらに、動作は、特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定することを含んでいてもよい。動作はまた、特定のバグ・パターンと特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、バグのあるコード断片のその特定のエラーを訂正する潜在的な解決策を提供するものとして、前記複数の投稿から特定の投稿を選択することを含んでいてもよい。
実施形態の目的および利点は、少なくとも、特許請求の範囲において具体的に指摘される要素、特徴、および組み合わせによって実現され、達成される。
上述の一般的説明および下記の詳細な説明は、いずれも例として与えられており、特許請求の範囲に記載される発明を制約するのではなく、説明するものである。
例示的実施形態が、添付の図面を使用して、さらなる具体性および詳細さを伴って記載され、説明される。
ソフトウェア・パッチに関連する投稿の自動化された識別に関連する例示的環境を表わす図である。
図1Aのバグ・パターン・ライブラリに含まれうるエラーの例示的なタイプについての例示的なバグ・パターンを示す図である。
ソフトウェア・パッチに関係する投稿を識別するために使用されうる例示的なコンピューティング・システムのブロック図を示す。
ソフトウェア・パッチに関係する投稿を識別する例示的な方法のフローチャートである。
試験対象コードからバグのあるコード断片を取得する例示的な方法のフローチャートである。
コード断片とバグ・パターンとの間の類似性を決定する例示的な方法のフローチャートである。
本開示に記載されるいくつかの実施形態は、各投稿〔ポスト〕が、ソフトウェア・プログラムにおけるある種のタイプのエラー(バグまたは違反とも呼ばれる)をどのように修正するかを記述していることがありうるという点でソフトウェア・パッチに関連する可能性がある、開発者フォーラム内の投稿を識別する方法およびシステムに関する。特に、以下に詳細に説明するように、ライブラリに記憶されていてもよい比較的一般的なバグ・シナリオのバグ・パターンが、ソフトウェア・プログラムのソースコードのバグのあるコード断片(buggy code snippet)と比較されて、バグ・パターンのうちのどれがバグのあるコード断片に最も類似していことがありうるかを識別してもよい。さらに、識別されたバグ・パターンは、次いで、ソフトウェア・プログラムにおけるエラーの修繕に関連していることがありうる一つまたは複数の開発者フォーラム上の投稿の例示的コード断片と比較されて、バグのあるコード断片のエラーに対する潜在的な解決策を提供しうる特定の投稿を識別してもよい。
次いで、識別された特定の投稿およびその特定の投稿の対応するコード断片が、ソフトウェア・プログラムの開発において使用されてもよい。たとえば、開発中のソフトウェア・プログラムについての修繕戦略が、その特定の投稿から識別されうる。たとえば、対応するコード断片は、開発中のソフトウェア・プログラムに含まれる特定のバグについてのパッチ(「修繕」とも呼ばれる)を含んでいてもよい。上記は、開発中のソフトウェア・プログラムのデバッグ(たとえば、エラーの識別、エラーの修繕など)において、パーサブル(parsable)・コード断片がソフトウェア開発ツールによってどのように使用されうるかの一例にすぎない。
このように、本開示の一つまたは複数の実施形態によれば、ソフトウェア・プログラムにおけるパッチを識別するために使用されうる投稿および対応するコード断片をコンピュータ・システムがよりよく識別できるように、コンピュータ・システムを構成することによって、ソフトウェア開発の技術分野が改善されうる。
さらに、いくつかの実施形態では、システムは、特定の仕方でソフトウェア・プログラムにおけるエラーのための特定の投稿および/または(たとえば、該特定の投稿からの)特定のパッチを見つけることによって、ソフトウェア・プログラムの開発を容易にすることができる。システムは、ユーザーが自身で見つけることができるよりも、ユーザーのコードにとってより好適であり、より関連性があることがある特定の投稿および/またはパッチを見つけることがありうる。さらに、システムは、投稿および/またはパッチをユーザーよりも迅速に見つけることがありうる。投稿および/またはパッチの改善された関連性は、ソフトウェア・エラーを是正するのに役立つ可能性がある。ソフトウェア・エラーを是正するための潜在的な投稿および/またはパッチを識別する速さは、ソースコードの開発および試験を容易にするのに役立ちうる。これらおよび他の実施形態では、ユーザーは、しばしばユーザーの時間の大きな部分を占めることがあるバグ修正ではなく、コードを書くことに集中することによって、より効率的にコードを開発することができる。
代替的または追加的に、システムは、ユーザーが識別しうるよりも、より正確なおよび/またはより関連性の高い、ソフトウェア・プログラムのための投稿および/またはパッチを、識別することができる。より正確なおよび/またはより関連性のある投稿および/またはパッチを識別することは、より効率的なコードまたはユーザーが意図した仕方で動作するコードをユーザーが書くのに役立ちうる。このように、ソフトウェア・プログラムのための投稿および/またはパッチの改善された識別は、エラーの訂正を容易にし、その結果、特定のソースコードの改善を助けることができる。
本開示の実施形態は、添付の図面を参照して説明される。
図1Aは、本開示に記載される少なくとも1つの実施形態に従って配置された、ソフトウェア・パッチに関連する投稿の自動化された識別に関係する例示的環境100を表わす図である。環境100は、ネットワーク110、システム120、およびウェブサイト130を含んでいてもよい。
ネットワーク110は、環境100の任意の構成要素(たとえば、システム120およびウェブサイト130)の間での信号の通信のために構成された任意の通信ネットワークを含んでいてもよい。ネットワーク110は、有線でも無線でもよい。ネットワーク110は、スター構成、トークンリング構成、または他の好適な構成を含む多数の構成を有することがありうる。さらに、ネットワーク110は、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)(たとえばインターネット)、および/または、それを通じて複数の装置が通信することができる他の相互接続されたデータ経路を含んでいてもよい。いくつかの実施形態では、ネットワーク110は、ピアツーピアネットワークを含んでいてもよい。ネットワーク110は、多様な異なる通信プロトコルでのデータの通信を可能にしうる遠隔通信ネットワークの一部に結合されていてもよく、またはこれを含んでいてもよい。
いくつかの実施形態では、ネットワーク110は、BLUETOOTH(登録商標)通信ネットワーク、Z-Wave(登録商標)通信ネットワーク、Insteon(登録商標)通信ネットワーク、Enocean(登録商標)通信ネットワーク、無線忠実度(Wi-Fi)通信ネットワーク、ZigBee通信ネットワーク、HomePlug通信ネットワーク、電力線通信ネットワーク、メッセージキューテレメトリー転送(MQTT)通信ネットワーク、MQTTセンサー(MQTT-S)通信ネットワーク、制約されたアプリケーションプロトコル(CoAP)通信ネットワーク、代表状態転送アプリケーションプロトコルインターフェース(REST API)通信ネットワーク、拡張可能なメッセージングおよびプレゼンスプロトコル(XMPP)通信ネットワーク、セルラー通信ネットワーク、任意の類似の通信ネットワーク、またはデータの送受信のためのそれらの任意の組み合わせを含むか、または含むように構成される。ネットワーク110において通信されるデータは、ショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTTP)、直接データ接続、ワイヤレスアプリケーションプロトコル(WAP)、電子メール、スマートエネルギープロファイル(SEP)、ECHONET Lite(登録商標)、OpenADR、またはシステム120、ウェブサイト130、クラウドサーバー通信、またはゲートウェイで実装されうる他の任意のプロトコルを介して通信されるデータを含んでいてもよい。
システム120は、プロセッサ、メモリ、および通信機能を含むコンピュータベースのハードウェアシステムを含んでいてもよい。システム120は、環境100の他の構成要素のいずれかとデータを通信するためにネットワーク110に結合されてもよい。システム120のいくつかの例は、携帯電話、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、セットトップボックス、バーチャルリアリティ装置、または接続された装置などを含むことができる。追加的または代替的に、システム120は、一つまたは複数のプロセッサベースのコンピューティング・システムを含んでいてもよい。たとえば、システム120は、サーバーとして機能するように構成された一つまたは複数のハードウェアサーバーまたは他のプロセッサベースのコンピューティング装置を含んでいてもよい。システム120は、メモリおよびネットワーク通信機能を含んでいてもよい。いくつかの実施形態では、システム120は、図2に関して以下に説明するようなコンピューティング・システムを含んでいてもよい。
いくつかの実施形態では、システム120は、ソフトウェア・プログラム122を含んでいてもよい。これらおよび他の実施形態において、ソフトウェア・プログラム122は、たとえば中でもC++、C、アセンブリ、C#、Java、BASIC、JavaScript、Python、およびSQLなどの任意のプログラミング言語で書かれたソースコードを含んでいてもよい。いくつかの実施形態では、ソフトウェア・プログラム122は、複数のメソッドを含んでいてもよい。これらおよび他の実施形態では、メソッドは、ソフトウェア・プログラム122内の個別のサブプログラムであってもよく、これは、独立して実行可能であってもよく、および/または他と区別できてもよい。たとえば、メソッドは、ソフトウェア・プログラム122のサブユニットであってもよい。これらおよび他の実施形態において、ソフトウェア・プログラム122は、特定の目的のためおよび/または特定の目標を達成するために設計されてもよい。
いくつかの実施形態では、ソフトウェア・プログラム122は、エラー124を含むことがある。単一のエラー124が図1に示されているが、ソフトウェア・プログラム122は、任意の数のエラー124を含むことがありうる。いくつかの実施形態では、エラー124は、コンパイルエラー、ランタイムエラー、論理エラー、および/または他のエラーを含んでいてもよい。たとえば、いくつかの実施形態において、エラー124は、ソフトウェア・プログラム122に基づくプログラムの実行前にコンパイラによって検出されうるシンタックスエラーを含んでいてもよい。たとえば、ソフトウェア・プログラム122において句読点が欠落していることがあり、および/または変数が宣言されずに使用されることがある。代替的または追加的に、いくつかの実施形態では、エラー124はランタイムエラーを含んでいてもよい。これらおよび他の実施形態では、ソフトウェア・プログラム122は、何らエラーなしにコンパイルされうるが、コンパイルされたソフトウェア・プログラム122を実行しようとするときにエラーに遭遇することがある。たとえば、ソフトウェア・プログラム122は、ゼロによる除算または存在しない配列の要素にアクセスしようとする試行を含むことがありうる。代替的または追加的に、いくつかの実施形態では、エラー124は論理エラーを含んでいてもよい。これらおよび他の実施形態において、ソフトウェア・プログラム122は、何らエラーなしにコンパイルされることができ、コンパイルされたソフトウェア・プログラム122を実行しようとするときにエラーに遭遇することもない。しかしながら、ソフトウェア・プログラム122は、ソフトウェア・プログラム122の作者または設計者によって予期されるようには機能しないことがある。そのような場合、エラー124は、ソフトウェア・プログラム122が予期された通りに機能しないようにするコード行を含んでいることがある。
いくつかの実施形態では、エラー124は、種々の特徴を含んでいてもよい。たとえば、エラー124はエラー124の名前を含んでいてもよい。代替的または追加的に、いくつかの実施形態では、エラー124は、エラー124の説明を含んでいてもよい。たとえば、エラー124の説明は、エラー124のタイプを含んでいてもよい。代替的または追加的に、エラー124はプログラミング言語を含んでいてもよい。たとえば、エラー124のプログラミング言語は、ソフトウェア・プログラム122のプログラミング言語と同じであってもよい。一例として、エラー124はランタイム例外を含んでいてもよい。ランタイム例外の名前は"java.lang.ArrayIndexOutOfBoundsException"であってもよい。例外の説明は"Index 10 out of bounds for length 10."〔長さ10についてインデックス10が範囲外〕であってもよい。例外のタイプは、範囲外例外(out-of-bounds exception)であってもよい。例外のためのプログラミング言語は、Javaプログラミング言語であってもよい。
ウェブサイト130は、インターネット上の任意の適用可能なウェブサイトを含みうる。代替的または追加的に、いくつかの実施形態では、ウェブサイト130は、内部リポジトリまたはリソース、たとえば内部イントラネットサイト上の文書のコレクションを含んでいてもよい。たとえば、いくつかの実施形態では、ウェブサイト130は、ユーザーが質問を投稿でき、他のユーザーが回答を投稿できるディスカッション・フォーラムを含んでいてもよい。たとえば、あるユーザーは、エラーを含むソフトウェア・プログラムの形で質問を投稿することができ、別のユーザーは、もはやそのエラーを含まない修正されたソフトウェア・プログラムの形で、質問に対する回答またはパッチを投稿することができる。これらおよび他の実施形態において、複数のユーザーが質問に対する回答を投稿してもよく、および/または1人のユーザーが複数の回答を投稿してもよい。いくつかの実施形態では、質問を投稿したユーザーは、該ユーザーが経験したエラーを解決するものとして1つの回答を選択してもよい。いくつかの実施形態では、ウェブサイト130のユーザーたちは、ユーザーたちによって投稿された種々の回答に対して投票することができる。図1Aは、単一のウェブサイト130を示しているが、いくつかの実施形態では、複数のウェブサイト130があってもよい。いくつかの実施形態では、ウェブサイト130は、複数のページまたは複数の投稿、たとえば投稿140A、投稿140B、投稿140C、および投稿140D(まとめて投稿140)を含んでいてもよい。ウェブサイト130は、4つの投稿140をもって示されているが、いくつかの実施形態では、ウェブサイト130は、数百の投稿140、数千の投稿140、数十万の投稿140、または任意の数の投稿140を含んでいてもよい。さらに、投稿140は、単一のウェブサイト130と関連しているものとして示されているが、いくつかの実施形態では、投稿140の一部は、第1のウェブサイトと関連付けられてもよく、他の投稿140は、第2のウェブサイトと関連付けられてもよい。たとえば、投稿140Aおよび投稿140Bはウェブサイト130に関連付けられていてもよく、投稿140Cおよび投稿140Dは異なるウェブサイトに関連付けられていてもよい。
これらおよび他の実施形態では、投稿140はそれぞれ、異なるソフトウェア・プログラムに関連していてもよい。たとえば、投稿140Aはソフトウェア・プログラム142Aに関係してもよく、投稿140Bはソフトウェア・プログラム142Bに関係してもよく、投稿140Cはソフトウェア・プログラム142Cに関係してもよく、投稿140Dはソフトウェア・プログラム142D(まとめてソフトウェア・プログラム142)に関係してもよい。いくつかの実施形態では、ソフトウェア・プログラム142への言及は、ソフトウェア・プログラムのコードの行への言及を含んでいてもよい。たとえば、ソフトウェア・プログラム142Aは、より大きなソフトウェア・プログラムの複数の行を含んでいてもよく、該より大きなソフトウェア・プログラムのすべての行は含んでいなくてもよい。いくつかの実施形態では、ソフトウェア・プログラム142は、エラーを含む、より大きなソフトウェア・プログラムにおけるコードの諸行であってもよい。このように、ソフトウェア・プログラム142への言及は、プログラム全体に限定されるものではない。これらおよび他の実施形態において、ソフトウェア・プログラム142は、互いに異なっていてもよく、ソフトウェア・プログラム122とは異なっていてもよい。たとえば、ソフトウェア・プログラム142は、それぞれソフトウェア・プログラム122とは異なる目的を有し、異なる作者を有し、異なるプログラミング言語で書かれ、または異なるエラー・タイプを含むことがありうる。
いくつかの実施形態では、ソフトウェア・プログラム142は、異なる質問に関連していてもよい。たとえば、ウェブサイト130のユーザーは、ウェブサイト130上に投稿140Aを作成してもよい。投稿140Aの一部として、ユーザーは、ソフトウェア・プログラム142Aを追加してもよく、ソフトウェア・プログラム142Aに関連する質問をしてもよい。たとえば、ユーザーは、ソフトウェア・プログラム142Aを書いている間にエラーを経験したことがありうる。支援を得るために、ユーザーは、投稿140Aの一部として、ウェブサイト130にソフトウェア・プログラム142Aを投稿してもよい。ユーザーは、ウェブサイト130の他のユーザーに、自分がどのようにしてエラーを修正しうるかを尋ね、および/または、ソフトウェア・プログラム142Aにおいてエラーの原因となっているものを他のユーザーに尋ねるために、質問を書くことができる。
いくつかの実施形態では、ソフトウェア・プログラム142Aはエラー144Aを含んでいてもよく、ソフトウェア・プログラム142Bはエラー144Bを含んでいてもよく、ソフトウェア・プログラム142Cはエラー144Cを含んでいてもよく、ソフトウェア・プログラム142Dはエラー144D(まとめてエラー144)を含んでいてもよい。いくつかの実施形態において、エラー144のそれぞれは、互いに異なるエラーであってもよい。たとえば、エラー144Aはランタイムエラーであってもよく、エラー144Bは論理エラーであってもよく、エラー144Cはコンパイルエラーであってもよく、エラー144Dはエラー144Aとは異なるランタイムエラーであってもよい。代替的または追加的に、いくつかの実施形態では、エラー144の一つまたは複数は、同じエラーであってもよく、関係したエラーであってもよく、および/または類似のエラーであってもよい。たとえば、いくつかの実施形態では、エラー144Aは、C++プログラミング言語におけるインデックス範囲外エラーであってもよく、一方、エラー144Cは、Javaプログラミング言語におけるインデックス範囲外エラーであってもよい。この例では、エラー144Aおよびエラー144Cは、類似のエラーでありうる。いくつかの実施形態では、エラー144は、たとえエラーが異なる環境において異なるように現われる、および/または扱われるものであっても、類似のエラーであると判断されうる。たとえば、C++環境とJava環境では、範囲外の配列インデックスのアクセスが実行時に異なる仕方で現われ、扱われることがありうるが、それでも、かかる挙動の根本的な原因が同じ、すなわち、インデックスの規定された範囲の外で配列にアクセスしようとすることであることがある。
いくつかの実施形態では、投稿140のうちの一つまたは複数は、パッチを含んでいてもよい。たとえば、投稿140Aはパッチ146Aを含んでいてもよく、投稿140Bはパッチ146Bを含んでいてもよく、投稿140Cはパッチ146C(まとめてパッチ146)を含んでいてもよい。いくつかの実施形態では、一つまたは複数の投稿140は、関連するパッチ146を含まなくてもよい。たとえば、投稿140Dはパッチを含まなくてもよい。いくつかの実施形態では、パッチ146は、対応するエラー144を是正する方法を表わしてもよく、すなわち、パッチ146Aは、パッチ146Aをソフトウェア・プログラム142Aに適用した後、ソフトウェア・プログラム142Aがもはやエラー144Aをもたなくなるように、エラー144Aを是正することができる。いくつかの実施形態では、パッチ146は、ソフトウェア・プログラム142におけるエラー144の源に適用されうるソースコードの例示的コード断片を含んでいてもよい。いくつかの実施形態では、投稿140のうちの一つまたは複数は、複数のパッチ146を含んでいてもよい。たとえば、投稿140Bは複数のパッチ146Bを含んでいてもよい。これらの実施形態および他の実施形態において、ウェブサイト130の種々のユーザーが種々のパッチ146Bについてランク付けまたは投票してもよく、それにより1つのパッチ146Bが最も多くの肯定的な投票を受けることがありうる。これらおよび他の実施形態では、パッチ146Bのうちの1つが、投稿140Bを作成したユーザーによって選ばれたパッチ146Bとして選択されてもよい。これは、該選ばれたパッチがユーザーの問題を解決することに基づく。
いくつかの実施形態では、投稿140は、質問を含んでいてもよい。たとえば、ソフトウェア・プログラム142は、ウェブサイト130のユーザーによって投稿された質問に統合されていてもよい。たとえば、第1のユーザーは、ソフトウェア・プログラム142Aを書き、エラー144Aに遭遇したことがありうる。次いで、第1のユーザーは、ソフトウェア・プログラム142A、エラー144Aおよびエラー144Aの詳細ならびにエラー144Aを解決するのを助けてほしい旨の他者へのリクエストを含む投稿140Aをウェブサイト130上で作成してもよい。これらおよび他の実施形態では、パッチ146Aは、第1のユーザーの質問に対する回答を表わすことができる。たとえば、これらおよび他の実施形態において、第2のユーザーが、投稿140Aにおける質問に対する回答としてパッチ146Aを追加してもよい。
下記は、環境100の動作の説明である。ユーザーが、システム120を使ってソフトウェア・プログラム122を書いてもよい。ソフトウェア・プログラム122を書いている間、またはソフトウェア・プログラム122をテストしている間に、ユーザーはエラー124の通知を受けることがある。
いくつかの実施形態では、次いで、システム120は、エラー124の名前、エラー124のタイプ、および/またはソフトウェア・プログラム122および/またはエラー124に関連するプログラミング言語のようなエラー124の特徴に基づく検索クエリーを用いて、ウェブサイト130の検索を実行してもよい。いくつかの実施形態では、検索クエリーは、検索が、回答されていない投稿140を含むべきか、回答された投稿140を含むべきか、または回答されていない投稿と回答された投稿の両方140を含むべきかを示すタグを含んでいてもよい。検索クエリーに基づいて、投稿140のセットが識別されうる。たとえば、投稿140のセットは、該投稿のセットにおける各投稿が質問に対する回答を含み、該質問が、エラー124のエラー特徴と同じタイプおよび/または同じ名前をもつエラーをもつコード断片を含み、該投稿における該コード断片がエラー124と同じプログラミング言語で書かれていることに基づいて、識別されうる。この検索は粗い検索と考えられてもよい。
これらまたは他の実施形態において、投稿140のセットの投稿のそれぞれは、例示的コード断片を含んでいてもよい。該例示的コード断片の一つまたは複数は、それぞれの投稿に対応する問題に対する解決策を含んでいてもよい。さらに、該例示的コード断片および対応する投稿のうちの一つまたは複数は、エラー124に対する潜在的なパッチとしての情報を含んでいてもよい。これらまたは他の実施形態では、システム120は、投稿140のセットの投稿から例示的コード断片を抽出するように構成されてもよい。
さらに、システム120は、エラー124を含むか、またはその原因となるバグのあるコード断片を、ソフトウェア・プログラム122から抽出するように構成されてもよい。いくつかの実施形態では、バグのあるコード断片は、図4に関して後述される一つまたは複数の動作に従って抽出されてもよい。
さらに、システム120は、バグ・パターン・ライブラリ150にアクセスするように構成されてもよい。バグ・パターン・ライブラリ150は、任意の好適なコンピュータ読み取り可能な媒体を介して記憶されていてもよく、システム120に通信的に結合されてもよい(たとえば、直接結合される、および/または、ネットワーク110を介して)。バグ・パターン・ライブラリ150は、種々のタイプのエラーにつながりうるシナリオ(「バグ・シナリオ」と称する)の種々のパターン(「バグ・パターン」と称する)を含みうる。バグ・シナリオは、対応するソフトウェア・プログラムで発生するそれぞれのタイプのバグをもたらす可能性がある、ソースコードの種々の条件または特徴を含んでいてもよい。それぞれのバグ・パターンが、そのバグ・パターンが対応しうるバグ・シナリオの異なる条件または特徴の間の関係を示しうるという点で、バグ・パターンは対応するバグ・シナリオに関係しうる。
いくつかの実施形態において、バグ・パターン・ライブラリ150のバグ・パターンおよび対応するバグ・シナリオは、一般的なタイプのエラーをもたらす可能性がある一般的なシナリオを含んでいてもよい。たとえば、いくつかの例示的なシナリオは、サポートされない演算例外、同時変更例外、クラスキャスト例外、不正な引数例外などを含んでいてもよい。
いくつかの実施形態では、バグ・パターン・ライブラリ150のバグ・パターンは、特定のソフトウェア言語のシンタックスに基づく特定のドメイン固有言語(domain specific language、DSL)に従ってフォーマットされてもよい。たとえば、Javaに関連するバグ・シナリオを提供しうるバグ・パターン・ライブラリ150の一つまたは複数のバグ・パターンは、Java様のシンタックスに基づく特定のDSLに従ってフォーマットされうる。いくつかの実施形態において、バグ・パターン・ライブラリ150は、異なるソフトウェア言語に対応する異なるDSLに従ってフォーマットされたバグ・パターンを含んでいてもよい。これらまたは他の実施形態において、異なるバグ・パターンは、同じタイプのバグに対応してもよいが、異なるDSLに従ってフォーマットされてもよい。追加的または代替的に、いくつかのバグ・パターンは、ある種のタイプのソフトウェア言語に特有であることがあり、よって、そのようなバグ・パターンは、それらが関係しうるソフトウェア言語のそれぞれのDSLに従ってのみフォーマットされうる。ある種のDSLに従ったバグ・パターンのフォーマットは、バグ・パターンが対応するソフトウェア・プログラムのソースコードの一般化されたコード断片として構造化されうるようなものであってもよい。
これらまたは他の実施形態において、DSLのフォーマットは、対応するソフトウェア言語のシンタックスと比較して、いくつかの相違を有していてもよい。たとえば、シンタックス規則のいくつかは、対応するソフトウェア言語と比較して、特定のDSLにおいて緩和されてもよい。たとえば、Java DSLは、メソッドおよび/またはクラスにおける文の囲みのような、Javaの厳密な形式の一部をもたなくてもよい。
別の例として、該特定のDSLは、意味的抽象化をサポートしてもよく、それぞれのバグ・パターンのバグ・シナリオのコンテキストにおいて、およびバグのタイプのコンテキストにおいて、互いに意味的に同等である異なるプログラム要素を表現するために、特定の意味的抽象化が使用されうる。言い換えれば、意味的抽象化は、特定の種類のバグとそのバグ・シナリオについては等価な役割を果たすが、一般には互いに等価ではなくてもよいプログラム要素のファミリーをエンコードする。
たとえば、図1Bは、ランタイム例外バグであってもよい、サポートされない演算例外(unsupported operation exception)についての例示的なバグ・パターン160を示す。バグ・パターン160では、メソッド「add()」、「remove()」、「clear()」、「addAll()」、および「removeAll」は、それぞれ、意味的に等価であるとみなすことができる。サポートされない演算例外の文脈では、これらの各メソッドは、「List」の要素の一つまたは複数を追加または除去することによる所与の「List」の構造的修正を表わすからである。しかしながら、一般的は、これらのメソッドのいくつかは、実際には異なった、またはさらには反対の操作を実行するものであり(たとえば、「add()」および「remove()」は、実際には反対の操作を実行する)、よって、バグ・パターン160のバグ・シナリオのコンテキストの外では意味的に等価であるとは考えられなくてもよい。
追加的または代替的に、特定のDSLは、一つまたは複数の仕方で異なる可能性がある異なるプログラム要素にマッチしうるワイルドカード文字をサポートしてもよい。たとえば、図1Bのバグ・パターン160では、メソッド「Arrays.asList()」に対する引数は、ワイルドカード「*」である。これは、変数、新しい配列オブジェクトの作成、またはメソッド呼び出しからの戻りのような異なるプログラム要素を表わすことができるからである。
これらまたは他の実施形態において、特定のDSLは、値に関する数値制約をサポートしてもよい。たとえば、図1Bは、不正な引数例外(illegal argument exception)の例示的なバグ・パターン166を示す。バグ・パターン166のメソッド「wait()」に対する引数は、値がゼロより小さいならば不正な引数例外が発生しうる数値である。このシナリオを表現するために、メソッド「wait()」に対する引数は、「NEGATIVE」の数値制約をもって指定される。
上述したように、図1Bは、バグ・パターン・ライブラリ150に含まれてもよく、Java DSLに従って構成されてもよい、いくつかの例示的なタイプのエラーについてのいくつかの例示的なバグ・パターンを示す。たとえば、図1Bは、サポートされない演算例外についての例示的なバグ・パターン160、同時修正例外についての例示的なバグ・パターン162、クラスキャスト例外についての例示的なバグ・パターン164、および、不正な引数例外についての例示的なバグ・パターン166を示す。これらはそれぞれ、Javaコードに関連するエラーでありうる。
上述のように、システム120は、バグ・パターン・ライブラリ150にアクセスして、そこに含まれるバグ・パターンの一つまたは複数を得るように構成されてもよい。これらまたは他の実施形態において、システム120は、エラー124に関連するソフトウェア・プログラムのバグのあるコード断片に最も関連しうる特定のバグ・パターンを選択するように構成されてもよい。システム120は、図3および図5の一つまたは複数の動作に関して以下にさらに詳細に説明するように、特定のバグ・パターンを選択してもよい。
システム120は、エラー124を修正するための潜在的な解決策(たとえば、パッチ)を提供するものとして、投稿140のセットから特定の投稿を選択するように構成されてもよい。いくつかの実施形態において、システム120は、特定の投稿の特定の例示的コード断片と特定のバグ・パターンとの間の関係に基づいて、特定の投稿を選択するように構成されてもよい。システム120は、図3および図5の一つまたは複数の動作に関して以下にさらに詳細に説明するように、特定の投稿を選択してもよい。
いくつかの実施形態では、システム120は、特定の投稿を使用して、エラー124に関して実行されうる一つまたは複数の修繕操作を実行してもよい。たとえば、いくつかの実施形態では、修繕操作は、たとえば、システム120に接続されたコンピュータ画面のようなディスプレイ上に特定の投稿を提示することを含んでいてもよい。次いで、ソフトウェア・プログラム122の開発者は、その特定の投稿に基づいてソフトウェア・プログラム122を修繕することができる。代替的または追加的に、いくつかの実施形態では、修繕動作は、システム120がその特定の投稿に基づいてソフトウェア・プログラム122を修繕することを含んでいてもよい。たとえば、特定の投稿は、エラー124についてのパッチである例示的コード断片を含んでいてもよい。これらまたは他の実施形態において、システム120は、例示的コード断片に従ってソフトウェア・プログラム122のソースコードを修正することによって例示的コード断片をソフトウェア・プログラム122に適用し、対応するパッチを適用してエラー124を修正するように構成されてもよい。
本開示の範囲から逸脱することなく、図1Aに対して修正、追加、または省略がされてもよい。たとえば、環境100は、本開示において図示されかつ説明されたものよりも多数の、または少数の要素を含んでいてもよい。さらに、いくつかの実施形態では、ソフトウェア・プログラム122は、システム120とは異なる装置またはシステムを使用して作成および編集されてもよい。たとえば、これらおよび他の実施形態では、ユーザーは、システム120以外のシステムまたは装置を使用して、ソフトウェア・プログラム122を作成および/または編集してもよく、システム120は、エラー124に基づいてウェブサイト130の検索を実行し、投稿140を識別してもよい。
代替的または追加的に、いくつかの実施形態では、システム120およびシステム120に関連して論じられた動作は、単一の装置によって実行されてもよく、または異なるシステムに分散されてもよい。これらおよび他の実施形態において、環境100は、ネットワーク110と、システム120およびウェブサイト130を含む一つまたは複数のシステムとを含んでいてもよく、これらのシステムは、ネットワーク110を介して通信上結合されてもよい。
図2は、本開示の少なくとも1つの実施形態による、ソフトウェア・パッチに関連する投稿を識別するために使用されうる例示的なコンピューティング・システム202のブロック図を示す。コンピューティング・システム202は、いくつかの実施形態では、図1Aのシステム120に関連する一つまたは複数の動作を実装または指揮するように構成されてもよい。コンピューティング・システム202は、プロセッサ250、メモリ252、およびデータ記憶装置254を含んでいてもよい。プロセッサ250、メモリ252、およびデータ記憶装置254は、通信的に結合されてもよい。
一般に、プロセッサ250は、さまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含む、任意の好適な特殊目的または汎用コンピュータ、コンピューティングエンティティ、または処理装置を含んでいてもよく、任意の適用可能なコンピュータ読み取り可能記憶媒体に記憶された命令を実行するように構成されてもよい。たとえば、プロセッサ250は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラム命令を解釈および/または実行するおよび/またはデータを処理するように構成された任意の他のデジタルまたはアナログ回路を含んでいてもよい。図2では単一のプロセッサとして示されているが、プロセッサ250は、個別にまたは集合的に、本開示に記載される任意の数の動作を実行する、または該実行を指揮するように構成された任意の数のプロセッサを含んでいてもよい。さらに、プロセッサの一つまたは複数が、一つまたは複数の異なる電子装置、たとえば異なるサーバー上に存在してもよい。
いくつかの実施形態では、プロセッサ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は、ソフトウェア・プログラムの試験対象コードに関して、任意の好適なシステム、装置、またはデバイスによって実行されうる。試験対象コードは、ソフトウェア・プログラムのソースコードの一部または全部を含みうる。例として、図1Aのシステム120、または図2のコンピューティング・システム202が(たとえば、いくつかの実施形態ではモジュールによって指揮されて)方法300に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで示されているが、方法300のブロックの一つまたは複数に関連するステップおよび動作は、具体的な実装に依存して、追加的なブロックに分割されてもよく、より少数のブロックに組み合わされてもよく、または除去されてもよい。
ブロック302では、試験対象コードのバグのあるコード断片が取得されてもよい。バグのあるコード断片は、特定のエラーを含みうる試験対象コードの行を含んでいてもよい。いくつかの実施形態では、バグのあるコード断片は、以下に詳細に説明する図4の一つまたは複数の動作を実行することによって得られてもよい。
ブロック304では、バグのあるコード断片と複数のバグ・パターンとの間で、第1の類似性が決定されてもよい。たとえば、バグのあるコード断片と複数のバグ・パターンの各バグ・パターンとの間で、それぞれの第1の類似性が決定されてもよい。いくつかの実施形態では、バグ・パターンは、バグ・パターン・ライブラリ150のようなバグ・パターン・ライブラリから得られてもよい。これらまたは他の実施形態において、得られたバグ・パターンは、試験対象コードのソフトウェア言語に関連していてもよく、該ソフトウェア言語に基づく対応するDSLに従ってフォーマットされていてもよい。これらまたは他の実施形態において、複数のバグ・パターンは、選択されるバグ・パターンのそれぞれがバグのあるコード断片の特定のエラーと同じタイプのエラーに対応することに基づいて選択されてもよい。追加的または代替的に、複数のバグ・パターンは、バグ・パターンとバグのあるコード断片との間の重複するコード要素(「トークン」とも呼ばれる)に基づいて選択されてもよい。たとえば、「IndexOutOfBoundsException」の下で、「substring()」メソッドによって引き起こされるすべてのバグ・パターンを見つけるためにキーワード検索が実行されてもよい。
いくつかの実施形態では、第1の類似性は、バグのあるコード断片と得られたバグ・パターンのそれぞれとの間のそれぞれの第1の類似性スコアを決定することによって決定されてもよい。これらまたは他の実施形態において、第1の類似性スコアは、以下に詳細に記載される図5の一つまたは複数の動作を実行することによって決定されてもよい。
ブロック306では、複数のバグ・パターンのうちの特定のバグ・パターンが、該特定のバグ・パターンとバグのあるコード断片との間の特定の第1の類似性に基づいて選択されてもよい。たとえば、いくつかの実施形態では、第1の類似性は、それぞれの第1の類似性スコアを含んでいてもよく、それぞれの第1の類似性スコアは、類似性の指標に従ってランク付けされてもよい。これらまたは他の実施形態において、特定のバグ・パターンは、特定の第1の類似性スコアが他のバグ・パターンの他の第1の類似性スコアと比較して、バグのあるコード断片に関するその特定のバグ・パターンの最も高い類似性の度合いを示すことに基づいて選択されてもよい。追加的または代替的に、特定のバグ・パターンは、特定の第1の類似性スコアがある閾値を満たすことに基づいて選択されてもよい。閾値は、いくつかの実施形態では、任意の好適な観察分析(observational analysis)を用いて決定されうる。
ブロック308では、ブロック306で選択された特定のバグ・パターンと、一つまたは複数のウェブサイトから得られうる投稿から得られうる例示的コード断片との間で第2の類似性が決定されてもよい。たとえば、特定のバグ・パターンと各例示的コード断片との間で、それぞれの第2の類似性が決定されてもよい。いくつかの実施形態では、投稿は、図1Aに関して上述したように得られてもよい。
いくつかの実施形態では、第2の類似性は、特定のバグ・パターンと得られた例示的コード断片のそれぞれとの間のそれぞれの第2の類似性スコアを決定することによって決定されてもよい。これらまたは他の実施形態において、第2の類似性スコアは、以下に詳細に記載される図5の一つまたは複数の操作を実行することによって決定されてもよい。
ブロック310では、複数の投稿のうちの特定の投稿が、バグのあるコード断片の特定のエラーを訂正する潜在的な解決策を提供するものとして選択されてもよい。特定の投稿は、特定のバグ・パターンとその特定の投稿の特定の例示的コード断片との間の特定の第2の類似性に基づいて選択されてもよい。たとえば、いくつかの実施形態では、第2の類似性は、それぞれの第2の類似性スコアを含んでいてもよく、該それぞれの第2の類似性スコアは、類似性の指標に従ってランク付けされてもよい。これらまたは他の実施形態において、特定の投稿は、特定の第2の類似性スコアが、他の例示的な投稿の他の例示的コード断片の他の第2の類似性スコアと比較して、特定のバグ・パターンに関して特定の例示的コード断片の最も高い類似性の度合いを示すことに基づいて選択されてもよい。追加的または代替的に、特定の投稿は、特定の第2の類似性スコアがある閾値を満たすことに基づいて選択されてもよい。閾値は、いくつかの実施形態では、任意の好適な観察分析を用いて決定されてもよい。
当業者は、本明細書に開示されているこの、および他のプロセス、動作、および方法について、実行される機能および/または動作が異なる順序で実施されうることを理解するであろう。さらに、概説された機能および動作は、単に例として提供されており、かかる機能および動作のいくつかは、開示された実施形態の本質を損なうことなく、任意的であってもよく、より少数の機能および動作に組み合わされてもよく、または追加的な機能および動作に展開されてもよい。いくつかの実施形態では、方法300は、追加的なブロックまたはより少数のブロックを含んでいてもよい。たとえば、いくつかの実施形態では、方法300は、選択された特定の投稿に基づいて試験対象コードに対して修繕操作を実行することに関連する一つまたは複数の動作を含んでいてもよい。たとえば、特定の投稿の特定の例示的コード断片は、バグのあるコード断片に適用されうるパッチを含んでいてもよい。追加的または代替的に、特定の投稿は、バグのあるコード断片の特定のエラーに対する潜在的な解決策を提供するものとして、試験対象コードの開発者に提示されてもよい。
図4は、本開示に記載される少なくとも1つの実施形態による、試験対象コードからバグのあるコード断片を得る例示的な方法400のフローチャートである。方法400は、ソフトウェア・プログラムの試験対象コードに関して、任意の好適なシステム、装置、またはデバイスによって実行されうる。試験対象コードは、ソフトウェア・プログラムのソースコードの一部または全部を含みうる。例として、図1Aのシステム120または図2のコンピューティング・システム202が(たとえば、いくつかの実施形態ではモジュールによって指揮されて)、方法400に関連する動作のうちの一つまたは複数を実行してもよい。離散的なブロックで示されているが、方法400のブロックの一つまたは複数に関連するステップおよび動作は、具体的な実装に依存して、追加的なブロックに分割されてもよく、より少数のブロックに組み合わされてもよく、または除去されてもよい。いくつかの実施形態では、方法400の動作のうちの一つまたは複数は、図3のブロック302に関して実行されてもよい。
ブロック402では、試験対象コードがインストルメントされ(instrumented)てもよい。インストルメンテーション(instrumentation)は、試験実行中に実行される文が追跡されるように、試験対象コードにコードを追加してもよい。ブロック404では、インストルメントされた試験対象コードが実行されてもよい。インストルメントされた試験対象コードの実行中に、試験対象コードにおけるエラーが遭遇され、および/または識別されることがある。
ブロック406では、障害トレース(failing trace)が収集されてもよい。障害トレースは、試験実行中に実行されたことがありうるコードの文または行であって、インストルメンテーションによって追跡されたことがありうるものを含んでいてもよい。ブロック408では、試験実行中に失敗した(たとえば、エラーを引き起こした)ことがありうるコードの行(「障害行」)が識別されてもよい。いくつかの実施形態では、障害行は、バグのあるコード断片「B」に含まれる行として選択されてもよい。いくつかの実施形態において、障害行は、バグのあるコード断片に追加されるコードの最初の行であってもよく、よって、障害行は、バグのあるコード断片を初期化するために使用されてもよい。
ブロック410では、障害トレースの後ろ向きスライシングが実行されてもよい。いくつかの実施形態では、後ろ向きスライシングは、障害行で始まってもよく、障害トレースによって示されるように、失敗した試験実行の間に実行されたコードの文および/または行を、障害行で始まって逆順の「スライス」として、ステップ実行していってもよい。いくつかの実施形態では、後ろ向きスライシングは、障害行に関して障害トレースの手順内要素に制限されてもよい。たとえば、障害行は、メソッドまたはクラスのようなソースコードの特定の要素の一部であってもよい。これらまたは他の実施形態において、後ろ向きスライシングは、障害行が対応するメソッドまたはクラスを実行し始めた文に達するまで実行されてもよい。
ブロック412では、後ろ向きスライシング中に遭遇するスライスに対応するコードの行「L」が得られてもよい。ブロック414では、ブロック408で初期化されたバグのあるコード断片「B」に行「L」が追加され、最終的なバグのあるコード断片が得られてもよい。最終化されたバグのあるコード断片は、いくつかの実施形態では、方法300で使用および分析される、バグのあるコード断片であってもよい。
当業者は、本明細書に開示されているこの、および他のプロセス、動作、および方法について、方法400の機能および/または動作の実行が、記載されたものとは異なる順序で実施されうることを理解するであろう。たとえば、諸行「L」は、逐次反復的な仕方および/または並列的な仕方で、識別され、バグのあるコード断片に追加されうる。さらに、概説された機能および動作は、単に例として提供されており、かかる機能および動作のいくつかは、開示された実施形態の本質を損なうことなく、任意的であってもよく、より少数の機能および動作に組み合わされてもよく、または追加的な機能および動作に展開されてもよい。いくつかの実施形態では、方法400は、追加的なブロックまたはより少数のブロックを含んでいてもよい。
図5は、本開示に記載される少なくとも1つの実施形態による、コード断片とバグ・パターンとの間の類似性を決定する例示的な方法500のフローチャートである。方法500は、任意の好適なシステム、装置、またはデバイスによって実行されうる。例として、図1Aのシステム120、または図2のコンピューティング・システム202が(たとえば、いくつかの実施形態ではモジュールによって指揮されて)方法500に関連する動作の一つまたは複数を実行してもよい。離散的なブロックで示されているが、方法500のブロックの一つまたは複数に関連するステップおよび動作は、具体的な実装に依存して、追加的なブロックに分割されてもよく、より少数のブロックに組み合わされてもよく、または除去されてもよい。
いくつかの実施形態では、方法500の動作のうちの一つまたは複数は、図3のブロック304および/またはブロック308に関して実行されてもよい。たとえば、ブロック304に関して方法500を実行する際に、方法500を用いて分析され、使用されうるコード断片は、図3のブロック302において識別されうるバグのあるコード断片を含んでいてもよい。追加的または代替的に、方法500の動作は、ブロック304で同定されうるバグのあるコード断片および複数のバグ・パターンのそれぞれに関して実行されてもよい。別の例として、ブロック308に関して方法500を実行する際に、方法500を用いて分析され、使用されうるコード断片は、投稿の例示的コード断片の1つを含んでいてもよい。追加的または代替的に、方法500の動作は、選択された特定のバグ・パターンおよび取得された投稿の複数の例示的コード断片のそれぞれに関して実行されてもよい。
ブロック502では、コード断片「C」の第1の抽象プログラム・グラフが生成されてもよい。上記のように、コード断片は、バグのあるコード断片またはいくつかの実施形態における例示的コード断片であってもよい。いくつかの実施形態では、第1の抽象プログラム・グラフは、コード断片の抽象シンタックスツリーを得ることによって生成されてもよい。さらに、抽象シンタックスツリー(abstract syntax tree)は、抽象シンタックスツリーの単純化(simplification)、型推定(type inference)(「具体化(concretization)」とも呼ばれる)、および抽象化(abstraction)のプロセスによって、第1の抽象プログラム・グラフ(abstract program graph)に修正されてもよい。
単純化の一環として、ツリーをコンパクトかつ可読にするよう、抽象シンタックスツリーがパースされ、圧縮されてもよい。いくつかの実施形態では、抽象シンタックスツリーのパースおよび圧縮は、抽象シンタックスツリーの複数のノードを、結果として得られる抽象ツリー表現における単一のノードに組み合わせることを含んでいてもよい。たとえば、抽象シンタックスツリーは、ソフトウェア・プログラム中のすべてのトークンについてのノードを含んでいてもよい。たとえば、ソースにおける文"int a;"は、抽象シンタックスツリーにおいて、陳述ノード、表現ノード、変数ノードなどを含む一連のノードとして表現されてもよい。単純化の一環として、ソースコードにおける文"int a;"に関連する抽象シンタックスツリーにおける諸ノードが、パースされ、抽象ツリー表現における単一のノード、"declare(int,a)"ノードに圧縮されてもよい。ソースコードをパースすることは、ソースコード中の文を、構文、型(すなわち、変数型)、および変数名に分割することを含んでいてもよい。たとえば、構文(construct)は、ソースコード中の文(statements)の関数(functions)を含んでいてもよい。上記の"declare(int,a)"ノードについては、構文は"declare"であってもよく、タイプは"int"であってもよく、変数名は"a"であってもよい。構文は、"for"、"for-each"、"while"などのループ、"if"のような条件、宣言およびコンストラクタ、"delete"や"insert"などのメソッドなどを含んでいてもよい。タイプは、"integers"("int")〔整数〕、浮動小数点数("float")、ストリング、ブーリアン、コレクション(collections)などを含んでいてもよい。
型推定の間に、変数のデータ型が推定されてもよい。型推定は、ソースコードにおける変数の使用に基づいて、変数の推定される型を決定することを含んでいてもよい。たとえば、"for"ループのようなループにおいて使用される変数は、たとえその変数がたとえばそのソフトウェア・プログラム、抽象シンタックスツリー、および/または圧縮された抽象シンタックスツリーにおいて明示的に定義されていなくても、整数であると推定されてもよい。追加的な例として、ソースコード中のある文が"if(flag)"を含むことがありうる。変数"flag"のデータ型はソースコード中で特定されていなくてもよく、それでも、"if"文の中での変数"flag"の使用に基づいて、"flag"は"Boolean"〔ブーリアン〕タイプの変数であると推定されてもよい。このように、"if(flag)"はツリー表現において、"root"ノード、追加的な"declare(Boolean,flag)"ノード、および"if(flag)"ノードに変換されてもよい。同様に、型推定は、メソッドのスコープまたは呼び出し元を推定し、変数値を推定することを含んでいてもよい。型推定の間に、抽象シンタックスツリーの中に存在しないことがありうるノードが抽象ツリー表現に追加されてもよい。
抽象化の間に、異なる構文が単一の構文に一般化されてもよい。これらおよび他の実施形態では、変数のデータ型が抽象化されてもよい。抽象化の間、整数、浮動小数点数、文字、文字列、ブール値のようなプリミティブなデータ型は抽象化されずに残ってもよい。いくつかのデータ型は、アプリケーション固有および/またはユーザー定義の型を含みうる。これらのデータ型は、一般型変数に変換されてもよい。代替的または追加的に、抽象化の間に、識別子名が抽象化されてもよい。たとえば、第1の変数名"list"は"$v1"に抽象化されてもよく、第2の変数名"s"は"$v2"に抽象化されてもよい。代替的または追加的に、抽象化の間に、構文が一般化されてもよい。たとえば、「for」、「for-each」、および「while」は、それぞれ「ループ」構文に抽象化されてもよい。追加的または代替的に、抽象化の間に、ダブっている(duplicate)サブツリーが抽象化され、リファクタリングされ(refactored)てもよい。
抽象シンタックスツリーの単純化、型推定および抽象化のプロセスに関するさらなる詳細は、2019年8月23日に出願され、その全体が参照により本開示に組み込まれる米国特許出願第16/550,069号に見出されうる。さらに、第1の抽象プログラム・グラフは、上記以外の任意の他の適用可能な技術を使用して生成されてもよい。
ブロック504では、バグ・パターン「P」の第2の抽象プログラム・グラフが生成されてもよい。上述のように、バグ・パターンは、一般化されたコード断片を含んでいてもよく、それの対応する第2の抽象プログラム・グラフが生成されてもよい。第2の抽象プログラム・グラフは、いくつかの実施形態では、ブロック502で生成される第1の抽象プログラム・グラフの生成と類似の仕方で生成されてもよい。
ブロック506では、第1の抽象プログラム・グラフと第2の抽象プログラム・グラフが整列されてもよい。追加的または代替的に、整列は、第1の抽象プログラム・グラフと第2の抽象プログラム・グラフとの間の重複(overlap)を決定するために実行されてもよい。整列は、任意の好適な技術を用いて実行されうる。たとえば、いくつかの実施形態では、整列は、第1の抽象プログラム・グラフと第2の抽象プログラム・グラフとの間のツリー編集距離を決定することに基づいてもよい。
ツリー編集距離は、異なるツリーの(たとえば、第1の抽象プログラム・グラフと第2の抽象プログラム・グラフの間の)類似性および/または非類似性の度合いの表現であってもよい。たとえば、ツリー編集距離が計算されてもよい。ツリー編集距離に基づいて、第1の抽象プログラム・グラフと第2の抽象プログラム・グラフとの間の整列が決定される、すなわち、第1の抽象プログラム・グラフのどのノードが第2の抽象プログラム・グラフのどのノードに対応するかが決定されうる。ツリー編集距離は、2つのツリーの一方を他方のツリーに変換するのに必要な操作の最少数に基づいて決定されてもよい。これらおよび他の実施形態において、上記の操作は、他の操作の中でも、削除操作(たとえば、第1のツリーが、第2のツリーにはないノードを含む場合)、追加操作(たとえば、第1のツリーが、第2のツリーに含まれるノードを欠いている場合)、およびマッチ操作(第1のツリー上のあるノードが内容に関して第2のツリー上のあるノードとマッチするが、それら2つのノードのコンテキストは必ずしも完全にマッチしなくてもよい場合)を含みうる。
ブロック508では、第1の抽象プログラム・グラフおよび第2の抽象プログラム・グラフの一つまたは複数の重複ノードに関して、それぞれの類似性スコアが決定されてもよい。いくつかの実施形態では、それぞれの類似性スコアは、重複するノードのそれぞれの間で決定されてもよい。それぞれの類似性スコアは、対応する同定された重複ノード間の類似性の程度を示してもよい。いくつかの実施形態では、それぞれの類似性スコアが重み付けされてもよい。
いくつかの実施形態では、それぞれの類似性スコアは、複数の因子に基づいて計算されてもよい。たとえば、それぞれの類似性スコアは、他の因子のなかでも、構文類似性、型類似性、および変数使用関係類似性(variable-use relationship similarity)に基づいてもよい。いくつかの実施形態では、構文類似性は、抽象ツリー表現における重複ノードが同じ構文を含む場合に存在しうる。たとえば、両方の重複ノードが"declare"〔宣言〕構文である場合、構文類似性があってもよい。上記で論じたように、構文は、なかでも、"declare"、"constructor"、"loop"、"method"、"if"を含みうる。いくつかの実施形態では、型類似性は、構文類似性が存在することを判別することに応答して判別されうる。これらおよび他の実施形態において、型類似性は、抽象ツリー表現における重複ノードが同じ構文および同じ型を含む場合に存在しうる。たとえば、両方の重複ノードが"declare"構文であり、「整数」タイプを含む場合、型類似性が存在しうる。上記で論じたように、タイプは、なかでも、「ブーリアン」、「コレクション」、「ストリング」、「整数」、「浮動小数点数」を含みうる。いくつかの実施形態では、変数使用類似性は、構文類似性および型類似性があることを判別することに応答して判別されうる。これらおよび他の実施形態において、両方の重複ノードにおいて同様の仕方で変数が使用される場合、変数使用類似性が存在してもよい。たとえば、パターンとソフトウェア・プログラム・コード断片の抽象ツリー表現の両方において、ある変数がループとremove〔除去〕メソッドにおいて使用される場合、変数使用類似性が存在しうる。いくつかの実施形態では、変数使用類似性は、ジャッカール(Jaccard)指数を使用して決定されてもよい。
それぞれの類似性スコアは、類似性スコア=(重みA×構文類似性)+(重みB×型類似性)+(重みC×変数使用関係類似性)として計算されてもよい。これらおよび他の実施形態において、構文類似性は、マッチする構文をもつ重複ノードの数であってもよい。これらおよび他の実施形態において、型類似性は、マッチする構文およびマッチする型の両方をもつ重複ノードの数であってもよい。これらおよび他の実施形態において、変数使用関係類似性は、変数が同一または類似の状況で使用されるインスタンスの数であってもよい。代替的または追加的に、いくつかの実施形態では、変数使用関係類似性は、ジャッカール指数Jとして測られてもよく、これは、上述のように、変数がソフトウェア・プログラムのコード断片において使用される場所の数VSPと、パターン内のマッチするノードに現われる対応する変数がパターンにおいて使用される場所の数VPとの交わりのサイズを、和集合のサイズで割ったものとして決定されうる。
Figure 2022029423000002
いくつかの実施形態では、異なる因子は、異なる重みを有してもよい。たとえば、構文類似性に関連する重みAは0.5であってもよ
く、型類似性に関連する重みBは2.0であってもよく、変数関係使用類似性に関連する重みCは1.0であってもよい。
上記は、重複するノードのそれぞれの類似性スコアを計算する例として与えられる。しかしながら、類似性の程度を決定するための任意の他の好適な技術も使用されうる。
ブロック510では、総合類似性スコアが決定されてもよい。総合類似性スコアは、ブロック508で決定された重複ノード類似性スコアの集計(aggregate)であってもよい。たとえば、総合類似性スコアは、いくつかの実施形態における重複ノード類似性スコアの平均であってもよい。別の例として、総合類似性スコアは、重複ノード類似性スコアの生の合計または該生の合計を特定の範囲(たとえば、「0」から「1」)に正規化したものであってもよい。総合類似性スコアは、コード断片「C」とバグ・パターン「P」の間の全体的な類似性の程度を示しうる。
当業者は、本明細書に開示されているこの、および他のプロセス、動作、および方法について、方法500に関して実行される機能および/または動作が異なる順序で実施されうることを理解するであろう。さらに、概説された機能および動作は、単に例として提供されており、かかる機能および動作のいくつかは、開示された実施形態の本質を損なうことなく、任意的であってもよく、より少数の機能および動作に組み合わされてもよく、または追加的な機能および動作に展開されてもよい。いくつかの実施形態では、方法500は、追加的なブロックまたはより少数のブロックを含んでいてもよい。たとえば、いくつかの実施形態では、方法500は、特定のコード断片のすべての行が、未定義のトークンについて解析されるまで、繰り返されてもよい。
上述のように、本開示に記載される実施形態は、以下により詳細に論じられるように、さまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含む、特殊目的または汎用コンピュータ(たとえば、図2のプロセッサ250)の使用を含んでいてもよい。さらに、上述のように、本開示に記載の実施形態は、コンピュータ実行可能な命令またはデータ構造を担持するまたは記憶するためのコンピュータ読み取り可能な媒体(たとえば、図2のメモリ252またはデータ記憶装置254)を使用して実装されてもよい。
本開示において使用されるところでは、用語「モジュール」または「コンポーネント」は、該モジュールまたはコンポーネントのアクションを実行するように構成された具体的なハードウェア実装、および/または、計算システムの汎用ハードウェア(たとえば、コンピュータ読み取り可能媒体、処理装置など)に記憶および/または実行されうるソフトウェアオブジェクトもしくはソフトウェアルーチンを指しうる。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、およびサービスは、(たとえば、別個のスレッドとして)計算システム上で実行されるオブジェクトまたはプロセスとして実装されてもよい。本開示に記載されるシステムおよび方法のいくつかは、一般に、(汎用ハードウェアに記憶される、および/または、汎用ハードウェアによって実行される)ソフトウェアで実装されるものとして記載されるが、特定のハードウェア実装またはソフトウェアと特定のハードウェア実装との組み合わせも可能であり、考えられている。本稿において、「コンピューティングエンティティ」は、本開示において前に定義された任意の計算システム、または計算システム上で動作する任意のモジュールまたは小モジュールの組み合わせであってもよい。
本開示において、特に添付の特許請求の範囲(たとえば、添付の特許請求の範囲の本文)において使用される用語は、一般に「オープン」な用語として意図されている(たとえば、「含む」という用語は、「…を含むが、それに限定されない」と解釈されるべきであり、「有する」という用語は、「少なくとも…を有する」と解釈されるべきであり、「包含する」という用語は、「…を包含するが、それに限定されない」と解釈されるべきである、など)。
さらに、導入されるクレーム記載の特定の数が意図されている場合、そのような意図はクレームに明示的に記載され、そのような記載がない場合、そのような意図は存在しない。たとえば、理解の助けとして、以下の添付の特許請求の範囲は、クレーム記載を導入するために「少なくとも1つの」および「一つまたは複数の」という導入句の使用を含むことがある。しかしながら、そのような句の使用は、不定冠詞「a」または「an」によるクレーム記載の導入がそのように導入されるクレーム記載を含む何らかの特定のクレームを、そのような記載を一つのみ含む実施形態に限定することを含意していると解釈されるべきではない。たとえ同じクレームが「一つまたは複数の」または「少なくとも一つの」のような導入句および「a」または「an」のような不定冠詞を含む場合でもそうである(たとえば、「a」および/または「an」は、「少なくとも一つの」または「一つまたは複数の」を意味すると解釈されるべきである)。同じことは、クレーム記載を導入するために使われる定冠詞の使用についても成り立つ。
さらに、導入されたクレーム記載の特定の数が明示的に記載されている場合であっても、当業者は、そのような記載が、少なくともその記載された数を意味するものと解釈されるべきであることを認識するであろう(たとえば、他の修飾語を伴わない「2つの記載」というだけの記載は、少なくとも2つの記載または2つ以上の記載を意味する)。さらに、「A、B、C等の少なくとも一つ」または「A、B、C等の一つまたは複数」と類似の慣用表現が用いられる場合、一般に、そのような構文は、Aのみ、Bのみ、Cのみ、AとB、AとC、BとC、またはAとBとC等を含むことが意図される。
さらに、明細書、特許請求の範囲、または図面のいずれかを問わず、2つ以上の代替的な用語を提示する離接的な語句は、それらの用語のうちの一つ、それらの用語のいずれか、または両方の用語を含む可能性を考えていると理解されるべきである。たとえば、句「AまたはB」は、「A」または「B」または「AおよびB」の可能性を含むと理解されるべきである。句「AまたはB」のこの解釈は、「A」または「B」または「AおよびB」を含めるために用語「Aおよび/またはB」が時折使用されていたとしても、依然として適用可能である。
本開示に記載されたすべての例および条件付き言辞は、本開示および当該技術分野を促進するために発明者によって寄与される概念を理解する際に読者を助けるための教育的目的のために意図されており、そのように具体的に記載された例および条件に限定されることなく解釈されるべきである。本開示の実施形態を詳細に説明したが、本開示の精神および範囲から逸脱することなく、それにさまざまな変化、置換、および変更を行なうことができる。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
方法。
(付記2)
前記選択された投稿に基づいて、前記特定のエラーに関して一つまたは複数の修繕動作を実行する段階をさらに含む、付記1に記載の方法。
(付記3)
前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す類似性スコアを決定し;
前記類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択することを含む、
付記1に記載の方法。
(付記4)
前記複数の投稿から前記特定の投稿を選択することが:
前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す類似性スコアを決定し:
前記類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
付記1に記載の方法。
(付記5)
前記特定の第1の類似性を決定することは:
前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含む、
付記1に記載の方法。
(付記6)
前記特定の第2の類似性を決定することは:
前記特定のバグ・パターンを表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
前記特定の例示的コード断片を表わす第2のAPGを構築する段階と;
前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
付記1に記載の方法。
(付記7)
前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、付記1に記載の方法。
(付記8)
前記シンタックスは、複数の特徴のうちの一つまたは複数を含み、該複数の特徴が:
類似のタイプの異なるメソッドを共通の意味的挙動を示すものとして指定することを許容する意味的抽象化をサポートすること;
具体的な諸プログラム要素を抽象化するためにワイルドカードを使用すること;および
値に対する数値制約を表現することを許容することを含む、
付記7に記載の方法。
(付記9)
実行されることに応答してシステムに動作を実行させる命令を格納するように構成された一つまたは複数の非一時的なコンピュータ読み取り可能記憶媒体であって、前記動作は:
ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記10)
前記動作が、前記選択された投稿に基づいて、前記特定のエラーに関して一つまたは複数の修繕動作を実行する段階をさらに含む、付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記11)
前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す類似性スコアを決定し;
前記類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択することを含む、
付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記12)
前記複数の投稿から前記特定の投稿を選択することが:
前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す類似性スコアを決定し:
前記類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記13)
前記特定の第1の類似性を決定することは:
前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含む、
付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記14)
前記特定の第2の類似性を決定することは:
前記特定のバグ・パターンを表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
前記特定の例示的コード断片を表わす第2のAPGを構築する段階と;
前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記15)
前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記16)
前記シンタックスは、複数の特徴のうちの一つまたは複数を含み、該複数の特徴が:
類似のタイプの異なるメソッドを共通の意味的挙動を示すものとして指定することを許容する意味的抽象化をサポートすること;
具体的な諸プログラム要素を抽象化するためにワイルドカードを使用すること;および
値に対する数値制約を表現することを許容することを含む、
付記9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
(付記17)
システムであって;
一または複数のプロセッサと
前記一または複数のプロセッサによって実行されることに応答して当該システムに動作を実行させる命令を格納するように構成された一つまたは複数の非一時的なコンピュータ読み取り可能記憶媒体とを有しており、前記動作は:
ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
システム。
(付記18)
前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す第1の類似性スコアを決定し;
前記第1の類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択し;
前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す第2の類似性スコアを決定し:
前記第2の類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
付記17に記載のシステム。
(付記19)
前記特定の第1の類似性を決定することは:
前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含み、
前記特定の第2の類似性を決定することは:
前記特定の例示的コード断片を表わす第3のAPGを構築する段階と;
前記第2のAPGと前記第3のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
付記17に記載のシステム。
(付記20)
前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、付記9に記載のシステム。
302 バグのあるコード断片を取得
304 バグのあるコード断片とバグ・パターンの間の第1の類似性を決定
306 特定のバグ・パターンを選択
308 特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた投稿の例示的なコード断片との間の第2の類似性を決定
310 特定の投稿を選択

402 試験対象コードをインストルメント
404 試験対象コードを実行
406 障害(例外)トレースを収集
408 トレースから障害行を得て、バグのあるコード断片Bに含める
410 障害行からのトレースの後ろ向きスライスを実行
412 スライス点に対応する行(L)を取得
414 Lからの諸行をBに追加

502 コード断片Cの抽象プログラム・グラフ(APG)を構築
504 バグ・パターンPの抽象プログラム・グラフ(APG)を構築
506 重複を見出すためにCAPGおよびPAPGを整列
508 各重複点において類似性スコアを決定
510 総合類似性スコアを決定

Claims (20)

  1. ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
    前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
    前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
    前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
    前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
    方法。
  2. 前記選択された投稿に基づいて、前記特定のエラーに関して一つまたは複数の修繕動作を実行する段階をさらに含む、請求項1に記載の方法。
  3. 前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
    前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す類似性スコアを決定し;
    前記類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択することを含む、
    請求項1に記載の方法。
  4. 前記複数の投稿から前記特定の投稿を選択することが:
    前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す類似性スコアを決定し:
    前記類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
    請求項1に記載の方法。
  5. 前記特定の第1の類似性を決定することは:
    前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
    前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
    前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含む、
    請求項1に記載の方法。
  6. 前記特定の第2の類似性を決定することは:
    前記特定のバグ・パターンを表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
    前記特定の例示的コード断片を表わす第2のAPGを構築する段階と;
    前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
    請求項1に記載の方法。
  7. 前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、請求項1に記載の方法。
  8. 前記シンタックスは、複数の特徴のうちの一つまたは複数を含み、該複数の特徴が:
    類似のタイプの異なるメソッドを共通の意味的挙動を示すものとして指定することを許容する意味的抽象化をサポートすること;
    具体的な諸プログラム要素を抽象化するためにワイルドカードを使用すること;および
    値に対する数値制約を表現することを許容することを含む、
    請求項7に記載の方法。
  9. 実行されることに応答してシステムに動作を実行させる命令を格納するように構成された一つまたは複数の非一時的なコンピュータ読み取り可能記憶媒体であって、前記動作は:
    ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
    前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
    前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
    前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
    前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
    一つまたは複数のコンピュータ読み取り可能記憶媒体。
  10. 前記動作が、前記選択された投稿に基づいて、前記特定のエラーに関して一つまたは複数の修繕動作を実行する段階をさらに含む、請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  11. 前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
    前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す類似性スコアを決定し;
    前記類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択することを含む、
    請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  12. 前記複数の投稿から前記特定の投稿を選択することが:
    前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す類似性スコアを決定し:
    前記類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
    請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  13. 前記特定の第1の類似性を決定することは:
    前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
    前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
    前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含む、
    請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  14. 前記特定の第2の類似性を決定することは:
    前記特定のバグ・パターンを表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
    前記特定の例示的コード断片を表わす第2のAPGを構築する段階と;
    前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
    請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  15. 前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  16. 前記シンタックスは、複数の特徴のうちの一つまたは複数を含み、該複数の特徴が:
    類似のタイプの異なるメソッドを共通の意味的挙動を示すものとして指定することを許容する意味的抽象化をサポートすること;
    具体的な諸プログラム要素を抽象化するためにワイルドカードを使用すること;および
    値に対する数値制約を表現することを許容することを含む、
    請求項9に記載の一つまたは複数のコンピュータ読み取り可能記憶媒体。
  17. システムであって;
    一または複数のプロセッサと
    前記一または複数のプロセッサによって実行されることに応答して当該システムに動作を実行させる命令を格納するように構成された一つまたは複数の非一時的なコンピュータ読み取り可能記憶媒体とを有しており、前記動作は:
    ソフトウェア・プログラムのソースコードの、バグのあるコード断片を取得する段階であって、該バグのあるコード断片は特定のエラーを含む、段階と;
    前記バグのあるコード断片と、以前に識別されたバグ・シナリオの複数のバグ・パターンのそれぞれとの間のそれぞれの第1の類似性を決定する段階と;
    前記複数のバグ・パターンから特定のバグ・パターンを、前記特定のバグ・パターンと前記バグのあるコード断片との間の決定された特定の第1の類似性に基づいて選択する段階と;
    前記特定のバグ・パターンと、一つまたは複数のウェブサイトから得られた複数の投稿のそれぞれの投稿からそれぞれ得られた複数の例示的コード断片のそれぞれとの間の、それぞれの第2の類似性を決定する段階と;
    前記複数の投稿から特定の投稿を、前記特定のバグ・パターンと前記特定の投稿の特定の例示的コード断片との間の決定された特定の第2の類似性に基づいて、前記バグのあるコード断片の前記特定のエラーを訂正する潜在的な解決策を提供するものとして選択する段階とを含む、
    システム。
  18. 前記複数のバグ・パターンから特定のバグ・パターンを選択することが:
    前記特定のバグ・パターンと前記バグのあるコード断片との間の前記特定の第1の類似性を示す第1の類似性スコアを決定し;
    前記第1の類似性スコアが、前記複数のバグ・パターンの他のバグ・パターンと比較して、前記特定のバグ・パターンが、前記バグのあるコード断片と最も高い度合いの類似性を有することを示すことに応答して、前記特定のバグ・パターンを選択し;
    前記特定のバグ・パターンと前記特定の例示的コード断片との間の前記特定の第2の類似性を示す第2の類似性スコアを決定し:
    前記第2の類似性スコアが、前記特定の例示的コード断片が、前記複数の投稿の他の投稿と比較して、前記特定のバグ・パターンと最も高い度合いの類似性を有することを示すことに応答して、前記特定の投稿を選択することを含む、
    請求項17に記載のシステム。
  19. 前記特定の第1の類似性を決定することは:
    前記バグのあるコード断片を表わす第1の抽象プログラム・グラフ(APG)を構築する段階と;
    前記特定のバグ・パターンを表わす第2のAPGを構築する段階と;
    前記第1のAPGと前記第2のAPGの間の重複に基づいて、前記特定の第1の類似性を決定する段階とを含み、
    前記特定の第2の類似性を決定することは:
    前記特定の例示的コード断片を表わす第3のAPGを構築する段階と;
    前記第2のAPGと前記第3のAPGの間の重複に基づいて、前記特定の第2の類似性を決定する段階とを含む、
    請求項17に記載のシステム。
  20. 前記複数のバグ・パターンのそれぞれは、前記ソフトウェア・プログラムのソフトウェア言語のシンタックスに従ってフォーマットされる、請求項9に記載のシステム。
JP2021110711A 2020-08-04 2021-07-02 ソフトウェア・パッチに関連する投稿の自動識別 Pending JP2022029423A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/985171 2020-08-04
US16/985,171 US11556455B2 (en) 2020-08-04 2020-08-04 Automated identification of posts related to software patches

Publications (1)

Publication Number Publication Date
JP2022029423A true JP2022029423A (ja) 2022-02-17

Family

ID=80115060

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021110711A Pending JP2022029423A (ja) 2020-08-04 2021-07-02 ソフトウェア・パッチに関連する投稿の自動識別

Country Status (2)

Country Link
US (1) US11556455B2 (ja)
JP (1) JP2022029423A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220342799A1 (en) * 2021-04-20 2022-10-27 Fujitsu Limited Semi-supervised bug pattern revision

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8713534B2 (en) * 2008-08-20 2014-04-29 International Business Machines Corporation System, method and program product for guiding correction of semantic errors in code using collaboration records
US9110769B2 (en) * 2010-04-01 2015-08-18 Microsoft Technology Licensing, Llc Code-clone detection and analysis
US20130179863A1 (en) * 2012-01-11 2013-07-11 Microsoft Corporation Bug variant detection using program analysis and pattern identification
US9965633B2 (en) * 2015-12-29 2018-05-08 Sap Se Using code similarities for improving auditing and fixing of SAST-discovered code vulnerabilities
US10664383B2 (en) * 2018-08-22 2020-05-26 Fujitsu Limited Automated software program repair of similar code snippets

Also Published As

Publication number Publication date
US11556455B2 (en) 2023-01-17
US20220043738A1 (en) 2022-02-10

Similar Documents

Publication Publication Date Title
US11797298B2 (en) Automating identification of code snippets for library suggestion models
US11354225B2 (en) Automating identification of test cases for library suggestion models
US11494181B2 (en) Automating generation of library suggestion engine models
Shang et al. Assisting developers of big data analytics applications when deploying on hadoop clouds
US20200319878A1 (en) Library Model Addition
US10545999B2 (en) Building features and indexing for knowledge-based matching
US11042467B2 (en) Automated searching and identification of software patches
EP4091059A1 (en) Intelligently fuzzing data to exercise a service
EP3974964A1 (en) Automated generation of software patches
Arya et al. Information correspondence between types of documentation for APIs
JP2022029423A (ja) ソフトウェア・パッチに関連する投稿の自動識別
Lee et al. Automatic detection of design pattern for reverse engineering
Nguyen et al. Output-oriented refactoring in php-based dynamic web applications
JP2022078962A (ja) エラーに関連するコードの行の自動識別
Lee et al. A design pattern detection technique that aids reverse engineering
EP4080372A1 (en) Semi-supervised bug pattern revision
Santos et al. An Automated Approach to Recover the Use-case View of an Architecture
US20230130649A1 (en) Techniques for semantic analysis of cybersecurity event data and remediation of cybersecurity event root causes
Wang Analyses of Regular Expression Usage in Software Development
Spektor Two Techniques For Automated Logging Statement Evolution
Ali et al. Explication and Monitoring of Quality of Experience (QOE) in Android
JP2021060961A (ja) 説明的及び実行可能な修復例の生成
Hodován Fuzz Testing and Test Case Reduction