Blog de Antonio Manuel Muñiz

Desarrollo, Ingeniería y Calidad del Software

Archivos en la Categoría: Software Quality

Se ve a la legua

Cuando algo está mal hecho se ve a la legua, en todos los ámbitos, y especialmente en el desarrollo de software.

Gran parte de nuestro trabajo en Clinker ha sido de integración, lo cual nos ha llevado a adentrarnos muy a fondo (os lo aseguro, muy a fondo) en todas y cada una de las herramientas que lo componen. Hemos desarrollado plugins para (casi) todas, y en un entorno Open Source, desarrollar un plugin te permite empaparte de gran parte del código fuente de la herramienta. Sin embargo, mucho antes de mirar el código fuente ya puedes suponer lo que te vas a encontrar, hay una serie de indicadores que no fallan:

  • ¿Se puede compilar (o empaquetar, si no se compila) facilmente? ¿O es necesario desplazarse a la casa de desarrollador, con su familia, para ello?
  • ¿La organización de los fuentes es comprensible? ¿O hay directorios esparcidos como en un mercadillo de domingo?
  • ¿El repositorio (SCM) está limpito, organizado y sigue un criterio de publicación de versiones? ¿O se usa como alternativa a Dropbox?

Sólo con estas tres preguntas (a la legua) podemos suponer lo que habrá dentro.

Pero, por supuesto, cuando algo está bien hecho también se ve a la legua. Por suerte para los que intentamos hacer las cosas (lo intentamos, al menos) correctamente, lo bien hecho se ve mucho más facilmente. Cuando nos enfrentamos a un proyecto software desarrollado por otro/s, lo hacemos con cierto prejuicio – “a ver qué ha hecho este tío aqui” – Eso hace que si en dos minutos no encontramos una cagada, probablemente estemos ante algo bien hecho.

Un análisis más concienzudo puede que nos muestre secretos inconfesables del producto software que tenemos delante, pero si has tenido que esforzarte para encontrar un WTF… a todos se nos escapa algo de vez en cuando :-)

Sonar PDF Plugin 1.0 released

Hace unos días se ha publicado Sonar PDF Plugin 1.0, con una mejora fundamental: el documento PDF se almacena en la base de datos tras cada análisis y puede descargarse desde la GUI de Sonar.

PDF Download from Sonar GUI

También es posible configurar el tipo de reporte desde la interfaz de administración de Sonar:

PDF report type configuration

Se  puede encontrar información más detallada (instalación y uso) en la documentación del proyecto.

La calidad del código fuente como punto de partida

Cuando hablamos de calidad del software podemos hacerlo a muchos niveles: rendimiento, mantenibilidad, cumplimiento de requisitos funcionales, estabilidad, proceso de construcción,… y el que en mi opinión constituye la base, el código fuente.

Desde mi punto de vista la calidad del código fuente se extiende hasta otros niveles, por ejemplo, el rendimiento. De hecho, cuando nos disponemos a realizar una auditoría de rendimiento el punto de partida siempre debería ser el código fuente, éste nos puede dar pistas sobre los puntos débiles de la aplicación, los cuales orientarán las pruebas de rendimiento.

Supongamos un caso de uso simple (y muy común): una aplicación web escrita en Java que permite la subida de un fichero a través de un formulario, cuando este stream de datos llega al servidor se carga en memoria y posteriormente se almacena en base de datos. Si tenemos la mala suerte de que al programador se le “olvide” cerrar el stream después de usarlo y por algún motivo esta memoria no sea liberada por el recolector de basura de la JVM, entonces tenemos un problema: ese espacio de memoria no se liberará NUNCA.

La herramienta PMD detecta, entre otras muchas, una mala práctica de programación consistente en no cerrar correctamente los recursos (streams de ficheros, conexiones a bases de datos, etc) después de usarlos. Si la utilizásemos para analizar el código fuente de la aplicación descrita anteriormente nos indicaría que no se está cerrando un recurso. Si lo que buscamos son causas de un problema de memoria en tiempo de ejecución, vamos en el camino correcto. Definiremos una prueba que ejecute el caso de uso en cuestión y la ejecutaremos simulando N usuarios, al mismo tiempo podemos monitorizar el servidor de aplicaciones y verificar que realmente estamos ante un memory leak.

Sonar PDF Plugin 0.1

Ya hablaba de esto hace algún tiempo, y después de varios meses de trabajo hemos publicado la primera versión (0.1) de Sonar PDF Plugin.

En esta primera versión se ha optado por envolver la lógica de generación del reporte en un plugin para Maven, el cual está disponible en el repositorio central de Maven.

El reporte actual contiene:

  • Información general del proyecto (nombre, descripción, version, módulos)
  • Dashboard (indicadores proporcionados por Sonar, similar al dashboard que muestra Sonar en su interfaz web)
  • Violaciones de reglas por categorías
  • Reglas más violadas
  • Ficheros que más violan las reglas
  • Todo lo anterior para cada módulo que compone el proyecto (si existe alguno)

Ya hay algunas mejoras reflejadas en JIRA para la versión 0.2, seguiremos trabajando.

Sonar PDF Reporter, tu código tiene algo más que decir

La empresa en la que trabajo (GMV) está apostando con fuerza por el Software Libre, fruto de esta apuesta es la contribución a varios proyectos Open Source, entre ellos Sonar. Cuando se me dió esta oportunidad, no tuve dudas, quería aportar algo a este magnífico proyecto, del cual llevábamos sacando partido bastante tiempo.

Desde hace algún tiempo trabajo (entre otras cosas) para desarrollar un nuevo módulo en Sonar, Sonar PDF Reporter. El objetivo del módulo es añadir una nueva funcionalidad a Sonar que permita la explotación en forma de entregable de gran parte de la información que nos ofrece esta herramienta en su interfaz web.

El módulo genera un archivo PDF que contiene:

  • Visión general de la calidad del código de todo el proyecto.
  • Información concreta por módulos funcionales: métricas y medidas obtenidas a partir combinaciones de las métricas.
  • Información general del proyecto: versionado, estructura de módulos, descripción, etc

Además de ser un módulo integrado en Sonar, durante el diseño siempre tuve en mente el posible uso del módulo de forma independiente, es decir, ofrecer la posibilidad de explotar la información que Sonar proporciona desde nuestra propia aplicación, por ello se ha hecho uso de Web Services API de Sonar.

sonar

Sonar PDF Reporter Design

Quedan bastantes retoques y mejoras por realizar, pero puedes descargar un PDF de ejemplo con los reportes del propio proyecto Sonar, y ver en primicia el resultado ;)