(57)【要約】本開示は、コードクローンの検出技術を用いるインテリジェントコード差分処理のためのシステム及び方法に関する。大規模で複雑なソースコードの変更（例えば、複数のソースファイルに亘る関数の移動及びリネーム）は、複数のソースファイルの編集を含むことがある。それ故、開発者及び／又はコードレビューアは、既存のコードの差分ツールを使用して、大規模で複雑な変更を識別し、及びどの変更が最も重要であるかを決定することができない。コードクローン検出技術を用いて複数のソースファイルに亘る又は特定のソースファイル内の異なるタイプの変更を決定することができる。変更を、新しい、複製された、及び削除されたコードスニペット又は関数、並びに移動された、リネームされた又は修正された関数として分類することができる。複製された又は修正されたものとして分類された変更について、変更の重要度のレベルによって分類を更に行うことができる。例えば、変更は、些細、マイナー又は重要であることができる。変更の視覚化は、変更の直感的な理解を更に提供する。
2013546090.tif 000002
【特許請求の範囲】
【請求項１】
コードクローン検出を用いてインテリジェントコード差分処理を行う方法であって、
実行に応答して、動作を行わせる命令を少なくとも１つのプロセッサによって実行するステップを備え、前記動作は、
ソースコードの少なくとも２つのバージョンを受信することと、
コードクローン検出を用いて前記ソースコードの少なくとも２つのバージョンを処理することと、
少なくともコードクローン検出の出力に基づいて互いに対応する前記ソースコードの少なくとも２つのバージョンの異なる部分を決定することと、
を含むことを特徴とする方法。
【請求項２】
コードの少なくとも２つの部分を出力することを更に備え、前記コードの少なくとも２つの部分は互いに対応する前記ソースコードの少なくとも２つのバージョンの前記部分に各々対応することを特徴とする請求項１に記載の方法。
【請求項３】
前記ソースコードの少なくとも２つのバージョンは、ソースコードの第１のバージョン及びソースコードの第２のバージョンを備え、前記処理することは、第１のブランチで前記第１のバージョンを処理することと、第２のブランチで前記第２のバージョンを処理することと、を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記決定することは、類似度の所定のレベルより高い類似度のレベルを互いに有する前記ソースコードの少なくとも２つのバージョンの前記異なる部分を決定することを含むことを特徴とする請求項１に記載の方法。
【請求項５】
クライアント装置からネットワークを介してサーバに設けられた前記コードクローン検出にアクセスすることを更に含むことを特徴とする請求項１に記載の方法。
【請求項６】
コードクローン検出を用いてインテリジェントコード差分処理を行う方法であって、
少なくとも１つのコンピューティング装置によって、ソースコードの少なくとも２つのバージョン間の対応関係を示す第１の情報を受信するステップと、
コードクローン検出技術に基づいて、前記ソースコードの少なくとも２つのバージョン間の対応関係の特徴付けを決定するステップであって、前記特徴付けはセマンティック情報を含む、ステップと、
前記特徴付けを示す第２の情報を出力するステップと
を備えることを特徴とする方法。
【請求項７】
前記特徴付けを決定するステップは、新しいコードスニペット又は関数、複製されたコードスニペット又は関数、移動された関数、リネームされた関数、修正された関数、削除されたコードスニペット又は関数、又は移動及びリネームされた関数の組み合わせの少なくとも１つを決定することを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記特徴付けを決定するステップは、移動された関数を決定することを含み、前記特徴付けを決定するステップは、第１の関数が前記ソースコードの少なくとも２つのバージョンのうちの第１のバージョンから削除されたことを判定することと、前記関数が前記ソースコードの少なくとも２つのバージョンのうちの第２のバージョンに追加されたことを判定することと、を含むことを特徴とする請求項６に記載の方法。
【請求項９】
前記特徴付けの視覚化したものを生成するステップを更に備えることを特徴とする請求項６に記載の方法。
【請求項１０】
前記視覚化したものを生成するステップは、１つ以上のカラーでカラーコード化された前記ソースコードの少なくとも２つのバージョンの部分を生成することを含み、前記１つ以上のカラーは、１つ以上の特徴付けに関連付けられていることを特徴とする請求項９に記載の方法。
【請求項１１】
前記視覚化したものを生成するステップは、１つ以上の異なる特徴付けを表す１つ以上のコンポーネントを含む図を生成することを含むことを特徴とする請求項９に記載の方法。
【請求項１２】
コードクローン検出技術を用いるインテリジェントコード差分処理システムであって、
ソースコードの少なくとも２つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成するように構成されたクローン検出コンポーネントと、
前記ソースコードの少なくとも２つのバージョン間の前記コンテンツ変更の前記タイプと関連付けられた重要度のレベルを決定し、前記重要度のレベルを示す情報を出力するように構成された重要度エンジンと
を備えることを特徴とするシステム。
【請求項１３】
前記重要度のレベルは、前記ソースコードの少なくとも２つのバージョン間の前記コンテンツ変更の前記タイプがフォーマットの変更、字句レベルの変更又は論理的変更であるか否かに少なくとも基づいていることを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記フォーマットの変更は重要度の第１のレベルに対応し、前記字句の変更は重要度の第２のレベルに対応し、前記論理的変更は重要度の第３のレベルに対応し、前記重要度の第３のレベルは前記重要度の第２のレベルより大であり、前記重要度の第２のレベルは前記重要度の第１のレベルより大であることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記ソースコードの少なくとも２つのバージョン間の前記コンテンツ変更の前記タイプの特徴付けを決定するように構成された特徴付けエンジンを更に備え、前記特徴付けはセマンティック情報を含むことを特徴とする請求項１２に記載のシステム。
【請求項１６】
前記重要度エンジンは、前記特徴付けに少なくとも基づいて前記重要度のレベルを決定するように更に構成されていることを特徴とする請求項１５に記載のシステム。
【請求項１７】
前記重要度エンジンは、前記特徴付けに値を割り当てるように更に構成されていることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記値はパーセンテージであることを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記特徴付けは、新しいコードスニペット又は関数、複製されたコードスニペット又は関数、移動された関数、リネームされた関数、修正された関数、削除されたコードスニペット又は関数、又は移動及びリネームされた関数の組み合わせの少なくとも１つであることを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記重要度のレベルを示す情報の視覚化したものを生成し、及び出力するように構成された視覚化エンジンを更に含むことを特徴とする請求項１２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、セマンティック情報をインテリジェントに生成し、及び出力するコード差分処理システムに関する。
【背景技術】
【０００２】
コードレビューの共通のタスクは、ソースコードの以前のバージョンとソースコードの現在のバージョンの間の変更を解明し、及び理解できるようにすることである。従来のコードの差分処理（即ち、ドフィング）システムは、単に、ソースコードにおける又はソースコードのバージョン間の変更を識別する。当該システムは、一般的には、１つのソースファイルに追加された、及び／又は削除されたライン（行）がどこにあるかなどの基本情報を提供する。従来の差分システムの結果をレビューするコードレビューアは、ファイルに対する変更の性質のどれに焦点を当てるかの直感的又は他の記述的な情報、例えば、セマンティック又は字句の変更が発生しているかどうかについての情報を持たない。
【０００３】
ソフトウェア開発は、一般的に、同時に複数のソフトウェア開発者を採用して共同でソースコードを開発又は修正する。そのような開発を容易にするために、同じソースコード、又はソースコードベース、例えば、ソースコードを含むファイルのグループが別の開発者によって修正されることが度々ある。また、ある場合には、一人の開発者がソースコード内のバグを修正してもよく、別の開発者が異なる複数のファイル内の又は複数のファイルに亘ってソースコードのラインを移動させることによって同じソースコードを同時に修正してもよい。更に、異なる開発者によって２つ以上の異なるブランチにおける同時処理のために同じソースコードの異なるバージョンが生成されても良い。上記のアプローチは、各々、同じコードの異なるバージョンを生成する。よって、コードのバージョンが非常に類似していても良く、それ故、ソースコードのバージョン間の変更を理解するタスクは困難であり得る。
【０００４】
上述の差分システムは、上記したように開発者に限られた量の支援しか提供しないが、それらは特に有益ではない。今日のコード差分処理システムの上述した欠点は、単に従来システムのいくつかの問題点の概略を提供することを意図しており、網羅的なものであることを意図するものではない。従来システムの他の問題点及び本明細書に記載の種々の非限定的な実施形態の対応する利点は、以下の説明を検討すれば、より明らかになる。
【発明の概要】
【０００５】
簡単な要約は、発明の詳細な説明及び添付図面に従う例示的で非限定的な実施形態の様々な態様の基本的な又は一般的な理解を助けるために本明細書で提供される。しかしながら、この要約は広範囲又は網羅的な概要として意図されていない。代わりに、この要約の唯一の目的は、以下の様々な実施形態の詳細な説明の前置きとして簡略化した形で、ある例示的で非限定的な実施形態に関連したいくつかの概念を提示することである。
【０００６】
本明細書で提供されるような様々な実施形態は、コードクローン検出技術を採用可能な統合開発環境（ＩＤＥ）を対象とする。また、様々な実施形態は、コードクローン検出方法を用いるシステム及び技術を対象とする。コードレビューアに出力されるセマンティック情報を生成する予備段階としてコードクローン検出技術が使用されうる。本明細書に記載され差分技術の恩恵を受けることができる他の環境及びコンテキストも考えられる。
【０００７】
様々な実施形態は、コードのバージョン間の変更に関するセマンティック情報を生成するコードクローン検出技術を採用する。セマンティック情報は、バージョン間の変更の特徴付けになりうる。特徴付けは、特に、コードレビューアに出力されうるものであり、それによって一般的にソフトウェア開発、特にコードレビュー処理を手助けする。ある実施形態では、開発者自身によって行われた変更をレビューするために開発者に情報を出力することができ、よって、本明細書に記載された実施形態は開発者によって以前に入力された変更の自己レビュー及び／又はサードパーティによって入力されて開発者によって単にレビューされた変更のレビューの助けとすることができる。
【０００８】
ある実施形態において、バージョン間の変更に関する情報を表示するためにアーキテクチャ図又はカラーコード化情報等の視覚化情報が生成されうる。視覚化情報はその変更の理解を視覚的に助けるためにコードレビューアに出力される。
【０００９】
更に、本明細書で説明される他のシステム及び方法は、ある実施形態においてクローン検出コア及び重要度エンジンを含む。クローン検出コンポーネント、すなわちコアは、ソースコードの少なくとも２つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成するように構成される。重要度エンジンは、コンテンツ変更のタイプに関連付けられた重要度のレベルを判定し、及び重要度のレベルを示す情報を出力するように構成される。重要度のレベルは、ある実施形態において変更の特徴付けに関連する。他の実施形態では、重要度のレベルは変更のタイプ、例えば、フォーマットの字句的又は論理的変更に関連する。重要度のレベルは、値、例えば、整数、分数、パーセンテージ等として、又は視覚化、例えば、カラーコーディングとして表されうる。これら及び他の実施態様は、以下でより詳細に説明される。
【図面の簡単な説明】
【００１０】
種々の非限定的な実施形態を、添付図面を参照して説明する。
【図１】１つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示すブロック図である。
【図２】１つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示す別のブロック図である。
【図３】１つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示す別のブロック図である。
【図４】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示すフロー図である。
【図５】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。
【図６】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。
【図７】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。
【図８】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示すブロック図である。
【図９】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。
【図１０】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。
【図１１】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。
【図１２】コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。
【図１３】コードクローン検出技術を用いるインテリジェントコード差分処理を実施するシステムアーキテクチャの非限定的な実施例を示すブロック図である。
【図１４】本明細書に説明された様々な実施形態を実施することができる非限定的なネットワーク環境を表すブロック図である。
【図１５】本明細書に説明された様々な実施形態の１つ以上の態様を実施することができる非限定的なコンピューティングシステム又はオペレーティングシステム環境を表すブロック図である。
【発明を実施するための形態】
【００１１】
概要
前置きとして述べると、ソフトウェア開発者は、プログラミングの効率化のために、プログラミングプロジェクト内の多数の場所にソースコードのセクションを複製することが多い。ある程度の修正又は適応の有無にかかわらず、ソースコードの一部を再利用することは「コードクローニング」と呼ばれ、正確性の程度を変化させることにより互いに一致又は対応するコードの結果としての部分は「コードクローン」又は単に「クローン」と呼ばれる。また、ある実施形態において、特定の機能性、コンポーネント又はアプリケーションを構築するために使用されるソースコードの１つ以上のファイルのグループは、ファイル内、又はファイル間においてある程度の修正の有無にかかわらず再利用される。１つ以上のファイルのグループは、「コードベース」と呼ばれる。用語「コード」は一貫性を保つために本明細書で使用されているが、その用語は、適用可能な場合には「コードベース」に適用できることが理解されるべきである。
【００１２】
コードクローンの検出技術は、ソースコード内の又はソースコードの各ファイルに亘ってコードクローンを識別し、及び解析する問題に対処する。従来のコードクローン検出システムは、ソースコードを受信し、ラインをトークンに分割して非本質的な差分を削除するためにソースコードのテキストを前処理し、類似性のために残りのコードを解析する。
【００１３】
コード差分処理システムは通常、２つのソースコードファイル間の差分情報を生成する。例えば、２つのソースコードファイルの差分が出力されうる。しかしながら、当該システムは、通常、追加又は削除されたラインを記述する情報等の基本情報のみを出力する。
【００１４】
本明細書で提供される様々な実施形態は、コードクローン検出技術を使用可能な統合開発環境（ＩＤＥ）を対象とする。また、様々な実施形態は、コードクローン検出方法を用いるシステム及び技術を対象とする。コードレビューアに出力されるセマンティック情報を生成する予備段階としてコードクローン検出技術が使用されうる。
【００１５】
一実施形態では、コードクローン検出技術を用いるインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも２つのバージョンを受信することと、コードクローン検出技術を用いてソースコードのバージョンを処理することを含む。コードクローン検出技術に基づいて、互いに対応するバージョンの異なる部分について判定が行われうる。
【００１６】
本明細書で説明されたシステム及び方法は、コードのバージョン間の変更についてセマンティック情報を生成するためにコードクローン検出技術を使用する。セマンティック情報は、バージョン間の変更の特徴付けである。特徴付けは、コードレビューアに出力され、それにより、一般的にソフトウェア開発、特に、コードレビュー処理を大いに助ける。
【００１７】
一実施形態では、コードクローン検出技術を用いてインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも２つのバージョン間の対応関係を示す情報を受信することを含む。バージョン間の対応関係の特徴付けが決定される。特徴付けは、バージョン間のセマンティック差異を示すものであり、その対応関係に基づいている。特徴付けを示す情報が出力される。ある実施形態では、その情報がコードレビューアによってアクセスされ得るソフトウェア開発ステーションに出力される。
【００１８】
ある実施形態においては、システム及び方法はまた、バージョン間の変更についての情報を表示するためにアーキテクチャ図又はカラーコード化情報等の視覚化情報を生成する。視覚化情報はその変更の理解を視覚的に助けるためにコードレビューアに出力される。
【００１９】
更に、本明細書に説明された他のシステム及び方法は、コードのバージョン間の１つ以上の変更の重要度のレベルを示す情報を生成する。重要度のレベルは、ある実施形態において変更の特徴付けに関連する。他の実施形態では、重要度のレベルは、変更のタイプ（例えば、フォーマットの字句的又は論理的変更）に関連する。重要度のレベルは、値（例えば、整数、分数、パーセンテージ）として、又は視覚化したもの（例えば、カラーコード化）として表されうる。
【００２０】
一実施形態では、コードクローン検出技術を用いてインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも２つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成することを含む。コンテンツ変更のタイプに関連付けられた重要度のレベルが判定される。重要度のレベルを示す情報が出力される。ある実施形態では、変更の重要度のレベルの視覚化したものが出力される。コードレビューアによってアクセス可能なソフトウェア開発ステーションにその出力が提供されうる。
【００２１】
本明細書においては、インテリジェントコード差分処理を実現するための実施形態の概要が上記したように提示された。以下に続くことについてのロードマップとしては、インテリジェントコード差分処理のための様々な非限定的な実施形態及び特徴の例がより詳細に説明される。そして、ある非限定的な実施及び例が追加の例示のために提供され、続いて、そのような実施形態及び／又は特徴を実施することができる代表的ネットワーク及びコンピューティング環境が提供される。
【００２２】
コードクローン検出を用いたインテリジェントコード差分処理
しかしながら、本明細書で提供された実施形態は、任意の特定のデータベース又はシステムの実施に限定することを意図するものではないことが理解できる。更に、特に明記しない限り、様々な実施形態は、任意の特定のコード差分処理又はコードクローニング実施に限定することを意図するものではない。
【００２３】
ソースコードの異なるバージョン間の変更に関するセマンティック情報を生成するために使用され得るインテリジェントコード差分処理設計の１つ以上の非限定的な態様について詳細に説明することを目的として、実施され得るスキーム例に関連付けられた様々な非限定的な特徴付けが説明される。例えば、図１は、インテリジェントコード差分処理システム１０２の非限定的実施例を示すブロック図である。図１に示されたように、コード差分処理システム１０２は、１つ以上のコードベースのストレージリポジトリ１０４、１０６に関連付けられている。一実施形態では、コードベースのストレージリポジトリ１０４、１０６は１つ以上のコードベースを格納する。
【００２４】
一実施形態において、コードベースのストレージリポジトリ１０４は、ソースコードの第１のバージョンを格納し、コードベースのストレージリポジトリ１０６は、ソースコードの第２のバージョンを格納する。このように、第１のバージョンのソースコード１１０及び第２のバージョンのソースコード１２０は、コード差分処理システム１０２によってコードベースのストレージリポジトリ１０４、１０６から受信され得る。しかしながら、コードベースはそのように格納される必要はなく、例えば、コードベースの両方のバージョンを同じコードベースのストレージリポジトリ１０４又は１０６に格納することができ、また、同じコードベースのストレージリポジトリ１０４又は１０６から受信することができる。
【００２５】
また、ソースコードのバージョンの数は、ある実施形態において２つとして示されるが、ソースコードのバージョンの異なる数は、ある非限定的な実施形態において同時に、又は並行して処理されうる。例えば、ソースコードの３つ以上のバージョンが、本明細書に説明されるシステム及び方法を用いて同時に又は連続して処理されうる。
【００２６】
更に、異なるタイプの処理の結果としてソースコードのバージョンが生成されうる。例えば、ソースコードの２つのバージョンは、異なる開発者によって２つの異なるブランチで処理された同じソースコードであっても良い。別の例として、別の実施形態では、２つのバージョンのソースコードは、時点ｔに生成された第１のバージョンのソースコード、及び時点ｔ＋ｘに第１のバージョンのソースコードを修正することによって生成された第２のバージョンのソースコードとすることができる。例えば、第１のバージョンのソースコードを生成することができ、ソースコード内のバグに対処するために又は他の拡張機能を提供するために、後で、第１のバージョンを修正することに基づいて第２のバージョンのソースコードを生成することができる。
【００２７】
コード差分処理システム１０２は、コードクローン検出のためのソースコードを準備するために、第１及び第２のバージョンのソースコード１１０、１２０を事前処理するように構成されたプレプロセッサ１３０を含む。例えば、第１及び第２のバージョンのソースコード１１０、１２０は、コード差分処理システム１０２によって受信されることができ、プレプロセッサ１３０は、ラインをトークンに分割し、ソースコード１１０、１２０のバージョン間の非本質的な差異を除去することができる。
【００２８】
コード差分処理システム１０２は、コードクローン検出コア１４０を含む。コードクローン検出コア１４０は、コードクローン検出及び処理の機能を実行することができる。
【００２９】
非限定的な一実施形態では、実行されるコードクローン検出は、2010年4月1日に出願され、「コードクローン検出及び解析」と題された米国特許出願Ｎｏ．12/752,942に記載された如きであり、その出願は本明細書において全体で参考として包含されており、誤解を避けるためにも、本明細書に説明された様々な実施形態は、任意の特定のコードクローンの検出技術に限定されない。特定のコードクローン検出技術への唯一の要件は、正確なコードクローン及びニアミスのコードクローンの両方を検出することができることである。ニアミスのコードクローンは、複製後に、追加、削除、及び／又は編集のような更なる修正がソースコード上で実行されるものである。
【００３０】
別の実施形態では、コードクローン検出は、互いに類似した２つのバージョンのソースコード内の１つ以上の部分を識別することを含む。このように、コードクローン検出は、互いに同じではなく、互いに単に類似している部分を検出することができる。更に明確にするために言えば、コードクローン検出コア１４０は、様々な類似度を有するコードを識別するように構成されている。このように、コードクローン検出コア１４０は、異なるが類似しているコードのバージョン内のコードの部分、例えば、スニペット（断片）を検出することができる。
【００３１】
ある実施形態では、例えば、互いに類似した部分は、削除されたコードスニペット又は関数、新しいコードスニペット又は関数、複製されたコードスニペット又は関数、移動された関数、リネームされた関数、移動及びリネームされた関数の組み合わせ、修正された関数等で互いに関連して修正される部分である。
【００３２】
一実施形態では、コードの類似したピース（片）を識別することは、２つのコードスニペット、すなわち、各々のバージョンのコードから１つのコードスニペットを出力することを含む。しかしながら、本明細書における実施形態はそのように限定されず、コードの類似のピースを識別することは、コードの２つピース内の２つのコードスニペットの場所又は説明を示す情報を出力することを含むことができる。図１に示されたように、コードの類似のピース（又はコードの類似のピースを識別する場所又は他の情報）はコード差分処理システム１０２から出力される。一実施形態では、コードの類似したピース又はコードの類似したピースを識別する場所又はその他の情報は、ソフトウェア開発ステーション１５０に出力される。
【００３３】
一実施形態では、ソフトウェア開発ステーション１５０は、コード差分処理システム１０２に隣接して配置される。他の実施形態では、ソフトウェア開発ステーション１５０は、コード差分処理システム１０２から離れて配置される。例えば、ある場合には、コード差分処理システム１０２はサーバに関連付けられ、ソフトウェア開発ステーション１５０はネットワーク上でコード差分処理システム１０２にアクセスするクライアントマシンに関連付けられる。
【００３４】
変更されたコードのバージョンの部分にコードレビューアが集中することを可能にするように、検出されたコードスニペットは、ソフトウェア開発ステーション１５０にアクセスするコードレビューアによって解析されうる。大きなコードベース又はコードの大きなファイルでは、選択された部分に集中する能力が時間及びリソースの支出を大幅に減らすことができる。
【００３５】
ある実施形態では、コードクローン検出コア１４０は、ソースコード１１０、１２０の２つのバージョン間の類似度に対応する値を生成するようにも構成されている。その値は、整数、小数又はパーセンテージ値であっても良い。
【００３６】
図２は、インテリジェントコード差分処理システム２０２の非限定的実施例を示す他のブロック図である。図１を参照して説明されたように、コード差分処理システム２０２は、プリプロセッサ１３０及びコードクローン検出コア１４０を含む。コード差分処理システム２０２は、第１及び第２のバージョンのソースコード１１０、１２０を受信する。非限定的な一実施形態では、図２に示されたように、第１及び第２のバージョンのソースコード１１０、１２０は、コードベースのストレージリポジトリ１０４、１０６から受信される。
【００３７】
図２に示されたように、また、コード差分処理システム２０２は、ソースコード１１０、１２０の２つのバージョン間の対応関係を決定するために特徴付けエンジン２１０を含む。その対応関係は、ソースコード１１０、１２０の２つのバージョン間の変更を示し、特徴付けと関連付けられる。特徴付けは、ソースコード１１０、１２０の２つのバージョン間の変更に関するセマンティック情報を含む。
【００３８】
このように、コードクローン検出コア１４０は、ソースコードの類似した部分を識別し、及びそのような情報を特徴付けエンジン２１０に出力する。特徴付けエンジン２１０は２つのコード間の変更を表すセマンティック意味を抽出するためにその情報を抽象化する。セマンティック意味は特徴付けによって説明され、それは特徴付けエンジン２１０から出力される。
【００３９】
様々な実施形態において可能な特徴付けの多数の異なるタイプがある。例えば、ある場合には、第１及び第２のバージョンのソースコード１１０、１２０間の変更の約６つの異なる特徴付けがある。一実施形態では、異なる特徴付けは、新しいコードスニペット又は関数（例えば、新しいコードスニペット又は関数はコードの他のバージョンに関連してコードの１つのバージョンで追加される）、複製されたコードスニペット又は関数（例えば、新しいコードスニペット又は関数がコピーアンドペーストによって複製される）、削除されたコードスニペット又は関数（例えば、関数がコードの他のバージョンに関連してコードの１つのバージョンで削除される）、移動された関数（例えば、関数はコードの１つのバージョンのためのソースファイルからコードの他のバージョンのためのソースファイルに移動される）、リネームされた関数（例えば、署名がコード内で変更されるが、コンテンツは変更されない）、又は修正された関数（例えば、署名が同じであるが、コンテンツがコード内で変更された）である。様々な実施形態では、また、特徴付けは、移動及びリネームされたコードスニペット又は関数の組み合わせを有するコードスニペット又は関数を示すことができる。本明細書で使用される場合に、用語「コードスニペット」は、関数の連続したステートメントのセグメントを意味する。
【００４０】
上記の６つの特徴付けは、コード差分処理システム２０２からソフトウェア開発ステーション１５０に出力される。よって、特徴付けエンジン２１０は、第１及び第２のバージョンのソースコード１１０、１２０間で生じた変更のタイプについて、その変更をコードレビューアに単に提供し、生じた変更のタイプを評価することをコードレビューアに要求するのではなく、セマンティック情報をソフトウェア開発ステーション１５０（及びそのようなソフトウェア開発ステーション１５０にアクセスするコードレビューア）に提供することができる。よって、コードレビューの経験は、改善され、より効率的に行われる。
【００４１】
一実施形態では、図２に示されたように、コード差分処理システム２０２は、視覚化エンジン２２０も含む。視覚化エンジン２２０は、特徴付けの視覚化したものを生成する。視覚化したものは、特徴付けを記述したファイル、ソースコード１１０、１２０のバージョン間の変更又は特徴付けをグラフィカルに表示するアーキテクチャ図、及び／又はコードクローン検出コア１４０によって識別された第１及び第２のバージョンのソースコード１１０、１２０間の変更に関連付けられた関数のカラーコード化リストである。
【００４２】
特徴付け及び／又は特徴付けの視覚化を示す情報は、特徴付けエンジン２１０及び／又は視覚化エンジン２２０各々からソフトウェア開発ステーション１５０に出力される。
【００４３】
図３は、インテリジェントコード差分処理システム３０２の非限定的実施例を示す他のブロック図である。図１を参照して説明したように、コード差分処理システム３０２は、プリプロセッサ１３０及びコードクローン検出コア１４０を含む。コード差分処理システム３０２は、第１及び第２のバージョンのソースコード１１０、１２０を受信する。任意の非限定的な実施形態では、図３に示されたように、第１及び第２のバージョンのソースコード１１０、１２０は、コードベースのストレージリポジトリ１０４、１０６から受信される。
【００４４】
図２に示されたように、コード差分処理システム３０２は、特徴付けエンジン２１０を含み、ある実施形態では、更に視覚化エンジン２２０を含む。図３に示されたように、また、コード差分処理システム３０２は、ソースコード１１０、１２０の２つのバージョン間のコンテンツ変更のタイプに重要度のレベルを関連付けるように、及び／又は特徴付けエンジン２１０によって生成された特徴付けに基づくように構成された重要度エンジン３１０を含む。
【００４５】
コンテンツ変更のタイプがその変更の特徴付けである、ある非限定的な実施形態では、重要度のレベルは、関連付けられた特徴付けからマッピングされる。例えば、移動された関数は、重要度の変化の些細なレベルにマッピングされる特徴付けとすることができ、それにより、重要度の最も低いレベルが割り当てられる。別の例として、リネームされた関数を小さな変更にマッピングすることができ、それにより、適度の重要度のレベルが割り当てられる。別の例として、変更された関数を大きな変更にマッピングすることができ、それによって重要度の最大レベルが割り当てられる。前述の特性付けを参照すると、複製されたコードスニペット又は関数、移動された関数、リネームされた関数又は修正された関数の特徴付けのために重要度情報のレベルが提供されうる。
【００４６】
ある実施形態では、特徴付けに基づいて情報のレベルを生成する代わりに、又はそれに加えて、第１のバージョンのソースコード１１０から第２のバージョンのソースコード１２０へのコンテンツ変更のタイプに基づいて重要度のレベルが生成されうる。
【００４７】
例えば、一実施形態では、コンテンツ変更のタイプは、フォーマットの変更又はコメント変更である。フォーマット及びコメントの変更は、変更の小さなレベルに関連付けられ、よって、重要度の最低レベルが割り当てられうる。
【００４８】
別の実施形態では、コンテンツ変更のタイプは、字句変更（例えば、可変のリネーミング）である。字句変更は、変更の適度のレベルに関連付けられ、よって、重要度の適度なレベルが割り当てられうる。
【００４９】
別の実施形態では、コンテンツ変更のタイプは論理的変更である。論理的変更は、変更の大きなレベルに関連付けられ、よって、重要度の最高レベルが割り当てられうる。
【００５０】
ある非限定的な実施形態では、重要度のレベルは、コンテンツ変更のタイプに数値（例えば、パーセンテージ又は別のもの）を割り当てること、及び数値に応じて重要度のレベルを分類することに基づいて決定される。例えば、５％の変更の値は小さな変更を表し、それには重要度の最低のレベルが割り当てられるが、５０％（又はそれ以上）の変更の値は大きな変更であり、それには重要度の最高のレベルが割り当てられる。また、様々な実施形態では、値（例えば、上記の５％値）が、変更の重要性を伝える能力を更に高めるために他のコードメトリックと共に利用される。非限定的な一実施形態では、例えば、コードの５％が意味的に変更されたが、変更された部分は、（テスト結果に基づいた）アプリケーションのクリティカルパスを有する場合には、変更されたコードの部分の重要度を伝えるためにコードのその部分と関連付けられたコードメトリックに値を置くことによって及び／又は特定のメトリック、メトリックの値、メトリックの重要度のレベル等を選択することによって変更されたコードの実際の部分の相対的な重要度を伝えることができる。
【００５１】
重要度のレベルは、重要度エンジン３１０からソフトウェア開発ステーション１５０に出力される。一実施形態では、図３には示されていないけれども、視覚化エンジン２２０は、重要度エンジン３１０によって生成された重要度のレベルに関する情報を受信し、生成し、視覚的表現として重要度を出力する。
【００５２】
図４は、コードクローン検出技術を用いてインテリジェントコード差分処理を実行する非限定的な処理例を示すフロー図である。ステップ４００では、ソースコードの少なくとも２つのバージョンがインテリジェントコード差分処理システムで受信される。ステップ４１０では、ソースコードの２つのバージョンは、コードクローン検出技術を用いて処理され、ソースコードの類似したピースが識別される。更に明確にするために言えば、コードクローン検出技術は、様々な類似度を有するソースコードを識別するように構成される。それ故、コードクローン検出技術は、異なるが、類似しているソースコードのスニペットを検出することができる。
【００５３】
一実施形態では、ソースコードの類似の部分を識別することは、２つのソースコードスニペット、即ち、ソースコードのバージョンの各々から１つのソースコードスニペットを出力することを含む。しかしながら、本明細書の実施形態は、そのように限定されず、ソースコードの類似したピースを識別することは、ソースコードの２つのピース内の２つのソースコードスニペットの場所又は説明を示す情報を出力することを含むことができる。
【００５４】
ステップ４２０では、ソースコードスニペット（又はソースコードスニペットの場所又は説明を示す情報）がコード差分処理システムによって処理される。ソースコードの類似したピースについてのセマンティック解析は、ソースコードの２つのピース間の差分の特徴付けを決定するために行われる。
【００５５】
ステップ４２０は次のように非限定的な一実施形態でより詳細に記載されている。一実施形態では、コードクローン検出ツールは、クローンペア集合{Ｐｉ}，ｉ＝１，２，．．．，Ｎを出力し、ここで、Ｐｉ＝[ＳＡｉ，ＳＢｉ]、ＳＡｉは１つのバージョンのソースファイルからの１つのコードスニペット（又は関数）であり、ＳＢｉは別のバージョンのソースファイルの１つのコードスニペット（又は関数）である。次いで、ステップ４２０では、各クローンペアＰｉが更に解析される。
【００５６】
特に、ある場合には、ＳＡｉ及びＳＢｉが全く同じであり、同じ場所のコンテキスト（例えば、同じソースファイルに、同じ近隣の関数を有する）であるならば、このペアは無視される。
【００５７】
別の場合には、ＳＡｉ及びＳＢｉが全く同じ関数であるが、異なる場所のコンテキスト（例えば、異なるソースファイルに、又は異なる近隣の関数を有する）を有するならば、ＳＡｉ及びＳＢｉは移動された関数として特徴付けられる。
【００５８】
別の場合には、ＳＡｉ及びＳＢｉがニアミスクローン化関数であるならば、それらは次のように更に分類化される。それらの署名が異なり、同じ本体コンテンツを持っている場合には、それらはリネームされた関数として特徴付けられる。それらの本体コンテンツが異なるが、同じ署名を有する場合には、それらは修正された関数として特徴付けられる。更に、それらが異なる場所のコンテキストを有する場合には、それらは移動された関数として特徴付けられる。更に、それらが異なる本体コンテンツを有する場合には、それらは移動及び修正された関数として特徴付けられる。
【００５９】
また、ステップ４２０では、集合{Ｐｉ}のリストにないコードスニペット及び関数が更に解析されて削除及び／又は追加されたコードスニペット又は関数を得る。削除及び／又は追加されたコードスニペット又は関数は、現在のコードベースの他の場所から、又は他のコードベースから複製されるかどうか決定するために、更に１３２１３（例えば、ローカルコードベースのインデックスを有する）又は１３３４（例えば、サーバ側にコードベースのセットのインデックスを有する）に対して検索される。
【００６０】
図４に戻ると、上述したように、特徴付けは、ある実施形態では、ソースコードの２つのバージョン間の変更の複雑さのレベル及び／又はタイプに基づいている。
【００６１】
それ故、図４の処理は、変更をコードレビューアに単に提供し、生じた変更のタイプを評価することをコードレビューアに要求することとは対照的に、生じた変更のタイプについての情報を提供する。よって、コードレビューのエクスペリエンスは改善される。
【００６２】
図４には示されていないが、ある実施形態において、特徴付けは、ソースコードのバージョン間の差異を記述するファイルとして出力される。しかしながら、ファイルは、非限定的な一実施例である。
【００６３】
他の非限定的な実施形態では、例えば、特徴付け（又は特徴付けが示す変更）は視覚的に出力される。例えば、視覚化したものは、特徴付けをもたらすソースコードの２つのバージョンについてのオペレーションをグラフィカルに表現するアーキテクチャ図のものとすることができる。例えば、移動オペレーションは、興味がある関数を示し、第１のバージョンのソースコード内の関数から第２のバージョンのソースコード内の関数へ矢印を示すことによって視覚的に表現されうる。別の例として、視覚化したものは、ソースコードの２つのバージョンからのソースコードの異なるカラーコード化コードスニペット又は関数又はピースを示すカラーコード化図であっても良い。ソースコードのコードスニペット又は関数又はピースに関連付けられているカラーは異なる特徴付けに割り当てられている（例えば、赤色が移動された関数を表す一方、黄色は複製されたコードスニペット又は関数を表すことができる）。コードレビューアは、ソースコードの２つのバージョン間の変更のタイプを視覚的に識別することができる。
【００６４】
６つの異なる特徴付けが記載されているが、これらの特徴付けは、非限定的かつ単なる例示に過ぎない。他の特徴付けが可能であり、ある場合には、より少ない数（又はより多くの数）の特徴付けがシステム設計者及びコードレビューアのニーズによって決定されるように可能であり、それは随時変更される。
【００６５】
図４の処理を異なる複数の処理に分離することができ、その各々は一般にコードクローン検出技術の従来のアプローチ及び使用、及び特に、コード差分処理について新規性と独特の利点を有する。
【００６６】
例えば、図５は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ５００では、ソースコードの２つのバージョンが受信される。ステップ５１０では、ソースコードの２つのバージョンは、コードクローン検出技術を用いて処理している。ステップ５２０では、コードクローン検出技術を使用して、互いに対応するソースコードの異なる部分が判別される。非限定的な実施形態では、互いに対応するソースコードのピースは、ソースコードの同一部分又はソースコードの類似した部分である。それ故、図５の処理は、ソースコードのほぼ一致（ソースコードの単なる完全な一致だけでなく）を検出するためにコードクローン検出技術を利用する。
【００６７】
検出されたソースコードは、インテリジェントコード差分処理システムから出力され、コードレビューアによってアクセスされうる。
【００６８】
別の例として、図６は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ６００では、ソースコードの２つのバージョン間の対応関係を示す情報が受信される。ステップ６１０では、対応関係の特徴付けが決定される。非限定的な一実施形態では、対応関係は、特徴付けを決定するために抽象化されているソースコードの２つのバージョン間の実際の差異を示す情報である。例えば、非限定的な一実施形態では、対応関係は、第１のバージョンから削除されているコードスニペット又は関数と、第２のバージョンに追加されているコードスニペット又は関数とを示す情報である。これとは対照的に、特徴付けは追加又は削除されたコードスニペット又は関数の基礎となるセマンティックな意味を抽象化したものである。例えば、追加及び削除されたコードスニペット又は関数が同一のコードスニペット又は関数であるならば、その追加及び削除のセマンティックな意味は１つのバージョンから他のバージョンへの移動であると判定され、そして、特徴付けは（追加及び削除されたコンテンツが同一又はそれらと関連付けられた任意の他のセマンティック情報についての追加の情報なしに２つのバージョンに亘って生じた第１のファイルの削除及び第２のファイルの追加を単に出力することと対照的に）図４を参照して上記された移動であると判定される。
【００６９】
ステップ６２０では、特徴付けの視覚化したものが生成される。前述されたように、視覚化したものはバージョン間の変更の特徴付けを説明するファイル、バージョン間の変更をグラフィカルに表示するアーキテクチャ図及び／又はソースコードの他のバージョンに対してソースコードの１つのバージョンにおける変更を表すコードスニペット又は関数のカラーコード化リストである。
【００７０】
ステップ６３０では、特徴付けが出力される。ある実施形態では、特徴付けの識別をドライブする変更も出力される。
【００７１】
別の例として、図７は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ７００では、ソースコードのバージョン間のコンテンツ変更のタイプを示す情報が生成される。コンテンツ変更のタイプは、別の非限定的な実施形態では、フォーマット変更又はコメント変更、字句の変更（例えば、様々なリネーミング）又は論理的変更とすることができる。更に、ある非限定的な実施形態では、コンテンツ変更のタイプは、ソースコードのバージョン間の差異の特徴付けである。それ故、コンテンツ変更のタイプは、例えば、図４〜図６を参照して上述された、移動された関数、削除されたコードスニペット又は関数、又は任意数の他のタイプのコードスニペット及び／又は関数である。
【００７２】
ステップ７１０では、コンテンツ変更のタイプに関連付けられた重要度のレベルが決定される。ある非限定的な実施形態では、コンテンツ変更のタイプはその変更の特徴付けであり、重要度のレベルは、関連付けられた特徴付けからマッピングされる。例えば、移動された関数は些細な変更にマッピングされた特徴付けとすることができ、それにより、重要度の最も低いレベルが割り当てられる。別の例として、リネームされた関数を小さな（マイナーな）変更にマッピングすることができ、それにより、重要度の適度なレベルが割り当てられる。別の例として、修正された関数を大きな変更にマッピングすることができ、それにより重要度の最大レベルが割り当てられる。前述の特徴付けを参照すると、重要度情報のレベルは、複製されたコードスニペット又は関数、移動された関数、リネームされた関数又は修正された関数の特徴付けのために提供され得る。
【００７３】
ある非限定的な実施形態では、重要度のレベルは、コンテンツ変更のタイプに数値（例えば、パーセンテージ又は別のもの）を割り当てること、及びその数値に応じて重要度のレベルを分類することに基づいて決定されうる。例えば、５％の変更の値は些細な変更を表し、それには重要度の最小レベルが割り当てられる一方、５０％（又はそれ以上）の変更の値は大きな変更を表し、それには重要度の最大レベルが割り当てられる。
【００７４】
ステップ７２０では、重要度のレベルを示す情報が出力される。図４及び図６について説明されたように、重要度のレベルを視覚的に表現できることができる。
【００７５】
図８〜図１２を参照すると、インテリジェントコード差分処理のためのスクリーンショット例を示すブロック図が示されている。図８は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示すブロック図である。図８に示すように、開発者はソースコードの複数のファイルに変更を行った。ファイルは以前のバージョンと比較され、その変更を示す情報が編集されたファイル毎にスクリーンショットに示される。加えて、以前のバージョンに対して追加された新しいファイルは追加されたものとして示される。
【００７６】
図９は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。本明細書に説明された実施形態を有するコード差分処理システムは、図９に示されたように、ソースコードのバージョンに対する関数レベル、直感的変更を示す情報を出力する。変更は本明細書に前述された６つの特徴付けのうちの１つとしてラベル付けされる。本明細書に説明されたように、様々な実施形態では、また、変更の量をコード差分処理システムによって示すことができる。例えば、バージョン間の変更のパーセンテージ（又はバージョン間の類似度のパーセンテージ）がある実施形態において特徴付けと共に示されている。
【００７７】
図１０はコードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。コード差分処理システムは、図１０に示された如く、NewFile.csの選択のようにファイルを選択する入力を受信することができる。バージョン間の詳細な変更が関数、直感的レベルで記述されている。例えば、ファイルNewFile.cs内の関数NewFile::CopiedMethodl等の複製されたコードスニペット又は関数のために、コード差分処理システムは、署名（例えば、関数定義）変更及びコンテンツ（例えば、本体）変更（９１％類似）を含む複製後の詳細な変更を示している。
【００７８】
アイコン（又は興味があるファイル）をクリックすることによって、図１１に示されたように、詳細な変更が、直感的で、セマンティックな方法で出力されうる。この実施例では、変更はバグ修正である。
【００７９】
図１２は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。図１２は、関数（図１０に示されたファイルNewFile.cs内のNewFile::CopiedMethodl）とその複製バージョンと間の詳細な変更を示している。
【００８０】
図１３は、コードクローン検出技術を用いてインテリジェントコード差分処理を実施するシステムアーキテクチャの非限定的な実施例を示すブロック図である。図１３に示されるように、システムは、コードクローン解析コア１３１０、統合開発環境（ＩＤＥ）１３２０及びアプリケーションサーバ１３５０を含む。
【００８１】
コードクローン解析コア１３１０は、コードクローン解析コア１３１０によって受信されたコードに関連付けられたインデックス付けと構文解析を各々実行するインデクサ１３１２とパーサ１３１４とを含む。パーサインターフェイス１３１５が備えられている。コードクローン解析コア１３１０は、コードの類似したピースを検出するために構成されたコードクローン検出部１３１６を含む。非限定的な一実施形態では、前述したように、コードクローン検出部１３１６は、「コードクローン検出及び解析」と題された2010年4月1日に出願された米国特許出願Ｎｏ．12/752,942を参照して説明したコードクローン検出及び処理を行うように構成されている。コードクローン検出機能に加えて、セマンティックレベルでコードの異なるバージョン間の変更を特徴付けるように、及び／又は図２の特徴付けエンジン２１０及び／又は図３の重要度エンジン３１０を参照して本明細書にて説明された任意の機能を一般に実行するように、コードクローン検出部１３１６を構成することができる。
【００８２】
また、コードクローン解析コア１３１０は、図２の視覚化エンジン２２０を参照して前述されたように、特徴付け及び／又は重要度のレベルの視覚化のために情報を生成するように構成された差分ビジュアライザ１３１８を含む。
【００８３】
ＩＤＥ１３２０は、拡張コードレビューユーザインターフェース（ＵＩ）１３２２と、解析ドライバ１３２６及びコードクローン解析コア１３２８を含むコードクローンプロバイダ１３２４とを含む。言語サービスコンポーネント１３４０及び他のデータプロバイダから情報を受け取るための機能は符号１３４２に設けられている。
【００８４】
アプリケーションサーバ１３５０を見ると、上述したようにある実施形態では、システムは、アプリケーションサーバ１３５０の一部としてコードクローン解析サービス１３３０を含む。コードクローン解析サービス１３３０は、インテリジェントコード差分処理を提供するためにサーバにコードクローン解析コア１３３２、コードクローン検索エンジン１３３４、及びコードクローン検出エンジン１３３６を含む。アプリケーションサーバ１３５０は、既存のサービス１３５２及びタスクマネージャ１３５４も含むことができる。
【００８５】
アプリケーションサーバ１３５０がコードクローン解析サービス１３３０を含む場合には、大規模なコードベース（例えば、複数のコードベースから数十〜何億ラインのコード）のインデックス付けを処理することができ、ユーザはより大きな範囲にコードクローンを検索することができる。これは、現在のソリューション内では新しいかもしれないが、他のソリューション内のソースコードの複製であるコードスニペット又は関数を決定する可能性を可能にする。これは、開発者／コードレビューアがコード変更のコンテキストをより良く理解することを容易にする。コードクローン解析サービス１３３０なしに、インテリジェントコード差分処理はコードクローン解析コア１３１０及びＩＤＥ１３２０を利用してクライアントで行われ、比較的小さなコードベースを処理することができるが、そのようなソリューションは、特に、軽量かつ便利である。
【００８６】
例示的なネットワーク環境と分散環境
この分野の当業者は、本明細書に記載のインテリジェントコード差分処理システム及び方法の様々な実施形態がコンピュータネットワークの一部として又は分散コンピューティング環境において配置され得る任意のコンピュータ又は他のクライアント又はサーバ装置に関連して実施され、また、任意の種類のデータストアに接続され得ることを理解することができる。この点で、本明細書に記載された様々な実施形態は、任意の数のメモリ又はストレージユニット、及び任意の数のストレージユニットに亘って生じる任意の数のアプリケーション及び処理を有する任意のコンピュータシステム又は環境で実施することができる。これは、限定されないが、リモート又はローカルストレージ装置を有する、ネットワーク環境又は分散コンピューティング環境に配置されたサーバコンピュータ及びクライアントコンピュータを有する環境を含む。
【００８７】
分散コンピューティングは、コンピューティング装置とシステムとの間の通信交換によってコンピュータリソース及びサービスの共有を提供する。これらのリソース及びサービスは、ファイル等のオブジェクトの情報、キャッシュストレージ及びディスクストレージの交換を含む。また、これらのリソース及びサービスは、負荷バランシングのための複数の処理ユニットに亘る処理能力の共有、リソースの拡大、処理の専門化等を含む。分散コンピューティングは、ネットワーク接続を利用して、クライアントが企業全体の利益のためにクライアントの集合的な力を活用することを可能にする。この点に関して、様々な装置は、本開示の様々な実施形態について記載された機構に加わることができるアプリケーション、オブジェクト、又はリソースを有しても良い。
【００８８】
図１４は、ネットワーク化又は分散コンピューティング環境例の概略図を提供する。分散コンピューティング環境は、コンピューティングオブジェクト１４１０、１４１２等、コンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等を備え、それらはアプリケーション１４３０、１４３２、１４３４、１４３６、１４３８によって表されるようにプログラム、メソッド、データストア、プログラマブルロジック等を含むことができる。コンピューティングオブジェクト１４１０、１４１２等、及びコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等が、ＰＤＡ、オーディオ／ビデオ機器、携帯電話器、ＭＰ３プレーヤ、パーソナルコンピュータ、ラップトップ等の異なる装置を含み得ることを理解することができる。
【００８９】
各コンピューティングオブジェクト１４１０、１４１２等、及びコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等は、１つ以上の他のコンピューティングオブジェクト１４１０、１４１２等、及びコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８と通信ネットワーク１４４０を介して直接又は間接的に通信することができる。図１４に単一の要素として示されているにも関わらず、通信ネットワーク１４４０が図１４のシステムにサービスを提供する他のコンピューティングオブジェクト及びコンピューティング装置を含んでも良く、及び／又は示されていない複数の相互接続されたネットワークを表しても良い。また、各コンピューティングオブジェクト１４１０、１４１２等、又はコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等は、通信又は本開示の様々な実施形態の実施に適した、ＡＰＩ、又は他のオブジェクト、ソフトウェア、フレームウェア、及び／又はハードウェアを利用することができるアプリケーション１４３０、１４３２、１４３４、１４３６、１４３８等のアプリケーションを含めることができる。
【００９０】
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、及びネットワーク構成が存在する。例えば、コンピューティングシステムは、有線又は無線システムによって、ローカルネットワーク又は広分散ネットワークによって、互いに接続され得る。様々な実施形態で説明したようにコード差分処理システムに起こり得る例示的な通信のために任意のネットワークインフラストラクチャを用いることができるけれども、現在、多くのネットワークは、広分散コンピューティングのためのインフラストラクチャを提供し、多くの異なるネットワークを包含するインターネットに接続されている。
【００９１】
よって、クライアント／サーバ、ピアツーピア、又はハイブリッドアーキテクチャ等のネットワークトポロジ及びネットワークインフラストラクチャのホストを利用することができる。「クライアント」は、それが関連していない別のクラス又はグループのサービスを使用するクラス又はグループのメンバである。クライアントは、別のプログラム又は処理によって提供されるサービスを要求する処理、すなわち、おおよそ命令又はタスクのセットであり得る。クライアント処理は、別のプログラム又はサービス自体についての作業の詳細を「知る」必要なく、要求されたサービスを利用する。
【００９２】
クライアント／サーバアーキテクチャ、特に、ネットワーク化されたシステムでは、クライアントは通常、別のコンピュータ、例えばサーバによって提供される共有ネットワークリソースにアクセスするコンピュータである。図１４の例示では、非限定的な例として、コンピューティングオブジェクト又は装置４２０、１４２２、１４２４、１４２６、１４２８等をクライアントとして考えることができ、コンピューティングオブジェクト１４１０、１４１２等はサーバとして考えることができる。そして、サーバとして動作するコンピューティングオブジェクト１４１０、１４１２等はクライアントコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等からデータを受信し、データを保存し、データを処理し、クライアントコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等にデータを送信するように、データサービスを提供する。しかしながら、任意のコンピュータは、状況に応じて、クライアント、サーバ又はその両方として考慮され得る。これらのコンピューティング装置のいずれかがデータを処理し、又は１つ以上の実施形態に関して本明細書に記載される如き差分技術に関係し得るトランザクションサービス又はタスクを要求しても良い。
【００９３】
サーバは、通常、インターネット又は無線ネットワークインフラストラクチャ等のリモート又はローカルネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアント処理は、第１のコンピュータシステムでアクティブであっても良いし、サーバ処理は、通信媒体を介して互いに通信する第２のコンピュータシステムでアクティブであっても良いし、それにより、分散機能を提供し、複数のクライアントがサーバの情報収集を活用することができる。本明細書に記載された技術に従って利用された任意のソフトウェアオブジェクトは、スタンドアロンに設けられ、又は複数のコンピューティング装置又はオブジェクトに亘って分散することができる。
【００９４】
通信ネットワーク１４４０又はバスが例えば、インターネットであるネットワーク環境において、コンピューティングオブジェクト１４１０、１４１２等は、他のコンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等がハイパーテキスト転送プロトコル（ＨＴＴＰ）のような多数の既知のプロトコルのいずれかを介して通信するＷｅｂサーバであることができる。また、サーバとして動作するコンピューティングオブジェクト１４１０、１４１２等は、分散コンピューティング環境の特性とすることができるように、クライアント、例えば、コンピューティングオブジェクト又は装置１４２０、１４２２、１４２４、１４２６、１４２８等として機能することができる。
【００９５】
コンピューティング装置例
上述したように、都合の良いことに本明細書に記載された技術は、コード差分処理を行うことが望ましい任意の装置に適用可能である。よって、全ての種類のハンドヘルド、ポータブル及び他のコンピューティング装置とコンピューティングオブジェクトとが様々な実施形態に関連して使用のために考えられていることが理解され得る。従って、図１５に記載された以下の汎用リモートコンピュータはコンピューティング装置の一例である。
【００９６】
必須ではないが、実施形態は、装置又はオブジェクトに関するサービスの開発者が使用するために、オペレーティングシステムを介して部分的に実施しても良く、及び／又は本明細書に記載された様々な実施形態の１つ以上の機能的態様を実行するために動作するアプリケーションソフトウェア内に含まれても良い。ソフトウェアは、例えば、クライアントワークステーション、サーバ又は他の装置等の１つ以上のコンピュータによって実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的なコンテキストに記載されても良い。この分野の当業者は、コンピュータシステムがデータを通信するために使用され得る様々な構成及びプロトコルを有し、それにより、特定の構成又はプロトコルに限定されると考えるべきではないことを理解され得る。
【００９７】
図１５は、コンピューティングシステム環境１５００を例示している。コンピューティングシステム環境１５００では、本明細書に記載の実施形態の１つ以上の態様を実施することができ、上記の記載で明確にしたけれども、コンピューティングシステム環境１５００は適切なコンピューティング環境の一例に過ぎず、使用又は機能の範囲に関するいかなる限定も示唆する意図はない。また、コンピューティングシステム環境１５００は、例示的なコンピューティングシステム環境１５００に示されたコンポーネントのいずれか１つ又は組合せに関する依存性又は要件を有するものと解釈されるべきでない。
【００９８】
図１５を参照すると、１つ以上の実施形態を実施するためのリモート装置例は、コンピュータ１５１０の形で汎用コンピューティング装置を含む。コンピュータ１５１０のコンポーネントは、限定されないが、処理ユニット１５２０、システムメモリ１５３０、及びシステムメモリを含む様々なシステムコンポーネントを処理ユニット１５２０と接続するシステムバス１５２２を含む。
【００９９】
コンピュータ１５１０は、通常、様々なコンピュータ可読媒体を含み、コンピュータ１５１０によってアクセス可能な任意の利用可能な媒体でありうる。システムメモリ１５３０は、ＲＯＭ及び／又はＲＡＭ等の揮発性及び／又は不揮発性メモリの形でコンピュータ記憶媒体を含むことができる。また、コンピュータ可読媒体は、限定されないが、磁気記憶装置（例えば、ハードディスク、フロッピー（登録商標）ディスク、磁気ストリップ）、光ディスク（例えば、ＣＤ、ＤＶＤ）、スマートカード、及び／又は、フラッシュメモリ装置（例えば、カード、スティック、キードライブ）を含むことができる。例えば、限定されないが、システムメモリ１５３０は、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータも含むことができる。
【０１００】
ユーザは、入力装置１５４０を介してコンピュータ１５１０にコマンド及び情報を入力することができる。モニタ又は他のタイプのディスプレイ装置も、出力インターフェース１５５０等のインターフェースを介してシステムバス１５２２に接続されている。モニタに加えて、また、コンピュータは、出力インターフェース１５５０を介して接続され得るスピーカ及びプリンタ等の周辺出力装置を含むことができる。
【０１０１】
コンピュータ１５１０は、リモートコンピュータ１５７０等の１つ以上のリモートコンピュータへの論理接続部を用いてネットワーク又は分散環境で動作しても良い。リモートコンピュータ１５７０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス又は他の共通ネットワークノード、又は他の任意のリモートメディア消費又は送信装置であっても良く、コンピュータ１５１０に関して上述された要素のいずれか又は全てを含んでいても良い。図１５に示された論理接続部は、ＬＡＮ又はＷＡＮ等のネットワーク１５７２を含むが、他のネットワーク／バスも含むことができる。そのようなネットワーキング環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット及びインターネットにおいて一般的である。
【０１０２】
上述されたように、例示的な実施形態は様々なコンピューティング装置及びネットワークアーキテクチャに関連して説明してきたが、基本的な概念は、任意のネットワークシステム及び任意のコンピューティング装置又はシステムに適用され得る。
【０１０３】
また、同一又は類似の機能、例えば、適切なＡＰＩ（アプリケーションプログラミングインターフェース）、ツールキット、ドライバソースコード、オペレーティングシステム、コントロール、スタンドアロン又はダウンロード可能なソフトウェアオブジェクト等を実装するための複数の方法があり、それはアプリケーション及びサービスが本明細書で提供された技術を活用することを可能にする。よって、本明細書の実施形態は、ＡＰＩ（又は他のソフトウェアオブジェクト）の観点から、また、本明細書に記載された差分技術の１つ以上の態様を実施するソフトウェア又はハードウェアオブジェクトから考えられる。従って、本明細書に記載の様々な実施形態は、ハードウェアで全体的に、ハードウェアで部分的に、並びにソフトウェアで部分的に、及びソフトウェアにある態様を有することができる。
【０１０４】
単語は「例示的」は、例、事例又は例示として提供することを意味するために本明細書で使用される。誤解を避けるために、本明細書に開示された要件は、そのような例に限定されるものではない。更に、「例示的」として本明細書に開示された任意の態様又は設計は、必ずしも他の態様又は設計よりも好ましい又は有利であると解釈されるべきでなく、この分野の当業者に知られている同等の例示的な構造及び技術を排除することを意味しない。更に、用語「含む（include)」、「有する」、「含む(contain)」及び他の類似の単語が使用され、誤解を避けるために、そのような用語は、任意の追加又は他の要素を排除することなく、オープントランジション（開放移行）単語として用語「備える」と同様に包括的であることを意図している。
【０１０５】
上述されたように、本明細書に記載された様々な技術は、ハードウェア又はソフトウェア、適切な場合に両方を組み合わせと関連して実施されても良い。本明細書で使用されたように、用語「コンポーネント」、「システム」等は、同様に、コンピュータ関連のエンティティ、すなわちハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、又は実行中のソフトウェアを言及することを意図している。例えば、コンポーネントは、限定されるものではないが、プロセッサで実行中の処理、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、及び／又はコンピュータであっても良い。例示のために、コンピュータ上で実行中のアプリケーション及びそのコンピュータの両方はコンポーネントとすることができる。１つ以上のコンポーネントは処理及び／又は実行スレッド内に常駐しても良く、コンポーネントは１つのコンピュータ上に局在されても良く、及び／又は２つ以上のコンピュータ間に分散されても良い。
【０１０６】
上記のシステムは、あるコンポーネント間の相互作用に関して説明された。そのようなシステム及びコンポーネントは、それらのコンポーネント又は特定のサブコンポーネント、特定のコンポーネント又はサブコンポーネント、及び／又は追加のコンポーネントを含むことができ、また、前述の種々の置き換え及び組み合わせにより含むことができる。また、サブコンポーネントは、親コンポーネント（階層）内に含まれるよりもむしろ他のコンポーネントと通信可能に接続されたコンポーネントとして実装することができる。なお、１つ以上のコンポーネントが集約機能を提供する単一のコンポーネントに接続され、又は複数の別々のサブコンポーネントに分割されても良く、管理層等の任意の１つ以上の中間層が、統合機能を提供するためにそのようなサブコンポーネントに通信可能に接続されるように備えられても良い。また、本明細書に記載の任意のコンポーネントは、本明細書に特に記載されていないがこの分野の当業者によって通常知られた１つ以上の他のコンポーネントと相互作用を行っても良い。
【０１０７】
上述の例示的なシステムの観点からは、記載された要件に従って実施され得る方法は、様々な図のフローチャートを参照して理解することができる。説明を簡単にするために、方法を一連のブロックとして示して説明したが、様々な実施形態は、本明細書に表現及び記載されたこととは、あるブロックが異なる順番で及び／又は他のブロックと同時に生じても良いように、ブロックの順に限定されないことが理解され認識されるべきである。非連続又は分枝の流れがフローチャートに図示されている場合に、様々な他の分岐、流れの経路、及びブロックの順序が実装されても良く、同一又は類似の結果を達成することができることが分かる。また、図示されていない全てのブロックは、後述の方法を実施するために必要とされ得る。
【０１０８】
本明細書に記載の様々な実施形態に加えて、そこから逸脱することなく対応する実施形態の同一又は類似の機能を実行するために類似の他の実施形態を使用することができ、又は修正及び追加を説明された実施形態に行うことができることが理解されるべきである。更に、複数の処理チップ又は複数の装置は、本明細書に記載の１つ以上の機能のパフォーマンスを共有することができ、同様に、ストレージは複数の装置に亘って作用をもたらすことができる。従って、本発明は、任意の単一の実施形態に限定されるべきではなく、むしろ特許請求の範囲に応じて広さ、精神及び範囲で解釈されるべきである。
【図１】
2013546090.tif 000003
【図２】
2013546090.tif 000004
【図３】
2013546090.tif 000005
【図４】
2013546090.tif 000006
【図５】
2013546090.tif 000007
【図６】
2013546090.tif 000008
【図７】
2013546090.tif 000009
【図８】
2013546090.tif 000010
【図９】
2013546090.tif 000011
【図１０】
2013546090.tif 000012
【図１１】
2013546090.tif 000013
【図１２】
2013546090.tif 000014
【図１３】
2013546090.tif 000015
【図１４】
2013546090.tif 000016
【図１５】
2013546090.tif 000017
【国際調査報告】
2013546090.tif 000018
2013546090.tif 000019