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. 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!
Federico Caro
Federico Caro es un consultor senior con más de 10 años en el desarrollo de aplicaciones/sistemas basados en tecnología J2EE. Su carrera profesional en J2EE comenzó en Peoplecall una empresa dedicada a servicios de telefonía IP, colaborando en el desarrollo de la migración del site de PHP a J2EE integrando los servicios de facturación. Posteriormente ha pasado por departamentos de definición de arquitecturas J2EE en Indra Sistemas, Ralia Technologies (Grupo Damm) e IT-Deusto.
Ver más contenido de Federico.
Más contenido sobre esto.
Leer más.
Cuéntanos qué te parece.