Professional Documents
Culture Documents
Las mtricas que muestra el cuadro de mando de Sonar por defecto para cada proyecto son las que
veremos a continuacin.
1. Complejidad
Cuando en Sonar se habla de complejidad se refiere a complejidad ciclomtica (te recomiendo aqu este
post complejidad ciclomtica, o la mtrica esencial para evaluar el diseo software). La parte del cuadro
de mando que trata sobre ello es la que se muestra en la siguiente figura.
Los mtodos get() y set() (accesores) no entran en esta cuenta, es decir, Sonar no aumenta en 1 la
complejidad ciclomtica total al encontrar la cabecera de un mtodo de este tipo.
Un ejemplo del clculo de la complejidad ciclomtica en Sonar para Java sera el de la Figura 3.
En lo que refiere a complejidad el cuadro de mando muestra tres tipos: la de mtodo, la de clase, la de
fichero y la total.
El valor que aparece en la Figura 2 es una media global de nuestro programa analizado. Si queremos ver
este valor desglosado, accediendo a alguna clase del sistema nos encontraremos una seccin parecida a
la siguiente:
El valor de complejidad/mtodo que aparece en cada clase, es el valor total de complejidad ciclomtica de
esa clase dividido entre el nmero de mtodos. En el ejemplo de la Figura 2 sera:
Complejidad total (Total): Es la complejidad ciclomtica total del sistema (es decir, el sumatorio de la
complejidad ciclomtica de todos los mtodos de nuestro software).
De todos estos valores que nos muestra el cuadro de mando principal de Sonar (ver Figura 2), los valores
de los que se puede deducir ms informacin acerca de la calidad nuestro sistema son de la
complejidad/mtodo y por clase.
Por ello, le parmetro del cuadro de mando de ms utilidad es la complejidad/mtodo, que, igualmente, no
debera ser ms de 30.
Por ltimo, un valor muy alto de complejidad ciclomtica por clase, debido a su propia definicin, nos
indica sntomas de un mal diseo, hace que el cdigo sea ms difcil de entender y dificulta la cobertura
de pruebas unitarias, puesto que habra que realizar ms test para probar cada uno de los caminos
independientes extra de nuestro cdigo. En este post complejidad ciclomtica, o la mtrica esencial para
evaluar el diseo software, viene todo explicado.
Una buena ayuda para ver esto es emplear las nubes de palabras (Figura 5) que ofrece Sonar, a las que
accedemos desde el men de Herramientas -> Nubes. En este apartado si seleccionamos Complejidad
ciclomtica, podremos saber a partir de un vistazo rpido, qu clases tienen mayor complejidad
ciclomtica del sistema.
Por defecto se considera una duplicacin si 10 lneas sucesivas de cdigo Java estn repetidas, pero se
puede modificar este lmite a travs de la propiedad sonar.cpd.java.minimumLines
Por ejemplo, si vamos a analizar un proyecto con Maven, y queremos cambiar a 30 el lmite al que se
considera cdigo duplicado, deberemos escribir en la terminal lo siguiente:
mvn sonar:sonar -D sonar.cpd.java.minimumLines=30
An as, despus de consultar detenidamente la documentacin y los foros de Sonar, no nos queda muy
claro el criterio que utiliza la herramienta para considerar el cdigo duplicado, y no tenemos informacin
acerca de a partir de cunto se considera duplicacin en otros lenguajes de programacin.
3. Documentacin y comentarios
Documentacin
API pblica:Nmero de clases pblicas, mtodos pblicos (sin contar mtodos de acceso como get y set)
y propiedades pblicas (sin contar aquellas que son de la forma public static)
API pblica sin documentar: Nmerode APIs pblicas sin una cabecera de comentarios, sin un
Javadoc.
Comentarios
Comentarios (%):
4.Tamao
Lneas de cdigo: Nmero de lneas de cdigo, sin contar los comentarios (en la Figura 8 seran 365375)
El resto de mtricas que aparecen siguen la misma forma que las anteriores, es decir, se muestra el
nmero de paquetes, clases, mtodos o ficheros totales.
5. Violaciones
Issues: Nmero de malas prcticas (violaciones) en el cdigo. Por ejemplo, los nmeros mgicos,
llamar a un mtodo que no es un constructor con el mismo nombre que una clase etc.
Cuando dos, tres o cuatro paquetes estn involucrados en un ciclo, quiere decir que esos paquetes
dependen unos de otros y no se pueden dividir, reduciendo la modularidad del sistema, y haciendo que el
sistema sea ms difcil de probar y menos mantenible.
A la izquierda de este cuadro de mando de diseo, aparece el nmero total de ciclos presentes en todo el
sistema, y el ndice de interdependencia entre paquetes, que nos da una idea del grado de acoplamiento
general del sistema (un valor 0% significa que no hay ningn ciclo en el sistema, y un valor de 100% que
los paquetes estn muy acoplados).
Donde:
Dependencias entre archivos que hay que reducir indica el nmero de dependencias entre archivos que
hay que reducir para eliminar todos los ciclos entre directorios.
Una vez que hemos observado la zona izquierda de este cuadro de mando, tendremos una idea general
acerca del estado del diseo de nuestro software. En la parte derecha de esta seccin, Sonar nos indicar
cuntas dependencias concretas entre paquetes y archivos hay que eliminarpara mejorar el diseo.
Si por ejemplo pinchamos sobre el nmero de dependencias a cortar entre paquetes (en el caso de la
Figura 10, hacemos click en la lnea que dice 230 entre paquetes), accederemos a una pantalla en la
que podremos ver cules son esas dependencias entre paquetes que tenemos que eliminar y los
paquetes que estn involucrados en los ciclos.
Uno de los elementos presentes en esta vista ser la Matriz de dependencias de Sonar (Figura 11):
En gris aparecen las dependencias entre los distintos paquetes, y en rojo los ciclos sospechosos y que
involucran a los paquetes.
Por ejemplo, si nos fijamos en el paquete .list, y hacemos click en el nmero 2 con el cuadrado rojo, la
vista cambiar a la Figura 12. El paquete .iterators queda seleccionado, con lo que quiere Sonar nos
quiere decir que el paquete .list tiene 2 dependencias con el paquete .iterators que deben ser eliminadas.
7. Test