SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
JUAN PABLO ALZATE VILLA
REFACTORING: IMPROVING THE DESIGN OF
EXISTING CODE
CAPITULO 1
¿QUÉ ES LA REFACTORIZACIÓN?
• Refactoring es el proceso de cambiar un sistema de software de
tal manera que no altera el comportamiento externo del código,
pero mejora su estructura interna.
• Es una manera disciplinada de limpiar Código que minimiza las
posibilidades de introducir errores.
• Con la refactorización se puede tomar un mal diseño y después
de este volver a trabajar en código bien diseñado.
EL PUNTO DE PARTIDA
(THE STARTING POINT)
• Antes que todo lo primero es analizar el código cuando
encuentre que tiene que agregar una función a un programa, y
el código del programa no es Estructurado de una manera
conveniente para agregar la característica, primero refactorice
el programa para hacerlo Fácil de modo que agregar la nueva
característica sea mas simple, después simplemente se agrega
la característica.
EL PRIMER PASO EN LA REFACTORIZACIÓN
(THE FIRST STEP IN REFACTORING)
• Realiza una prueba del programa para construir
un conjunto solido de pruebas , estas son
esenciales ya que se pueden introducir errores
en este…. Al hacer la refactorización, nos
basaremos en las pruebas.
DESCOMPOSICIÓN Y REDISTRIBUCIÓN DEL
MÉTODO DE DECLARACIÓN
(DECOMPOSING AND REDISTRIBUTING THE STATEMENT METHOD)
• Descomponer métodos grandes en algo más
pequeño ya que estos tienden a hacer las cosas
más manejables. Son más fáciles de trabajar y
moverse.
ELIMINACIÓN DE VARIABLES TEMPORALES
• las variables temporales pueden ser un
problema. Son útiles sólo dentro de su Propia
rutina, y por lo tanto alientan largas y complejas
rutinas.
CONCLUSIONES FINALES
• Varias refactorizaciones, incluyendo método de extracción,
método de movimiento y reemplazar condicional Con
polimorfismo.
• Todo esto conduce métodos mejor distribuidos y un código que
es más fácil entender.
• el ritmo de la refactorización: prueba, cambio pequeño, prueba,
pequeño cambio, prueba, pequeño cambio. es ese ritmo el que
permite que la refactorización se mueva sin peligro.
ALGUNOS EJEMPLOS DE REFACTORING
• Eliminación de variables temporales
En este caso tenemos dos variables temporales, las cuales se están
utilizando para obtener un total de los alquileres cliente. tanto las
versiones ASCII como HTML requieren estos totales. lo apropiado seria usar
Replace Temp con Query para reemplazar totalAmount y frecuente
RentalPoints con los métodos de consulta. las consultas son accesibles a
cualquier método de la clase y por lo tanto alientan un diseño más limpio sin
largos y complejos códigos:
se reemplazo TotalAmount con un método de cargo
en el cliente:
este no es el caso más simple con ReplaceTemp y el Query TotalAmount fue asignado a
dentro del bucle, así que se tiene que copiar el bucle en el método de consulta.
después de compilar y probar esa refactorización, se hizo lo mismo para los puntos frecuentes:
Refactoring: improving the desing of existing code Cap 1

Más contenido relacionado

La actualidad más candente

Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoHernan Wilkinson
 
Clean code 9
Clean code 9Clean code 9
Clean code 9540deg
 
Continuous Testing en un ambiente DevOps
Continuous Testing en un ambiente DevOpsContinuous Testing en un ambiente DevOps
Continuous Testing en un ambiente DevOpsSoftware Guru
 
Pruebas de documentacion
Pruebas de documentacionPruebas de documentacion
Pruebas de documentacionSantos Coca
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con JenkinsCésar Hernández
 
Argentesting 2019 - Cambiando el paradigma de la automatización
Argentesting 2019 - Cambiando el paradigma de la automatizaciónArgentesting 2019 - Cambiando el paradigma de la automatización
Argentesting 2019 - Cambiando el paradigma de la automatizaciónArgentesting
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumSoftware Guru
 
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
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Argentesting 2019 - Cómo convertirse en un tester ágil
Argentesting 2019 - Cómo convertirse en un tester ágilArgentesting 2019 - Cómo convertirse en un tester ágil
Argentesting 2019 - Cómo convertirse en un tester ágilArgentesting
 
Fases de dasorrollo de un software Mapa Conceptual
Fases de dasorrollo de un software Mapa ConceptualFases de dasorrollo de un software Mapa Conceptual
Fases de dasorrollo de un software Mapa Conceptualariannalizeeth
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Pruebas Unitarias
Pruebas UnitariasPruebas Unitarias
Pruebas Unitariasggarber
 

La actualidad más candente (20)

Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de Diseño
 
Clean code 9
Clean code 9Clean code 9
Clean code 9
 
Integracion continua
Integracion continuaIntegracion continua
Integracion continua
 
Continuous Testing en un ambiente DevOps
Continuous Testing en un ambiente DevOpsContinuous Testing en un ambiente DevOps
Continuous Testing en un ambiente DevOps
 
Scrum overview
Scrum overview Scrum overview
Scrum overview
 
Pruebas de documentacion
Pruebas de documentacionPruebas de documentacion
Pruebas de documentacion
 
Integración contínua con Jenkins
Integración contínua con JenkinsIntegración contínua con Jenkins
Integración contínua con Jenkins
 
Integración Continua
Integración ContinuaIntegración Continua
Integración Continua
 
Fases del proceso de programación
Fases del proceso de programaciónFases del proceso de programación
Fases del proceso de programación
 
Argentesting 2019 - Cambiando el paradigma de la automatización
Argentesting 2019 - Cambiando el paradigma de la automatizaciónArgentesting 2019 - Cambiando el paradigma de la automatización
Argentesting 2019 - Cambiando el paradigma de la automatización
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de Selenium
 
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
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Argentesting 2019 - Cómo convertirse en un tester ágil
Argentesting 2019 - Cómo convertirse en un tester ágilArgentesting 2019 - Cómo convertirse en un tester ágil
Argentesting 2019 - Cómo convertirse en un tester ágil
 
Fases de dasorrollo de un software Mapa Conceptual
Fases de dasorrollo de un software Mapa ConceptualFases de dasorrollo de un software Mapa Conceptual
Fases de dasorrollo de un software Mapa Conceptual
 
¿Y qué pinta la Integración Continua en un sitio como éste?
¿Y qué pinta la Integración Continua en un sitio como éste?¿Y qué pinta la Integración Continua en un sitio como éste?
¿Y qué pinta la Integración Continua en un sitio como éste?
 
Actividad 07 zsar
Actividad 07 zsarActividad 07 zsar
Actividad 07 zsar
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Pruebas Unitarias
Pruebas UnitariasPruebas Unitarias
Pruebas Unitarias
 

Destacado

Capitulo 7 moving features between objects
Capitulo 7  moving features between objectsCapitulo 7  moving features between objects
Capitulo 7 moving features between objectsJ Pablo Rivera
 
Refactoring: Improving the design of existing code. Chapter 6.
Refactoring: Improving the design of existing code. Chapter 6.Refactoring: Improving the design of existing code. Chapter 6.
Refactoring: Improving the design of existing code. Chapter 6.Andrés Callejas González
 
Implementing a testing strategy
Implementing a testing strategyImplementing a testing strategy
Implementing a testing strategyDaniel Giraldo
 
Indefinite pronouns updated
Indefinite pronouns updatedIndefinite pronouns updated
Indefinite pronouns updatedLorenachumbravo
 
Zion the little dog show book
Zion the little dog show bookZion the little dog show book
Zion the little dog show bookbowenslide
 
Agile Marketing (for books)
Agile Marketing (for books)Agile Marketing (for books)
Agile Marketing (for books)Peter McCarthy
 
The benefits of healthy wetlands from a planning wf wfinal
The benefits of healthy wetlands from a planning wf wfinalThe benefits of healthy wetlands from a planning wf wfinal
The benefits of healthy wetlands from a planning wf wfinalruralfringe
 
Yr 2 sose qld mapping presentation week 3
Yr 2 sose qld mapping presentation week 3Yr 2 sose qld mapping presentation week 3
Yr 2 sose qld mapping presentation week 3mrswato
 
Intro to tsql unit 2
Intro to tsql   unit 2Intro to tsql   unit 2
Intro to tsql unit 2Syed Asrarali
 

Destacado (20)

Chapter 5 refactoring
Chapter 5 refactoringChapter 5 refactoring
Chapter 5 refactoring
 
Capitulo 7 moving features between objects
Capitulo 7  moving features between objectsCapitulo 7  moving features between objects
Capitulo 7 moving features between objects
 
Refactoring: Improving the design of existing code. Chapter 6.
Refactoring: Improving the design of existing code. Chapter 6.Refactoring: Improving the design of existing code. Chapter 6.
Refactoring: Improving the design of existing code. Chapter 6.
 
Continuos Delivery
Continuos DeliveryContinuos Delivery
Continuos Delivery
 
Chapter 8
Chapter 8Chapter 8
Chapter 8
 
Implementing a testing strategy
Implementing a testing strategyImplementing a testing strategy
Implementing a testing strategy
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Expo 2 parametros
Expo 2   parametrosExpo 2   parametros
Expo 2 parametros
 
Making method calls_simpler
Making method calls_simplerMaking method calls_simpler
Making method calls_simpler
 
[React-Native Tutorial] Map
[React-Native Tutorial] Map[React-Native Tutorial] Map
[React-Native Tutorial] Map
 
Indefinite pronouns updated
Indefinite pronouns updatedIndefinite pronouns updated
Indefinite pronouns updated
 
Zion the little dog show book
Zion the little dog show bookZion the little dog show book
Zion the little dog show book
 
SugarCRM for Mac Users
SugarCRM for Mac UsersSugarCRM for Mac Users
SugarCRM for Mac Users
 
Agile Marketing (for books)
Agile Marketing (for books)Agile Marketing (for books)
Agile Marketing (for books)
 
The benefits of healthy wetlands from a planning wf wfinal
The benefits of healthy wetlands from a planning wf wfinalThe benefits of healthy wetlands from a planning wf wfinal
The benefits of healthy wetlands from a planning wf wfinal
 
Yr 2 sose qld mapping presentation week 3
Yr 2 sose qld mapping presentation week 3Yr 2 sose qld mapping presentation week 3
Yr 2 sose qld mapping presentation week 3
 
Im at war
Im at warIm at war
Im at war
 
Planning for growth
Planning for growthPlanning for growth
Planning for growth
 
Intro to tsql unit 2
Intro to tsql   unit 2Intro to tsql   unit 2
Intro to tsql unit 2
 
Self Development
Self Development Self Development
Self Development
 

Similar a Refactoring: improving the desing of existing code Cap 1

Similar a Refactoring: improving the desing of existing code Cap 1 (20)

Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
16416960 modelo-cascada-espiralincremental
16416960 modelo-cascada-espiralincremental16416960 modelo-cascada-espiralincremental
16416960 modelo-cascada-espiralincremental
 
Apuntes
ApuntesApuntes
Apuntes
 
Optimizacioncodigo
OptimizacioncodigoOptimizacioncodigo
Optimizacioncodigo
 
Tipos de ciclo de vida
Tipos de ciclo de vidaTipos de ciclo de vida
Tipos de ciclo de vida
 
Ciclo devida
Ciclo devidaCiclo devida
Ciclo devida
 
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertidoTaller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
Taller n20 compiladores_optimizacion_codigo_9_julio_2020-convertido
 
RUP (Resumen)
RUP (Resumen)RUP (Resumen)
RUP (Resumen)
 
OPTIMIZACION DE CODIGO
OPTIMIZACION DE CODIGOOPTIMIZACION DE CODIGO
OPTIMIZACION DE CODIGO
 
Vuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfVuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdf
 
Rup[1]
Rup[1]Rup[1]
Rup[1]
 
expodesarrollo29
expodesarrollo29expodesarrollo29
expodesarrollo29
 
Metodologia xp
Metodologia xpMetodologia xp
Metodologia xp
 
Taller n20 compiladores_optimizacion_codigo_1_julio_2021
Taller n20 compiladores_optimizacion_codigo_1_julio_2021Taller n20 compiladores_optimizacion_codigo_1_julio_2021
Taller n20 compiladores_optimizacion_codigo_1_julio_2021
 
Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)
 
Famas
FamasFamas
Famas
 
fases del proceso de programacion
fases del proceso de programacion fases del proceso de programacion
fases del proceso de programacion
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de software
 
Modelos del ciclo de vida del software
Modelos del ciclo de vida del softwareModelos del ciclo de vida del software
Modelos del ciclo de vida del software
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 

Último

02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdfRodrigo Cerón
 
Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfMiSpotify
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfLeonardoOa4
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfdarosario3d
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarjosuesj13
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdfRodrigo Cerón
 
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...AlexaRamirez39
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfdaa100407
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfjuanrubenc78
 

Último (9)

02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf
 
Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdf
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdf
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizar
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf
 
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdf
 

Refactoring: improving the desing of existing code Cap 1

  • 1. JUAN PABLO ALZATE VILLA REFACTORING: IMPROVING THE DESIGN OF EXISTING CODE CAPITULO 1
  • 2. ¿QUÉ ES LA REFACTORIZACIÓN? • Refactoring es el proceso de cambiar un sistema de software de tal manera que no altera el comportamiento externo del código, pero mejora su estructura interna. • Es una manera disciplinada de limpiar Código que minimiza las posibilidades de introducir errores. • Con la refactorización se puede tomar un mal diseño y después de este volver a trabajar en código bien diseñado.
  • 3. EL PUNTO DE PARTIDA (THE STARTING POINT) • Antes que todo lo primero es analizar el código cuando encuentre que tiene que agregar una función a un programa, y el código del programa no es Estructurado de una manera conveniente para agregar la característica, primero refactorice el programa para hacerlo Fácil de modo que agregar la nueva característica sea mas simple, después simplemente se agrega la característica.
  • 4. EL PRIMER PASO EN LA REFACTORIZACIÓN (THE FIRST STEP IN REFACTORING) • Realiza una prueba del programa para construir un conjunto solido de pruebas , estas son esenciales ya que se pueden introducir errores en este…. Al hacer la refactorización, nos basaremos en las pruebas.
  • 5. DESCOMPOSICIÓN Y REDISTRIBUCIÓN DEL MÉTODO DE DECLARACIÓN (DECOMPOSING AND REDISTRIBUTING THE STATEMENT METHOD) • Descomponer métodos grandes en algo más pequeño ya que estos tienden a hacer las cosas más manejables. Son más fáciles de trabajar y moverse.
  • 6. ELIMINACIÓN DE VARIABLES TEMPORALES • las variables temporales pueden ser un problema. Son útiles sólo dentro de su Propia rutina, y por lo tanto alientan largas y complejas rutinas.
  • 7. CONCLUSIONES FINALES • Varias refactorizaciones, incluyendo método de extracción, método de movimiento y reemplazar condicional Con polimorfismo. • Todo esto conduce métodos mejor distribuidos y un código que es más fácil entender. • el ritmo de la refactorización: prueba, cambio pequeño, prueba, pequeño cambio, prueba, pequeño cambio. es ese ritmo el que permite que la refactorización se mueva sin peligro.
  • 8. ALGUNOS EJEMPLOS DE REFACTORING • Eliminación de variables temporales En este caso tenemos dos variables temporales, las cuales se están utilizando para obtener un total de los alquileres cliente. tanto las versiones ASCII como HTML requieren estos totales. lo apropiado seria usar Replace Temp con Query para reemplazar totalAmount y frecuente RentalPoints con los métodos de consulta. las consultas son accesibles a cualquier método de la clase y por lo tanto alientan un diseño más limpio sin largos y complejos códigos:
  • 9. se reemplazo TotalAmount con un método de cargo en el cliente:
  • 10. este no es el caso más simple con ReplaceTemp y el Query TotalAmount fue asignado a dentro del bucle, así que se tiene que copiar el bucle en el método de consulta. después de compilar y probar esa refactorización, se hizo lo mismo para los puntos frecuentes: