Analizando la calidad del código Java con Sonar

6
58929

Analizando la calidad del código Java con Sonar

0. Índice de
contenidos.

1. Introducción

En este tutorial vamos a dar a conocer una herramienta muy
útil sobre todo para el rol de «Jefe de Desarrollo» ya que
de un sólo vistazo da valiosa información de como
de bien está escrito el código de un proyecto,
cual es el nivel de cobertura de las pruebas o el nivel de complejidad
ciclomática de las clases que lo componen. Con lo que puede
controlar el desarrollo implementado por sus programadores.

2. Entorno

El tutorial está
escrito usando el siguiente entorno:

  • Hardware:
    Portátil Asus G50Vseries (Core Duo P8600 2.4GHz, 4GB RAM,
    320 GB HD).
  • Sistema operativo: Ubuntu
    9.04 Desktop
  • Mozilla Firefox 2.0.0.20
  • Sonar 1.11.1

3. Instalación.

Lo primero es descargar la última versión
(1.11.1) de la herramienta de la URL
http://sonar.codehaus.org/downloads/ y descomprimir el fichero en
algún lugar de nuestro disco al que conoceremos a partir de
este momento como SONAR_HOME.
Una vez hecho tenemos dos formas de instalar el producto:

3.1 Standalone

Abrimos un terminal, navegamos
hasta SONAR_HOME/bin/sistema_operativo y
ejecutamos el fichero llamado sonar dependiendo de nuestro sistema
operativo, en Ubuntu sería de esta forma:

./sonar.sh start

Para pararlo
utilizaríamos el mismo archivo pero con el
comando stop.

Esto
hace que se arranque el producto con sus
parámetros por defecto, esto es, utilizando una base de
datos Derby
y el puerto 9000. Podemos comprobar el arranque visualizando el
fichero SONAR_HOME/logs/sonar.log. Una vez haya arrancado podemos
acceder a la URL http://localhost:9000
para ver la pantalla de bienvenida del producto, que tiene este
aspecto:

Esta
configuración es sólo apta para hacer una
prueba de concepto de la herramienta y ver como funciona si la
queremos implantar como herramienta corporativa tendríamos
que
instalarla de la siguiente manera.

3.2 En Tomcat existente con
base de datos MySQL.

Para esto tenemos que contar
con una instancia activa de MySQL en
la máquina donde vayamos a dejar corriendo Sonar con un
esquema de
base de datos vacío llamado “sonar”.

Posteriormente modificamos el
fichero
SONAR_HOME/conf/sonar.properties, el archivo es bastante
autoexplicativo, lo que tenemos que hacer es comentar las tres
líneas
que dice para que deje de funcionar con la base de datos embebida:

# DATABASE
#Comment the 3 following lines to deactivate the default embedded database (used
only for tests and demos) 
#sonar.jdbc.url: jdbc:derby://localhost:1527/sonar;create=true
#sonar.jdbc.driverClassName: org.apache.derby.jdbc.ClientDriver
#sonar.jdbc.validationQuery: values(1)

Y descomentar las entradas que
se refieren a la base de datos que vayamos a utilizar en nuestro caso
MySQL:

# MySql 
# uncomment the 3 following lines to use MySQL 
sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.driverClassName: com.mysql.jdbc.Driver
sonar.jdbc.validationQuery: select 1

Hay que tener en cuenta que
previamente deberemos haber creado un esquema vacío en MySQL
con el nombre sonar. Por último en la sección del
fichero “generic settings” establecemos el usuario
y la password de la base de datos:

# generic settings 
sonar.jdbc.username: sonar 
sonar.jdbc.password: sonar

Si dejamos estos por defecto,
deberemos crear este usuario con este password en MySQL y darle los
permisos necesarios en el esquema sonar, o como lo hayamos llamado.

Una vez hemos establecido las
propiedades con las que va a trabajar, el siguiente paso es generar el
.war que vamos a desplegar en una instancia de Apache Tomcat que
previamente debemos tener corriendo en la máquina.

Para ello, desde un terminal
nos situamos en el directorio SONAR_HOME/war y ejecutamos el script:

cd war
./build-war.sh

Esto genera dentro del
directorio war un archivo llamado sonar.war listo para desplegarse en
cualquier instancia de Apache Tomcat. Ahora basta copiar el fichero
sonar.war en la carpeta webapps de cualquier instancia que Apache
Tomcat que tengamos corriendo en nuestra máquina de
desarrollo y rearrancar el servidor para que despliegue la
aplicación. Luego para acceder a Sonar tendremos que
utilizar la URL y el puerto del servidor seleccionado más el
nombre del war. Ejemplo, http://localhost:8080/sonar.

4. Analizar un proyecto Java.

Para analizar un proyecto con
Sonar este tiene que estar creado
con Maven2. Entonces lo único que tenemos que hacer es
ejecutar:

mvn sonar:sonar

Haciendo esto dentro del
proyecto que queramos analizar, veremos que nos crea una nueva entrada
en la pantalla principal de la aplicación a la que,
recordemos, podemos acceder desde la URL http://localhost:9000. En caso
de haber cambiado las condiciones por defecto, tenemos que configurar
Maven para que sea capaz de encontrar la instalación de
Sonar. Para ello, editamos el fichero .m2/settings.xml y creamos un
perfil para sonar de esta manera:


	sonar
	true
	
		
		jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
		com.mysql.jdbc.Driver
		miusuario
		micontraseña
		
		http://localhost:9000
	

Pero veamos un ejemplo
práctico. Imaginemos que en nuestro entorno de desarrollo
hemos creado un proyecto con Maven2 llamado
“prueba-sonar” cuya clase principal presenta el
siguiente código:

package com.autentia;

public final class App {

	public static void main( String[] args )
	{
		String Prueba = "prueba";
		String prueba2 = "prueba";
		
		if (Prueba == prueba2){
			System.out.println("Son iguales" + 9);
		}else{
			System.out.println("No son iguales");
		}
	}
	
}

Si ahora ejecutamos el goal de
sonar con este proyecto, veremos que en la pantalla principal de la
aplicación ya aparece una entrada con nuestro proyecto.

Ahora si pinchamos en la
entrada del proyecto accederemos al panel de control del mismo donde de
primeras recibiremos toda esta información:

Lo
primero que llama la atención es la sección de
“Violations”
que nos indica los errores que tiene nuestro código dividido
en
niveles de gravedad. Esta es una visión muy útil
para asegurar que
nuestro código está escrito de acuerdo a las
buenas prácticas de
Java mejorando así en eficiencia, usabilidad y
mantenibilidad
fundamentalmente.

Esta pantalla
también da información del resultado de los test
y de su cobertura; así como del porcentaje de
líneas que son comentarios y de líneas duplicadas
en el código. Este último dato nos puede servir
para darnos cuenta de las zonas de la aplicación que
están repetidas y que convendría refactorizar en
una única clase.

Para descubrir las violaciones
Sonar se basa en tres herramientas muy conocidas: pmd, cpd y findbugs
que te ahorra tener que lanzar por separado. También ofrece
la posibilidad de configurar nuestras propias reglas para cada una de
las tres tecnologías en base a archivos de
definición en XML.

Si queremos ver que violaciones
hemos cometido deberemos ir al apartado “Violations
drilldown” donde podemos ir navegando por cada
categoría hasta llegar a la clase donde se encuentra la
violación y ver el propio código con una
explicación detallada de la violación cometida.

En este caso la herramienta nos
advierte de que hemos puesto un
número “mágico”, cuando
sabemos que una de las buenas prácticas
indica que este tipo de número debe ir en una constante de
la
clase.

5. Conclusiones

Como
hemos visto esta
herramienta nos facilita que nuestros proyectos mantengan una calidad
óptima. Desde aquí os invito a que la
instaléis y la probéis para ver como de bien
estáis haciendo las cosas. Porque si hay algo peor que estar
haciendo mal las cosas es no ser consciente de ello.

Saludos.

6 COMENTARIOS

  1. Muy interesante la herramienta (esto de la eficiencia del código gusto mucho a los desarrolladores), y está bastante bien descrito el tutorial.

    La sugerencia como lector (y actual formador) que veo es que es bueno que comentes que depende de Maven al principio de la explicación.

    Saludos,

    Saludos y gracias por tu aportación.

  2. Buenas compi.

    Un punto importante a agregar, Sonar deja en el directorio \\\»/target/site\\\» unos informes muy valiosos que podemos imprimirnos.

    Clasificando la información por clase, método, prioridad…

  3. Últimamente estoy muy interesado en esta herramienta , en nuestro proyecto la tenemos instalada, pero me gustaría tunearla para obtener otro tipo de métricas, en concreto creo que hay un plugin que permite incluir el coste / hora de un programador para evaluar los costes en determinados componentes en función del volumen del cambio.

    Sabe de qué plugin se trata?, no se si es el plugin de SQALE.

    Saludos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad