2. Agenda
1. Introducción
2. Qué es refactorización?
3. La metáfora de los dos sombreros
4. Ventajas de refactorización
5. Hacer Test
6. Ejemplos
7. Refactorización de serial date CleanCode Capitulo 16
1. Conseguir que funcione
2. Hacer que sea correcta
8. Otros ejemplos
3. Introducción
Muchas veces:
1. Tenemos código ya hecho que está funcionando.
2. Necesitamos tocar ese código para que haga más cosas, para hacer más eficiente un
algoritmo, más vistosa la salida del programa, etc.
Pero es normal:
1. Que cuando queramos modificar el código, encontremos que no es del todo amigable .
2. Que introducir las modificaciones nos cuesta más de la cuenta porque hay métodos muy
largos que no se entienden bien, hay pocos comentarios, hay trozos de código que nos sirven
en parte, pero no del todo, clases muy grandes de las que nos sirven algunos métodos pero
nos sobra el resto, etc.
4. Solución
Una solución a lo anterior seria:
◦ añadir la funcionalidad como podamos
◦ copiar código y pegarlo en otro sitio
◦ modificarlo para que se parezca a lo que queremos añadir
◦ Entre otras cosas
Esta solución funciona, pero deja el código más “feo" de lo que estaba.
5. Solución
La otra solución es la refactorización, que es:
◦ Una limpieza de código
◦ Algo que no arregla errores ni incorpora funcionalidades
◦ Algo que Altera la estructura interna del código sin cambiar su
comportamiento externo
◦ Si durante una refactorización se ha cambiado el comportamiento del
software o web, es que has generado un error o bug
7. La metáfora de los dos sombreros
Un programador tiene a su disposición dos sombreros. Uno de ellos
etiquetado "hacer código nuevo", y el otro con la etiqueta "arreglar
código".
1. Cuando empieza a programar, se pone el sombrero de "hacer
código nuevo".
2. Cuando ve que algo que se puede mejorar, se pone el sombrero
de "arreglar código".
8. La metáfora de los dos sombreros
No mete nada nuevo, esta cambiando código de sitio, haciendo
métodos más pequeños, entre otras cosas.
El código funcionando exactamente igual que antes, pero hecho de
otra manera que le facilita seguir con su trabajo. Nuevamente se
cambia el sombrero por el de "hacer código nuevo" y sigue
programando.
9. La metáfora de los dos sombreros
1. Si añadimos código nuevo, NO arreglamos el existente.
2. Si estamos arreglando el existente, NO añadimos funcionalidades
nuevas.
3. Código correcto: Que es acertado o adecuado a determinadas
condiciones o circunstancias.
4. Código Funciona: Realizar la función que le es propia.
10. Ventajas de hacer refactorización
1. Mejorar la facilidad de comprensión del código
2. Cambiar su estructura y diseño
3. Eliminar código muerto
4. Facilitar el mantenimiento en el futuro
11. Hacer test
Una cosa importante de la refactorización es que se parte de un código que más
o menos funciona, se modifica y el código debe seguir funcionando igual que
antes. Si hacemos refactorización con frecuencia, es importante tener algún
medio de probar que el código sigue funcionando después de "arreglarlo".
Una opción es, después de arreglar el código, compilarlo, ejecutarlo y probar
que más o menos sigue funcionado, especialmente en las partes de código que
hemos tocado.
Otra opción algo más "profesional" es hacer unos pequeños programas de
prueba. Estos programas (conocidos como test unitarios)
12. “Pasos” para hacer refactorización
Mirar Que no
1. Hayan comentarios inapropiados, obsoletos
2. código comentado, duplicado o muerto
3. Haya demasiados argumentos en las funciones
4. Hayan funciones muertas
5. Hayan varios lenguajes en un archivo de código
6. Comportamiento incorrecto en los limites
7. Exceso de información
8. Desorden
9. Entro otros
13. Ejemplos
1. a=33*b-Math.round(b+cerdoGordo);
2. // calcula la cantidad de grasa de un chorizo de mi pueblo
a=33*b-Math.round(b+cerdoGordo);
3. public double calculaCantidadGrasaChorizo (double b, double cerdoGordo)
{
return 33*b-Math.round(b+cerdoGordo);
}
a=calculaCantidadGrasaChorizo (b, cerdoGordo);
15. Refactorización de SerialDate
1. Aquí el autor analiza una biblioteca de java llamada SerialDate. El dice que va a destrozar lo
que hizo el creador de esta biblioteca, no es con mala intención, solo va hacer una revisión
profesional
2. Debemos sentirnos cómodos y que deberíamos agradecer cuando alguien nos hace una
revisión de código. A través de las criticas es cómo podemos aprender, como hacen médicos,
pilotos o abogados, nosotros como programadores tenemos que aprender hacerlo.
3. SerialDate es una clase que representa una fecha en java, java ya cuenta con una, pero esta
(SerialDate) nos ayuda a representar las fechas sin preocuparnos de la hora del días , la zona
horaria y otros aspectos , a diferente que la que presenta java que puede ser muy precisa y
muy incomoda porque la fecha depende de la zona horaria.
16. Conseguir que funcione
Esta clase cuenta con pruebas unitarias , todas son satisfactorias , pero no prueban todo lo que
puede fallar y hay funciones que nunca se invocan.
Para mirar mas a fondo utilizo una herramienta de cobertura llamada clover para verificar mejor
y vio que de las 185 instrucciones solo se ejecutan 91 instrucciones.
El entonces empieza cambiando, descomentado, quitando código, y agregando pruebas triviales,
para hacer que funcione a totalidad el código y las pruebas.
23. Otros ejemplos
public List getVentas(Date fechaDesde, Date fechaHasta, boolean
incluyeVentasPendientes, String nombreVendedorLike, String
productoEmpiezaCon, BigDecimal montoMinimo, BigDecimal
montoMaximo, ...) {……}
La solución: generar un objeto que cumpla esta misión, en principio como
agrupador de los parámetros de búsqueda:
public List getVentas(BusquedaVentas busqueda) {….}
Antes de empezar hablar del cap 17 de clean code, hare una definición de refectoring
Lo ideal es hacer la refactorización sobre la marcha , según se va escribiendo código (aunque casi nunca lo hacemos). La idea la explica perfectamente la metáfora de los dos sombreros
1.Hay que programar hasta que tiene hecha alguna parte del programa y le hace una primera prueba, compilando y viendo que funciona. Y deja programar
2.Se pone a leer el código de nuevo
Cuando se pone el sombrero de arreglar código
Tenemos que tener en cuenta
Los programas unitarios que se explicaron en exposiciones pasadas
Aplicar lo del capitulo 17 de cleancode, no ses necesario aplicar todos los pasos, aplique los que cree necesario
Los menciono por encima por que ya los explicaron
si en un trozo de código o en un método nos vemos en la necesidad o creemos que es adecuado poner un comentario, es porque ese código no es lo suficientement claro. Si no es lo suficientemente claro, debe rehacerse para que lo sea.
lo ideal es hacer un método con el nombre lo suficientemente claro como para que no necesite comentario
Es muy difícil decir y entender todo lo que hizo el autor de cleancode, entonces dire los mas relevante
SerialDate David Gilbert, este es un programador experimentado y competente, muestra un elevado grado de profesionalidad y disciplina es su código, por ende se puede considerar de calidad, pero aun así como dice el autor
25 de diciembre de 2004 fue sábado y el siguiente sábado fue el 1 de enero de 2005 pero al ejecutarlo devuelve 25 de diciembre como siguiente sábado, error
La línea 719 nunca se ejecuta, osea que 718 siempre es false, pero en el código indica que debe ser true. La variable adjust siempre es negativa y no puede ser mayor o igual a 4, osea q esta incorrecto
Esto era por un comportamiento incorrecto en los limites(se habla en el cap 17 que ya expusieron), nos basamos en nuestra intuición y si encontramos un error nos quedamos solo con ese, tenemos que mirar mas a fondo, que un error puede conllevar a mas errores