JP2021034007A - ソフトウェアパッチの自動検索及び識別 - Google Patents
ソフトウェアパッチの自動検索及び識別 Download PDFInfo
- Publication number
- JP2021034007A JP2021034007A JP2020047853A JP2020047853A JP2021034007A JP 2021034007 A JP2021034007 A JP 2021034007A JP 2020047853 A JP2020047853 A JP 2020047853A JP 2020047853 A JP2020047853 A JP 2020047853A JP 2021034007 A JP2021034007 A JP 2021034007A
- Authority
- JP
- Japan
- Prior art keywords
- abstract
- tree
- node
- post
- tree representation
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 claims abstract description 108
- 230000004044 response Effects 0.000 claims description 47
- 230000009471 action Effects 0.000 claims description 25
- 238000004891 communication Methods 0.000 description 21
- 238000013500 data storage Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 7
- 238000001514 detection method Methods 0.000 description 6
- 238000007792 addition Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 5
- 230000037430 deletion Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 239000000203 mixture Substances 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000002730 additional effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000010267 cellular communication Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- MYWUZJCMWCOHBA-VIFPVBQESA-N methamphetamine Chemical compound CN[C@@H](C)CC1=CC=CC=C1 MYWUZJCMWCOHBA-VIFPVBQESA-N 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】ソフトウェアパッチの自動検索及び識別のための方法等を提供する。【解決手段】方法200において、デバイスはソフトウェアプログラム違反特性210を取得する。ポストを有するウェブサイト220は、プログラミング、ソースコード、ソースコード内の違反を識別し修正することなどに関連したポストを含む。デバイスは、違反特性を用いて、特性に基づいたウェブサイト検索230を実行して、ポストの組240を取得する。デバイスは、ポストの組及び違反を有するソフトウェアプログラム250に対して類似性解析260を実行する。デバイスは、ポストの類似性スコアに基づき、ポストの組の中から1つのポストを選択する。選択されたポスト270は、選択されたポストを用いて違反を修正することに関する修正動作280を実行するために使用される。修正動作は、選択されたポストを、デバイスに接続されたコンピュータ画面に示すことを含む。【選択図】図2
Description
本開示で議論される実施形態は、ソフトウェアパッチの自動検索及び識別に関係がある。
ソフトウェアプログラムは、それらの中にしばしばエラー(一般に「バグ」又は「違反」と呼ばれる。)があり、よって、ソフトウェアプログラムは、意図されたように動作しないことがある。様々な方法及びシステムが、ソフトウェアプログラム内のエラーを修正するためのパッチを識別しようとして使用され得る。
本開示で請求される対象は、上述されたような環境でしか動作しない実施形態又は上述されたようなあらゆる欠点を解消する実施形態に制限されない。むしろ、この背景は、本開示で記載されるいくつかの実施形態が実施され得る技術分野の一例を説明するためにのみ設けられている。
方法は、第1ソフトウェアプログラムにおいて第1違反を取得することを含んでよい。方法は、第1違反の1つ以上の特性を識別することを含んでよい。方法は、少なくとも1つのウェブサイトを検索して、少なくとも1つのウェブサイト上でポストの組を識別することを更に含んでよい。ポストの組の中の各ポストは、第1違反の1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別されてよい。方法はまた、第1違反を含む第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することも含んでよい。方法は、第2コンテキストの組を取得することを更に含んでよく、第2コンテキストの組の中の各第2コンテキストは、ポストの組の中の異なるポストに対応する。各第2コンテキストは、対応する他の違反を含む他のソフトウェアプログラムの中の対応する1つの各々の部分を含んでよい。方法はまた、第1コンテキストの第1抽象構文木を取得することも含んでよく、方法は、第2抽象構文木の組を取得することを更に含んでよい。第2抽象構文木の組の中の各第2抽象構文木は、第2コンテキストの組の中の異なる第2コンテキストに対応してよい。方法はまた、第1抽象構文木を簡約及び抽象化することによって第1コンテキストの第1抽象木表現を取得するように第1抽象構文木を変更することも含んでよい。方法は、第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することを更に含んでよい。方法はまた、類似性スコアの組を決定することも含んでよい。類似性スコアの組の中の各類似性スコアは、第1抽象木表現を第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定されてよい。方法はまた、第1抽象木表現と特定の第2コンテキストに関連した第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づきポストの組の中の特定のポストを選択することも含んでよく、特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び特定のポストの特定の違反に関連する。
実施形態の目的及び利点は、少なくとも、特許請求の範囲で特に指し示されている要素、特徴、及び組み合わせによって、実現及び達成される。
上記の概要及び下記の詳細な説明はいずれも、例として与えられており、請求される発明を説明するためのものであって、限定するものではない。
図面を使用して、更なる特定及び詳細をもって、例となる実施形態が記載及び説明される。
本開示で記載されるいくつかの実施形態は、ソフトウェアパッチの自動検索及び識別の方法及びシステムに関する。ソフトウェアプログラムは、ソフトウェアプログラムを意図しない様態で動かす可能性があるエラー(一般に「バグ」又は「違反」とも呼ばれる。)をしばしば含む。更に、様々なシステム及び技術が、ソフトウェアプログラムを直すためのソフトウェアパッチを検索及び識別するためにしばしば使用される。
ソフトウェアプログラムの開発中に、ユーザは、ソフトウェアプログラムを書くときに1つ以上の違反に遭遇することがある。違反を修正しようとして、ユーザは、プログラミングブックを閲覧したり、インターネット上でガイドを見たり、違反を解決することを支援し得る関連した議論又はポストのオンラインのディスカッションフォーラムを検索したりすることができる。しかし、違反を修正しようとするユーザの試みは、非効率的であることがある。例えば、ユーザは、違反がどのようなものであるか、及び/又はなぜ違反がユーザのコードに出現しているのかを全く把握していないことがある。故に、ユーザは、ユーザが実際に直面しているものとは異なる問題に対する解法を見つけようと努める可能性がある。更には、ユーザは、ユーザが見つけることができる違反に対する潜在的な解法がユーザの問題に関連しているかどうかを判断することができない可能性がある。すなわち、ユーザは、ユーザが見つけることができる潜在的なパッチが、ユーザが遭遇している違反に類似する違反に対する解法であるかどうかを判断することができないことがある。よって、たとえ関連がありそうな潜在的な解法をユーザが見つけることができるとしても、ユーザは、その場合に、どれが最も有益であり得るかを十分に理解しないまま、それらの潜在的な解法を読み通す可能性がある。違反のはっきりとした原因を特に明確に示すこと及び検索により得られる無数の、可能性がある解法から適切な解法を識別することがユーザにとって困難であることで、このタスクは、より難しくなり得る。
本開示の1つ以上の実施形態によれば、ソフトウェア開発の技術分野は、コンピューティングシステムがソフトウェアプログラムにおいて違反を識別し且つそのソフトウェアに類似した他のソフトウェアプログラムを識別することができるようにコンピュータシステムを構成することによって、改善され得る。いくつかの実施形態で、コンピュータシステムは、違反に対するパッチを識別した後で、修正動作を自動で実行し得る。代替的に、又は追加的に、いくつかの実施形態で、コンピュータシステムは、識別されたソフトウェアプログラムを表示してよく、ユーザは、識別されたソフトウェアプログラム及び/又は識別されたソフトウェアプログラムに関連したパッチに基づき、修正動作を実行してよい。例えば、コンピューティングシステムは、ソフトウェアプログラムにおいて違反を識別するよう構成されてよい。コンピューティングシステムは、それから、違反の特性を識別し、1つ以上のウェブサイトの検索を実行して、違反及びその特性に関係があるウェブサイト上のポストの組を生成してよい。次いで、コンピューティングシステムは、ポストの組の中の各ポストにおけるコードスニペットと違反を有しているソフトウェアプログラムとの間の類似性を決定してよく、コードスニペットがソフトウェアと最も類似しているポストを選択してよい。次いで、コンピューティングシステムは、最も類似しているポストをディスプレイで提示してよく、それにより、ユーザは、選択されたポストに基づきソフトウェアプログラムに対して修正動作を実行し得る。
いくつかの実施形態で、システムは、特定の方法でソフトウェアプログラム内の違反に対する特定のパッチを見つけることによって、ソフトウェアプログラムの開発を助け得る。システムは、ユーザが自分の力で見つけることができるよりもユーザのコードにとって適切であり且つ関連している特定のパッチを見つけ得る。更には、システムは、ユーザよりも速くパッチを見つけ得る。パッチの改善された関連性は、ソフトウェア違反を修正することを助け得る。ソフトウェア違反を修正するための可能性があるパッチの識別の速度は、ソースコードの開発及び試験を容易にすることを助け得る。かような及び他の実施形態で、ユーザは、ユーザの時間の大部分をしばしば占めることがあるバグフィックスの代わりにコードを記述することに焦点を当てることによって、より効率的にコードを開発することができる。
代替的に、又は追加的に、システムは、ユーザが識別し得るよりも正確な及び/又は関連している、ソフトウェアプログラムに対するパッチを識別し得る。より正確な及び/又はより関連しているパッチの識別は、より効率的なコード、又はユーザによって意図されたように動作するコードをユーザが書くことを助け得る。ソフトウェアプログラムのためのパッチの改善された識別は、このようにして、違反の修正を助けることができ、その結果として、特定のソースコードを改善することを助け得る。
添付の図面を参照して、本開示の実施形態を説明する。
図1は、本開示で記載される少なくとも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通信ネットワーク、電力線搬送通信(Power Line Communication)ネットワーク、MQTT(Message Queue Telemetry Transport,)通信ネットワーク、MQTTセンサ(MQTT−S)通信ネットワーク、制約付きアプリケーションプロトコル(Constrained Application Protocol,CoAP)通信ネットワーク、REST(Representative State Transfer) API(Application Protocol Interface)通信ネットワーク、XMPP(eXtensible Messaging and Presence Protocol)通信ネットワーク、セルラー通信ネットワーク、任意の同様の通信ネットワーク、又はデータを送信及び受信するそれらの任意の組み合わせを含むか、あるいは、それらを含むように構成される。ネットワーク110で通信されるデータは、ショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTTP)、ダイレクトデータ接続、無線アプリケーションプロトコル(WAP)、電子メール、スマートエネルギプロファイル(SEP)、ECHONET Lite、OpenADR、又はデバイス120、ウェブサイト130、クラウドサーバ通信、若しくはゲートウェイにより実装され得る任意の他のプロトコルを介して通信されるデータを含んでよい。
デバイス120は、プロセッサ、メモリ、及び通信機能を含むコンピュータベースのハードウェアデバイスを含んでよい。デバイス120は、環境100の他の構成要素のいずれかとデータをやりとりするようにネットワーク110へ結合されてよい。デバイス120のいくつかの例には、携帯電話機、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、セットトップボックス、仮想現実デバイス、又はコネクテッドデバイス、などがある。デバイス120は、プロセッサベースのコンピューティングデバイスを含んでもよい。例えば、デバイス120は、ハードウェアサーバ又は、サーバとして機能するよう構成された他のプロセッサベースのコンピューティングデバイスを含んでもよい。デバイス120は、メモリ及びネットワーク通信機能を含んでよい。いくつかの実施形態で、デバイス120は、図8に関連して後述されるようなコンピューティングシステムを含んでもよい。
いくつかの実施形態で、デバイス120は、ソフトウェアプログラム122を含んでよい。かような及び他の実施形態で、ソフトウェアプログラム122は、例えば、とりわけ、C++、C、アセンブリ、C#、Java(登録商標)、BASIC、JavaScript(登録商標)、Phython、及び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は、異なる特性を含み得る。例えば、違反124は、違反124の名称を含んでよい。代替的に、又は追加的に、いくつかの実施形態で、違反124は、違反124の説明を含んでもよい。例えば、違反124の説明は、違反124のタイプを含んでよい。代替的に、又は追加的に、違反124は、プログラミング言語を含んでもよい。例えば、違反124のプログラミング言語は、ソフトウェアプログラム122のプログラミング言語と同じであってよい。一例として、違反124は、ランタイム例外(exception)を含んでよい。ランタイム例外の名称は、“java.lang.ArrayIndexOutOfBoundsException”であってよい。例外の説明は、“Index 10 out of bounds for length 10”であってよい。例外のためのタイプは、out-of-bounds exceptionであってよい。例外のためのプログラミング言語は、Javaプログラミング言語であってよい。
ウェブサイト130は、インターネット上の如何なる適用可能なウェブサイトも含んでよい。代替的に、又は追加的に、いくつかの実施形態で、ウェブサイト130は、部内イントラネットサイト上の文書の集合のような、部内リポジトリ又はリソースを含んでよい。例えば、いくつかの実施形態で、ウェブサイト130は、ユーザが質問を投稿したり、他のユーザが回答を投稿したりすることができるディスカッションフォーラムを含んでもよい。例えば、1人のユーザが、違反を含むソフトウェアプログラムの形で質問を投稿することができ、もう1人のユーザが、もはや違反を含まない修正済みソフトウェアプログラムの形で質問に対する回答又はパッチを投稿することができる。かような及び他の実施形態で、複数人のユーザが質問に対する回答を投稿してもよく、且つ/あるいは、1つのユーザが複数の回答を投稿してもよい。いくつかの実施形態で、質問を投稿したユーザは、ユーザが経験した違反を解消するものとして1つの回答を選択することができる。いくつかの実施形態で、ウェブサイト130のユーザは、ユーザによって投稿された異なる回答について採決を行ってもよい。図1は単一のウェブサイト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の1つ以上は同じ違反であってよく、関連する違反であってよく、且つ/あるいは、類似した違反であってよい。例えば、いくつかの実施形態で、違反144Aは、C++プログラミング言語におけるインデックス範囲外(index out of bounds)違反であってよく、一方、違反144Cは、Javaプログラミング言語におけるインデックス範囲外違反であってよい。この例で、違反144A及び違反144Cは、類似した違反であり得る。いくつかの実施形態で、違反144は、たとえ違反が異なる環境で異なるように明示及び/又は処理されるとしても、類似した違反であると決定されることがある。例えば、配列インデックス範囲外(array index out of bounds)アクセスは、たとえ挙動の根本原因が同じであり得るとしても(すなわち、その規定されたインデックス範囲の外の配列にアクセスしようと試みること)、Java環境と対比してC++環境ではランタイム中に異なるように明示及び処理されることがある。
いくつかの実施形態で、ポスト140の1つ以上はパッチを含んでもよい。例えば、ポスト140Aはパッチ146Aを含んでよく、ポスト140Bはパッチ146Bを含んでよく、ポスト140Cはパッチ146C(集合的にパッチ146)を含んでよい。いくつかの実施形態で、1つ以上のポスト140は、関連するパッチ146を含まなくてもよい。例えば、ポスト140Dはパッチを含まなくてもよい。いくつかの実施形態で、パッチ146は、対応する違反144を修正する方法を表し得る。すなわち、パッチ146Aは、違反144Aを修正することができ、それにより、パッチ146Aをソフトウェアプログラム142Aに適用した後、ソフトウェアプログラム142Aはもはや違反144Aを有していない。いくつかの実施形態で、パッチ146は、ソフトウェアプログラム142内の違反144の原因に適用され得るソースコードを含むことがある。いくつかの実施形態で、ポスト140の1つ以上は、複数のパッチ146を含んでよい。例えば、ポスト140Bは、複数のパッチ146Bを含んでよい。かような及び他の実施形態で、ウェブサイト130の異なるユーザは、異なるパッチ146について順位付け又は投票してよく、それにより、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を含むべきかどうかを示すタグを含んでよい。
検索クエリによるウェブサイト130の検索は、ポスト140の組を返してよい。記載されるように、ウェブサイト130の検索は、違反124の特性に基づいてよく、違反124に類似している違反144を含むポスト140を返してよい。例えば、ウェブサイト130は4つのポスト140を含んでよい。検索クエリによるウェブサイト130の検索は、違反144A及び違反144Cが違反124に類似しているので、ポスト140A及びポスト140Cを返してよい。ウェブサイト130の検索は、違反144Bが違反124に類似していないので、ポスト140Bを返さなくてよい。ウェブサイト130の検索は、ポスト140Dがパッチを含まないので、ポスト140Dを返さなくてよい。いくつかの実施形態で、デバイス120は、図2及び図5に関して後述される1つ以上の動作に従って、どの違反が類似しているのか及びどれが類似していないのかを決定するよう構成されてよい。
次いで、デバイス120は、ソフトウェアプログラム122とソフトウェアプログラム142Aとの間の類似性と、ソフトウェアプログラム122とソフトウェアプログラム142Cとの間の類似性とを決定してよい。かような及び他の実施形態で、デバイス120は、ソフトウェアプログラム122からメソッドを取り出してよい。かような及び他の実施形態で、メソッドは、違反124に関連するソースコードを含んでよい。例えば、ソフトウェアプログラム122は、数百行のコード、数千行のコード、数百万行のコード、又は任意数の行のコードを含んでよい。違反124は、ソフトウェアプログラム122内のメソッドに関連してよく、メソッドは、ソフトウェアプログラム122の全体よりも少ない行のコードを含んでよい。デバイス120は、ソフトウェアプログラム122のメソッドとソフトウェアプログラム142Aとの間の類似性と、ソフトウェアプログラム122のメソッドとソフトウェアプログラム142Cとの間の類似性とを決定してよい。
いくつかの実施形態で、デバイス120は、ソフトウェアプログラム122の抽象木表現及び/又はソフトウェアプログラム122の一部分を、ソフトウェアプログラム142及びパッチ146に基づく抽象木表現と比較することによって、ソフトウェアプログラム122と1つ以上のソフトウェアプログラム142との間の類似性を決定してよい。例えば、図7に関して後述されるように、ソフトウェアプログラム142A及び1つ以上のパッチ146Aに基づき、パターンが取り出されてよい。例えば、デバイス120は、1つ以上のパッチ146Aの抽象木表現内の対応するノードに基づき、ソフトウェアプログラム142Aの抽象木表現内の1つ以上のノードを選択してよい。
代替的に、又は追加的に、デバイス120は、意味的及び/又は構文的コードクローン検出を用いて、ソフトウェアプログラム122と1つ以上のソフトウェアプログラム142との間の類似性を決定してよい。例えば、デバイス120は、ソフトウェアプログラム122及び1つ以上のソフトウェアプログラム142が同じ機能を実行するか又は同じ若しくは類似した物事を実行している程度を決定するために、上記のものとは異なる意味的コードクローン検出アルゴリズムを用いて、ソフトウェアプログラム122を1つ以上のソフトウェアプログラム142と比較してもよい。これに関連して、デバイス120は、ソフトウェアプログラム122及び1つ以上のソフトウェアプログラム142のソースコードの構成及び構造を比較してよい。
代替的に、又は追加的に、いくつかの実施形態で、デバイス120は、構文的コードクローン検出を用いて類似性を決定するように、ソフトウェアプログラム122を1つ以上のソフトウェアプログラム142と比較してよい。デバイス120は、ソフトウェアプログラム122の構文木を取得してよく、そして、ソフトウェアプログラム142の構文木を取得してよく、構文木どうしを比較して類似性を決定し得る。
次いで、デバイス120は、ソフトウェアプログラム122と最もよく類似しているソフトウェアプログラム142に関連したポスト140を選択してよい。例えば、ソフトウェアプログラム142Cが、ソフトウェアに最もよく類似していると決定されてよい。いくつかの実施形態で、デバイス120は、図7に関して後述される1つ以上の動作に従って、ソフトウェアプログラム142とソフトウェアプログラム122との間の類似性を決定するよう構成されてよい。デバイス120はポスト140Cを選択してよい。次いで、デバイス120は、デバイス120のユーザがソフトウェアプログラム122に対してパッチ146Cを実施することを可能にするように、パッチ146Cに基づくパッチをデバイス120のユーザに表示してよい。代替的に、又は追加的に、いくつかの実施形態で、デバイス120及び/又はユーザは、例えば、パッチ146Cに基づく修正動作のような修正動作を、ポスト140Cに基づきソフトウェアプログラム122に対して実行してよい。
本開示の適用範囲から逸脱することなしに、図1に対して変更、追加、又は削除が行われてよい。例えば、環境100は、本開示で図示及び記載されているものよりも多い又は少ない要素を含んでもよい。更には、いくつかの実施形態で、ソフトウェアプログラム122は、デバイス120とは異なるデバイスを用いて生成及び編集されてもよい。例えば、かような及び他の実施形態で、ユーザは、ソフトウェアプログラム122を生成及び/又は編集するために1つのデバイスを使用してよく、デバイス120は、ウェブサイト130の検索を実行し、違反124に基づきポスト140を識別してよい。
代替的に、又は追加的に、いくつかの実施形態で、デバイス120及びデバイス120に関して論じられている動作は、異なるシステムにわたって分布してもよい。かような及び他の実施形態で、環境100は、ネットワーク110と、ネットワーク110を介して通信上結合され得るデバイス120及びウェブサイト130を含む1つ以上のデバイスとを含んでよい。
図2は、ソフトウェアパッチの自動検索及び識別の、例となる方法200のフローチャートである。いくつかの実施形態で、方法200の1つ以上の動作は、コンピューティングシステム又はデバイスによって実行されてよい。図2に表されるように、図1のデバイス120のようなデバイスは、違反特性210を取得してよい。違反特性210は、数ある特性の中でもとりわけ、違反の名称、違反のタイプ、違反のプログラミング言語、違反のソースコード内の場所を含んでよい。ポストを有するウェブサイト220は、プログラミング、ソースコード、ソースコード内の違反を識別し修正すること、などに関連したポストを含んでよい。違反特性210を用いて、デバイスは、特性に基づいたウェブサイト検索230を実行して、ポストの組240を取得してよい。いくつかの実施形態で、ウェブサイトは、ウェブサイトがソフトウェアプログラムのリポジトリ並びに/又は違反及びパッチを有するソフトウェアプログラムを含むことに基づき、選択されてよい。例えば、ウェブサイトは、違反を伴うソフトウェアプログラムを含む様々なポストを含んでよい。ポストのいくつかはまた、ソフトウェアプログラム内の違反を修正するよう設計され得るパッチを含んでよい。代替的に、又は追加的に、いくつかの実施形態で、ウェブサイトは、内部コードリポジトリ、質問及び回答を有する内部サイト、メッセージボード、などを含んでよい。いくつかの実施形態で、ポストとともに複数のウェブサイトが存在してもよい。例えば、いくつかのポストは、第1ウェブサイトに関連してよく、他のポストは、第2ウェブサイトに関連してよい。
いくつかの実施形態で、デバイスは、違反特性210の中の1つ以上の特性を用いて検索クエリを形成することによって、検索230を実行してよい。例えば、検索クエリは、違反の名称及び違反のタイプを含んでよい。いくつかの実施形態で、検索クエリはまた、回答済みの質問に対するタグ及び/又は違反に関連したプログラミング言語に対するタグのような1つ以上のタグを含んでもよい。検索クエリに基づき、ポストの組240は識別されてよい。例えば、ポストの組は、ポストの組の中の各ポストが質問に対する回答を含むこと、ポスト内の質問が、違反特性210と同じタイプ及び/又は同じ名称の違反を有するコードスニペットを含むこと、並びにポスト内のコードスニペットが違反と同じプログラミング言語で書かれていることに基づき、識別されてよい。検索230は、粗検索(coarse search)と見なされてよい。
次いで、デバイスは、ポスト240の組及び違反を有するソフトウェアプログラム250に対して類似性解析260を実行してよい。例えば、デバイスは、違反を有するソフトウェアプログラム250を、ポストの組240の中の各ポストからのコードスニペットと比較してよい。いくつかの実施形態で、類似性解析は、図7に関して後述されるように、違反を有するソフトウェアプログラム250の抽象木表現を、ポストの組の中の各ポストに基づく抽象木表現と比較することによって、実行されてよい。いくつかの実施形態で、類似性解析は、他の形態の意味的及び/又は構文的コードクローン検出を用いて実行されてもよい。例えば、デバイスは、ポストの組240の中の各ポストについて類似性スコアを生成してよく、類似性スコアは、ポストのコードスニペットと違反を有するソフトウェアプログラム250との間の類似性を評価する。いくつかの実施形態で、デバイスは、ポストの組240の中のあるポストと、違反を含むソフトウェアプログラム内のメソッドとの類似性スコアを生成してもよい。かような及び他の実施形態で、類似性スコアが高いほど、ポストのコードスニペットと違反を有するソフトウェアプログラム250とがより類似していることに関連し得る。代替的に、又は追加的に、いくつかの実施形態で、類似性スコアが低いほど、ポストのコードスニペットと違反を有するソフトウェアプログラム250とがより類似していることに関連してもよい。
いくつかの実施形態で、デバイスは、ポストの類似性スコアに基づき、ポストの組240の中から1つのポストを選択してよい。いくつかの実施形態で、各ポストは、数で示される類似性スコアを有してよい。例えば、第1ポストは、5.4の類似性スコアを有してよい。第2ポストは、7.6の類似性スコアを有してよい。第2ポストは、第1ポストよりも類似性スコアが高いので、選択されてよい。選択されたポスト270は、次いで、選択されたポスト270を用いて違反を修正することに関する修正動作280を実行するために使用されてよい。いくつかの実施形態で、修正動作280は、選択されたポスト270をディスプレイ、例えば、デバイスに接続されたコンピュータ画面に示すことを含んでもよい。ソフトウェアプログラム250の開発者は、次いで、選択されたポスト270に基づきソフトウェアプログラム250を修正してよい。代替的に、又は追加的に、いくつかの実施形態で、修正動作280は、デバイスが選択されたポスト270に基づきソフトウェアプログラム250を修正することを含んでもよい。例えば、選択されたポスト270は、違反に対するパッチを含んでよい。例えば、ユーザは、ウェブサイト220上にポストにより質問を発行してよい。他のユーザは、ポストの質問に対する回答を投稿してよい。デバイスは、選択されたポスト270内の回答を、ソフトウェアプログラム250内の違反に対するパッチを生成するガイドとして提示することを含む修正動作を実行してよい。
図3A〜3Fは、ソフトウェアプログラムの類似性の比較を表す。図3Aは、ソフトウェアプログラム310を含む。ソフトウェアプログラム310は、図1のソフトウェアプログラム122及び/又は図2の違反を有するソフトウェアプログラム250のような、違反を有するソフトウェアプログラムを表してよい。図1のデバイス120のようなデバイスが、種々のコードスニペットをソフトウェアプログラム310と比較してよい。各コードスニペットは、図1のウェブサイト130及び/又は図2のポストを有するウェブサイト220のような、ウェブサイトの異なるポストに関連してよい。例えば、図3Bのコードスニペット320は、ソフトウェアプログラム142Aを表してよく、図3Cのコードスニペット330は、ソフトウェアプログラム142Bを表してよい。
いくつかの実施形態で、図3Bのコードスニペット320及び/又は図3Cのコードスニペット330は、ソフトウェアプログラム142A及び/又は142Bの部分を含んでもよい。いくつかの実施形態で、図3Bのコードスニペット320及び/又は図3Cのコードスニペット330は、図7のブロック710乃至745を参照して後述されるものと類似した方法により取得され得る対応するソフトウェアプログラム142A及び/又は142Bの選択であってよい。例えば、図7を参照して後述されるように、ソフトウェアプログラム142Aの抽象木表現が、パッチ146Aの1つ以上の抽象木表現とアライメントされてよく、重複ノードでの関連性スコアが合計されてよい。ソフトウェアプログラム142Aの抽象木表現のノードは、降順の関連性スコア順序で配置されてよく、ノードのサブセットは、図3Bのコードスニペット320を生成するように取り出されてよい。
図3Aのソフトウェアプログラム310と図3Bのコードスニペット320及び図3Cのコードスニペット330との間の類似性解析を実行することにおいて、デバイスは、意味的及び/又は構文的コードクローン検出を使用してよい。例えば、デバイスは、図3Aのソフトウェアプログラム310が図3Bのコードスニペット320及び図3Cのコードスニペット330と類似しているかどうかを判定するために、変数宣言、ループ構成、変数名、変数タイプ、分岐構成、条件文、入出力文、プログラミング言語、及び他の因子を比較してよい。代替的に、又は追加的に、いくつかの実施形態で、デバイスは、類似性スコアを生成するように比較を実行してよい。いくつかの実施形態で、類似性スコアは、図7に関して後述される1つ以上の動作に従って、決定されてよい。
いくつかの実施形態で、デバイスは、図3Aのソフトウェアプログラム310と図3Bのコードスニペット320との間の類似性スコアを決定してよい。かような及び他の実施形態で、デバイスはまた、図3Aのソフトウェアプログラム310と図3Cのコードスニペット330との間の類似性スコアも決定してよい。いくつかの実施形態で、デバイスは、ソフトウェアプログラム310、コードスニペット320、及びコードスニペット330の抽象木表現を比較することによって、図3Aのソフトウェアプログラム310と図3Bのコードスニペット320との間の類似性スコアと、図3Aのソフトウェアプログラム310と図3Cのコードスニペット330との間の類似性スコアとを決定してよい。
図3Dは、図3Aのソフトウェアプログラム310の抽象木表現350を表す。いくつかの実施形態で、抽象木表現350は、図7のブロック710に関して後述されるように、ソフトウェアプログラム310から取得されてよい。抽象木表現350は、ノード355A、ノード355B、ノード355C、ノード355D、ノード355E、ノード355F、ノード355G、及びノード355H(集合的にノード355)のような複数のノードを含んでよい。ソフトウェアプログラム310の抽象木表現350は8つのノード355により表されているが、それは任意数のノード355を含んでよい。いくつかの実施形態で、ノード355は、対応するソフトウェアプログラム310内の1以上のコードの行に関連してよい。いくつかの実施形態で、複数のノード355が、対応するソフトウェアプログラム内の単一のコードの行に関連してもよい。抽象木表現350におけるノード355の夫々は、構成(construct)、タイプ(type)、変数(variable)、などを含んでよい。例えば、ノード355Cは、構成“loop”を含んでよく、変数“$t1”を含んでよい。同様に、ノード355Bは、構成“declare”を含んでよく、タイプ“Table”を含んでよく、変数“$v1”を含んでよい。
図3Eは、図3Bのコードスニペット320の抽象木表現360を表す。いくつかの実施形態で、抽象木表現360は、図7のブロック745に関して後述されるように、パターンとして取得されてよい。抽象木表現360は、ノード365A、ノード365B、ノード365C、ノード365D、ノード365E、ノード365F、及びノード365G(集合的にノード365)のような複数のノードを含んでよい。抽象木表現350は7つのノード365により表されているが、それは任意数のノード365を含んでよい。いくつかの実施形態で、ノード365は、対応するソフトウェアプログラム内の1以上のコードの行に関連してよい。いくつかの実施形態で、複数のノード365が、対応するソフトウェアプログラム内の単一のコードの行に関連してもよい。図3Dの抽象木表現350のノード355と同様に、抽象木表現360におけるノード365の夫々は、構成(construct)、タイプ(type)、変数(variable)、などを含んでよい。
ソフトウェアプログラム310をコードスニペット320と比較するために、抽象木表現360が、図3Dの抽象木表現350と比較されてよい。比較を実行するために、図3Dの抽象木表現350及び図3Eの抽象木表現360は、重なりを決定するようにアライメントされてよい。いくつかの実施形態で、アライメントは、図7のブロック725に関して後述されているものと同様に実行されてよい。例えば、木編集距離(tree edit distance)を用いて、2つの抽象木表現の対応するノードが決定され得る。例えば、図3Dのノード355Aは、図3Eのノード365Aと対応してよく、図3Dのノード355Bは、図3Eのノード365Bと対応してよく、図3Dのノード355Cは、図3Eのノード365Cと対応してよく、図3Dのノード355Dは、図3Eのノード365Fと対応してよく、図3Dのノード355Eは、図3Eのノード365Dと対応してよく、図3Dのノード355Fは、図3Eのノード365Eと対応してよく、図3Dのノード355Gは、図3Eのノード365Gと対応してよい。図3Dのノード355Hは、図3Eにおいて対応するノードを有さなくてよい。
図3Dの抽象木表現350及び図3Eの抽象木表現360をアライメントした後に、類似性スコアが複数の因子に基づき計算されてよい。例えば、類似性スコアは、構成類似性、タイプ類似性、及び変数使用関係類似性に基づいてよい。いくつかの実施形態で、類似性スコアは、図7に関して後述される1つ以上の動作に従って計算されてよい。例えば、図3Dのノード355B及び図3Eのノード365Bは、両方のノードが構成“declare”を含むので、構成類似性を示してよく、図3Dのノード355C及び図3Eのノード365Cは、両方のノードが構成“loop”を含み、更には、一致したタイプを有しているので、タイプ類似性を示してよく、図3Dのノード355D及び図3Eのノード365Fは、両方のノードが構成“declare”を含むので、構成類似性を示してよく、図3Dのノード355E及び図3Eのノード365Dは、両方のノードが構成“constructor”を含むので、構成類似性を示してよく、図3Dのノード355F及び図3Eのノード365Eは、両方のノードが構成“if”を含むので、構成類似性を示してよく、図3Dのノード355G及び図3Eのノード365Gは、両方のノードが構成“method”“remove”を有し且つ一致したタイプを有しているので、タイプ類似性を示してよい。図7のブロック765に関して後述されるように重み付けすることに基づき、図3Dの抽象木表現350及び図3Eの抽象木表現360は、比較的に高い類似性を有しているか又は比較的に高い類似性スコアを有していると決定され得る。
図3Fは、図3Cのコードスニペット330の抽象木表現370を表す。いくつかの実施形態で、抽象木表現370は、図7のブロック745に関して後述されるように、パターンとして取得されてよい。抽象木表現370は、ノード375A、ノード375B、ノード375C、ノード375D、ノード375E、ノード375F、ノード375G、及びノード375H(集合的にノード375)のような複数のノードを含んでよい。抽象木表現370は8つのノード375により表されているが、それは任意数のノード375を含んでよい。いくつかの実施形態で、ノード375は、対応するソフトウェアプログラム内の1以上のコードの行に関連してよい。いくつかの実施形態で、複数のノード375が、対応するソフトウェアプログラム内の単一のコードの行に関連してもよい。図3Dの抽象木表現350のノード355と同様に、抽象木表現370におけるノード375の夫々は、構成(construct)、タイプ(type)、変数(variable)、などを含んでよい。
ソフトウェアプログラム310をコードスニペット330と比較するために、抽象木表現370が、図3Eの抽象木表現360を参照して上述されたのと同様にして、図3Dの抽象木表現350と比較されてよい。図3Dの抽象木表現350及び図3Fの抽象木表現370をアライメントした後に、図3Eの抽象木表現360を参照して上述されたのと同様の因子に基づき、類似性スコアが計算されてよい。例えば、図3Dのノード355B及び図3Fのノード375Bは、両方のノードが構成“declare”を含むので、構成類似性を示してよく、図3Dのノード355C及び図3Fのノード375Cは、両方のノードが構成“loop”を含むので、構成類似性を示してよく、図3Dのノード355D及び図3Fのノード375Fは、両方のノードが構成“declare”を含むので、構成類似性を示してよく、図3Dのノード355G及び図3Fのノード375Eは、両方のノードが構成“method”“remove”を含むので、構成類似性を示してよい。図7のブロック765に関して後述されるように重み付けすることに基づき、図3Dの抽象木表現350及び図3Fの抽象木表現370は、図3Dの抽象木表現350及び図3Eの抽象木表現360と比較して相対的に低い類似性及び/又は相対的に低い類似性スコアを有していると決定され得る。これは、タイプ類似性及び/又は構成類似性の数が少ないことによって明白であり得る。
図3Aのソフトウェアプログラム310、図3Bのコードスニペット320、及び図3Cのコードスニペット330は、例として与えられている。同様に、図3Dの抽象木表現350、図3Eの抽象木表現360、及び図3Fの抽象木表現370は、例として与えられている。
図4A及び図4Bは、ソフトウェアパッチの自動検索及び識別の方法の例のフローチャートである。方法400は、本開示で記載される少なくとも1つの実施形態に従って配置されてよい。方法400は、全体として又は部分的に、いくつかの実施形態で、図1の環境100及び/又は図8のコンピュータシステム802のようなシステム及び/又は環境によって実行されてよい。かような及び他の実施形態で、方法400は、1つ以上の非一時的なコンピュータ可読媒体に記憶されている命令の実行に基づき、実行されてよい。別個のブロックとして表されているが、様々なブロックは、所望の実施に応じて、更なるブロックに分けられても、より少ないブロックへとまとめられても、あるいは削除されてもよい。
方法400は、ブロック410から開始してよく、ブロック410で、第1ソフトウェアプログラム内の第1違反が、如何なる適切なメソッドロジによっても、識別されてよい。いくつかの実施形態で、第1違反はランタイム違反を含んでよい。ブロック420で、第1違反の1つ以上の特性が識別されてよい。いくつかの実施形態で、第1違反の1つ以上の特性は、例外名、例外タイプ、ソースコード言語を含んでよい。ブロック430で、ウェブサイトが、ウェブサイト上のポストの組を識別するように検索されてよい。いくつかの実施形態で、ウェブサイトは、ウェブサイトがソフトウェアプログラム、違反、及びソフトウェアプログラム内の違反を修正するためのパッチのリポジトリを含むことに基づき、検索されてよい。代替的に、又は追加的に、いくつかの実施形態で、ウェブサイトは、ウェブサイトが質問及び回答を含むこと、ソフトウェア違反及びパッチの部内リポジトリを含むこと、並びに/又は複数のポストを含むことに基づき、検索されてもよい。いくつかの実施形態で、ポストの組は、異なるウェブサイトに散在するポストの組であってよい。例えば、ポストの組の中の第1ポストは第1ウェブサイトからであってよく、ポストの組の中の第2ポスト及び第3ポストは第2ウェブサイトからであってよく、ポストの組の中の第4ポストは第3ウェブサイトからであってよい。ポストの組の中の各ポストは、各ポストが、第1違反の1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を含むことに基づき、識別されてよい。いくつかの実施形態で、ポストの組を識別するようにウェブサイトを検索することは、第1違反の1つ以上の特性に基づき且つ1つ以上のタグに基づき検索クエリを生成することを含んでよい。1つ以上のタグは、ポストが回答を含むかどうか又はポストのソースコード言語を示してよい。いくつかの実施形態で、ウェブサイトを検索することは、検索クエリに基づきウェブサイト上の複数のポストを順位付けし、上位10個に順位付けられたポストをポストの組として識別することを更に含んでよい。ウェブサイトの検索に関する更なる詳細は、図5に関連して後述される。
ブロック440で、第1違反を含む第1ソフトウェアプログラムの第1部分が、第1コンテキストとして取得されてよい。いくつかの実施形態で、第1違反を含む第1ソフトウェアプログラムの第1部分は、第1違反を含む第1ソフトウェアプログラム内のメソッドを含んでよい。ブロック450で、第2コンテキストの組が取得されてよい。第2コンテキストの組の中の各第2コンテキストは、ポストの組の中の異なるポストに対応してよい。各第2コンテキストは、対応する他の違反を含む対応する他のソフトウェアプログラムの各々の部分を含んでもよい。
ブロック455で、第1コンテキストの第1抽象構文木が取得されてよい。ブロック460で、第2抽象構文木の組が取得されてよい。第2抽象構文木の組の中の各第2抽象構文木は、第2コンテキストの組の中の異なる第2コンテキストに対応してよい。ブロック465で、第1抽象構文木は、第1コンテキストの第1抽象木表現を取得するように変更されてよい。第1抽象構文木は、第1抽象構文木を簡約及び抽象化することによって変更されてよい。いくつかの実施形態で、第1抽象構文木を変更することは、第1抽象構文木の第1ノード及び第2ノードを結合して、第1抽象木表現の第3ノードを生成することを含んでよい。抽象木表現の第3ノードの変数のデータタイプは、第1抽象木表現の第4ノードを生成するよう推測されてよい。第1抽象木表現の第3ノードの構成は、一般化されてよい。
ブロック470で、第2抽象構文木の組の中の各第2抽象構文木は、各第2抽象構文木を簡約及び抽象化することによって、第2抽象木表現の組を取得するように変更されてよい。いくつかの実施形態で、第2抽象木表現の組を取得するように第2抽象構文木の組の中の各第2抽象構文木を変更することは、ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することを含んでよい。第3抽象構文木は、第3抽象構文木を簡約及び抽象化することによって、第1パッチの第3抽象木表現を取得するように変更されてよい。特定のポストに関連した第2抽象木表現と、第3抽象木表現とは、第1の複数の重複ノードを取得するようにアライメントされてよい。第1の複数の重複ノードの各ノードは、第2抽象木表現内のノードと対応してよい。第1の複数の関連性スコアが決定されてよい。第1の複数の関連性スコアの各関連性スコアは、第1の複数の重複ノードの中のある重複ノードと対応してよい。第2抽象木表現のサブセットが、第1の複数の関連性スコアに基づき、第2抽象木表現として選択されてよい。
いくつかの実施形態で、ブロック470は、ポストの組の中の特定のポストに関連した第2パッチの第4抽象構文木を取得することを更に含んでよい。第4抽象構文木は、第4抽象構文木を簡約及び抽象化することによって、第2パッチの第4抽象木表現を取得するように変更されてよい。特定のポストに関連した第2抽象木表現と、第4抽象木表現とは、第2の複数の重複ノードを取得するようにアライメントされてよい。第2の複数の重複ノードの各ノードは、第2抽象木表現内のあるノードと対応してよい。第2の複数の関連性スコアが決定されてよい。第2の複数の関連性スコアの各関連性スコアは、第2の複数の重複ノードの中のある重複ノードと対応してよい。第2抽象木表現のサブセットは、第2の複数の関連性スコアに更に基づいて、第2抽象木表現として選択されてよい。
いくつかの実施形態で、第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連してよく、第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連してよい。かような及び他の実施形態で、第1の複数の関連性スコアは、第1の数の回答投票及び第1の回答承認フラグに基づき決定されてよく、第2の複数の関連性スコアは、第2の数の回答投票及び第2の回答承認フラグに基づき決定されてよい。
ブロック475で、類似性スコアの組が決定されてよい。類似性スコアの組の中の各類似性スコアは、第1抽象木表現を、第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって、決定されてよい。
ブロック480で、ポストの組の中の特定のポストが、第1抽象木表現と特定の第2コンテキストに関連した第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき、選択されてよく、特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び特定のポストの特定の違反に関連する。特定のポストを選択することに関する更なる詳細は、図6に関して後述される。
当業者に明らかなように、本明細書で開示されるこの及び他のプロセス、動作及び方法について、実行される機能及び/又は動作は、異なる順序で実施されてもよい。更に、説明されている機能及び動作は、単に例として与えられており、機能及び動作のいくつかは、開示されている実施形態の本質から外れることなしに、任意であっても、より少ない機能及び動作へとまとめられても、又は更なる機能及び動作に拡張されてもよい。いくつかの実施形態で、方法400は、更なるブロック又はより少ないブロックを含んでもよい。
代替的に、又は追加的に、いくつかの実施形態で、方法400は、特定のポストを用いて違反を修正することに関して修正動作を実行することを含んでよい。例えば、修正動作は、特定のポストを提示することを含んでよい。例えば、特定のポストは、コンピュータモニタ、テレビ、スマートフォンディスプレイ、ラップトップスクリーン、などのようなディスプレイ上で提示されてよい。次いで、ユーザは、特定のポストの提示に基づいて、ソフトウェアプログラムに対して修正動作を実行してよい。
図5は、例となる粗検索方法500のフローチャートである。いくつかの実施形態で、粗検索は、図4のブロック430に関して上述されたようなウェブサイトの検索を含んでよい。ブロック510で、例外名がスタックトレースから取得されてよい。いくつかの実施形態で、ランタイム例外がスタックトレースとして与えられてよい。例えば、ランタイム例外の発生に応答して、図1のデバイス120のようなデバイスは、ランタイム例外の例外名を取得するようにスタックトレースを調べてよい。ブロック520で、例外タイプがスタックトレースから取得されてよい。
ブロック530で、回答済みの質問に対してフィルタが付加されてよい。いくつかの実施形態で、特定のウェブサイトの検索は“質疑応答”タイプのポストに関連してよく、このとき、各ポストは質問を含み得る。いくつかのポストはまた、質問に対する回答も含んでよい。代替的に、又は追加的に、いくつかのポストはまた、多種多様な回答、可能性のある回答、及び/又は提案される回答を含んでもよい。いくつかの実施形態で、ウェブサイトの検索は、回答を含む投稿のみを検索するオプションを含んでもよい。
ブロック540で、プログラミング言語タグのようなタグが付加されてもよい。いくつかの実施形態で、タグは、追加検索基準を含んでもよい。例えば、タグは、検索結果が、例えば、直近一週間、1年、2年といった、最近の期間内に、投稿、回答、更新、などされている必要があることといった、最新性(recency)オプションを含んでもよい。代替的に、又は追加的に、いくつかの実施形態で、タグは、特定の作者が質問を投稿した及び/又は回答を投稿した場合にしかポストを返さない検索を生じさせ得る他のタグを含んでもよい。代替的に、又は追加的に、いくつかの実施形態で、タグは、コードスニペットが特定のプログラミング言語で書かれているポストしか返さない検索を生じさせ得るプログラミング言語タグを含んでもよい。代替的に、又は追加的に、いくつかの実施形態で、タグは、検索からの所望数の結果を含んでもよい。例えば、タグは、10個の検索結果が返されることを特定してよい。
ブロック550で、例外名、例外タイプ、フィルタ、及びタグを用いて、クエリが構成されてよい。いくつかの実施形態で、クエリは順序依存であってよい。かような及び他の実施形態で、検索からの結果は、検索クエリ内の語の順序に依存してよい。例えば、検索クエリにおいて最初に例外名を置くことは、例外名を最後に置くこととは異なった結果を検索実行時に返し得る。
ブロック560で、クエリは、ウェブサイトに関連したウェブサービスアプリケーションプログラミングインターフェイス(API)へ送られてよい。いくつかの実施形態で、APIは、検索クエリに従って検索を実行してよく、そして、検索の結果を返してよい。ブロック570で、アプリケーションプログラミングインターフェイスから結果が読み出されてよい。いくつかの実施形態で、結果は、関連性の降順で配置されてよい。例えば、アプリケーションプログラミングインターフェイスによって使用されるアルゴリズムは、クエリによる検索の結果を順位付けしてよい。ブロック580で、結果は、構造化されたフォーマットで取り出されてよい。例えば、いくつかの実施形態で、ウェブサイト上のポストは、質問及び回答を含んでよい。かような及び他の実施形態で、クエリを用いて実行された検索の結果は、ポストの質問と質問に対する回答との間の区別を保つように構造化されてよい。
本開示の適用範囲から逸脱することなしに、図5に対して変更、追加、又は削除が行われてよい。例えば、方法500は、本開示で図示及び記載されているものよりも多い又は少ない要素を含んでよい。
図6は、例となる精細検索(fine search)方法600のフローチャートである。いくつかの実施形態で、精細検索は、図4のブロック460に関して上述されたような、ウェブサイトの特定のポストを選択することを含んでよい。ブロック610で、メソッドがソフトウェアプログラムから取得されてよい。メソッドは、ソフトウェアプログラムにおいて例外を投げられていてよく、それに応じて取得されてよい。例えば、いくつかの実施形態で、図1のソフトウェアプログラム122のようなソフトウェアプログラムは、多数のメソッドを含んでよい。例えば、ソフトウェアプログラムは、10個のメソッド、100個のメソッド、1000個のメソッド、又はそれよりも多いメソッドを含んでよい。ブロック620で、訪問されていないポストが疎スーパーセットから選択されてよい。疎スーパーセットは、上記の図5のブロック570で読み出された結果を含んでよい。例えば、疎スーパーセットは、クエリを用いて実行された結果により得られたポストの組を含んでよい。最初にブロック620に入るとき、疎スーパーセット内のあらゆるポストが、未訪問とフラグを立てられてよい。ポストが選択される場合に、そのポストは訪問済みとフラグを立てられてよい。
ブロック630で、ポストからコードスニペットが取り出されてよい。いくつかの実施形態で、ポストは、違反を有するソフトウェアプログラムを表し得るコードスニペットと、コードスニペットに関連した質問と、質問に対する1つ以上の回答とを含んでよい。ブロック640で、コード類似性照合が、コード類似性スコアを決定するためにコードスニペットとメソッドとの間で実行されてよい。いくつかの実施形態で、コード類似性は、後述される図7の方法700のような方法により決定されてよい。代替的に、又は追加的に、いくつかの実施形態で、コード類似性は、意味的及び/又は構文的コードクローン検出のための他の方法により決定されてもよい。例えば、機能、変数、構成、値、及び/又はクラス間の類似性の程度が、コードスニペットとメソッドとの間で決定されてよい。いくつかの実施形態で、メソッドとコードスニペットとの間の類似性の程度が大きいほど、より高いコード類似性スコアに対応し得る。
決定ブロック650で、疎スーパーセット内に訪問されていないポストが残っているかどうかが決定されてよい。訪問されていないポストが残っていること(決定ブロック650での“はい”)に応答して、方法はブロック620に戻ってよく、疎スーパーセットから他の訪問されていないポストを選択してよい。訪問されていないポストが残っていないこと(決定ブロック650での“いいえ”)に応答して、方法はブロック660へ進んでよい。ブロック660で、メソッドに対して最も高いコード類似性スコアを有しているコードスニペットに関連したポストが、選択されてよい。このポストは、メソッドに最もよく類似していると決定されてよい。
本開示の適用範囲から逸脱することなしに、図6に対して変更、追加、又は削除が行われてよい。例えば、方法600は、本開示で図示及び記載されているものよりも多い又は少ない要素を含んでよい。
図7は、類似性スコアを決定する、例となる方法700のフローチャートである。ブロック705で、コードスニペットが、ウェブサイトのポストの質問セクションから取得されてよい(“質問コードスニペット”)。ブロック710で、質問コードスニペットの抽象木表現が取得されてよい。質問コードスニペットの抽象木表現はQTと呼ばれ得る。いくつかの実施形態で、抽象木表現は、抽象構文木の簡約化、タイプ推測、及び抽象化のプロセスによって、取得されてよい。
簡約化の間、質問コードスニペットの抽象構文木が取得されてよい。簡約化の部分として、抽象構文木は、木をコンパクトに且つ読みやすくするようにパースされ圧縮されてよい。いくつかの実施形態で、抽象構文木をパースし圧縮することは、抽象構文木の複数のノードを、結果として得られる抽象木表現内の単一ノードにまとめること含んでよい。例えば、抽象構文木は、ソフトウェアプログラムにおいてトークンごとにノードを含んでよい。例えば、ソースコード内の文“int a;”は、文(statement)ノード、式(expression)ノード、変数(variable)ノード、などを含む一連のノードとして抽象構文木において表現されてよい。簡約化の部分として、ソースコード内の文“int a;”に関連した抽象構文木内のノードは、パースされ、抽象木表現内の単一のノード、すなわち“declare(int,a)”に圧縮されてよい。ソースコードをパースすることは、ソースコード内の文を構成(construct)、タイプ(type)(すなわち、変数タイプ)、及び変数名に分けることを含んでよい。例えば、構成は、ソースコード内の文の関数を含んでよい。上記の“declare(int,a)”ノードの場合に、構成は“declare”であってよく、タイプは“int”であってよく、変数名は“a”であってよい。構成は、“for”、“for−each”、“while”のようなループ、“if”のような条件、宣言及びコンストラクタ、“delete”及び“insert”のようなメソッド、などを含んでよい。タイプは、“整数”(“int”)、浮動小数点(“float”)、文字列、ブーリアン(Booleans)、コレクション、などを含んでよい。
タイプ推測の間、変数のデータタイプが推測されてよい。タイプ推測は、ソースコード内の変数の使用に基づき、変数の推測されるタイプを決定することを含んでよい。例えば、“for”ループのようなループ内で使用される変数は、たとえ変数がソフトウェアプログラム、抽象構文木、及び/又は圧縮された抽象構文木においてそのようなものとして明示的に定義されていないとしても、整数であると推測され得る。更なる例として、ソースコード内の文は“if(flag)”を含んでよい。変数“flag”のデータタイプは、ソースコードにおいて識別されなくてもよいが、“if”文における変数“flag”の使用に基づいて、“flag”は“ブール”型の変数であることが推測され得る。よって、文“if(flag)”は、“root”ノード、更なる“declare(Boolean,flag)”ノード、及び“if(flag)”ノードへと木表現において変換されてよい。同様に、タイプ推測は、メソッド範囲又は呼び出し側(caller)を推測することと、変数値を推測することとを伴ってよい。タイプ推測の間、抽象構文木に存在し得ないノードが抽象木表現に追加されてもよい。
抽象化の間、異なるデータタイプ及び/又は構成は、単一のデータタイプ及び/又は構成に一般化されてよい。かような及び他の実施形態で、変数のデータタイプが抽象化されてよい。例えば、データタイプは、変数のスーパータイプに変更されてよい。抽象化の間、整数、浮動小数点、文字、文字列、及びブーリアンのような基本データ型は、抽象化されないままであってよい。他のデータタイプはスーパータイプの部分であってよい。例えば、“コレクション”(Collection)データタイプは、“配列”(Array)データタイプのサブタイプとして含まれてよい。抽象化の部分として、“配列”データタイプである変数を含むノードは、“コレクション”データタイプである変数を含むように抽象化されてよい。いくつかのデータタイプは、用途に特有の及び/又はユーザにより定義されたタイプを含んでもよい。かようなデータタイプは、一般的なタイプの変数に変換されてよい。追加的に、又は代替的に、いくつかの実施形態で、変数タイプは、変数タイプのスーパータイプに抽象化されてよい。例えば、いくつかのプログラミング言語では、“コレクション”は“リスト”(List)のスーパータイプであってよい。よって、“リスト”変数は、“コレクション”変数であるよう抽象化されてよい。代替的に、又は追加的に、抽象化の間、インジケータ名が抽象化されてよい。第1変数名“list”は名称“$v1”に抽象化されてよく、第2変数名“s”は“$v2”に抽象化されてよい。代替的に、又は追加的に、抽象化の間、構成は一般化されてよい。例えば、“for”、“for−each”、及び“while”は夫々、“ループ”(loop)構成に抽象化されてよい。追加的に、又は代替的に、抽象化の間、複製サブツリーが抽象化及びリファクタリングされてよい。
一例として、ソフトウェアプログラムは、2行のソースコードを含んでよい:
List<String>list = new ArrayList<>();
For(String s: list){…}
ここで、省略記号は、何らか潜在的なコードを表す。
List<String>list = new ArrayList<>();
For(String s: list){…}
ここで、省略記号は、何らか潜在的なコードを表す。
簡約化、タイプ推測、及び抽象化のプロセスの間、ソースコードの抽象構文木は、抽象木表現を生成するように変更されてよい。例えば、“リスト”(List)変数タイプは、“コレクション”(Collection)変数タイプに抽象化されてよい。“list”変数名は、“$v1”変数名に抽象化されてよい。“for”ループ構成は、“ループ”(loop)構成に抽象化されてよい。変数名“s”は、変数名“$v2”に抽象化されてよい。コードの結果とし得られる抽象木表現は、ルート(root)ノードと、ルートノードの下にある“declare(Collection,$v1)”ノードと、“declare(Collection,$v1)”ノードの下にある“constructor(Collection)”ノードと、ルートノードの下にある“loop($v1)”ノードと、“loop($v1)”ノードの下にある“declare(String,$v2)”ノードとを含み得る。
ブロック715で、ポスト内の訪問されていない回答が選択されてよい。いくつかの実施形態で、回答はコードスニペット(“回答コードスニペット”)を含んでよい。例えば、回答コードスニペットは、質問のコードスニペットの一部のパッチ又は修正バージョンであってよい。かような及び他の実施形態で、回答コードスニペットは、質問コードスニペットに含まれるコードの各行を含まなくてもよい。例えば、ユーザは、違反に関係があるコードの行しか回答に含めなくてもよい。ブロック720で、回答コードスニペットの抽象木表現が取得されてよい。回答コードスニペットの抽象木表現はATと呼ばれ得る。いくつかの実施形態で、回答コードスニペットの抽象木表現は、質問コードスニペットの抽象木表現と同じように取得されてよい。ブロック725で、質問コードスニペットの抽象木表現及び回答コードスニペットの抽象木表現は、重なりを決定するようにアライメントされてよい。いくつかの実施形態で、質問コードスニペットの抽象木表現及び回答コードスニペットの抽象木表現のアライメントは、木編集距離を用いて決定されてよい。かような及び他の実施形態で、木編集距離は、異なる木の類似性及び/又は不同性の程度の表現であってよい。例えば、木編集距離は計算されてよい。木編集距離に基づいて、質問コードスニペットの抽象木表現と回答コードスニペットの抽象木表現との間のアライメントが決定されてよい。すなわち、質問コードスニペットの抽象木表現のどのノードが、回答コードスニペットの抽象木表現のどのノードと対応するかが、決定されてよい。木編集距離は、2つの木のうちの一方を他方の木に変換するために必要とされる最低限の動作数に基づき、決定されてよい。かような及び他の実施形態で、動作は、数ある動作の中でもとりわけ、削除動作(例えば、第1の木が、第2の木にはないノードを含む場合)、追加動作(例えば、第1の木が、第2の木にあるノードを欠いている場合)、及び整合動作(第1の木のノードが、中身に関して第2の木のノードと一致するが、2つのノードのコンテキストは、必ずしも完全には一致し得ない場合)を含んでよい。
ブロック730で、各重複ノードでの関連性スコアが決定されてよい。いくつかの実施形態で、関連性スコアは重み付けされてよい。例えば、いくつかの実施形態で、夫々の回答は回答投票と関連付けられてよい。ウェブサイトのユーザは、特定の回答について、質問に対する解であると投票してよい。回答に関連した投票の総数は、回答の関連性に関連付けられてよい。いくつかの実施形態で、ウェブサイト上でポストにおいて質問を尋ねたユーザはまた、回答を最良の回答として選択してもよい。いくつかの実施形態で、最良の回答として選択された回答は、最良に関連した他の回答よりも関連性があり得る。例えば、いくつかの実施形態で、特定の回答に関連したノードの関連性スコアは、
関連性スコアP,A=1+(重み1×answervotes)+(重み2×if−accepted−answer)
と決定されてよい。かような及び他の実施形態で、answervotesは、回答に賛成するウェブサイト上の投票の総数であってよく、if−accepted−answerは、回答がポスト内の質問の作者によって最良の回答としてマークされた場合には1であってよく、そうでない場合には0であってよい。かような及び他の実施形態で、重み1及び重み2は、任意の数であってよい。例えば、重み1は0.001であってよく、重み2は2であってよい。例えば、回答が投票数0であって、最良の回答としてマークされていない場合には、関連性スコアは1=1+(0.001×0)+(2×0)であってよい。代替的に、回答が投票数1000であって、最良の回答としてマークされる場合には、関連性スコアは4=1+(0.001×1,000)+(2×1)である。
関連性スコアP,A=1+(重み1×answervotes)+(重み2×if−accepted−answer)
と決定されてよい。かような及び他の実施形態で、answervotesは、回答に賛成するウェブサイト上の投票の総数であってよく、if−accepted−answerは、回答がポスト内の質問の作者によって最良の回答としてマークされた場合には1であってよく、そうでない場合には0であってよい。かような及び他の実施形態で、重み1及び重み2は、任意の数であってよい。例えば、重み1は0.001であってよく、重み2は2であってよい。例えば、回答が投票数0であって、最良の回答としてマークされていない場合には、関連性スコアは1=1+(0.001×0)+(2×0)であってよい。代替的に、回答が投票数1000であって、最良の回答としてマークされる場合には、関連性スコアは4=1+(0.001×1,000)+(2×1)である。
決定ブロック735で、質問に関連した訪問されていない回答が残っているかどうかが決定されてよい。訪問されていないが残っていること(決定ブロック735での“はい”)に応答して、方法700はブロック715に戻ってよい。訪問されていないが残っていないこと(決定ブロック735での“いいえ”)に応答して、方法700はブロック740へ進んでよい。
ブロック740で、質問コードスニペットの抽象木表現からのノードは、降順の関連性スコア順序で配置されてよく、ノードの一部が選択されてよい。いくつかの実施形態で、各重複ノードでの重み付けされた関連性スコアは、ポストに関連した全ての回答にわたって合計されてよい:
関連性スコアP=Σ関連性スコアP,A
いくつかの実施形態で、特定の数のノードが選択されてよく、選択されたノードは、最も高い関連性スコアを有するノードである。かような及び他の実施形態で、特定の数は、5、10、20、100、又は任意の数であってよい。例えば、特定の数は10であってよく、関連性スコアが高い上位10個のノードが選択されてよい。代替的に、又は追加的に、いくつかの実施形態で、閾関連性スコアを上回る関連性スコアを有するあらゆるノードが選択されてもよい。かような及び他の実施形態で、閾関連性スコアは、2、10、15、又は任意の数であってよい。例えば、閾関連性スコアは10であってよい。10以上である重み付けされた関連性スコアを有する、質問コードスニペットの抽象木表現内の各ノードが、選択されてよい。いくつかの実施形態で、閾関連性スコアは、質問に関連した回答の数に基づき決定されてよい。
関連性スコアP=Σ関連性スコアP,A
いくつかの実施形態で、特定の数のノードが選択されてよく、選択されたノードは、最も高い関連性スコアを有するノードである。かような及び他の実施形態で、特定の数は、5、10、20、100、又は任意の数であってよい。例えば、特定の数は10であってよく、関連性スコアが高い上位10個のノードが選択されてよい。代替的に、又は追加的に、いくつかの実施形態で、閾関連性スコアを上回る関連性スコアを有するあらゆるノードが選択されてもよい。かような及び他の実施形態で、閾関連性スコアは、2、10、15、又は任意の数であってよい。例えば、閾関連性スコアは10であってよい。10以上である重み付けされた関連性スコアを有する、質問コードスニペットの抽象木表現内の各ノードが、選択されてよい。いくつかの実施形態で、閾関連性スコアは、質問に関連した回答の数に基づき決定されてよい。
ブロック745で、質問及び選択されたノードに基づき、パターンが取り出されてよい。いくつかの実施形態で、パターンは、質問コードスニペット及び回答コードスニペットに関連した抽象木表現に類似した抽象木表現であってよい。例えば、パターンは、選択されたノードのみを含めることによって取得される、質問コードスニペットの抽象木表現のサブツリーであってよい。
ブロック750で、ソフトウェアプログラムのコードスニペット(“ソフトウェアプログラムコードスニペット”)が取得されてよい。いくつかの実施形態で、ソフトウェアプログラムコードスニペットは、ソフトウェアプログラムのメソッドであってよい。ブロック755で、ソフトウェアプログラムコードスニペットの抽象木表現が取得されてよい。いくつかの実施形態で、ソフトウェアプログラムコードスニペットの抽象木表現は、質問コードスニペットの抽象木表現及び回答コードスニペットの抽象木表現と同様にして取得されてよい。
ブロック760で、パターン及びソフトウェアプログラムコードスニペットの抽象木表現は、重複ノードを見つけるようにアライメントされてよい。いくつかの実施形態で、アライメントは、質問コードスニペットの抽象木表現及び回答のアライメントと同様であってよい。
ブロック765で、類似性スコアが重複ノードに基づき計算されてよい。いくつかの実施形態で、類似性スコアは重み付けされてよい。いくつかの実施形態で、類似性スコアは複数の因子に基づき計算されてよい。例えば、類似性スコアは、数ある因子の中でもとりわけ、構成類似性、タイプ類似性、及び変数使用関係類似性に基づいてよい。いくつかの実施形態で、構成類似性は、抽象木表現内の重複ノードが同じ構成を含む場合に現れてよい。例えば、両方の重複ノードが“declare”構成である場合に、構成類似性が存在し得る。上述されたように、構成は、とりわけ“declare”、“constructor”、“loop”、“method”、“if”を含んでよい。いくつかの実施形態で、タイプ類似性は、構成類似性が存在するとの決定に応答して、決定されてよい。かような及び他の実施形態で、タイプ類似性は、抽象木表現内の重複ノードが同じ構成及び同じタイプを含む場合に存在してよい。例えば、両方の重複ノードが“declare”構成であり、“整数”(integer)タイプを含む場合に、タイプ類似性が存在し得る。上述されたように、タイプは、とりわけ“Boolean”、“collection”、“string”、“integer”、“float”を含んでよい。いくつかの実施形態で、変数使用類似性は、構成類似性及びタイプ類似性が存在するとの決定に応答して、決定されてよい。かような及び他の実施形態で、変数使用類似性は、変数が両方の重複ノードで同じように使用される場合に存在してよい。例えば、変数がソフトウェアプログラムコードスニペットの抽象木表現及びパターンの両方においてloop及びremoveメソッドで使用される場合に、変数使用類似性が存在し得る。いくつかの実施形態で、変数使用類似性は、ジャカール指数(Jaccard index)を用いて決定されてよい。
類似性スコアは、
類似性スコア=(重みA×構成類似性)+(重みB×タイプ類似性)+(重みC×変数使用関係類似性)
と計算されてよい。かような及び他の実施形態で、構成類似性は、構成が一致している重複ノードの数であってよい。かような及び他の実施形態で、タイプ類似性は、一致した構成及び一致したタイプの両方を有している重複ノードの数であってよい。かような及び他の実施形態で、変数使用関係類似性は、同じ又は類似した状況で変数が使用されるインスタンスの数であってよい。代替的に、又は追加的に、いくつかの実施形態で、変数使用関係類似性は、ジャカール指数Jとして示されてよく、上述されたように、ソフトウェアプログラムのコードスニペットにおいて変数が使用される場所の数VSPと、パターン内の一致ノードにおいて現れる対応する変数がパターンにおいて使用される場所の数VPとの共通集合のサイズを和集合のサイズで割ったもの:
J(VSP,VP)=|VSP∩VP|/|VSP∪VP|
=|VSP∩VP|/(|VSP|+|VP|−|VSP∩VP|)
として決定され得る。いくつかの実施形態で、異なる因子は、異なる重みを有してよい。例えば、構成類似性に関連した重みAは0.5であってよく、タイプ類似性に関連した重みBは2.0であってよく、変数使用関係類似性に関連した重みCは1.0であってよい。
類似性スコア=(重みA×構成類似性)+(重みB×タイプ類似性)+(重みC×変数使用関係類似性)
と計算されてよい。かような及び他の実施形態で、構成類似性は、構成が一致している重複ノードの数であってよい。かような及び他の実施形態で、タイプ類似性は、一致した構成及び一致したタイプの両方を有している重複ノードの数であってよい。かような及び他の実施形態で、変数使用関係類似性は、同じ又は類似した状況で変数が使用されるインスタンスの数であってよい。代替的に、又は追加的に、いくつかの実施形態で、変数使用関係類似性は、ジャカール指数Jとして示されてよく、上述されたように、ソフトウェアプログラムのコードスニペットにおいて変数が使用される場所の数VSPと、パターン内の一致ノードにおいて現れる対応する変数がパターンにおいて使用される場所の数VPとの共通集合のサイズを和集合のサイズで割ったもの:
J(VSP,VP)=|VSP∩VP|/|VSP∪VP|
=|VSP∩VP|/(|VSP|+|VP|−|VSP∩VP|)
として決定され得る。いくつかの実施形態で、異なる因子は、異なる重みを有してよい。例えば、構成類似性に関連した重みAは0.5であってよく、タイプ類似性に関連した重みBは2.0であってよく、変数使用関係類似性に関連した重みCは1.0であってよい。
本開示の適用範囲から逸脱することなしに、図7に対して変更、追加、又は削除が行われてよい。例えば、方法700は、本開示で図示及び記載されているものよりも多い又は少ない要素を含んでもよい。代替的に、又は追加的に、いくつかの実施形態で、要素は、別の順序で配置されてもよい。例えば、ブロック750は、ブロック705の前に配置されてもよい。
図8は、本開示の少なくとも1つの実施形態に従う、例となるコンピューティングシステム802のブロック図を表す。コンピューティングシステム802は、ソフトウェアパッチの自動検索及び識別に関連した1以上の動作を実装又は案内するよう構成されてよい。コンピューティングシステム802は、プロセッサ850、メモリ852、及びデータストレージ854を含んでよい。プロセッサ850、メモリ852、及びデータストレージ854は、通信上結合されてよい。
一般に、プロセッサ850は、様々なコンピュータハードウェア又はソフトウェアモジュールを含む任意の適切な特別目的又は汎用のコンピュータ、コンピューティングエンティティ、又はプロセッシングデバイスを含んでよく、任意の適用可能なコンピュータ可読記憶媒体に記憶されている命令を実行するよう構成されてよい。例えば、プロセッサ850は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは、プログラム命令を解釈及び/若しくは実行するよう並びに/又はデータを処理するよう構成された任意の他のデジタル又はアナログ回路構成を含んでよい。図8には単一のプロセッサとして表されているが、プロセッサ850は、本開示で記載される任意数の動作を個別的に又は集合的に実行するか又はその実行を指示するよう構成された任意数のプロセッサを含んでよい。更に、1以上のプロセッサが、異なるサーバのような、1以上の異なる電子デバイスに存在してもよい。
いくつかの実施形態で、プロセッサ850は、メモリ852、データストレージ854、又はメモリ852及びデータストレージ854に記憶されているプログラム命令を解釈及び/若しくは実行するよう並びに/又は記憶されているデータを処理するよう構成されてよい。いくつかの実施形態で、プロセッサ850は、データストレージ854からプログラム命令をフェッチし、プログラム命令をメモリ852にロードしてよい。プログラム命令がメモリ852内にロードされた後、プロセッサ850はプログラム命令を実行してよい。
例えば、いくつかの実施形態で、図4の方法400、図5の方法500、及び/又は図6の方法600は、プログラム命令としてデータストレージ854に含まれてよい。プロセッサ850は、方法のプログラム命令をデータストレージ854からフェッチしてよく、そして、方法のプログラム命令をメモリ852にロードしてよい。方法のプログラム命令がメモリ852にロードされた後、プロセッサ850は、コンピューティングシステムが命令によって指示されるように方法に関連した動作を実装し得るように、プログラム命令を実行してよい。
メモリ852及びデータストレージ854は、コンピュータ実行可能な命令又はデータ構造を運ぶか又は記憶しているコンピュータ可読記憶媒体を含んでよい。かようなコンピュータ可読記憶媒体は、プロセッサ850のような汎用又は特別目的のコンピュータによってアクセスされ得る任意の利用可能な非一時媒体を含んでよい。一例として、制限なしに、かようなコンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、電気的消去可能なプログラム可能リードオンリーメモリ(EEPROM)、コンパクトディスク・リードオンリーメモリ(CD−ROM)若しくは他の光ディスクストレージ、磁気ディスクストレージ若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、あるいは、コンピュータ実行可能な命令又はデータ構造の形で特定のプログラムコードを搬送又は記憶するために使用され得且つ汎用又は特別目的のコンピュータによってアクセスされ得る任意の他の記憶媒体を含む有形な又は非一時的なコンピュータ可読記憶媒体を含んでよい。上記のものの組み合わせも、コンピュータ可読記憶媒体の範囲内に含まれ得る。コンピュータ実行可能命令は、例えば、プロセッサ850に特定の動作又は動作群を実行させるよう構成された命令及びデータを含んでよい。
本開示の適用範囲から逸脱することなしに、コンピューティングシステム802に対して変更、追加、又は削除が行われてよい。例えば、いくつかの実施形態で、コンピューティングシステム802は、明示的に図示又は記載されていないことがある任意数の他の構成要素を含んでもよい。
理解され得るように、上述されたように2段階検索プロセスによるソフトウェアパッチの自動検索及び識別は、ソフトウェアプログラミングを改善する手段及び/又はソフトウェアプログラムを開発する時間を削減する手段として使用されてよい。従って、本明細書で記載されるシステム及び方法は、ソフトウェアプログラム内の違反を修正し、いくつかの場合には、ソフトウェアプログラムを開発するための開発時間を削減する能力を提供する。
上記の通り、本開示で記載される実施形態は、以下でより詳細に論じられるように、様々なコンピュータハードウェア又はソフトウェアモジュールを含む特別目的又は汎用のコンピュータ(例えば、図8のプロセッサ850)の使用を含んでよい。更に、上記の通り、本開示で記載される実施形態は、コンピュータ実行可能な命令又はデータ構造を運ぶか又は記憶しているコンピュータ可読媒体(例えば、図8のメモリ852又はデータストレージ854)を用いて実装されてもよい。
本開示で使用されるように、「モジュール」又は「コンポーネント」との語は、モジュール若しくはコンポーネントの動作を実行するよう構成された特定のハードウェア実施、及び/又はコンピューティングシステムの汎用のハードウェア(例えば、コンピュータ可読媒体、プロセッシングデバイス、など)によって記憶及び/又は実行され得るソフトウェアオブジェクト若しくはソフトウェアルーチンを指し得る。いくつかの実施形態で、本開示で記載される種々のコンポーネント、モジュール、エンジン、及びサービスは、コンピューティングシステムで(例えば、別個のスレッドとして)実行されるオブジェクト又はプロセスとして実施されてもよい。本開示で記載されるシステム及び方法の一部は、(汎用のハードウェアによって記憶及び/又は実行される)ソフトウェアにおいて実施されるものとして概して記載されているが、特定のハードウェア実施又はソフトウェアと特定のハードウェア実施との組み合わせも可能であり企図される。本明細書中、「コンピューティングエンティティ」は、本開示で先に定義されている任意のコンピューティングシステム、又はコンピューティングシステムで実行される任意のモジュール若しくはモジュールの組み合わせであってよい。
本開示で、特に添付の特許請求の範囲(例えば、添付の特許請求の本文)で使用される語は、一般的に、“非限定的な(open)”用語として意図されている(例えば、語「含んでいる(including)」は、“〜を含んでいるが、〜に制限されない”との意に解釈されるべきであり、語「備えている(having)」は、「少なくとも〜を備えている」との意に解釈されるべきであり、語「含む(includes)」は、“〜を含むが、〜に制限されない”との意に解釈されるべきである、等。)。
更に、導入されたクレーム記載(introduced claim recitation)において特定の数が意図される場合、そのような意図は当該クレーム中に明確に記載され、そのような記載がない場合は、そのような意図も存在しない。例えば、理解を促すために、後続の添付された特許請求の範囲では、「少なくとも1つの(at least one)」及び「1以上の(one or more)」といった導入句を使用し、クレーム記載を導入することがある。しかし、このような句を使用するからといって、「a」又は「an」といった不定冠詞によりクレーム記載を導入した場合に、たとえ同一のクレーム内に、「1つ以上の」又は「少なくとも1つの」といった導入句と「a」又は「an」といった不定冠詞との両方が含まれるとしても、当該導入されたクレーム記載を含む特定のクレームが、当該記載事項を1しか含まない例に限定されるということが示唆されると解釈されるべきではない(例えば、「a」及び/又は「an」は、「少なくとも1つの」又は「1つ以上の」を意味すると解釈されるべきである。)。定冠詞を使用してクレーム記載を導入する場合にも同様のことが当てはまる。
更には、導入されたクレーム記載において特定の数が明示されている場合であっても、そのような記載は、通常、少なくとも記載された数を意味するように解釈されるべきであることは、当業者には理解されるであろう(例えば、他に修飾語のない、単なる「2つの記載事項」という記載がある場合、この記載は、少なくとも2つの記載事項、又は2つ以上の記載事項を意味する。)。更に、「A、B及びC等のうち少なくとも1つ」又は「A、B及びC等のうちの1つ以上」に類する表記が使用される場合、一般的に、そのような構造は、Aのみ、Bのみ、Cのみ、AとBの両方、AとCの両方、BとCの両方、及び/又はAとBとCの全て、等を含むよう意図される。
更に、2つ以上の選択可能な用語を表す如何なる離接語及び/又は離接句も、明細書、特許請求の範囲、又は図面のいずれであろうと、それら用語のうちの1つ、それらの用語のうちのいずれか、あるいは、それらの用語の両方を含む可能性を意図すると理解されるべきである。例えば、「A又はB」という句は、「A又はB」、あるいは、「A及びB」の可能性を含むことが理解されるべきである。
ここで挙げられている全ての例及び条件付き言語は、当該技術の促進に本発明者によって寄与される概念及び本発明を読者が理解するのを助ける教育上の目的を意図され、そのような具体的に挙げられている例及び条件に制限されないと解釈されるべきである。本開示の実施形態が詳細に記載されてきたが、様々な変更、置換、及び代替が、本開示の主旨及び適用範囲から逸脱することなしに行われてよい。
上記の実施形態に加えて、以下の付記を開示する。
(付記1)
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する方法。
(付記2)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記1に記載の方法。
(付記3)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記1に記載の方法。
(付記4)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記1に記載の方法。
(付記5)
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記4に記載の方法。
(付記6)
前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
付記5に記載の方法。
(付記7)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記1に記載の方法。
(付記8)
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行するようにプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
(付記9)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記10)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記11)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記12)
前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記11に記載の非一時的なコンピュータ可読媒体。
(付記13)
前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
付記12に記載の非一時的なコンピュータ可読媒体。
(付記14)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記15)
1つ以上のプロセッサと、命令を記憶するよう構成された1つ以上のコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記1つ以上のプロセッサによって実行されることに応答して、当該システムに、
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行させる、システム。
(付記16)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記15に記載のシステム。
(付記17)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記15に記載のシステム。
(付記18)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記15に記載のシステム。
(付記19)
前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記18に記載のシステム。
(付記20)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記15に記載のシステム。
(付記1)
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する方法。
(付記2)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記1に記載の方法。
(付記3)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記1に記載の方法。
(付記4)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記1に記載の方法。
(付記5)
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記4に記載の方法。
(付記6)
前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
付記5に記載の方法。
(付記7)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記1に記載の方法。
(付記8)
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行するようにプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。
(付記9)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記10)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記11)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記12)
前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記11に記載の非一時的なコンピュータ可読媒体。
(付記13)
前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
付記12に記載の非一時的なコンピュータ可読媒体。
(付記14)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記8に記載の非一時的なコンピュータ可読媒体。
(付記15)
1つ以上のプロセッサと、命令を記憶するよう構成された1つ以上のコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記1つ以上のプロセッサによって実行されることに応答して、当該システムに、
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行させる、システム。
(付記16)
前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
付記15に記載のシステム。
(付記17)
前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
付記15に記載のシステム。
(付記18)
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
付記15に記載のシステム。
(付記19)
前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
付記18に記載のシステム。
(付記20)
前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
付記15に記載のシステム。
100 環境
110 ネットワーク
120 デバイス
122,142,250,310 ソフトウェアプログラム
124,144 違反
130,220 ウェブサイト
140 ポスト
146 パッチ
210 違反特性
240 ポストの組
320,330 コードスニペット
350,360,370 抽象木表現
355,365,375 ノード
802 コンピューティングシステム
850 プロセッサ
852 メモリ
854 データストレージ
110 ネットワーク
120 デバイス
122,142,250,310 ソフトウェアプログラム
124,144 違反
130,220 ウェブサイト
140 ポスト
146 パッチ
210 違反特性
240 ポストの組
320,330 コードスニペット
350,360,370 抽象木表現
355,365,375 ノード
802 コンピューティングシステム
850 プロセッサ
852 メモリ
854 データストレージ
Claims (20)
- 第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する方法。 - 前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
請求項1に記載の方法。 - 前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
請求項1に記載の方法。 - 前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
請求項1に記載の方法。 - 前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
請求項4に記載の方法。 - 前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
請求項5に記載の方法。 - 前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
請求項1に記載の方法。 - 第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行するようにプロセッサによって実行可能なプログラミングコードが符号化されている非一時的なコンピュータ可読媒体。 - 前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
請求項8に記載の非一時的なコンピュータ可読媒体。 - 前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
請求項8に記載の非一時的なコンピュータ可読媒体。 - 前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
請求項8に記載の非一時的なコンピュータ可読媒体。 - 前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
請求項11に記載の非一時的なコンピュータ可読媒体。 - 前記第1パッチは、第1の数の回答投票及び第1の回答承認フラグに関連し、
前記第2パッチは、第2の数の回答投票及び第2の回答承認フラグに関連し、
前記第1の複数の関連性スコアは、前記第1の数の回答投票及び前記第1の回答承認フラグに基づき決定され、
前記第2の複数の関連性スコアは、前記第2の数の回答投票及び前記第2の回答承認フラグに基づき決定される、
請求項12に記載の非一時的なコンピュータ可読媒体。 - 前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
請求項8に記載の非一時的なコンピュータ可読媒体。 - 1つ以上のプロセッサと、命令を記憶するよう構成された1つ以上のコンピュータ可読媒体とを有するシステムであって、
前記命令は、前記1つ以上のプロセッサによって実行されることに応答して、当該システムに、
第1ソフトウェアプログラムにおいて第1違反を識別することと、
前記第1違反の1つ以上の特性を識別することと、
少なくとも1つのウェブサイトを検索して、該少なくとも1つのウェブサイト上でポストの組を識別し、該ポストの組の中の各ポストは、前記第1違反の前記1つ以上の特性の中の少なくとも1つを有している他のソフトウェアプログラムの1つ以上の他の違反に関する内容を各ポストが含むことに基づき識別される、ことと、
前記第1違反を含む前記第1ソフトウェアプログラムの第1部分を第1コンテキストとして取得することと、
第2コンテキストの組を取得し、該第2コンテキストの組の中の各第2コンテキストは、前記ポストの組の中の異なるポストに対応し、各第2コンテキストは、対応する他の違反を含む前記他のソフトウェアプログラムの中の対応する1つの各々の部分を含む、ことと、
前記第1コンテキストの第1抽象構文木を取得することと、
第2抽象構文木の組を取得し、該第2抽象構文木の組の中の各第2抽象構文木は、前記第2コンテキストの組の中の異なる第2コンテキストに対応する、ことと、
前記第1抽象構文木を簡約及び抽象化することによって前記第1コンテキストの第1抽象木表現を取得するように前記第1抽象構文木を変更することと、
前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することと、
類似性スコアの組を決定し、該類似性スコアの組の中の各類似性スコアは、前記第1抽象木表現を前記第2抽象木表現の組の中の対応する1つの第2抽象木表現と比較することによって決定される、ことと、
前記第1抽象木表現と特定の第2コンテキストに関連した前記第2抽象木表現の組の中の特定の第2抽象木表現との間の類似性スコアに基づき前記ポストの組の中の特定のポストを選択し、前記特定の第2コンテキストは、特定のソフトウェアプログラムの特定の部分及び前記特定のポストの特定の違反に関連する、ことと
を有する動作を実行させる、システム。 - 前記第1違反を含む前記第1ソフトウェアプログラムの前記第1部分は、前記第1違反を含む前記第1ソフトウェアプログラム内のメソッドである、
請求項15に記載のシステム。 - 前記第1抽象構文木を変更することは、
前記第1抽象構文木の第1ノード及び第2ノードを結合して前記第1抽象木表現の第3ノードを生成することと
前記第1抽象木表現の前記第3ノードの変数のデータタイプを推測して前記第1抽象木表現の第4ノードを生成することと、
前記第1抽象木表現の前記第3ノードの構成概念を一般化することと
を有する、
請求項15に記載のシステム。 - 前記第2抽象構文木の組の中の各第2抽象構文木を簡約及び抽象化することによって第2抽象木表現の組を取得するように各第2抽象構文木を変更することは、
前記ポストの組の中の特定のポストに関連した第1パッチの第3抽象構文木を取得することと、
前記第3抽象構文木を簡約及び抽象化することによって前記第1パッチの第3抽象木表現を取得するように前記第3抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第3抽象木表現とアライメントして第1の複数の重複ノードを取得し、該第1の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第1の複数の関連性スコアを決定し、該第1の複数の関連性スコアの中の各関連性スコアは、前記第1の複数の重複ノードの中のある重複ノードと対応する、ことと、
前記第1の複数の関連性スコアに基づき前記第2抽象木表現の一部を前記第2抽象木表現として選択することと
を有する、
請求項15に記載のシステム。 - 前記動作は、
前記ポストの組の中の前記特定のポストに関連した第2パッチの第4抽象構文木を取得することと、
前記第4抽象構文木を簡約及び抽象化することによって前記第2パッチの第4抽象木表現を取得するように前記第4抽象構文木を変更することと、
前記特定のポストに関連した前記第2抽象木表現を前記第4抽象木表現とアライメントして第2の複数の重複ノードを取得し、該第2の複数の重複ノードの中の各ノードは、前記第2抽象木表現内のノードと対応する、ことと、
第2の複数の関連性スコアを決定し、該第2の複数の関連性スコアの中の各関連性スコアは、前記第2の複数の重複ノードの中のある重複ノードと対応する、ことと
を更に有し、
前記第2抽象木表現の前記一部を前記第2抽象木表現として選択することは、前記第2の複数の関連性スコアに更に基づく、
請求項18に記載のシステム。 - 前記少なくとも1つのウェブサイトを検索して前記ポストの組を識別することは、
前記第1違反の前記1つ以上の特性に基づき、且つ、ポストが該ポストに関する回答又はソースコード言語を含むかどうかを示す1つ以上のタグに基づき、検索クエリを生成することと、
前記検索クエリに基づき前記少なくとも1つのウェブサイト上で複数のポストを順位付けすることと、
上位10個に順位付けされたポストを前記ポストの組として識別することと
を有する、
請求項15に記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/550069 | 2019-08-23 | ||
US16/550,069 US11042467B2 (en) | 2019-08-23 | 2019-08-23 | Automated searching and identification of software patches |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021034007A true JP2021034007A (ja) | 2021-03-01 |
Family
ID=74646975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020047853A Withdrawn JP2021034007A (ja) | 2019-08-23 | 2020-03-18 | ソフトウェアパッチの自動検索及び識別 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11042467B2 (ja) |
JP (1) | JP2021034007A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021079258A (ja) * | 2021-03-04 | 2021-05-27 | 株式会社三洋物産 | 遊技機 |
KR20230057712A (ko) * | 2021-10-22 | 2023-05-02 | 슈어소프트테크주식회사 | 동일 위치에 대한 다수의 패치들 중 최종 패치를 선택하는 방법 및 최종 패치 선택 모듈 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11714629B2 (en) * | 2020-11-19 | 2023-08-01 | Khoros, Llc | Software dependency management |
CN113282572B (zh) * | 2021-07-20 | 2021-10-29 | 湖南省第二测绘院 | 一种耕地网格化划分的方法、系统及终端设备 |
US20230236944A1 (en) * | 2022-01-21 | 2023-07-27 | Capital One Services, Llc | Error handling recommendation engine |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8082471B2 (en) * | 2007-05-11 | 2011-12-20 | Microsoft Corporation | Self healing software |
CN106537333A (zh) * | 2014-06-13 | 2017-03-22 | 查尔斯斯塔克德拉珀实验室公司 | 用于软件产物的数据库的系统和方法 |
US9965633B2 (en) * | 2015-12-29 | 2018-05-08 | Sap Se | Using code similarities for improving auditing and fixing of SAST-discovered code vulnerabilities |
US20200210158A1 (en) * | 2017-05-30 | 2020-07-02 | Phase Change Software Llc | Automated or machine-enhanced source code debugging |
US10606570B2 (en) | 2018-03-08 | 2020-03-31 | Fujitsu Limited | Representing software with an abstract code graph |
US10671511B2 (en) * | 2018-06-20 | 2020-06-02 | Hcl Technologies Limited | Automated bug fixing |
-
2019
- 2019-08-23 US US16/550,069 patent/US11042467B2/en active Active
-
2020
- 2020-03-18 JP JP2020047853A patent/JP2021034007A/ja not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021079258A (ja) * | 2021-03-04 | 2021-05-27 | 株式会社三洋物産 | 遊技機 |
KR20230057712A (ko) * | 2021-10-22 | 2023-05-02 | 슈어소프트테크주식회사 | 동일 위치에 대한 다수의 패치들 중 최종 패치를 선택하는 방법 및 최종 패치 선택 모듈 |
US11822915B2 (en) | 2021-10-22 | 2023-11-21 | Suresoft Technologies Inc. | Method for selecting the last patch from among a plurality patches for same location and the last patch selection module |
KR102605212B1 (ko) * | 2021-10-22 | 2023-11-24 | 슈어소프트테크주식회사 | 동일 위치에 대한 다수의 패치들 중 최종 패치를 선택하는 방법 및 최종 패치 선택 모듈 |
Also Published As
Publication number | Publication date |
---|---|
US11042467B2 (en) | 2021-06-22 |
US20210056006A1 (en) | 2021-02-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2021034007A (ja) | ソフトウェアパッチの自動検索及び識別 | |
US9798648B2 (en) | Transitive source code violation matching and attribution | |
Franks et al. | Cacheca: A cache language model based code suggestion tool | |
US9684709B2 (en) | Building features and indexing for knowledge-based matching | |
CN116860949B (zh) | 问答处理方法、装置、系统、计算设备及计算机存储介质 | |
AU2017272243B2 (en) | Method and system for creating an instance model | |
US8364696B2 (en) | Efficient incremental parsing of context sensitive programming languages | |
EP3974964A1 (en) | Automated generation of software patches | |
Abebe et al. | Automated identifier completion and replacement | |
US11556455B2 (en) | Automated identification of posts related to software patches | |
EP4080372A1 (en) | Semi-supervised bug pattern revision | |
Lee et al. | Automatic detection of design pattern for reverse engineering | |
JP2022078962A (ja) | エラーに関連するコードの行の自動識別 | |
Rainford et al. | Code and data synthesis for genetic improvement in emergent software systems | |
US10997056B1 (en) | Generation of explanatory and executable repair examples | |
Sieper et al. | Semantic code search with neural bag-of-words and graph convolutional networks | |
Siers | Generating specifications for JSON APIs for formal and semantic use | |
Pilař | Systém vyhledávání a filtrováni pro HelpStone. org | |
Reese | Natural Language Processing with Java Cookbook: Over 70 recipes to create linguistic and language translation applications using Java libraries | |
Blok | ZITA-A Self Learning Tutoring Assistant | |
CN117785156A (zh) | 一种单文件优化方法、装置、电子设备及存储介质 | |
CN118152585A (zh) | 一种利用知识图谱提升大语言模型准确性的方法及装置 | |
CN115756487A (zh) | 目标类型变量查找方法、电子设备及存储介质 | |
Lemons | Applying sequence-to-sequence RNN models to IR-based bug localization | |
Shah et al. | Context aware ontology based information extraction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20221208 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20240126 |