Page tree

 

Ya soy un experto y estoy aquí para ayudar: ¡contesta preguntas pendientes y gana puntos!

Skip to end of metadata
Go to start of metadata

Tabla de contenidos

Mucha gente argumentará que los Duplicados son el peor de los pecados capitales del desarrollo, porque está perpetuando y esparciendo el resto de pecados. Por ejemplo, copiar y pegar un bloque de código duplica su incumplimiento de estándares, sus defectos potenciales, y el resto de cosas. Podría definirse como un "meta-pecado", si lo prefieres.

Para ayudarte a detectar y eliminar los duplicados, SonarQube utiliza su propio motor de detección de copiar/pegar, que permite detectar código repetido en los siguientes escenarios:

  • Dentro de un fichero del código fuente
  • A lo largo de múltiples ficheros en un proyecto
  • A lo largo de múltiples módulos en un proyecto
  • A lo largo de múltiples proyectos

SonarQube permite detecter duplicados de "Tipo 2" que significa que detecta fragmentos idénticos estructural y sintácticamente excepto para variaciones en literales y comentarios. Un trozo de código se considera como duplicado tan pronto como haya al menos 100 palabras sucesivas repetidas (este parámetro puede configurarse si se considera necesario a través de la propiedad sonar.cpd.${language}.minimunTokens) en al menos 10 líneas de código (parámetro que puede configurarse con la propiedad sonar.cpd.${language}.minimumLines). Para los proyectos en Java, el mecanismo de detección de duplicados se comporta de forma ligeramente diferente ya que un trozo de código se considera duplicado tan pronto que se repita la misma secuencia de 10 sentencias sucesivas cualquier que sea el número de líneas y de palabras.

Buscando los duplicados

Añade el widget de Duplicados en el cuadro de mando:

Desde ahí, puedes acabar navegando en el visor de componentes:

Para poder mostrar el código fuente de un bloque particular puedes hacer click sobre el nombre del fichero.

Activación de detección cruzada de duplicados en módulos y en proyectos

Por defecto, el alcance de la detección de duplicados es el proyecto para un análisis estándar, y el módulo para un análisis multi-modulo.

Para detectar duplicados entre módulos de tu proyecto y entre diferentes proyectos en tu instancia de SonarQube, debes autenticarte como administrador del sistema, y navegar a la opción Configuración > Configuración General > General > Duplicados y activar la propiedad de Cross project duplication detection. Deberás volver a ejecutar el análisis en tus proyectos. 

También tienes la opción de activar esta propiedad a nivel de proyecto en Configuración de proyecto > General > Duplicados

Algunas cuestiones a tener en cuenta:

  • Por razones técnicas, los duplicados cruzados entre módulos se detectarán solamente después del segundo análisis del proyecto
  • La detección cruzada de duplicados entre proyectos se desactiva automáticamente cuando se analiza un proyecto con la propiedad sonar.branch 

Buenas prácticas

  • Siempre comprueba los duplicados de un fichero antes de modificarlo. Si hay algunos entonces:
    • Analiza los duplicados y elimínalos utilizando herencia o cualquier otro patrón adecuado (hazlo solo si tienes pruebas unitarias en los bloques que vas a cambiar)
    • No te olvides de replicar tus cambios siempre que sea necesario en todos los bloques de código duplicado
  • Utiliza las evidencias y la deuda técnica para ayudar a monitorizar el coste de remedio de este pecado capital editando tu perfil de calidad e incluyendo la regla Duplicated Blocks del repositorio común de SonarQube (Common Sonar)

Temas relacionados

Puedes leer el siguiente artículo del blog de SonarQube oficial (en inglés): Manage Duplicated Code with Sonar.

  • No labels