Se denomina refactoring al proceso de reestructurar software orientado a objetos aplicando una secuencia de transformaciones que preservan la funcionalidad del mismo a fin de mejorar alguna métrica. Es una actividad esencial para controlar la evolución del software facilitando futuras adaptaciones y extensiones. Cobró importancia en procesos de desarrollo como XP (eXtreme Programming) que requiere de la reestructuración de modelos y código existentes a partir de pasos pequeños y sistemáticos (Beck, 2000). También es fundamental en el contexto de técnicas de ingeniería reversa de sistemas legacy.
Algunas herramientas CASE UML proveen facilidades, si bien limitadas, para el refactoring sobre código, es decir ligado a la sintaxis de un lenguaje de programación en particular. Actualmente OMG (Object Management Group) promueve desarrollos de software basados en UML (OMG, 2004) a partir de una arquitectura Model Driven (MDA, 2004). MDA define un framework para modelar que separa la especificación de la funcionalidad del sistema de su implementación sobre una plataforma en una tecnología específica. La idea clave es la automatización de transformaciones de modelo-a-modelo. En este contexto se vuelven esenciales las técnicas de refactoring para mejorar los modelos de los distintos niveles de abstracción de un diseño.
En esta investigación se propone el refactoring de diagramas de clases UML enriquecidos con expresiones OCL (Warmer y Kepple, 2003) a partir de un sistema transformacional basado en reglas y estrategias. El objetivo de este sistema transformacional es proveer asistencia para los refactorings de modelo-a-modelo mediante la aplicación de reglas de transformación que preservan la funcionalidad del modelo original. Las transiciones entre versiones se realizan de acuerdo a reglas precisas basadas en la redistribución de clases, atributos, operaciones y asociaciones del diagrama. Durante el proceso de transformación, se necesitan estrategias para guiar la aplicación de las reglas de transformación que permiten construir un nuevo diagrama UML.
Se describen en la sección 2 los trabajos relacionados. La sección 3 presenta el sistema de transformación y un conjunto de reglas y estrategias para reestructurar clases y asociaciones.
Finalmente la sección 4 concluye y discute futuros trabajos.