JP5775599B2 - コードクローン検出を用いたインテリジェントコード差分処理 - Google Patents

コードクローン検出を用いたインテリジェントコード差分処理 Download PDF

Info

Publication number
JP5775599B2
JP5775599B2 JP2013543486A JP2013543486A JP5775599B2 JP 5775599 B2 JP5775599 B2 JP 5775599B2 JP 2013543486 A JP2013543486 A JP 2013543486A JP 2013543486 A JP2013543486 A JP 2013543486A JP 5775599 B2 JP5775599 B2 JP 5775599B2
Authority
JP
Japan
Prior art keywords
code
importance
level
versions
source code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013543486A
Other languages
English (en)
Other versions
JP2013546090A (ja
Inventor
ウェイペン リウ
ウェイペン リウ
ゴン チョン
ゴン チョン
ハン サディ
ハン サディ
ソン ゴー
ソン ゴー
ジャン ドンメイ
ジャン ドンメイ
インノン ダン
インノン ダン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2013546090A publication Critical patent/JP2013546090A/ja
Application granted granted Critical
Publication of JP5775599B2 publication Critical patent/JP5775599B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/62Uninstallation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

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

Description

本発明は、一般に、セマンティック情報をインテリジェントに生成し、及び出力するコード差分処理システムに関する。
コードレビューの共通のタスクは、ソースコードの以前のバージョンとソースコードの現在のバージョンの間の変更を解明し、及び理解できるようにすることである。従来のコードの差分処理(即ち、ドフィング)システムは、単に、ソースコードにおける又はソースコードのバージョン間の変更を識別する。当該システムは、一般的には、1つのソースファイルに追加された、及び/又は削除されたライン(行)がどこにあるかなどの基本情報を提供する。従来の差分システムの結果をレビューするコードレビューアは、ファイルに対する変更の性質のどれに焦点を当てるかの直感的又は他の記述的な情報、例えば、セマンティック又は字句の変更が発生しているかどうかについての情報を持たない。
ソフトウェア開発は、一般的に、同時に複数のソフトウェア開発者を採用して共同でソースコードを開発又は修正する。そのような開発を容易にするために、同じソースコード、又はソースコードベース、例えば、ソースコードを含むファイルのグループが別の開発者によって修正されることが度々ある。また、ある場合には、一人の開発者がソースコード内のバグを修正してもよく、別の開発者が異なる複数のファイル内の又は複数のファイルに亘ってソースコードのラインを移動させることによって同じソースコードを同時に修正してもよい。更に、異なる開発者によって2つ以上の異なるブランチにおける同時処理のために同じソースコードの異なるバージョンが生成されても良い。上記のアプローチは、各々、同じコードの異なるバージョンを生成する。よって、コードのバージョンが非常に類似していても良く、それ故、ソースコードのバージョン間の変更を理解するタスクは困難であり得る。
上述の差分システムは、上記したように開発者に限られた量の支援しか提供しないが、それらは特に有益ではない。今日のコード差分処理システムの上述した欠点は、単に従来システムのいくつかの問題点の概略を提供することを意図しており、網羅的なものであることを意図するものではない。従来システムの他の問題点及び本明細書に記載の種々の非限定的な実施形態の対応する利点は、以下の説明を検討すれば、より明らかになる。
簡単な要約は、発明の詳細な説明及び添付図面に従う例示的で非限定的な実施形態の様々な態様の基本的な又は一般的な理解を助けるために本明細書で提供される。しかしながら、この要約は広範囲又は網羅的な概要として意図されていない。代わりに、この要約の唯一の目的は、以下の様々な実施形態の詳細な説明の前置きとして簡略化した形で、ある例示的で非限定的な実施形態に関連したいくつかの概念を提示することである。
本明細書で提供されるような様々な実施形態は、コードクローン検出技術を採用可能な統合開発環境(IDE)を対象とする。また、様々な実施形態は、コードクローン検出方法を用いるシステム及び技術を対象とする。コードレビューアに出力されるセマンティック情報を生成する予備段階としてコードクローン検出技術が使用されうる。本明細書に記載され差分技術の恩恵を受けることができる他の環境及びコンテキストも考えられる。
様々な実施形態は、コードのバージョン間の変更に関するセマンティック情報を生成するコードクローン検出技術を採用する。セマンティック情報は、バージョン間の変更の特徴付けになりうる。特徴付けは、特に、コードレビューアに出力されうるものであり、それによって一般的にソフトウェア開発、特にコードレビュー処理を手助けする。ある実施形態では、開発者自身によって行われた変更をレビューするために開発者に情報を出力することができ、よって、本明細書に記載された実施形態は開発者によって以前に入力された変更の自己レビュー及び/又はサードパーティによって入力されて開発者によって単にレビューされた変更のレビューの助けとすることができる。
ある実施形態において、バージョン間の変更に関する情報を表示するためにアーキテクチャ図又はカラーコード化情報等の視覚化情報が生成されうる。視覚化情報はその変更の理解を視覚的に助けるためにコードレビューアに出力される。
更に、本明細書で説明される他のシステム及び方法は、ある実施形態においてクローン検出コア及び重要度エンジンを含む。クローン検出コンポーネント、すなわちコアは、ソースコードの少なくとも2つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成するように構成される。重要度エンジンは、コンテンツ変更のタイプに関連付けられた重要度のレベルを判定し、及び重要度のレベルを示す情報を出力するように構成される。重要度のレベルは、ある実施形態において変更の特徴付けに関連する。他の実施形態では、重要度のレベルは変更のタイプ、例えば、フォーマットの字句的又は論理的変更に関連する。重要度のレベルは、値、例えば、整数、分数、パーセンテージ等として、又は視覚化、例えば、カラーコーディングとして表されうる。これら及び他の実施態様は、以下でより詳細に説明される。
種々の非限定的な実施形態を、添付図面を参照して説明する。
1つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示すブロック図である。 1つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示す別のブロック図である。 1つ以上の実施形態によるインテリジェントコード差分処理システムの非限定的実施例を示す別のブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示すフロー図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なプロセス例を示す別のフロー図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示すブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理の非限定的なスクリーンショット例を示す別のブロック図である。 コードクローン検出技術を用いるインテリジェントコード差分処理を実施するシステムアーキテクチャの非限定的な実施例を示すブロック図である。 本明細書に説明された様々な実施形態を実施することができる非限定的なネットワーク環境を表すブロック図である。 本明細書に説明された様々な実施形態の1つ以上の態様を実施することができる非限定的なコンピューティングシステム又はオペレーティングシステム環境を表すブロック図である。
概要
前置きとして述べると、ソフトウェア開発者は、プログラミングの効率化のために、プログラミングプロジェクト内の多数の場所にソースコードのセクションを複製することが多い。ある程度の修正又は適応の有無にかかわらず、ソースコードの一部を再利用することは「コードクローニング」と呼ばれ、正確性の程度を変化させることにより互いに一致又は対応するコードの結果としての部分は「コードクローン」又は単に「クローン」と呼ばれる。また、ある実施形態において、特定の機能性、コンポーネント又はアプリケーションを構築するために使用されるソースコードの1つ以上のファイルのグループは、ファイル内、又はファイル間においてある程度の修正の有無にかかわらず再利用される。1つ以上のファイルのグループは、「コードベース」と呼ばれる。用語「コード」は一貫性を保つために本明細書で使用されているが、その用語は、適用可能な場合には「コードベース」に適用できることが理解されるべきである。
コードクローンの検出技術は、ソースコード内の又はソースコードの各ファイルに亘ってコードクローンを識別し、及び解析する問題に対処する。従来のコードクローン検出システムは、ソースコードを受信し、ラインをトークンに分割して非本質的な差分を削除するためにソースコードのテキストを前処理し、類似性のために残りのコードを解析する。
コード差分処理システムは通常、2つのソースコードファイル間の差分情報を生成する。例えば、2つのソースコードファイルの差分が出力されうる。しかしながら、当該システムは、通常、追加又は削除されたラインを記述する情報等の基本情報のみを出力する。
本明細書で提供される様々な実施形態は、コードクローン検出技術を使用可能な統合開発環境(IDE)を対象とする。また、様々な実施形態は、コードクローン検出方法を用いるシステム及び技術を対象とする。コードレビューアに出力されるセマンティック情報を生成する予備段階としてコードクローン検出技術が使用されうる。
一実施形態では、コードクローン検出技術を用いるインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも2つのバージョンを受信することと、コードクローン検出技術を用いてソースコードのバージョンを処理することを含む。コードクローン検出技術に基づいて、互いに対応するバージョンの異なる部分について判定が行われうる。
本明細書で説明されたシステム及び方法は、コードのバージョン間の変更についてセマンティック情報を生成するためにコードクローン検出技術を使用する。セマンティック情報は、バージョン間の変更の特徴付けである。特徴付けは、コードレビューアに出力され、それにより、一般的にソフトウェア開発、特に、コードレビュー処理を大いに助ける。
一実施形態では、コードクローン検出技術を用いてインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも2つのバージョン間の対応関係を示す情報を受信することを含む。バージョン間の対応関係の特徴付けが決定される。特徴付けは、バージョン間のセマンティック差異を示すものであり、その対応関係に基づいている。特徴付けを示す情報が出力される。ある実施形態では、その情報がコードレビューアによってアクセスされ得るソフトウェア開発ステーションに出力される。
ある実施形態においては、システム及び方法はまた、バージョン間の変更についての情報を表示するためにアーキテクチャ図又はカラーコード化情報等の視覚化情報を生成する。視覚化情報はその変更の理解を視覚的に助けるためにコードレビューアに出力される。
更に、本明細書に説明された他のシステム及び方法は、コードのバージョン間の1つ以上の変更の重要度のレベルを示す情報を生成する。重要度のレベルは、ある実施形態において変更の特徴付けに関連する。他の実施形態では、重要度のレベルは、変更のタイプ(例えば、フォーマットの字句的又は論理的変更)に関連する。重要度のレベルは、値(例えば、整数、分数、パーセンテージ)として、又は視覚化したもの(例えば、カラーコード化)として表されうる。
一実施形態では、コードクローン検出技術を用いてインテリジェントソースコード処理を実行する方法は、ソースコードの少なくとも2つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成することを含む。コンテンツ変更のタイプに関連付けられた重要度のレベルが判定される。重要度のレベルを示す情報が出力される。ある実施形態では、変更の重要度のレベルの視覚化したものが出力される。コードレビューアによってアクセス可能なソフトウェア開発ステーションにその出力が提供されうる。
本明細書においては、インテリジェントコード差分処理を実現するための実施形態の概要が上記したように提示された。以下に続くことについてのロードマップとしては、インテリジェントコード差分処理のための様々な非限定的な実施形態及び特徴の例がより詳細に説明される。そして、ある非限定的な実施及び例が追加の例示のために提供され、続いて、そのような実施形態及び/又は特徴を実施することができる代表的ネットワーク及びコンピューティング環境が提供される。
コードクローン検出を用いたインテリジェントコード差分処理
しかしながら、本明細書で提供された実施形態は、任意の特定のデータベース又はシステムの実施に限定することを意図するものではないことが理解できる。更に、特に明記しない限り、様々な実施形態は、任意の特定のコード差分処理又はコードクローニング実施に限定することを意図するものではない。
ソースコードの異なるバージョン間の変更に関するセマンティック情報を生成するために使用され得るインテリジェントコード差分処理設計の1つ以上の非限定的な態様について詳細に説明することを目的として、実施され得るスキーム例に関連付けられた様々な非限定的な特徴付けが説明される。例えば、図1は、インテリジェントコード差分処理システム102の非限定的実施例を示すブロック図である。図1に示されたように、コード差分処理システム102は、1つ以上のコードベースのストレージリポジトリ104、106に関連付けられている。一実施形態では、コードベースのストレージリポジトリ104、106は1つ以上のコードベースを格納する。
一実施形態において、コードベースのストレージリポジトリ104は、ソースコードの第1のバージョンを格納し、コードベースのストレージリポジトリ106は、ソースコードの第2のバージョンを格納する。このように、第1のバージョンのソースコード110及び第2のバージョンのソースコード120は、コード差分処理システム102によってコードベースのストレージリポジトリ104、106から受信され得る。しかしながら、コードベースはそのように格納される必要はなく、例えば、コードベースの両方のバージョンを同じコードベースのストレージリポジトリ104又は106に格納することができ、また、同じコードベースのストレージリポジトリ104又は106から受信することができる。
また、ソースコードのバージョンの数は、ある実施形態において2つとして示されるが、ソースコードのバージョンの異なる数は、ある非限定的な実施形態において同時に、又は並行して処理されうる。例えば、ソースコードの3つ以上のバージョンが、本明細書に説明されるシステム及び方法を用いて同時に又は連続して処理されうる。
更に、異なるタイプの処理の結果としてソースコードのバージョンが生成されうる。例えば、ソースコードの2つのバージョンは、異なる開発者によって2つの異なるブランチで処理された同じソースコードであっても良い。別の例として、別の実施形態では、2つのバージョンのソースコードは、時点tに生成された第1のバージョンのソースコード、及び時点t+xに第1のバージョンのソースコードを修正することによって生成された第2のバージョンのソースコードとすることができる。例えば、第1のバージョンのソースコードを生成することができ、ソースコード内のバグに対処するために又は他の拡張機能を提供するために、後で、第1のバージョンを修正することに基づいて第2のバージョンのソースコードを生成することができる。
コード差分処理システム102は、コードクローン検出のためのソースコードを準備するために、第1及び第2のバージョンのソースコード110、120を事前処理するように構成されたプレプロセッサ130を含む。例えば、第1及び第2のバージョンのソースコード110、120は、コード差分処理システム102によって受信されることができ、プレプロセッサ130は、ラインをトークンに分割し、ソースコード110、120のバージョン間の非本質的な差異を除去することができる。
コード差分処理システム102は、コードクローン検出コア140を含む。コードクローン検出コア140は、コードクローン検出及び処理の機能を実行することができる。
非限定的な一実施形態では、実行されるコードクローン検出は、2010年4月1日に出願され、「コードクローン検出及び解析」と題された米国特許出願No.12/752,942に記載された如きであり、その出願は本明細書において全体で参考として包含されており、誤解を避けるためにも、本明細書に説明された様々な実施形態は、任意の特定のコードクローンの検出技術に限定されない。特定のコードクローン検出技術への唯一の要件は、正確なコードクローン及びニアミスのコードクローンの両方を検出することができることである。ニアミスのコードクローンは、複製後に、追加、削除、及び/又は編集のような更なる修正がソースコード上で実行されるものである。
別の実施形態では、コードクローン検出は、互いに類似した2つのバージョンのソースコード内の1つ以上の部分を識別することを含む。このように、コードクローン検出は、互いに同じではなく、互いに単に類似している部分を検出することができる。更に明確にするために言えば、コードクローン検出コア140は、様々な類似度を有するコードを識別するように構成されている。このように、コードクローン検出コア140は、異なるが類似しているコードのバージョン内のコードの部分、例えば、スニペット(断片)を検出することができる。
ある実施形態では、例えば、互いに類似した部分は、削除されたコードスニペット又は関数、新しいコードスニペット又は関数、複製されたコードスニペット又は関数、移動された関数、リネームされた関数、移動及びリネームされた関数の組み合わせ、修正された関数等で互いに関連して修正される部分である。
一実施形態では、コードの類似したピース(片)を識別することは、2つのコードスニペット、すなわち、各々のバージョンのコードから1つのコードスニペットを出力することを含む。しかしながら、本明細書における実施形態はそのように限定されず、コードの類似のピースを識別することは、コードの2つピース内の2つのコードスニペットの場所又は説明を示す情報を出力することを含むことができる。図1に示されたように、コードの類似のピース(又はコードの類似のピースを識別する場所又は他の情報)はコード差分処理システム102から出力される。一実施形態では、コードの類似したピース又はコードの類似したピースを識別する場所又はその他の情報は、ソフトウェア開発ステーション150に出力される。
一実施形態では、ソフトウェア開発ステーション150は、コード差分処理システム102に隣接して配置される。他の実施形態では、ソフトウェア開発ステーション150は、コード差分処理システム102から離れて配置される。例えば、ある場合には、コード差分処理システム102はサーバに関連付けられ、ソフトウェア開発ステーション150はネットワーク上でコード差分処理システム102にアクセスするクライアントマシンに関連付けられる。
変更されたコードのバージョンの部分にコードレビューアが集中することを可能にするように、検出されたコードスニペットは、ソフトウェア開発ステーション150にアクセスするコードレビューアによって解析されうる。大きなコードベース又はコードの大きなファイルでは、選択された部分に集中する能力が時間及びリソースの支出を大幅に減らすことができる。
ある実施形態では、コードクローン検出コア140は、ソースコード110、120の2つのバージョン間の類似度に対応する値を生成するようにも構成されている。その値は、整数、小数又はパーセンテージ値であっても良い。
図2は、インテリジェントコード差分処理システム202の非限定的実施例を示す他のブロック図である。図1を参照して説明されたように、コード差分処理システム202は、プリプロセッサ130及びコードクローン検出コア140を含む。コード差分処理システム202は、第1及び第2のバージョンのソースコード110、120を受信する。非限定的な一実施形態では、図2に示されたように、第1及び第2のバージョンのソースコード110、120は、コードベースのストレージリポジトリ104、106から受信される。
図2に示されたように、また、コード差分処理システム202は、ソースコード110、120の2つのバージョン間の対応関係を決定するために特徴付けエンジン210を含む。その対応関係は、ソースコード110、120の2つのバージョン間の変更を示し、特徴付けと関連付けられる。特徴付けは、ソースコード110、120の2つのバージョン間の変更に関するセマンティック情報を含む。
このように、コードクローン検出コア140は、ソースコードの類似した部分を識別し、及びそのような情報を特徴付けエンジン210に出力する。特徴付けエンジン210は2つのコード間の変更を表すセマンティック意味を抽出するためにその情報を抽象化する。セマンティック意味は特徴付けによって説明され、それは特徴付けエンジン210から出力される。
様々な実施形態において可能な特徴付けの多数の異なるタイプがある。例えば、ある場合には、第1及び第2のバージョンのソースコード110、120間の変更の約6つの異なる特徴付けがある。一実施形態では、異なる特徴付けは、新しいコードスニペット又は関数(例えば、新しいコードスニペット又は関数はコードの他のバージョンに関連してコードの1つのバージョンで追加される)、複製されたコードスニペット又は関数(例えば、新しいコードスニペット又は関数がコピーアンドペーストによって複製される)、削除されたコードスニペット又は関数(例えば、関数がコードの他のバージョンに関連してコードの1つのバージョンで削除される)、移動された関数(例えば、関数はコードの1つのバージョンのためのソースファイルからコードの他のバージョンのためのソースファイルに移動される)、リネームされた関数(例えば、署名がコード内で変更されるが、コンテンツは変更されない)、又は修正された関数(例えば、署名が同じであるが、コンテンツがコード内で変更された)である。様々な実施形態では、また、特徴付けは、移動及びリネームされたコードスニペット又は関数の組み合わせを有するコードスニペット又は関数を示すことができる。本明細書で使用される場合に、用語「コードスニペット」は、関数の連続したステートメントのセグメントを意味する。
上記の6つの特徴付けは、コード差分処理システム202からソフトウェア開発ステーション150に出力される。よって、特徴付けエンジン210は、第1及び第2のバージョンのソースコード110、120間で生じた変更のタイプについて、その変更をコードレビューアに単に提供し、生じた変更のタイプを評価することをコードレビューアに要求するのではなく、セマンティック情報をソフトウェア開発ステーション150(及びそのようなソフトウェア開発ステーション150にアクセスするコードレビューア)に提供することができる。よって、コードレビューの経験は、改善され、より効率的に行われる。
一実施形態では、図2に示されたように、コード差分処理システム202は、視覚化エンジン220も含む。視覚化エンジン220は、特徴付けの視覚化したものを生成する。視覚化したものは、特徴付けを記述したファイル、ソースコード110、120のバージョン間の変更又は特徴付けをグラフィカルに表示するアーキテクチャ図、及び/又はコードクローン検出コア140によって識別された第1及び第2のバージョンのソースコード110、120間の変更に関連付けられた関数のカラーコード化リストである。
特徴付け及び/又は特徴付けの視覚化を示す情報は、特徴付けエンジン210及び/又は視覚化エンジン220各々からソフトウェア開発ステーション150に出力される。
図3は、インテリジェントコード差分処理システム302の非限定的実施例を示す他のブロック図である。図1を参照して説明したように、コード差分処理システム302は、プリプロセッサ130及びコードクローン検出コア140を含む。コード差分処理システム302は、第1及び第2のバージョンのソースコード110、120を受信する。任意の非限定的な実施形態では、図3に示されたように、第1及び第2のバージョンのソースコード110、120は、コードベースのストレージリポジトリ104、106から受信される。
図2に示されたように、コード差分処理システム302は、特徴付けエンジン210を含み、ある実施形態では、更に視覚化エンジン220を含む。図3に示されたように、また、コード差分処理システム302は、ソースコード110、120の2つのバージョン間のコンテンツ変更のタイプに重要度のレベルを関連付けるように、及び/又は特徴付けエンジン210によって生成された特徴付けに基づくように構成された重要度エンジン310を含む。
コンテンツ変更のタイプがその変更の特徴付けである、ある非限定的な実施形態では、重要度のレベルは、関連付けられた特徴付けからマッピングされる。例えば、移動された関数は、重要度の変化の些細なレベルにマッピングされる特徴付けとすることができ、それにより、重要度の最も低いレベルが割り当てられる。別の例として、リネームされた関数を小さな変更にマッピングすることができ、それにより、適度の重要度のレベルが割り当てられる。別の例として、変更された関数を大きな変更にマッピングすることができ、それによって重要度の最大レベルが割り当てられる。前述の特性付けを参照すると、複製されたコードスニペット又は関数、移動された関数、リネームされた関数又は修正された関数の特徴付けのために重要度情報のレベルが提供されうる。
ある実施形態では、特徴付けに基づいて情報のレベルを生成する代わりに、又はそれに加えて、第1のバージョンのソースコード110から第2のバージョンのソースコード120へのコンテンツ変更のタイプに基づいて重要度のレベルが生成されうる。
例えば、一実施形態では、コンテンツ変更のタイプは、フォーマットの変更又はコメント変更である。フォーマット及びコメントの変更は、変更の小さなレベルに関連付けられ、よって、重要度の最低レベルが割り当てられうる。
別の実施形態では、コンテンツ変更のタイプは、字句変更(例えば、可変のリネーミング)である。字句変更は、変更の適度のレベルに関連付けられ、よって、重要度の適度なレベルが割り当てられうる。
別の実施形態では、コンテンツ変更のタイプは論理的変更である。論理的変更は、変更の大きなレベルに関連付けられ、よって、重要度の最高レベルが割り当てられうる。
ある非限定的な実施形態では、重要度のレベルは、コンテンツ変更のタイプに数値(例えば、パーセンテージ又は別のもの)を割り当てること、及び数値に応じて重要度のレベルを分類することに基づいて決定される。例えば、5%の変更の値は小さな変更を表し、それには重要度の最低のレベルが割り当てられるが、50%(又はそれ以上)の変更の値は大きな変更であり、それには重要度の最高のレベルが割り当てられる。また、様々な実施形態では、値(例えば、上記の5%値)が、変更の重要性を伝える能力を更に高めるために他のコードメトリックと共に利用される。非限定的な一実施形態では、例えば、コードの5%が意味的に変更されたが、変更された部分は、(テスト結果に基づいた)アプリケーションのクリティカルパスを有する場合には、変更されたコードの部分の重要度を伝えるためにコードのその部分と関連付けられたコードメトリックに値を置くことによって及び/又は特定のメトリック、メトリックの値、メトリックの重要度のレベル等を選択することによって変更されたコードの実際の部分の相対的な重要度を伝えることができる。
重要度のレベルは、重要度エンジン310からソフトウェア開発ステーション150に出力される。一実施形態では、図3には示されていないけれども、視覚化エンジン220は、重要度エンジン310によって生成された重要度のレベルに関する情報を受信し、生成し、視覚的表現として重要度を出力する。
図4は、コードクローン検出技術を用いてインテリジェントコード差分処理を実行する非限定的な処理例を示すフロー図である。ステップ400では、ソースコードの少なくとも2つのバージョンがインテリジェントコード差分処理システムで受信される。ステップ410では、ソースコードの2つのバージョンは、コードクローン検出技術を用いて処理され、ソースコードの類似したピースが識別される。更に明確にするために言えば、コードクローン検出技術は、様々な類似度を有するソースコードを識別するように構成される。それ故、コードクローン検出技術は、異なるが、類似しているソースコードのスニペットを検出することができる。
一実施形態では、ソースコードの類似の部分を識別することは、2つのソースコードスニペット、即ち、ソースコードのバージョンの各々から1つのソースコードスニペットを出力することを含む。しかしながら、本明細書の実施形態は、そのように限定されず、ソースコードの類似したピースを識別することは、ソースコードの2つのピース内の2つのソースコードスニペットの場所又は説明を示す情報を出力することを含むことができる。
ステップ420では、ソースコードスニペット(又はソースコードスニペットの場所又は説明を示す情報)がコード差分処理システムによって処理される。ソースコードの類似したピースについてのセマンティック解析は、ソースコードの2つのピース間の差分の特徴付けを決定するために行われる。
ステップ420は次のように非限定的な一実施形態でより詳細に記載されている。一実施形態では、コードクローン検出ツールは、クローンペア集合{P},i=1,2,...,Nを出力し、ここで、P=[SA,SB]、SAは1つのバージョンのソースファイルからの1つのコードスニペット(又は関数)であり、SBは別のバージョンのソースファイルの1つのコードスニペット(又は関数)である。次いで、ステップ420では、各クローンペアPが更に解析される。
特に、ある場合には、SA及びSBが全く同じであり、同じ場所のコンテキスト(例えば、同じソースファイルに、同じ近隣の関数を有する)であるならば、このペアは無視される。
別の場合には、SA及びSBが全く同じ関数であるが、異なる場所のコンテキスト(例えば、異なるソースファイルに、又は異なる近隣の関数を有する)を有するならば、SA及びSBは移動された関数として特徴付けられる。
別の場合には、SA及びSBがニアミスクローン化関数であるならば、それらは次のように更に分類化される。それらの署名が異なり、同じ本体コンテンツを持っている場合には、それらはリネームされた関数として特徴付けられる。それらの本体コンテンツが異なるが、同じ署名を有する場合には、それらは修正された関数として特徴付けられる。更に、それらが異なる場所のコンテキストを有する場合には、それらは移動された関数として特徴付けられる。更に、それらが異なる本体コンテンツを有する場合には、それらは移動及び修正された関数として特徴付けられる。
また、ステップ420では、集合{P}のリストにないコードスニペット及び関数が更に解析されて削除及び/又は追加されたコードスニペット又は関数を得る。削除及び/又は追加されたコードスニペット又は関数は、現在のコードベースの他の場所から、又は他のコードベースから複製されるかどうか決定するために、更に13213(例えば、ローカルコードベースのインデックスを有する)又は1334(例えば、サーバ側にコードベースのセットのインデックスを有する)に対して検索される。
図4に戻ると、上述したように、特徴付けは、ある実施形態では、ソースコードの2つのバージョン間の変更の複雑さのレベル及び/又はタイプに基づいている。
それ故、図4の処理は、変更をコードレビューアに単に提供し、生じた変更のタイプを評価することをコードレビューアに要求することとは対照的に、生じた変更のタイプについての情報を提供する。よって、コードレビューのエクスペリエンスは改善される。
図4には示されていないが、ある実施形態において、特徴付けは、ソースコードのバージョン間の差異を記述するファイルとして出力される。しかしながら、ファイルは、非限定的な一実施例である。
他の非限定的な実施形態では、例えば、特徴付け(又は特徴付けが示す変更)は視覚的に出力される。例えば、視覚化したものは、特徴付けをもたらすソースコードの2つのバージョンについてのオペレーションをグラフィカルに表現するアーキテクチャ図のものとすることができる。例えば、移動オペレーションは、興味がある関数を示し、第1のバージョンのソースコード内の関数から第2のバージョンのソースコード内の関数へ矢印を示すことによって視覚的に表現されうる。別の例として、視覚化したものは、ソースコードの2つのバージョンからのソースコードの異なるカラーコード化コードスニペット又は関数又はピースを示すカラーコード化図であっても良い。ソースコードのコードスニペット又は関数又はピースに関連付けられているカラーは異なる特徴付けに割り当てられている(例えば、赤色が移動された関数を表す一方、黄色は複製されたコードスニペット又は関数を表すことができる)。コードレビューアは、ソースコードの2つのバージョン間の変更のタイプを視覚的に識別することができる。
6つの異なる特徴付けが記載されているが、これらの特徴付けは、非限定的かつ単なる例示に過ぎない。他の特徴付けが可能であり、ある場合には、より少ない数(又はより多くの数)の特徴付けがシステム設計者及びコードレビューアのニーズによって決定されるように可能であり、それは随時変更される。
図4の処理を異なる複数の処理に分離することができ、その各々は一般にコードクローン検出技術の従来のアプローチ及び使用、及び特に、コード差分処理について新規性と独特の利点を有する。
例えば、図5は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ500では、ソースコードの2つのバージョンが受信される。ステップ510では、ソースコードの2つのバージョンは、コードクローン検出技術を用いて処理している。ステップ520では、コードクローン検出技術を使用して、互いに対応するソースコードの異なる部分が判別される。非限定的な実施形態では、互いに対応するソースコードのピースは、ソースコードの同一部分又はソースコードの類似した部分である。それ故、図5の処理は、ソースコードのほぼ一致(ソースコードの単なる完全な一致だけでなく)を検出するためにコードクローン検出技術を利用する。
検出されたソースコードは、インテリジェントコード差分処理システムから出力され、コードレビューアによってアクセスされうる。
別の例として、図6は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ600では、ソースコードの2つのバージョン間の対応関係を示す情報が受信される。ステップ610では、対応関係の特徴付けが決定される。非限定的な一実施形態では、対応関係は、特徴付けを決定するために抽象化されているソースコードの2つのバージョン間の実際の差異を示す情報である。例えば、非限定的な一実施形態では、対応関係は、第1のバージョンから削除されているコードスニペット又は関数と、第2のバージョンに追加されているコードスニペット又は関数とを示す情報である。これとは対照的に、特徴付けは追加又は削除されたコードスニペット又は関数の基礎となるセマンティックな意味を抽象化したものである。例えば、追加及び削除されたコードスニペット又は関数が同一のコードスニペット又は関数であるならば、その追加及び削除のセマンティックな意味は1つのバージョンから他のバージョンへの移動であると判定され、そして、特徴付けは(追加及び削除されたコンテンツが同一又はそれらと関連付けられた任意の他のセマンティック情報についての追加の情報なしに2つのバージョンに亘って生じた第1のファイルの削除及び第2のファイルの追加を単に出力することと対照的に)図4を参照して上記された移動であると判定される。
ステップ620では、特徴付けの視覚化したものが生成される。前述されたように、視覚化したものはバージョン間の変更の特徴付けを説明するファイル、バージョン間の変更をグラフィカルに表示するアーキテクチャ図及び/又はソースコードの他のバージョンに対してソースコードの1つのバージョンにおける変更を表すコードスニペット又は関数のカラーコード化リストである。
ステップ630では、特徴付けが出力される。ある実施形態では、特徴付けの識別をドライブする変更も出力される。
別の例として、図7は、インテリジェントコード差分処理を容易にするための非限定的な処理例を示すフロー図である。ステップ700では、ソースコードのバージョン間のコンテンツ変更のタイプを示す情報が生成される。コンテンツ変更のタイプは、別の非限定的な実施形態では、フォーマット変更又はコメント変更、字句の変更(例えば、様々なリネーミング)又は論理的変更とすることができる。更に、ある非限定的な実施形態では、コンテンツ変更のタイプは、ソースコードのバージョン間の差異の特徴付けである。それ故、コンテンツ変更のタイプは、例えば、図4〜図6を参照して上述された、移動された関数、削除されたコードスニペット又は関数、又は任意数の他のタイプのコードスニペット及び/又は関数である。
ステップ710では、コンテンツ変更のタイプに関連付けられた重要度のレベルが決定される。ある非限定的な実施形態では、コンテンツ変更のタイプはその変更の特徴付けであり、重要度のレベルは、関連付けられた特徴付けからマッピングされる。例えば、移動された関数は些細な変更にマッピングされた特徴付けとすることができ、それにより、重要度の最も低いレベルが割り当てられる。別の例として、リネームされた関数を小さな(マイナーな)変更にマッピングすることができ、それにより、重要度の適度なレベルが割り当てられる。別の例として、修正された関数を大きな変更にマッピングすることができ、それにより重要度の最大レベルが割り当てられる。前述の特徴付けを参照すると、重要度情報のレベルは、複製されたコードスニペット又は関数、移動された関数、リネームされた関数又は修正された関数の特徴付けのために提供され得る。
ある非限定的な実施形態では、重要度のレベルは、コンテンツ変更のタイプに数値(例えば、パーセンテージ又は別のもの)を割り当てること、及びその数値に応じて重要度のレベルを分類することに基づいて決定されうる。例えば、5%の変更の値は些細な変更を表し、それには重要度の最小レベルが割り当てられる一方、50%(又はそれ以上)の変更の値は大きな変更を表し、それには重要度の最大レベルが割り当てられる。
ステップ720では、重要度のレベルを示す情報が出力される。図4及び図6について説明されたように、重要度のレベルを視覚的に表現できることができる。
図8〜図12を参照すると、インテリジェントコード差分処理のためのスクリーンショット例を示すブロック図が示されている。図8は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示すブロック図である。図8に示すように、開発者はソースコードの複数のファイルに変更を行った。ファイルは以前のバージョンと比較され、その変更を示す情報が編集されたファイル毎にスクリーンショットに示される。加えて、以前のバージョンに対して追加された新しいファイルは追加されたものとして示される。
図9は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。本明細書に説明された実施形態を有するコード差分処理システムは、図9に示されたように、ソースコードのバージョンに対する関数レベル、直感的変更を示す情報を出力する。変更は本明細書に前述された6つの特徴付けのうちの1つとしてラベル付けされる。本明細書に説明されたように、様々な実施形態では、また、変更の量をコード差分処理システムによって示すことができる。例えば、バージョン間の変更のパーセンテージ(又はバージョン間の類似度のパーセンテージ)がある実施形態において特徴付けと共に示されている。
図10はコードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。コード差分処理システムは、図10に示された如く、NewFile.csの選択のようにファイルを選択する入力を受信することができる。バージョン間の詳細な変更が関数、直感的レベルで記述されている。例えば、ファイルNewFile.cs内の関数NewFile::CopiedMethodl等の複製されたコードスニペット又は関数のために、コード差分処理システムは、署名(例えば、関数定義)変更及びコンテンツ(例えば、本体)変更(91%類似)を含む複製後の詳細な変更を示している。
アイコン(又は興味があるファイル)をクリックすることによって、図11に示されたように、詳細な変更が、直感的で、セマンティックな方法で出力されうる。この実施例では、変更はバグ修正である。
図12は、コードクローン検出技術を用いるインテリジェントコード差分処理のための非限定的なスクリーンショット例を示す別のブロック図である。図12は、関数(図10に示されたファイルNewFile.cs内のNewFile::CopiedMethodl)とその複製バージョンと間の詳細な変更を示している。
図13は、コードクローン検出技術を用いてインテリジェントコード差分処理を実施するシステムアーキテクチャの非限定的な実施例を示すブロック図である。図13に示されるように、システムは、コードクローン解析コア1310、統合開発環境(IDE)1320及びアプリケーションサーバ1350を含む。
コードクローン解析コア1310は、コードクローン解析コア1310によって受信されたコードに関連付けられたインデックス付けと構文解析を各々実行するインデクサ1312とパーサ1314とを含む。パーサインターフェイス1315が備えられている。コードクローン解析コア1310は、コードの類似したピースを検出するために構成されたコードクローン検出部1316を含む。非限定的な一実施形態では、前述したように、コードクローン検出部1316は、「コードクローン検出及び解析」と題された2010年4月1日に出願された米国特許出願No.12/752,942を参照して説明したコードクローン検出及び処理を行うように構成されている。コードクローン検出機能に加えて、セマンティックレベルでコードの異なるバージョン間の変更を特徴付けるように、及び/又は図2の特徴付けエンジン210及び/又は図3の重要度エンジン310を参照して本明細書にて説明された任意の機能を一般に実行するように、コードクローン検出部1316を構成することができる。
また、コードクローン解析コア1310は、図2の視覚化エンジン220を参照して前述されたように、特徴付け及び/又は重要度のレベルの視覚化のために情報を生成するように構成された差分ビジュアライザ1318を含む。
IDE1320は、拡張コードレビューユーザインターフェース(UI)1322と、解析ドライバ1326及びコードクローン解析コア1328を含むコードクローンプロバイダ1324とを含む。言語サービスコンポーネント1340及び他のデータプロバイダから情報を受け取るための機能は符号1342に設けられている。
アプリケーションサーバ1350を見ると、上述したようにある実施形態では、システムは、アプリケーションサーバ1350の一部としてコードクローン解析サービス1330を含む。コードクローン解析サービス1330は、インテリジェントコード差分処理を提供するためにサーバにコードクローン解析コア1332、コードクローン検索エンジン1334、及びコードクローン検出エンジン1336を含む。アプリケーションサーバ1350は、既存のサービス1352及びタスクマネージャ1354も含むことができる。
アプリケーションサーバ1350がコードクローン解析サービス1330を含む場合には、大規模なコードベース(例えば、複数のコードベースから数十〜何億ラインのコード)のインデックス付けを処理することができ、ユーザはより大きな範囲にコードクローンを検索することができる。これは、現在のソリューション内では新しいかもしれないが、他のソリューション内のソースコードの複製であるコードスニペット又は関数を決定する可能性を可能にする。これは、開発者/コードレビューアがコード変更のコンテキストをより良く理解することを容易にする。コードクローン解析サービス1330なしに、インテリジェントコード差分処理はコードクローン解析コア1310及びIDE1320を利用してクライアントで行われ、比較的小さなコードベースを処理することができるが、そのようなソリューションは、特に、軽量かつ便利である。
例示的なネットワーク環境と分散環境
この分野の当業者は、本明細書に記載のインテリジェントコード差分処理システム及び方法の様々な実施形態がコンピュータネットワークの一部として又は分散コンピューティング環境において配置され得る任意のコンピュータ又は他のクライアント又はサーバ装置に関連して実施され、また、任意の種類のデータストアに接続され得ることを理解することができる。この点で、本明細書に記載された様々な実施形態は、任意の数のメモリ又はストレージユニット、及び任意の数のストレージユニットに亘って生じる任意の数のアプリケーション及び処理を有する任意のコンピュータシステム又は環境で実施することができる。これは、限定されないが、リモート又はローカルストレージ装置を有する、ネットワーク環境又は分散コンピューティング環境に配置されたサーバコンピュータ及びクライアントコンピュータを有する環境を含む。
分散コンピューティングは、コンピューティング装置とシステムとの間の通信交換によってコンピュータリソース及びサービスの共有を提供する。これらのリソース及びサービスは、ファイル等のオブジェクトの情報、キャッシュストレージ及びディスクストレージの交換を含む。また、これらのリソース及びサービスは、負荷バランシングのための複数の処理ユニットに亘る処理能力の共有、リソースの拡大、処理の専門化等を含む。分散コンピューティングは、ネットワーク接続を利用して、クライアントが企業全体の利益のためにクライアントの集合的な力を活用することを可能にする。この点に関して、様々な装置は、本開示の様々な実施形態について記載された機構に加わることができるアプリケーション、オブジェクト、又はリソースを有しても良い。
図14は、ネットワーク化又は分散コンピューティング環境例の概略図を提供する。分散コンピューティング環境は、コンピューティングオブジェクト1410、1412等、コンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等を備え、それらはアプリケーション1430、1432、1434、1436、1438によって表されるようにプログラム、メソッド、データストア、プログラマブルロジック等を含むことができる。コンピューティングオブジェクト1410、1412等、及びコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等が、PDA、オーディオ/ビデオ機器、携帯電話器、MP3プレーヤ、パーソナルコンピュータ、ラップトップ等の異なる装置を含み得ることを理解することができる。
各コンピューティングオブジェクト1410、1412等、及びコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等は、1つ以上の他のコンピューティングオブジェクト1410、1412等、及びコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428と通信ネットワーク1440を介して直接又は間接的に通信することができる。図14に単一の要素として示されているにも関わらず、通信ネットワーク1440が図14のシステムにサービスを提供する他のコンピューティングオブジェクト及びコンピューティング装置を含んでも良く、及び/又は示されていない複数の相互接続されたネットワークを表しても良い。また、各コンピューティングオブジェクト1410、1412等、又はコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等は、通信又は本開示の様々な実施形態の実施に適した、API、又は他のオブジェクト、ソフトウェア、フレームウェア、及び/又はハードウェアを利用することができるアプリケーション1430、1432、1434、1436、1438等のアプリケーションを含めることができる。
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、及びネットワーク構成が存在する。例えば、コンピューティングシステムは、有線又は無線システムによって、ローカルネットワーク又は広分散ネットワークによって、互いに接続され得る。様々な実施形態で説明したようにコード差分処理システムに起こり得る例示的な通信のために任意のネットワークインフラストラクチャを用いることができるけれども、現在、多くのネットワークは、広分散コンピューティングのためのインフラストラクチャを提供し、多くの異なるネットワークを包含するインターネットに接続されている。
よって、クライアント/サーバ、ピアツーピア、又はハイブリッドアーキテクチャ等のネットワークトポロジ及びネットワークインフラストラクチャのホストを利用することができる。「クライアント」は、それが関連していない別のクラス又はグループのサービスを使用するクラス又はグループのメンバである。クライアントは、別のプログラム又は処理によって提供されるサービスを要求する処理、すなわち、おおよそ命令又はタスクのセットであり得る。クライアント処理は、別のプログラム又はサービス自体についての作業の詳細を「知る」必要なく、要求されたサービスを利用する。
クライアント/サーバアーキテクチャ、特に、ネットワーク化されたシステムでは、クライアントは通常、別のコンピュータ、例えばサーバによって提供される共有ネットワークリソースにアクセスするコンピュータである。図14の例示では、非限定的な例として、コンピューティングオブジェクト又は装置420、1422、1424、1426、1428等をクライアントとして考えることができ、コンピューティングオブジェクト1410、1412等はサーバとして考えることができる。そして、サーバとして動作するコンピューティングオブジェクト1410、1412等はクライアントコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等からデータを受信し、データを保存し、データを処理し、クライアントコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等にデータを送信するように、データサービスを提供する。しかしながら、任意のコンピュータは、状況に応じて、クライアント、サーバ又はその両方として考慮され得る。これらのコンピューティング装置のいずれかがデータを処理し、又は1つ以上の実施形態に関して本明細書に記載される如き差分技術に関係し得るトランザクションサービス又はタスクを要求しても良い。
サーバは、通常、インターネット又は無線ネットワークインフラストラクチャ等のリモート又はローカルネットワークを介してアクセス可能なリモートコンピュータシステムである。クライアント処理は、第1のコンピュータシステムでアクティブであっても良いし、サーバ処理は、通信媒体を介して互いに通信する第2のコンピュータシステムでアクティブであっても良いし、それにより、分散機能を提供し、複数のクライアントがサーバの情報収集を活用することができる。本明細書に記載された技術に従って利用された任意のソフトウェアオブジェクトは、スタンドアロンに設けられ、又は複数のコンピューティング装置又はオブジェクトに亘って分散することができる。
通信ネットワーク1440又はバスが例えば、インターネットであるネットワーク環境において、コンピューティングオブジェクト1410、1412等は、他のコンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等がハイパーテキスト転送プロトコル(HTTP)のような多数の既知のプロトコルのいずれかを介して通信するWebサーバであることができる。また、サーバとして動作するコンピューティングオブジェクト1410、1412等は、分散コンピューティング環境の特性とすることができるように、クライアント、例えば、コンピューティングオブジェクト又は装置1420、1422、1424、1426、1428等として機能することができる。
コンピューティング装置例
上述したように、都合の良いことに本明細書に記載された技術は、コード差分処理を行うことが望ましい任意の装置に適用可能である。よって、全ての種類のハンドヘルド、ポータブル及び他のコンピューティング装置とコンピューティングオブジェクトとが様々な実施形態に関連して使用のために考えられていることが理解され得る。従って、図15に記載された以下の汎用リモートコンピュータはコンピューティング装置の一例である。
必須ではないが、実施形態は、装置又はオブジェクトに関するサービスの開発者が使用するために、オペレーティングシステムを介して部分的に実施しても良く、及び/又は本明細書に記載された様々な実施形態の1つ以上の機能的態様を実行するために動作するアプリケーションソフトウェア内に含まれても良い。ソフトウェアは、例えば、クライアントワークステーション、サーバ又は他の装置等の1つ以上のコンピュータによって実行されるプログラムモジュール等のコンピュータ実行可能命令の一般的なコンテキストに記載されても良い。この分野の当業者は、コンピュータシステムがデータを通信するために使用され得る様々な構成及びプロトコルを有し、それにより、特定の構成又はプロトコルに限定されると考えるべきではないことを理解され得る。
図15は、コンピューティングシステム環境1500を例示している。コンピューティングシステム環境1500では、本明細書に記載の実施形態の1つ以上の態様を実施することができ、上記の記載で明確にしたけれども、コンピューティングシステム環境1500は適切なコンピューティング環境の一例に過ぎず、使用又は機能の範囲に関するいかなる限定も示唆する意図はない。また、コンピューティングシステム環境1500は、例示的なコンピューティングシステム環境1500に示されたコンポーネントのいずれか1つ又は組合せに関する依存性又は要件を有するものと解釈されるべきでない。
図15を参照すると、1つ以上の実施形態を実施するためのリモート装置例は、コンピュータ1510の形で汎用コンピューティング装置を含む。コンピュータ1510のコンポーネントは、限定されないが、処理ユニット1520、システムメモリ1530、及びシステムメモリを含む様々なシステムコンポーネントを処理ユニット1520と接続するシステムバス1522を含む。
コンピュータ1510は、通常、様々なコンピュータ可読媒体を含み、コンピュータ1510によってアクセス可能な任意の利用可能な媒体でありうる。システムメモリ1530は、ROM及び/又はRAM等の揮発性及び/又は不揮発性メモリの形でコンピュータ記憶媒体を含むことができる。また、コンピュータ可読媒体は、限定されないが、磁気記憶装置(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ)、光ディスク(例えば、CD、DVD)、スマートカード、及び/又は、フラッシュメモリ装置(例えば、カード、スティック、キードライブ)を含むことができる。例えば、限定されないが、システムメモリ1530は、オペレーティングシステム、アプリケーションプログラム、他のプログラムモジュール、及びプログラムデータも含むことができる。
ユーザは、入力装置1540を介してコンピュータ1510にコマンド及び情報を入力することができる。モニタ又は他のタイプのディスプレイ装置も、出力インターフェース1550等のインターフェースを介してシステムバス1522に接続されている。モニタに加えて、また、コンピュータは、出力インターフェース1550を介して接続され得るスピーカ及びプリンタ等の周辺出力装置を含むことができる。
コンピュータ1510は、リモートコンピュータ1570等の1つ以上のリモートコンピュータへの論理接続部を用いてネットワーク又は分散環境で動作しても良い。リモートコンピュータ1570は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス又は他の共通ネットワークノード、又は他の任意のリモートメディア消費又は送信装置であっても良く、コンピュータ1510に関して上述された要素のいずれか又は全てを含んでいても良い。図15に示された論理接続部は、LAN又はWAN等のネットワーク1572を含むが、他のネットワーク/バスも含むことができる。そのようなネットワーキング環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネット及びインターネットにおいて一般的である。
上述されたように、例示的な実施形態は様々なコンピューティング装置及びネットワークアーキテクチャに関連して説明してきたが、基本的な概念は、任意のネットワークシステム及び任意のコンピューティング装置又はシステムに適用され得る。
また、同一又は類似の機能、例えば、適切なAPI(アプリケーションプログラミングインターフェース)、ツールキット、ドライバソースコード、オペレーティングシステム、コントロール、スタンドアロン又はダウンロード可能なソフトウェアオブジェクト等を実装するための複数の方法があり、それはアプリケーション及びサービスが本明細書で提供された技術を活用することを可能にする。よって、本明細書の実施形態は、API(又は他のソフトウェアオブジェクト)の観点から、また、本明細書に記載された差分技術の1つ以上の態様を実施するソフトウェア又はハードウェアオブジェクトから考えられる。従って、本明細書に記載の様々な実施形態は、ハードウェアで全体的に、ハードウェアで部分的に、並びにソフトウェアで部分的に、及びソフトウェアにある態様を有することができる。
単語は「例示的」は、例、事例又は例示として提供することを意味するために本明細書で使用される。誤解を避けるために、本明細書に開示された要件は、そのような例に限定されるものではない。更に、「例示的」として本明細書に開示された任意の態様又は設計は、必ずしも他の態様又は設計よりも好ましい又は有利であると解釈されるべきでなく、この分野の当業者に知られている同等の例示的な構造及び技術を排除することを意味しない。更に、用語「含む(include)」、「有する」、「含む(contain)」及び他の類似の単語が使用され、誤解を避けるために、そのような用語は、任意の追加又は他の要素を排除することなく、オープントランジション(開放移行)単語として用語「備える」と同様に包括的であることを意図している。
上述されたように、本明細書に記載された様々な技術は、ハードウェア又はソフトウェア、適切な場合に両方を組み合わせと関連して実施されても良い。本明細書で使用されたように、用語「コンポーネント」、「システム」等は、同様に、コンピュータ関連のエンティティ、すなわちハードウェア、ハードウェアとソフトウェアとの組み合わせ、ソフトウェア、又は実行中のソフトウェアを言及することを意図している。例えば、コンポーネントは、限定されるものではないが、プロセッサで実行中の処理、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、及び/又はコンピュータであっても良い。例示のために、コンピュータ上で実行中のアプリケーション及びそのコンピュータの両方はコンポーネントとすることができる。1つ以上のコンポーネントは処理及び/又は実行スレッド内に常駐しても良く、コンポーネントは1つのコンピュータ上に局在されても良く、及び/又は2つ以上のコンピュータ間に分散されても良い。
上記のシステムは、あるコンポーネント間の相互作用に関して説明された。そのようなシステム及びコンポーネントは、それらのコンポーネント又は特定のサブコンポーネント、特定のコンポーネント又はサブコンポーネント、及び/又は追加のコンポーネントを含むことができ、また、前述の種々の置き換え及び組み合わせにより含むことができる。また、サブコンポーネントは、親コンポーネント(階層)内に含まれるよりもむしろ他のコンポーネントと通信可能に接続されたコンポーネントとして実装することができる。なお、1つ以上のコンポーネントが集約機能を提供する単一のコンポーネントに接続され、又は複数の別々のサブコンポーネントに分割されても良く、管理層等の任意の1つ以上の中間層が、統合機能を提供するためにそのようなサブコンポーネントに通信可能に接続されるように備えられても良い。また、本明細書に記載の任意のコンポーネントは、本明細書に特に記載されていないがこの分野の当業者によって通常知られた1つ以上の他のコンポーネントと相互作用を行っても良い。
上述の例示的なシステムの観点からは、記載された要件に従って実施され得る方法は、様々な図のフローチャートを参照して理解することができる。説明を簡単にするために、方法を一連のブロックとして示して説明したが、様々な実施形態は、本明細書に表現及び記載されたこととは、あるブロックが異なる順番で及び/又は他のブロックと同時に生じても良いように、ブロックの順に限定されないことが理解され認識されるべきである。非連続又は分枝の流れがフローチャートに図示されている場合に、様々な他の分岐、流れの経路、及びブロックの順序が実装されても良く、同一又は類似の結果を達成することができることが分かる。また、図示されていない全てのブロックは、後述の方法を実施するために必要とされ得る。
本明細書に記載の様々な実施形態に加えて、そこから逸脱することなく対応する実施形態の同一又は類似の機能を実行するために類似の他の実施形態を使用することができ、又は修正及び追加を説明された実施形態に行うことができることが理解されるべきである。更に、複数の処理チップ又は複数の装置は、本明細書に記載の1つ以上の機能のパフォーマンスを共有することができ、同様に、ストレージは複数の装置に亘って作用をもたらすことができる。従って、本発明は、任意の単一の実施形態に限定されるべきではなく、むしろ特許請求の範囲に応じて広さ、精神及び範囲で解釈されるべきである。

Claims (15)

  1. コードクローン検出を用いてインテリジェントコード差分処理を行う方法であって、
    実行に応答して、動作を行わせる命令を少なくとも1つのプロセッサによって実行するステップを備え、前記動作は、
    ソースコードの少なくとも2つのバージョンを受信することと、
    コードクローン検出を用いて前記ソースコードの少なくとも2つのバージョン間のコンテンツ変更のタイプ示す情報を生成することと、
    前記コンテンツ変更のタイプに重要度のレベルを関連づけて、重要度のレベルを示す情報を出力することと、を含み
    前記コンテンツの変更のタイプは、フォーマットの変更、字句の変更又は論理的変更に少なくとも基づいていることを特徴とする方法。
  2. コードの少なくとも2つの部分を出力することを更に備え、前記コードの少なくとも2つの部分は前記コードクローンの検出の出力に基づいて決定された互いに対応する前記ソースコードの少なくとも2つのバージョンの異なる部分に各々対応することを特徴とする請求項1に記載の方法。
  3. 前記ソースコードの少なくとも2つのバージョンは、ソースコードの第1のバージョン及びソースコードの第2のバージョンを備え、前記コードクローン検出を用いて第1のブランチで前記第1のバージョンを処理することと、前記コードクローン検出を用いて第2のブランチで前記第2のバージョンを処理することと、をさらに含むことを特徴とする請求項1に記載の方法。
  4. 少なくともコードクローン検出の出力に基づいて互いに対応する前記ソースコードの少なくとも2つのバージョンの異なる部分を決定すること、をさらに含み、
    前記決定することは、類似度の所定のレベルより高い類似度のレベルを互いに有する前記ソースコードの少なくとも2つのバージョンの前記異なる部分を決定することを含むことを特徴とする請求項1に記載の方法。
  5. クライアント装置からネットワークを介してサーバに設けられた前記コードクローン検出にアクセスすることを更に含むことを特徴とする請求項1に記載の方法。
  6. 前記重要度のレベルを示す情報を出力することは、前記コンテンツ変更のタイプに割り当てられた数値に基づいて、前記重要度のレベルを示す情報を出力することを特徴とする、請求項1に記載の方法。
  7. 前記フォーマットの変更は重要度の第1のレベルに対応し、前記字句の変更は重要度の第2のレベルに対応し、前記論理的変更は重要度の第3のレベルに対応し、前記重要度の第3のレベルは前記重要度の第2のレベルより大であり、前記重要度の第2のレベルは前記重要度の第1のレベルより大であることを特徴とする請求項1に記載の方法。
  8. コードクローン検出技術を用いるインテリジェントコード差分処理システムであって、
    ソースコードの少なくとも2つのバージョン間のコンテンツ変更のタイプの判定を示す情報を生成するように構成されたクローン検出コンポーネントと、
    前記ソースコードの少なくとも2つのバージョン間の前記コンテンツ変更の前記タイプと関連付けられた重要度のレベルを決定し、前記重要度のレベルを示す情報を出力するように構成された重要度エンジンと
    を備え
    前記重要度のレベルは、前記ソースコードの少なくとも2つのバージョン間の前記コンテンツ変更の前記タイプがフォーマットの変更、字句の変更又は論理的変更であるか否かに少なくとも基づいていることを特徴とするシステム。
  9. 前記フォーマットの変更は重要度の第1のレベルに対応し、前記字句の変更は重要度の第2のレベルに対応し、前記論理的変更は重要度の第3のレベルに対応し、前記重要度の第3のレベルは前記重要度の第2のレベルより大であり、前記重要度の第2のレベルは前記重要度の第1のレベルより大であることを特徴とする請求項に記載のシステム。
  10. 前記ソースコードの少なくとも2つのバージョン間の前記コンテンツ変更の前記タイプの特徴付けを決定するように構成された特徴付けエンジンを更に備え、前記特徴付けはセマンティック情報を含むことを特徴とする請求項に記載のシステム。
  11. 前記重要度エンジンは、前記特徴付けに少なくとも基づいて前記重要度のレベルを決定するように更に構成されていることを特徴とする請求項10に記載のシステム。
  12. 前記重要度エンジンは、前記特徴付けに値を割り当てるように更に構成されていることを特徴とする請求項11に記載のシステム。
  13. 前記値はパーセンテージであることを特徴とする請求項12に記載のシステム。
  14. 前記特徴付けは、新しいコードスニペット又は関数、複製されたコードスニペット又は関数、移動された関数、リネームされた関数、修正された関数、削除されたコードスニペット又は関数、又は移動及びリネームされた関数の組み合わせの少なくとも1つであることを特徴とする請求項11に記載のシステム。
  15. 前記重要度のレベルを示す情報の視覚化したものを生成し、及び出力するように構成された視覚化エンジンを更に含むことを特徴とする請求項に記載のシステム。
JP2013543486A 2010-12-15 2010-12-15 コードクローン検出を用いたインテリジェントコード差分処理 Active JP5775599B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2010/079801 WO2012079230A1 (en) 2010-12-15 2010-12-15 Intelligent code differencing using code clone detection

Publications (2)

Publication Number Publication Date
JP2013546090A JP2013546090A (ja) 2013-12-26
JP5775599B2 true JP5775599B2 (ja) 2015-09-09

Family

ID=46243972

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013543486A Active JP5775599B2 (ja) 2010-12-15 2010-12-15 コードクローン検出を用いたインテリジェントコード差分処理

Country Status (6)

Country Link
EP (1) EP2652621A4 (ja)
JP (1) JP5775599B2 (ja)
KR (1) KR101732764B1 (ja)
CN (1) CN103262047B (ja)
CA (2) CA2967251C (ja)
WO (1) WO2012079230A1 (ja)

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105446723B (zh) * 2014-09-02 2018-11-23 国际商业机器公司 用于标识源代码版本之间的语义区别的方法和装置
CN104407872B (zh) * 2014-12-04 2018-01-16 北京邮电大学 代码克隆的检测方法
KR101568224B1 (ko) 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
CN104572471B (zh) * 2015-01-28 2017-10-03 杭州电子科技大学 一种基于索引的Java软件代码克隆检测方法
WO2016130542A1 (en) 2015-02-10 2016-08-18 The Trustees Of Columbia University In The City Of New York Code relatives detection
JP2017156937A (ja) * 2016-03-01 2017-09-07 ヤンマー株式会社 端末装置およびソフトウェア書き換えプログラム
KR101780233B1 (ko) 2016-04-26 2017-09-21 고려대학교 산학협력단 소프트웨어의 코드 클론 탐지 장치 및 방법
US10191737B2 (en) 2016-06-29 2019-01-29 Accenture Global Solutions Limited Program code comparison and reporting
US10621195B2 (en) 2016-09-20 2020-04-14 Microsoft Technology Licensing, Llc Facilitating data transformations
US10706066B2 (en) 2016-10-17 2020-07-07 Microsoft Technology Licensing, Llc Extensible data transformations
US10776380B2 (en) 2016-10-21 2020-09-15 Microsoft Technology Licensing, Llc Efficient transformation program generation
US11170020B2 (en) 2016-11-04 2021-11-09 Microsoft Technology Licensing, Llc Collecting and annotating transformation tools for use in generating transformation programs
US11163788B2 (en) 2016-11-04 2021-11-02 Microsoft Technology Licensing, Llc Generating and ranking transformation programs
CN106919403B (zh) * 2017-03-16 2019-12-13 杭州鹿径科技有限公司 云环境下基于Java字节码的多粒度代码克隆检测方法
CN106951743A (zh) * 2017-03-22 2017-07-14 上海英慕软件科技有限公司 一种软件代码侵权检测方法
US10402311B2 (en) 2017-06-29 2019-09-03 Microsoft Technology Licensing, Llc Code review rebase diffing
SE1751167A1 (en) * 2017-09-20 2019-03-21 Empear Ab Identifying parts of a software code that are associated via alteration
CN109558314B (zh) * 2018-11-09 2021-07-27 国网四川省电力公司电力科学研究院 一种面向Java源代码克隆检测的方法
CN109828785B (zh) * 2019-01-23 2022-04-12 复旦大学 一种采用gpu加速的近似代码克隆检测方法
CN110737469B (zh) * 2019-09-29 2021-09-03 南京大学 一种功能粒度上基于语义信息的源代码相似度评估方法
US11048487B1 (en) * 2019-12-27 2021-06-29 The Mathworks, Inc. Syntactical change-resistant code generation
KR102282705B1 (ko) * 2019-12-30 2021-07-29 한양대학교 에리카산학협력단 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치
CN111240740B (zh) * 2020-01-23 2021-09-17 复旦大学 基于演化历史分析的代码克隆危害性评估方法
KR102318714B1 (ko) 2020-01-31 2021-10-28 고려대학교 산학협력단 바이너리 코드 클론 기반 소프트웨어 취약점 탐지를 위한 컴퓨터 프로그램
JP2022023523A (ja) 2020-07-27 2022-02-08 富士通株式会社 警告マッチングプログラム、警告マッチング方法及び警告マッチング装置
CN112148359B (zh) * 2020-10-10 2022-07-05 中国人民解放军国防科技大学 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
CN112215013B (zh) * 2020-11-02 2022-04-19 天津大学 一种基于深度学习的克隆代码语义检测方法
CN116302089B (zh) * 2023-05-23 2023-08-18 华中科技大学 基于图片相似度的代码克隆检测方法、系统及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08221265A (ja) * 1995-02-10 1996-08-30 Toshiba Corp ソフトウエア開発支援装置
DE102004010179A1 (de) * 2004-03-02 2005-10-06 Siemens Ag Verfahren und Datenverarbeitungsgerät zur Aktualisierung von Rechnerprogrammen per Datenübertragung
JP2006018693A (ja) * 2004-07-02 2006-01-19 Fujitsu Ltd 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法
JP2006277127A (ja) * 2005-03-28 2006-10-12 Canon Inc 修正プログラムの比較方法
JP4134218B2 (ja) * 2006-11-16 2008-08-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム
JP2008197982A (ja) * 2007-02-14 2008-08-28 Toshiba Corp ソースコード保護装置
JP2009176064A (ja) * 2008-01-24 2009-08-06 Fuji Electric Holdings Co Ltd ソフトウェアリファクタリング支援装置および方法
JP2009199172A (ja) * 2008-02-19 2009-09-03 Hitachi Ltd 情報処理システム、プログラム中の類似箇所特定方法、及びプログラム
JP5208635B2 (ja) * 2008-09-12 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム

Also Published As

Publication number Publication date
CA2967251A1 (en) 2012-06-21
CA2967251C (en) 2020-04-07
JP2013546090A (ja) 2013-12-26
KR20140001951A (ko) 2014-01-07
EP2652621A4 (en) 2014-08-20
CN103262047A (zh) 2013-08-21
CA2820758A1 (en) 2012-06-21
EP2652621A1 (en) 2013-10-23
WO2012079230A1 (en) 2012-06-21
KR101732764B1 (ko) 2017-05-04
CN103262047B (zh) 2016-11-16

Similar Documents

Publication Publication Date Title
JP5775599B2 (ja) コードクローン検出を用いたインテリジェントコード差分処理
US10540350B2 (en) Source code search engine
US11789715B2 (en) Systems and methods for transformation of reporting schema
US9811325B2 (en) Systems and methods for dynamically replacing code objects for code pushdown
US8429645B2 (en) Method for optimizing migration of software applications to address needs
JP2014503910A (ja) コードクローンの通知およびアーキテクチャの変更の視覚化
Fokaefs et al. Wsdarwin: Studying the evolution of web service systems
Ordiales Coscia et al. Anti-pattern free code-first web services for state-of-the-art Java WSDL generation tools
Bavota et al. The market for open source: An intelligent virtual open source marketplace
Schröder et al. An empirical investigation of command-line customization
US20160048487A1 (en) Functional component history tracking
Conforti et al. Analysis of business process variants in apromore
US20240111523A1 (en) Chained pull requests in a source code management system
Jiao et al. Towards a lightweight SOA framework for enterprise cloud computing
Cesario et al. DyeVC: an approach for monitoring and visualizing distributed repositories
Bhattacharyya et al. Automatic Code Clone Detection Technique Using SDG
Alturki Jory: A Tool for Feature Modelling Based on Product Families Algebra and BDDs
Cumbo et al. approved, 1 approved with reservations, 1 not approved
Cumbo et al. Selecting relevant nodes and structures in biological networks. BiNAT: a new plugin for Cytoscape [version 1; referees: 1 approved, 1 approved with reservations, 1 not approved]
Cumbo et al. approved with reservations 1, not approved 1

Legal Events

Date Code Title Description
RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20130827

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20130828

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140910

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140917

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141217

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150521

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150605

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150703

R150 Certificate of patent or registration of utility model

Ref document number: 5775599

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250