Share via


Localizar o código duplicado usando o código de detecção de Clone

Os clone de código são separados fragmentos de código que são muito semelhantes.É um fenômeno comum em um aplicativo que é desenvolvido por algum tempo. Os clone tornam difícil alterar seu aplicativo porque você precisará localizar e atualizar mais de um fragmento.O Visual Studio pode ajudar a localizar clone de código para que você possa refactor eles.

Você pode localizar os ou clone de um fragmento específico, ou localizar todos os clone em sua solução.Além da descoberta de cópias diretas, a ferramenta de análise de clone pode localizar os fragmentos em que diferem em nomes de variáveis e parâmetros, e algumas declarações em que foram reorganizadas.

Pesquisas do analisador de clone de código para o código duplicado em projetos Visual C# e visual Basic em toda sua solução do Visual Studio.

Resultado da análise do código clone com correspondências de alta seguras

Para localizar clone de um fragmento de código específico

  1. Realçar um fragmento de código dentro de um método ou de uma definição get/conjunto.

    ObservaçãoObservação

    Você pode localizar clone das instruções, mas não declarações como o campo de método, ou as assinaturas da propriedade.

  2. Em o menu de atalho para o fragmento, escolha Clone de correspondência de localização na solução.

Use este método quando você deseja saber se houver um método ou semelhante fragmenta já existente na sua solução.

Para localizar todos os clone em uma solução

  • Em o menu de analisar , escolha Analisar a solução para clone de código.

Este método é particularmente útil quando você está examinando seu código.

ObservaçãoObservação

Os clone que é menor que 10 declarações não são descobertos tempo por este comando.

Os resultados são apresentados por ordem de similaridade.Expanda cada item para ver os fragmentos de código.

Observe que as semelhanças são detectadas mesmo se as variáveis locais que são usados pelos fragmentos têm nomes diferentes, e mesmo se quaisquer instruções foram inseridas ou excluídas.

Para comparar clone

  1. Em a janela de, selecione Resultados do clone de código dois arquivos, ou um grupo de clone que contém dois arquivos.

  2. Escolha Comparar do menu de atalho.

Este recurso usa a mesma ferramenta de comparação que é usado em versões comparando o controle de origem.Se você desejar alterar o Opções , escolha no menu de Ferramentas .Expanda Controle de Código-fonte e O Visual Studio Team Foundation Server.Escolha Configurar Ferramentas do Usuário e em seguida Adicionar.

Para excluir arquivos ou métodos específicos de análise

  1. Adicione um novo arquivo XML para o projeto do Visual Studio em que os métodos que você deseja excluir são definidos.

    Não importa se o arquivo é parte do projeto.Deve estar no diretório superior do projeto.

  2. Altere a extensão de nome de arquivo para .codeclonesettings

  3. Edite o conteúdo do arquivo para que se assemelha o exemplo a seguir.

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

Clonar código que será localizado?

O analisador de clone de código encontrará “não possui clone da próxima”.

Os clone de código geralmente resultam de desenvolvedores que copia o código e que adaptam no para o novo local.Portanto é mais fácil considerar o grau de alteração que pode ser feito antes que o analisador não encontrar o clone.As seguintes alterações podem ser feitas, e o clone será reconhecida ainda.Em cada caso, há uma tolerância de um número específico de essas alterações:

  • Renomear identificadores.

  • Inserir e excluir instruções.

  • Reordenar instruções.

Hh205279.collapse_all(pt-br,VS.110).gifQue duplicatas não estarão localizadas?

  • Declarações de tipo não é comparada.Por exemplo, se você tem duas classes com conjuntos muito semelhantes de declarações de campo, não serão relatadas como clone.

    Somente as instruções em métodos e as definições de propriedade é comparada.

  • Analisar a solução para clone de código não localiza os clone que é menor que 10 instruções tempo.

    Em o entanto, você pode aplicar a um Clone de correspondência de localização na solução partes menores.

  • Fragmentos tokens alterados com mais de 40%.

  • Se um projeto contém um arquivo de .codeclonesettings , elementos de código que são definidos no projeto não serão pesquisados se são nomeados na seção de Exclusions do arquivo de .codeclonesettings .

  • Alguns tipos de código gerado:

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

    2. Métodos InitializeComponent

    Em o entanto, isso não é automaticamente aplica a todo o código gerado.Por exemplo, se você usar modelos de texto, convém excluir os arquivos os nomes gerados em um arquivo de .codeclonesettings .

Quando usar a análise do clone de código

Localizar clone é geralmente útil nos seguintes casos:

  • Para atualizar o código existente. Quando você estiver corrigindo um erro, ou é responder a alterações nos requisitos, você inicia geralmente localizando o local no código que você precisa alterar.Antes que você fez a alteração, pesquisa para clone do segmento de código.Se os clone são descobertos:

    1. Considere se você precisar fazer a mesma mudança a cada clone.

    2. Considere também se esta é uma boa oportunidade refatorar o código clonados em um método ou uma classe compartilhada.

  • Limpeza web. Para o final da cada iteração, use Analisar a solução para clone de código no menu de Analisar .

  • quando você criar o código. Quando você escreveu o novo código, use a ferramenta para localizar o código semelhante que já existir.

Aplicando a análise do clone a uma grande base de código

O código é copiado geralmente entre partes de um grande o suficiente separadas projeto, e copiado geralmente a partes diferentes de uma organização.Você deve portanto procurar os clone tão grandes em uma base de código como você pode, não apenas na solução imediata em que você está trabalhando.

Para aplicar o analisador de clone de código através da árvore de origem, crie uma solução que contém todos os projetos no armazenamento.

DicaDica

Lembre-se de que você pode incluir um projeto em mais de uma solução.Para analisar vários projetos para clone de código, você pode criar uma solução que inclui todos os projetos.Você não precisa remover projetos de soluções através de que geralmente são acessados.

Código gerado

A análise do clone de código não funciona bem com código gerado.Por exemplo:

Para excluir os arquivos gerados pelos modelos T4 de código clonar a análise

  1. Coloque os modelos em um diretório secundária de projeto do Visual Studio.Nomeie-o, por exemplo, GeneratedFiles.

  2. Adicione um novo arquivo de texto ao projeto, e modificar seu nome e a extensão t4Exclusions.codeclonesettings

  3. Modificar o conteúdo do arquivo como segue:

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