volviendo a poner el “soft” en software
DESCRIPTION
Código fluído con refactorización: Volviendo a poner el “soft” en software. Presentación de Danijel Arsenovski en Agiles 2010, Lima.TRANSCRIPT
![Page 1: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/1.jpg)
Código fluído con refactorización: Volviendo a poner el “soft” en
software
ChileÁgilEmpower Agile 2010 - Todos los
derechos reservados
![Page 2: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/2.jpg)
Sobre el oradorNombre: Danijel ArsenovskiExperiencia: programador, desarrollador, arquitecto de software, autor etc.Libros
RevistasVisual Systems Journal, Visual Studio Magazine, .NET Developers Journal, Infoq.com etc.
Participo en la comunidad Chile Ágil - www.chileagil.cl
![Page 3: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/3.jpg)
“Soft” en SoftwareSoft (eng.) – blando, placido
"Se conoce como software1 al equipamiento lógico o soporte lógico de una computadora digital; comprende el conjunto de los componentes lógicos necesarios que hacen posible la realización de tareas específicas, en contraposición a los componentes físicos del sistema, llamados hardware. "
Wikipedia
Pregunta: ¿Qué apareció primero Winamp o Mp3 player (dispositivo)?
![Page 4: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/4.jpg)
Software debe ser fácil de
![Page 5: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/5.jpg)
Software es complejoAlgunos mecanismos para combatir complejidad
Modularidad Dividir para vencerResolver un problema complejo dividiéndolo en mas problemas mas simplesPregunta:
¿Es mejor tener mayor numero de módulos mas finos o tener menos módulos con mayor cantidad de código?¿No significa mayor numero de módulos == mayor complejidad?
Modularidad existe en diferentes nivelesEstructura
Permite añadir valor semánticoEncapsulación
Disminuye cantidad de información con cual debemos trabajar (carga cognitiva)
ReutilizaciónDisminuye complejidad y tamaño
Extensibilidad
![Page 6: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/6.jpg)
Cuando software deja de ser «soft»
¿Te ha tocado trabajar con software difícil de cambiar?
No sabes donde hay que modificar el códigoNo sabes si es el único lugar donde hay que modificar el códigoAl modificar el código, no tienes certeza si el programa va a fallar en alguna otra parteHay demasiadas dependencias internasNo hay un diseño claro Es difícil probar un módulo de forma aisladaEs difícil intercambiar una pieza con otra
Gran bola de lodo
![Page 7: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/7.jpg)
¿Por qué software se vuelve «hard»?
Con tiempo adquiere Deuda técnicaCrecimiento no reguladoReparaciones expeditas y repetidas
Resulta enInformación duplicada y globalizadaEstructura erosionada
Mentalidad Quick and dirtyResultados inmediatos con visión de corto plazo
Si funciona, no lo toques¿Sabiduría de ingeniería, o es la señal de que ya no tenemos control?
![Page 8: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/8.jpg)
A veces es necesario tomar el torro por las astas
![Page 9: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/9.jpg)
Tarde o temprano, si solamente juegas para evadir…
![Page 10: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/10.jpg)
¿Entonces, como mantener el «soft» en el software?
Pruebas automatizadas
Diseño
Refactorización
![Page 11: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/11.jpg)
Ciclo de Refactorización
Descubre como «huele» (code smell) el códigoRefactoriza (eliminando el mal olor)Ejecuta las pruebas
![Page 12: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/12.jpg)
Malos olores del código fuente
Metáfora para problema potencial en código.Es un síntoma.Es difícil imponer métricas o reglas exactas
¿Cual es el numero máximo de líneas que un método debe tener?¿Y numero mínimo?Herramientas de análisis estática de código fuente ayudan.. Pero hasta cierto punto.
![Page 13: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/13.jpg)
Refactorización
Mejora el diseño No cambia comportamiento visibleSoftware sigue operando correctamenteSe puede automatizar¿Refactorización no es nada nuevo?Elimina malos olores
![Page 14: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/14.jpg)
Desafío
Ejercicios con código legado
Detectar el mal olor
Proponer la solución (refactorización)
![Page 15: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/15.jpg)
Detecta el mal olor
![Page 16: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/16.jpg)
Comentarios
Comentarios mienten, código no miente Código se ejecuta, comentarios no
Llegan a ser obsoletos con facilidadSon buena señal que el código esta poco claro, demasiado complejo etc.Muchas veces son indicador de que un bloque de código merece ser un método apartePruebas unitarias son mejor alternativa para documentar el código
Refactorizaciones: Extraer método, Renombrar, Escribir prueba unitaria
![Page 17: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/17.jpg)
Método largo
Difícil de modificar, mantener, depurarDifícil de entenderDifícil de reutilizar
Refactorizaciones: Extraer método, Convertir método a clase
Pregunta: ¿Cuál es el numero máximo de las líneas de código fuente para un método bien hecho?
![Page 18: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/18.jpg)
Detecta el mal olor
![Page 19: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/19.jpg)
Código duplicado; no cumple con OCP
Pregunta: ¿Qué es OCP (Open-Closed Principle)?Código duplicado es el peor de los oloresMuchas veces resultado de un simple COPY/PASTEHace que software es difícil de mantener: cambias código en un lugar, pero no sabes de copia en otro lugar. Hace que cantidad total del código sea mayorHace que software es difícil de entender; no es claro que cada copia debe representar o como se diferencian
Refactorización: Reemplaza código de tipo con polimorfismo
![Page 20: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/20.jpg)
Detecta el olor
![Page 21: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/21.jpg)
Clase de datos
¿Data sin comportamiento?Comportamiento debe estar en alguna otra parteJuega contra encapsulación y estructuración A veces acompañado por olor de «Intimidad inapropiada»
Refactorización: Mover método
![Page 22: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/22.jpg)
Detecta el mal olor
![Page 23: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/23.jpg)
Lista de parámetros larga, Aglomerado de datos
Pregunta: ¿Podrían ser algunos de los parámetros relacionados? ¿Cuáles?Método esta haciendo demasiado
Refactorizaciones: Extraer método, Convertir método a clase, Reemplazar aglomeración de datos con objeto
![Page 24: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/24.jpg)
Detecta el mal olor
![Page 25: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/25.jpg)
Numero mágico
…o constante de otro tipo escrita directamente en el cuerpo del métodoCódigo poco claro: ¿Qué representa el valor?Muchas veces puede ser duplicado¿Si constantes mágicas son iguales, representan mismo o diferente concepto?
![Page 26: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/26.jpg)
Código heredado
TDD: Código sin pruebas automatizadas es heredado (legado).
Introducir pruebas unitarias «post-factum» es complicadoNecesitamos pruebas automatizadas bien elaboradas para asegurarnos de que nuestros cambios no introducen bugsInyección de Dependencia, mocks, stubs y spies al rescate!
![Page 27: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/27.jpg)
Red de objetos
![Page 28: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/28.jpg)
¿Y los colaboradores?
![Page 29: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/29.jpg)
¿Y que es …
Inyección de dependencias?Mocks?Stubs? Spies?Stubs parciales?
![Page 30: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/30.jpg)
¿Cómo introducir pruebas unitarias en proyectos legados?
Necesitamos aislar modulo (método)Si pruebas abarcan demasiado, no nos ayudan descubrir el raíz del problemaColaboradores
Inyección de dependencias permite reemplazar colaboradores con stubs que tienen comportamiento conocido y predefinido Mocks permiten verificar interacción con el colaborador que deja efectos segundarios no directos.
Clase larga con métodos largosEspías permiten introducir implementación falsa al parte de la clasePrueba unitaria ejercita el espía, donde el método bajo prueba es real, pero los otros métodos llamados por este método real son falsos
![Page 31: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/31.jpg)
Ejemplo practico
![Page 32: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/32.jpg)
Literatura
![Page 33: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/33.jpg)
ContactoNombre: Danijel ArsenovskiBlog: http://blog.refactoringin.netSitio:www.empoweragile.comCorreo electrónico: danijel.arsenovski at empoweragile.comLinkedIn:http://cl.linkedin.com/in/danijelarsenovskiFacebook:Danijel Arsenovski
![Page 34: Volviendo a poner el “soft” en software](https://reader033.vdocuments.site/reader033/viewer/2022052316/559ab5b31a28abbf378b4819/html5/thumbnails/34.jpg)
¿Preguntas?