Post on 23-Jan-2016
Refactoring de aplicaciones legacy
Alejandra GarridoCONICET – LIFIA UNLP – CAETI UAI
Proyecto CAETI: “El refactoring como práctica fundamental para la comprensión, restructuración,
y actualización de aplicaciones legacy”
http://uaicel.uai.edu.ar/gruporefactoring/inicio.aspx
Alejandra Garrido - CIITI VIII - Rosario 2010 2
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 2010 3
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 2010 4
Aplicaciones Legacy
Desarrolladas durante años Muchos programadores involucrados Costosas Imprescindibles Escaso mantenimiento
Sin tests de unidad[Feathers]
Alejandra Garrido - CIITI VIII - Rosario 2010 5
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” www.bcs.org
Alejandra Garrido - CIITI VIII - Rosario 2010 6
¿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 2010 7
Refactoring
Univ. of Illinois at Urbana-Champaign (UIUC) Bill Opdyke, "Refactoring Object-Oriented Frameworks".
PhD Thesis. 1992. Surge la 1ra. herramienta de refactoring: Refactoring
Browser para Smalltalk.
Transformación que preserva el comportamiento
Alejandra Garrido - CIITI VIII - Rosario 2010 8
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 2010 9
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 2010 10
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 2010 11
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 2010 12
Photran – IDE para Fortran
Fortran 77 a 2003 Open source Syntax highlighting Outline view Interactive
debugger CVS support Refactoring
engine
http://www.eclipse.org/photran/
Alejandra Garrido - CIITI VIII - Rosario 2010 13
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 2010 14
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 2010 15
Catalogar, sugerir
Catálogo de refactorings para código legacy C refactoring [Garrido 2000] www.fortranrefactoring.com.ar
Incorporar herramientas parasugerir 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 2010 16
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:http://uaicel.uai.edu.ar/gruporefactoring/inicio.aspx
Alejandra Garrido - CIITI VIII - Rosario 2010 17
Referencias
Brian Foote and Joseph Yoder. “Big Ball of Mud”. Pattern Languages of Program Design 4. Addison-Wesley, 2000.
William Opdyke. “Refactoring Object-Oriented Frameworks". PhD Thesis. UIUC. 1992.
Alejandra Garrido. “Software Refactoring Applied to C Programming Language”. MS Thesis. UIUC. 2000.
Martin Fowler. “Refactoring. Improving the design of existing code”. Addison-Wesley, 1999.
Joshua Kerievsky. “Refactoring to Patterns”. Addison Wesley, 2004.
Michael Feathers. “Working Effectively with Legacy Code”. Prentice Hall. 2005.
Muchas gracias!
Alejandra Garrido
alejandra.garrido@lifia.info.unlp.edu.ar