JP2021060961A - 説明的及び実行可能な修復例の生成 - Google Patents

説明的及び実行可能な修復例の生成 Download PDF

Info

Publication number
JP2021060961A
JP2021060961A JP2020097651A JP2020097651A JP2021060961A JP 2021060961 A JP2021060961 A JP 2021060961A JP 2020097651 A JP2020097651 A JP 2020097651A JP 2020097651 A JP2020097651 A JP 2020097651A JP 2021060961 A JP2021060961 A JP 2021060961A
Authority
JP
Japan
Prior art keywords
software program
breach
violation
code
patch
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
Application number
JP2020097651A
Other languages
English (en)
Inventor
吉田 浩章
Hiroaki Yoshida
浩章 吉田
アール プラサド・ムクル
R Prasad Mukul
アール プラサド・ムクル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2021060961A publication Critical patent/JP2021060961A/ja
Withdrawn 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

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

Abstract

【課題】説明的及び実行可能な修復例の生成方法を提供する。【解決手段】方法は、第1のソフトウェアプログラムの第1の部分内の第1の違反を取得し、第1の違反を修正するための第1の提案されたパッチを取得する。また、第2の違反を含む第2のソフトウェアプログラムを識別し、無関係と識別された第2の部分内の1つ以上の要素を除去することにより、第2のソフトウェアプログラムの第2の部分を簡素化し、第1の違反に対する第1の提案されたパッチを簡素化された第2の部分に適用して、修復された簡素化された第2の部分を生成する。また、修復された簡素化された第2の部分から、実行可能な修復された簡素化された第2の部分を取得し、第2の違反及び実行可能な修復された簡素化された第2の部分を、第1の提案されたパッチが第1の違反及び第1のソフトウェアプログラムにどのように影響するかの例として提示する。【選択図】図4

Description

本開示で論じられる実施形態は、説明的及び実行可能な修復例の生成に関する。
ソフトウェアプログラムは、その中にエラー(一般に「バグ」又は「違反」と呼ばれる)をしばしば有し、ゆえに、ソフトウェアプログラムは、意図したとおりに動作しない可能性がある。ソフトウェアプログラム内のエラーを識別し、訂正しようとして、しばしば、自動化された修復システムが使用される。
本開示において請求される対象事項は、何らかの欠点を解決し又は上述されたような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される。
一方法が、第1のソフトウェアプログラムの第1の部分内の第1の違反を取得するステップと、第1の違反を修正するための第1の提案されたパッチを取得するステップとを含み得る。該方法は、第2の違反を含む第2の部分を有する第2のソフトウェアプログラムを識別するステップをさらに含んでもよい。第2のソフトウェアプログラムは、第2の違反が第1の違反と類似するとの決定に応答して識別されてもよい。第1の提案されたパッチは、第2の違反を修正し得る。該方法は、無関係と識別された第2の部分内の1つ以上の要素を除去することにより、第2のソフトウェアプログラムの第2の部分を簡素化するステップをさらに含んでもよい。該方法は、第1の違反に対する第1の提案されたパッチを簡素化された第2の部分に適用して、修復された簡素化された第2の部分を生成するステップをさらに含んでもよい。該方法は、修復された簡素化された第2の部分から実行可能な修復された簡素化された第2の部分を取得するステップをさらに含んでもよい。該方法は、第2の違反及び実行可能な修復された簡素化された第2の部分を、第1の提案されたパッチが第1の違反及び第1のソフトウェアプログラムにどのように影響するかの例として提示するステップをさらに含んでもよい。
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。
前述の一般的な説明及び以下の詳細な説明の双方が例として与えられ、説明的であり、請求される発明の限定ではない。
例示的な実施形態が、添付図面の使用を通してさらなる特定性及び詳細と共に記載され、説明される。
説明的及び実行可能な修復例の生成に関連する一例示的な環境を表す図である。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する処理を示す。 ソフトウェアプログラムを簡素化する一例示的な方法のフローチャートである。 説明的及び実行可能な修復例を生成する一例示的な方法のフローチャートである。 説明的及び実行可能な修復例を生成するように構成され得る一例示的なコンピューティングシステムを示す。
本開示に記載されるいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関する。ソフトウェアプログラムは、ソフトウェアプログラムを意図されない方法で挙動させる可能性があるエラー(一般に「バグ」又は「違反(violations)」とも呼ばれる)をしばしば含む。さらに、エラーを検出及び訂正してソフトウェアプログラムを修復するために、しばしば、自動化された修復システム及び手法が使用される。
いくつかの実施形態において、既存のソフトウェアプログラムのリポジトリが使用されて、開発又はテストされているコード内のエラーを識別及び/又は訂正するために使用され得る対応するコード内のパターンを識別することができる。いくつかの例において、既存のソフトウェアプログラムのリポジトリは、多数のソフトウェアプログラム(例えば、数千、数万、数十万、数百万等のソフトウェアプログラム)のソースコードを含み得る。例えば、ソフトウェアプログラムのリポジトリを収集する方法及びソフトウェアプログラムの修復は、2019年2月7日に出願された米国特許出願第16/270,509号及び2019年2月7日に出願された米国特許出願第16/270,518号に記載されており、上記出願は双方、その全体を参照により本明細書に組み込まれる。
本開示において、このようなリポジトリに記憶され、他のソフトウェアプログラムの開発に役立つよう使用され得る既存のソフトウェアプログラム及び対応するソースコードは、「ビッグコード」と呼ばれることがある。いくつかの例において、ソフトウェアプログラムのリポジトリから修復ストラテジが学習され得る。修復ストラテジは、2018年8月22日に出願された米国特許出願第16/109,434号及び2019年6月20日に出願された米国特許出願第16/447,535号に記載されているように精緻化され、新たに発見された違反に対して適用されてもよく、上記出願は双方、その全体を参照により本明細書に組み込まれる。例えば、ビッグコードリポジトリを使用し、開発中のソフトウェアプログラムの潜在的な修復ストラテジが識別されてもよい。
ソフトウェアプログラムの開発の間、ソフトウェアプログラムの1つ以上の違反が識別されることがある。これら又は他の実施形態において、開発ツールが、違反を修正する(remediate)ための1つ以上の潜在的な修復ストラテジ又はパッチを識別し、ユーザに提示することがある。しかしながら、ユーザは、ソフトウェアプログラムに対して自動的に生成されたフィックスを採用することをためらう場合がある。詳細には、ユーザは、パッチがどのような問題を直すように設計されているか、パッチがソフトウェアプログラムにどのような変更を行うか、又はパッチが違反にどのように対処するかを理解しない可能性がある。ゆえに、既存の方法は、違反を修正するためのパッチをユーザに提示し得るが、ユーザはパッチを信頼しない可能性があり、代わりに、違反に対する代替の解決策を探し出す可能性がある。
本開示の1つ以上の実施形態によれば、ソフトウェア開発の技術分野は、コンピューティングシステムがソフトウェアプログラムにおける違反を識別し、違反を修正するためのパッチを識別及び示唆し、同じ又は類似の(similar)タイプの違反を有しかつ示唆されたパッチにより修正される第2のソフトウェアプログラムを識別し、第2のソフトウェアプログラムを簡素化し、簡素化された第2のソフトウェアプログラムを実行可能な形式で、示唆されたパッチを使用する例としてユーザに提示することができるようにコンピュータシステムを構成することにより、改善され得る。
2つの異なるソフトウェアプログラムを修正し得るパッチを参照するとき、2つのソフトウェアプログラムに対するパッチを実現するために使用されるソフトウェアコードは異なり得るが、実行される動作のタイプ、及びパッチが2つのソフトウェアプログラムをモディファイする方法は、類似するか又は同じである可能性がある。例えば、2つの異なるソフトウェアプログラムを修正するパッチを記述するとき、パッチは、第1のソフトウェアプログラムを修正し得る第1の動作セットを含むことができ、第1の動作セットと同じタイプの第2の動作セットを含むことができ、第2のソフトウェアプログラムを修正し得る。あるいは、パッチは、違反を修正するための一連の動作を参照してもよく、各ソフトウェアプログラムを修正するための正確なソフトウェアコードを含まない場合がある。
コンピューティングシステムは、ソフトウェアプログラム内の違反を識別するように構成され得る。次いで、コンピューティングシステムは、違反をリポジトリ内のソフトウェアプログラムに関連づけられた違反と比較することができる。次いで、コンピューティングシステムは、リポジトリ内のパッチに基づいて違反に対するパッチを識別することができる。次いで、コンピューティングシステムは、同じ又は類似のタイプの違反を有し、かつパッチにより修正される第2のソフトウェアプログラムを識別することができる。次いで、コンピューティングシステムは、第2のソフトウェアプログラムを簡素化し、簡素化された第2のソフトウェアプログラムから実行可能プログラムを作成することができる。次いで、コンピューティングシステムは、簡素化された第2のソフトウェアプログラム、パッチ、及び実行可能な簡素化された第2のソフトウェアプログラムを、パッチを使用する例としてディスプレイ上に提示することができ、それにより、ユーザは、パッチに基づいてソフトウェアプログラムに対して修復動作を実行することができる。
いくつかの実施形態において、システムは、ソフトウェアプログラムにおける違反に対するパッチを発見して例示的なフォーマットでパッチを提示することにより、ソフトウェアプログラミングの開発を容易にすることができ、このことは、ユーザが違反に対して独立した解決策を探すよりむしろパッチを受け入れる結果をもたらし得る。これは、ユーザが自分自身で実行できるよりもより迅速な違反の解決を容易にする可能性がある。ソフトウェア違反の修正における速度の改善は、ソースコードの開発及びテストを容易にするのに役立ち得る。これら及び他の実施形態において、ユーザは、ユーザの時間の大部分をしばしば占めることがあるバグフィックスの代わりにコードを書くことに焦点を合わせることにより、より効率的にコードを開発することができる。
代わりに又はさらに、システムは、ユーザが識別し得るよりもより正確な及び/又はより関連性のある、ソフトウェアプログラムのパッチを識別することができる。より正確な及び/又はより関連性のあるパッチの識別は、ユーザがより効率的なコード又はユーザにより意図された方法で動作するコードを書くのに役立ち得る。ゆえに、改善されたソフトウェアプログラムに対するパッチの識別及び例示的なフォーマットでのパッチの提示は、違反の訂正を容易にする可能性があり、結果的に特定のソースコードの改善に役立ち得る。
本開示の1つ以上の実施形態によれば、ソフトウェア開発の技術分野は、コンピューティングシステムがソフトウェアプログラムにおける違反を識別し、違反を修正するためのパッチを識別し、同じ又は類似のタイプのものでありかつパッチにより修正される違反を有する第2のソフトウェアプログラムを識別し、第2のソフトウェアプログラムを簡素化し、簡素化された第2のソフトウェアプログラムをパッチの例として提示することができるようにコンピュータシステムを構成することにより、改善され得る。
本開示の実施形態は、添付の図面を参照して説明される。
図1は、本開示に記載される少なくとも1つの実施形態に従って配置された、説明的及び実行可能な修復例の生成に関連する一例示的な環境100を表す図である。環境100は、デバイス120、データベース130、ネットワーク150、及び例170を含み得る。
デバイス120は、プロセッサ、メモリ、及び通信機能を含むコンピュータベースのハードウェアデバイスを含んでもよい。デバイス120は、ネットワーク150に結合されて環境100の他のコンポーネントのいずれかとデータを通信することができる。デバイス120のいくつかの例は、モバイルフォン、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、セットトップボックス、仮想現実デバイス、又はコネクテッドデバイス等を含んでもよい。デバイス120は、プロセッサベースのコンピューティングデバイスを含んでもよい。例えば、デバイス120は、ハードウェアサーバ、又はサーバとして機能するように構成された別のプロセッサベースのコンピューティングデバイスを含んでもよい。デバイス120は、メモリ及びネットワーク通信機能を含んでもよい。
いくつかの実施形態において、デバイス120は、ソフトウェアプログラム122を含み得る。これら及び他の実施形態において、ソフトウェアプログラム122は、とりわけ、C++、C、アセンブリ、C#、Java(登録商標)、BASIC、JavaScript(登録商標)、Python、及びSQLなどの任意のプログラミング言語で書かれたソースコードを含んでもよい。いくつかの実施形態において、ソフトウェアプログラム122は、複数のメソッドを含んでもよい。これら及び他の実施形態において、メソッドは、独立して実行可能及び/又は区別可能であり得る、ソフトウェアプログラム122内の個別のサブプログラムでもよい。例えば、メソッドは、ソフトウェアプログラム122のサブユニットでもよい。これら及び他の実施形態において、ソフトウェアプログラム122は、特定の目的のため、及び/又は特定の目標を達成するために設計されてもよい。
いくつかの実施形態において、ソフトウェアプログラム122は、違反124を含み得る。図1には単一の違反124が示されているが、ソフトウェアプログラム122は複数の違反124を含むことがある。いくつかの実施形態において、違反124は、実行時エラー、論理エラー、及び/又は他のエラーを含んでもよい。例えば、いくつかの実施形態において、違反124は実行時エラーを含み得る。これら及び他の実施形態において、ソフトウェアプログラム122は何のエラーもなくコンパイルすることができるが、コンパイルされたソフトウェアプログラム122を実行しようとするときエラーに遭遇し得る。例えば、ソフトウェアプログラム122は、ゼロによる除算、又は存在しない配列の要素にアクセスする試みを含む可能性がある。代わりに又はさらに、いくつかの実施形態において、違反124は論理エラーを含み得る。これら及び他の実施形態において、ソフトウェアプログラム122は何のエラーもなくコンパイルすることができ、コンパイルされたソフトウェアプログラム122を実行しようとするときエラーに遭遇し得ない。しかしながら、ソフトウェアプログラム122は、ソフトウェアプログラム122の作者又は設計者により予期されるとおりに機能しない場合がある。
いくつかの実施形態において、違反124は、ソフトウェアプログラム122内の違反124のタイプ及び位置により一意に指定されることにより、コンピュータ記憶装置に記憶及び/又は表現され得る。これら及び他の実施形態において、違反124のタイプ及び位置は、ソフトウェアプログラム分析ツールにより決定及び/又は報告されてもよい。いくつかの実施形態において、違反124のタイプは、違反124のカテゴリを含んでもよく、「ヌルポインタの参照解除」、「配列インデックスが境界外である」、又は「無限ループ」などの、予め定義されたツール特有のタイプのセットのうち1つを含んでもよい。いくつかの実施形態において、違反124の位置は、他の仕様の中でも、ソフトウェアプログラム122内の行番号、行番号の範囲、又は文字の範囲により指定されてもよい。
データベース130は、ソフトウェアプログラミングストラテジのストレージを含んでもよい。いくつかの実施形態において、データベース130は、インターネット上の1つ以上のウェブサイト、例えば、ユーザが違反を含むソフトウェアプログラムを投稿する可能性があって他のユーザが違反を修正するためのパッチを投稿することができる1つ以上のウェブサイトなどを含んでもよい。いくつかの実施形態において、データベース130は、様々な異なるウェブサイト、イントラネットサイト、又は他のソースから収集され得るソフトウェアプログラムのリポジトリ(ビッグコードリポジトリ)を含んでもよい。いくつかの実施形態において、データベース130は、違反と違反を修正するためのストラテジとを含むソフトウェアプログラムを含んでもよい。図1は単一のデータベース130を示しているが、いくつかの実施形態において、複数のデータベース130が存在してもよい。
いくつかの実施形態において、データベース130は、ストラテジ140A、ストラテジ140B、及びストラテジ140C(集合的にストラテジ140)などのストラテジを含んでもよい。データベース130は3つのストラテジ140で示されているが、いくつかの実施形態において、データベース130は数百のストラテジ140、数千のストラテジ140、数十万のストラテジ140、又は任意数のストラテジ140を含んでもよい。これら及び他の実施形態において、ストラテジ140は各々、異なるソフトウェアプログラムに関連づけられてもよい。例えば、ストラテジ140Aはソフトウェアプログラム142Aを含んでもよく、ストラテジ140Bはソフトウェアプログラム142Bを含んでもよく、ストラテジ140Cはソフトウェアプログラム142Cを含んでもよい(集合的に、ソフトウェアプログラム142)。これら及び他の実施形態において、ソフトウェアプログラム142は各々、互いに異なってもよく、ソフトウェアプログラム122と異なってもよい。例えば、ソフトウェアプログラム142は各々、異なる目的を有し、異なる作者を有し、異なるプログラミング言語で書かれ、あるいはソフトウェアプログラム122と異なるタイプの違反を含み得る。
いくつかの実施形態において、ソフトウェアプログラム142Aは違反144Aを含んでもよく、ソフトウェアプログラム142Bは違反144Bを含んでもよく、ソフトウェアプログラム142Cは違反144Cを含んでもよい(集合的に、違反144)。いくつかの実施形態において、違反144の各々は、互いに異なるタイプの違反であり得る。例えば、違反144Aは実行時エラーであり得、違反144Bは論理エラーであり得、違反144Cは異なるタイプのエラーであり得る。代わりに又はさらに、いくつかの実施形態において、違反144のうち1つ以上が、同じタイプの違反であり得、関連するタイプの違反であり得、かつ/あるいは類似するタイプの違反であり得る。例えば、いくつかの実施形態において、違反144Aは、C++プログラミング言語におけるインデックス境界外違反であり得、一方で、違反144Cは、Javaプログラミング言語におけるインデックス境界外違反であり得る。この例において、違反144A及び違反144Cは類似の違反であり得る。いくつかの実施形態において、違反144は、違反が異なる環境において別様に明示され及び/又は扱われるとしても、類似の違反であると決定されてもよい。例えば、配列インデックス境界外アクセスは、挙動の根本原因が同じ、すなわち、その規定されたインデックス境界の外の配列にアクセスしようとすることであり得るとしても、C++環境対Java環境において実行時の間に別様に明示され、扱われてもよい。
いくつかの実施形態において、違反144は、上で論じられた違反124と類似した方法でコンピュータ記憶装置及び/又はメモリ内に表現及び/又は指定されてもよい。例えば、違反144の各々は、対応するソフトウェアプログラム142内の違反144のタイプ及び位置を含むことができる。
いくつかの実施形態において、投稿140のうち1つ以上がパッチを含んでもよい。例えば、投稿140Aはパッチ146Aを含んでもよく、投稿140Bはパッチ146Bを含んでもよく、投稿140Cはパッチ146Cを含んでもよい(集合的に、パッチ146)。いくつかの実施形態において、パッチ146は、対応する違反144を修正するためのメソッドを表してもよく、例えば、パッチ146Aは違反144Aを修正することができ、それにより、パッチ146Aをソフトウェアプログラム142Aに適用した後、ソフトウェアプログラム142Aは違反144Aをもはや有さない。いくつかの実施形態において、パッチ146は、ソフトウェアプログラム142内の違反144のソースに適用され得るソースコードを含んでもよい。代わりに又はさらに、いくつかの実施形態において、パッチ146は、対応する違反144なしの対応するソースコード142を表してもよい。例えば、いくつかの実施形態において、ソフトウェアプログラム142Aは、特定の違反、違反144Aを有するソフトウェアプログラムであり得る。パッチ146Aは、違反144Aをもはや有さないように修復されたソフトウェアプログラム142Aであり得る。
ネットワーク150は、環境100の構成要素(例えば、デバイス120及びデータベース130)のいずれかの間の信号の通信に対して構成された任意の通信ネットワークを含んでもよい。ネットワーク150は、有線又は無線であってもよい。ネットワーク150は、スター構成、トークンリング構成、又は他の適切な構成を含む多数の構成を有することができる。さらに、ネットワーク150は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)(例えば、インターネット)、及び/又は複数のデバイスが通信することができる他の相互接続されたデータパスを含んでもよい。いくつかの実施形態において、ネットワーク150は、ピアツーピアネットワークを含んでもよい。また、ネットワーク150は、様々な異なる通信プロトコルにおけるデータの通信を可能にし得る電気通信ネットワークの一部に結合され、あるいはこれを含んでもよい。
いくつかの実施形態において、ネットワーク150は、BLUETOOTH(登録商標)通信ネットワーク、Z−Wave(登録商標)通信ネットワーク、Insteon(登録商標)通信ネットワーク、EnOcean(登録商標)通信ネットワーク、ワイヤレスフィデリティ(Wi‐Fi)(登録商標)通信ネットワーク、ZigBee(登録商標)通信ネットワーク、HomePlug(登録商標)通信ネットワーク、電力線通信(Power-line Communication)ネットワーク、メッセージキューテレメトリトランスポート(message queue telemetry transport、MQTT)通信ネットワーク、MQTTセンサ(MQTT‐S)通信ネットワーク、制約付きアプリケーションプロトコル(constrained application protocol、CoAP)通信ネットワーク、代表的状態転送アプリケーションプロトコルインターフェース(representative state transfer application protocol interface、REST API)通信ネットワーク、拡張可能メッセージング及びプレゼンスプロトコル(extensible messaging and presence protocol、XMPP)通信ネットワーク、セルラー通信ネットワーク、任意の同様の通信ネットワーク、又はデータを送受信するためのこれらの任意の組み合わせを含み、あるいは含むように構成される。ネットワーク150で通信されるデータは、ショートメッセージングサービス(SMS)、マルチメディアメッセージングサービス(MMS)、ハイパーテキスト転送プロトコル(HTTP)、直接データ接続、無線アプリケーションプロトコル(WAP)、電子メール、スマートエネルギープロファイル(SEP)、ECHONET Lite、OpenADR、又はデバイス120、ウェブサイト130、クラウドサーバ通信、又はゲートウェイで実現可能な任意の他のプロトコルを介して通信されるデータを含んでもよい。
例170は、ソフトウェアプログラム172、違反174、パッチ176、及び実行可能ソフトウェアプログラム178を含み得る。いくつかの実施形態において、ソフトウェアプログラム172は、ソフトウェアプログラム122と異なり得る。これら及び他の実施形態において、ソフトウェアプログラム172は、ソフトウェアプログラム142のうち1つに基づいてもよい。例えば、いくつかの実施形態において、ソフトウェアプログラム172は、ソフトウェアプログラム142のうち1つの一部分でもよい。例えば、ソフトウェアプログラム172は、違反を含むソフトウェアプログラム142のうち1つのメソッドでもよい。代わりに又はさらに、ソフトウェアプログラム172は、ソフトウェアプログラム142のうち1つの簡素化されたバージョンでもよい。
いくつかの実施形態において、ソフトウェアプログラム172は違反174を含み得る。いくつかの実施形態において、違反174は、違反124と類似し、関連し、かつ/あるいは同一であり得る。いくつかの実施形態において、違反174はさらに、データベース130内のストラテジ140のうち1つ以上に関連づけられた違反144と類似し、関連し、かつ/あるいは同一であり得る。いくつかの実施形態において、違反174は、違反174及び違反124が同じタイプの違反であることに基づいて違反124と類似し、関連し、かつ/あるいは同一であると決定されてもよい。例えば、違反174及び違反124の双方が、境界外違反である実行時違反であり得る。いくつかの実施形態において、違反174及び違反124は、意味的及び/又は構文的コード比較に基づいて類似の違反であると決定されてもよい。いくつかの実施形態において、違反174及び違反124の実行時エラーレポート、エラータイプ、及び/又はエラー特性に基づく。違反174は、類似した方法で違反144のうち1つと類似し、関連し、及かつ/あるいは同一であると決定されてもよい。
パッチ176は、違反174を修正するためのメソッドを表してもよく、例えば、パッチ176は違反174を修正することができ、それにより、パッチ176をソフトウェアプログラム172に適用した後、ソフトウェアプログラム172は違反174をもはや有さない。いくつかの実施形態において、パッチ176は、ソフトウェアプログラム172内の違反174のソースに適用され得るソースコードを含んでもよい。代わりに又はさらに、いくつかの実施形態において、パッチ176は、違反174なしの対応するソースコード172を表してもよい。例えば、いくつかの実施形態において、ソフトウェアプログラム172は、特定の違反、違反174を有するソフトウェアプログラムであり得る。パッチ176は、違反174をもはや有さないように修復されたソフトウェアプログラム172であり得る。
いくつかの実施形態において、実行可能ソフトウェアプログラム178は、ソフトウェアプログラム172及び/又はパッチ176の実行可能バージョンを含み得る。例えば、実行可能ソフトウェアプログラム178は、違反174の修正後のソフトウェアプログラム172の実行可能バージョンでもよい。
環境100の動作の説明が以下に続く。ユーザは、デバイス120を使用してソフトウェアプログラム122を書くことができる。ソフトウェアプログラム122を書く間、又はソフトウェアプログラム122をテストする間に、ユーザは違反124の通知を受け取り得る。次いで、デバイス120は、データベース130の検索を実行して、違反124を修正するためのパッチを識別することができる。データベース130は、米国特許出願第16/270,509号及び米国特許出願第16/270,518号に記載されるように生成され、かつ/あるいは収集されてもよい。例えば、データベースは、様々な異なるウェブサイト及び/又はコードリポジトリをクローリングすることにより収集されてもよい。デバイス120は、米国特許出願第16/109,434号及び米国特許出願第16/447,535号に記載されているように検索を実行してパッチを識別し、パッチを精緻化してもよい。
デバイス120は、データベース130から例170を選択することができる。例えば、デバイス120は、違反124に対応する、及び/又は違反124を修正するために識別されたパッチに対応する、ストラテジ140のうち特定のストラテジを例170として選択する。例170は、ソフトウェアプログラム172を含んでもよく、これは、ストラテジ140のうち1つに関連づけられたソフトウェアプログラムの一部分でもよい。次いで、デバイス120は、ソフトウェアプログラム172を簡素化することができる。いくつかの実施形態において、デバイス120は、ソフトウェアプログラム172から1つ以上の無関係の(extraneous)要素を除去することによりソフトウェアプログラム172を簡素化してもよい。要素は、例えば、とりわけ、コード行、関数呼び出し、オブジェクト、クラス、及び参照を含んでもよい。ソースコード内の要素は、その除去後、ソフトウェアプログラム172が違反174を依然として有し、ソフトウェアプログラム172がパッチ176により依然として修正される場合、無関係であると決定されてもよい。
ソフトウェアプログラム172内の無関係の要素を識別するために、デバイス120は、ソフトウェアプログラム172内の特定の要素を選択することができる。次いで、デバイス120は、特定の要素に対して変形(transformation)を実行することができる。変形は、ソフトウェアプログラムの要素のモディフィケーションでもよい。変形は、ソフトウェアプログラムの要素を削除すること、ソフトウェアプログラムに要素を追加すること、及び/又はソフトウェアプログラム内の要素を変更することを含んでもよい。変形は、例えば、クラス定義を除去すること又はクラス内の宣言若しくは注釈を除去することなどのクラス定義の変形、メソッド定義を除去すること又はメソッド内のパラメータ、宣言、若しくは注釈を除去することなどのメソッド定義の変形、ステートメントを除去すること、メソッド呼び出しをスタブメソッドで置換すること、又はボディを保持したままループ若しくは条件付きステートメントを除去することなどのステートメントの変形、あるいは式を定数で置換すること又は式から項を除去することなどの式の変形を含んでもよい。代わりに又はさらに、変形は、タイプ及び識別子を正規化すること(normalizing)、例えば、タイプをジェネリックタイプ又はスーパータイプで置換すること、変数名を変数のタイプから導出された名前で置換すること、クラス又はメソッド名をジェネリック名で置換すること、及びスタブクラス及び/又はメソッドのジェネリック名を生成することなどを含んでもよい。次いで、デバイス120は、変形された要素を有するソフトウェアプログラム172が違反174を含むかどうかを決定することができる。ソフトウェアプログラム172が違反174を保持する場合、デバイス120は、パッチが変形された要素を有するソフトウェアプログラム172を修正するかどうかを決定することができる。パッチがソフトウェアプログラム172を依然として修正する場合、変形は、ソフトウェアプログラム172の簡素化として受け入れられてもよい。ソフトウェアプログラム172が違反174をもはや有さないか、又はパッチが違反174をもはや修正しないかのいずれかの場合、デバイス120は、変形をソフトウェアプログラム172の簡素化として拒否してもよく、連続した変形及び/又は要素に進んでもよい。
簡素化されたソフトウェアプログラム172を生成した後、デバイス120は、パッチ176が適用された簡素化されたソフトウェアプログラム172に基づいて実行可能ソフトウェアプログラム178を取得することができる。いくつかの実施形態において、簡素化されたソフトウェアプログラム172、違反174、パッチ176、及び/又は実行可能ソフトウェアプログラム178は、ディスプレイを介してユーザに提示されてもよい。例えば、簡素化されたソフトウェアプログラム172、違反174、パッチ176、及び/又は実行可能ソフトウェアプログラム178は、デバイス120のディスプレイを介してユーザに提示されてもよい。提示は、パッチがソフトウェアプログラム122の機能にどのように影響し得るかの例であり得る。いくつかの実施形態において、ユーザは、デバイス120を使用してパッチを閲覧し、簡素化されたソフトウェアプログラム172を閲覧し、実行可能ソフトウェアプログラム178を実行して、パッチがソフトウェアプログラム122にどのように影響するかを見ることができる。いくつかの実施形態において、ユーザは、デバイス120を使用して、ソフトウェアプログラム122内の違反124を修復するためのパッチを実装してもよい。代わりに又はさらに、いくつかの実施形態において、デバイス120は、識別されたパッチをソフトウェアプログラム122に対する修復動作として実装してもよい。
代わりに又はさらに、いくつかの実施形態において、デバイス120はソフトウェアプログラム172を簡素化しなくてもよい。これら及び他の実施形態において、デバイス120は、実行可能ソフトウェアプログラム178を取得することができる。これら及び他の実施形態において、ソフトウェアプログラム172、違反174、パッチ176、及び/又は実行可能ソフトウェアプログラム178は、ディスプレイを介してユーザに提示されてもよい。
本開示の範囲から逸脱することなく、図1に対して変更、追加、又は省略がなされてもよい。例えば、環境100は、本開示に例示及び記載されたものより多くの又は少ない要素を含んでもよい。さらに、いくつかの実施形態において、ソフトウェアプログラム122は、デバイス120と異なるデバイスを使用して作成され、編集されてもよい。例えば、これら及び他の実施形態において、ユーザは、あるデバイスを使用してソフトウェアプログラム122を作成及び/又は編集してもよく、デバイス120は、データベース130を使用してパッチを識別し、ソフトウェアプログラム172を簡素化し、かつ/あるいは簡素化されたソフトウェアプログラム172、違反174、パッチ176、及び/又は実行可能ソフトウェアプログラム178を提示することができる。
代わりに又はさらに、いくつかの実施形態において、デバイス120、及びデバイス120に対して論じられた動作は、異なるシステムにわたり分散されてもよい。これら及び他の実施形態において、環境100は、ネットワーク150と、ネットワーク150を介して通信上結合され得るデバイス120及びデータベース130を含む1つ以上のデバイスとを含んでもよい。
図2A〜図2Fは、ソフトウェアプログラムを簡素化する処理を示す。図2Aは、ソフトウェアプログラム210を示す。ソフトウェアプログラム210は、簡素化前のソフトウェアプログラムを表し得る。例えば、ソフトウェアプログラム210は、ソフトウェアプログラム142A、142B、及び/又は142Cのうち1つ以上を表してもよい。いくつかの実施形態において、ソフトウェアプログラム210は、関数呼び出し、メソッド呼び出し、クラス宣言、変数宣言、メソッド、オブジェクト、条件付きステートメント、ループ、入力/出力ステートメント、コメント等を含み得る多くの行を含むことができる。例えば、ソフトウェアプログラム210は、他の要素の中でも、コメント行「// Other method definitions are omitted」、条件付きステートメント「if (map == null)」、及びループ「for (UK key : map.keySet())」を含む。ソフトウェアプログラム210は、クラスの一部であるコード、メソッドの一部であるコード、及び異なるメソッド呼び出しをさらに含んでもよい。いくつかの実施形態において、ソフトウェアプログラム210は、白い感嘆符付きの黒い三角形で表された違反を含んでもよい。ソフトウェアプログラム210において、違反は、行「ttlmap.put(key, wrapWithTs(map.get(key)));」と関連づけられ得る。違反は、特定のパッチにより修正され得る。ソフトウェアプログラム210は、1つ以上の無関係の要素を含み得る。無関係の要素は、ソフトウェアプログラム210が違反を依然として含み、かつ特定のパッチにより依然として修復され得るように、ソフトウェアプログラム210から除去され得る要素を含むことができる。
図2Bは、ソフトウェアプログラム220を示す。ソフトウェアプログラム220は、パッチ146のうち1つなどのパッチの適用後のソフトウェアプログラム210であり得る。図2Bにおいて、パッチはハッシュされたテキストで示されている。パッチの適用後、ソフトウェアプログラム220は、図2Aのソフトウェアプログラム210に存在する違反をもはや含み得ない。図2Aのソフトウェアプログラム210及び図2Bのソフトウェアプログラム220は、ソフトウェアプログラムの簡素化前のソフトウェアプログラム及び対応するパッチを表し得る。例えば、図2Aのソフトウェアプログラム210は図1のソフトウェアプログラム142Aであり得、図2Bのソフトウェアプログラム220は図1のパッチ146Aであり得る。
図2Cは、簡素化処理の間に現れ得るソフトウェアプログラム230を示す。図1のデバイス120などのデバイスが、図2Aのソフトウェアプログラム210を簡素化することができる。ソフトウェアプログラム210を簡素化するために、デバイスは、ソフトウェアプログラム210の1つ以上の無関係の要素を識別することができる。無関係の要素は、図2Cでは取り消し線付きテキストで示されている。例えば、図2Cに示されるように、ソフトウェアプログラム210のコメント行が無関係であると決定されてもよい。ソフトウェアプログラム210はコメント行の削除後に違反を依然として含み、かつパッチはコメント行の削除後に違反を依然として修正するため、デバイスは、コメント行が無関係であると決定することができる。
代わりに又はさらに、デバイスは、条件付きステートメントが無関係の要素であること、1つ以上のコード行が無関係の要素であること、及び/又はコード行の1つ以上の部分が無関係の要素であることを決定してもよい。例えば、デバイスは、「wrapWithTS」関数呼び出しが一コード行内の無関係な要素であると決定してもよく、その行から呼び出しを削除してもよい。代わりに又はさらに、デバイスは、1つ以上の要素に対するスタブメソッド及び/又はスタブクラスを生成してもよい。例えば、デバイスは、メソッド呼び出し「ttlmap.put」をメソッドスタブ「methodStub1」で置換することができ、置換されたメソッド呼び出しと同じ入力及び出力を含むが何ら計算を実行し得ないスタブメソッドを生成することができる。
ソフトウェアプログラム210の簡素化を実行してソフトウェアプログラム230を取得する間、デバイスは、簡素化によるソフトウェアプログラム210が違反を依然として有すること及び違反がパッチにより修正されることを周期的に確認してもよい。例えば、いくつかの実施形態において、デバイスは、毎要素の毎変形の後、確認を実行してもよい。いくつかの実施形態において、デバイスは、変形の後、ソフトウェアプログラムが違反をもはや含まず、かつ/あるいはパッチがソフトウェアプログラム内の違反をもはや修正しない場合、要素の変形を破棄してもよい。
図2Dは、ソフトウェアプログラム240を示す。ソフトウェアプログラム240は、パッチの適用後の図2Cのソフトウェアプログラム230であり得、パッチは、図2Bで適用されたパッチと同じである。パッチの適用後、ソフトウェアプログラム240は、図2Cのソフトウェアプログラム230に存在する違反をもはや含み得ない。
図2Eは、簡素化処理の完了後に現れ得る簡素化されたソフトウェアプログラム250を示す。いくつかの実施形態において、簡素化されたソフトウェアプログラム250は、図1の例170のソフトウェアプログラム172に対応し得る。簡素化処理は、関数名、メソッド名、クラス名等を正規化することをさらに含んでもよい。例えば、図2Aのソフトウェアプログラム210及び/又は図2Cのソフトウェアプログラム230と比較したとき、ソフトウェアプログラム250は正規化された名前を含むことができる。例えば、クラス「TtlMapState」が「Example」にリネームされてもよい。同様に、メソッドputAllが「example」にリネームされてもよく、ソフトウェアプログラム内の様々な変数がリネームされてもよい。例えば、変数「UK」及び「UV」が「Object」及び「Object」にリネームされてもよい。類似した方法で、メソッドスタブが「methodStub1」から「doSomething」にリネームされてもよく、メソッドへの入力変数が、「object1」及び「object2」と名付けられた「Object」タイプの変数に変更されてもよい。ソフトウェアプログラムの要素の前の変形と同様に、デバイスは、簡素化されたソフトウェアプログラム250が違反を有し、かつ違反がパッチにより修正されることを確認してもよい。元のソフトウェアプログラム210と比較したとき、ソフトウェアプログラム250は、1つ以上の無関係の要素が削除され、1つ以上の変数がリネームされているため、読み取り及び理解がより簡単であり得る。
図2Fは、ソフトウェアプログラム260を示す。ソフトウェアプログラム260は、パッチの適用後の図2Eのソフトウェアプログラム250であり得、パッチは、図2B及び図2Dで適用されたパッチと同じである。パッチの適用後、ソフトウェアプログラム260は、図2Eのソフトウェアプログラム250に存在する違反をもはや含み得ない。いくつかの実施形態において、デバイスは、パッチ内の変数の正規化をさらに行ってもよい。例えば、図2B及び図2Dのパッチと比較したとき、図2Fのパッチは、図2Eのソフトウェアプログラム250に対して実行されたように、変数「UV」から「Object」への正規化された名前を含むことができる。
図2A〜図2Fに示す簡素化処理及びソフトウェアプログラムは例として提供されている。デバイスは、代替的な方法でソフトウェアプログラムを簡素化してもよく、ソフトウェアプログラムは、異なるプログラミング言語で書かれ、異なるコード行を含み、かつ/あるいは異なる無関係の要素を含んでもよい。
図3は、ソフトウェアプログラムを簡素化する一例示的な方法300のフローチャートである。方法300は、本開示に記載される少なくとも1つの実施形態に従って配置されてもよい。方法300は、いくつかの実施形態において、図1及び図5それぞれの環境100及び/又はコンピューティングシステム502などのシステム及び/又は環境により、全体的に又は部分的に実行されてもよい。これら及び他の実施形態において、方法300は、1つ以上の非一時的コンピュータ読取可能媒体に記憶された命令の実行に基づいて実行されてもよい。個別のブロックとして示されているが、様々なブロックが所望の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
ブロック305において、パッチにより修正される違反を含むソフトウェアプログラム内で要素が識別され得る。いくつかの実施形態において、要素は、コード行、コード行の一部、変数名、メソッド名、クラス名等を含んでもよい。
ブロック310において、要素に対する変形が識別され得る。いくつかの実施形態において、変形は、他の改変の中でもクラス定義を除去すること、クラス内の宣言を除去すること、クラス内の注釈を除去すること、クラスをスタブクラスで置換することなどのクラス定義の改変、他の改変の中でもメソッド定義を除去すること、メソッド内のパラメータを除去すること、メソッド内の宣言を除去すること、メソッド内の注釈を除去すること、メソッドをスタブメソッドで置換することなどのメソッド定義の改変、他の改変の中でもステートメントを除去すること、メソッド呼び出しをスタブメソッドで置換すること、ステートメントのボディを維持しながらループステートメントを除去すること、ステートメントのボディを維持しながら条件付きステートメントを除去することなどのステートメントへの改変、他の改変の中でも式を定数で置換すること、式から項を除去することなどの式への改変を含んでもよい。いくつかの実施形態において、変形は、他の改変の中でもタイプをジェネリックタイプで置換すること、タイプをスーパータイプで置換することなどのタイプの正規化、他の改変の中でも変数名をそのタイプから導出すること、変数に対してその周囲のコンテキストから自然な名前を生成することなどの変数名の正規化、「Example」及び「example()」などのジェネリック名を使用することなどのクラス及びメソッド名の正規化、「SomeClass」又は「doSomething()」などのジェネリック名を使用することなどのスタブクラス及びスタブメソッド名の正規化を含んでもよい。
ブロック315において、変形がソフトウェアプログラム内の要素に適用され得る。判断ブロック320において、変形された要素を有するソフトウェアプログラムが違反を含むかどうかが決定され得る。例えば、いくつかの実施形態において、変形を要素に適用することは、ソフトウェアプログラムが違反を含まない結果をもたらす可能性がある。変形された要素を有するソフトウェアプログラムが違反を含まないとの決定に応答して(判断ブロック320で「No」)、方法300はブロック335に進み得る。変形された要素を有するソフトウェアプログラムが違反を含むとの決定に応答して(判断ブロック320で「Yes」)、方法300は判断ブロック325に進み得る。
判断ブロック325において、変形された要素を有するソフトウェアプログラム内の不良をパッチが修正するかどうかが決定され得る。例えば、いくつかの実施形態において、変形を要素に適用することは、パッチがソフトウェアプログラム内の違反をもはや修正しない結果をもたらす可能性がある。変形された要素を有するソフトウェアプログラム内の不良をパッチが修正しないとの決定に応答して(判断ブロック325で「No」)、方法300はブロック335に進み得る。変形された要素を有するソフトウェアプログラム内の不良をパッチが修正するとの決定に応答して(判断ブロック325で「Yes」)、方法300はブロック330に進み得る。
ブロック330において、変形がソフトウェアプログラムの簡素化として受け入れられ得る。ブロック335において、変形がソフトウェアプログラムの簡素化として拒否され得る。方法300は、ブロック330及びブロック335の双方から判断ブロック340に進み得る。
判断ブロック340において、要素に対する何らかの他の変形があるかどうかが決定され得る。要素に対する他の変形があるとの決定に応答して(判断ブロック340で「Yes」)、方法300はブロック310に戻り得、新しい変形が識別され得る。要素に対する他の変形がないとの決定に応答して(判断ブロック340で「No」)、方法300は判断ブロック345に進み得る。
判断ブロック345において、ソフトウェアプログラム内に何らかの他の要素があるかどうかが決定され得る。ソフトウェアプログラム内に他の要素があるとの決定に応答して(判断ブロック345で「Yes」)、方法300はブロック305に戻り得、新しい要素が識別され得る。ソフトウェアプログラム内に他の要素がないとの決定に応答して(判断ブロック345で「No」)、方法300はブロック350に進み得る。
ブロック350において、受け入れられた変形を有する簡素化されたソフトウェアプログラムが出力され得る。
本開示の範囲から逸脱することなく、図3に対して変更、追加、又は省略がなされてもよい。例えば、方法300は、本開示に例示及び記載されたものより多くの又は少ない要素を含んでもよい。いくつかの実施形態において、変形及び/又は要素は、ランク付け及び/又は優先順位付けされてもよい。例えば、いくつかの実施形態において、削除は、他の改変より上に優先順位付けされてもよい。削除を優先することにより、方法300はより効率的であり得、なぜならば、削除がソフトウェアプログラムの簡素化として受け入れられる場合、他の改変を調べることは役立たない可能性があるためである。
代わりに又はさらに、いくつかの実施形態において、ソフトウェアプログラムの要素は特定の順序で識別されてもよい。例えば、方法300は、ソフトウェアプログラムの始めから始まってソフトウェアプログラムの終わりに進む要素を識別することができる。代わりに又はさらに、いくつかの実施形態において、方法300は、ソフトウェアプログラムの終わりで始まってソフトウェアプログラムの始めに進むソフトウェアプログラムの要素を識別してもよい。代わりに又はさらに、いくつかの実施形態において、方法300は、ソフトウェアプログラムの要素をランダムに識別してもよい。
図4は、説明的及び実行可能な修復例を生成する一例示的な方法400のフローチャートである。方法400は、本開示に記載される少なくとも1つの実施形態に従って配置されてもよい。方法400は、いくつかの実施形態において、図1及び図5それぞれの環境100及び/又はコンピューティングシステム502などのシステム及び/又は環境により、全体的に又は部分的に実行されてもよい。これら及び他の実施形態において、方法400は、1つ以上の非一時的コンピュータ読取可能媒体に記憶された命令の実行に基づいて実行されてもよい。個別のブロックとして示されているが、様々なブロックが所望の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
方法400はブロック410で開始でき、ブロック410において、第1のソフトウェアプログラムの第1の部分内の第1の違反が取得され得る。ブロック420において、第1の違反を修正するための第1の提案されたパッチが取得され得る。
ブロック430において、第2の違反を含む第2の部分を有する第2のソフトウェアプログラムが識別され得る。第2のソフトウェアプログラムは、第2の違反が第1の違反と類似するとの決定に応答して識別されてもよい。第1の提案されたパッチは、第2の違反を修正し得る。
ブロック440において、第2のソフトウェアプログラムの第2の部分が、無関係と識別された第2の部分内の1つ以上の要素を除去することにより簡素化され得る。いくつかの実施形態において、要素は、第2の部分が該要素の除去後に第2の違反を保持することに基づいて無関係として識別されてもよい。いくつかの実施形態において、要素は、第2の違反を保持することに追加で、第2の違反が、該要素の除去後に第2の部分に適用されたとき第1の提案されたパッチにより修正される場合、無関係と識別されてもよい。いくつかの実施形態において、第2の部分は、上で論じられた図3の方法300の1つ以上の動作を使用することにより簡素化されてもよい。
例えば、いくつかの実施形態において、第2の部分の第1の要素の第1の変形が生成され得る。第1の変形は、第1の要素に適用されてもよい。第1の変形を有する第2の部分が、第2の違反を含むことが確認され得る。第1の変形を有する第2の部分が第2の違反を含むとの確認に応答して、第1の提案されたパッチが、第1の変形を有する第2の部分内の第2の違反を修正することが確認され得る。第1の提案されたパッチが第2の部分内の第2の違反を修正するとの確認に応答して、第1の変形が、第2の部分の簡素化として維持され得る。第2の部分の第2の要素の第2の変形が生成され得る。第2の変形は、第2の要素に適用されてもよい。第2の変形を有する第2の部分が、第2の違反を含まないことが決定され得る。第2の変形を有する第2の部分が第2の違反を含まないとの決定に応答して、第2の変形が、第2の部分の簡素化として拒否され得る。第2の部分の第3の要素の第3の変形が生成され得る。第3の変形は、第3の要素に適用されてもよい。第3の変形を有する第2の部分が、第2の違反を含むことが確認され得る。第3の変形を有する第2の部分が第2の違反を含むとの確認に応答して、第1の提案されたパッチが、第3の変形を有する第2の部分内の第2の違反を修正するのに失敗することが決定され得る。第1の提案されたパッチが第3の変形を有する第2の部分内の第2の違反を修正するのに失敗するとの決定に応答して、第3の変形が、第2の部分の簡素化として拒否され得る。
いくつかの実施形態において、第2の部分は、複数のコード行及び複数の変数を含み得る。これら及び他の実施形態において、第2の部分を簡素化することは、複数のコード行のうちのコード行を無関係のコード行として識別することを含んでもよい。無関係のコード行は、除去されてもよい。無関係のコード行なしの第2の部分が、第2の違反を含むことが確認され得る。第1の提案されたパッチが、無関係のコード行なしの第2の部分内の第2の違反を修正することが確認され得る。複数の変数のうちの変数が、リネーム可能として識別され得る。リネーム可能変数は、リネームされてもよい。リネームされたリネーム可能変数を有する第2の部分が、第2の違反を含むことが確認され得る。第1の提案されたパッチが、リネームされたリネーム可能変数を有する第2の部分内の第2の違反を修正することが確認され得る。簡素化された第2の部分が、第2の部分、除去された無関係のコード行、及びリネームされたリネーム可能変数に基づいて取得され得る。いくつかの実施形態において、第2の部分は、複数のクラス及び複数のメソッドをさらに含んでもよく、第2の部分を簡素化することは、複数のクラスのうちのクラスをスタブ候補クラスとして識別することをさらに含んでもよい。スタブ候補クラスに対してスタブクラスが生成され得る。スタブクラスを有する第2の部分が、第2の違反を含むことが確認され得る。第1の提案されたパッチが、スタブクラスを有する第2の部分内の第2の違反を修正することが確認され得る。複数のメソッドのうちのメソッドが、スタブ候補メソッドとして識別され得る。スタブ候補メソッドに対してスタブメソッドが生成され得る。スタブメソッドを有する第2の部分が、第2の違反を含むことが確認され得る。第1の提案されたパッチが、スタブメソッドを有する第2の部分内の第2の違反を修正することが確認され得る。簡素化された第2の部分は、生成されたスタブクラス及び生成されたスタブメソッドにさらに基づいてもよい。
ブロック450において、第1の違反に対する第1の提案されたパッチが簡素化された第2の部分に適用されて、修復された簡素化された第2の部分を生成し得る。ブロック460において、修復された簡素化された第2の部分から、実行可能な修復された簡素化された第2の部分が取得され得る。ブロック470において、第2の違反、及び実行可能な修復された簡素化された第2の部分が、第1の提案されたパッチが第1の違反及び第1のソフトウェアプログラムにどのように影響するかの例として提示され得る。
当業者は、本明細書に開示されるこの及び他の処理、動作、及び方法について、実行される機能及び/又は動作が異なる順序で実現されてもよいことを理解するであろう。さらに、概説される機能及び動作は例として提供されているに過ぎず、機能及び動作のいくつかは開示される実施形態の本質を損なうことなく任意でもよく、より少ない機能及び動作に組み合わせられてもよく、あるいはさらなる機能及び動作へ拡張されてもよい。いくつかの実施形態において、方法400は、さらなるブロック又はより少ないブロックを含んでもよい。
図5は、本開示の少なくとも1つの実施形態による、一例示的なコンピューティングシステム502のブロック図を示す。コンピューティングシステム502は、説明的及び実行可能な修復例の生成に関連づけられた1つ以上の動作を実現又は指示するように構成され得る。コンピューティングシステム502は、プロセッサ550、メモリ552、及びデータ記憶装置554を含んでもよい。プロセッサ550、メモリ552、及びデータ記憶装置554は、通信上結合されてもよい。
一般に、プロセッサ550は、種々のコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用若しくは汎用コンピュータ、コンピューティングエンティティ、又は処理デバイスを含んでもよく、任意の適用可能なコンピュータ読取可能記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ550は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行するよう及び/又はデータを処理するように構成された任意の他のデジタル若しくはアナログ回路を含んでもよい。図5において単一のプロセッサとして示されているが、プロセッサ550は、本開示において説明された任意数の動作を個々又は集合的に実行し又はその実行を指示するように構成された任意数のプロセッサを含んでもよい。さらに、プロセッサのうち1つ以上が、異なるサーバなどの1つ以上の異なる電子デバイス上に存在してもよい。
いくつかの実施形態において、プロセッサ550は、メモリ552、データ記憶装置554、又はメモリ552及びデータ記憶装置554に記憶されたプログラム命令を解釈及び/又は実行し、かつ/あるいはデータを処理するように構成されてもよい。いくつかの実施形態において、プロセッサ550は、データ記憶装置554からプログラム命令を取り出し、プログラム命令をメモリ552にロードすることができる。プログラム命令がメモリ552にロードされた後、プロセッサ550はプログラム命令を実行することができる。
例えば、いくつかの実施形態において、図3の方法300及び/又は図4の方法400は、プログラム命令としてデータ記憶装置554に含まれてもよい。プロセッサ550は、データ記憶装置554から方法のプログラム命令を取り出すことができ、方法のプログラム命令をメモリ552にロードすることができる。方法のプログラム命令がメモリ552にロードされた後、プロセッサ550はプログラム命令を実行することができ、それにより、コンピューティングシステムは、命令により指示されるとおり方法に関連づけられた動作を実現できる。
メモリ552及びデータ記憶装置554は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能記憶媒体を含むことができる。そのようなコンピュータ読取可能記憶媒体は、プロセッサ550などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体を含んでもよい。限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、コンパクトディスク読取専用メモリ(CD‐ROM)若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令又はデータ構造の形式で特定のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、有形の又は非一時的なコンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ550に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
本開示の範囲から逸脱することなく、コンピューティングシステム502に対して変更、追加、又は省略がなされてもよい。例えば、いくつかの実施形態において、コンピューティングシステム502は、明示的に図示又は説明されない可能性のある任意数の他のコンポーネントを含んでもよい。
理解される得るように、上で論じられた説明的及び実行可能な修復例の生成は、ソフトウェアプログラミングを改善するため及び/又はソフトウェアプログラムを開発する時間を削減するための手段として用いられてもよい。したがって、本明細書に記載されるシステム及び方法は、ソフトウェアプログラムにおける違反を訂正し、いくつかの例ではソフトウェアプログラムを開発する開発時間を削減する能力を提供する。
上述のように、本開示に記載される実施形態は、以下でより詳細に論じられるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用コンピュータ(例えば、図5のプロセッサ550)の使用を含んでもよい。さらに、上述のように、本開示に記載される実施形態は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能媒体(例えば、図5のメモリ552又はデータ記憶装置554)を使用して実現されてもよい。
本開示において用いられるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントのアクションを実行するように構成された特定のハードウェア実装、及び/又はコンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読取可能媒体、処理デバイス等)に記憶され及び/又は汎用ハードウェアにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを参照し得る。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実現されてもよい。本開示に記載されるシステム及び方法のいくつかは、一般に、(汎用ハードウェアに記憶され、及び/又は汎用ハードウェアにより実行される)ソフトウェアで実現されるものとして記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又はコンピューティングシステム上で動作する任意のモジュール又はモジュレートの組み合わせであってもよい。
本開示において、特に別記の特許請求の範囲(例えば、別記の特許請求の範囲の本文)において用いられる用語は、一般に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むがこれに限定されない」と解釈されるべきである、等)。
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも1つの」及び「1つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」(“a”又は“an”)による請求項記載の導入が、同じ請求項が導入フレーズ「1つ以上の」又は「少なくとも1つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を1つのそのような記載のみ含む実施形態に限定することを暗に示すように見なされるべきではない(例えば、「一の」(“a”及び/又は“an”)は「少なくとも1つの」又は「1つ以上の」を意味するよう解釈されるべきである)。請求項記載を導入するために用いられる定冠詞の使用についても同様である。
さらに、特定数の導入された請求項記載が明示的に記載されている場合であっても、当業者は、そのような記載は少なくとも記載された数を意味するよう解釈されるべきであることを認識するであろう(例えば、他の修飾語を伴わない「2つの記載」というただそれだけの記載は、少なくとも2つの記載、又は2つ以上の記載を意味する)。さらに、「A、B、及びC等のうち少なくとも1つ」又は「A、B、及びC等のうち1つ以上」と類似の規定が用いられている例において、一般に、そのような構造は、A単独、B単独、C単独、A及びB共に、A及びC共に、B及びC共に、又はA、B、及びC共に等を含むことが意図される
さらに、明細書においてか、特許請求の範囲においてか、又は図面においてかにかかわらず、2つ以上の代替的な用語を提示するいかなる分離的なワード又はフレーズも、用語のうち1つ、用語のうちいずれか、又は双方の用語を含む可能性を考慮するよう理解されるべきである。例えば、フレーズ「A又はB」は、「A」又は「B」又は「A及びB」の可能性を含むよう理解されるべきである。
本開示に記載された全ての例及び条件付き言語は、本開示と発明者が当該分野を促進するために寄与した概念とを理解する際に読者を助けるための教育的目的を意図されており、そのような具体的に記載された例及び条件への限定を伴わないとみなされるべきである。本開示の実施形態が詳細に記載されたが、本開示の主旨及び範囲から逸脱することなく、種々の変更、置換、及び改変をこれに行うことができる。
上記の実施形態につき以下の付記を残しておく。
(付記1)
第1のソフトウェアプログラムの第1の部分内の第1の違反を取得するステップと、
前記第1の違反を修正するための第1の提案されたパッチを取得するステップと、
第2の違反を含む第2の部分を有する第2のソフトウェアプログラムを識別するステップであり、前記第2のソフトウェアプログラムは、前記第2の違反が前記第1の違反と類似するとの決定に応答して識別され、前記第1の提案されたパッチは前記第2の違反を修正する、ステップと、
無関係と識別された前記第2の部分内の1つ以上の要素を除去することにより、前記第2のソフトウェアプログラムの前記第2の部分を簡素化するステップと、
前記第1の違反に対する前記第1の提案されたパッチを前記簡素化された第2の部分に適用して、修復された簡素化された第2の部分を生成するステップと、
前記修復された簡素化された第2の部分から実行可能な修復された簡素化された第2の部分を取得するステップと、
前記第2の違反及び前記実行可能な修復された簡素化された第2の部分を、前記第1の提案されたパッチが前記第1の違反及び前記第1のソフトウェアプログラムにどのように影響するかの例として提示するステップと、
を含む方法。
(付記2)
前記第2の部分を簡素化するステップは、
前記第2の部分の第1の要素の第1の変形を生成するステップと、
前記第1の変形を前記第1の要素に適用するステップと、
前記第1の変形を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
前記第1の変形を有する前記第2の部分が前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第1の変形を有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
前記第1の提案されたパッチが前記第2の部分内の前記第2の違反を修正するとの確認に応答して、前記第1の変形を前記第2の部分の簡素化として維持するステップと、
を含む、付記1に記載の方法。
(付記3)
前記第2の部分を簡素化するステップは、
前記第2の部分の第2の要素の第2の変形を生成するステップと、
前記第2の変形を前記第2の要素に適用するステップと、
前記第2の変形を有する前記第2の部分が前記第2の違反を含まないと決定するステップと、
前記第2の変形を有する前記第2の部分が前記第2の違反を含まないとの決定に応答して、前記第2の変形を前記第2の部分の簡素化として拒否するステップと、
をさらに含む、付記2に記載の方法。
(付記4)
前記第2の部分を簡素化するステップは、
前記第2の部分の第3の要素の第3の変形を生成するステップと、
前記第3の変形を前記第3の要素に適用するステップと、
前記第3の変形を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
前記第3の変形を有する前記第2の部分が前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第3の変形を有する前記第2の部分内の前記第2の違反を修正するのに失敗すると決定するステップと、
前記第1の提案されたパッチが前記第3の変形を有する前記第2の部分内の前記第2の違反を修正するのに失敗するとの決定に応答して、前記第3の変形を前記第2の部分の簡素化として拒否するステップと、
をさらに含む、付記2に記載の方法。
(付記5)
前記第2の部分は複数のコード行及び複数の変数を含み、前記第2の部分を簡素化するステップは、
前記複数のコード行のうちのコード行を無関係のコード行として識別するステップと、
前記無関係のコード行を除去するステップと、
前記無関係のコード行なしの前記第2の部分が前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記無関係のコード行なしの前記第2の部分内の前記第2の違反を修正すると確認するステップと、
前記複数の変数のうちの変数をリネーム可能変数として識別するステップと、
前記リネーム可能変数をリネームするステップと、
前記リネームされたリネーム可能変数を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記リネームされたリネーム可能変数を有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
前記第2の部分、前記除去された無関係のコード行、及び前記リネームされたリネーム可能変数に基づいて、簡素化された第2の部分を取得するステップと、
を含む、付記1に記載の方法。
(付記6)
前記第2の部分は複数のクラス及び複数のメソッドをさらに含み、前記第2の部分を簡素化するステップは、
前記複数のクラスのうちのクラスをスタブ候補クラスとして識別するステップと、
前記スタブ候補クラスに対するスタブクラスを生成するステップと、
前記スタブクラスを有する前記第2の部分が前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記スタブクラスを有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
前記複数のメソッドのうちのメソッドをスタブ候補メソッドとして識別するステップと、
前記スタブ候補メソッドに対するスタブメソッドを生成するステップと、
前記スタブメソッドを有する前記第2の部分が前記違反を含むと確認するステップと、
前記第1の提案されたパッチが前記スタブメソッドを有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
をさらに含み、
前記簡素化された第2の部分を取得するステップは、前記生成されたスタブクラス及び前記生成されたスタブメソッドにさらに基づく、付記5に記載の方法。
(付記7)
少なくとも1つのシステムにより実行されたことに応答して前記少なくとも1つのシステムに付記1に記載の方法を実行させる1つ以上の命令を記憶するように構成された少なくとも1つの非一時的コンピュータ読取可能媒体。
(付記8)
第1のソフトウェアプログラム内の第1の違反を取得するステップと、
前記第1の違反を修正するための第1の提案されたパッチを取得するステップと、
前記第1の違反と類似する第2の違反を有する第2のソフトウェアプログラムを識別するステップであり、前記第1の提案されたパッチは前記第2の違反を修正する、ステップと、
前記第1の違反に対する前記第1の提案されたパッチを前記第2のソフトウェアプログラムに適用して、修復された第2のソフトウェアプログラムを生成するステップと、
前記修復された第2のソフトウェアプログラムから実行可能な修復された第2のソフトウェアプログラムを取得するステップと、
前記第2の違反及び前記実行可能な修復された第2のソフトウェアプログラムを、前記第1の提案されたパッチが前記第1の違反及び前記第1のソフトウェアプログラムにどのように影響するかの例として提示するステップと、
前記第1の提案されたパッチに基づいて前記第1の違反に関して1つ以上の修復動作を実行するステップと、
を含む方法。
(付記9)
前記第2のソフトウェアプログラム内の1つ以上の無関係の要素を識別及び除去することにより前記第2のソフトウェアプログラムを簡素化するステップ、をさらに含み、前記第1の提案されたパッチを適用するステップは、前記第1の提案されたパッチを前記簡素化された第2のソフトウェアプログラムに適用するステップを含み、前記実行可能な修復された第2のソフトウェアプログラムを取得するステップは、実行可能な修復された簡素化された第2のソフトウェアプログラムを取得するステップを含み、前記実行可能な修復された第2のソフトウェアプログラムを提示するステップは、前記実行可能な修復された簡素化された第2のソフトウェアプログラムを提示するステップを含む、付記8に記載の方法。
(付記10)
前記第2のソフトウェアプログラムを簡素化するステップは、
前記第2のソフトウェアプログラムの第1の変形を生成するステップと、
前記第1の変形を前記第2のソフトウェアプログラムに適用するステップと、
前記第1の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含むと確認するステップと、
前記第1の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第1の変形を有する前記第2のソフトウェアプログラム内の前記第2のソフトウェア違反を修正すると確認するステップと、
前記第1の提案されたパッチが前記第2のソフトウェアプログラム内の前記第2のソフトウェア違反を修正するとの確認に応答して、前記第1の変形を前記第2のソフトウェアプログラムの簡素化として維持するステップと、
を含む、付記9に記載の方法。
(付記11)
前記第2のソフトウェアプログラムを簡素化するステップは、
前記第2のソフトウェアプログラムの第2の変形を生成するステップと、
前記第2の変形を前記第2のソフトウェアプログラムに適用するステップと、
前記第2の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含まないと決定するステップと、
前記第2の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含まないとの決定に応答して、前記第2の変形を前記第2のソフトウェアプログラムの簡素化として拒否するステップと、
をさらに含む、付記10に記載の方法。
(付記12)
前記第2のソフトウェアプログラムを簡素化するステップは、
前記第2のソフトウェアプログラムの第3の変形を生成するステップと、
前記第3の変形を前記第2のソフトウェアプログラムに適用するステップと、
前記第3の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含むと確認するステップと、
前記第3の変形を有する前記第2のソフトウェアプログラムが前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第3の変形を有する前記第2のソフトウェアプログラム内の前記第2のソフトウェア違反を修正するのに失敗すると決定するステップと、
前記第1の提案されたパッチが前記第3の変形を有する前記第2のソフトウェアプログラムを修正するのに失敗するとの決定に応答して、前記第3の変形を前記第2のソフトウェアプログラムの簡素化として拒否するステップと、
をさらに含む、付記10に記載の方法。
(付記13)
前記第2のソフトウェアプログラムは複数のコード行及び複数の変数を含み、前記第2のソフトウェアプログラムを簡素化するステップは、
前記複数のコード行のうちのコード行を無関係のコード行として識別するステップと、
前記無関係のコード行を除去するステップと、
前記無関係のコード行なしの前記第2のソフトウェアプログラムが前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記無関係のコード行なしの前記第2のソフトウェアプログラム内の前記第2の違反を修正すると確認するステップと、
前記複数の変数のうちの変数をリネーム可能変数として識別するステップと、
前記リネーム可能変数をリネームするステップと、
前記リネームされたリネーム可能変数を有する前記第2のソフトウェアプログラムが前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記リネームされたリネーム可能変数を有する前記第2のソフトウェアプログラム内の前記第2の違反を修正すると確認するステップと、
前記第2のソフトウェアプログラム、前記除去された無関係のコード行、及び前記リネームされたリネーム可能変数に基づいて、簡素化された第2のソフトウェアプログラムを取得するステップと、
を含む、付記9に記載の方法。
(付記14)
前記第2のソフトウェアプログラムは複数のクラス及び複数のメソッドをさらに含み、前記第2のソフトウェアプログラムを簡素化するステップは、
前記複数のクラスのうちのクラスをスタブ候補クラスとして識別するステップと、
前記スタブ候補クラスに対するスタブクラスを生成するステップと、
前記スタブクラスを有する前記第2のソフトウェアプログラムが前記第2の違反を含むと確認するステップと、
前記第1の提案されたパッチが前記スタブクラスを有する前記第2のソフトウェアプログラム内の前記第2の違反を修正すると確認するステップと、
前記複数のメソッドのうちのメソッドをスタブ候補メソッドとして識別するステップと、
前記スタブ候補メソッドに対するスタブメソッドを生成するステップと、
前記スタブメソッドを有する前記第2のソフトウェアプログラムが前記違反を含むと確認するステップと、
前記第1の提案されたパッチが前記スタブメソッドを有する前記第2のソフトウェアプログラム内の前記第2の違反を修正すると確認するステップと、
をさらに含み、
前記簡素化された第2のソフトウェアプログラムを取得するステップは、前記生成されたスタブクラス及び前記生成されたスタブメソッドにさらに基づく、付記13に記載の方法。
(付記15)
少なくとも1つのシステムにより実行されたことに応答して前記少なくとも1つのシステムに付記8に記載の方法を実行させる1つ以上の命令を記憶するように構成された少なくとも1つの非一時的コンピュータ読取可能媒体。
(付記16)
ソフトウェアプログラムを取得するステップであり、前記ソフトウェアプログラムは複数のコード行及び複数の変数を含む、ステップと、
前記ソフトウェアプログラム内の違反を識別するステップと、
前記違反を修正するための提案されたパッチを取得するステップと、
前記複数のコード行のうちのコード行を無関係のコード行として識別するステップと、
前記無関係のコード行を除去するステップと、
前記無関係のコード行なしの前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
前記提案されたパッチが前記無関係のコード行なしの前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
前記複数の変数のうちの変数をリネーム可能変数として識別するステップと、
前記リネーム可能変数をリネームするステップと、
前記無関係のコード行なしで前記リネームされたリネーム可能変数を有する前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
前記提案されたパッチが前記無関係のコード行なしで前記リネームされたリネーム可能変数を有する前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
前記ソフトウェアプログラム、前記除去された無関係のコード行、及び前記リネームされたリネーム可能変数に基づいて、簡素化されたソフトウェアプログラムを取得するステップと、
を含む方法。
(付記17)
前記ソフトウェアプログラムは複数のクラスをさらに含み、
前記複数のクラスのうちのクラスをスタブ候補クラスとして識別するステップと、
前記スタブ候補クラスに対するスタブクラスを生成するステップと、
前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブクラスを有する前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
前記提案されたパッチが前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブクラスを有する前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
をさらに含み、
前記簡素化されたソフトウェアプログラムを取得するステップは、前記生成されたスタブクラスにさらに基づく、付記16に記載の方法。
(付記18)
前記ソフトウェアプログラムは複数のメソッドをさらに含み、
前記複数のメソッドのうちのメソッドをスタブ候補メソッドとして識別するステップと、
前記スタブ候補メソッドに対するスタブメソッドを生成するステップと、
前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブクラスを有し前記スタブメソッドを有する前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
前記提案されたパッチが前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブクラスを有し前記スタブメソッドを有する前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
をさらに含み、
前記簡素化されたソフトウェアプログラムを取得するステップは、前記生成されたスタブメソッドにさらに基づく、付記17に記載の方法。
(付記19)
前記ソフトウェアプログラムは複数のメソッドをさらに含み、
前記複数のメソッドのうちのメソッドをスタブ候補メソッドとして識別するステップと、
前記スタブ候補メソッドに対するスタブメソッドを生成するステップと、
前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブメソッドを有する前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
前記提案されたパッチが前記無関係のコード行なしで前記リネームされたリネーム可能変数を有し前記スタブメソッドを有する前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
をさらに含み、
前記簡素化されたソフトウェアプログラムを取得するステップは、前記生成されたスタブメソッドにさらに基づく、付記16に記載の方法。
(付記20)
少なくとも1つのシステムにより実行されたことに応答して前記少なくとも1つのシステムに付記16に記載の方法を実行させる1つ以上の命令を記憶するように構成された少なくとも1つの非一時的コンピュータ読取可能媒体。

Claims (10)

  1. 第1のソフトウェアプログラムの第1の部分内の第1の違反を取得するステップと、
    前記第1の違反を修正するための第1の提案されたパッチを取得するステップと、
    第2の違反を含む第2の部分を有する第2のソフトウェアプログラムを識別するステップであり、前記第2のソフトウェアプログラムは、前記第2の違反が前記第1の違反と類似するとの決定に応答して識別され、前記第1の提案されたパッチは前記第2の違反を修正する、ステップと、
    無関係と識別された前記第2の部分内の1つ以上の要素を除去することにより、前記第2のソフトウェアプログラムの前記第2の部分を簡素化するステップと、
    前記第1の違反に対する前記第1の提案されたパッチを前記簡素化された第2の部分に適用して、修復された簡素化された第2の部分を生成するステップと、
    前記修復された簡素化された第2の部分から実行可能な修復された簡素化された第2の部分を取得するステップと、
    前記第2の違反及び前記実行可能な修復された簡素化された第2の部分を、前記第1の提案されたパッチが前記第1の違反及び前記第1のソフトウェアプログラムにどのように影響するかの例として提示するステップと、
    を含む方法。
  2. 前記第2の部分を簡素化するステップは、
    前記第2の部分の第1の要素の第1の変形を生成するステップと、
    前記第1の変形を前記第1の要素に適用するステップと、
    前記第1の変形を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
    前記第1の変形を有する前記第2の部分が前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第1の変形を有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
    前記第1の提案されたパッチが前記第2の部分内の前記第2の違反を修正するとの確認に応答して、前記第1の変形を前記第2の部分の簡素化として維持するステップと、
    を含む、請求項1に記載の方法。
  3. 前記第2の部分を簡素化するステップは、
    前記第2の部分の第2の要素の第2の変形を生成するステップと、
    前記第2の変形を前記第2の要素に適用するステップと、
    前記第2の変形を有する前記第2の部分が前記第2の違反を含まないと決定するステップと、
    前記第2の変形を有する前記第2の部分が前記第2の違反を含まないとの決定に応答して、前記第2の変形を前記第2の部分の簡素化として拒否するステップと、
    をさらに含む、請求項2に記載の方法。
  4. 前記第2の部分を簡素化するステップは、
    前記第2の部分の第3の要素の第3の変形を生成するステップと、
    前記第3の変形を前記第3の要素に適用するステップと、
    前記第3の変形を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
    前記第3の変形を有する前記第2の部分が前記第2の違反を含むとの確認に応答して、前記第1の提案されたパッチが前記第3の変形を有する前記第2の部分内の前記第2の違反を修正するのに失敗すると決定するステップと、
    前記第1の提案されたパッチが前記第3の変形を有する前記第2の部分内の前記第2の違反を修正するのに失敗するとの決定に応答して、前記第3の変形を前記第2の部分の簡素化として拒否するステップと、
    をさらに含む、請求項2に記載の方法。
  5. 前記第2の部分は複数のコード行及び複数の変数を含み、前記第2の部分を簡素化するステップは、
    前記複数のコード行のうちのコード行を無関係のコード行として識別するステップと、
    前記無関係のコード行を除去するステップと、
    前記無関係のコード行なしの前記第2の部分が前記第2の違反を含むと確認するステップと、
    前記第1の提案されたパッチが前記無関係のコード行なしの前記第2の部分内の前記第2の違反を修正すると確認するステップと、
    前記複数の変数のうちの変数をリネーム可能変数として識別するステップと、
    前記リネーム可能変数をリネームするステップと、
    前記リネームされたリネーム可能変数を有する前記第2の部分が前記第2の違反を含むと確認するステップと、
    前記第1の提案されたパッチが前記リネームされたリネーム可能変数を有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
    前記第2の部分、前記除去された無関係のコード行、及び前記リネームされたリネーム可能変数に基づいて、簡素化された第2の部分を取得するステップと、
    を含む、請求項1に記載の方法。
  6. 前記第2の部分は複数のクラス及び複数のメソッドをさらに含み、前記第2の部分を簡素化するステップは、
    前記複数のクラスのうちのクラスをスタブ候補クラスとして識別するステップと、
    前記スタブ候補クラスに対するスタブクラスを生成するステップと、
    前記スタブクラスを有する前記第2の部分が前記第2の違反を含むと確認するステップと、
    前記第1の提案されたパッチが前記スタブクラスを有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
    前記複数のメソッドのうちのメソッドをスタブ候補メソッドとして識別するステップと、
    前記スタブ候補メソッドに対するスタブメソッドを生成するステップと、
    前記スタブメソッドを有する前記第2の部分が前記違反を含むと確認するステップと、
    前記第1の提案されたパッチが前記スタブメソッドを有する前記第2の部分内の前記第2の違反を修正すると確認するステップと、
    をさらに含み、
    前記簡素化された第2の部分を取得するステップは、前記生成されたスタブクラス及び前記生成されたスタブメソッドにさらに基づく、請求項5に記載の方法。
  7. プロセッサに請求項1乃至6のうちいずれか1項に記載の方法を実行させるコンピュータプログラム。
  8. 第1のソフトウェアプログラム内の第1の違反を取得するステップと、
    前記第1の違反を修正するための第1の提案されたパッチを取得するステップと、
    前記第1の違反と類似する第2の違反を有する第2のソフトウェアプログラムを識別するステップであり、前記第1の提案されたパッチは前記第2の違反を修正する、ステップと、
    前記第1の違反に対する前記第1の提案されたパッチを前記第2のソフトウェアプログラムに適用して、修復された第2のソフトウェアプログラムを生成するステップと、
    前記修復された第2のソフトウェアプログラムから実行可能な修復された第2のソフトウェアプログラムを取得するステップと、
    前記第2の違反及び前記実行可能な修復された第2のソフトウェアプログラムを、前記第1の提案されたパッチが前記第1の違反及び前記第1のソフトウェアプログラムにどのように影響するかの例として提示するステップと、
    前記第1の提案されたパッチに基づいて前記第1の違反に関して1つ以上の修復動作を実行するステップと、
    を含む方法。
  9. ソフトウェアプログラムを取得するステップであり、前記ソフトウェアプログラムは複数のコード行及び複数の変数を含む、ステップと、
    前記ソフトウェアプログラム内の違反を識別するステップと、
    前記違反を修正するための提案されたパッチを取得するステップと、
    前記複数のコード行のうちのコード行を無関係のコード行として識別するステップと、
    前記無関係のコード行を除去するステップと、
    前記無関係のコード行なしの前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
    前記提案されたパッチが前記無関係のコード行なしの前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
    前記複数の変数のうちの変数をリネーム可能変数として識別するステップと、
    前記リネーム可能変数をリネームするステップと、
    前記無関係のコード行なしで前記リネームされたリネーム可能変数を有する前記ソフトウェアプログラムが前記違反を含むと確認するステップと、
    前記提案されたパッチが前記無関係のコード行なしで前記リネームされたリネーム可能変数を有する前記ソフトウェアプログラム内の前記違反を修正すると確認するステップと、
    前記ソフトウェアプログラム、前記除去された無関係のコード行、及び前記リネームされたリネーム可能変数に基づいて、簡素化されたソフトウェアプログラムを取得するステップと、
    を含む方法。
  10. プロセッサに請求項9に記載の方法を実行させるコンピュータプログラム。
JP2020097651A 2019-10-09 2020-06-04 説明的及び実行可能な修復例の生成 Withdrawn JP2021060961A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/597646 2019-10-09
US16/597,646 US10997056B1 (en) 2019-10-09 2019-10-09 Generation of explanatory and executable repair examples

Publications (1)

Publication Number Publication Date
JP2021060961A true JP2021060961A (ja) 2021-04-15

Family

ID=75346691

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020097651A Withdrawn JP2021060961A (ja) 2019-10-09 2020-06-04 説明的及び実行可能な修復例の生成

Country Status (3)

Country Link
US (1) US10997056B1 (ja)
JP (1) JP2021060961A (ja)
CN (1) CN112650531A (ja)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6594822B1 (en) * 1999-02-19 2003-07-15 Nortel Networks Limited Method and apparatus for creating a software patch by comparing object files
CN1529847A (zh) * 2001-07-16 2004-09-15 任宇清 内嵌软件更新系统
US7353389B2 (en) * 2003-04-07 2008-04-01 Bellarc, Inc. Software update and patch audit subsystem for use in a computer information database system
US20050124332A1 (en) * 2003-12-08 2005-06-09 Clark David R. Mobile device programming system and method
CN1696911B (zh) * 2004-05-11 2011-02-02 微软公司 用于打补丁的方法和计算系统
US8930930B2 (en) * 2008-09-04 2015-01-06 International Business Machines Corporation Updating a computer system
US9734448B2 (en) * 2013-11-27 2017-08-15 Shawn Patrick Bolich Software application for managing a collection of robot repairing resources for a technician
US9576786B2 (en) * 2014-09-02 2017-02-21 iUNU, LLC Intelligent radio-controlled plasma light
US9569199B2 (en) * 2015-01-22 2017-02-14 Futurewei Technologies, Inc. Systems and methods to update source code files
WO2016138240A1 (en) * 2015-02-27 2016-09-01 Zoll Medical Corporation Downloading and booting method and system for a wearable medical device
WO2017039588A1 (en) * 2015-08-28 2017-03-09 Hewlett Packard Enterprise Development Lp Software patch fix based on checksums
US10296447B2 (en) * 2016-12-09 2019-05-21 Fujitsu Limited Automated software program repair

Also Published As

Publication number Publication date
US20210109842A1 (en) 2021-04-15
CN112650531A (zh) 2021-04-13
US10997056B1 (en) 2021-05-04

Similar Documents

Publication Publication Date Title
US10133650B1 (en) Automated API parameter resolution and validation
Horton et al. Dockerizeme: Automatic inference of environment dependencies for python code snippets
CN109343857B (zh) 线上部署机器学习模型的方法、设备和存储介质
Langer et al. A posteriori operation detection in evolving software models
CN109684838B (zh) 一种针对以太坊智能合约的静态代码审计系统及方法
JP2014503910A (ja) コードクローンの通知およびアーキテクチャの変更の視覚化
US11042467B2 (en) Automated searching and identification of software patches
US20210406152A1 (en) Cloud Application to Automatically Detect and Solve Issues in a Set of Code Base Changes Using Reinforcement Learning and Rule-Based Learning
US20140298290A1 (en) Identification of code changes using language syntax and changeset data
US10248409B1 (en) Limiting the effects of source code patches on corresponding native-code patches
EP3974964A1 (en) Automated generation of software patches
JP7409197B2 (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
Liu et al. Identifying and characterizing silently-evolved methods in the android API
CN114138244A (zh) 模型类文件自动生成方法、装置、存储介质及电子设备
WO2021086704A1 (en) Rules generation using learned repetitive code edits
US11977872B2 (en) Method and system for code maintenance
US9921857B1 (en) Compiler extension for correcting error messages
US11681873B2 (en) Creating an executable process from a text description written in a natural language
JP2021060961A (ja) 説明的及び実行可能な修復例の生成
US11556455B2 (en) Automated identification of posts related to software patches
JP2022078962A (ja) エラーに関連するコードの行の自動識別
US11144287B2 (en) Compile time validation of programming code
JP2021163488A (ja) ソフトウェアプログラムの修復例からのストリング編集動作の学習
CN112130860A (zh) Json对象解析方法、装置、电子设备及存储介质
US20140372982A1 (en) Standardization of variable names in an integrated development environment

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230309

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20240126