Refactoring de aplicaciones legacy Alejandra Garrido CONICET – LIFIA UNLP – CAETI UAI Proyecto CAETI: “El refactoring como práctica fundamental para la comprensión, restructuración, y actualización de aplicaciones legacy”
Alejandra Garrido - CIITI VIII - Rosario Big Ball of Mud Querríamos tener arquitecturas de software elegantes, diseños que usen patrones y código flexible y reusable. En realidad tenemos toneladas de “spaghetti code”, con poca estructura, ilegible, intocable. Es una pesadilla, pero sin embargo subsiste. ¿Por qué? “Big Ball of Mud”. Brian Foote and Joe Yoder. Pattern Languages of Programs 4. Addison-Wesley 2000.
Alejandra Garrido - CIITI VIII - Rosario Patrones del Big Ball of Mud Comienza siendo “Throwaway code” que se instala y persiste, simplemente porque funciona Cambios de requerimientos y agregado de funcionalidad como un “Piecemeal growth” continuo corroe las mejoras arquitecturas Dejamos un Façade alrededor de lo que no queremos mostrar o tocar, “Sweeping it under the rug”
Alejandra Garrido - CIITI VIII - Rosario Aplicaciones Legacy Desarrolladas durante años Muchos programadores involucrados Costosas Imprescindibles Escaso mantenimiento Sin tests de unidad [Feathers]
Alejandra Garrido - CIITI VIII - Rosario Fortran Fortran I→ II→ IV→ 66→ 77→ 90→ 95→ 2003→ 2008 Nueva versión para finales de este año Algunos usuarios en Inglaterra: Meteorological Office Ministry of Defence universidades, laboratorios de investigación instituciones científicas industria financiera Se estima que hay varias miles de organizaciones en Europa usando aplicaciones Fortran. Fuente: “Fortran - a language with a past and a future”
Alejandra Garrido - CIITI VIII - Rosario ¿Cómo manejar el cambio? Un mal diseño no es grave, hasta que hay que hacer cambios No podemos prevenir los cambios El problema no es el cambio sino nuestra incapacidad de manejarlo
Alejandra Garrido - CIITI VIII - Rosario Refactoring Univ. of Illinois at Urbana-Champaign (UIUC) Bill Opdyke, "Refactoring Object-Oriented Frameworks". PhD Thesis Surge la 1ra. herramienta de refactoring: Refactoring Browser para Smalltalk. Transformación que preserva el comportamiento
Alejandra Garrido - CIITI VIII - Rosario Refactoring by Fowler Proceso de cambiar la estructura interna del software mejorando la organización, legibilidad, adaptabilidad y mantenibilidad del código luego que ha sido escrito que NO altera el comportamiento externo del sistema, que mejora su estructura interna Catálogo de refactorings Proceso manual
Alejandra Garrido - CIITI VIII - Rosario Proceso de Refactoring Implica Eliminar duplicaciones Simplificar lógicas complejas Clarificar códigos A través de cambios pequeños Hacer muchos cambios pequeños es mas fácil y más seguro que un gran cambio Cada pequeño cambio pone en evidencia otros cambios necesarios Testear después de cada cambio
Alejandra Garrido - CIITI VIII - Rosario Automatización del Refactoring Refactoring manual es muy costoso Refactorings automáticos deben ser: lo suficientemente potentes para manejar mejoras en el diseño lo suficientemente restrictivos de manera de preservar el comportamiento
Alejandra Garrido - CIITI VIII - Rosario Seguridad y utilidad Seguridad en la preservación del comportamiento brinda confianza Un refactoring “seguro” para un programa puede no mejorar su diseño Incluso aplicar refactorings arbitrariamente puede corromper el diseño Una herramienta de refactoring debe asegurar que preserva el comportamiento pero no puede asegurar utilidad (mejoras en el diseño)
Alejandra Garrido - CIITI VIII - Rosario Photran – IDE para Fortran Fortran 77 a 2003 Open source Syntax highlighting Outline view Interactive debugger CVS support Refactoring engine
Alejandra Garrido - CIITI VIII - Rosario Extract Procedure Refactoring Mueve sentencias a una nueva subrutina y reemplaza las sentencias por una llamada a la subrutina, pasando las variables locales como parámetro. Seleccionar sentencias Elegir del menú Refactor -> Extract Procedure Ingresar el nombre
Alejandra Garrido - CIITI VIII - Rosario Abordaje del BBoM Los refactorings se hacen en pequeños pasos, pero en un BBoM los cambios necesarios son enormes Diferente granularidad de refactorings Orden de aplicación de refactorings Orden generalizable? Relación con el testing
Alejandra Garrido - CIITI VIII - Rosario Catalogar, sugerir Catálogo de refactorings para código legacy C refactoring [Garrido 2000] Incorporar herramientas para sugerir refactorings: ¿Qué métricas pueden ayudar a sugerir? ¿Es práctico incorporar herramientas de ánalisis? ¿Son útiles las herramientas gráficas?
Alejandra Garrido - CIITI VIII - Rosario Conclusiones Resulta interesante estudiar cómo se puede adecuar la técnica de refactoring para permitir la actualización de una aplicación legacy, de manera de poder ingresarla posteriormente a un proceso ágil de continuo mantenimiento Tener una herramienta que provee la infraestructura necesaria para el refactoring automático es un gran beneficio Página del proyecto:
Alejandra Garrido - CIITI VIII - Rosario Referencias Brian Foote and Joseph Yoder. “Big Ball of Mud”. Pattern Languages of Program Design 4. Addison-Wesley, William Opdyke. “Refactoring Object-Oriented Frameworks". PhD Thesis. UIUC Alejandra Garrido. “Software Refactoring Applied to C Programming Language”. MS Thesis. UIUC Martin Fowler. “Refactoring. Improving the design of existing code”. Addison-Wesley, Joshua Kerievsky. “Refactoring to Patterns”. Addison Wesley, Michael Feathers. “Working Effectively with Legacy Code”. Prentice Hall
Muchas gracias! Alejandra Garrido