SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Replayable Refactorings
Juan Cruz Gardey
¿Qué permite hacer la herramienta?
Capturar y exportar refactorings realizados en una
imagen para poder re-ejecutarlos en otras.
Motivación
➔ Las aplicaciones se desarrollan reutilizando componentes (frameworks,
librerías, etc.).
➔ El código de estos componentes suele cambiar con mucha frecuencia.
◆ los cambios muchas veces “rompen” el código de las aplicaciones.
◆ Los usuarios se ven obligados a modificar su código para poder usar la
última versión de un componente.
Motivación (2)
➔ Para no tener problemas de compatibilidad, se dejan de realizar algunas
modificaciones.
◆ Ejemplo: eliminación de métodos “deprecated”.
◆ Mayor costo de mantenimiento.
Solución propuesta
➔ Realizar modificaciones por medio de refactorings.
➔ Exportar estos refactorings y volver a ejecutarlos en otras imágenes.
➔ Imagen origen (entorno de desarrollo de un componente):
◆ Los refactorings actualizan el código del componente.
➔ Imagenes destino (aplicaciones que utilizan ese componente):
◆ los refactorings actualizan el componente y también las aplicaciones
clientes.
Beneficios
➔ Desarrolladores de componentes pueden realizar modificaciones libremente.
➔ Usuarios actualizan sus aplicaciones automáticamente.
Menor costo de mantenimiento para ambos
Grabado de refactorings
➔ Capturar cada refactoring ni bien es aplicado en el código.
➔ Guardar todos sus datos para poder recrearlos en otro entorno.
➔ Exportación
◆ Archivos: Portabilidad.
Grabado de refactorings (2)
➔ El usuario puede elegir cuándo iniciar y finalizar una sesión de grabado.
◆ Visualizar los refactorings capturados hasta el momento.
◆ Cuando decide terminar se genera un archivo con todos sus
refactorings.
➔ Las ediciones manuales de código no se exportan. Únicamente los
refactorings.
Re-ejecución de refactorings
➔ Validez de los refactorings.
◆ Pueden ser válidos en una imagen y en otras no…
◆ Ejemplo: Una clase definida con el mismo nombre.
◆ Realizar chequeos para mostrarle al usuario cuáles no pueden ser
aplicados.
◆ Darle la posibilidad de corregir su código para poder realizarlos.
➔ Permitir aplicar solamente aquellos que resultaron válidos.
Re-ejecución de refactorings (2)
➔ El usuario debe poder elegir cuáles refactorings re-ejecutar.
◆ Ventaja: Flexibilidad, puede descartar aquellas modificaciones que no le
convengan…
◆ Problema: Algunos refactorings son aplicados sobre el resultado de otro
anterior
● DEPENDENCIAS ENTRE REFACTORINGS.
Re-ejecución de refactorings (3)
DEPENDENCIA ENTRE REFACTORINGS: La ejecución de un refactoring habilita la
aplicación de otro.
R1 = AddClass (Monolith).
R2 = AddMethod (Monolith, #bar).
R2 no puede ejecutarse sin R1.
➔ Necesidad de identificar estas dependencias.
Re-ejecución de refactorings (4)
Identificación de dependencias:
➔ Si se decide ejecutar un refactoring, también deben realizarse aquellos de los
cuales depende.
➔ Si no se hace un refactoring, tampoco pueden hacerse los que necesitan la
ejecución de este.
Re-ejecución de refactorings (5)
Identificación de dependencias:
➔ Asegurar que cualquier conjunto de refactorings elegidos por el
usuario se realiza de manera exitosa…
➔ Definición de postcondiciones de los refactorings.
Limitaciones de la herramienta
➔ Todos los cambios deben hacerse por medio de refactorings
◆ Hay algunas modificaciones que pueden ser hechas más rápidamente de forma
manual.
● Agregar una variable de instancia.
➔ No se puede asegurar que los refactorings elegidos por el usuario
conservan la funcionalidad de la aplicación.
Conclusiones
➔ Se construyó una herramienta que permite re-ejecutar refactorings en
una imagen del código cliente.
➔ Se calculan las precondiciones nuevamente en la imagen destino antes
de la ejecución.
➔ El desarrollador puede decidir no aplicar algún refactoring (ej: Remove
Method).
➔ La herramienta está disponible en SmalltalkHub con nombre
“ReplayableRefactorings”.
Funcionamiento
Replayable Refactorings by Juan Cruz Gardey
Replayable Refactorings by Juan Cruz Gardey
Replayable Refactorings by Juan Cruz Gardey
Replayable Refactorings by Juan Cruz Gardey
Replayable Refactorings by Juan Cruz Gardey

Mais conteúdo relacionado

Semelhante a Replayable Refactorings by Juan Cruz Gardey

Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIkaolong
 
Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software'Jorge Martinez
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de softwareSaul mendoza valdez
 
Introduccion a java script
Introduccion a java scriptIntroduccion a java script
Introduccion a java scriptLuis Aceituno
 
Modelo de cascadaa
Modelo de cascadaaModelo de cascadaa
Modelo de cascadaamendez45
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDDEmergya
 
Resumen para Estudiar
Resumen para EstudiarResumen para Estudiar
Resumen para Estudiargregoryj733
 
La programación extrema
La programación extremaLa programación extrema
La programación extremaingridleona
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceEsteve Graells
 
Mahikel s peñuelag_ensayo
Mahikel s peñuelag_ensayoMahikel s peñuelag_ensayo
Mahikel s peñuelag_ensayoMahikel Peñuela
 
Topicos Selectos de Xamarin
Topicos Selectos de XamarinTopicos Selectos de Xamarin
Topicos Selectos de XamarinLuis Beltran
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephpbetabeers
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la ProgramaciónPablo Parola
 

Semelhante a Replayable Refactorings by Juan Cruz Gardey (20)

Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Tipos de ciclo de vida
Tipos de ciclo de vidaTipos de ciclo de vida
Tipos de ciclo de vida
 
Tecnicas de ingenieria de software
Tecnicas de ingenieria de softwareTecnicas de ingenieria de software
Tecnicas de ingenieria de software
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de software
 
mapa conceptual prototipos.docx
mapa conceptual prototipos.docxmapa conceptual prototipos.docx
mapa conceptual prototipos.docx
 
prueva
pruevaprueva
prueva
 
Introduccion a java script
Introduccion a java scriptIntroduccion a java script
Introduccion a java script
 
Modelo de cascadaa
Modelo de cascadaaModelo de cascadaa
Modelo de cascadaa
 
PHP Unit y TDD
PHP Unit y TDDPHP Unit y TDD
PHP Unit y TDD
 
Resumen para Estudiar
Resumen para EstudiarResumen para Estudiar
Resumen para Estudiar
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Apuntes
ApuntesApuntes
Apuntes
 
Modelos
ModelosModelos
Modelos
 
La programación extrema
La programación extremaLa programación extrema
La programación extrema
 
Un Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en SalesforceUn Framework de Triggers Rock Solid en Salesforce
Un Framework de Triggers Rock Solid en Salesforce
 
Mahikel s peñuelag_ensayo
Mahikel s peñuelag_ensayoMahikel s peñuelag_ensayo
Mahikel s peñuelag_ensayo
 
Topicos Selectos de Xamarin
Topicos Selectos de XamarinTopicos Selectos de Xamarin
Topicos Selectos de Xamarin
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Intro a cakephp
Intro a cakephpIntro a cakephp
Intro a cakephp
 
Introducción a la Programación
Introducción a la ProgramaciónIntroducción a la Programación
Introducción a la Programación
 

Mais de FAST

Threads, Critical Sections, and Termination
Threads, Critical Sections, and TerminationThreads, Critical Sections, and Termination
Threads, Critical Sections, and TerminationFAST
 
OOP with Smalltalk
OOP with SmalltalkOOP with Smalltalk
OOP with SmalltalkFAST
 
Powerlang: a Vehicle for Lively Implementing Programming Languages
Powerlang: a Vehicle for Lively Implementing Programming LanguagesPowerlang: a Vehicle for Lively Implementing Programming Languages
Powerlang: a Vehicle for Lively Implementing Programming LanguagesFAST
 
Constructing 3D scenes with Woden Engine
Constructing 3D scenes with Woden EngineConstructing 3D scenes with Woden Engine
Constructing 3D scenes with Woden EngineFAST
 
Demystifying the creation of coding tools
Demystifying the creation of coding toolsDemystifying the creation of coding tools
Demystifying the creation of coding toolsFAST
 
Application Starter: the entry point for your application
Application Starter: the entry point for your applicationApplication Starter: the entry point for your application
Application Starter: the entry point for your applicationFAST
 
Improving the Pharo VM
Improving the Pharo VMImproving the Pharo VM
Improving the Pharo VMFAST
 
What is (not) Pharo 8?
What is (not) Pharo 8?What is (not) Pharo 8?
What is (not) Pharo 8?FAST
 
Stargate: an interstellar journey to RESTful APIs
Stargate: an interstellar journey to RESTful APIsStargate: an interstellar journey to RESTful APIs
Stargate: an interstellar journey to RESTful APIsFAST
 
Opening Smalltalks 2019
Opening Smalltalks 2019Opening Smalltalks 2019
Opening Smalltalks 2019FAST
 
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção Jr
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção JrSmalltalk Computers, Past and Future by Jecel Mattos de Assumpção Jr
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção JrFAST
 
Adaptive Compilation by Jecel Mattos de Assumpção Jr
Adaptive Compilation by Jecel Mattos de Assumpção JrAdaptive Compilation by Jecel Mattos de Assumpção Jr
Adaptive Compilation by Jecel Mattos de Assumpção JrFAST
 
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...Choosing where to run our objects: the S8 Smalltalk approach by Description:F...
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...FAST
 
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...FAST
 
Improving VASmalltalk deployment, availability and scalability with Docker by...
Improving VASmalltalk deployment, availability and scalability with Docker by...Improving VASmalltalk deployment, availability and scalability with Docker by...
Improving VASmalltalk deployment, availability and scalability with Docker by...FAST
 
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the world
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the worldVASmalltalk and Raspberry Pi powering the largest MIDI instrument of the world
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the worldFAST
 
Hands-on Raspberry Pi and VA Smalltalk - Starting Workshop
Hands-on Raspberry Pi and VA Smalltalk - Starting WorkshopHands-on Raspberry Pi and VA Smalltalk - Starting Workshop
Hands-on Raspberry Pi and VA Smalltalk - Starting WorkshopFAST
 
Live typing: Update and what's next by Hernan Wilkinson
Live typing: Update and what's next by Hernan WilkinsonLive typing: Update and what's next by Hernan Wilkinson
Live typing: Update and what's next by Hernan WilkinsonFAST
 
Enhanced Email Protocol Framework for VAST by Seth Berman
Enhanced Email Protocol Framework for VAST by Seth BermanEnhanced Email Protocol Framework for VAST by Seth Berman
Enhanced Email Protocol Framework for VAST by Seth BermanFAST
 
VA Smalltalk Product Update by Seth Berman
VA Smalltalk Product Update by Seth BermanVA Smalltalk Product Update by Seth Berman
VA Smalltalk Product Update by Seth BermanFAST
 

Mais de FAST (20)

Threads, Critical Sections, and Termination
Threads, Critical Sections, and TerminationThreads, Critical Sections, and Termination
Threads, Critical Sections, and Termination
 
OOP with Smalltalk
OOP with SmalltalkOOP with Smalltalk
OOP with Smalltalk
 
Powerlang: a Vehicle for Lively Implementing Programming Languages
Powerlang: a Vehicle for Lively Implementing Programming LanguagesPowerlang: a Vehicle for Lively Implementing Programming Languages
Powerlang: a Vehicle for Lively Implementing Programming Languages
 
Constructing 3D scenes with Woden Engine
Constructing 3D scenes with Woden EngineConstructing 3D scenes with Woden Engine
Constructing 3D scenes with Woden Engine
 
Demystifying the creation of coding tools
Demystifying the creation of coding toolsDemystifying the creation of coding tools
Demystifying the creation of coding tools
 
Application Starter: the entry point for your application
Application Starter: the entry point for your applicationApplication Starter: the entry point for your application
Application Starter: the entry point for your application
 
Improving the Pharo VM
Improving the Pharo VMImproving the Pharo VM
Improving the Pharo VM
 
What is (not) Pharo 8?
What is (not) Pharo 8?What is (not) Pharo 8?
What is (not) Pharo 8?
 
Stargate: an interstellar journey to RESTful APIs
Stargate: an interstellar journey to RESTful APIsStargate: an interstellar journey to RESTful APIs
Stargate: an interstellar journey to RESTful APIs
 
Opening Smalltalks 2019
Opening Smalltalks 2019Opening Smalltalks 2019
Opening Smalltalks 2019
 
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção Jr
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção JrSmalltalk Computers, Past and Future by Jecel Mattos de Assumpção Jr
Smalltalk Computers, Past and Future by Jecel Mattos de Assumpção Jr
 
Adaptive Compilation by Jecel Mattos de Assumpção Jr
Adaptive Compilation by Jecel Mattos de Assumpção JrAdaptive Compilation by Jecel Mattos de Assumpção Jr
Adaptive Compilation by Jecel Mattos de Assumpção Jr
 
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...Choosing where to run our objects: the S8 Smalltalk approach by Description:F...
Choosing where to run our objects: the S8 Smalltalk approach by Description:F...
 
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...
Using 128 GPU cores, Tensorflow and VASmalltalk to detect Kolsh beers with ES...
 
Improving VASmalltalk deployment, availability and scalability with Docker by...
Improving VASmalltalk deployment, availability and scalability with Docker by...Improving VASmalltalk deployment, availability and scalability with Docker by...
Improving VASmalltalk deployment, availability and scalability with Docker by...
 
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the world
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the worldVASmalltalk and Raspberry Pi powering the largest MIDI instrument of the world
VASmalltalk and Raspberry Pi powering the largest MIDI instrument of the world
 
Hands-on Raspberry Pi and VA Smalltalk - Starting Workshop
Hands-on Raspberry Pi and VA Smalltalk - Starting WorkshopHands-on Raspberry Pi and VA Smalltalk - Starting Workshop
Hands-on Raspberry Pi and VA Smalltalk - Starting Workshop
 
Live typing: Update and what's next by Hernan Wilkinson
Live typing: Update and what's next by Hernan WilkinsonLive typing: Update and what's next by Hernan Wilkinson
Live typing: Update and what's next by Hernan Wilkinson
 
Enhanced Email Protocol Framework for VAST by Seth Berman
Enhanced Email Protocol Framework for VAST by Seth BermanEnhanced Email Protocol Framework for VAST by Seth Berman
Enhanced Email Protocol Framework for VAST by Seth Berman
 
VA Smalltalk Product Update by Seth Berman
VA Smalltalk Product Update by Seth BermanVA Smalltalk Product Update by Seth Berman
VA Smalltalk Product Update by Seth Berman
 

Último

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Último (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

Replayable Refactorings by Juan Cruz Gardey

  • 2. ¿Qué permite hacer la herramienta? Capturar y exportar refactorings realizados en una imagen para poder re-ejecutarlos en otras.
  • 3. Motivación ➔ Las aplicaciones se desarrollan reutilizando componentes (frameworks, librerías, etc.). ➔ El código de estos componentes suele cambiar con mucha frecuencia. ◆ los cambios muchas veces “rompen” el código de las aplicaciones. ◆ Los usuarios se ven obligados a modificar su código para poder usar la última versión de un componente.
  • 4. Motivación (2) ➔ Para no tener problemas de compatibilidad, se dejan de realizar algunas modificaciones. ◆ Ejemplo: eliminación de métodos “deprecated”. ◆ Mayor costo de mantenimiento.
  • 5. Solución propuesta ➔ Realizar modificaciones por medio de refactorings. ➔ Exportar estos refactorings y volver a ejecutarlos en otras imágenes. ➔ Imagen origen (entorno de desarrollo de un componente): ◆ Los refactorings actualizan el código del componente. ➔ Imagenes destino (aplicaciones que utilizan ese componente): ◆ los refactorings actualizan el componente y también las aplicaciones clientes.
  • 6. Beneficios ➔ Desarrolladores de componentes pueden realizar modificaciones libremente. ➔ Usuarios actualizan sus aplicaciones automáticamente. Menor costo de mantenimiento para ambos
  • 7. Grabado de refactorings ➔ Capturar cada refactoring ni bien es aplicado en el código. ➔ Guardar todos sus datos para poder recrearlos en otro entorno. ➔ Exportación ◆ Archivos: Portabilidad.
  • 8. Grabado de refactorings (2) ➔ El usuario puede elegir cuándo iniciar y finalizar una sesión de grabado. ◆ Visualizar los refactorings capturados hasta el momento. ◆ Cuando decide terminar se genera un archivo con todos sus refactorings. ➔ Las ediciones manuales de código no se exportan. Únicamente los refactorings.
  • 9.
  • 10. Re-ejecución de refactorings ➔ Validez de los refactorings. ◆ Pueden ser válidos en una imagen y en otras no… ◆ Ejemplo: Una clase definida con el mismo nombre. ◆ Realizar chequeos para mostrarle al usuario cuáles no pueden ser aplicados. ◆ Darle la posibilidad de corregir su código para poder realizarlos. ➔ Permitir aplicar solamente aquellos que resultaron válidos.
  • 11.
  • 12. Re-ejecución de refactorings (2) ➔ El usuario debe poder elegir cuáles refactorings re-ejecutar. ◆ Ventaja: Flexibilidad, puede descartar aquellas modificaciones que no le convengan… ◆ Problema: Algunos refactorings son aplicados sobre el resultado de otro anterior ● DEPENDENCIAS ENTRE REFACTORINGS.
  • 13. Re-ejecución de refactorings (3) DEPENDENCIA ENTRE REFACTORINGS: La ejecución de un refactoring habilita la aplicación de otro. R1 = AddClass (Monolith). R2 = AddMethod (Monolith, #bar). R2 no puede ejecutarse sin R1. ➔ Necesidad de identificar estas dependencias.
  • 14. Re-ejecución de refactorings (4) Identificación de dependencias: ➔ Si se decide ejecutar un refactoring, también deben realizarse aquellos de los cuales depende. ➔ Si no se hace un refactoring, tampoco pueden hacerse los que necesitan la ejecución de este.
  • 15.
  • 16. Re-ejecución de refactorings (5) Identificación de dependencias: ➔ Asegurar que cualquier conjunto de refactorings elegidos por el usuario se realiza de manera exitosa… ➔ Definición de postcondiciones de los refactorings.
  • 17. Limitaciones de la herramienta ➔ Todos los cambios deben hacerse por medio de refactorings ◆ Hay algunas modificaciones que pueden ser hechas más rápidamente de forma manual. ● Agregar una variable de instancia. ➔ No se puede asegurar que los refactorings elegidos por el usuario conservan la funcionalidad de la aplicación.
  • 18. Conclusiones ➔ Se construyó una herramienta que permite re-ejecutar refactorings en una imagen del código cliente. ➔ Se calculan las precondiciones nuevamente en la imagen destino antes de la ejecución. ➔ El desarrollador puede decidir no aplicar algún refactoring (ej: Remove Method). ➔ La herramienta está disponible en SmalltalkHub con nombre “ReplayableRefactorings”.