Partager via


Recherche du code dupliqué à l'aide de Code Clone Detection

Les clones de code sont distincts des fragments de code qui sont très similaires.Ils sont un phénomène commun dans une application qui était en cours de développement pendant quelque temps. Les clones rendent difficile à modifier votre application car vous devez rechercher et mettre à jour plusieurs fragments.Visual Studio peut vous aider à trouver des clones de code pour pouvoir les refactorisation.

Vous pouvez rechercher ou clones d'un fragment spécifique, ou recherchez tous les clones dans votre solution.En plus de découvrir des copies directes, l'outil d'analyse de clone peut trouver les fragments qui diffèrent dans les noms des variables et des paramètres, et dans laquelle certaines instructions ont été réorganisées.

Les recherches de l'analyseur de clone de code pour le code en double dans visual C# et les projets Visual Basic dans toute votre solution Visual Studio.

Résultats d'analyse de clones de code avec des correspondances fortes

Pour rechercher des clones d'un fragment de code particulier

  1. Mettez en surbrillance un fragment de code dans une méthode ou un get/définition de positionnement.

    [!REMARQUE]

    Vous pouvez rechercher des clones les instructions, mais pas les déclarations telles que le champ, de la méthode, ou les signatures de propriété.

  2. Dans le menu contextuel du fragment, choisissez Clones de correspondance de recherche de solution.

Utilisez cette méthode lorsque vous voulez savoir si une méthode ou un fragment est déjà en existence dans votre solution.

Pour rechercher tous les clones dans une solution

  • Dans le menu analysez , choisissez analysez la solution pour des clones de code.

Cette méthode est particulièrement utile lorsque vous examinez votre code.

[!REMARQUE]

Des clones qui sont moins de 10 instructions longue ne sont pas découverts par cette commande.

Les résultats sont présentés dans l'ordre ressemblance.Développez chaque élément pour afficher les fragments de code.

Notez que les points communs sont détectées même si les variables locales utilisées par les fragments ont des noms, et même si certaines instructions ont été insérées ou supprimées.

Pour comparer des clones

  1. Dans la fenêtre Le code les résultats de clone , sélectionnez deux fichiers, ou un groupe de clone qui contient deux fichiers.

  2. Choisissez Comparer dans le menu contextuel.

Cette fonctionnalité utilise le même outil de comparaison utilisé pour comparer des versions sous contrôle de code source.Si vous souhaitez que la modifier, choisissez Options le menu Outils .Développez Contrôle de code source, puis Visual Studio Team Foundation Server.Choisissez Configurez les outils utilisateur puis Ajouter.

Pour exclure des fichiers spécifiques ou des méthodes d'analyse

  1. Ajoutez un nouveau fichier XML au projet Visual Studio dans lequel les méthodes que vous souhaitez exclure sont définies.

    Il n'importe pas si le fichier fasse partie du projet.Il doit se trouver dans le dossier supérieur du projet.

  2. Attribuez l'extension de nom de fichier .codeclonesettings au fichier.

  3. Modifiez le contenu du fichier afin qu'il ressemble à l'exemple suivant.

    <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>      
    

Le code clone sera trouvé ?

l'analyseur de clone de code recherchera des clones « d'échec proche ».

Le code des clones résultent souvent des développeurs copiant le code puis l'adaptant à son nouvel emplacement.Il est donc le plus facile de déterminer le degré de modification qui peut être effectuée avant de échec de l'analyseur pour rechercher le clone.Les modifications suivantes peuvent être effectuées, et le clone sera toujours identifié.Dans chaque cas, il existe une tolérance d'un nombre spécifique de ces modifications :

  • Renommez les identificateurs.

  • Insérer et supprimer des instructions.

  • Réorganisez les instructions.

Hh205279.collapse_all(fr-fr,VS.110).gifLes doublons ne sont pas identifiés ?

  • Les déclarations de type ne sont pas comparées.Par exemple, si vous avez deux classes avec des ensembles très similaires des déclarations de champ, elles ne sont pas stockées comme des clones.

    Seules les instructions dans les méthodes et de propriété sont comparées.

  • analysez la solution pour des clones de code ne recherche pas les clones qui sont moins de 10 instructions de temps.

    Toutefois, vous pouvez appliquer Clones de correspondance de recherche de solution à des fragments plus courts.

  • Fragments avec plus la modification de par 40%.

  • Si un projet contient un fichier d' .codeclonesettings , les éléments de code qui sont définis dans ce projet ne sont pas détectés s'ils sont nommés dans la section d' Exclusions du fichier d' .codeclonesettings .

  • Certains genres de code généré :

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

    2. Méthodes InitializeComponent

    Toutefois, cela ne s'applique pas automatiquement à tout le code généré.Par exemple, si vous utilisez des modèles de texte, vous pouvez exclure les fichiers générés en nommant dans un fichier d' .codeclonesettings .

Quand utiliser l'analyse de clone de code

Rechercher des clones est généralement utile dans les cas suivants :

  • en mettant à jour le code existant. Lorsque vous résolvez un bogue, ou répondre aux modifications des spécifications, vous démarrez généralement par rechercher l'emplacement dans le code que vous devez modifier.Avant d'apporter la modification, recherchez des clones de ce segment de code.Si des clones sont découverts :

    1. Déterminez si vous devez apporter la même modification à chaque clone.

    2. Déterminez également si c'est une bonne opportunité de refactoriser le code cloné dans une méthode ou une classe partagée.

  • nettoyage architectural. Vers la fin de chaque itération, utilisez analysez la solution pour des clones de code dans le menu Analyser .

  • Lorsque vous créez le code. Lorsque vous avez écrit le nouveau code, utilisez l'outil pour rechercher du code semblable qui a déjà existé.

Appliquer l'analyse de clone à une base de code

Le code est souvent copié entre les parties assez différentes d'un grand projet, et est souvent copié à différentes parties d'une organisation.Vous devez donc trouver des clones dans le plus grand une base de code que vous pouvez, pas seulement dans la solution immédiate sur laquelle vous travaillez.

Pour appliquer l'analyseur de clone de code au sein de votre arborescence de source, créez une solution qui contient tous les projets dans la base de données de référentiel.

ConseilConseil

Souvenez -vous que vous pouvez inclure un projet dans plusieurs solutions.Pour analyser de nombreux projets pour des clones de code, vous pouvez créer une solution qui inclut tous les projets.Vous n'avez pas besoin de supprimer les projets des solutions dans lesquelles ils sont généralement accessibles.

Code généré

l'analyse de clone de code ne fonctionne pas bien avec le code généré.Par exemple :

  • Le code généré les modèles T4.

    Pour plus d'informations concernant T4, consultez Génération de code et modèles de texte T4.

  • Le code généré d'un concepteur tel que les générateurs d'interface utilisateur Silverlight et WPF.

Pour exclure des fichiers générés par les modèles T4 du code clonez l'analyse

  1. Définissez les modèles dans un sous-dossier de projet Visual Studio.Nommez -la, par exemple, GeneratedFiles.

  2. Ajoutez un nouveau fichier texte au projet, puis remplacez son nom et son extension en t4Exclusions.codeclonesettings

  3. Modifiez le contenu du fichier comme suit:

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