Análisis y mejoras de usabilidad y performance sobre una herramienta de asistencia en el refactoring de aplicaciones - Masson, Iván (2016)
La evolución y mantenimiento de los sistemas de software es una tarea costosa en el proceso de desarrollo de software. Dichos costos tienden a crecer exponencialmente en la medida en que los sistemas se vuelven más grandes y complejos. Una de las mayores preocupaciones en la evolución y mantenimiento de sistemas es la existencia de problemas estructurales de diseño que no son descubiertos y por ende no son subsanados en las etapas tempranas del desarrollo. Este tipo de problemas en el diseño pueden ser identificados mediante “code smells”. Un code smell es un síntoma en el código fuente del sistema que ayuda a identificar un problema de diseño. Los smells permiten a los desarrolladores detectar fragmentos de código que deberían ser reestructurados, para de esa manera mejorar la calidad del sistema. En este aspecto los smells actúan como antipatrones de diseño que ponen en evidencia estas debilidades del sistema. Existen diferentes herramientas semiautomatizadas para la identificación de smells en un sistema tales como inCode o iPlasma, sin embargo una de las mayores limitaciones de dichas herramientas es que usualmente encuentran una gran cantidad de smells; esto puede volverse un problema para el desarrollador por diversas razones. En principio el desarrollador puede verse abrumado por la cantidad de información a analizar, teniendo en cuenta que las herramientas solo señalan los smells y el desarrollador es finalmente quien decide en cada caso si se trata de un problema o no y de sí efectivamente merece que se le otorgue tiempo de desarrollo a solucionar el smell. Una técnica que suele utilizarse para solucionar los code smells es el refactoring. El refactoring es una técnica controlada para mejorar el diseño del código de un sistema. Consiste en aplicar una serie de transformaciones al código para mejorar ciertos aspectos estructurales del mismo sin alterar su comportamiento. Por otro lado, el desarrollador es quien debe decidir qué problemas son relevantes para la “salud” del sistema y cuales interfieren con el objetivo para el que fue diseñado. Bajo estas condiciones es válido mencionar que en la práctica no todos los smells encontrados en un sistema indican un problema de diseño, por ej. pueden existir métodos extensos en ciertas clases, pero cuya extensión puede estar relacionada a la complejidad de la tarea que realizan y no a la falta de modularización. En este sentido, cada smell encontrado requiere de un análisis particular, lo que obliga al desarrollador a detenerse en cada smell de la lista resultante de un análisis y seleccionar aquellos que, bajo su criterio respaldado por su entendimiento del sistema, necesitan ser reparados. En este contexto es necesaria una herramienta que asista al desarrollador en la tarea de identificar aquellos smells que sean prioritarios para la evolución y mantenimiento del sistema. En esta línea se ha propuesto SpIRIT (Smart Identification of Refactoring opportunITies) una herramienta semiautomatizada que realiza una priorización de los code smells de un sistema de acuerdo a su criticidad. Se definen como problemas críticos aquellos que comprometen la arquitectura de un sistema. Luego los mismos autores proponen JSpIRIT (Java Smart Identification of Refactoring opportunITies) que se trata de un plugin para el IDE de desarrollo Eclipse y el cual se utiliza en el desarrollo de éste trabajo. Párrafo extraído de la tesis de grado a modo de resumen