Volviendo a poner el “soft” en software

34
Código fluído con refactorización: Volviendo a poner el “soft” en software ChileÁgil Empower Agile 2010 - Todos los derechos reservados

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 of Volviendo a poner el “soft” en software

Page 1: Volviendo a poner el “soft” en software

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

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

“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

Software debe ser fácil de

Page 5: Volviendo a poner el “soft” en software

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

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

¿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

A veces es necesario tomar el torro por las astas

Page 9: Volviendo a poner el “soft” en software

Tarde o temprano, si solamente juegas para evadir…

Page 10: Volviendo a poner el “soft” en software

¿Entonces, como mantener el «soft» en el software?

Pruebas automatizadas

Diseño

Refactorización

Page 11: Volviendo a poner el “soft” en software

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

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

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

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

Detecta el mal olor

Page 16: Volviendo a poner el “soft” en software

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

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

Detecta el mal olor

Page 19: Volviendo a poner el “soft” en software

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

Detecta el olor

Page 21: Volviendo a poner el “soft” en software

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

Detecta el mal olor

Page 23: Volviendo a poner el “soft” en software

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

Detecta el mal olor

Page 25: Volviendo a poner el “soft” en software

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

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

Red de objetos

Page 28: Volviendo a poner el “soft” en software

¿Y los colaboradores?

Page 29: Volviendo a poner el “soft” en software

¿Y que es …

Inyección de dependencias?Mocks?Stubs? Spies?Stubs parciales?

Page 30: Volviendo a poner el “soft” en software

¿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

Ejemplo practico

Page 32: Volviendo a poner el “soft” en software

Literatura

Page 33: Volviendo a poner el “soft” en software

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

¿Preguntas?