En los años 80 nació
la teoría de las ventanas rotas por parte de James Q. Wilson y George Kelling. La teoría se basa en una conducta humana, por desgracia muy común, en la que si todo el mundo hace algo mal nos preguntamos: ¿Por qué tengo que hacerlo yo bien?
La idea es que si encontramos un edificio con una ventana rota, y dicha ventana no es reparada, lo más probable es que en un tiempo el edificio tenga más ventanas rotas. Esto es así porque el primer cristal roto deja un mensaje claro: "Nadie cuida esto". Con el tiempo el edificio se irá degradando cada vez más. Además, si el edificio se va estropeando lo más seguro es que el barrio donde se encuentra corra la misma suerte. La razón principal es que el interés por cuidar algo es directamente proporcional al estado en el que se encuentre.
El mensaje de esta teoría es claro: una vez que se empiezan a desobedecer las normas todo se deteriora a una velocidad sorprendente. Las conductas incivilizadas se contagian.
Esta idea de la vida diaria tan aceptada por todo el mundo se puede extrapolar al software. Si un programador deja un método sin comentar cuando otro programador lo vea actuará igual de mal. Este tipo de comportamientos a la hora de programar hacen que la calidad del código vaya empeorando progresivamente. Algunos autores lo comparan a una manzana pudriéndose con el paso del tiempo. Por lo tanto, poco a poco parece que nuestro código “huela mal” y vaya perdiendo calidad [1].
Para evaluar de manera precisa, si nuestro código ha perdido calidad debido a las malas prácticas, se puede utilizar el
método SQALE y el concepto de deuda técnica. De manera intuitiva, deberemos preocuparnos cuando nuestro código cuente con código duplicado, métodos y clases muy grandes o métodos que necesitan muchos parámetros. Para arreglar este tipo de problemas lo más recomendable es llevar a cabo una refactorización del código.
La refactorización surgió en un artículo de William F. Opdyke y Ralph E. Johnson llamado “Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems” [2]. La refactorización es una técnica que consiste en reestructurar el código sin alterar su comportamiento. La idea principal es que el código sea más reutilizable, mantenible o legible. Es un proceso de mantenimiento que no arregla errores ni añade funcionalidad pero es muy importante en el ciclo de vida del software.
En la actualidad se pueden encontrar programas o plugins que realizan refactorizaciones de código. A continuación se detallan algunas opciones interesantes a tener en cuenta:
IntelliJ IDEA es un entorno de desarrollo Java propiedad de la empresa JetBrains. Existen dos distribuciones: Community Edition (open source) y Ultimate (comercial).
IntelliJ Idea IDE es capaz de aplicar algunas técnicas de refactorización como: renombrar, extraer métodos, introducir variables, etc. Lo más destacable es que es capaz de detectar métodos duplicados y arreglarlos. El problema es que si se elimina una línea del método ya no detecta la duplicación. Es decir, no detecta bloques de código duplicado, sólo métodos completos.
Es capaz de analizar código fuente detectando ciclos o errores y en algunos casos sugiere una solución que se puede aplicar de manera automática.
CodePro Analytix es una herramienta para evaluar código Java para desarrolladores que desarrollan con Eclipse. Se integra perfectamente en Eclipse, usando el análisis automático de código fuente para detectar problemas de calidad.
Ofrece recomendaciones para arreglar la mayoría de errores detectados pero no los arregla automáticamente.
Entre los aspectos más destacables encontramos que detecta código duplicado, código muerto o genera casos de test de manera automática.
RefactorIt es un plugin de Eclipse que nos permite inspeccionar código detectando debilidades del proyecto.
El plugin es configurable siendo posible seleccionar reglas de
PMD para analizar el código.
Algunos de los errores detectados cuentan con una sugerencia para solucionar el problema de manera automática. Una ventaja del plugin es que el cálculo de métricas se realiza incluso a nivel de método pero la visualización no es muy práctica.
Por último, es necesario resaltar que detecta cadenas duplicadas, analiza cadenas que pueden ser internacionalizadas o lleva a cabo algunos métodos de refactorización.
Estos son sólo algunas de las herramientas que se pueden utilizar para refactorizar código Java. Es cuestión de encontrar aquella que se adapte mejor a las necesidades de cada programador. Ya no hay excusa para no tener un código legible y mantenible. Refactoriza y mantén tu código limpio igual que mantienes tu casa o tu coche impecable.
Referencias:
[1] Martin Fowler.
Refactoring: Improving the Design of Existing Code. Addison-Wesley Longman Publishing Co.,Inc., Boston, MA, USA, 1999.
[2] William F. Opdyke and Ralph E. Johnson Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems Proceedings of the Symposium on Object Oriented Programming Emphasizing Practical Applications September, 1990. ACM.