Desde que llevo en el desarrollo del software, siempre me encuentro con que hay tres variables en un proyecto que no se ejecutan, provocadas por el día a día y por la necesidad imperiosa de los departamentos de negocio de incluir más y más funcionalidad sin valorar el estado tecnológico de la infraestructura y el producto.
Estas tres variables son básicamente las siguientes:
- Análisis de la calidad del código de las aplicaciones.
- Profiling de aplicaciones para detectar cuellos de botella y problemas de memoria (memory leaks).
- Ejecución de pruebas de carga/estrés que estudie la escalabilidad que presenta la infraestructura tanto hardware como software.
En este primer post vamos a profundizar en una herramienta que nos ayudará a solventar la primera de nuestras variables: la calidad del software.
Para ello, tengo el gusto de presentaros (para aquellos que no lo conozcan) a Sonar (www.sonarsource.org/). Como una imagen vale más que mil palabras, allá va:

A continuación comentamos las características principales de la herramienta:
- Compatible con Maven2, con lo que puede generarse un informe complementario dentro del ciclo de build y mediante el uso de un servidor de integración continua.
- Integra las mejores herramientas de medición de la calidad de código: CPD, findbugs, PMD, checkstyle, agregando la información de dichos plugins y ofreciéndote un resumen tipo cuadro de mando. Clasifica las incidencias en base a su severidad y a su naturaleza: Fiabilidad, usabilidad, eficiencia, mantenimiento, portabilidad (Matriz de radar del gráfico)
- Permite navegar el código y ver los errores en el código dentro del mismo código. Por tanto, la herramienta ayuda a disponer de un entorno de mejora continuo.
- Disponer de medidas de complejidad ciclomática, en definitiva, si nuestro código es complejo en la implementación (muchos bucles anidados, etc..).
- Disponer de medidas tales como LCOM4 (medida de cohesión de métodos) y RFC (Response for Class) que permiten conocer la cohesión de las clases de mi software (clases cuyo rol está claramente definido o por el contrario son dispersas y poco cohesionadas) y la capacidad de realizar pruebas unitarias sobre una clase (cantidad de objetos con los que colabora), respectivamente.
- Permite disponer de una matriz de dependencia entre paquetes, donde fácilmente se encuentran referencias cíclicas (falta de desacoplo en el diseño de nuestra aplicación).
- Permite disponer de medidas de cobertura de las clases de prueba sobre código de la aplicación/componente.
- Permite descubrir el volumen de comentarios de nuestra aplicación, así como el índice de duplicaciones (falta de refactorización ) de nuestro código.
Por todas estas razones, recomendamos y animamos probar esta gran herramienta y así poder corregir una de las tres grandes carencias en el desarrollo del software actual.
That’s all folks!!!.
English
Español
















