SlideShare una empresa de Scribd logo
1 de 30
Marcos Montaño
Javier Pérez
https://bitbucket.org/jperezq/refactoring-fundamentals
http://bit.ly/1gVzxcI
 “The process of changing a software system in such a way
that it does not alter the external behaviour of the code, yet
improves its internal structure.”
Martin Fowler, “Refactoring: Improving the Design of Existing Code”, Addison-
Wesley,1999.
 El proceso de cambiar un sistema de software
de manera que no se altere el
comportamiento externo del código, pero si
se mejore su estructura.
 Mejora la calidad del código:
◦ Reduce la duplicidad
◦ Mejora la mantenibilidad
◦ Acelera la implementación de nueva funcionalidad
◦ Previene la permanencia de las malas practicas en
el código (code smells)
 Código duplicado
 Métodos largos
 Clases grandes
 Largas listas de parámetros (argumentos)
 Generalización innecesaria
 Atributos temporales
 Middle Man
 Intimidad inapropiada
 Clases tontas
 Comentarios excesivos
 No hay un “tiempo de refactorización” , es un
hábito
 Antes de agregar nueva funcionalidad
◦ Encontrar código a modificar
◦ Reparar el código para prevenir mas repetición
 Cuando necesitas arreglar un bicho
◦ Hace el código mas compresible
◦ Ayuda a encontrar el bicho
 Durante los Code Reviews
◦ Un nuevo enfoque ve las cosas de forma diferente
◦ Una revisión mas efectiva
 Añadir nuevas
capacidades al
sistema
 Añadir nuevos tests
 Mantener los tests
corriendo
 No agrega nueva
funcionalidad
 No agrega tests (pero
pueden haber
cambios menores)
 Reestructura el
código para eliminar
redundancia
 A un cliente técnico, no es difícil indicarle los
beneficios
 A un cliente enfocado en la calidad, hacer
énfasis en aspectos de calidad
◦ Presentarlo como un proceso de revisión
 A un cliente enfocado en los plazos, no le
digas
◦ Encuentra una manera de integrarlo en tu trabajo
cotidiano
◦ Ahorra tiempo, pero algunos de los clientes no lo
notaran
 Tests pasando
 La aplicación funcionando
 Necesitamos poder probar que no rompimos
nada con la refactorización
NUNCA refactorizar una aplicación
rota
 Partimos de un sistema que representa la
simulación de una red local. El equipo de
desarrollo inicial ha trabajado en satisfacer
muy rápidamente los requerimientos iniciales
y ha logrado lanzar la versión 1.4 del sistema;
y ésta contiene toda la funcionalidad deseada
para la primera etapa.
 El cliente ahora quiere funcionalidad nueva y
el equipo de desarrollo teme que el diseño
actual no sea lo suficientemente flexible.
lanSimulation
lanSimulation.internals
Network
LANSimulation
Packet
Node
lanSimulation.tests
LANTests
lanSimulation
lanSimulation.internals
Network
+defaultExample(): Network
+isInitialized(): boolean
+hasWorkstation(nm: String): boolean
+requestWorkstationPrintsDocument()
+requestBroadcast(report: Writer)
+printOn(buffer: StringBuffer)
+printHTML(buffer: StringBuffer)
+printXML(buffer: StringBuffer)
LANSimulation
Packet
+message_:String
+origin_:String
+destination_:String
Node
+type_:byte
+name_:String
+nextNode_:Node
 Versión 1.0: Impresión básica del documento
◦ Las estaciones de trabajo solicitan a la red de trabajo de
Token Ring el entregar un documento a un nodo que
representa una impresora.
 Versión 1.1: Registro de paquetes enviados
◦ Cada vez que un nodo envía un paquete al siguiente
nodo, debería guardarse el evento en un registro.
 Versión 1.2: Impresión en PostScript
◦ Un paquete puede empezar con “!PS” en cuyo caso las
impresoras deberían reconocerlo como PostScript e
invocar el trabajo de impresión adecuado.
 Versión 1.3: Registro de impresión
◦ Las impresoras deberían registrar el autor y el título
del documento que se esta imprimiendo.
 Versión 1.4: Paquete de difusión
◦ Introduce un nuevo tipo de paquete “BROADCAST”
que debería ser aceptado por todos los nodos en la
red.
 Versión 2.0: Leer desde un archivo
◦ Leer la configuración de una red y los trabajos que
se imprimieron desde un archivo XML
 Versión 2.1: Nodo de acceso
◦ Introducir un nuevo nodo “Gateway”, que puede
reconocer todas las direcciones en su subred
actual.
 Versión 2.2: Lista de nodos compilada
◦ Usando el paquete Broadcast, el gateway pide
periódicamente a todos los nodos que respondan
con su nombre.
 Versión 3.0: Interfaz Grafica
◦ El sistema debería tener una interfaz grafica que
será capaz de mostrar la animación de lo que esta
ocurriendo.
lanSimulation
lanSimulation.internals
Network
+defaultExample(): Network
+isInitialized(): boolean
+hasWorkstation(nm: String): boolean
+requestWorkstationPrintsDocument()
+requestBroadcast(report: Writer)
+printOn(buffer: StringBuffer)
+printHTML(buffer: StringBuffer)
+printXML(buffer: StringBuffer)
LANSimulation
Packet
+message_:String
+origin_:String
+destination_:String
Node
+type_:byte
+name_:String
+nextNode_:Node
 Se puede encontrar en varias partes de la
aplicación codigo duplicado:
◦ El codigo de registro se repite 2 veces en el método
“printDocument”
◦ El codigo de impresion se repite 3 veces, dos veces
en el método “requestWorkstationPrintsDocument”
y una en el método “requestBroadcast”.
 Para solucionar esto utilizarmos la técnica
Extraer Metodo
 La clase Network contiene casi toda la logica
de la aplicación.
 Por ejemplo podemos ver que los métodos
que acabamos de extraer utilizan campos
internos de Node y Packet.
 Eso nos indica que la logica deberia estar en
esas clases, para esto utilizarmos la técnica
Mover Método
 Todavia se vé que hay lógica duplicada en el
código, la forma en la que se navega a través
de los nodos hasta circular por la toda la Red
• Se puede ver lógica duplicada en los métodos
“requestWorkstationPrintsDocument” y
“requestBroadcast”
 Aplicaremos Extraer Método para sacar la
lógica duplicada y la optimizaremos.
 Se puede ver que la lógica de impresión por
tipo está duplicada en los metodos "printOn",
"printHTMLOn", "printXMLOn".
 Para encapsular y aislar comportamiento
diferente segun el tipo es recomendabe usar
una jerarquía de Clases.
lanSimulation
lanSimulation.internals
Network
+defaultExample(): Network
+isInitialized(): boolean
+hasWorkstation(nm: String): boolean
+requestWorkstationPrintsDocument()
+requestBroadcast(report: Writer)
+printOn(buffer: StringBuffer)
+printHTML(buffer: StringBuffer)
+printXML(buffer: StringBuffer)
LANSimulation
Packet
+message_:String
+origin_:String
+destination_:String
+getAuthor(): String
+getTitle(): String
+isPostScript(): boolean
Node
+name_:String
+nextNode_:Node
+Attribute1
+atDestination(packet: Packet): boolean
+atOrigin(packet: Packet): boolean
+logPacketPassage(report: Writer)
+printDocument(document, report): boolean
+printOn(buffer: StringBuffer)
+printXMLOn(buffer: StringBuffer)
+send(packet, report): boolean
 A través del trabajo de refactorización hemos
facilitado el mantenimiento del sistema y la
implementación de nueva funcionalidad.
◦ Versión 2.0: Leer desde un archivo
◦ Versión 2.1: Nodo de acceso
◦ Versión 2.2: Lista de nodos compilada
◦ Versión 3.0: Interfaz Grafica
 Usar un sistema de versionamiento de
código.
 Hacer correr los tests constantemente
(Después de cada cambio).
 Código fuente:
https://bitbucket.org/jperezq/refactoring-
fundamentals
 Refactoring Lab Session, Serge Demeyer,
Universidad de Antwerp,
http://ansymo.ua.ac.be/artefacts/refactoring
-lab-session
 Refactoring 101, Adam Culp, PHP-
ZendCon2013,
http://www.slideshare.net/adamculp/refactor
ing-23666462
 “Object-Oriented Reengineering Patterns”, Serge
Demeyer, Stéphane Ducasse, Oscar Nierstrasz,
http://scg.unibe.ch/download/oorp
 "Refactoring: Improving the Design of Existing
Code", Martin Fowler , Kent Beck , John Brant,
http://refactoring.com
¡¡¡Gracias!!!

Más contenido relacionado

La actualidad más candente

Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacionJechu2013
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitareabowelmx
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en javaTensor
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteJosé Antonio Sandoval Acosta
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii1 2d
 
Configurar snmp en cisco
Configurar snmp en ciscoConfigurar snmp en cisco
Configurar snmp en ciscochulver
 
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXTaller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXRichard Eliseo Mendoza Gafaro
 
Concurrency with Promise Style – Rayco Araña
Concurrency with Promise Style – Rayco ArañaConcurrency with Promise Style – Rayco Araña
Concurrency with Promise Style – Rayco ArañaDroidcon Spain
 
Notas clase
Notas claseNotas clase
Notas clase1 2d
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii1 2d
 

La actualidad más candente (19)

Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacion
 
Programación multitarea
Programación multitareaProgramación multitarea
Programación multitarea
 
Multitarea e hilos en java
Multitarea e hilos en javaMultitarea e hilos en java
Multitarea e hilos en java
 
Comandos java
Comandos javaComandos java
Comandos java
 
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente
 
Comandos de java
Comandos de javaComandos de java
Comandos de java
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
Introducción a Kotlin para desarrolladores Java
Introducción a Kotlin para desarrolladores JavaIntroducción a Kotlin para desarrolladores Java
Introducción a Kotlin para desarrolladores Java
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
Hilo de ejecución
Hilo de ejecuciónHilo de ejecución
Hilo de ejecución
 
Configurar snmp en cisco
Configurar snmp en ciscoConfigurar snmp en cisco
Configurar snmp en cisco
 
codigos
codigos codigos
codigos
 
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIXTaller plataformas tecnológicas ORACLE MSDOS Y UNIX
Taller plataformas tecnológicas ORACLE MSDOS Y UNIX
 
S6-Contenedores
S6-ContenedoresS6-Contenedores
S6-Contenedores
 
Concurrency with Promise Style – Rayco Araña
Concurrency with Promise Style – Rayco ArañaConcurrency with Promise Style – Rayco Araña
Concurrency with Promise Style – Rayco Araña
 
S6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores EspecialesS6-POO-3.2 Contenedores Especiales
S6-POO-3.2 Contenedores Especiales
 
Notas clase
Notas claseNotas clase
Notas clase
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 

Destacado

Refactorización (EN ESPANOL)
Refactorización (EN ESPANOL)Refactorización (EN ESPANOL)
Refactorización (EN ESPANOL)Rodrigo Branas
 
Estrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareEstrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareLucia Gasperin
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionAbner Gerardo
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blancaStudentPc
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Softwarearacelij
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de softwareGuillermo Lemus
 
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventes
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventesJOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventes
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventesQuadrant Communications
 
Trigger - Passez à l'automatisation marketing
Trigger - Passez à l'automatisation marketingTrigger - Passez à l'automatisation marketing
Trigger - Passez à l'automatisation marketingAlain SOUNDIRARASSOU
 
Relations street art, graffiti & collectivités locales - R. Cordat
Relations street art, graffiti & collectivités locales - R. Cordat Relations street art, graffiti & collectivités locales - R. Cordat
Relations street art, graffiti & collectivités locales - R. Cordat Rébecca Cordat
 
Logement
LogementLogement
LogementCele Ko
 
M le journal - Février 2014
M le journal - Février 2014M le journal - Février 2014
M le journal - Février 2014Vincent Manilève
 
Conférence sur le crowdfunding nathalie courville
Conférence sur le crowdfunding nathalie courvilleConférence sur le crowdfunding nathalie courville
Conférence sur le crowdfunding nathalie courvilleNathalie Courville
 
Atelier national de restitution sur le foncier rural dans la zone affectée pa...
Atelier national de restitution sur le foncier rural dans la zone affectée pa...Atelier national de restitution sur le foncier rural dans la zone affectée pa...
Atelier national de restitution sur le foncier rural dans la zone affectée pa...Global Water Initiative - West Africa
 
Les caprices du tempschp 3(3)
Les caprices du tempschp 3(3)Les caprices du tempschp 3(3)
Les caprices du tempschp 3(3)JulieVerzilli
 

Destacado (20)

Refactorización (EN ESPANOL)
Refactorización (EN ESPANOL)Refactorización (EN ESPANOL)
Refactorización (EN ESPANOL)
 
Javadoc
JavadocJavadoc
Javadoc
 
Javadoc
JavadocJavadoc
Javadoc
 
Estrategias de Pruebas de Software
Estrategias de Pruebas de SoftwareEstrategias de Pruebas de Software
Estrategias de Pruebas de Software
 
Caja negra!!
Caja negra!!Caja negra!!
Caja negra!!
 
Pruebas de caja blanca y negra
Pruebas  de caja blanca y negraPruebas  de caja blanca y negra
Pruebas de caja blanca y negra
 
Caja negra (ejemplos)...
Caja negra (ejemplos)...Caja negra (ejemplos)...
Caja negra (ejemplos)...
 
Pruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacionPruebas de sistemas y aceptacion
Pruebas de sistemas y aceptacion
 
Software caja negra y caja blanca
Software caja negra y caja blancaSoftware caja negra y caja blanca
Software caja negra y caja blanca
 
Pruebas De Software
Pruebas De SoftwarePruebas De Software
Pruebas De Software
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 
Word 2015
Word 2015Word 2015
Word 2015
 
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventes
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventesJOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventes
JOIN confie à Dynamics CRM Online la gestion ‘cloud’ de ses ventes
 
Trigger - Passez à l'automatisation marketing
Trigger - Passez à l'automatisation marketingTrigger - Passez à l'automatisation marketing
Trigger - Passez à l'automatisation marketing
 
Relations street art, graffiti & collectivités locales - R. Cordat
Relations street art, graffiti & collectivités locales - R. Cordat Relations street art, graffiti & collectivités locales - R. Cordat
Relations street art, graffiti & collectivités locales - R. Cordat
 
Logement
LogementLogement
Logement
 
M le journal - Février 2014
M le journal - Février 2014M le journal - Février 2014
M le journal - Février 2014
 
Conférence sur le crowdfunding nathalie courville
Conférence sur le crowdfunding nathalie courvilleConférence sur le crowdfunding nathalie courville
Conférence sur le crowdfunding nathalie courville
 
Atelier national de restitution sur le foncier rural dans la zone affectée pa...
Atelier national de restitution sur le foncier rural dans la zone affectée pa...Atelier national de restitution sur le foncier rural dans la zone affectée pa...
Atelier national de restitution sur le foncier rural dans la zone affectée pa...
 
Les caprices du tempschp 3(3)
Les caprices du tempschp 3(3)Les caprices du tempschp 3(3)
Les caprices du tempschp 3(3)
 

Similar a Fundamentos de la Refactorización

Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfArquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfErnestoAmillano1
 
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos 7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos Luis Fernando Aguas Bucheli
 
Adaptación de JMeter para la minería de datos de estructuras de páginas web.
Adaptación de JMeter para la minería de datos de estructuras de páginas web.Adaptación de JMeter para la minería de datos de estructuras de páginas web.
Adaptación de JMeter para la minería de datos de estructuras de páginas web.Agustín Sabater
 
GUIA 1 HILOS Y PROCESOS
GUIA 1 HILOS Y PROCESOSGUIA 1 HILOS Y PROCESOS
GUIA 1 HILOS Y PROCESOSMario Martinez
 
Manual de net beans
Manual de net beansManual de net beans
Manual de net beanspepepaso
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladoresSheyli Patiño
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacionEvelin Oña
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesVisual Engineering
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slonyJohanna Mendez
 
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docx
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docxConfiguracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docx
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docxSandraMilenaPerez5
 

Similar a Fundamentos de la Refactorización (20)

Cecyte jerecuaro
Cecyte jerecuaroCecyte jerecuaro
Cecyte jerecuaro
 
algorimo distribuidos
algorimo distribuidosalgorimo distribuidos
algorimo distribuidos
 
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdfArquitecturas de Programación Avanzadas en NI LabVIEW.pdf
Arquitecturas de Programación Avanzadas en NI LabVIEW.pdf
 
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos 7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
7-Unidad 2: Diseños de Vista-2.3 Introducción Web Services-Desarrollo Ejemplos
 
Adaptación de JMeter para la minería de datos de estructuras de páginas web.
Adaptación de JMeter para la minería de datos de estructuras de páginas web.Adaptación de JMeter para la minería de datos de estructuras de páginas web.
Adaptación de JMeter para la minería de datos de estructuras de páginas web.
 
GUIA 1 HILOS Y PROCESOS
GUIA 1 HILOS Y PROCESOSGUIA 1 HILOS Y PROCESOS
GUIA 1 HILOS Y PROCESOS
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
SGBD Postgresql
SGBD PostgresqlSGBD Postgresql
SGBD Postgresql
 
Manual de net beans
Manual de net beansManual de net beans
Manual de net beans
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Reporte final
Reporte finalReporte final
Reporte final
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Trabajo de sistemas de informacion
Trabajo de sistemas de informacionTrabajo de sistemas de informacion
Trabajo de sistemas de informacion
 
Workshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensionesWorkshop iOS 3: Testing, protocolos y extensiones
Workshop iOS 3: Testing, protocolos y extensiones
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docx
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docxConfiguracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docx
Configuracion Equipos Activos-GFPI-F-019_Formato_Guia_de_Aprendizaje.docx
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 

Último

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 

Último (16)

Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 

Fundamentos de la Refactorización

  • 3.  “The process of changing a software system in such a way that it does not alter the external behaviour of the code, yet improves its internal structure.” Martin Fowler, “Refactoring: Improving the Design of Existing Code”, Addison- Wesley,1999.  El proceso de cambiar un sistema de software de manera que no se altere el comportamiento externo del código, pero si se mejore su estructura.
  • 4.  Mejora la calidad del código: ◦ Reduce la duplicidad ◦ Mejora la mantenibilidad ◦ Acelera la implementación de nueva funcionalidad ◦ Previene la permanencia de las malas practicas en el código (code smells)
  • 5.  Código duplicado  Métodos largos  Clases grandes  Largas listas de parámetros (argumentos)  Generalización innecesaria  Atributos temporales  Middle Man  Intimidad inapropiada  Clases tontas  Comentarios excesivos
  • 6.  No hay un “tiempo de refactorización” , es un hábito  Antes de agregar nueva funcionalidad ◦ Encontrar código a modificar ◦ Reparar el código para prevenir mas repetición  Cuando necesitas arreglar un bicho ◦ Hace el código mas compresible ◦ Ayuda a encontrar el bicho  Durante los Code Reviews ◦ Un nuevo enfoque ve las cosas de forma diferente ◦ Una revisión mas efectiva
  • 7.  Añadir nuevas capacidades al sistema  Añadir nuevos tests  Mantener los tests corriendo  No agrega nueva funcionalidad  No agrega tests (pero pueden haber cambios menores)  Reestructura el código para eliminar redundancia
  • 8.  A un cliente técnico, no es difícil indicarle los beneficios  A un cliente enfocado en la calidad, hacer énfasis en aspectos de calidad ◦ Presentarlo como un proceso de revisión  A un cliente enfocado en los plazos, no le digas ◦ Encuentra una manera de integrarlo en tu trabajo cotidiano ◦ Ahorra tiempo, pero algunos de los clientes no lo notaran
  • 9.  Tests pasando  La aplicación funcionando  Necesitamos poder probar que no rompimos nada con la refactorización NUNCA refactorizar una aplicación rota
  • 10.
  • 11.  Partimos de un sistema que representa la simulación de una red local. El equipo de desarrollo inicial ha trabajado en satisfacer muy rápidamente los requerimientos iniciales y ha logrado lanzar la versión 1.4 del sistema; y ésta contiene toda la funcionalidad deseada para la primera etapa.  El cliente ahora quiere funcionalidad nueva y el equipo de desarrollo teme que el diseño actual no sea lo suficientemente flexible.
  • 12.
  • 14. lanSimulation lanSimulation.internals Network +defaultExample(): Network +isInitialized(): boolean +hasWorkstation(nm: String): boolean +requestWorkstationPrintsDocument() +requestBroadcast(report: Writer) +printOn(buffer: StringBuffer) +printHTML(buffer: StringBuffer) +printXML(buffer: StringBuffer) LANSimulation Packet +message_:String +origin_:String +destination_:String Node +type_:byte +name_:String +nextNode_:Node
  • 15.  Versión 1.0: Impresión básica del documento ◦ Las estaciones de trabajo solicitan a la red de trabajo de Token Ring el entregar un documento a un nodo que representa una impresora.  Versión 1.1: Registro de paquetes enviados ◦ Cada vez que un nodo envía un paquete al siguiente nodo, debería guardarse el evento en un registro.  Versión 1.2: Impresión en PostScript ◦ Un paquete puede empezar con “!PS” en cuyo caso las impresoras deberían reconocerlo como PostScript e invocar el trabajo de impresión adecuado.
  • 16.  Versión 1.3: Registro de impresión ◦ Las impresoras deberían registrar el autor y el título del documento que se esta imprimiendo.  Versión 1.4: Paquete de difusión ◦ Introduce un nuevo tipo de paquete “BROADCAST” que debería ser aceptado por todos los nodos en la red.
  • 17.  Versión 2.0: Leer desde un archivo ◦ Leer la configuración de una red y los trabajos que se imprimieron desde un archivo XML  Versión 2.1: Nodo de acceso ◦ Introducir un nuevo nodo “Gateway”, que puede reconocer todas las direcciones en su subred actual.
  • 18.  Versión 2.2: Lista de nodos compilada ◦ Usando el paquete Broadcast, el gateway pide periódicamente a todos los nodos que respondan con su nombre.  Versión 3.0: Interfaz Grafica ◦ El sistema debería tener una interfaz grafica que será capaz de mostrar la animación de lo que esta ocurriendo.
  • 19. lanSimulation lanSimulation.internals Network +defaultExample(): Network +isInitialized(): boolean +hasWorkstation(nm: String): boolean +requestWorkstationPrintsDocument() +requestBroadcast(report: Writer) +printOn(buffer: StringBuffer) +printHTML(buffer: StringBuffer) +printXML(buffer: StringBuffer) LANSimulation Packet +message_:String +origin_:String +destination_:String Node +type_:byte +name_:String +nextNode_:Node
  • 20.
  • 21.  Se puede encontrar en varias partes de la aplicación codigo duplicado: ◦ El codigo de registro se repite 2 veces en el método “printDocument” ◦ El codigo de impresion se repite 3 veces, dos veces en el método “requestWorkstationPrintsDocument” y una en el método “requestBroadcast”.  Para solucionar esto utilizarmos la técnica Extraer Metodo
  • 22.  La clase Network contiene casi toda la logica de la aplicación.  Por ejemplo podemos ver que los métodos que acabamos de extraer utilizan campos internos de Node y Packet.  Eso nos indica que la logica deberia estar en esas clases, para esto utilizarmos la técnica Mover Método
  • 23.  Todavia se vé que hay lógica duplicada en el código, la forma en la que se navega a través de los nodos hasta circular por la toda la Red • Se puede ver lógica duplicada en los métodos “requestWorkstationPrintsDocument” y “requestBroadcast”  Aplicaremos Extraer Método para sacar la lógica duplicada y la optimizaremos.
  • 24.  Se puede ver que la lógica de impresión por tipo está duplicada en los metodos "printOn", "printHTMLOn", "printXMLOn".  Para encapsular y aislar comportamiento diferente segun el tipo es recomendabe usar una jerarquía de Clases.
  • 25. lanSimulation lanSimulation.internals Network +defaultExample(): Network +isInitialized(): boolean +hasWorkstation(nm: String): boolean +requestWorkstationPrintsDocument() +requestBroadcast(report: Writer) +printOn(buffer: StringBuffer) +printHTML(buffer: StringBuffer) +printXML(buffer: StringBuffer) LANSimulation Packet +message_:String +origin_:String +destination_:String +getAuthor(): String +getTitle(): String +isPostScript(): boolean Node +name_:String +nextNode_:Node +Attribute1 +atDestination(packet: Packet): boolean +atOrigin(packet: Packet): boolean +logPacketPassage(report: Writer) +printDocument(document, report): boolean +printOn(buffer: StringBuffer) +printXMLOn(buffer: StringBuffer) +send(packet, report): boolean
  • 26.  A través del trabajo de refactorización hemos facilitado el mantenimiento del sistema y la implementación de nueva funcionalidad. ◦ Versión 2.0: Leer desde un archivo ◦ Versión 2.1: Nodo de acceso ◦ Versión 2.2: Lista de nodos compilada ◦ Versión 3.0: Interfaz Grafica
  • 27.  Usar un sistema de versionamiento de código.  Hacer correr los tests constantemente (Después de cada cambio).
  • 28.  Código fuente: https://bitbucket.org/jperezq/refactoring- fundamentals  Refactoring Lab Session, Serge Demeyer, Universidad de Antwerp, http://ansymo.ua.ac.be/artefacts/refactoring -lab-session  Refactoring 101, Adam Culp, PHP- ZendCon2013, http://www.slideshare.net/adamculp/refactor ing-23666462
  • 29.  “Object-Oriented Reengineering Patterns”, Serge Demeyer, Stéphane Ducasse, Oscar Nierstrasz, http://scg.unibe.ch/download/oorp  "Refactoring: Improving the Design of Existing Code", Martin Fowler , Kent Beck , John Brant, http://refactoring.com