Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los Clones de código son fragmentos separados del código que son muy similares.Son un fenómeno común en una aplicación que ha estado en desarrollo durante algún tiempo. Los clones hacen que la aplicación sea difícil de cambiar porque tienen que buscar y actualizar más de un fragmento.Visual Studio puede ayudarle a encontrar los clones del código para que pueda refactorizarlos.
Se pueden encontrar clones de un fragmento específico o todos los clones en la solución.Además de detectar las copias directas, la herramienta de análisis de clones puede encontrar los fragmentos que difieren en los nombres de variables y parámetros y en los que se han reorganizado algunos extractos.
El analizador de clones busca código duplicado en proyectos de Visual C# y Visual Basic en la solución de Visual Studio.
.png)
Para buscar clones de un fragmento de código determinado
Resalte un fragmento de código dentro de un método o una definición get/set.
[!NOTA]
Se pueden encontrar clones de extractos, pero no declaraciones como campo, método o de firmas de la propiedad.
En el acceso directo del fragmento, elija Buscar clones coincidentes en la solución.
Utilice este método si desea buscar un método similar o fragmentos ya existentes en la solución.
Para buscar todos los clones en una solución
- En el menú Analizar, elija Analizar clones de código de la solución.
Este método es especialmente útil cuando está revisando el código.
[!NOTA]
Los clones que tienen menos de 10 extractos no son detectados por este comando.
Los resultados se muestran en orden de similitud.Expanda cada elemento que se va a considerar para codificar los fragmentos.
Observe que las similitudes se detectan incluso si las variables locales que se utilizan en los fragmentos tienen nombres diferentes, e incluso si se han insertado o eliminado algunos extractos.
Para comparar clones
En la ventana Resultados de clonación de código, seleccione dos archivos o un grupo de clonación que contiene dos archivos.
Elija Comparar en el acceso directo.
Esta característica utiliza la misma herramienta de comparación que se utiliza para comparar versiones bajo control del código fuente.Si se desea modificar, elija Opciones desde el menú Herramientas.Expanda Control de código fuente y Visual Studio Team Foundation Server.Elija Configurar herramientas de usuario y después Agregar.
Para excluir archivos concretos o métodos del análisis
Agregue un nuevo archivo XML al proyecto de Visual Studio en el que se definen los métodos que desea excluir.
No importa si el archivo es parte del proyecto.Debe estar en el directorio superior del proyecto.
Cambie la extensión de nombre del archivo a .codeclonesettings.
Edite el archivo de modo similar al siguiente ejemplo.
<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>
¿Qué clones de código se van a encontrar?
El analizador de clones de código encontrará los "quasiclones".
Los clones de código suelen derivarse de que desarrolladores copian código y luego lo adaptan a la nueva ubicación.Por consiguiente es más fácil ver los cambios que se pueden hacer antes de que el analizador falle al encontrar el clon.Las modificaciones siguientes pueden hacerse, y se seguirá reconociendo el clon.En cada caso, hay tolerancia para un número concreto de estas modificaciones:
Cambiar el nombre de los identificadores.
Insertar y eliminar extractos.
Reorganizar los extractos.
¿Qué duplicados no serán encontrados?
Las declaraciones de tipos no se comparan.Por ejemplo, si se tienen dos clases con conjuntos muy similares de declaraciones de campo, no se mostrarán como clones.
Sólo los extractos en métodos y definiciones de propiedad se comparan.
Analizar clones de código de la solución no encontrará clones que tengan menos de 10 extractos de longitud.
Sin embargo, se puede aplicar Buscar clones coincidentes en la solución a fragmentos más cortos.
Fragmentos con más del 40% de los tokens modificados.
Si un proyecto contiene un archivo .codeclonesettings, los elementos de código que se definen en ese proyecto no se buscan si se llaman en la sección Exclusions del archivo .codeclonesettings.
Algunos tipos de código generado:
*.designer.cs, *.designer.vb
Métodos InitializeComponent
Sin embargo, esto no se aplica automáticamente a todo el código generado.Por ejemplo, si se utilizan las plantillas de texto, quizá quiera excluir los archivos generados denominándolos en un archivo .codeclonesettings.
Cuándo utilizar el análisis de clonación de código
Encontrar clones suele ser útil en los siguientes casos:
Al actualizar el código existente. Cuando se corrige un error, o se responde a los cambios en los requisitos, se inicia normalmente encontrando la ubicación en el código que se necesita cambiar.Antes de realizar el cambio, busque clones de ese segmento de código.Si se detectan clones:
Considere si se debe realizar el mismo cambio en cada clon.
Considere también si ésta es una buena oportunidad para refactorizar el código duplicado en un método o clase compartidos.
Limpieza de arquitectura. Hacia el final de cada iteración, utilice Analizar clones de código de la solución en el menú Analizar.
Cuando se crea código. Cuando se haya escrito nuevo código, utilice la herramienta para buscar el código similar que ya existía.
Análisis de clonación que se aplica a un código base extenso
El código se copia a menudo entre partes muy independientes de un proyecto grande y se copia a diferentes partes de una organización.Por consiguiente, se deberían buscar clones en un código base tan grande como se pueda, no sólo en la solución inmediata en la que se está trabajando.
Para aplicar el analizador de clones de código a través del árbol de origen, cree una solución que contenga todos los proyectos en el repositorio.
Sugerencia |
|---|
Recuerde que se puede incluir un proyecto en más de una solución.Para analizar muchos proyectos para clones del código, se puede crear una solución que incluya todos los proyectos.No necesita quitar proyectos de las soluciones mediante las cuales se accede normalmente. |
Código generado
El análisis de clonación de código no funciona bien con código generado.Por ejemplo:
Código generado de las plantillas T4.
Para obtener más información sobre T4, vea Generación de código y plantillas de texto T4.
Código generado de un diseñador como los diseñadores de interfaz de usuario de Silverlight o de WPF.
Para excluir archivos generados por las plantillas T4 del análisis de clonación de código
Coloque las plantillas en un subdirectorio del proyecto de Visual Studio.Denomínelo, por ejemplo, GeneratedFiles.
Agregue un nuevo archivo de texto al proyecto y cambie su nombre y extensión a t4Exclusions.codeclonesettings
Cambie el contenido del archivo como sigue:
<CodeCloneSettings> <Exclusions> <File>GeneratedFiles\*.cs</File> </Exclusions> </CodeCloneSettings>
Sugerencia