Se encuentra usted aquí

Instalar Sonar en proyectos PHP

¿Qué es Sonar?

Sonar es una aplicación que permite analizar distintos parámetros de calidad del software en proyectos informáticos. Con un sistema flexible y adaptable a las necesidades del proyecto, permite controlar varios aspectos del software como la complejidad ciclomática, el grado de replicación de código, la cobertura con tests o el respeto por los coding standards.

Manteniendo estos parámetros bajo control con esta herramienta gratuita conseguiremos un diagnóstico constante del estado de salud de nuestro código, lo que permitirá añadir funcionalidades sobre el mismo de un modo más rápido y por tanto más económico.

 

Instalar Sonar

Para instalar y configurar Sonar es necesario antes tener instaladas dos dependencias; la máquina virtual de Java y la herramienta Apache Ant. Para instalarla en distribuciones Linux con el paquete apt-get instalado basta con ejecutar el siguiente comando:

$apt-get install ant

Una vez instalados los paquetes descargaremos Sonar y lo descomprimiremos en el directorio a nuestra discreción. Para ejecutar Sonar buscaremos en el directorio bin el script correspondiente a la arquitectura de nuestro ordenador y el sistema operativo y (en Linux) ejecutaremos el comando:

$sonar sh sonar.sh console

Si todo va como debe observaremos una imagen como la siguiente:

Bien, Sonar está funcionando y podemos acceder a él desde cualquier navegador en la dirección localhost:9000

 

Configurar Sonar para proyectos PHP con Ant

A continuación debemos iniciar sesión en Sonar (admin/admin son el usuario y password por defecto) e instalar el plugin PHP. Para ello, una vez iniciada la sesión iremos a la sección de Administrator -> Update Center -> Available plugins y selecionarremos el plugin PHP. Será necesario reiniciar Sonar.

Siguiendo los pasos de Codehaus descargaremos Sonar Ant Task y crearemos un enlace simbólico en el directorio lib/ de nuestra instalación de Ant (en mi caso /usr/share/ant/lib).

Definir nuestras propias reglas

De nuevo en la interfaz de administración de Sonar, acudiremos a "Quality Profiles" para crear un perfil PHP propio. El mío está creado a partir del ya existente "All PHPMD Rules" y pinta tal que así.

Haciendo click en cada una de las reglas podremos personalizar el grado de exigencia que le queremos otorgar así como su "severidad". Podemos añadir tantas reglas como queramos y definir nuestras propias alertas.

Bien, ahora hay que construir el script Ant que nos servirá para darle a Sonar información sobre nuestro proyecto. Este script, que podemos colocar allí donde queramos, debe llamarse build.xml. Yo centralizo todas estas cosas en mi directorio de integración continua /var/ci, pero es una cuestión de gusto personal. Este es el aspecto de mi build.xml.

 

<project name="Orchards">
  <!-- Define the Sonar task -->
  <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
    <classpath path="/usr/share/ant/lib" />
  </taskdef>

  <!-- Add the target -->
  <target name="sonar">
    <sonar:sonar workdir="/var/ci/sonar/orchards" key="org.orchards:orchards" version="0.1-SNAPSHOT" xmlns:sonar="antlib:org.sonar.ant">
      <!-- list of properties (optional) -->
      <property key="sonar.projectName" value="Orchards" />
      <property key="sonar.dynamicAnalysis" value="false" />
      <property key="sonar.language" value="php" />

      <!-- source directories (required) -->
      <sources>
        <path location="/var/www/vhosts/orchards/trunk" />
      </sources>
      <!-- test source directories (optional) -->
      <tests>
        <path location="/var/www/vhosts/orchards/trunk/tests" />
      </tests>
    </sonar:sonar>
  </target>
</project>

 

Lo único que tenéis que hacer es cambiar las distintas rutas a las de vuestros directorios de trabajo de sonar y vuestro código fuente y tests phpUnit. Ahora hay que dejar que ant haga su trabajo:

$ant sonar

Acabamos de dar a Sonar la información que necesitaba sobre nuestro proyecto. Si volvemos a la home de nuestra interfaz Sonar, veremos que aparece una fila con nuestro proyecto. Haciendo click en él, encontraremos una vista parecida a la siguiente:

Explorad un poco la interfaz y disfrutad de la información que se despliega ante vosotros.

 

PHPUnit con Sonar

El plugin PHP ya nos proporciona la posibilidad de utilizar PHPUnit en nuestros proyectos, entre otras herramientas.

En primer lugar modificaremos el archivo build.xml añadiendo las siguientes líneas:
      <property key="sonar.dynamicAnalysis" value="true" />
      <property key="sonar.phpUnit.analyze.test.directory" value="false" />

Escribiremos en el mismo lugar donde tengamos el build.xml un nuevo archivo phpunit.xml. El siguiente es un ejemplo sencillo:
<phpunit>
 <testsuites>
  <testsuite name="Orchards">
   <directory>/var/www/vhosts/orchards/trunk/tests</directory>
  </testsuite>
 </testsuites>
</phpunit>

Solo falta ejecutar de nuevo el comando $ ant sonar y podremos ver una imagen como esta:

¡Hay que mejorar esa cobertura!

Analizar un proyecto Drupal

Para analizar un proyecto Drupal basta con cambiar la ruta del código fuente a nuestra instalación Drupal. Lo ideal es analizar exclusivamente los módulos que producimos y que deberían estar en un directorio aparte en sites/all/modules/ para evitar el ruído producido por módulos contribuídos (a no ser que estemos pensando en refactorizarlos ;)). Además, habrá que decirle a sonar que analice archivos con extensiones .module. Podemos hacerlo iniciando sesión y haciendo click en los "Settings" de nuestro proyecto.

 

Instalar Sonar como servicio

Si queremos que Sonar se inicie automáticamente cuando arrancamos el ordenador, tendremos que seguir los siguientes pasos:

  • Crear el fichero /etc/init.d/sonar con permisos de ejecución y el contenido:
    #!/bin/sh /
    path/to/sonar.sh $*
  • Registrar Sonar en el inicio de sistema
    $sudo ln -s /path/to/sonar.sh /usr/bin/sonar
    $sudo chmod 755 /etc/init.d/sonar
    $sudo update-rc.d sonar defaults

Ahora arrancar o parar el servicio es tan fácil como ejecutar
$sudo service sonar stop

 

Conclusiones

Bien, pues ya tenemos nuestra herramienta de análisis de código instalada en nuestro equipo. Ahora toca explorar y aprender todas las posibilidades que Sonar nos ofrece para tener toda la información sobre el código que producimos a nuestro alcance.

Espero que os sea de utilidad y no dudéis en transmitirme cualquier duda o corregirme en este post.

Un saludo!

Tags: 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer