コード複製検出を使用した重複コードの検出

コード重複は 非常に似ている別のコード片です。これらは開発中に一定期間中のアプリケーションの共通現象です。 重複は複数のフラグメントを見つけて更新する必要があるため、アプリケーションを変更することが困難になります。Visual Studio は、リファクタリングできるようにコード複製を見つけやすくすることができます。

特定のフラグメントの複製を検索したり、ソリューションのすべての複製を検索します。直接コピーの検出に加えて、重複の分析ツールは、ステートメントが再配置されるのかを変数とパラメーターの名前で異なる、フラグメントを検索できます。

コードの重複アナライザーでは、Visual Studio のソリューション内の C# および Visual Basic のプロジェクトの重複コードを検索します。

強い一致があるコード複製分析結果

特定のコード片の複製を検索するには

  1. メソッドまたは get 関数と set 定義内のコードのフラグメントを強調表示します。

    [!メモ]

    フィールドなど、宣言ステートメント、メソッド、またはプロパティの定義の複製を検索できます。

  2. フラグメントのショートカット メニューで、**[ソリューション内で一致する複製を検索]**を選択します。

同様のメソッドがわかりませんある場合思ったりまたはソリューションの既存のかどうかを既に分解するときにこのメソッドを使用します。

ソリューション内のすべての複製を検索するには

  • 解析します。*** で、メニューの **[コード複製のソリューションの分析]**を選択します。

この方法は、コードを確認する場合に特に便利です。

[!メモ]

以下に、複製は、このコマンドにより、10 のステートメントが検出されません。

結果は類似の順序で示されます。コード片を確認するために各項目を展開します。

フラグメントで使用されているローカル変数に異なる名前がある場合でも、いくつかのステートメントを挿入、または削除された類似点が検出されることに注意してください。

複製を比較するには

  1. 重複の結果をコード。*** のペインで、2 ファイルを、2 ファイルを含む重複のグループを選択します。

  2. ショートカット メニューの [比較] を選択します。

この機能は、ソース管理のバージョンを比較するために使用されるものと同じ比較ツールを使用します。これを変更する場合は、[ツール] のメニューから [オプション] を選択します。[ソース管理] と **[Visual Studio Team Foundation Server]**を展開します。次に [ユーザー ツールの構成]追加を選択します。

特定のファイルまたはメソッドを分析から除外する

  1. 除外するメソッドが定義されている Visual Studio の新しい XML ファイルをプロジェクトに追加します。

    ファイルがプロジェクトの一部であるかどうかは重要ではありません。これは、プロジェクトの最上位ディレクトリに置く必要があります。

  2. .codeclonesettingsにファイル名拡張子を変更します。

  3. 次の例に従って、ファイルの内容を編集します。

    <CodeCloneSettings>
      <Exclusions>
        <!-- Add any combination of the following node types. -->
        <!-- Absolute or relative path names: -->
        <File>MyFile.cs</File>
        <!-- Filepaths may contain wildcards: -->
        <File>GeneratedFiles\*.cs</File>
        <!-- Namespace, Type, and FunctionName must be fully qualified: -->
        <Namespace>MyCompany.MyProject</Namespace>
        <Type>MyCompany.MyProject.MyClass1</Type>
        <FunctionName>MyCompany.MyProject.MyClass2.MyMethod</FunctionName>
        <!-- Names may contain wildcards: -->
        <Namespace>*.AnotherProject</Namespace>
        <Type>*.AnotherClass*</Type>
        <FunctionName>MyProject.*.AnotherMethod</FunctionName>
      </Exclusions>
    </CodeCloneSettings>      
    

どのコードが検索されます複製しますか。

コードの重複アナライザーは 「近い Miss」の複製を検索します。

複製を頻繁に発生しますコードをコピーし、新しい場所に取り組んでいる開発者にコード。したがって、アナライザーで複製を見つける前に行うことができる変更の程度を考慮することが簡単です。次の変更を行うことができます。重複はまだ認識されます。各ケースでは、このような変更を特定の数の許容範囲があります:

  • 名前の変更の識別子。

  • Insert、および Delete の各ステートメント。

  • ステートメントを変更する。

Hh205279.collapse_all(ja-jp,VS.110).gifどのような重複が検出されないでしょうか。

  • 型宣言は比較されません。たとえば、フィールドの宣言はよく似たセットを持つ 2 個のクラスがある場合、重複として報告されません。

    メソッドとプロパティ定義のステートメントだけが比較されます。

  • [コード複製のソリューションの分析] は最大 10 文字までのステートメントである複製を検索しません。

    ただし、短いフラグメントに [ソリューション内で一致する複製を検索] を適用できます。

  • 40% 以上変更されたトークンを含むフラグメント。

  • プロジェクトが .codeclonesettings ファイルが存在する場合、そのプロジェクトで定義されたコード要素は .codeclonesettings ファイルの Exclusions のセクションで検索する場合。

  • 一部のコード:

    1. *.designer.cs, *.designer.vb

    2. InitializeComponentメソッド

    ただし、すべてのコード生成に自動的に適用されません。たとえば、テキスト テンプレートを使用すると、.codeclonesettings ファイルで参照することによって生成されたファイルを削除する必要があります。

いつ重複のコード分析を使用します。

複製を検索するには、次の場合には便利です:

  • **既存のコードを更新する場合。**バグを修正したり、要件の変更に応答する場合、通常は変更することを必要とするコードの場所を検索します。変更を加える前に、そのコード セグメントの複製を検索します。重複が検出されている場合:

    1. 各重複と同じ変更を加える必要があるかどうかを検討します。

    2. これは、共有メソッドまたはクラスにリファクタリングすることができます。複製されたコードかどうかも検討してください。

  • アーキテクチャ クリーンアップ。各イテレーションの終了に向けて、[分析] のメニューの [コード複製のソリューションの分析] を使用します。

  • **コードを作成する場合。**新しいコードを作成する場合、既にあるかのようなコードを検索するには、ツールを使用します。

大規模なコード ベースに対する重複分析の適用

コードは、大規模なプロジェクトで、個々のパートの間でコピーして、組織の異なる部分にコピーします。したがって、と同様に、が行われた直前のソリューションのコード ベース、大規模な複製を検索する必要があります。

ソース・コードのツリー間で重複のアナライザーを追加するには、リポジトリすべてのプロジェクトを含むソリューションを作成します。

ヒントヒント

ソリューションに複数のプロジェクトを含めることができることに注意してください。コードの重複の多くのプロジェクトを分析するには、すべてのプロジェクトを含むソリューションを作成できます。通常、アクセス ソリューションからプロジェクトを削除する必要はありません。

生成されたコード

重複のコード分析は、コード生成に使用しません。以下はその例です。

  • T4 テンプレートから生成されたコード。

    T4 の詳細については、「コード生成と T4 テキスト テンプレート」を参照してください。

  • WPF または Silverlight のユーザー インターフェイス デザイナーなどのデザイナー コードから生成します。

T4 テンプレートによって生成されたコードからファイルを除外するには、分析をその複製を作成します

  1. Visual Studio プロジェクトのサブ ディレクトリにテンプレートを設定します。これは、たとえば、GeneratedFilesという名前を付けます。

  2. 新しいテキスト ファイルをプロジェクトに追加し、t4Exclusions.codeclonesettingsに名前と拡張子を変更します。

  3. 次のようにファイルの内容を変更する:

    <CodeCloneSettings>
      <Exclusions>
        <File>GeneratedFiles\*.cs</File>
      </Exclusions>
    </CodeCloneSettings>