EXPIANDO MI CÓDIGO LEGACY

@yamitcar

Software Crafter

Software Crafter

Lead Engineer at Dripsend

¿Y quién es el culpable de esté desastre?

¡¡¡YO!!!

A wareness
D  esire
K  nowledge

A  bility

R  enforcement

Awareness 

Efecto mariposa

...En un sistema dinámico caótico, cualquier pequeña  variación acabará dando lugar a situaciones impredecibles...

En otras palabras....

Yo no toco eso ni por el putas, por que ¡¡quién sabe que rompo!!

Todos sabemos lo que es, código...

  • Difícil de entender
  • Difícil de cambiar
  • Difícil cazar los bugs
  • Difícil de arreglar
  • Difícil de saber si quedo bien

y aun así, a nadie parece importarle ...

El sindrome de la ventana rota

Nos llena de malos hábitos

 

  • Desinterés
  • Descuido
  • Cambios de ultimo momento

Incluso los romantizamos....

Costo del cambio

Desire



¿Y dónde están los genios?

  • No tenemos tiempo de...

  • Nos volvemos victimas del mal código

  • Nos da una excusa

  • Nos da confort

¿La vida real?

No sólo software que funciona, sino también software bien diseñado.

No sólo responder al cambio, sino también agregar valor constantemente.

No sólo individuos e interacciones, sino también una comunidad de profesionales.

No sólo colaboración de clientes, sino también asociaciones productivas.

Es decir, en la búsqueda de los elementos de la izquierda, hemos encontrado indispensables los elementos de la derecha.

Knowledge 

"El código legacy es todo el aquel código que no ha sido testeado"

 

Michael Feathers

¿Dificultades para testearlo?

  • Estructuras in-accesibles
  • Múltiples responsabilidades
  • Static/Global 
  • Métodos que no se pueden sobre-escribir
  • Código espagueti
  • .....

Test it

Refactor it

¿Y como lo enfrento?

  1. Dejar de cavar - ¡No sirve agregar mal código al mal código!
  2. Trabajar en pequeños pasos  -¿ lo mejor es volverlo a construir de cero?
  3. "refactoring to test"

Controlar

- Los argumentos del método

- Los estados de los objetos

- El estado del sistema cuando se ejecuta

 

El código testeable, tiene pocos elementos a ser controlados.

 

Observar

- El valor de retorno del método

- El estado del objeto, si el método lo altera.

- Efectos colaterales

- Interacción con otros objetos

El código testeable es el que se puede observar y controlar

¡El equipo es la clave!

 

  • Developer Sign-off
  • Lunch and learn
  • Big visible chart
  • Presupuesto de refactor

Bueno... el equipo y la técnica.

Ability 

CodeCrap: https://bit.ly/3eMl3SO

public boolean isNegative(int i) {
    String s = Integer.parseInt(i);
    return s.startsWith("-");
}

---------------------------------------------------------------------

if(($_COOKIE["Desktop"] == '1' OR $HTTP_COOKIE_VARS["Desktop"] =='1'))
{
    $desktop = 1;
}
else
{
    $desktop = 1;
}

Universal legacy steps

Formatea el código

al estándar...

(cualquiera que sea)

 

Eliminar el ruido

Useless Comments
TODO's from the ancients
Commented out code
Unused privates
Unreachable branches

if(true)

Haz tu código testeable

¡se creativo e impecable!

Refactoring to test

Extract and override

Extrae el problema en un método aislado

Sobre escribe el método en una clase derivada

Prueba la clase derivada

El problema

RiskAssessor hace todas sus operaciones contra la BD.

Queremos modificar el comportamiento de

totalCapital.multiply()

Extract

Override

Test

Antes

Después

Reinforcement 

Seguir aprendiendo

https://www.cyber-dojo.org/

Refactoring with PSQL https://bit.ly/3eWCX5q

Software crasftmanship comunities

 

¡ Gracias !

Expiando mi legacy code

By Yamit Cardenas M

Expiando mi legacy code

  • 3,168