【文献】
畑 秀明 外2名,「開発履歴メトリクスを用いた細粒度なFault−proneモジュール予測」,情報処理学会論文誌,一般社団法人情報処理学会,2012年 6月15日,第53巻, 第6号,pp.1635−1643
(58)【調査した分野】(Int.Cl.,DB名)
請求項2に記載の方法であって、前記ソフトウェアビルドエラーをもたらした前記変更に基づいて、前記ソフトウェアビルドエラーを予測するために使用される予測生成器をアップデートするステップを含む方法。
請求項1に記載の方法であって、前記複数の変更リストの前記特性のうちの少なくとも1つは、前記複雑性メトリクス、ソフトウェア開発者決定、コンピューティングシステム決定、時間決定、レビュー決定、アクティビティ決定、開発者ビルド決定、及び、変更決定のある組み合わせを含み、前記開発者ビルド決定は、開発者のコンピューティングシステムが前記ソフトウェアの生成の間に同期したソースコードリポジトリの状態を含み、前記複雑性メトリクスは、ソフトウェアコードの変更された行におけるキャラクタの数に部分的に基づく、方法。
請求項1に記載の方法であって、前記複数の変更リストのうちの1つにより発生した前記ソフトウェアビルドエラーは、前記ソフトウェアがリンクされることを妨げる、方法。
請求項1に記載の方法であって、前記変更リストのそれぞれを、高リスク変更リスト又は低リスク変更リストとして識別するステップと、前記高リスク変更リストを、前記低リスク変更リストをビルドする前にビルドするステップとを含み、前記高リスク変更リストの前記ビルドは、前記高リスク変更リストを複数のコンピューティングシステムに、前記高リスク変更リストが並列にビルドされることを可能とするように送信することを含む、方法。
請求項1に記載の方法であって、前記変更リストの前記特性を、前記複数の確率からの集約最大確率又は前記複数の確率の合計を検出することにより集約するステップを含む方法。
請求項15に記載のシステムであって、前記プロセッサ実行可能コードは、前記プロセッサに、前記ソフトウェアビルドエラーをもたらした前記変更に基づいて、前記ソフトウェアビルドエラーを予測するために使用される予測生成器をアップデートすることをさせる、システム。
請求項15に記載のシステムであって、前記プロセッサ実行可能コードは、前記プロセッサに、前記ソフトウェアから前記ソフトウェアビルドエラーをもたらした前記変更を除去することをさせる、システム。
請求項14に記載のシステムであって、前記複数の変更リストの前記特性のうちの少なくとも1つは、前記複雑性メトリクス、ソフトウェア開発者決定、コンピューティングシステム決定、時間決定、レビュー決定、アクティビティ決定、開発者ビルド決定、及び、変更決定の任意の組み合わせを含み、前記開発者ビルド決定は、開発者のコンピューティングシステムが前記ソフトウェアの生成の間に同期したソースコードリポジトリの状態を含み、前記複雑性メトリクスは、ソフトウェアコードの変更された行におけるキャラクタの数に部分的に基づく、システム。
【発明を実施するための形態】
【0008】
[0013]ソフトウェアビルドエラーに関連付けられる遅延を最小限にするために、ソフトウェアビルドエラーを予測するための様々な方法が開発されてきた。いくつかの方法は、最後のソフトウェアビルド以降に変更されたソフトウェアコードの行数などの、ソフトウェアコードの特定の側面に関する情報を収集するステップを含む。これらの方法は、収集された情報に基づいて、ソフトウェアビルドが成功する可能性を決定することを試みることができる。しかしながら、これらの方法の多くは、ソフトウェアをビルドするプロセス、およびソフトウェアに行われた実際の変更ではなく、ソフトウェアコードから得られた情報に焦点を当てている。他の方法は、ソフトウェアビルドエラーを識別することができる変数のセットを識別するステップを含む。しかしながら、これらの方法の多くは、ソフトウェアビルドが失敗する可能性があるときを識別するために変数の固定セットを使用する決定木に依存する。
【0009】
[0014]本明細書に記載の技法は、ソフトウェアビルドエラーの任意の適切な数の確率に基づいて、ソフトウェアビルドエラーを予測することができる。いくつかの実施形態では、本明細書に記載の技法は、最後のソフトウェアビルド以降の一連の変更を識別して、各変更がソフトウェアビルドエラーを作成し得る確率を計算することができる。ソフトウェアビルドは、ソフトウェアをビルドする状態を指すことができ、ソフトウェア(本明細書では、ソフトウェアコードとも呼ばれる)を機械実行可能ファイルにコンパイルして、アプリケーションを形成するために機械実行可能ファイルをリンクするステップを含む。ソフトウェアビルドエラーは、ソフトウェアコードが実行可能ファイルにコンパイルされることを防止する、またはソフトウェアコードがリンクされることを防止する、ソフトウェアコードにおけるエラーを含み得る。ソフトウェアビルドエラーは、ソフトウェアコードが機械実行可能コードに変換されることを防止することができ、それはソフトウェアコードがアプリケーションに組み込まれることを防止することができる。
【0010】
[0015]前付けとして、図面のうちのいくつかは、機能、モジュール、特徴、要素等と呼ばれる、1つまたは複数の構造的コンポーネントのコンテキストで概念を説明する。図面に示される様々なコンポーネントは、たとえば、ソフトウェア、ハードウェア(たとえば、個別論理コンポーネント等)、ファームウェア等、またはこれらの実装形態の任意の組合せによって、任意の方法で実装され得る。一実施形態では、様々なコンポーネントは、実際の実装形態における、対応するコンポーネントの使用を反映し得る。他の実施形態では、図面に示される任意の単一のコンポーネントは、いくつかの実際のコンポーネントによって実装され得る。図面における任意の3つ以上の別々のコンポーネントの説明は、単一の実際のコンポーネントによって実行される異なる機能を反映し得る。以下で説明する
図1は、図面に示される機能を実装するために使用され得る1つのシステムに関する詳細を提供する。
【0011】
[0016]他の図面は、フローチャート形式で概念を説明する。この形式では、特定の動作が、特定の順序で実行される別個のブロックを構成するものとして説明される。そのような実装形態は例示的なものであり、非限定的なものである。本明細書に記載の特定のブロックは、グループ化して、単一の動作で実行することができ、特定のブロックは複数のコンポーネントブロックに分割することができ、また、特定のブロックは、ブロックの実行の並列方法を含む、本明細書に示されている順序とは異なる順序で実行することができる。フローチャートに示されるブロックは、ソフトウェア、ハードウェア、ファームウェア、手動処理等、またはこれらの実装形態の任意の組合せによって実装され得る。本明細書で使用されるように、ハードウェアは、コンピュータシステム、特定用途向け集積回路(ASIC)などの個別論理コンポーネント等、ならびにそれらの任意の組合せを含み得る。
【0012】
[0017]用語については、「ように構成される(configured to)」という語句は、任意の種類の構造的コンポーネントが、識別された動作を実行するように構築され得る、任意の方法を包含する。構造的コンポーネントは、ソフトウェア、ハードウェア、ファームウェア等、またはそれらの任意の組合せを使用する動作を実行するように構成され得る。
【0013】
[0018]「論理(logic)」という用語は、タスクを実行するための任意の機能を包含する。たとえば、フローチャートに示される各動作は、その動作を実行するための論理に対応する。動作は、ソフトウェア、ハードウェア、ファームウェア等、またはそれらの任意の組合せを使用して実行され得る。
【0014】
[0019]本明細書で使用されるように、「コンポーネント(component)」、「システム(system)」、「クライアント(client)」等の用語は、ハードウェア、ソフトウェア(たとえば、実行中の)、および/またはファームウェア、あるいはそれらの組合せのいずれかの、コンピュータ関連エンティティを指すことを意図する。たとえば、コンポーネントは、プロセッサ上で実行しているプロセス、オブジェクト、実行ファイル、プログラム、関数、ライブラリ、サブルーチン、および/またはコンピュータ、あるいはソフトウェアとハードウェアとの組合せでよい。例として、サーバ上で実行しているアプリケーションとサーバは、両方ともコンポーネントでよい。1つまたは複数のコンポーネントはプロセス内に常駐することができ、コンポーネントは1つのコンピュータ上でローカライズされてもよく、および/または2つ以上のコンピュータ間で分散されてもよい。
【0015】
[0020]さらに、特許請求される主題は、開示された主題を実装するためにコンピュータを制御するために、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組合せを生成するべく、標準プログラミング、および/またはエンジニアリング技法を使用する方法、装置、または製品として実装され得る。本明細書で使用される「製品(article of manufacture)」という用語は、任意の有形のコンピュータ可読デバイスまたは媒体からアクセス可能なコンピュータプログラムを包含することを意図する。
【0016】
[0021]コンピュータ可読記憶媒体は、これに限定されないが、磁気記憶デバイス(たとえば、特にハードディスク、フロッピー(登録商標)ディスク、および磁気ストリップ)、光ディスク(たとえば、特にコンパクトディスク(CD)、およびデジタル多用途ディスク(DVD))、スマートカード、ならびにフラッシュメモリデバイス(たとえば、特にカード、スティック、およびキードライブ)を含むことができる。それに対して、コンピュータ可読媒体は、一般的に(すなわち、必ずしも記憶媒体ではない)ワイヤレス信号などのための送信媒体などの通信媒体をさらに含み得る。
【0017】
[0022]
図1は、ソフトウェアビルドエラーを予測するコンピューティングシステムの例のブロック図である。コンピューティングシステム100は、たとえば、特にモバイル電話、ラップトップコンピュータ、デスクトップコンピュータ、またはタブレットコンピュータでよい。コンピューティングシステム100は、格納された命令を実行するように適合されたプロセッサ102、ならびにプロセッサ102によって実行可能な命令を格納するメモリデバイス104を含み得る。プロセッサ102は、シングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ、または任意の数の他の構成でもよい。メモリデバイス104は、ランダムアクセスメモリ(たとえば、SRAM、DRAM、ゼロキャパシタRAM、SONOS、eDRAM、EDO RAM、DDR RAM、RRAM(登録商標)、PRAM等)、読出し専用メモリ(たとえば、Mask ROM、PROM、EPROM、EEPROM等)、フラッシュメモリ、または他の任意の適切なメモリシステムを含み得る。プロセッサ102によって実行される命令は、ソフトウェアビルドエラーを予測するために使用され得る。
【0018】
[0023]プロセッサ102は、システムバス106(たとえば、PCI、ISA、PCI−Express、HyperTransport(登録商標)、NuBus等)を通じて、コンピューティングシステム100を1つまたは複数のI/Oデバイス110に接続するように適合された入力/出力(I/O)デバイスインターフェース108に接続され得る。I/Oデバイス110は、たとえば、キーボード、ジェスチャ認識入力デバイス、音声認識デバイス、およびポインティングデバイスを含むことができ、ポインティングデバイスは、特にタッチパッドまたはタッチスクリーンを含み得る。I/Oデバイス110は、コンピューティングシステム100の内蔵コンポーネントでもよく、コンピューティングシステム100に外部接続されたデバイスでもよい。
【0019】
[0024]プロセッサ102は、システムバス106を通じて、コンピューティングシステム100をディスプレイデバイス114に接続するように適合されたディスプレイインターフェース112にリンクされてもよい。ディスプレイデバイス114は、コンピューティングシステム100の内蔵コンポーネントであるディスプレイスクリーンを含み得る。また、ディスプレイデバイス114は、コンピューティングシステム100に外部接続された、特にコンピュータモニタ、テレビ、またはプロジェクタを含み得る。ネットワークインターフェースカード(NIC)116も、システムバス106を通じてコンピューティングシステム100をネットワーク(図示せず)に接続するように適合され得る。ネットワーク(図示せず)は、特にワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、またはインターネットでよい。
【0020】
[0025]記憶装置118は、ハードドライブ、光ドライブ、USBフラッシュドライブ、ドライブのアレイ、またはそれらの任意の組合せを含み得る。記憶装置118は、予測分析モジュール120、ビルドブレークモジュール122、およびアップデートモジュール124を含み得る。予測分析モジュール120は、ソフトウェアコードへの任意の数の変更を検出して、ソフトウェアコードがソフトウェアビルドエラーを含む可能性を予測することができる。予測分析モジュール120は、ソフトウェアコードへの各変更がソフトウェアビルドエラーを引き起こし得る確率を計算することによって、ソフトウェアコードがソフトウェアビルドエラーを含む可能性を予測することができる。ビルドブレークモジュール122は、ソフトウェアをビルドして、ソフトウェアビルドエラーを検出することができる。ビルドブレークモジュール122がソフトウェアビルドエラーを検出すると、ビルドブレークモジュール122も、ソフトウェアビルドエラーを引き起こしたソフトウェアコードへの変更を検出することができる。ビルドブレークモジュール122は、ソフトウェアビルドエラーを引き起こす変更を、アップデートモジュール124に送信することができる。アップデートモジュール124は、ソフトウェアコード変更、および対応するビルドエラーについての履歴情報を格納することができる。アップデートモジュール124は、履歴情報を予測分析モジュール120に提供することができ、予測分析モジュール120がソフトウェアビルドエラーの正確な予測を計算することを可能にする。
【0021】
[0026]
図1のブロック図は、コンピューティングシステム100が
図1に示されるすべてのコンポーネントを含むべきであることを示すことを意図するものではないことが理解されるべきである。むしろ、コンピューティングシステム100は、より少数の、または
図1に示されていないさらなるコンポーネント(たとえば、さらなるアプリケーション、さらなるメモリデバイス、さらなるネットワークインターフェース等)を含み得る。たとえば、コンピューティングシステム100は、特にユーザ、アプリケーション、または別のハードウェアデバイスにソフトウェアビルド情報を報告することができる報告モジュールを含み得る。さらに、予測分析モジュール120、ビルドブレークモジュール122、またはアップデートモジュール124の機能のうちのいずれかは、部分的に、または全体的に、ハードウェアおよび/またはプロセッサ102に実装され得る。たとえば、機能は、特定用途向け集積回路、プロセッサ102に実装された論理、または他の何らかのデバイスに実装され得る。
【0022】
[0027]
図2は、ソフトウェアビルドエラーを予測するための方法の例を示すプロセスフロー図である。方法200は、
図1のコンピューティングシステム100などのコンピューティングシステムで実装され得る。コンピューティングシステム100は、ソフトウェアコードへの変更、ならびに以前のソフトウェアコード変更および以前のソフトウェアビルド結果の履歴情報に基づいてソフトウェアビルドエラーを予測することができる、予測分析モジュール120も含み得る。
【0023】
[0028]ブロック202で、予測分析モジュール120はソフトウェアコードにおける変更を検出する。一実施形態では、予測分析モジュール120は、ソフトウェアコードと、ソフトウェアコードの以前のバージョンとを比較することによって、ソフトウェアコードへの変更を検出することができる。たとえば、予測分析モジュール120は、ソフトウェアコードにおける違いを識別することによって、ソフトウェアコードの2つの異なるバージョンにおける変更を検出することができる。他の実施形態では、予測分析モジュール120は、ソフトウェアコードへの変更に対応するソフトウェアコード内のインジケータを識別することによって、ソフトウェアコードにおける変更を検出することができる。たとえば、予測分析モジュール120は、ソフトウェアコードにおける変更に対応するソフトウェアコードに含まれるコメントに基づいて、ソフトウェアコードにおける変更を検出することができる。
【0024】
[0029]ブロック204で、予測分析モジュール120は、ソフトウェアコードへの変更ごとに変更リストを識別する。いくつかの実施形態では、予測分析モジュール120は、各変更リスト内の複数の変更を含み得る。たとえば、開発者は、予測分析モジュール120が1つの変更リスト内に含むことができる、ソフトウェアコードのいくつかの行を変更することができる。他の実施形態では、予測分析モジュール120は、開発者ごとに、または作業セッションごとに、変更リストを識別することができる。たとえば、予測分析モジュール120は、特定の開発者からソフトウェアコードに行われた変更を識別して、その変更を変更リストに格納することができる。他の例では、予測分析モジュール120は、ソフトウェアコードへの変更を含む各作業セッションを識別して、開発者ごとの作業日ごとに変更リストを識別することができる。
【0025】
[0030]ブロック206で、予測分析モジュール120は、変更リストごとに特性を識別する。変更リストの特性は、ソフトウェアコードにおける変更に関連付けられる任意の情報を含み得る。いくつかの実施形態では、特性は、ソフトウェアコードから得られた情報を含み得る。たとえば、変更リストの特性は、特に、修正されたソフトウェアコードファイルの数、または修正されたソフトウェアコードの行数を含み得る。いくつかの実施形態では、特性は、ソフトウェアコードにおける変更に関連する要因から得られた情報も含み得る。たとえば、変更リストの特性は、特に、ソフトウェアコードに変更を加えた開発者の決定、変更によって影響を受けたプロジェクト、ソフトウェアコードをコンパイルするために開発者が使用したコンピューティングシステムの決定、ソフトウェアコードへの変更をレビューした個人の数または名前(本明細書では、レビュー決定とも呼ばれる)、変更が提出された時間(本明細書では、時間決定とも呼ばれる)、ソフトウェアコードにおける変更に関連する複雑性メトリクス、および変更されたソフトウェアコードに基づく依存性を含み得る。複雑性メトリクスは、ソフトウェアコードの行における特徴の数、ソフトウェアコードの行を囲むネストされたループの数、または、ソフトウェアコードの複雑性を示す他の任意の要因を含むことができる。
【0026】
[0031]変更リストの特性のさらなる例は、他の開発者によって、ソースコードファイル、または修正された、もしくは所与の変更リストに関連する、ソースコードファイルの行に実行される任意のアクティビティ(本明細書では、アクティビティ決定と呼ばれる)を含み得る。変更リストの特性は、開発者によって行われた変更の表示も含み得る。たとえば、開発者によって行われた変更は、導入されたソースコードフラグメント、参照された識別子、またはソースコードに行われた他の任意の変更の記述(本明細書では、変更決定と呼ばれる)を含み得る。さらなる特性は、開発者のコンピューティングシステム上でソフトウェアがビルドされたときに、開発者のコンピューティングシステムが同期されたソースコードリポジトリの状態(本明細書では、開発者ビルド決定とも呼ばれる)、開発者のコンピューティングシステム上で実行されたテスト、およびソフトウェアビルドの一部として含まれたプロジェクトも含み得る。予測分析モジュール120は、変更リストに対応する任意の数の特性を考慮することによって、より正確な予測を提供することができる。
【0027】
[0032]ブロック208で、予測分析モジュール120は、ソフトウェアコードにおける変更ごとに確率を計算する。いくつかの実施形態では、変更ごとの確率は、ソフトウェアコードにおける変更がソフトウェアビルドエラーをもたらし得る可能性を表すことができる。確率は、ロジスティック回帰などの回帰を使用して計算され得る。たとえば、予測分析モジュール120は、変更リストに関連する特性ごとに係数を生成することができる。予測分析モジュール120は、履歴データに基づいて係数を決定することができる。たとえば、履歴データは、特定のソフトウェア開発者がソフトウェアビルドエラーを引き起こす確率が20%であることを示すことができる。この例では、予測分析モジュールは、ソフトウェア開発者に関連する特性に、係数として20%の値を割り当てることができる。
【0028】
[0033]いくつかの実施形態では、予測分析モジュール120は、ソフトウェアビルドエラーの確率を結合することができる。たとえば、予測分析モジュール120は、変更リストごとに、ソフトウェアビルドエラーを引き起こす個々の確率(P1、P2、...PN)を計算することができる。予測分析モジュール120は、式1で確率を結合することができる。
【0029】
1−(1−P1)(1−P2)...(1−PN)=P(Error) 式(1)
[0034]式1では、P1からPNは、変更リストがソフトウェアビルドエラーを引き起こし得る確率を表している。P(Error)という用語は、ソフトウェアビルドエラーがソフトウェアコードへのN個の変更に基づいて発生し得る可能性を表している。
【0030】
[0035]いくつかの実施形態では、予測分析モジュール120は、個々の変更リストの特性を集約して、複数の変更リストのソフトウェアビルドエラーの結合された確率を計算することができる。たとえば、予測分析モジュール120は、ソフトウェアビルド内の変更リストの数を検出することができる。また、予測分析モジュール120は、変更リストに関連付けられる任意の適切な数の集約値を検出することができる。たとえば、3つの変更リストは、ソースコードの100、150、および200行が変更されたことを示すことができる。コードの変更された行の数は、合計により集約されて、コードの変更された行の結合された数、すなわち上述の例では450のコードの変更された行になり得る。上述のソフトウェアビルドが、ソフトウェアビルドエラーをもたらした400を上回る変更されたソースコードの行を有する場合、ソフトウェアビルドは、ソフトウェアビルドエラーを引き起こすより高いリスクが割り当てられる場合がある。他の例では、予測分析モジュール120は、特にソフトウェアビルドエラーの集約最大確率、ソフトウェアビルドエラーの集約最小確率、ソフトウェアビルドエラーの集約平均確率、ソフトウェアビルドエラーの集約中央値確率、ソフトウェアビルドエラーの確率の合計、ソフトウェアビルドエラーの集約されたパーセンタイル、またはソフトウェアビルドエラーの確率の標準偏差を検出することによって、変更リストの特性を集約することができる。
【0031】
[0036]ブロック210で、予測分析モジュール120は、ソフトウェアコード内の各変更がソフトウェアビルドエラーを引き起こす確率を報告する。いくつかの実施形態では、予測分析モジュール120は、ソフトウェアビルドエラーの確率を、特にユーザ、アプリケーション、または他のハードウェアデバイスに報告することができる。たとえば、予測分析モジュール120は、ソフトウェアコードへの変更がソフトウェアビルドエラーをもたらし得る確率は20%であると計算することができる。この例では、予測分析モジュール120は、変更がソフトウェアビルドエラーを引き起こし得る可能性が20%であるという予測をユーザに報告することができる。このプロセスはブロック212で終了する。
【0032】
[0037]
図2のプロセスフロー図は、方法200のステップが任意の特定の順序で実行されるべきであること、または方法200のすべてのステップがあらゆる場合において含まれるべきであることを示すことを意図するものではない。いくつかの例では、ソフトウェアコードにおける変更は徐々に検出され得る。たとえば、予測分析モジュール120は、ソフトウェアコードへの変更ごとに新しい変更リストを生成して、ソフトウェアビルドエラーの確率を再計算することができる。他の例では、特性は、ソフトウェアコードへのさらなる変更が検出されるにつれて変わる場合がある。たとえば、予測分析モジュール120は、統合された開発環境についての、特に複雑性メトリクスまたは変更決定などの様々な特性を検出することができる。次いで、予測分析モジュール120は、開発者がソフトウェアコードへの変更を完遂した後に、さらなる特性を検出することができる。さらに、特定の用途に応じて、方法200に任意の数のさらなるステップが含まれ得る。いくつかの実施形態では、予測分析モジュール120は、変更リストをビルドブレークモジュール122に送信することができ、ビルドブレークモジュール122は、ソフトウェアコードへの変更がソフトウェアビルドエラーを引き起こすかどうかを決定することができる。ビルドブレークモジュール122は、以下で
図4に関連してより詳細に説明する。他の実施形態では、予測分析モジュール120は、変更リストをアップデートモジュール124に送信することができる。アップデートモジュール124は、変更リストおよびソフトウェアビルドエラーに対応する履歴データをアップデートすることができる。アップデートモジュール124は、以下で
図5に関連してより詳細に説明する。
【0033】
[0038]
図3は、ソフトウェアビルドエラーを予測するために使用される予測分析モジュールの例を示すブロック図である。予測分析モジュール120は、
図1のコンピューティングシステム100などのコンピューティングシステムに実装され得る。いくつかの実施形態では、予測分析モジュール120は、特徴抽出コンポーネント302、予測生成器304、トリガコンポーネント308、および報告コンポーネント306を含み得る。予測分析モジュール120のコンポーネントは、ソフトウェアビルドエラーの可能性を識別して分析することができる。
【0034】
[0039]いくつかの実施形態では、予測分析モジュール120は、任意の適切な数の変更リストを入力として受け入れることができる。上述のように、変更リストは、ソフトウェアコードへの任意の適切な数の変更を含むことができる。予測分析モジュール120は、変更リストを特徴抽出コンポーネント302に送信することができる。特徴抽出コンポーネント302は、ソフトウェアコードにおける変更に関連付けられる任意の適切な数の特性を決定することができる。たとえば、特徴抽出コンポーネント302は、各変更リストに関連付けられる特性を識別することができる。いくつかの例では、特徴抽出コンポーネント302は、特に、修正されたソフトウェアコードファイルの数、修正されたソフトウェアコードの行数、ソフトウェアコードに変更を加えた開発者、変更によって影響を受けたプロジェクト、ソフトウェアコードをコンパイルするために開発者が使用したコンピューティングシステム、ソフトウェアコードへの変更をレビューした個人の数、変更が提出された時間、ソフトウェアコードにおける変更に関連する複雑性メトリクス、および変更されたソフトウェアコードに基づく依存性などの特性を識別することができる。特徴抽出コンポーネント302は、変更リストおよび対応する特性を予測生成器304に送信することができる。
【0035】
[0040]予測生成器304は、変更リストの特性に基づいてソフトウェアビルドエラーの確率を計算することができる。
図2に関連して上述したように、ソフトウェアビルドエラーの確率は、特に、あるタイプの回帰を使用して、または、これに限定されないが、サポートベクターマシン、単純ベイズ(Naive Bayes)、もしくは決定木を含む機械学習モデルを使用して計算することができる。いくつかの実施形態では、ソフトウェアビルドエラーの確率は、線形回帰またはロジスティック回帰に基づいて計算することができる。他の実施形態では、確率は、ソフトウェアビルドエラーを引き起こす変更リストごとに結合された確率に基づいてソフトウェアビルドエラーの可能性を計算するために結合され得る。いくつかの実施形態では、予測生成器304は、ソフトウェアビルドエラーの確率を報告コンポーネント306およびトリガコンポーネント308に送信することができる。
【0036】
[0041]報告コンポーネント306は、任意の適切な数の方法を使用して、フィードバックをユーザ、アプリケーション、またはハードウェアデバイスに提供することができる。いくつかの実施形態では、フィードバックは、変更リストがソフトウェアビルドエラーを引き起こし得る確率を含み得る。報告コンポーネント306は、特に、ディスプレイデバイスに送信されたメッセージ、IDEで生成されたダイアログボックス、電子メール通知、またはニュースフィードを通じてフィードバックを提供することができる。
【0037】
[0042]トリガコンポーネント308は、ソフトウェアビルドエラーの確率に基づいて、さらなる動作を開始または要求することができる。たとえば、トリガコンポーネント308は、報告コンポーネント306を通じてフィードバックを開発者に提供することができる。フィードバックは、ソフトウェアビルドエラーを発生させる確率が高いソフトウェアコードのさらなるレビューを要求することができる。いくつかの例では、フィードバックは、変更リストの特定の特性、および対応するソフトウェアビルドエラーを発生させる確率を識別することができる。フィードバックは、特に、変更をソースコードに提出する前にさらなるプロジェクトをビルドするために、または提出前にさらなるテストを実行するために、特定の変更リストのさらなるレビューを勧告する(recommend;リコメンドする、勧める、推奨する)ことができる。いくつかの実施形態では、トリガコンポーネント308は、ビルドプロセス中に、さらなるチェックインまたは品質論理ゲートを要求することもできる。たとえば、トリガコンポーネント308は、機械実行可能アプリケーションを形成するためにソフトウェアコードをコンパイルしてリンクする、ビルドコンポーネント310を含み得る。トリガコンポーネント308は、ソフトウェアビルドエラーを防止することができるさらなる品質論理ゲートを含むようビルドコンポーネント310に命令することができる。また、さらなる品質論理ゲートは、ソフトウェアビルドエラーの原因を決定する際に支援することができる。
【0038】
[0043]いくつかの実施形態では、トリガコンポーネント308は、ソフトウェアビルドを制御する命令をビルドコンポーネント310に提供することもできる。たとえば、トリガコンポーネント308は、ビルドコンポーネント310に、ソフトウェアビルドエラーを発生させる低リスクを共有する変更リストをグループ化することによってソフトウェアをビルドするよう命令することができる。トリガコンポーネント308は、各変更リストがソフトウェアビルドエラー引き起こす確率に基づいて、ソフトウェアビルドエラーを引き起こし得る低リスクを有する変更リストを識別することができる。いくつかの実施形態では、トリガコンポーネント308は、ビルドコンポーネント310に、低リスク変更リストをビルドする前に高リスク変更リストをビルドするよう命令することもできる。また、トリガコンポーネント308は、変更リストがソフトウェアビルドエラーを引き起こしそうであることを示す確率に基づいて、ソフトウェアビルドエラーを引き起こす高リスクを有する変更リストを識別することができる。たとえば、トリガコンポーネント308は高リスク変更リストを複数のコンピューティングシステムに送信することができ、高リスクの変更セットが並列にビルドされることを可能にする。トリガコンポーネント308は、高リスク変更リストが並列にビルドされると、高リスク変更リストに関するより高速なフィードバックを報告コンポーネント306に提供することができる。
【0039】
[0044]いくつかの実施形態では、ビルドコンポーネント310がソフトウェアビルドエラーを返さない場合、トリガコンポーネント308は変更リストをアップデートモジュール312に送信することもできる。アップデートモジュール122は、変更リストに関する履歴データ、および変更リストに基づくソフトウェアビルドの成功または失敗を格納することができる。いくつかの実施形態では、トリガコンポーネント308は、単一の変更リストがソフトウェアコードに行われた変更を組み込むことを示す単一の変更リストを受信することができる。トリガコンポーネント308は、ビルドが成功または失敗すると、ビルドの結果をアップデートモジュール122に送信することができる。次いで、アップデートモジュール122は、変更リストがソフトウェアビルドエラーを引き起こしたかどうかを反映するために、履歴データをアップデートすることができる。他の実施形態では、ビルドコンポーネント310がソフトウェアビルドエラーを返すと、トリガコンポーネント308は、変更リストをビルドブレークモジュール122に送信することができる。ビルドブレークモジュール122は、ソフトウェアビルドエラー引き起こした変更リストを識別して、開発者にフィードバックを提供することができる。ビルドブレークモジュール122は、以下で
図4に関連してより詳細に説明する。
【0040】
[0045]
図3のブロック図は、予測分析モジュール120は
図3に示されるすべてのコンポーネントを含むべきであることを示すことを意図するものではないことが理解されるべきである。むしろ、予測分析モジュール120は、より少数の、または
図3に示されていないさらなるコンポーネントを含むことができる。たとえば、予測分析モジュール120は、ビルドコンポーネント310を含まなくてもよい。むしろ、ビルドコンポーネント310の機能は、プロセッサ、または他の任意の適切なハードウェアデバイスによって実装され得る。
【0041】
[0046]
図4は、ソフトウェアビルドエラーを分析するために使用されるビルドブレークモジュールの例を示すブロック図である。ビルドブレークモジュール122は、
図1のコンピューティングシステム100などのコンピューティングシステムに実装され得る。いくつかの実施形態では、ビルドブレークモジュール122は、フィルタコンポーネント402、予測コンポーネント404、検証コンポーネント406、報告コンポーネント408、およびバージョン制御コンポーネント410を含むことができる。ビルドブレークモジュール122のコンポーネントは、ソフトウェアビルドエラーを分析することができる。
【0042】
[0047]ビルドブレークモジュール122は、ソフトウェアコードへの任意の適切な数の変更、およびビルドコンポーネントによって生成されるビルドログを受け入れることができる。ビルドログは、ビルドプロセス中に生成された情報を含むことができる。たとえば、ビルドログは、ソフトウェアビルドエラーを生成しなかったソフトウェアコードの特定の部分を示す情報を含むことができる。いくつかの実施形態では、フィルタコンポーネント402は、ソフトウェアビルドエラーの原因ではないと知られているソフトウェアコードへのあらゆる変更を除外することができる。たとえば、フィルタコンポーネント402は、ソフトウェアビルドエラーをもたらさなかった以前のビルドに含まれるあらゆる変更を識別することができる。他の実施形態では、フィルタコンポーネント402は、アップデートモジュール122に格納された履歴データに基づいて、動的な分析を実行することができる。フィルタコンポーネント402は、予測コンポーネント404にソフトウェアビルドエラーを引き起こした可能性がある候補変更リストのセットを送信することができる。
【0043】
[0048]予測コンポーネント404は、変更リストがソフトウェアビルドエラーを引き起こした可能性を検出することができる。
図2に関連して上述したように、ソフトウェアビルドエラーの確率は、ロジスティック回帰または線形回帰などの任意の適切なタイプの回帰を使用して計算することができる。いくつかの実施形態では、予測コンポーネント404は、各変更リストがソフトウェアビルドエラーを引き起こした確率を計算することができる。
【0044】
[0049]いくつかの実施形態では、予測コンポーネント404は、変更リスト、および各変更リストがソフトウェアビルドエラーを引き起こした確率を、検証コンポーネント406に送信することができる。検証コンポーネント406は、各変更リストでビルドを再発生させることができる。いくつかの実施形態では、検証コンポーネント406は、まずソフトウェアビルドエラーを引き起こす確率が最も高い変更リストを選択することができる。検証コンポーネントは、ソフトウェアビルドを再作成して、変更リストがソフトウェアビルドエラーを引き起こすかどうかを決定することができる。次いで、検証コンポーネント406は、ソフトウェアビルドエラーを引き起こす確率がより低い変更リストを選択することができる。他の実施形態では、検証コンポーネント406は、バイナリサーチまたはデルタデバッギングを使用して、ソフトウェアビルドエラーを引き起こす変更リストを決定することができる。検証コンポーネント406は、ソフトウェアビルドエラーを引き起こす変更リストを決定して、変更リストを報告コンポーネント408に送信することができる。報告コンポーネント408は、変更リストおよびソフトウェアビルドエラーを、特にディスプレイデバイス、IDEで生成されたダイアログボックス、電子メール通知、またはニュースフィードに送信することができる。
【0045】
[0050]また、報告コンポーネント408は、変更リストおよびソフトウェアビルドエラーを、バージョン制御コンポーネント410に送信することができる。バージョン制御コンポーネント410は、ソフトウェアビルドエラーをもたらすソフトウェアコードへのあらゆる修正を除去することができる。たとえば、バージョン制御コンポーネント410は、ソフトウェアコードがコンパイルされて、機械実行可能アプリケーションにリンクされることを防止するソフトウェアコードへのあらゆる変更を除去することができる。また、報告コンポーネント408は、変更リストおよびソフトウェアビルドエラーをアップデートモジュール122に送信することができ、それは、以下で
図5に関連してより詳細に説明する。
【0046】
[0051]
図4のブロック図は、ビルドブレークモジュール122は
図4に示されるすべてのコンポーネントを含むべきであることを示すことを意図するものではないことが理解されるべきである。むしろ、ビルドブレークモジュール122は、より少数の、または
図4に示されていないさらなるコンポーネントを含むことができる。たとえば、ビルドブレークモジュール122は、検証コンポーネント406を含まなくてもよい。むしろ、検証コンポーネント406の機能は、プロセッサ、または他の任意の適切なハードウェアデバイスによって実装され得る。
【0047】
[0052]
図5は、予測分析モジュールをアップデートするために使用されるアップデートモジュールの例を示すブロック図である。アップデートモジュール124は、
図1のコンピューティングシステム100などのコンピューティングシステムに実装され得る。いくつかの実施形態では、アップデートモジュール124は、特徴抽出コンポーネント502、履歴データベース504、およびアップデート予測モジュール506を含むことができる。
【0048】
[0053]いくつかの実施形態では、アップデートモジュール124は、変更リスト、および変更リストに関連付けられるビルド結果を検出することができる。次いで、アップデートモジュール124は、特徴抽出コンポーネント502を使用して、変更リストに関連する特性を抽出することができる。たとえば、特徴抽出コンポーネント502は、特に、ソフトウェアコードに変更を加えた開発者、変更によって影響を受けたプロジェクト、ソフトウェアコードをコンパイルするために開発者が使用したコンピューティングシステム、ソフトウェアコードへの変更をレビューした個人の数、または変更が提出された時間などの特性を抽出することができる。
【0049】
[0054]特徴抽出コンポーネント502は、変更リスト、ビルド結果、および特性を履歴データベース504に送信することができる。履歴データベース504は、変更リスト、および変更リストの特性を、ビルド結果とともに表に格納することができる。いくつかの実施形態では、履歴データベース504は、予測分析モジュール120にデータを送信することができ、予測分析モジュール120が、変更リストがソフトウェアビルドエラーを引き起こし得る可能性の正確な確率を計算することを可能にする。他の実施形態では、履歴データベース504は、変更リスト、ビルド結果、および変更リストの特性をアップデート予測モジュール506に送信することもできる。アップデート予測モジュール506は、履歴データに基づいて予測モデルをトレーニングして、予測モデルがしきい値を上回る精度を有する場合、予測モデルを予測分析モジュール120に送信することができる。
【0050】
[0055]
図5のブロック図は、アップデートモジュール124が
図5に示されるすべてのコンポーネントを含むべきであることを示すことを意図するものではないことが理解されるべきである。むしろ、アップデートモジュール124は、より少数の、または
図5に示されていないさらなるコンポーネントを含むことができる。たとえば、アップデートモジュール124は、アップデート予測モジュール506を含まなくてもよい。むしろ、アップデート予測モジュール506の機能は、プロセッサ、または他の任意の適切なハードウェアデバイスによって実装され得る。
【0051】
[0056]
図6は、ソフトウェアビルドエラーを予測する、有形のコンピュータ可読記憶媒体600を示すブロック図である。有形のコンピュータ可読記憶媒体600は、コンピュータバス604を介してプロセッサ602によってアクセスされ得る。さらに、有形のコンピュータ可読記憶媒体600は、現在の方法のステップを実行するようプロセッサ602に指示するためのコードを含み得る。
【0052】
[0057]本明細書に記載の様々なソフトウェアコンポーネントは、
図6に示されるように、有形のコンピュータ可読記憶媒体600に格納され得る。たとえば、有形のコンピュータ可読記憶媒体600は、予測分析モジュール606、ビルドブレークモジュール608、アップデートモジュール610を含むことができる。予測分析モジュール606は、ソフトウェアコードへの任意の数の変更を検出して、ソフトウェアコードがソフトウェアビルドエラーを含む可能性を予測することができる。ビルドブレークモジュール608は、ソフトウェアビルドエラーを分析して、ソフトウェアコードへの変更がビルドブレークを引き起こした可能性を決定することができる。アップデートモジュール610は、ソフトウェアコード変更、および対応するソフトウェアビルドエラーの履歴情報を格納することができる。アップデートモジュール610は、履歴情報を予測分析モジュール120に提供することができ、予測分析モジュール120が、ソフトウェアビルドエラーに関する正確な予測を計算することを可能にする。
【0053】
[0058]特定の用途に応じて、
図6に示されていない任意の数のさらなるソフトウェアコンポーネントが、有形のコンピュータ可読記憶媒体600内に含まれ得ることが理解されるべきである。主題を、構造的な特徴および/または方法に特有の言語で説明してきたが、添付の特許請求の範囲において定義される主題は、上述の特定の構造的な特徴または方法に必ずしも限定されないことが理解されるべきである。むしろ、上述の特定の構造的な特徴および方法は、特許請求の範囲を実装する例示的な形態で開示される。