Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una...
-
Upload
adora-madera -
Category
Documents
-
view
228 -
download
0
Transcript of Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una...
![Page 1: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/1.jpg)
Introducción a TDD
![Page 2: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/2.jpg)
Enfoque de la Charla
Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas utilizadas. El objetivo es clarificar el proceso de TDD de una forma práctica.
![Page 3: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/3.jpg)
Objetivos de la charla-- Introducir TDD como una alternativa viable al desarrollo tradicional.-- Crear cierta inquietud por profundizar mas en el tema.-- Exponer las ventajas que TDD tiene para el desarrollador.-- Explicar paso a paso como afrontar una funcionalidad con esta práctica.
![Page 4: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/4.jpg)
¿Que es TDD?Practica de desarrollo de software
Test First + Refactor
![Page 5: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/5.jpg)
¿Que ventajas trae TDD al desarrollador?• Confianza en el funcionamiento.• Foco en el desarrollo.• Código mas limpio. (Buenas practicas de
desarrollo y patrones).• Menos Bugs y mas localizados.• Documentación del código con los Tests.• Menos reinicio del servidor para probar.
![Page 6: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/6.jpg)
Realizar el menor diseño posible antes de empezar. Solo lo necesario (Generalmente la
Infraestructura de la aplicación). Los test guiarán el
diseño.
El ciclo de TDD
![Page 7: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/7.jpg)
El ciclo de TDD
Escribir un test Unitario que falle Hacer que
el test pase
Escribir un Test
Funcional Que falle
![Page 8: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/8.jpg)
Conocido como el ciclo ROJO->VERDE-
>REFACTOR
![Page 9: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/9.jpg)
¿Cuanto tiempo pueden estar los tests en rojo?
- - Test Unitarios deben pasar cuanto antes.- - Test funcionales tardarán mas en pasar. Y
estarán en un ciclo distinto del BUILD.- - Nunca se subirán tests que fallan al repositorio
de código fuente.- - Solo se desarrolla funcionalidad cuando exista
un Test fallido que lo requiera.
![Page 10: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/10.jpg)
¿Cuanto del código probar?
- - Probar TODO lo que tenga sentido probar.
- - No probar lo trivial obligatoriamente.
- - Spikes para Código de terceros.
![Page 11: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/11.jpg)
Nuestro ejemplo
![Page 12: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/12.jpg)
Herramientas de Soporte
JunitJmockCargoSeleniumSpring Test Context Framework
![Page 13: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/13.jpg)
Iteracion 0
Preparación de la infraestructura.
![Page 14: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/14.jpg)
¿Como comenzar?.
- - Escoger la funcionalidad (feature) mas pequeña posible que la aplicación deba cumplir.
- - Luego ir escogiendo funcionalidades de nuestro Product Backlog.
![Page 15: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/15.jpg)
Nuestro ejemplo.
Situación Inicial Situación
Final
![Page 16: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/16.jpg)
No debe conocer los objetos internos del sistema.
Debe reaccionar ante eventos que se produzcan en la capa "visible" (GUI, LOG, etc). Usualmente haciendo un poll para ver si hay cambios.
Test Funcional
![Page 17: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/17.jpg)
El primer Test Funcional
Selenium
![Page 18: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/18.jpg)
Prueba comportamientos en aislamiento TOTAL respecto al resto del sistema. Prueba una y solo una caracteristica sin que los demas elementos del sistema afecten su ejecución.
Test Unitario
![Page 19: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/19.jpg)
El primer Test Unitario. Ingreso a una cuenta. Test AccountTest no compila. Test AccountTest compila. Test AccountTest pasa el Test
(Implementacion Falsa) Triangulación. Test AccountTest pasa el Test. Sin Refactor.
![Page 20: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/20.jpg)
Cuando se sepa claramente la implementación obvia, aplicarla.
No es necesario siempre dar los pasos mas pequeños posibles.
Si la implementación obvia resulta no ser tan obvia, y al implementarla los test fallan. Hacer los pasos mas pequeños posibles.
El primer Test unitario.
![Page 21: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/21.jpg)
Probando las situaciones de error.
Segundo Test Unitario
![Page 22: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/22.jpg)
Segundo Test Unitario
- Retiro de una cuenta- Test con expectativa de excepción no compila- Test con expectativa de excepción si compila- Test con expectativa de excepción Pasa (Implementación)- Refactorizamos
![Page 23: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/23.jpg)
Segundo Test Unitario
Se deben probar todas las situaciones Realistas que pensemos que se pueden producir en la funcionalidad que probamos.
![Page 24: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/24.jpg)
Tercer Test Unitario
- Soporte de divisas EUR, USD, VNB- Test no compila- Pensar en el diseño del API desde el Test. (La divisa
debe ir en el construtor)- El Test compila- Adaptación de tests a los cambios de diseño.- Ejecución total de la suite de tests
![Page 25: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/25.jpg)
Tercer test unitario. Refactorizando y cambiando el diseño de la currency. Aplicando buenas practicas (Valores String) Pensar en el diseño (Añadir nuevo constructor a
Account con el monto)
![Page 26: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/26.jpg)
Probando un Servicio
Servicio de Transferencia de dinero- El Test no compila. Primera aproximación- Pensar en el diseño. Se cambia el Test para invocar al
API deseada- Implementamos.- Ejecutamos el Test.- Test de Regresión- Ejecutamos la suite de tests y arreglamos los fallos.
![Page 27: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/27.jpg)
Probando un Servicio
Los Tests son una red de seguridad contra la introducción de Bugs.
![Page 28: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/28.jpg)
Refactorización de la Transfer Operation- Mejorando aun mas las APIs- Implementar Un builder- Ejecutar los Tests
Probando un Servicio
![Page 29: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/29.jpg)
Transferencias entre 2 monedas distintas.- Sin factor de conversión- Con factor de conversión. Primera
aproximación.- Ejecutamos los tests.- Nuevamente los Tests impiden que un bug
llegue a producción.
Probando un Servicio
![Page 30: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/30.jpg)
- Refactorización del Transfer Service.- Single Responsibilty Principle- Extraemos un nuevo tipo. Creamos el CurrencyService.
Con TDD por supuesto.
Probando un Servicio
![Page 31: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/31.jpg)
En TDD existen dos momentos en los que se estudia el diseño de la aplicación. En la creación de los Tests y en la refactorización.
![Page 32: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/32.jpg)
Mock Objects
Introduciremos un Mock para la dependencia.
¿Qué es un Mock Object? Mock Hecho a mano. Jmock
![Page 33: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/33.jpg)
JMOCK
Nos permite con un lenguaje especifico de dominio definir Dobles de objetos para nuestros Test, y establecer las expectativas sobre estos objetos. Haciendo las dependencias Explicitas
![Page 34: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/34.jpg)
El uso de mocks
El uso de mocksSe puede establecer su necesidad en cualquiera de los dos tiempos de diseño. Escribir el Test, o la refactorización.
![Page 35: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/35.jpg)
Probando un servicio
- Refactorizamos CurrencyService- La responsabilidad de Conversión
la pasamos al enum.- Escribimos los Tests- Implementamos.
![Page 36: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/36.jpg)
Mock del DAO
Creamos el AccountServiceTest pensando en sus dependencias. Que nos guíen al diseño correcto.
![Page 37: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/37.jpg)
Test Driving el DAO. Test de Integración.
¿Qué es un test de integración?Spring Test Context Framework
![Page 38: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/38.jpg)
Modificando Tests
Agregamos la dependencia de Persistencia a la transferencia. Primero al Test.
![Page 39: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/39.jpg)
TDD el controlador.
Probando el Get de la funcionalidad.Probando el Post.Mock de HttpServletRequest
![Page 40: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/40.jpg)
TDD el controlador.
Un controlador es tan fácil de probar como cualquier otra clase.
![Page 41: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/41.jpg)
Ejecutando el Test Funcional
Cargo para iniciar el servidor. Selenium.
![Page 42: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/42.jpg)
Dao JDBC
Spring Test Context Framework
![Page 43: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/43.jpg)
Revisando el Code Coverage
Cobertura. Mvn site
Mas que medir la cobertura por porcentaje. Estar conscientes de que hemos probado lo necesario.
![Page 44: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/44.jpg)
Conclusiones Principales
-- TDD nos ayudan a mantener el foco de lo que queremos desarrollar.-- TDD nos sirve como red de seguridad para atrapar Bugs lo antes posible.-- TDD nos da seguridad de que lo que desarrollamos funciona.-- Tdd acelera el proceso de desarrollo.
![Page 45: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/45.jpg)
Bibliografía
![Page 46: Introducción a TDD. Enfoque de la Charla Presentar un ejemplo de principio a fin de una funcionalidad de un proyecto. Sin profundizar en las herramientas.](https://reader035.fdocuments.es/reader035/viewer/2022062519/5665b4331a28abb57c8feae4/html5/thumbnails/46.jpg)
Preguntas