(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-13
(45)【発行日】2023-11-21
(54)【発明の名称】自動化されたソフトウェアプログラム修復
(51)【国際特許分類】
G06F 11/36 20060101AFI20231114BHJP
G06F 8/70 20180101ALI20231114BHJP
【FI】
G06F11/36 164
G06F11/36 124
G06F11/36 108
G06F11/36 112
G06F8/70
(21)【出願番号】P 2020012638
(22)【出願日】2020-01-29
【審査請求日】2022-10-06
(32)【優先日】2019-02-07
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】吉田 浩章
(72)【発明者】
【氏名】プラサド・ムクル アール
【審査官】山本 俊介
(56)【参考文献】
【文献】特開昭63-56728(JP,A)
【文献】特開2018-18197(JP,A)
【文献】特開2017-151594(JP,A)
【文献】特表2007-535723(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/36
G06F 8/70
(57)【特許請求の範囲】
【請求項1】
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すステップであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ステップと、
第2のソフトウェアプログラムの第2のソースコードにおける1つ以上のエラーを、前記第2のソースコードに関してテストスイートを実行することに基づいて識別するステップと、
前記第1のソースコードから決定された前記複数のイベント対応を使用して前記1つ以上のエラーに関して前記第2のソースコードに対して修復動作を実行するステップと、
を含む方法。
【請求項2】
前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すステップ、をさらに含む請求項1に記載の方法。
【請求項3】
前記不良導入イベントが前記第1の変更に対応すると決定することは、
前記第1の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第1のソフトウェアテストを含む、ことと、
前記第1の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別することと、
前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することと、
前記不良導入イベントが前記第1の変更に対応することを、前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別すること及び前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することに応じて決定することと、
を含む、請求項1に記載の方法。
【請求項4】
前記不良訂正イベントが前記第2の変更に対応すると決定することは、
前記第2の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第2のソフトウェアテストを含む、ことと、
前記第2の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別することと、
前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することと、
前記不良訂正イベントが前記第2の変更に対応することを、前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別すること及び前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することに応じて決定することと、
を含む、請求項1に記載の方法。
【請求項5】
前記欠陥導入イベントが前記第3の変更に対応すると決定することは、
前記第3の変更を含む前記第1のソースコードの部分に関して前記第2の静的解析を実行することであり、前記第2の静的解析は前記第1の欠陥を識別する、ことと、
前記第3の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第1の静的解析を実行することであり、前記第1の静的解析は前記第1の欠陥を識別しない、ことと、
前記欠陥導入イベントが前記第3の変更に対応することを、前記第2の静的解析が前記第1の欠陥を識別すること及び前記第1の静的解析が前記第1の欠陥を識別しないことに応じて決定することと、
を含む、請求項1に記載の方法。
【請求項6】
前記欠陥訂正イベントが前記第4の変更に対応すると決定することは、
前記第4の変更を含む前記第1のソースコードの部分に関して前記第3の静的解析を実行することであり、前記第3の静的解析は前記第2の欠陥を識別しない、ことと、
前記第4の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第4の静的解析を実行することであり、前記第4の静的解析は前記第2の欠陥を識別する、ことと、
前記欠陥訂正イベントが前記第4の変更に対応することを、前記第4の静的解析が前記第2の欠陥を識別すること及び前記第3の静的解析が前記第2の欠陥を識別しないことに応じて決定することと、
を含む、請求項1に記載の方法。
【請求項7】
前記プラットフォーム移行イベントが前記第5の変更に対応すると決定することは、
前記第5の変更を含む前記第1のソースコードの部分に関して前記第1のビルドを実行することであり、前記第1のビルドは前記エラーを識別する、ことと、
前記第5の変更を中に含ませた前記第1のソースコードの前記部分に関して前記第2のビルドを実行することであり、前記第2のビルドは前記エラーを識別しない、ことと、
前記プラットフォーム移行イベントが前記第5の変更に対応することを、前記第1のビルドが前記エラーを識別すること及び前記第2のビルドが前記エラーを識別しないことに応じて決定することと、
を含む、請求項1に記載の方法。
【請求項8】
命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記命令は、実行されたことに応じてシステムに動作を実行させ、前記動作は、
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すことであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ことと、
第2のソフトウェアプログラムの第2のソースコードにおける1つ以上のエラーを、前記第2のソースコードに関してテストスイートを実行することに基づいて識別することと、
前記第1のソースコードから決定された前記複数のイベント対応を使用して前記1つ以上のエラーに関して前記第2のソースコードに対して修復動作を実行することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
【請求項9】
前記動作は、前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すことをさらに含む、請求項8に記載の1つ以上のコンピュータ読取可能記憶媒体。
【請求項10】
システムであって、
命令を記憶するように構成された1つ以上のコンピュータ読取可能記憶媒体と、
前記1つ以上のコンピュータ読取可能記憶媒体に通信上結合され、前記命令の実行に応じて当該システムに動作を実行させるように構成された1つ以上のプロセッサと、
を含み、前記動作は、
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すことであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ことと、
前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すことと、
を含む、システム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示で論じられる実施形態は、自動化されたソフトウェアプログラム修復に関する。
【背景技術】
【0002】
ソフトウェアプログラムは、その中にエラー(一般に「バグ」と呼ばれる)をしばしば有し、これらは、意図したとおりに動作しない可能性がある。ソフトウェアプログラム内のエラーを識別し、訂正しようとして、しばしば、自動化された修復システムが使用される。
【0003】
本開示において請求される対象事項は、何らかの欠点を解決し又は上述されたような環境においてのみ動作する実施形態に限定されない。むしろ、この背景技術は、本開示に記載されるいくつかの実施形態が実施され得る1つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【0004】
一実施形態に態様によれば、動作が複数のイベント対応を決定することを含み得る。各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちのそれぞれの変更と、第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示し得る。複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定されてもよい。複数のイベントタイプ推論動作は、不良導入イベントが複数の変更のうち第1の変更に対応することを、第1の変更が第1のソースコードに含まれないで合格し、かつ第1の変更が第1のソースコードに含まれて不合格になった第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することを含み得る。複数のイベントタイプ推論動作は、不良訂正イベントが複数の変更のうち第2の変更に対応することを、第2の変更が第1のソースコードに含まれないで不合格になり、かつ第2の変更が第1のソースコードに含まれて合格した第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することをさらに含んでもよい。さらに、複数のイベントタイプ推論動作は、欠陥導入イベントが複数の変更のうち第3の変更に対応することを、第3の変更が第1のソースコードに含まれないで第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び第3の変更が第1のソースコードに含まれて第1のソースコードに対して実行された第2の静的解析から第1の欠陥が識別されることに基づいて、決定することを含んでもよい。さらに、複数のイベントタイプ推論動作は、欠陥訂正イベントが複数の変更のうち第4の変更に対応することを、第4の変更が第1のソースコードに含まれて第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び第4の変更が第1のソースコードに含まれて第1のソースコードに対して実行された第4の静的解析から第2の欠陥が識別されないことに基づいて、決定することを含んでもよい。複数のイベントタイプ推論動作は、特定のプラットフォームの第1のバージョンから特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが複数の変更のうち第5の変更に対応することを、第5の変更が中に含まれた第1のソースコードの第1のビルドが、第5の変更が中に含まれた第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、第1のビルドは特定のプラットフォームの第1のバージョンを使用して実行され、第2のビルドは特定のプラットフォームの第2のバージョンを使用して実行される、ことをさらに含んでもよい。
【0005】
実施形態の目的及び利点は、少なくとも特許請求の範囲において特に指し示された要素、特徴、及び組み合わせにより実現され、達成される。
【0006】
前述の一般的な説明及び以下の詳細な説明の双方が例として与えられ、説明的であり、請求される発明の限定ではない。
【図面の簡単な説明】
【0007】
例示的な実施形態が、添付図面の使用を通してさらなる特定性及び詳細と共に記載され、説明される。
【
図1】ソフトウェアプログラムに関して生じるイベントの推論に関連した一例示的な環境を表す図である。
【
図2】ソフトウェアプログラムからの二次的な修正の除去に関連した一例示的な環境を表す図である。
【
図3】ソフトウェアプログラムの修復に関連した一例示的な環境を表す図である。
【
図4】一例示的なコンピューティングシステムのブロック図を示す。
【
図5】ソフトウェアプログラムに関して生じるイベントを推論する一例示的な方法のフローチャートである。
【
図6】不良導入イベント及び不良訂正イベント推論動作を実行する一例示的な方法のフローチャートである。
【
図7】欠陥導入イベント及び欠陥訂正イベント推論動作を実行する一例示的な方法のフローチャートである。
【
図8】ソフトウェアプログラムのソースコードから二次的な修正を除去する一例示的な方法のフローチャートである。
【
図9A】ソースコードから二次的な修正を除去する際に使用され得る例示的な抽象構文木(AST)を示す。
【
図9D】
図9Cのテキスト表現の、例示的な異なるテキスト表現を示す。
【発明を実施するための形態】
【0008】
本開示に記載されるいくつかの実施形態は、ソフトウェアプログラムを修復する方法及びシステムに関する。ソフトウェアプログラムは、ソフトウェアプログラムを意図されない方法で挙動させる可能性があるエラー(一般に「バグ」と呼ばれる)をしばしば含む。さらに、エラーを検出及び訂正してソフトウェアプログラムを修復するために、しばしば、自動化された修復システム及び手法が使用される。
【0009】
さらに、既存のソフトウェアプログラムのリポジトリが使用されて、開発又はテストされているコード内のエラーを識別及び/又は訂正するために使用され得る対応するコード内のパターンを識別することがある。いくつかの例において、既存のソフトウェアプログラムのリポジトリは、多数のソフトウェアプログラム(例えば、数千、数万、数十万、数百万等のソフトウェアプログラム)のソースコードを含み得る。さらに、リポジトリは、ソースコードに対してなされた1つ以上の変更を通してなされるそれぞれのソフトウェアプログラムのソースコードの異なるイテレーション(iterations)を含むことがある。本開示において、このようなリポジトリに記憶され、他のソフトウェアプログラムの開発に役立つよう使用され得る既存のソフトウェアプログラム及び対応するソースコードは、「ビッグコード」と呼ばれることがある。いくつかの例において、特定のソフトウェアプログラムのソースコードの異なるイテレーション間でなされた変更は、エラーを訂正するものである可能性があり、かつ/あるいはエラーを導入する可能性がある。さらに又は代わりに、変更は、プラットフォーム移行、追加された挙動、除去された挙動、ソースコードのリファクタリング等に起因する可能性がある。ソースコードの変更を引き起こし、あるいはソースコードの変更により引き起こされるイベントを理解することは、変更がいつ及びどこで必要とされ、かつ/あるいは問題となる可能性があるかを識別するのに役立つことにより、他のソフトウェアの開発に役立つ可能性がある。
【0010】
いくつかの例において、ソースコードの1つ以上の変更は、対応する変更がなぜなされたのかのいくらかの洞察を提供するために(例えば、対応する変更を引き起こし又は対応する変更により引き起こされたイベントに関する洞察を提供するために)生成された対応するメッセージ(「コミットメッセージ」と呼ばれる)を有することがある。しかしながら、既存のソースコードを用いて含まれるコミットメッセージは、しばしば、意味のある洞察を提供するには過度にあいまいであり、かつ/あるいは幅広い。さらに、それぞれの変更に対応するイベントもまた、一般に、容易に明らかではない。そのようなものとして、既存のソフトウェアプログラムのリポジトリにおける変更に対応するイベントは、開発中であるか又はテストされているが容易に利用できないソフトウェアプログラムを向上させる際にかなり役立つ可能性がある、活用されていないリソースである。
【0011】
本開示の1つ以上の実施形態によれば、ソフトウェア開発の技術分野は、コンピューティングシステムが既存のソフトウェアプログラムの異なるバージョン間でなされた変更に対応するイベントを推論することができるようにコンピューティングシステムを構成することにより、向上し得る。さらに、いくつかの実施形態において、コンピューティングシステムは、推論イベントに基づいて、ソフトウェアプログラムに関連づけられたコミットライブラリに典型的に含まれるものより詳細で説明的なコミットメッセージを生成するように構成されてもよい。
【0012】
これら又は他の実施形態において、コンピューティングシステムは、他のソフトウェアプログラムをテストすること及び/又は開発することに関して、推論イベント及び/又は向上したコミットメッセージを使用するように構成されてもよい。例えば、コンピューティングシステムは、ソフトウェアプログラムのテスト中コードに関して発生したイベントをビッグコードから推論されたイベントと比較して、テスト中コードにおいて導入され又は直された可能性のある潜在的なエラーを識別するように構成されてもよい。さらに又は代わりに、コンピューティングシステムは、ビッグコードにおいて、推論イベントに関連づけられたコードパターンを識別するように構成されてもよい。これら又は他の実施形態において、識別されたコードパターンに関連づけられた推論イベントが、テスト中コードに関連づけられたイベントと同じであるか又は類似することに応じて、識別されたコードパターンが、テスト中コードに関する修復を選択又は実現するために(例えば、類似のコードパターンを有する修復を選択又は実現するために)使用されてもよい。例えば、2017年11月24日に出願された米国特許出願第15/822,106号及び2018年3月8日に出願された米国特許出願第15/915,894号は、双方がその全体を参照により本明細書に組み込まれ、他のソースコードにおける修復を実現するための、既存のソースコードにおけるコードパターンの使用を論じている。
【0013】
さらに又は代わりに、ソースコードの変更は、対応するソフトウェアプログラムの根本的な機能性に影響しない1つ以上の二次的な修正(secondary modifications)を時に含むことがある。既存のソースコード(例えば、ビッグコード)に、他のソースコードの開発に役立つよう使用され得る二次的な修正を含めることは、既存のソースコードのうちどの部分が他のソースコードの開発又はテストに役立ち、あるいは役立たない可能性があるかを識別することを、困難にする可能性がある。
【0014】
本開示の1つ以上の実施形態によれば、動作が、ソースコード内の二次的な修正を識別し、識別された二次的な修正を除去するために実行されてもよい。二次的な修正の除去は、他のソースコードの開発及びテストに有用であり得る既存のソースコード内のコードパターンの識別を容易にするのに役立つ可能性がある。これら又は他の実施形態において、イベントの推論は、以下に詳述されるように、二次的な修正を識別するのに役立つよう使用されてもよい。本開示において、「二次的な」修正は、対応するソースコードの根本的な機能性を変更し得ない修正を参照し得る。例えば、「二次的な」修正は、(例えば、可読性を向上させるための)表面的な修正、又はデバッグ目的で使用され得る修正を含む。
【0015】
さらに又は代わりに、二次的な修正の除去は、どの修正がエラーを含み得るかを識別するのに役立つ可能性がある。例えば、特定のソースコードは、特定のソースコードに1つ以上のエラーを導入し得る特定の変更を、特定のソースコードに対してなされる可能性がある。変更は、特定のソースコードに対してなされた複数の修正を含むことがあり、複数の修正のうち1つ以上が、それを含むことがエラーに寄与していない可能性がある二次的な修正であり得る。ゆえに、二次的な修正の除去は、変更のうちどの修正がエラーに寄与したかを識別するのに役立つ可能性がある。ゆえに、向上したエラーの識別は、エラーの訂正を容易にする可能性があり、結果的に、特定のソースコードを向上させるのに役立つ可能性がある。
【0016】
本開示の実施形態は、添付の図面を参照して説明される。
【0017】
図1は、本開示に記載される少なくとも1つの実施形態に従って配置された、ソフトウェアプログラムに関して生じるイベントの推論に関連した一例示的な環境100を表す図である。環境100は、解析モジュール106を含んでもよく、解析モジュール106は、ソフトウェアプログラムのソースコード104を解析して、ソフトウェアプログラムに関して生じ、かつソースコード104に対してなされた1つ以上の変更に関連づけられた1つ以上の推論イベント(inferred events)108を決定するように構成される。これら又は他の実施形態において、環境100は、コミットメッセージモジュール110を含んでもよく、コミットメッセージモジュール110は、推論イベント108を取得し、対応するコミットメッセージ112を生成するように構成される。各コミットメッセージ112は、それぞれの変更の理由又は原因である可能性があり、あるいはそれぞれの変更の結果であった可能性がある、それぞれの推論イベント108の指標を含んでもよい。
【0018】
ソースコード104は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理デバイスによる実行のための他の論理若しくは命令などの電子データを含んでもよい。いくつかの実施形態において、ソースコード104は、ソフトウェアプログラムの完全なインスタンスを含んでもよい。さらに又は代わりに、ソースコード104は、ソフトウェアプログラムの一部分を含んでもよい。ソースコード104は、ソフトウェアプログラムに使用され得る任意の適切なタイプのコンピュータ言語で書かれてもよい。
【0019】
いくつかの実施形態において、ソースコード104は、ソフトウェアプログラムのコードの複数のイテレーションを含んでもよい。例えば、アップデート、パッチ、プラットフォーム移行、バグフィックス、表面的な再配置等として、ソースコード104に対して複数の変更がなされることがある。ゆえに、複数の変更は、ソースコード104の2つ以上の異なるイテレーションを結果としてもたらし得る。これら又は他の実施形態において、ソースコード104は、ソフトウェアプログラムのコードのそのようなイテレーションのうち2つ以上を含むことがあり、イテレーション間でなされた変更に起因して、異なるイテレーション間に1つ以上の差異が存在し得る。さらに、本開示におけるソースコードに対する「変更」への参照は、1つ以上のコード行に対してなされ得る任意数の修正を含んでもよい。例えば、変更は、単一のコード行における単一の要素名変更、要素追加、又は要素削除のような簡素なものから、多数のコード行を導入又は削除するような複雑なものに及んでもよい。
【0020】
解析モジュール106は、コンピューティングデバイスがソースコード104に関して1つ以上の動作を実行して推論イベント108を取得することを可能にするように構成されたコード及びルーチンを含んでもよい。さらに又は代わりに、解析モジュール106は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行し又はその実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実現されてもよい。いくつかの他の例において、解析モジュール106は、ハードウェアとソフトウェアの組み合わせを使用して実現されてもよい。本開示において、解析モジュール106により実行されると記載された動作は、解析モジュール106が対応するシステムに実行するよう指示し得る動作を含んでもよい。
【0021】
解析モジュール106は、ソースコード104の複数のイテレーションを含むソースコード104を取得するように構成されてもよい。いくつかの実施形態において、解析モジュール106は、ソースコード104をビッグコードデータベース102から取得するように構成されてもよい。ビッグコードデータベース102は、既存のソフトウェアプログラム及びそれらのそれぞれのソースコードのリポジトリであり得る。これら又は他の実施形態において、ビッグコードデータベース102は、対応するソースコードの異なるイテレーションを含んでもよい。さらに又は代わりに、ビッグコードデータベース102は解析に対して利用可能にされてもよく、これは、他のソフトウェアプログラムの開発及びデバッグを容易にするのに役立つ可能性がある。
【0022】
解析モジュール106は、ソースコード104に関するイベント対応(event correspondences)を決定するために使用され得るソースコード104に関する一連の動作を実行するように構成されてもよい。いくつかの実施形態において、各イベント対応は、ソースコード104に対してなされたそれぞれの変更と、ソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示し得る。これら又は他の実施形態において、解析モジュール106は、推論イベント108を出力するように構成されてもよい。
【0023】
上述のように、推論イベント108は、ソフトウェアプログラムに関して生じ、かつソースコード104の異なるイテレーション間でソースコード104に対してなされた変更により引き起こされたか又は該変更の原因であったイベントを含んでもよい。例として、推論イベント108は、エラー訂正、エラー導入、プラットフォーム移行、追加された挙動、除去された挙動、ソースコード104のリファクタリング等を含んでもよい。
【0024】
いくつかの実施形態において、解析モジュール106は、ソースコード104に対してなされた変更に関してイベントタイプ推論動作を実行して、それぞれの変更に対応するイベントタイプを決定するように構成されてもよい。これら又は他の実施形態において、解析モジュール106は、推論イベント108を、どのイベントタイプがどの変更に対応するかについての指標として出力するように構成されてもよい。例えば、推論イベント108は、特定の変更、ソースコード104における特定の変更の位置、特定の変更に対応すると決定された特定のイベント、及び特定のイベントと特定の変更との間の対応の指標を含んでもよい。いくつかの実施形態において、推論イベント108を決定するために解析モジュール106により実行され得るイベントタイプ推論動作は、以下で詳細に論じられる
図5~
図11の方法500、600、700、800、900、1000、及び1100それぞれに関して以下に記載される1つ以上の動作を含んでもよい。
【0025】
いくつかの実施形態において、環境100は、コミットメッセージモジュール110を含んでもよい。コミットメッセージモジュール110は、コンピューティングデバイスが推論イベント108に関して1つ以上の動作を実行してコミットメッセージ112を取得することを可能にするように構成されたコード及びルーチンを含んでもよい。さらに又は代わりに、コミットメッセージモジュール110は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行し又はその実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実現されてもよい。いくつかの他の例において、コミットメッセージモジュール110は、ハードウェアとソフトウェアの組み合わせを使用して実現されてもよい。本開示において、コミットメッセージモジュール110により実行されると記載された動作は、コミットメッセージモジュール110が対応するシステムに実行するよう指示し得る動作を含んでもよい。
【0026】
コミットメッセージモジュール110は、コミットメッセージ112が特定のコード変更がなぜなされたかの理由又は特定のコード変更の影響に関するより多くの洞察を提供するように、コミットメッセージ112を生成するように構成されてもよい。例えば、コミットメッセージモジュール110は、推論イベント108を使用してコミットメッセージ112を生成するように構成されてもよく、それにより、コミットメッセージ112は、特定の変更、変更に対応する特定のイベント、及び特定のイベントの特定の変更への対応を記述するメッセージを提供する。
【0027】
例えば、特定のイベントが、特定のタイプのエラーのエラー訂正イベントとして、推論イベント108に示されてもよい。さらに、特定の変更が、エラーを訂正するためになされた修正及び修正のソースコード104内の位置により、推論イベント108に示されてもよい。これら又は他の実施形態において、コミットメッセージモジュール110は、特定のタイプのエラーが特定の変更により訂正されたことを記述する特定のコミットメッセージを生成するように構成されてもよい。いくつかの実施形態において、コミットメッセージモジュール110は、特定のコミットメッセージをソースコードに、特定の変更の位置において含めるように構成されてもよい。さらに又は代わりに、コミットメッセージモジュール110は、特定のコミットメッセージをイベントレポートに含めるように構成されてもよく、イベントレポートの特定のコミットメッセージが、特定の変更の位置を示してもよい。
【0028】
本開示の範囲から逸脱することなく、
図1に対して修正、追加、又は省略がなされてもよい。例えば、環境100は、本開示において図示及び説明されるものより多くの又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、環境100は、解析モジュール106を含むがコミットメッセージモジュール110を含まなくてもよく、他の実施形態において、環境100は、コミットメッセージモジュール110を含むが解析モジュール106を含まなくてもよい。さらに、いくつかの実施形態において、解析モジュール106及びコミットメッセージモジュール110の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部分が、それらが同じ要素とみなされ得るように組み合わせられてもよく、あるいは解析モジュール106及びコミットメッセージモジュール110の一部とみなされ得る共通セクションを有してもよい。
【0029】
図2は、本開示に記載される少なくとも1つの実施形態に従って配置された、ソフトウェアプログラムからの二次的な修正の除去に関連した一例示的な環境200を表す図である。環境200は、トリミングモジュール202を含んでもよく、トリミングモジュール202は、ソフトウェアプログラムのソースコード204を解析して、ソースコード204に対してなされた1つ以上の二次的な修正を除去し、修正されたソースコード206を取得するように構成される。
【0030】
ソースコード204は、例えば、ソフトウェアプログラム、ソフトウェアプログラムのコード、ライブラリ、アプリケーション、スクリプト、又は処理デバイスによる実行のための他の論理若しくは命令などの電子データを含んでもよい。いくつかの実施形態において、ソースコード204は、ソフトウェアプログラムの完全なインスタンスを含んでもよい。さらに又は代わりに、ソースコード204は、ソフトウェアプログラムの一部分を含んでもよい。ソースコード204は、ソフトウェアプログラムに使用され得る任意の適切なタイプのコンピュータ言語で書かれてもよい。
【0031】
いくつかの実施形態において、ソースコード204は、ソフトウェアプログラムのコードの複数のイテレーションを含んでもよい。例えば、アップデート、パッチ、プラットフォーム移行、バグフィックス、表面的な再配置等として、ソースコード204に対して複数の変更がなされることがある。ゆえに、複数の変更は、ソースコード204の2つ以上の異なるイテレーションを結果としてもたらし得る。これら又は他の実施形態において、ソースコード204は、ソフトウェアプログラムのコードのそのようなイテレーションのうち2つ以上を含むことがあり、イテレーション間でなされた変更に起因して、異なるイテレーション間に1つ以上の差異が存在し得る。
【0032】
さらに又は代わりに、いくつかの実施形態において、ソースコード204は、開発中か又はテストされているソフトウェアコードを含んでもよい。これら又は他の実施形態において、ソースコード204は、開発中か又はテストされているコードの2つ以上のイテレーションを含んでもよい。
【0033】
トリミングモジュール202は、コンピューティングデバイスがソースコード204に関して1つ以上の動作を実行して、修正されたソースコード206を取得することを可能にするように構成されたコード及びルーチンを含んでもよい。さらに又は代わりに、トリミングモジュール202は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行し又はその実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実現されてもよい。いくつかの他の例において、トリミングモジュール202は、ハードウェアとソフトウェアの組み合わせを使用して実現されてもよい。本開示において、トリミングモジュール202により実行されると記載された動作は、トリミングモジュール202が対応するシステムに実行するよう指示し得る動作を含んでもよい。
【0034】
トリミングモジュール202は、ソースコード204の複数のイテレーションを含むソースコード204を取得するように構成されてもよい。いくつかの実施形態において、トリミングモジュール202は、
図1のビッグコードデータベース102などのビッグコードデータベースからソースコード204を取得するように構成されてもよい。
【0035】
トリミングモジュール202は、ソースコード204の異なるイテレーションに関して一連の動作を実行して、イテレーション間でなされたどの修正が一次的な(primary)修正及び二次的な修正であるかを決定するように構成されてもよい。上述のように、「二次的な」修正への参照は、ソースコード204の根本的な機能性を変更し得ない修正を参照し得る。逆に、「一次的な」修正への参照は、ソースコード204の根本的な機能性を変更し得る修正を参照し得る。
【0036】
これら又は他の実施形態において、トリミングモジュール202は、二次的な修正であると決定された修正をソースコード204から除去するように構成されてもよい。トリミングモジュールにより出力され得る修正されたソースコード206は、決定された二次的な修正が除去されたソースコード204を含んでもよい。いくつかの実施形態において、トリミングモジュール202は、以下で詳細に論じられる
図5~
図7の方法500、600、及び700それぞれに関して以下に記載される1つ以上の動作を使用して、修正されたソースコード206を生成するように構成されてもよい。
【0037】
本開示の範囲から逸脱することなく、
図2に対して修正、追加、又は省略がなされてもよい。例えば、環境200は、本開示において図示及び説明されるものより多くの又は少ない要素を含んでもよい。例えば、いくつかの実施形態において、環境200は、
図1の環境100に含まれてもよい。さらに、いくつかの実施形態において、トリミングモジュール202の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部分が、解析モジュール106及びコミットメッセージモジュール110のうち1つ以上と組み合わせられてもよい。
【0038】
図3は、本開示に記載される少なくとも1つの実施形態に従って配置された、ソフトウェアプログラムの修復に関連した一例示的な環境300を表す図である。環境300は、修復モジュール306を含んでもよく、修復モジュール306は、テスト中コード(code under test)304をエラーについて解析するように構成される。修復モジュール306は、修正されたテスト中コード308を出力するようにさらに構成されてもよく、修正されたテスト中コード308は、修復モジュール306により実行された修復動作によりテスト中コード304になされた1つ以上の修正を含み得る。
【0039】
テスト中コード304は、ソフトウェアプログラム、ソフトウェアプログラムのソースコード、ライブラリ、アプリケーション、スクリプト、又は処理デバイスによる実行のための他の論理若しくは命令などの電子データを含んでもよい。いくつかの実施形態において、テスト中コード304は、ソフトウェアプログラムの完全なインスタンスを含んでもよい。さらに又は代わりに、テスト中コード304は、ソフトウェアプログラムの一部分を含んでもよい。テスト中コード304は、ソフトウェアプログラムに使用され得る任意の適切なタイプのコンピュータ言語で書かれてもよい。いくつかの実施形態において、テスト中コード304は、ソフトウェアプログラムのソースコードの1つ以上のイテレーションを含んでもよい。さらに又は代わりに、テスト中コード304は、
図1及び
図2のソースコード104又はソースコード204それぞれを含んでもよい。
【0040】
修復モジュール306は、コンピューティングデバイスがテスト中コード304の1つ以上の修正を実行して、修正されたテスト中コード308を生成することを可能にするように構成されたコード及びルーチンを含んでもよい。さらに又は代わりに、修復モジュール306は、プロセッサ、マイクロプロセッサ(例えば、1つ以上の動作を実行し又はその実行を制御するため)、フィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含むハードウェアを使用して実現されてもよい。いくつかの他の例において、修復モジュール306は、ハードウェアとソフトウェアの組み合わせを使用して実現されてもよい。本開示において、修復モジュール306により実行されると記載された動作は、修復モジュール306が対応するシステムに実行するよう指示し得る動作を含んでもよい。
【0041】
修復モジュール306は、テスト中コード304内の1つ以上のエラーを修復する(訂正するとも呼ばれる)ために使用され得るテスト中コード304に関する一連の修復動作を実行するように構成されてもよい。いくつかの実施形態において、修復モジュール306は、修復テンプレート312及び1つ以上のテストスイート311に基づいて、修復動作のうち1つ以上を実行するように構成されてもよい。
【0042】
修復テンプレート312は、任意の適切なタイプの命令又はルーチンを含んでもよく、該命令又はルーチンは、実行されたときに、テスト中コード304におけるエラーの存在に応じてテスト中コードに関する1つ以上の修正を実現するように構成されてもよい。修正は、エラーを修復又は修復しようと試みることができるテスト中コード304の変更を含んでもよい。本開示において、実行され得る修正は、「修復候補」又は「修復」と呼ばれることがある。
【0043】
テストスイート311は、テスト中コード304のテストケースとして機能し得る1つ以上のルーチンを含んでもよい。テストスイート311は、テスト中コード304が指定された方法で挙動するかどうかを決定するように構成されてもよい。テストスイート311は、任意の適切な手法に従って構成されてもよい。
【0044】
修復モジュール306は、テスト中コード304に関してテストスイート311のうち1つ以上を適用して、テスト中コード304における1つ以上のエラー及び対応するエラー位置を検出又は決定するように構成されてもよい。いくつかの実施形態において、修復モジュール306は、テストスイート311に含まれる1つ以上のテストを実行するように構成されてもよく、これは、テスト実行を実行すると呼ばれることがある。合格する(passes)テスト実行は「合格テスト実行」と呼ばれることがあり、不合格になる(fails)テスト実行は「不合格テスト実行」と呼ばれることがある。いくつかの実施形態において、テスト中コード304のエラー位置及び対応するエラーは、エラー位置に現れるコードを不合格テスト実行が実行することに基づいて識別されてもよい。
【0045】
いくつかの実施形態において、修復モジュール306は、
図2に関して説明したトリミングモジュール202などのトリミングモジュールを含んでもよい。これらの実施形態において、修復モジュール306は、トリミングモジュールを使用してエラー位置をより正確に識別するように構成されてもよい。例えば、修復モジュール306は、特定のエラー位置が、特定の変更が実現された後に導入された特定のエラーを含むことを識別するように構成されてもよい。いくつかの実施形態において、修復モジュール306は、
図1の解析モジュール106などの解析モジュールを含み、特定のエラーが特定の変更により導入されたことを識別してもよい。さらに又は代わりに、修復モジュール306は、特定の変更が特定のエラーを引き起こしたことを、二分手法などの任意の他の適切な手法を使用して識別してもよい。
【0046】
トリミングモジュールを使用し、修復モジュール306は、特定の変更のどの修正が二次的な修正であり得るかを識別するように構成されてもよい。さらに又は代わりに、トリミングモジュールを使用し、修復モジュール306は、二次的な修正を除去して、特定のエラーを結果としてもたらした特定の変更の一次的な修正を識別するように構成されてもよい。いくつかの実施形態において、修復モジュール306は、
図8の方法800に関して以下に詳細に記載されるように、このような一次的な修正をピンポイントするように構成されてもよい。
【0047】
いくつかの実施形態において、修復モジュール306は、検出されたエラーを修復するためになされ得る潜在的な修正として修復テンプレートから修復候補を取得するように構成されてもよい。いくつかの実施形態において、修復モジュール306は、修復候補の修復コードパターンを取得してもよい。例えば、いくつかの実施形態において、修復モジュール306は、米国特許出願第15/822,106号に記載されているような修復コードパターンを取得するように構成されてもよい。
【0048】
いくつかの実施形態において、修復モジュール306は、共通コードパターンデータベース314にアクセスするように構成されてもよい。共通コードパターンデータベース314は、ビッグコードから導出され得る共通コードパターンを含み得る。例えば、共通コードパターンは、既存のソフトウェアプログラムの1つ以上のリポジトリに記憶され得る既存のソフトウェアプログラムの既存のコードから導出されてもよい。いくつかの実施形態において、共通コードパターンは、米国特許出願第15/822,106号に記載されているように取得されてもよい。
【0049】
さらに又は代わりに、いくつかの実施形態において、既存のソフトウェアプログラムの既存のソースコードは、
図2のトリミングモジュール202により取得され、既存のソースコードに含まれ得る二次的な修正を除去して、修正された既存のソースコードを生成してもよい。これら又は他の実施形態において、共通コードパターンは、修正された既存のソースコードから取得されてもよく、これは、共通コードパターンの識別の効率を向上させる可能性がある。
【0050】
いくつかの実施形態において、修復モジュール306は、米国特許出願第15/822,106号に記載されているように修復候補のコードパターンと共通コードパターンとの間の関連づけに基づいてエラーの修正のために修復候補を選択又は優先順位づけするように構成されてもよい。
【0051】
さらに又は代わりに、いくつかの実施形態において、修復モジュール306は、ビッグコード推論イベント316を取得するように構成されてもよい。ビッグコード推論イベント316は、ビッグコードでなされた変更に関して推論されるイベントであり得る。いくつかの実施形態において、ビッグコード推論イベントは、
図1の推論イベント108に類似してもよい。これら又は他の実施形態において、修復モジュールは、ビッグコード推論イベントに基づいて修復候補を優先順位づけ又は選択するように構成されてもよい。
【0052】
例えば、ビッグコード推論イベントは、特定のタイプのエラーの訂正のイベントに対応する特定の変更を含んでもよい。さらに、エラー検出が、特定のエラータイプのものであるテスト中コード304の特定のエラーを識別してもよい。いくつかの実施形態において、修復モジュール306は、特定の変更に類似する修復候補を選択又は優先順位づけするように構成されてもよい。
【0053】
いくつかの実施形態において、修復モジュール306はまた、修復候補の優先順位づけに基づいてテスト中コード304に対する修復を実行するように構成されてもよい。例えば、修復モジュール306は、潜在的な修復として、修復候補を最も高い優先順位から最も低い優先順位まで降順に実現してもよい。さらに又は代わりに、修復モジュール306は、修正されたテスト中コード308を出力するように構成されてもよく、修正されたテスト中コード308は、修復候補の優先順位づけに基づいて実現され得る1つ以上の修復を含み得る。
【0054】
上述のように、いくつかの実施形態において、修復モジュール306は、解析モジュールを含み、テスト中コード304の異なるイテレーションに関して生じ得る1つ以上の推論イベントを識別してもよい。これら又は他の実施形態において、修復モジュール306は、
図1のコミットメッセージモジュール110などのコミットメッセージモジュールを含んでもよい。いくつかの実施形態において、修復モジュール306は、
図1に関して上述したように、コミットメッセージモジュール及び推論イベントを使用して、テスト中コード304に関してコミットメッセージを生成するように構成されてもよい。いくつかの実施形態において、テスト中コード304に対応するコミットメッセージは、修正テスト中コード308の生成においてテスト中コード304の開発及びテストに使用されてもよい。
【0055】
本開示の範囲から逸脱することなく、
図3に対して修正、追加、又は省略がなされてもよい。例えば、環境300は、本開示において図示及び説明されるものより多くの又は少ない要素を含んでもよい。さらに、いくつかの実施形態において、修復モジュール306、テストスイート311、及び修復テンプレート312の1つ以上のルーチン、1つ以上の命令、又はコードの少なくとも一部分が、それらが同じ要素とみなされ得るように組み合わせられてもよく、あるいは修復モジュール306、テストスイート311、及び修復テンプレート312のうち2つ以上の一部とみなされ得る共通セクションを有してもよい。
【0056】
図4は、本開示の少なくとも1つの実施形態による、一例示的なコンピューティングシステム402のブロック図を示す。コンピューティングシステム402は、解析モジュール(例えば、
図1の解析モジュール106)、コミットメッセージモジュール(例えば、
図1のコミットメッセージモジュール110)、トリミングモジュール(例えば、
図2のトリミングモジュール202)、及び/又は修復モジュール(例えば、
図3の修復モジュール306)に関連づけられた1つ以上の動作を実現又は指示するように構成され得る。コンピューティングシステム402は、プロセッサ450、メモリ452、及びデータ記憶装置454を含んでもよい。プロセッサ450、メモリ452、及びデータ記憶装置454は、通信上結合されてもよい。
【0057】
一般に、プロセッサ450は、種々のコンピュータハードウェア又はソフトウェアモジュールを含む、任意の適切な専用若しくは汎用コンピュータ、コンピューティングエンティティ、又は処理デバイスを含んでもよく、任意の適用可能なコンピュータ読取可能記憶媒体に記憶された命令を実行するように構成されてもよい。例えば、プロセッサ450は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラム命令を解釈及び/又は実行するよう及び/又はデータを処理するように構成された任意の他のデジタル若しくはアナログ回路を含んでもよい。
図4において単一のプロセッサとして示されているが、プロセッサ450は、本開示において説明された任意数の動作を個々又は集合的に実行し又はその実行を指示するように構成された任意数のプロセッサを含んでもよい。さらに、プロセッサのうち1つ以上が、異なるサーバなどの1つ以上の異なる電子デバイス上に存在してもよい。
【0058】
いくつかの実施形態において、プロセッサ450は、メモリ452、データ記憶装置454、又はメモリ452及びデータ記憶装置454に記憶されたプログラム命令を解釈及び/又は実行し、かつ/あるいはデータを処理するように構成されてもよい。いくつかの実施形態において、プロセッサ450は、データ記憶装置454からプログラム命令を取り出し、プログラム命令をメモリ452にロードすることができる。
【0059】
例えば、いくつかの実施形態において、上述のモジュール(例えば、解析モジュール、コミットメッセージモジュール、トリミングモジュール、及び/又は修復モジュール)のうち1つ以上が、プログラム命令としてデータ記憶装置454に含まれてもよい。プロセッサ450は、データ記憶装置454から対応するモジュールのプログラム命令を取り出すことができ、対応するモジュールのプログラム命令をメモリ452にロードすることができる。対応するモジュールのプログラム命令がメモリ452にロードされた後、プロセッサ450はプログラム命令を実行することができ、それにより、コンピューティングシステムは、命令により指示されるとおり対応するモジュールに関連づけられた動作を実現できる。
【0060】
メモリ452及びデータ記憶装置454は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能記憶媒体を含むことができる。そのようなコンピュータ読取可能記憶媒体は、プロセッサ450などの汎用又は専用コンピュータによりアクセスされ得る任意の利用可能な媒体を含んでもよい。限定でなく例として、そのようなコンピュータ読取可能記憶媒体は、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)、電気的消去可能プログラマブル読取専用メモリ(EEPROM)、コンパクトディスク読取専用メモリ(CD‐ROM)若しくは他の光ディスク記憶装置、磁気ディスク記憶装置若しくは他の磁気記憶デバイス、フラッシュメモリデバイス(例えば、ソリッドステートメモリデバイス)、又はコンピュータ実行可能命令又はデータ構造の形式で特定のプログラムコードを搬送又は記憶するために使用でき、かつ汎用又は専用コンピュータによりアクセスできる任意の他の記憶媒体を含む、有形の又は非一時的なコンピュータ読取可能記憶媒体を含んでもよい。上記の組み合わせもまた、コンピュータ読取可能記憶媒体の範囲内に含まれてもよい。コンピュータ実行可能命令は、例えば、プロセッサ450に特定の動作又は動作のグループを実行させるように構成された命令及びデータを含んでもよい。
【0061】
本開示の範囲から逸脱することなく、コンピューティングシステム402に対して修正、追加、又は省略がなされてもよい。例えば、いくつかの実施形態において、コンピューティングシステム402は、明示的に図示又は説明されない可能性のある任意数の他のコンポーネントを含んでもよい。
【0062】
図5は、本開示に記載される少なくとも1つの実施形態による、ソフトウェアプログラムに関して生じるイベントを推論する一例示的な方法500のフローチャートである。方法500は、テスト中コードに関して任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の解析モジュール106、
図1のコミットメッセージモジュール110、及び
図3の修復モジュール306のうち1つ以上、又は(例えば、1つ以上のモジュールにより指示される)
図4のコンピューティングシステム402が、方法500に関連づけられた動作のうち1つ以上を実行してもよい。別個のブロックで示されているが、方法500のブロックのうち1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
【0063】
方法500はブロック502で開始してもよく、ブロック502において、第1のソフトウェアプログラムの第1のソースコードが取得されてもよい。いくつかの実施形態において、第1のソースコードの複数のイテレーションが取得されてもよく、1つ以上の変更(各々が1つ以上の修正を含み得る)が、イテレーション間で第1のソースコードに関して生じていてもよい。
【0064】
いくつかの実施形態において、方法500は、複数のイベント対応を決定することを含んでもよく、各イベント対応は、イテレーション間で第1のソースコードに対してなされたそれぞれの変更間の対応を示す。これら又は他の実施形態において、イベント対応は、イテレーションのうち2つ以上を使用して1つ以上のイベントタイプ推論動作を実行することにより決定されてもよい。いくつかの実施形態において、イベントタイプ推論動作は、以下に記載されるブロック504、506、508、510、512、514、516、及び518に従って実行されてもよい。
【0065】
ブロック504において、最も古い変更が選択されてもよい。例えば、上述のように、第1のソースコードの各イテレーションは、前のイテレーションに対して1つ以上の変更がなされたことに起因し得る。そのようなものとして、ブロック502におけるソースコードの取得されたイテレーションに基づいて、第1のソースコードに対してなされた複数の変更が識別されてもよい。ブロック504で、いくつかの実施形態において、識別された変更のうち、最も古い変更、又は換言すれば他の変更のすべての前になされた変更である変更が、選択されてもよい。
【0066】
いくつかの実施形態において、方法500は、ブロック506において、選択された変更に関して不良導入(fault introduction)イベント推論動作を実行することを含んでもよい。不良導入イベント推論動作は、選択された変更が第1のソースコードに不良を導入したかどうかを決定するために使用され得る。そのようなものとして、いくつかの実施形態において、ブロック506で、不良導入イベントが選択された変更に対応するかどうかが決定されてもよい。
【0067】
例えば、いくつかの実施形態において、ブロック506で、1つ以上のソフトウェアテストが、第1のソースコードに関して、選択された変更が第1のソースコードに含まれないで実行されてもよい。さらに、同じソフトウェアテストが、第1のソースコードに関して、選択された変更が第1のソースコードに含まれて実行されてもよい。いくつかの例において、第1のソースコードの第1のソフトウェアテストが、選択された変更が第1のソースコードに含まれないで合格した可能性があり、選択された変更が第1のソースコードに含まれて不合格になった可能性がある。いくつかの実施形態において、第1のソフトウェアテストは、それが合格し次いで不合格になったことに基づいて識別されてもよい。これら又は他の実施形態において、不良導入イベントが選択された変更に対応することは、第1のソフトウェアテストをそれが合格し次いで不合格になったことに基づいて識別することに応じて、決定されてもよい。いくつかの実施形態において、不良導入イベントが選択された変更に対応するかどうかに関する決定は、以下で論じられるように、
図6の方法600の1つ以上の動作を実行することによりなされもよい。
【0068】
いくつかの実施形態において、方法500は、ブロック508において、選択された変更に関して不良訂正(fault correction)イベント推論動作を実行することを含んでもよい。不良訂正イベント推論動作は、選択された変更が第1のソースコード内の不良を訂正したかどうかを決定するために使用され得る。そのようなものとして、いくつかの実施形態において、ブロック508で、不良訂正イベントが選択された変更に対応するかどうかが決定されてもよい。
【0069】
例えば、いくつかの実施形態において、ブロック508で、ブロック506に関して説明したのと同様に、1つ以上のソフトウェアテストが、第1のソースコードに関して、選択された変更が第1のソースコードに含まれないで実行されてもよい。さらに、同じソフトウェアテストが、第1のソースコードに関して、選択された変更が第1のソースコードに含まれて実行されてもよい。いくつかの例において、第1のソースコードの第2のソフトウェアテストが、選択された変更が第1のソースコードに含まれないで不合格になった可能性があり、選択された変更が第1のソースコードに含まれて合格した可能性がある。いくつかの実施形態において、第2のソフトウェアテストは、それが不合格になり次いで合格したことに基づいて識別されてもよい。これら又は他の実施形態において、不良訂正イベントが選択された変更に対応することは、第2のソフトウェアテストをそれが不合格になり次いで合格したことに基づいて識別することに応じて、決定されてもよい。いくつかの実施形態において、不良訂正イベントが選択された変更に対応するかどうかに関する決定は、以下で詳細に論じられるように、
図6の方法600の1つ以上の動作を実行することによりなされてもよい。
【0070】
いくつかの実施形態において、方法500は、ブロック510において、選択された変更に関して欠陥導入(defect introduction)イベント推論動作を実行することを含んでもよい。欠陥導入イベント推論動作は、選択された変更が第1のソースコードに欠陥を導入したかどうかを決定するために使用され得る。そのようなものとして、いくつかの実施形態において、ブロック510で、欠陥導入イベントが選択された変更に対応するかどうかが決定されてもよい。本開示において、用語「欠陥」及び「不良」の使用は、双方、ソースコードにおいて見つけられ得るエラーを参照し得る。本開示においては、エラーが如何にして識別され得るかを区別するために、異なる用語が
図5、
図6及び
図7に関して、及び請求項に関して使用される。特に、「不良」は、テストスイートを使用するエラー導入イベント及びエラー訂正イベントを識別する文脈において使用される。さらに、「欠陥」は、静的解析を使用するエラー導入イベント及びエラー訂正を識別する文脈において使用される。
【0071】
例えば、いくつかの実施形態において、ブロック510で、第1の静的解析が、第1のソースコードに関して、選択された変更が第1のソースコードに含まれないで実行されてもよい。さらに、第2の静的解析が、第1のソースコードに関して、選択された変更が第1のソースコードに含まれて実行されてもよい。いくつかの例において、第1の欠陥が、第2の静的解析から識別され得る。さらに、第1の欠陥は、第1の静的解析から識別されなかった可能性がある。これら又は他の実施形態において、欠陥導入イベントが選択された変更に対応することは、第1の欠陥が第2の静的解析から識別されるが第1の静的解析から識別されないことに応じて、決定されてもよい。いくつかの実施形態において、欠陥導入イベントが選択された変更に対応するかどうかに関する決定は、以下で詳細に論じられるように、
図7の方法700の1つ以上の動作を実行することによりなされてもよい。
【0072】
いくつかの実施形態において、方法500は、ブロック512において、選択された変更に関して欠陥訂正(defect correction)イベント推論動作を実行することを含んでもよい。欠陥訂正イベント推論動作は、選択された変更が第1のソースコード内の欠陥を訂正したかどうかを決定するために使用され得る。そのようなものとして、いくつかの実施形態において、ブロック512で、欠陥訂正イベントが選択された変更に対応するかどうかが決定されてもよい。
【0073】
例えば、いくつかの実施形態において、ブロック512で、ブロック514と同様に、第1の静的解析が、第1のソースコードに関して、選択された変更が第1のソースコードに含まれないで実行されてもよい。さらに、第2の静的解析が、第1のソースコードに関して、選択された変更が第1のソースコードに含まれて実行されてもよい。いくつかの例において、第2の欠陥が、第1の静的解析から識別され得る。さらに、第2の欠陥は、第2の静的解析から識別されなかった可能性がある。これら又は他の実施形態において、欠陥訂正イベントが選択された変更に対応することは、第2の欠陥が第1の静的解析から識別されるが第2の静的解析から識別されないことに応じて、決定されてもよい。いくつかの実施形態において、欠陥訂正イベントが選択された変更に対応するかどうかに関する決定は、以下で詳細に論じられるように、
図7の方法700の1つ以上の動作を実行することによりなされてもよい。
【0074】
ブロック506、508、510、及び512のうち1つ以上で実行される1つ以上の動作に続いて、別の変更が選択されてもよい。例えば、ブロック504において、最も古い変更は、上記で論じられたように選択された可能性がある。いくつかの実施形態において、ブロック514において、解析されていない、より新しい変更があるかどうかが決定されてもよく、該より新しい変更は、ブロック504において前に選択された変更より新しい。いくつかの実施形態において、より新しい変更があることに応じて、該より新しい変更が選択されてもよく、ブロック506、508、510、及び512のうち1つ以上の動作のうち1つ以上が、新たに選択された変更に関して実行されてもよい。いくつかの実施形態において、新たに選択された変更は、新たに選択された変更が前に選択された変更と比較して次の最も古い変更であることに応じて選択されてもよい。いくつかの実施形態において、ブロック506、508、510、512、及び514に関する上記の動作は、あらゆる変更がブロック506、508、510、及び512のうち1つ以上に関して解析されるまで繰り返されてもよい。
【0075】
いくつかの実施形態において、上記に対して修正がなされてもよい。例えば、いくつかの例において、特定の変更に関してブロック506、508、510、又は512のうちの1つのみに関して動作が実行されてもよい。さらに又は代わりに、ブロック506、508、510、又は512のうちの1つに関して動作が実行されてもよく、特定のブロックに関して対応するイベント対応が識別されない場合、方法500は、ブロック506、508、510、又は512のうち別の1つに進んでもよい。さらに又は代わりに、特定の変更についてブロック506、508、510、又は512のうち1つに関して特定のイベント対応が決定されることに応じて、そのようなブロックのうち残りは、特定の変更に関してスキップされてもよい。
【0076】
いくつかの実施形態において、本方法500は、ブロック512において、特定の変更に関してプラットフォーム移行イベント推論動作を実行することを含んでもよい。
図5の図示された例示的な実装において、特定の変更は、第1のソースコードに対してなされた最も新しい(又は最も最近の)変更であり得る。さらに又は代わりに、特定の変更は、第1のソースコードに対してなされた可能性のある任意の他の変更であってもよい。
【0077】
プラットフォーム移行推論動作は、特定の変更が第1のソースコードのプラットフォーム移行に対応するかどうかを決定するために使用され得る。そのようなものとして、いくつかの実施形態において、ブロック516で、プラットフォーム移行イベントが特定の変更に対応するかどうかが決定されてもよい。
【0078】
プラットフォーム移行は、第1のソースコードが異なるプラットフォーム又はプラットフォームの異なるバージョンと共に使用され得るように第1のソースコードに対してなされた修正を含んでもよい。例えば、プラットフォーム移行イベントは、第1のプラットフォームから第2のプラットフォームへの移行を含んでもよい。さらに又は代わりに、プラットフォーム移行イベントは、特定のプラットフォームの第1のバージョンから特定のプラットフォームの第2のバージョンへの移行を含んでもよい。プラットフォームは、第1のソースコードをコンパイルするために使用されるコンパイラ、第1のソースコードに関して使用されるライブラリ、第1のソフトウェアプログラムを含むソフトウェアプログラムを実行するオペレーティングシステムを含んでもよい。いくつかの実施形態において、プラットフォーム移行イベントが特定の変更に対応するかどうかに関する決定は、以下で詳細に論じられるように、
図7の方法700の1つ以上の動作を実行することによりなされてもよい。いくつかの実施形態において、ブロック516の動作は、第1のソースコードに対応し得る各々のあり得る異なるプラットフォームについて繰り返されてもよい。
【0079】
ブロック516に続いて、別の変更が選択されてもよい。例えば、ブロック514において、最も新しい変更は、プラットフォーム移行イベント推論動作を実行するために選択された可能性がある。いくつかの実施形態において、ブロック518において、解析されていない、より古い変更があるかどうかが決定されてもよく、該より古い変更は、ブロック514において前に選択された変更より古い。いくつかの実施形態において、より古い変更があることに応じて、該より古い変更が選択されてもよく、ブロック516の動作のうちの1つ以上が、新たに選択された変更に関して実行されてもよい。いくつかの実施形態において、新たに選択された変更は、新たに選択された変更がブロック514において前に選択された変更と比較して次の最も新しい変更であることに応じて選択されてもよい。いくつかの実施形態において、ブロック514、516、及び518に関する上記の動作は、あらゆる変更がブロック516に関して解析されるまで繰り返されてもよい。
【0080】
いくつかの実施形態において、ブロック504、506、508、510、512、514、516、及び518で実行され得るイベント対応に基づいて、1つ以上の動作が実行されてもよい。例えば、いくつかの実施形態において、上述したような決定されたイベント対応に基づいて、変更のうち1つ以上の各々についてイベント推論が識別されてもよい。これら又は他の実施形態において、同様に上述したような識別されたイベント推論に基づいて、1つ以上のコミットメッセージが生成されてもよい。
【0081】
別の例として、いくつかの実施形態において、イベント対応に基づいて、第2のソフトウェアプログラムの第2のソースコードに関して1つ以上の修復動作が実行されてもよい。いくつかの実施形態において、
図3のテスト中コード304は、第2のソースコードの一例であり得る。
【0082】
例えば、いくつかの実施形態において、方法500は、ブロック520、522、及び524を含んでもよい。ブロック520において、1つ以上のエラーが、第2のソースコードにおいて識別されてもよい。エラー識別は、第2のソースコードに関して任意の適切な手法を使用して実行されてもよい。例えば、いくつかの実施形態において、エラー識別は、第2のソースコードに関して1つ以上のテストスイートのテスト実行を実行することに基づいて実行されてもよい。
【0083】
ブロック522において、識別されたエラーの修復は、第1のソースコードに関して決定され得るイベント対応に基づいて実行されてもよい。例えば、上述のように、いくつかの実施形態において、イベント対応から取得され得る第1のソースコードに関する推論イベントは、
図3に関して上述したビッグコード推論イベントに類似し得る。これら又は他の実施形態において、第1のソースコード推論イベントのうち1つ以上が使用されて、第2のソースコードに対してなされ得る1つ以上の修復候補を識別又は優先順位づけし、
図3に関して上述したように、該推論イベントに含まれるものと同様であり得るエラーを訂正してもよい。これら又は他の実施形態において、推論イベントに対応する修復候補及び変更の間の類似度は、修復候補及び変更について決定され得るコードパターンに基づいて決定されてもよい。これら又は他の実施形態において、第1のソースコードに対応する推論イベントに関して生成され得る1つ以上のコミットメッセージが使用されて、推論イベントに含まれる変更と第2のソースコードに対してなされた変更との間の類似度に基づいてエラーのあり得る原因を識別してもよい。
【0084】
ブロック524において、修正された第2のソースコードが出力されてもよい。修正された第2のソースコードは、上述の修復優先順位づけに基づいて実現され得る1つ以上の修復候補を含み得る修正を含んでもよく、それにより、修正された第2のソースコードは、第2のソースコードの修正されたバージョンを含み得る。
【0085】
方法500は、ソフトウェアプログラムのテスト及び修復の効率及び有効性を向上させる可能性がある。例えば、記載された修復候補の優先順位づけの決定は、修復候補の有効性に関するより良い決定を行うのに役立つ。
【0086】
本開示の範囲から逸脱することなく、方法500に対して修正、追加、又は省略がなされてもよい。例えば、方法500の動作は、異なる順序で実現されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションに組み合わせられてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0087】
例えば、いくつかの実施形態において、イベントタイプ推論動作を行うことに関して記載された動作は、第2のソースコードに関して行われてもよい。さらに又は代わりに、1つ以上の第2のソースコード推論イベントが決定されてもよい。これら又は他の実施形態において、1つ以上の対応する第2のソースコードコミットメッセージが生成されてもよい。いくつかの実施形態において、第2のソースコード推論イベント及び/又はコミットメッセージは、第2のソースコードを修復するために使用されてもよい。例えば、第2のソースコード推論イベントは、第2のソースコードに対してなされた特定の変更に関して不良又は欠陥導入イベントが生じたと示すことがある。ゆえに、いくつかの実施形態において、該特定の変更が識別され、修正されて、第2のソースコードを訂正してもよい。さらに又は代わりに、第1のソースコード推論イベントから、類似の不良又は欠陥を訂正する不良又は欠陥訂正イベントが識別されてもよい。これら又は他の実施形態において、識別された不良又は欠陥訂正イベントに対応する第1のソースコードに対する変更が使用されて、修復候補を選択し、第2のソースコード推論イベントから識別された類似の不良又は欠陥を訂正してもよい。
【0088】
図6は、本開示に記載される少なくとも1つの実施形態による、不良導入イベント及び不良訂正イベント推論動作を実行する一例示的な方法600のフローチャートである。いくつかの実施形態において、方法600は、ソフトウェアプログラムのソースコードの特定の変更が不良導入イベント又は不良訂正イベントに対応し得るかどうかを決定するために実行されてもよい。さらに、上述のように、いくつかの実施形態において、
図5の方法500に関して上述したブロック506及び508の動作のうち1つ以上が、方法600に従って実行されてもよい。そのようなものとして、いくつかの実施形態において、
図5の方法500に関して上記で論じられた選択された変更は、方法600の説明で参照される特定の変更であり得る。さらに又は代わりに、方法600の説明で参照されるソースコードは、
図5の方法500に関して上記で論じられた第1のソースコード又は第2のソースコードであり得る。
【0089】
方法600は、テスト中コードに関して任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の解析モジュール106及び
図3の修復モジュール306のうち1つ以上、又は(例えば、1つ以上のモジュールにより指示される)
図4のコンピューティングシステム402が、方法600に関連づけられた動作のうち1つ以上を実行してもよい。別個のブロックで示されているが、方法600のブロックのうち1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
【0090】
方法600はブロック602で開始してもよく、ブロック602において、1つ以上のソフトウェアテストが、ソースコードに関して、特定の変更がソースコードに含まれないで実行されてもよい。いくつかの実施形態において、1つ以上のソフトウェアテストは、ソースコードの第1のイテレーションにおいてソースコードに関してテストスイートの第1の実行を実行することにより実行されてもよく、特定の変更はソースコードから省略されている。
【0091】
ブロック604において、同じ1つ以上のソフトウェアテストが、ソースコードに関して、特定の変更がソースコードに含まれて実行されてもよい。いくつかの実施形態において、1つ以上のソフトウェアテストは、ソースコードの第2のイテレーションにおいてソースコードに関してテストスイートの第2の実行を実行することにより実行されてもよく、特定の変更はソースコードに含まれている。
【0092】
ブロック606において、第2のテスト実行に関して何らかの不合格テストがあるかどうかが決定されてもよい。第2のテスト実行に関して何の不合格テストもないことに応じて、方法600は、ブロック606からブロック614に進み得る。第2のテスト実行に関して少なくとも1つの不合格テストがあることに応じて、方法600は、ブロック606からブロック608に進み得る。ブロック608において、第2のテスト実行の特定の不合格テストが選択されてもよい。
【0093】
ブロック610において、第2のテスト実行の特定の不合格テストが第1のテスト実行に関して合格テストであったかどうかが決定されてもよい。第2のテスト実行の特定の不合格テストが第1のテスト実行に関して合格テストであることに応じて、方法600はブロック610からブロック612に進み得る。ブロック612において、不良導入イベントが特定の変更に対応することが、第2のテスト実行の特定の不合格テストが第1のテスト実行に関して合格テストであることに基づいて決定されてもよい。
【0094】
ブロック612に続いて、方法600は、ブロック606に戻り得る。さらに、ブロック610を再び参照し、特定の不合格テストが第1のテスト実行に関して合格テストでないことに応じて、方法600はブロック610からブロック606に戻り得る。
【0095】
ブロック610又は612からブロック606に戻った後、ブロック608、610、又は612に関して解析されていない、第2のテスト実行に関する何らかの他の不合格テストがあるかどうかが決定されてもよい。ブロック608、610、又は612に関して解析されていない、第2のテスト実行に関する他の不合格テストがあることに応じて、方法600はブロック606から再びブロック608に進み得る。いくつかの実施形態において、ブロック606、608、610、及び612の動作は、第2のテスト実行に関するすべての不合格テストがブロック608、610、及び612に関して解析されるまで繰り返されてもよい。
【0096】
第2のテスト実行に関して不合格テストがないことに応じて、又は第2のテスト実行に関するすべての不合格テストがブロック608、610、及び612に関して解析されることに応じて、方法600は、ブロック606からブロック614に進み得る。
【0097】
ブロック614において、ソースコードの第1のテスト実行に関して何らかの不合格テストがあるかどうかが決定されてもよい。第1のテスト実行に関して何の不合格テストもないことに応じて、方法600は終了し得る。第1のテスト実行に関して少なくとも1つの不合格テストがあることに応じて、方法600はブロック614からブロック616に進み得る。ブロック616において、第1のテスト実行の特定の不合格テストが選択されてもよい。
【0098】
ブロック618において、第1のテスト実行の特定の不合格テストが第2のテスト実行に関して合格テストであったかどうかが決定されてもよい。第1のテスト実行の特定の不合格テストが第2のテスト実行に関して合格テストであることに応じて、方法600はブロック618からブロック620に進み得る。ブロック620において、不良訂正イベントが特定の変更に対応することが、第1のテスト実行の特定の不合格テストが第2のテスト実行に関して合格テストであることに基づいて決定されてもよい。
【0099】
ブロック620に続いて、方法600は、ブロック614に戻り得る。ブロック620からブロック614に戻った後、ブロック616、618、又は620に関して解析されていない、第1のテスト実行に関する何らかの他の不合格テストがあるかどうかが決定されてもよい。ブロック616、618、又は620に関して解析されていない、第1のテスト実行に関する他の不合格テストがあることに応じて、方法600はブロック614から再びブロック616に進み得る。いくつかの実施形態において、ブロック614、616、618、及び620の動作は、第1のテスト実行に関するすべての不合格テストがブロック616、618、及び620に関して解析されるまで繰り返されてもよい。ブロック614において、第1のテスト実行に関する全ての不合格テストがブロック616、618、及び620に関して解析されたと決定されることに応じて、方法600は終了し得る。
【0100】
本開示の範囲から逸脱することなく、方法600に対して修正、追加、又は省略がなされてもよい。例えば、方法600の動作は、異なる順序で実現されてもよい。例えば、いくつかの実施形態において、動作614、616、618、及び620は、いくつかの実施形態において動作606、608、610、及び612の前に実行されてもよい。別の例として、ブロック602及び604の動作は、記載されたものと異なる順序で実行されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。例えば、いくつかの実施形態において、動作606、608、610、及び612は、いくつかの実施形態において動作614、616、618、及び620と同時に実行されてもよい。別の例として、ブロック602及び604の動作は、同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションに組み合わせられてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0101】
図7は、本開示に記載される少なくとも1つの実施形態による、欠陥導入イベント及び欠陥訂正イベント推論動作を実行する一例示的な方法700のフローチャートである。いくつかの実施形態において、方法700は、ソフトウェアプログラムのソースコードの特定の変更が欠陥導入イベント又は欠陥訂正イベントに対応し得るかどうかを決定するために実行されてもよい。さらに、上述のように、いくつかの実施形態において、
図5の方法500に関して上述したブロック510及び512の動作のうち1つ以上が、方法700に従って実行されてもよい。そのようなものとして、いくつかの実施形態において、
図5の方法500に関して上記で論じられた選択された変更は、方法700の説明で参照される特定の変更であり得る。さらに又は代わりに、方法700の説明で参照されるソースコードは、
図5の方法500に関して上記で論じられた第1のソースコード又は第2のソースコードであり得る。
【0102】
方法700は、テスト中コードに関して任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図1の解析モジュール106及び
図3の修復モジュール306のうち1つ以上、又は(例えば、1つ以上のモジュールにより指示される)
図4のコンピューティングシステム402が、方法700に関連づけられた動作のうち1つ以上を実行してもよい。別個のブロックで示されているが、方法700のブロックのうち1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
【0103】
方法700はブロック702で開始してもよく、ブロック702において、第1の静的解析が、特定の変更をソースコードから省略させたソースコードの第1のイテレーションに関して実行されてもよい。ブロック704において、第2の静的解析が、特定の変更を中に含ませたソースコードの第2のイテレーションに関して実行されてもよい。
【0104】
ブロック706において、第2の静的解析がソースコードの第2のイテレーションに関して何らかの欠陥を識別したかどうかが決定されてもよい。第2の静的解析が第2のイテレーションに関して何の欠陥も識別しないことに応じて、方法700は、ブロック706からブロック714に進み得る。第2の静的解析が第2のイテレーションに関して少なくとも1つの欠陥を識別することに応じて、方法700は、ブロック706からブロック708に進み得る。ブロック708において、第2の静的解析から識別された第2のイテレーションの特定の欠陥が選択されてもよい。
【0105】
ブロック710において、第2のイテレーションの特定の欠陥が、第1のイテレーションに関して実行された第1の静的解析から識別されたかどうかが決定されてもよい。特定の欠陥が第1の静的解析から識別されないことに応じて、方法700はブロック710からブロック712に進み得る。ブロック712において、欠陥導入イベントが特定の変更に対応することが、特定の欠陥が第2の静的解析から識別されるが第1の静的解析から識別されないことに基づいて決定されてもよい。
【0106】
ブロック712に続いて、方法700はブロック706に戻り得る。さらに、ブロック710を再び参照し、特定の欠陥が第2の静的解析から、及び第1の静的解析から識別されることに応じて、方法700はブロック710からブロック706に戻り得る。
【0107】
ブロック710又は712からブロック706に戻った後、ブロック708、710又は712に関して解析されていない、第2のイテレーションに関する第2の静的解析から識別された何らかの他の欠陥があるかどうかが決定されてもよい。ブロック708、710、又は712に関して解析されていない、第2のイテレーションに関する第2の静的解析から識別された他の欠陥があることに応じて、方法700はブロック706から再びブロック708に進み得る。いくつかの実施形態において、ブロック706、708、710、及び712の動作は、第2のイテレーションに関する第2の静的解析から識別された欠陥がブロック708、710、及び712に関して解析されるまで繰り返されてもよい。
【0108】
ブロック708、710又は712に関して解析されていない、第2のイテレーションに関する第2の静的解析から識別されたさらなる欠陥がないことに応じて、方法700は、ブロック706からブロック714に進み得る。
【0109】
ブロック714において、第1の静的解析がソースコードの第1のイテレーションに関して何らかの欠陥を識別したかどうかが決定されてもよい。第1のイテレーションに関して第1の静的解析から識別された欠陥がないことに応じて、方法700は終了し得る。第1のイテレーションに関して第1の静的解析から識別された少なくとも1つの欠陥があることに応じて、方法700は、ブロック714からブロック716に進み得る。ブロック716において、第1の静的解析から識別された特定の欠陥が選択されてもよい。
【0110】
ブロック718において、第1の静的解析から識別された特定の欠陥が、第2のイテレーションに関して実行された第2の静的解析から識別されたかどうかが決定されてもよい。特定の欠陥が第1の静的解析から識別されるが第2の静的解析から識別されないことに応じて、方法700はブロック718からブロック720に進み得る。ブロック720において、欠陥訂正イベントが特定の欠陥に対応することが、第1の静的解析が特定の欠陥を識別すること及び第2の静的解析が特定の欠陥を識別しないことに基づいて決定されてもよい。
【0111】
ブロック720に続いて、方法700はブロック714に戻り得る。ブロック720からブロック714に戻った後、ブロック716、718、又は720に関して解析されていない、第1の静的解析から識別された何らかの他の欠陥があるかどうかが決定されてもよい。ブロック716、718、又は720に関して解析されていない、第1の静的解析から識別された他の欠陥があることに応じて、方法700はブロック714から再びブロック716に進み得る。いくつかの実施形態において、ブロック714、716、718、及び720の動作は、第1の静的解析から識別された全ての欠陥がブロック716、718、及び720に関して解析されるまで繰り返されてもよい。ブロック714において、第1の静的解析から識別された全ての欠陥がブロック716、718、及び720に関して解析されたと決定されることに応じて、方法700は終了し得る。
【0112】
本開示の範囲から逸脱することなく、方法700に対して修正、追加、又は省略がなされてもよい。例えば、方法700の動作は、異なる順序で実現されてもよい。例えば、いくつかの実施形態において、動作714、716、718、及び720は、いくつかの実施形態において動作706、708、710、及び712の前に実行されてもよい。別の例として、ブロック702及び704の動作は、記載されたものと異なる順序で実行されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。例えば、いくつかの実施形態において、動作706、708、710、及び712は、いくつかの実施形態において動作714、716、718、及び720と同時に実行されてもよい。別の例として、ブロック702及び704の動作は、同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションに組み合わせられてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0113】
図8は、本開示に記載される少なくとも1つの実施形態による、ソフトウェアプログラムのソースコードから二次的な修正を除去する一例示的な方法800のフローチャートである。方法800は、テスト中コードに関して任意の適切なシステム、装置、又はデバイスにより実行されてもよい。例えば、
図2のトリミングモジュール202及び
図3の修復モジュール306のうち1つ以上、又は(例えば、1つ以上のモジュールにより指示される)
図4のコンピューティングシステム402が、方法800に関連づけられた動作のうち1つ以上を実行してもよい。別個のブロックで示されているが、方法800のブロックのうち1つ以上に関連づけられたステップ及び動作は、特定の実装に依存してさらなるブロックに分割されてもよく、より少ないブロックに組み合わせられてもよく、あるいは消去されてもよい。
【0114】
方法800はブロック802で開始してもよく、ブロック802において、抽象構文木(abstract syntax trees、AST)が、第1のソフトウェアプログラムの第1のソースコードの複数のイテレーションから生成されてもよい。いくつかの実施形態において、第1のソースコードの複数のイテレーションが取得されてもよく、第1のソースコードに関してイテレーション間で1つ以上の変更(各々が1つ以上の変更を含み得る)が生じた可能性がある。いくつかの実施形態において、第1のソースコードの第1のイテレーションが取得されてもよく、第1のイテレーションは、第1のソースコードの特定の部分における特定の変更を除外する(excludes)。さらに又は代わりに、第1のソースコードの第2のイテレーションが取得されてもよく、第2のイテレーションは、第1のソースコードの特定の部分に特定の変更を含む。いくつかの実施形態において、特定の変更は複数の修正を含んでもよく、該修正のうち1つ以上が二次的な修正であり得る。
【0115】
いくつかの実施形態において、ブロック802において、第1のASTが第1のイテレーションに関して生成されてもよい。これら又は他の実施形態において、ブロック802において、第2のASTが第2のイテレーションに関して生成されてもよい。
【0116】
例えば、
図9Aは、特定の部分904を含むソースコードの第1のイテレーションに関して生成され得る例示的な第1のAST902を示す。さらに、
図9Aは、ソースコードの第2のイテレーションに関して生成され得る例示的な第2のAST906を示し、特定の部分904に対して複数の修正を含む特定の変更908がなされている。
【0117】
図8に戻り、ブロック804において、ブロック802で生成されたASTは、1つ以上のステートメント部分木(sub-trees)の森(forests)に区分されてもよい。例えば、いくつかの実施形態において、第1のASTの1つ以上の第1の部分木が識別されてもよい。第1の部分木は、特定の変更に関連づけられた特定の部分に対応することができ、それに従って識別されてもよい。いくつかの実施形態において、第1の部分木は、第1のソースコードに含まれるステートメント呼び出しに従って識別されてもよい。これら又は他の実施形態において、第1のASTは、識別された第1の部分木に従って区分されてもよい。さらに又は代わりに、第2のASTの複数の第2の部分木が識別されてもよい。複数の第2の部分木もまた、特定の変更に関連づけられた特定の部分に対応することができ、それに従って識別されてもよい。これら又は他の実施形態において、第2の部分木は、識別された第2の部分木に従って区分されてもよい。いくつかの例において、特定の部分木はAST全体であってもよく、それにより、AST全体が特定の部分木として識別されてもよい。
【0118】
例えば、
図9Bは、
図9Aの第1のAST902から識別され得る例示的な第1の部分木910を示す。特定の例において、第1の部分木910は、
図9Aの第1のAST902のすべてであってもよい。
図9Bはまた、
図9Aの第2のAST906の第2の部分木であり得る第2の部分木912、914、及び916を示す。
【0119】
図8に戻り、ブロック806において、識別された森のテキスト表現が生成されてもよい。例えば、第1のテキスト表現が各第1の部分木に関して生成されてもよく、第2のテキスト表現が各第2の部分木に関して生成されてもよい。いくつかの実施形態において、テキスト表現は、それぞれの部分木に対応し得るコード行を含んでもよい。
【0120】
例えば、
図9Cは、第1の部分木910に対応する第1のテキスト表現918を示す。
図9Aと
図9Cとの比較により示されるように、第1のテキスト表現918は、第1の部分木910に対応する特定の部分904における第1のソースコードの第1のイテレーションのコード行を含み得る。
【0121】
さらに、
図9Cは、第2の部分木912に対応し得る第2のテキスト表現920、第2の部分木914に対応し得る第2のテキスト表現922、及び第2の部分木916に対応し得る第2のテキスト表現924を示す。
【0122】
図8に戻る。ブロック808において、テキスト表現間のテキスト差異が決定されて、第2のテキスト表現から、第1のテキスト表現と異なる異なるテキスト表現を識別してもよい。例えば、いくつかの実施形態において、各第1のテキスト表現と各第2のテキスト表現との間で差異決定が行われて、どの第2のテキスト表現が第1のテキスト表現のいずれとも同じでないかを識別してもよい。第1のテキスト表現のいずれとも同じでない第2のテキスト表現は、第1のイテレーションと第2のイテレーションとの間になされた修正に対応し得る。このような第2のテキスト表現は、異なるテキスト表現として識別されてもよい。
【0123】
例として、第1のテキスト表現918が第2のテキスト表現920、第2のテキスト表現922、及び第2のテキスト表現924の各々に対して比較されて、第2のテキスト表現920、第2のテキスト表現922、及び第2のテキスト表現924のうちいずれが第1のテキスト表現918と異なるかを決定してもよい。比較から行われる差異決定に基づいて、第2のテキスト表現920及び第2のテキスト表現922が第1のテキスト表現と異なることが決定され得る。さらに、第2のテキスト表現924は第1のテキスト表現918と同じであることが決定されてもよい。これら又は他の実施形態において、第2のテキスト表現920は異なるテキスト表現「C1」として識別されてもよく、第2のテキスト表現922は異なるテキスト表現「C2」として識別されてもよい。
【0124】
図8に戻り、ブロック810において、異なるテキスト表現の最小サイズのセットが識別されてもよい。いくつかの実施形態において、異なるテキスト表現の最小サイズのセットは、第1のソースコードに関して実現され得る最小数の異なるテキスト表現として識別されてもよく、それにより、第1のソースコードは、あたかも特定の変更全体が第1のソースコードに関して実現されたように同じイベントに対応する。同じイベントに対応する異なるテキスト表現の最小サイズのセットの識別は、異なるテキスト表現に対応するどの修正が二次的な修正であるかと、いずれが一次的な修正を含み得るかを示すことができる。
【0125】
例えば、特定の異なるテキスト表現又は異なるテキスト表現のセットが、特定の変更全体と同じイベントに対応しない場合、そのような異なるテキスト表現は、二次的な修正に対応する可能性が高い。対照的に、特定の異なるテキスト表現又は異なるテキスト表現のセットが、特定の変更全体と同じイベントに対応する場合、そのような異なるテキスト表現は、一次的な修正に対応する可能性が高い。そのようなものとして、どの異なるテキスト表現が同じイベントに対応する最小サイズのセット外であるかを識別することは、トリミングされ得る最大数の二次的な修正を識別し得る。
【0126】
いくつかの実施形態において、ブロック810の動作は、特定の変更に関してイベント対応決定を実行することを含んでもよい。いくつかの実施形態において、イベント対応決定は、特定のイベントを特定の変更に対応するものとして識別し得る。いくつかの実施形態において、方法500、600、及び/又は700の1つ以上の動作が実行されて、特定の変更に関してイベント対応決定を実行してもよい。例えば、特定の変更の全てに対応する修正が、方法500、600、及び/又は700に関して上記された選択された変更として使用されてもよい。これら又は他の実施形態において、第1のASTに対応する第1のソースコードの第1のイテレーションは、中に含まれた選択された変更を含まないソースコードのイテレーションとして使用されてもよい。
【0127】
これら又は他の実施形態において、ブロック810の動作は、異なるテキスト表現の各可能なセットに関してイベント対応決定を実行することを含んでもよく、異なるテキスト表現の各セットは、1つ以上の異なるテキスト表現を含む。いくつかの実施形態において、方法500、600、及び/又は700の1つ以上の動作が実行されて、各可能なセットに関してイベント対応決定を実行してもよい。例えば、各セットに対応し、かつ第1のイテレーションに関し得る修正は、方法500、600、及び/又は700に関して上記された選択された変更に対応し得る。これら又は他の実施形態において、第1のASTに対応する第1のソースコードの第1のイテレーションは、方法500、600、及び/又は700に関して記載される中に含まれた選択された変更を含まないソースコードのイテレーションとして使用されてもよい。
【0128】
さらに又は代わりに、ブロック810の動作は、マッチングセットとして、異なるテキスト表現のセットのうちいずれが特定のイベントに対応するかを識別することを含んでもよい。これら又は他の実施形態において、マッチングセット識別は、可能なセットに関してなされたイベント対応決定に基づいてもよい。さらに、上述のように、マッチングセット識別は、異なるテキスト表現のセットのうちいずれが一次的な修正を含み得るかを識別してもよい。反対に、マッチングセットでない異なるテキスト表現のセットは、二次的な修正のみを含むセットであり得る。
【0129】
これら又は他の実施形態において、ブロック810の動作は、最小サイズのセットとして、最少数の異なるテキスト表現を含む特定のマッチングセットを識別することを含んでもよい。換言すれば、他のマッチングセットは、一次的な修正に対応し得るが、最小サイズのセットより多くの二次的な修正にも対応し得る。そのようなものとして、最小サイズのセット外である異なるテキスト表現は、二次的な修正に対応するとみなされてもよい。
【0130】
例として
図9Dに関して、上述のように、第1のテキスト表現918と第2のテキスト表現920、922、及び924の各々との間の差異決定は、第2のテキスト表現920及び922を、異なるテキスト表現C1及びC2としてそれぞれ識別し得る。異なるテキスト表現C1及びC2は、異なるテキスト表現の各可能なセットに編成されてもよく、それにより、第1のセットがC1のみを含んでもよく([C1])、第2のセットがC2のみを含んでもよく([C2])、第3のセットがC1及びC2を含んでもよい([C1,C2])。
【0131】
これら又は他の実施形態において、イベント「E1」が、特定の変更908に対応するものとして識別されてもよく、特定の変更908は、C1及びC2に対応する修正を含む。さらに、一例として、イベントE1は、第1のセット[C1]及び第3のセット[C1,C2]に対応するが第2のセット[C2]に対応しないものとして識別され得る。そのようなものとして、第1のセット[C1]及び第3のセット[C1,C2]は、マッチングセットとして識別されてもよい。さらに、第1のセット[C1]が第3のセット[C1,C2]より少数の異なるテキスト表現を含むため、第1のセット[C1]は最小サイズのセットであると決定され、最小サイズのセットとして選択されてもよい。
【0132】
図8に戻る。ブロック812において、最小サイズのセットの識別に基づいて第2のASTの1つ以上の部分木を除去することにより、修正された第2のASTが取得されてもよい。特に、上述のように、最小サイズのセット外である異なるテキスト表現は、二次的な修正に対応し得るものであり得る。そのようなものとして、いくつかの実施形態において、最小サイズのセット外である異なるテキスト表現は、二次的な修正に対応する二次的なテキスト表現として識別されてもよい。これら又は他の実施形態において、二次的なテキスト表現に対応する二次的な部分木は、二次的なASTから除去され得る二次的な部分木として識別されてもよい。
【0133】
例として、
図9Eは、第2の部分木914が除去された、修正された第2のAST930を示す。上述のように、第2の部分木914は、最小サイズのセットとして識別された第1のセット[C1]外である、異なるテキスト表現C2に対応する。そのようなものとして、第2の部分木914は除去されてもよい。注目すべきことに、図示された例において、第2の部分木916は除去されておらず、なぜならば、第2の部分木916は異なるテキスト表現でないテキスト表現に対応するためである。
【0134】
図8に戻り、いくつかの実施形態において、方法800は、第2のASTをさらにトリミングするさらなる動作を含んでもよい。例えば、いくつかの実施形態において、方法800は、前に解析された部分木に関して部分木であり得る部分木の別のセットに関して動作806、808、810、及び812を実行することを含んでもよい。いくつかの実施形態において、動作806、808、810、及び812は、すべての部分木が1つのレベル(「1」の高さとも呼ばれる)のみを有するまで、さらなる部分木セットに関して繰り返されてもよい。
【0135】
例えば、いくつかの実施形態において、方法800はブロック814を含んでもよく、ブロック814において、第1のAST及び第2のASTの任意の部分木が「1」より大きい高さを有するかどうかが決定されてもよい。少なくとも1つの部分木が「1」より大きい高さを有することに応じて、方法800はブロック814からブロック816に進み得る。
【0136】
ブロック816において、最大の高さを有する部分木がさらなる部分木に区分されてもよい。例えば、いくつかの実施形態において、各部分木の高さ(すなわち、レベル数)が識別されてもよい。さらに又は代わりに、ASTの特定の部分木が、他の部分木より大きいレベル数を有するものとして識別されてもよい。これら又は他の実施形態において、特定の部分木はさらなる部分木に区分されてもよい。ブロック816に続いて、方法800はブロック806に戻り得る。
【0137】
例として、
図9Eに示すように、第1の部分木910は2つのレベル(「2」の高さとも呼ばれる)を有し得、第2の部分木912は5つのレベル(「5」の高さとも呼ばれる)を有し得、第2の部分木916もまた2つのレベル(「2」の高さとも呼ばれる)を有し得る。そのようなものとして、第2の部分木912が最も高いレベルを有することを所与として、第2の部分木はさらなる部分木に分割されてもよい。例えば、
図9Fに示されるように、
図9Eの第2の部分木912は、さらなる部分木932、934、936、及び938に分割されてもよい。第2の部分木912のさらなる部分木932、934、936への分割に続いて、最小サイズの変更セットが、上記のようなさらなる部分木932、934、936の対応するテキスト表現に関して決定されてもよい。いくつかの実施形態において、ブロック806、808、810、812、814、及び816の動作は、すべての部分木が1つのレベルのみを有するまで繰り返されてもよい。
【0138】
ブロック818において、修正された第2のASTから第1のソースコードの第3のイテレーションが取得されてもよい。例えば、第3のイテレーションは、修正された第2のASTを使用して第1のソースコードを再生成することにより取得されてもよい。上述のように、修正された第2のASTは、上記で詳述したように除去された1つ以上の部分を含むことがあり、1つ以上の部分は、第1のソースコードに対してなされた可能性がある二次的な修正に対応し得る。そのようなものとして、第1のソースコードの第3のイテレーションは、第1のソースコードから省略された1つ以上の二次的な修正を有し得る。そのようなものとして、第3のイテレーションの解析は、第3のイテレーションで削除された1つ以上の二次的な修正を含み得る第2のイテレーションの解析より効率的な可能性がある。
【0139】
いくつかの実施形態において、第1のソースコードの第3のイテレーションに基づいて、第1のソースコードに関して1つ以上の修復動作が実行されてもよい。例えば、いくつかの実施形態において、特定の変更は、第1のソースコードにエラーを導入し得る。さらに、第1のソースコードの第3のイテレーションに基づいて、特定の部分のうち特定のサブ部分が、エラーを導入する一次的な修正を含むものとして識別され得る。いくつかの実施形態において、第1のイテレーションを第3のイテレーションに対して比較して差異を識別することにより、特定のサブ部分が識別されてもよい。これら又は他の実施形態において、特定のサブ部分が修正されて、エラーを修復してもよい。特定のサブ部分は、第3のイテレーションに基づいて特定のサブ部分がエラーを導入した一次的な修正に対応すると決定することに応じて、修正されてもよい。そのようなものとして、修復動作は、それらが第2のイテレーションに基づいて実行される場合より指示され、効率的であり得る。
【0140】
これら又は他の実施形態において、修復動作は、第2のソースコードに関してテストスイートを実行することに基づいて、第2のソースコードにおける1つ以上のエラーを識別することを含んでもよい。さらに又は代わりに、第2のソースコードのエラーを修復するための1つ以上の修復候補が、第1のソースコードの第3のイテレーションに基づいて識別され、あるいは優先順位づけされてもよい。
【0141】
例えば、いくつかの実施形態において、第3のイテレーションは、特定のエラーに対する修復を含むことがあり、第3のイテレーションから、1つ以上のコードパターンが識別されてもよく、1つ以上のコードパターンは、特定のエラーを修復するためになされ得る修正を示す。これら又は他の実施形態において、識別されたコードパターンが使用されて、特定のエラーに関連するか又は特定のエラーと同じ第2のソースコードのエラーに対する修復候補を選択し、あるいは優先順位づけしてもよい。コードパターンを識別するための第3のイテレーションの使用は、役立たないコードパターンと対照的にコードに役立つコードパターンを識別することを困難にし得る二次的な修正を除去することにより、第2のイテレーションより良い可能性がある。
【0142】
方法800は、ソフトウェアプログラムのテスト及び修復の効率及び有効性を向上させる可能性がある。例えば、AST及びテキスト表現の組み合わせの使用は、ASTだけを使用するより効率的な方法で、しかしまたテキスト解析を使用するだけより効果的な方法で、二次的な修正を識別することを可能にし得る。そのようなものとして、方法800の動作は、ソフトウェアプログラムに関して解析及びデバッグ動作を実行するように構成されたコンピューティングシステムの有効性及び効率を向上させる可能性がある。さらに、上記で詳述したように、二次的な修正の除去は、コンピューティングシステムによる問題及び解決策のより効率的な解析及び識別を提供するのに役立つ可能性がある。
【0143】
本開示の範囲から逸脱することなく、方法800に対して修正、追加、又は省略がなされてもよい。例えば、方法800の動作は、異なる順序で実現されてもよい。さらに又は代わりに、2つ以上の動作が同時に実行されてもよい。さらに、概説された動作及びアクションは例として提供されているに過ぎず、動作及びアクションのいくつかは、開示される実施形態の本質を損なうことなく、任意であってもよく、より少ない動作及びアクションに組み合わせられてもよく、あるいはさらなる動作及びアクションへ拡張されてもよい。
【0144】
上述のように、本開示に記載される実施形態は、以下でより詳細に論じられるように、種々のコンピュータハードウェア又はソフトウェアモジュールを含む専用又は汎用コンピュータ(例えば、
図2のプロセッサ250)の使用を含んでもよい。さらに、上述のように、本開示に記載される実施形態は、記憶されたコンピュータ実行可能命令又はデータ構造を搬送し又は有するコンピュータ読取可能媒体(例えば、
図2のメモリ252又はデータ記憶装置254)を使用して実現されてもよい。
【0145】
本開示において用いられるとき、用語「モジュール」又は「コンポーネント」は、モジュール又はコンポーネントのアクションを実行するように構成された特定のハードウェア実装、及び/又はコンピューティングシステムの汎用ハードウェア(例えば、コンピュータ読取可能媒体、処理デバイス等)に記憶され及び/又は汎用ハードウェアにより実行され得るソフトウェアオブジェクト又はソフトウェアルーチンを参照し得る。いくつかの実施形態において、本開示に記載される異なるコンポーネント、モジュール、エンジン、及びサービスが、コンピューティングシステム上で実行するオブジェクト又はプロセスとして(例えば、別個のスレッドとして)実現されてもよい。本開示に記載されるシステム及び方法のいくつかは、一般に、(汎用ハードウェアに記憶され、及び/又は汎用ハードウェアにより実行される)ソフトウェアで実現されるものとして記載されるが、特定のハードウェア実装、又はソフトウェアと特定のハードウェア実装との組み合わせもまた可能であり、企図される。本説明において、「コンピューティングエンティティ」は、本開示において前に定義された任意のコンピューティングシステム、又はコンピューティングシステム上で動作する任意のモジュール又はモジュレートの組み合わせであってもよい。
【0146】
本開示において、特に別記の特許請求の範囲(例えば、別記の特許請求の範囲の本文)において用いられる用語は、一般に「開放的」な用語として意図されている(例えば、用語「含んでいる」は、「含んでいるがこれに限定されない」と解釈されるべきであり、用語「有する」は、「少なくとも有する」と解釈されるべきであり、用語「含む」は、「含むがこれに限定されない」と解釈されるべきである、等)。
【0147】
さらに、特定数の導入された請求項記載が意図されている場合、そのような意図は請求項に明示的に記載され、そのような記載がない場合、そのような意図は存在しない。例えば、理解の助けとして、以下の別記の特許請求の範囲は、請求項記載を導入するために、導入フレーズ「少なくとも1つの」及び「1つ以上の」の使用を含むことがある。しかしながら、そのようなフレーズの使用は、不定冠詞「一の」(“a”又は“an”)による請求項記載の導入が、同じ請求項が導入フレーズ「1つ以上の」又は「少なくとも1つの」と「一の」などの不定冠詞とを含むときでも、そのような導入された請求項記載を含む任意の特定の請求項を1つのそのような記載のみ含む実施形態に限定することを暗に示すように見なされるべきではない(例えば、「一の」(“a”及び/又は“an”)は「少なくとも1つの」又は「1つ以上の」を意味するよう解釈されるべきである)。請求項記載を導入するために用いられる定冠詞の使用についても同様である。
【0148】
さらに、特定数の導入された請求項記載が明示的に記載されている場合であっても、当業者は、そのような記載は少なくとも記載された数を意味するよう解釈されるべきであることを認識するであろう(例えば、他の修飾語を伴わない「2つの記載」というただそれだけの記載は、少なくとも2つの記載、又は2つ以上の記載を意味する)。さらに、「A、B、及びC等のうち少なくとも1つ」又は「A、B、及びC等のうち1つ以上」と類似の規定が用いられている例において、一般に、そのような構造は、A単独、B単独、C単独、A及びB共に、A及びC共に、B及びC共に、又はA、B、及びC共に等を含むことが意図される。
【0149】
さらに、明細書においてか、特許請求の範囲においてか、又は図面においてかにかかわらず、2つ以上の代替的な用語を提示するいかなる分離的なワード又はフレーズも、用語のうち1つ、用語のうちいずれか、又は双方の用語を含む可能性を考慮するよう理解されるべきである。例えば、フレーズ「A又はB」は、「A」又は「B」又は「A及びB」の可能性を含むよう理解されるべきである。
【0150】
本開示に記載された全ての例及び条件付き言語は、本開示と発明者が当該分野を促進するために寄与した概念とを理解する際に読者を助けるための教育的目的を意図されており、そのような具体的に記載された例及び条件への限定を伴わないとみなされるべきである。本開示の実施形態が詳細に記載されたが、本開示の主旨及び範囲から逸脱することなく、種々の変更、置換、及び改変をこれに行うことができる。
上記の実施形態につき以下の付記を残しておく。
(付記1)
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すステップであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ステップと、
第2のソフトウェアプログラムの第2のソースコードにおける1つ以上のエラーを、前記第2のソースコードに関してテストスイートを実行することに基づいて識別するステップと、
前記第1のソースコードから決定された前記複数のイベント対応を使用して前記1つ以上のエラーに関して前記第2のソースコードに対して修復動作を実行するステップと、
を含む方法。
(付記2)
前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すステップ、をさらに含む付記1に記載の方法。
(付記3)
前記不良導入イベントが前記第1の変更に対応すると決定することは、
前記第1の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第1のソフトウェアテストを含む、ことと、
前記第1の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別することと、
前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することと、
前記不良導入イベントが前記第1の変更に対応することを、前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別すること及び前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することに応じて決定することと、
を含む、付記1に記載の方法。
(付記4)
前記不良訂正イベントが前記第2の変更に対応すると決定することは、
前記第2の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第2のソフトウェアテストを含む、ことと、
前記第2の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別することと、
前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することと、
前記不良訂正イベントが前記第2の変更に対応することを、前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別すること及び前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することに応じて決定することと、
を含む、付記1に記載の方法。
(付記5)
前記欠陥導入イベントが前記第3の変更に対応すると決定することは、
前記第3の変更を含む前記第1のソースコードの部分に関して前記第2の静的解析を実行することであり、前記第2の静的解析は前記第1の欠陥を識別する、ことと、
前記第3の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第1の静的解析を実行することであり、前記第1の静的解析は前記第1の欠陥を識別しない、ことと、
前記欠陥導入イベントが前記第3の変更に対応することを、前記第2の静的解析が前記第1の欠陥を識別すること及び前記第1の静的解析が前記第1の欠陥を識別しないことに応じて決定することと、
を含む、付記1に記載の方法。
(付記6)
前記欠陥訂正イベントが前記第4の変更に対応すると決定することは、
前記第4の変更を含む前記第1のソースコードの部分に関して前記第3の静的解析を実行することであり、前記第3の静的解析は前記第2の欠陥を識別しない、ことと、
前記第4の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第4の静的解析を実行することであり、前記第4の静的解析は前記第2の欠陥を識別する、ことと、
前記欠陥訂正イベントが前記第4の変更に対応することを、前記第4の静的解析が前記第2の欠陥を識別すること及び前記第3の静的解析が前記第2の欠陥を識別しないことに応じて決定することと、
を含む、付記1に記載の方法。
(付記7)
前記プラットフォーム移行イベントが前記第5の変更に対応すると決定することは、
前記第5の変更を含む前記第1のソースコードの部分に関して前記第1のビルドを実行することであり、前記第1のビルドは前記エラーを識別する、ことと、
前記第5の変更を中に含ませた前記第1のソースコードの前記部分に関して前記第2のビルドを実行することであり、前記第2のビルドは前記エラーを識別しない、ことと、
前記プラットフォーム移行イベントが前記第5の変更に対応することを、前記第1のビルドが前記エラーを識別すること及び前記第2のビルドが前記エラーを識別しないことに応じて決定することと、
を含む、付記1に記載の方法。
(付記8)
命令を記憶するように構成された1つ以上の非一時的コンピュータ読取可能記憶媒体であって、前記命令は、実行されたことに応じてシステムに動作を実行させ、前記動作は、
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すことであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ことと、
第2のソフトウェアプログラムの第2のソースコードにおける1つ以上のエラーを、前記第2のソースコードに関してテストスイートを実行することに基づいて識別することと、
前記第1のソースコードから決定された前記複数のイベント対応を使用して前記1つ以上のエラーに関して前記第2のソースコードに対して修復動作を実行することと、
を含む、1つ以上の非一時的コンピュータ読取可能記憶媒体。
(付記9)
前記動作は、前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すことをさらに含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記10)
前記不良導入イベントが前記第1の変更に対応すると決定することは、
前記第1の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第1のソフトウェアテストを含む、ことと、
前記第1の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別することと、
前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することと、
前記不良導入イベントが前記第1の変更に対応することを、前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別すること及び前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することに応じて決定することと、
を含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記11)
前記不良訂正イベントが前記第2の変更に対応すると決定することは、
前記第2の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第2のソフトウェアテストを含む、ことと、
前記第2の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別することと、
前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することと、
前記不良訂正イベントが前記第2の変更に対応することを、前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別すること及び前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することに応じて決定することと、
を含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記12)
前記欠陥導入イベントが前記第3の変更に対応すると決定することは、
前記第3の変更を含む前記第1のソースコードの部分に関して前記第2の静的解析を実行することであり、前記第2の静的解析は前記第1の欠陥を識別する、ことと、
前記第3の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第1の静的解析を実行することであり、前記第1の静的解析は前記第1の欠陥を識別しない、ことと、
前記欠陥導入イベントが前記第3の変更に対応することを、前記第2の静的解析が前記第1の欠陥を識別すること及び前記第1の静的解析が前記第1の欠陥を識別しないことに応じて決定することと、
を含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記13)
前記欠陥訂正イベントが前記第4の変更に対応すると決定することは、
前記第4の変更を含む前記第1のソースコードの部分に関して前記第3の静的解析を実行することであり、前記第3の静的解析は前記第2の欠陥を識別しない、ことと、
前記第4の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第4の静的解析を実行することであり、前記第4の静的解析は前記第2の欠陥を識別する、ことと、
前記欠陥訂正イベントが前記第4の変更に対応することを、前記第4の静的解析が前記第2の欠陥を識別すること及び前記第3の静的解析が前記第2の欠陥を識別しないことに応じて決定することと、
を含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記14)
前記プラットフォーム移行イベントが前記第5の変更に対応すると決定することは、
前記第5の変更を含む前記第1のソースコードの部分に関して前記第1のビルドを実行することであり、前記第1のビルドは前記エラーを識別する、ことと、
前記第5の変更を中に含ませた前記第1のソースコードの前記部分に関して前記第2のビルドを実行することであり、前記第2のビルドは前記エラーを識別しない、ことと、
前記プラットフォーム移行イベントが前記第5の変更に対応することを、前記第1のビルドが前記エラーを識別すること及び前記第2のビルドが前記エラーを識別しないことに応じて決定することと、
を含む、付記8に記載の1つ以上のコンピュータ読取可能記憶媒体。
(付記15)
システムであって、
命令を記憶するように構成された1つ以上のコンピュータ読取可能記憶媒体と、
前記1つ以上のコンピュータ読取可能記憶媒体に通信上結合され、前記命令の実行に応じて当該システムに動作を実行させるように構成された1つ以上のプロセッサと、
を含み、前記動作は、
複数のイベント対応を決定し、各イベント対応は、第1のソフトウェアプログラムの第1のソースコードに対してなされた複数の変更のうちそれぞれの変更と前記第1のソフトウェアプログラムに関して生じるそれぞれのイベントタイプとの間の対応を示すことであり、前記複数のイベント対応は、複数のイベントタイプ推論動作のうち2つ以上のイベントタイプ推論動作を実行することにより決定され、前記複数のイベントタイプ推論動作は、
不良導入イベントが前記複数の変更のうち第1の変更に対応することを、前記第1の変更が前記第1のソースコードに含まれないで合格し、かつ前記第1の変更が前記第1のソースコードに含まれて不合格になった前記第1のソースコードの第1のソフトウェアテストを識別することに基づいて、決定することと、
不良訂正イベントが前記複数の変更のうち第2の変更に対応することを、前記第2の変更が前記第1のソースコードに含まれないで不合格になり、かつ前記第2の変更が前記第1のソースコードに含まれて合格した前記第1のソースコードの第2のソフトウェアテストを識別することに基づいて、決定することと、
欠陥導入イベントが前記複数の変更のうち第3の変更に対応することを、前記第3の変更が前記第1のソースコードに含まれないで前記第1のソースコードに対して実行された第1の静的解析から第1の欠陥が識別されないことに基づいて、及び前記第3の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第2の静的解析から前記第1の欠陥が識別されることに基づいて、決定することと、
欠陥訂正イベントが前記複数の変更のうち第4の変更に対応することを、前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第3の静的解析から第2の欠陥が識別されることに基づいて、及び前記第4の変更が前記第1のソースコードに含まれて前記第1のソースコードに対して実行された第4の静的解析から前記第2の欠陥が識別されないことに基づいて、決定することと、
特定のプラットフォームの第1のバージョンから前記特定のプラットフォームの第2のバージョンへのプラットフォーム移行イベントが前記複数の変更のうち第5の変更に対応することを、前記第5の変更が中に含まれた前記第1のソースコードの第1のビルドが、前記第5の変更が中に含まれた前記第1のソースコードの第2のビルドに関して省略されるエラーを有することに基づいて、決定することであり、前記第1のビルドは前記特定のプラットフォームの前記第1のバージョンを使用して実行され、前記第2のビルドは前記特定のプラットフォームの前記第2のバージョンを使用して実行される、ことと、
を含む、ことと、
前記複数の変更のうち特定の変更についてのコミットメッセージを生成し、前記コミットメッセージは前記特定の変更に関して決定されたそれぞれのイベント対応を示すことと、
を含む、システム。
(付記16)
前記不良導入イベントが前記第1の変更に対応すると決定することは、
前記第1の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第1のソフトウェアテストを含む、ことと、
前記第1の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別することと、
前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することと、
前記不良導入イベントが前記第1の変更に対応することを、前記第1の実行に関して前記第1のソフトウェアテストを不合格テストとして識別すること及び前記第2の実行に関して前記第1のソフトウェアテストを合格テストとして識別することに応じて決定することと、
を含む、付記15に記載のシステム。
(付記17)
前記不良訂正イベントが前記第2の変更に対応すると決定することは、
前記第2の変更を含む前記第1のソースコードの部分に関してテストスイートの第1の実行を実行することであり、前記テストスイートは前記第2のソフトウェアテストを含む、ことと、
前記第2の変更が中に含まれない前記第1のソースコードの前記部分に関して前記テストスイートの第2の実行を実行することと、
前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別することと、
前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することと、
前記不良訂正イベントが前記第2の変更に対応することを、前記第1の実行に関して前記第2のソフトウェアテストを合格テストとして識別すること及び前記第2の実行に関して前記第2のソフトウェアテストを不合格テストとして識別することに応じて決定することと、
を含む、付記15に記載のシステム。
(付記18)
前記欠陥導入イベントが前記第3の変更に対応すると決定することは、
前記第3の変更を含む前記第1のソースコードの部分に関して前記第2の静的解析を実行することであり、前記第2の静的解析は前記第1の欠陥を識別する、ことと、
前記第3の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第1の静的解析を実行することであり、前記第1の静的解析は前記第1の欠陥を識別しない、ことと、
前記欠陥導入イベントが前記第3の変更に対応することを、前記第2の静的解析が前記第1の欠陥を識別すること及び前記第1の静的解析が前記第1の欠陥を識別しないことに応じて決定することと、
を含む、付記15に記載のシステム。
(付記19)
前記欠陥訂正イベントが前記第4の変更に対応すると決定することは、
前記第4の変更を含む前記第1のソースコードの部分に関して前記第3の静的解析を実行することであり、前記第3の静的解析は前記第2の欠陥を識別しない、ことと、
前記第4の変更が中に含まれない前記第1のソースコードの前記部分に関して前記第4の静的解析を実行することであり、前記第4の静的解析は前記第2の欠陥を識別する、ことと、
前記欠陥訂正イベントが前記第4の変更に対応することを、前記第4の静的解析が前記第2の欠陥を識別すること及び前記第3の静的解析が前記第2の欠陥を識別しないことに応じて決定することと、
を含む、付記15に記載のシステム。
(付記20)
前記プラットフォーム移行イベントが前記第5の変更に対応すると決定することは、
前記第5の変更を含む前記第1のソースコードの部分に関して前記第1のビルドを実行することであり、前記第1のビルドは前記エラーを識別する、ことと、
前記第5の変更を中に含ませた前記第1のソースコードの前記部分に関して前記第2のビルドを実行することであり、前記第2のビルドは前記エラーを識別しない、ことと、
前記プラットフォーム移行イベントが前記第5の変更に対応することを、前記第1のビルドが前記エラーを識別すること及び前記第2のビルドが前記エラーを識別しないことに応じて決定することと、
を含む、付記15に記載のシステム。