Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Refactorización

168 views

Published on

habla un poco sobre la refactorización y el capitulo 16 de cleancode

  • Be the first to comment

  • Be the first to like this

Refactorización

  1. 1. Refactorización DAVID SANTA ARBOLEDA UNIVERSIDAD PONTIFICA BOLIVARIANA
  2. 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. 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. 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. 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
  6. 6. La metáfora de los dos sombreros
  7. 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. 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. 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. 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. 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. 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. 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);
  14. 14. Ejemplos
  15. 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. 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.
  17. 17. Conseguir que funcione Antes if (baseDOW > targetWeekday) Despues if (baseDOW >= targetWeekday)
  18. 18. Conseguir que funcione
  19. 19. Hacer que sea correcta java.text.* java.util.*
  20. 20. Hacer que sea correcta
  21. 21. Otros ejemplos
  22. 22. Otros ejemplos
  23. 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) {….}
  24. 24. Otros ejemplos
  25. 25. Referencias http://www.chuidiang.com/ood/refactoring/refactoring.php http://ddsutn.com.ar/cursos/cursadas-anteriores/miercoles-a-la- noche-2012/seguimientoclasesmienoche2012/refactoring

×