Tips Sonar: Cálculo manual del porcentaje de las violaciones.

Si nos fijamos en el panel de control del Sonar podemos observar como uno de los widgets que nos muestra es el número de violaciones que incumplimos.

Sonar Apache Lucene. Widget violaciones.
Sonar Apache Lucene. Widget violaciones.

NOTA:  Imagen del proyecto: http://nemo.sonarsource.org y como ejemplo el tablero de la aplicación Apache Lucene.

Estas violaciones son el resultado de incumplir algunas de las reglas que tenemos definidas en nuestro perfil de calidad. Son las reglas que normalmente tenemos definidas para las tres herramientas de análisis de código estático que utiliza el Sonar:

Bueno, si volvemos al widget de violaciones, podemos observar como:

Violaciones Sonar
Violaciones Sonar
  • Nos indica el número total de violaciones.
  • El tanto por ciento de reglas que cumplimos.
  • Y luego organizadas por categorías: blocker, crítical, major, minor, info el número de violaciones que tenemos de cada tipo.

Lo que voy a explicar a continuación, es como se calcula el porcentaje de cumplimientos de reglas.

Hay que partir de cada categoría de violaciones tiene asignada un peso. Esto se puede ver en la configuración del Sonar: System | General Settings  | General.

configurarpesoviolacionessonar

Como podemos ver:

INOF=0;MINOR=1;MAJOR3;CRITICAL=5;BLOCKER=10

Y el tanto % se calcula en función de la siguiente formula:

Porcentaje_violaciones_tipo_xxxx = nº_violaciones_tipo_xxxx * peso_violaciones_tipo_xxxx / nº líneas total

Por tanto, vamos a ver como en nuestro ejemplo como se obtiene el 75,8% que muestra la figura .

En primer lugar multiplicamos el número de violaciones por el peso correspondiente en cada categoría:

0 * 10 +
6 * 5 +
6.208 * 3 +
0 * 1 +
816 * 0
= 0 + 30 + 18624 + 0 + 0 = 18654

Y este valor lo dividimos para el número de lineas: 77.087

18.654/77.087=24,1986% aproximadamente 24,20%.

Es decir, incumplimos un 24,20% de reglas lo que supone que tenemos un 75,8% de reglas correctas. Esto nos permite también calcular el porcentaje por categoría, etc.

¿Y todo esto para que nos sirve? Nos permite conocer el peso de las violaciones por categorías en el computo global. Normalmente cuando se establece una perfil de calidad, se establece unos valores mínimos que se deben cumplir

  • Puede ser que nos pidan que las blocker y crítical deban ser 0 y que el porcentaje global debe ser del 85%. ¿cuantas bloqueantes podríamos tener como máximo para llegar al 85%?
  • Puede que nos pidan que las bloqueantes no pasen del 0,2% del total.
  • Y nos puede servir para establecer estrategias optimas de limpieza de código de manera que con menos esfuerzo cumplamos un mayor número de reglas.

En cualquier caso, lo mejor es  no generar violaciones y gestionar el tema desde el inicio. Cuando se dejan estas cosas para el final en un proyecto muy grande el proceso es laborioso. Ademas parece muy poco profesional:  ¿que pasa? ¿solo sabemos programar bien al final?.

Si fuese el cliente y gestionase el cumplimiento de las reglas, más que la situación actual miraría la evolución de dichas reglas y exigiría que desde un principio se mantuviese a un nivel aceptable.  Poca confianza me produciría un código que se siempre esta alrededor del 75% y que de repente en pocos días pasa al 85%/90% ¿que o parece?.

NOTA: Gracias a Guillerme Iglesias que me explico el otro día estos cálculos, precisamente para saber si cumplíamos con los requisitos del cliente.

Tips Sonar: Cálculo manual del porcentaje de las violaciones.