icono_twiter icono LinkedIn
Rubén Aguilera Díaz-Heredero

Consultor tecnológico de desarrollo de proyectos informáticos.

Ingeniero en Informática, especialidad en Ingeniería del Software

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2009-12-07

Tutorial visitado 22.273 veces Descargar en PDF
Utilizando Sonar.

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.

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL:

Fecha publicación: 2010-11-04-14:09:17

Autor: aromero83

Ú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.

Fecha publicación: 2010-06-18-12:35:51

Autor: carlosgp

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...

Fecha publicación: 2010-05-02-08:35:54

Autor: pablod881

buen post.. podrias ayudarme con la configuracion en windows con oracle 10g.. gracias.

Fecha publicación: 2010-04-27-17:06:07

Autor: George

Muy buena herramienta, recomiendan alguna de similar calidad para PHP

Fecha publicación: 2009-12-14-12:09:45

Autor: jcarmonaloeches

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.