SlideShare una empresa de Scribd logo
1 de 40
Uzi Mamani Creative Commons (@uzigula)
Test Driven Development
Uzi Mamani
uzi.mamani@gmail.com
www.about.me/uzigula
2Uzi Mamani Creative Commons (@uzigula)
“I don’t have time to write
tests because I am too busy
debugging.”
3
¿Qué es Test Driven Development?
«TDD es escribir las pruebas
primero y dejar que estas
guíen o modifiquen el diseño»
Uzi Mamani Creative Commons (@uzigula)
4Uzi Mamani Creative Commons (@uzigula)
Dada la definición de TDD
¿Qué necesita usted para ponerlo en práctica?
Historias de Usuario
➢ Descripción : Un relato resumido que debe reflejar el que se
debe construir y por que.
➢ Conversaciones: Son los detalles que hay detrás de la
Historia, estas se generan durante las conversaciones con
por ejemplo el Product Owner.
➢ Validación : Criterios de Aceptación que permitan validar si
la Historia fue correctamente desarrollada.
5Uzi Mamani Creative Commons (@uzigula)
Ejemplo: Sitio Web de Viajes
6
Como un usuario, Deseo poder
reservar una habitación de Hotel
Como un usuario, Deseo poder
cancelar una reservación
Como un planificador de
Vacaciones, Deseo ver fotos de
los hoteles.
Como pasajero frecuente,
Deseo poder reutilizar una
reserva pasada, para así ahorrar
tiempo en mis reservas.
Uzi Mamani Creative Commons (@uzigula)
Criterios de Aceptación
7
Como un usuario, Deseo
poder cancelar una
reservación
✓ Un Miembro premium puede
cancelar una reserva el ultimo día
sin recargo.
✓ Un miembro no-premium se le
cobrará 10% si cancela el mismo
día de la reserva.
✓ Se debe enviar un Correo de
Confirmación.
✓ Se debe Notificar al Hotel de la
cancelación.
Uzi Mamani Creative Commons (@uzigula)
Test de Aceptación
Dado Juan usuario no-premium
Y Con una reserva para Hoy a las 19:00 con un valor s/. 500
Cuando Cancela la reserva
Entonces la reserva es cancelada
Y Juan debe pagar una penalidad de S/. 50.
(Ejemplo concreto)
8Uzi Mamani Creative Commons (@uzigula)
Ciclo de Test Driven Development
9
RED
Refact
or
Green
Uzi Mamani Creative Commons (@uzigula)
Kata : Stack
Se nos pide implementar un Pila.
1. La pila esta llena cuando se llega al total de elementos.
2. La pila es una estructura (LIFO – Last In First Out), por tanto
siempre se debe sacar el ultimo elemento ingresado a la pila
siempre cuando no este vacia.
10Uzi Mamani Creative Commons (@uzigula)
Pirámide de Testing
11Uzi Mamani Creative Commons (@uzigula)
¿Que es una prueba Unitaria?
Es una pieza de código automatizada, que invoca el método o
clase que está siendo testeada y verifica algunas asunciones
acerca del comportamiento lógico de dicho método o clase.
Generalmente escrito usando un framework de pruebas
unitarias, se ejecuta rápidamente, es completamente
automatizable, confiable, legible y mantenible.
12Uzi Mamani Creative Commons (@uzigula)
Como funciona un Test Unitario
13
Take it from The Art Of Unit Testing – Roy Osherove
2009
Uzi Mamani Creative Commons (@uzigula)
Ejemplo de Prueba Unitaria
14
@Test
public void IsValidFileName_validFile_ReturnsTrue()
{
//arrange
LogAnalyzer analyzer = new LogAnalyzer();
//act
bool result = analyzer.IsValidLogFileName("whatever.doc");
//assert
assertTrue(result, "filename should be valid!");
}
Uzi Mamani Creative Commons (@uzigula)
Características de las Pruebas Unitarias
✓ Fast
✓ Isolated
✓ Repetible
✓ Self-Verifying
✓ Timely
15Uzi Mamani Creative Commons (@uzigula)
Buenas prácticas de Pruebas Unitarias
16
1. Consistentes
2. Atómicos
3. Simple Responsabilidad
4. Auto Descriptivos
5. Los test no deben tener lógica
Uzi Mamani Creative Commons (@uzigula)
Buenas prácticas de Pruebas Unitarias
17
6. No manejan excepciones
7. Mensajes Claros
8. No mezclar el código
9. Separación por capa de negocio
10. Separación por tipo
Uzi Mamani Creative Commons (@uzigula)
Tres Leyes de Test Driven Development
1. You are not allowed to write any production code unless it
is to make a failing unit test pass.
2. You are not allowed to write any more of a unit test than is
sufficient to fail; and compilation failures are failures.
3. You are not allowed to write any more production code
than is sufficient to pass the one failing unit test.
18http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTddUzi Mamani Creative Commons (@uzigula)
Kata Login Api
Api de Autenticación
Como SysAdmin deseo un servicio que resuelva la
autenticación/autorización de un usuario a una determinada
aplicación, para así tener un único servicio de control de
acceso.
19Uzi Mamani Creative Commons (@uzigula)
Kata Login Api
Confirmación:
1. Acceso Autorizado
• Usuario y contraseña son válidos.
• Devolver un Response con el token de Autorización.
2. Acceso Denegado
• Usuario y/o contraseña no son válidos.
• Cuenta esta bloqueada.
• No tiene permisos para la aplicación solicitada.
• Servicio no esta disponible (falla infraestrutura)
20Uzi Mamani Creative Commons (@uzigula)
Enfoques para aplicar TDD en un
Desarrollo
21Uzi Mamani Creative Commons (@uzigula)
Outside-In
Se comienza con una clase o componente de alto nivel, se
mockean las dependencias necesarias. Cuando se ha finalizado
con el componente, nos movemos al colaborador previamente
mockeado y aplicamos TDD nuevamente ahí.
22
Mock
Collaborator
Collaborator
Class
User
Controller
Outer
Class
Model
System
Boundary
In
Out
Uzi Mamani Creative Commons (@uzigula)
Outside-In
Beneficios
• Permite pensar desde la perspectiva del usuario final, el
diseño está guiado por necesidades reales.
• Se construye incrementalmente partes completas de la
aplicación.
Desventajas
• Puede llevar al uso excesivo de mocks/stubs ocasionando
que las pruebas sean muy frágiles.
23Uzi Mamani Creative Commons (@uzigula)
Inside-Out
Comienza con una clase o componente de bajo nivel y se va
progresando a los de más alto nivel.
No utiliza mocking, debido a que los colaboradores son
previamente creados o se devuelven valores en duro.
24
Collaborator
Class
Collaborator
Class
User
Controller
Outer
Class
Model
System
Boundary
In
Out
Uzi Mamani Creative Commons (@uzigula)
Inside-Out
Beneficios
• Tiende a tener un mejor diseño.
Desventajas
• Puedes construir funcionalidad en las clases que nunca será
usada por la aplicación.
25Uzi Mamani Creative Commons (@uzigula)
Test Doubles e Isolation (Mock)
Frameworks
26Uzi Mamani Creative Commons (@uzigula)
Test Doubles
«Son todos aquellos objetos que
son creados para reemplazar a los
objetos reales con el propósito de
hacer pruebas »
27Uzi Mamani Creative Commons (@uzigula)
Isolation Mocking Frameworks
• Permiten crear test doubles de manera más simple, rápida y
sin errores.
• Ayudan a evitar escribir código repetitivo.
▪ .NET: Moq, RhinoMock, Typemock , Nsubstitute
▪ Java: Mockito, EasyMock, Jmock
▪ Ruby: RSpec Built-in, Mocha
28Uzi Mamani Creative Commons (@uzigula)
Test Doubles Stubs
• Reemplaza una dependencia existente en el sistema de tal
manera que el test no tenga que lidiar directamente con esa
dependencia.
• La prueba tiene el control sobre este test double, por lo que
puede indicarle respuestas predefinidas a ciertas llamadas.
• Son utilizados cuando nuestro método en prueba depende de
un valor que es retornado por otro componente.
29Uzi Mamani Creative Commons (@uzigula)
State Testing Vs Interaction Testing
State Testing (Result Driven)
Verificamos si un resultado final es el esperado.
Ejm: que una propiedad ha cambiado su valor.
Interaction Testing (Action Driven)
Verificamos si una determinada acción se ha producido.
Ejm: que se ha enviado un mensaje hacia otro objeto.
30Uzi Mamani Creative Commons (@uzigula)
Test Doubles Mocks
• No devuelve resultados predefinidos, sino está pendiente que
2 objetos hayan interactuado de manera esperada.
• El Assert ya no se ejecuta sobre la clase en prueba sino sobre
el mock.
• Lo usamos para probar acciones que no pueden ser
observadas a través de la API pública de la clase que se está
probando.
31Uzi Mamani Creative Commons (@uzigula)
Kata:
Login API , nuevo requerimiento
32Uzi Mamani Creative Commons (@uzigula)
Kata: Login Api (Nuevo requerimiento)
Se requiere implementar en el API de Autorizacion una opción
que permita resetear el password de un usuario registrado.
33Uzi Mamani Creative Commons (@uzigula)
Como diferenciamos Stubs de Mocks
✓ Un Stub permite que el test pueda terminar su ejecución.
(No falle)
✓ Un Mock es un test double sobre el cuál se realiza la
verificacion (aserción)
34Uzi Mamani Creative Commons (@uzigula)
Otros Test Doubles
Dummy:
Objetos que se encuentran instanciados pero nunca se utilizan,
usualmente usados para llenar una lista de parámetros
Fake :
Remplazan a la dependencia real por razones diferentes a
verificar salidas o comportamientos. Tienen la misma
funcionalidad pero más sencilla
35Uzi Mamani Creative Commons (@uzigula)
Kata:
Simulador de Créditos
36Uzi Mamani Creative Commons (@uzigula)
Simulador de Calendario de Pagos.
Como sectorista deseo poder obtener el reporte de simulador
de crédito de una solicitud, para así poder mostrar al cliente su
posible calendario de pagos.
La solicitud debe tener Monto Solicitado, Plazo en Meses,
Interés.
Considerar que pueden haber múltiples formas de calcular el
valor de una cuota
Por ahora las cuotas deberán ser calculadas usando Interés
simple
37Uzi Mamani Creative Commons (@uzigula)
Kata:
Tratemos con algo de
Tu Proyecto
38Uzi Mamani Creative Commons (@uzigula)
39
Don’t be a Cowboy
Uzi Mamani Creative Commons (@uzigula)
Uzi Mamani Creative Commons (@uzigula)
Test Driven Development
Uzi Mamani
uzi.mamani@gmail.com
www.about.me/uzigula

Más contenido relacionado

Destacado (10)

Conferencia Monitoreo de Servidores con Nagios
Conferencia Monitoreo de Servidores con NagiosConferencia Monitoreo de Servidores con Nagios
Conferencia Monitoreo de Servidores con Nagios
 
TDD with phpspec2
TDD with phpspec2TDD with phpspec2
TDD with phpspec2
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
Maven Overview
Maven OverviewMaven Overview
Maven Overview
 
Automatizacion de proyectos con gradle
Automatizacion de proyectos con gradleAutomatizacion de proyectos con gradle
Automatizacion de proyectos con gradle
 
Integrando sonar
Integrando sonarIntegrando sonar
Integrando sonar
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
PhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examplesPhpSpec 2.0 ilustrated by examples
PhpSpec 2.0 ilustrated by examples
 
Building and Deploying Application to Apache Mesos
Building and Deploying Application to Apache MesosBuilding and Deploying Application to Apache Mesos
Building and Deploying Application to Apache Mesos
 
A new model for Docker image distribution
A new model for Docker image distributionA new model for Docker image distribution
A new model for Docker image distribution
 

Similar a Test Driven Development

Similar a Test Driven Development (20)

Test unitarios
Test unitariosTest unitarios
Test unitarios
 
Unit Testing with Mock Objects
Unit Testing with Mock ObjectsUnit Testing with Mock Objects
Unit Testing with Mock Objects
 
pruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptxpruebasunitarias-110921232512-phpapp02.pptx
pruebasunitarias-110921232512-phpapp02.pptx
 
Taller de Simpletest - Drupal Day Valencia 2012
Taller de Simpletest - Drupal Day Valencia 2012Taller de Simpletest - Drupal Day Valencia 2012
Taller de Simpletest - Drupal Day Valencia 2012
 
Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
 
Test Automation .NET
Test Automation .NETTest Automation .NET
Test Automation .NET
 
7iSF-4 test driver development
7iSF-4   test driver development7iSF-4   test driver development
7iSF-4 test driver development
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
Charla evento TestingUY 2017 - El mokeo como herramienta para pruebas de Soft...
 
Introduction to unit testing
Introduction to unit testingIntroduction to unit testing
Introduction to unit testing
 
Doble o nada
Doble o nadaDoble o nada
Doble o nada
 
Integracion Continua
Integracion ContinuaIntegracion Continua
Integracion Continua
 
Presentación Seminario1 EA
Presentación Seminario1 EAPresentación Seminario1 EA
Presentación Seminario1 EA
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Vuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdfVuelta_a_los_origines_Testing.pdf
Vuelta_a_los_origines_Testing.pdf
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Jf 2 3_sg_esp(4)
Jf 2 3_sg_esp(4)Jf 2 3_sg_esp(4)
Jf 2 3_sg_esp(4)
 
leccion 3
leccion 3leccion 3
leccion 3
 
Alice 3
Alice 3Alice 3
Alice 3
 
Capítulo 3
Capítulo 3Capítulo 3
Capítulo 3
 

Más de Uzi Mamani Fernández

Más de Uzi Mamani Fernández (10)

Stop the agile micro-management
Stop the agile micro-managementStop the agile micro-management
Stop the agile micro-management
 
Agile distributed Teams in Large Enterprises
Agile distributed Teams in Large EnterprisesAgile distributed Teams in Large Enterprises
Agile distributed Teams in Large Enterprises
 
Historia de una adopción Ágile en una Entidad Financiera
Historia de una adopción Ágile en una Entidad FinancieraHistoria de una adopción Ágile en una Entidad Financiera
Historia de una adopción Ágile en una Entidad Financiera
 
Retrospectivas Ágiles
Retrospectivas ÁgilesRetrospectivas Ágiles
Retrospectivas Ágiles
 
Daily Stand Up Meetings
Daily Stand Up MeetingsDaily Stand Up Meetings
Daily Stand Up Meetings
 
Agile software development
Agile software developmentAgile software development
Agile software development
 
The agile road - Tacna Agile Day 2012
The agile road  - Tacna Agile Day 2012The agile road  - Tacna Agile Day 2012
The agile road - Tacna Agile Day 2012
 
Que es Scrum?
Que es Scrum?Que es Scrum?
Que es Scrum?
 
The Agile Road v2 - San Marcos Agile Week
The Agile Road v2 - San Marcos Agile WeekThe Agile Road v2 - San Marcos Agile Week
The Agile Road v2 - San Marcos Agile Week
 
The agile road - Piura Agile Day 2012
The agile road - Piura Agile Day 2012The agile road - Piura Agile Day 2012
The agile road - Piura Agile Day 2012
 

Último

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Último (15)

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Test Driven Development

  • 1. Uzi Mamani Creative Commons (@uzigula) Test Driven Development Uzi Mamani uzi.mamani@gmail.com www.about.me/uzigula
  • 2. 2Uzi Mamani Creative Commons (@uzigula) “I don’t have time to write tests because I am too busy debugging.”
  • 3. 3 ¿Qué es Test Driven Development? «TDD es escribir las pruebas primero y dejar que estas guíen o modifiquen el diseño» Uzi Mamani Creative Commons (@uzigula)
  • 4. 4Uzi Mamani Creative Commons (@uzigula) Dada la definición de TDD ¿Qué necesita usted para ponerlo en práctica?
  • 5. Historias de Usuario ➢ Descripción : Un relato resumido que debe reflejar el que se debe construir y por que. ➢ Conversaciones: Son los detalles que hay detrás de la Historia, estas se generan durante las conversaciones con por ejemplo el Product Owner. ➢ Validación : Criterios de Aceptación que permitan validar si la Historia fue correctamente desarrollada. 5Uzi Mamani Creative Commons (@uzigula)
  • 6. Ejemplo: Sitio Web de Viajes 6 Como un usuario, Deseo poder reservar una habitación de Hotel Como un usuario, Deseo poder cancelar una reservación Como un planificador de Vacaciones, Deseo ver fotos de los hoteles. Como pasajero frecuente, Deseo poder reutilizar una reserva pasada, para así ahorrar tiempo en mis reservas. Uzi Mamani Creative Commons (@uzigula)
  • 7. Criterios de Aceptación 7 Como un usuario, Deseo poder cancelar una reservación ✓ Un Miembro premium puede cancelar una reserva el ultimo día sin recargo. ✓ Un miembro no-premium se le cobrará 10% si cancela el mismo día de la reserva. ✓ Se debe enviar un Correo de Confirmación. ✓ Se debe Notificar al Hotel de la cancelación. Uzi Mamani Creative Commons (@uzigula)
  • 8. Test de Aceptación Dado Juan usuario no-premium Y Con una reserva para Hoy a las 19:00 con un valor s/. 500 Cuando Cancela la reserva Entonces la reserva es cancelada Y Juan debe pagar una penalidad de S/. 50. (Ejemplo concreto) 8Uzi Mamani Creative Commons (@uzigula)
  • 9. Ciclo de Test Driven Development 9 RED Refact or Green Uzi Mamani Creative Commons (@uzigula)
  • 10. Kata : Stack Se nos pide implementar un Pila. 1. La pila esta llena cuando se llega al total de elementos. 2. La pila es una estructura (LIFO – Last In First Out), por tanto siempre se debe sacar el ultimo elemento ingresado a la pila siempre cuando no este vacia. 10Uzi Mamani Creative Commons (@uzigula)
  • 11. Pirámide de Testing 11Uzi Mamani Creative Commons (@uzigula)
  • 12. ¿Que es una prueba Unitaria? Es una pieza de código automatizada, que invoca el método o clase que está siendo testeada y verifica algunas asunciones acerca del comportamiento lógico de dicho método o clase. Generalmente escrito usando un framework de pruebas unitarias, se ejecuta rápidamente, es completamente automatizable, confiable, legible y mantenible. 12Uzi Mamani Creative Commons (@uzigula)
  • 13. Como funciona un Test Unitario 13 Take it from The Art Of Unit Testing – Roy Osherove 2009 Uzi Mamani Creative Commons (@uzigula)
  • 14. Ejemplo de Prueba Unitaria 14 @Test public void IsValidFileName_validFile_ReturnsTrue() { //arrange LogAnalyzer analyzer = new LogAnalyzer(); //act bool result = analyzer.IsValidLogFileName("whatever.doc"); //assert assertTrue(result, "filename should be valid!"); } Uzi Mamani Creative Commons (@uzigula)
  • 15. Características de las Pruebas Unitarias ✓ Fast ✓ Isolated ✓ Repetible ✓ Self-Verifying ✓ Timely 15Uzi Mamani Creative Commons (@uzigula)
  • 16. Buenas prácticas de Pruebas Unitarias 16 1. Consistentes 2. Atómicos 3. Simple Responsabilidad 4. Auto Descriptivos 5. Los test no deben tener lógica Uzi Mamani Creative Commons (@uzigula)
  • 17. Buenas prácticas de Pruebas Unitarias 17 6. No manejan excepciones 7. Mensajes Claros 8. No mezclar el código 9. Separación por capa de negocio 10. Separación por tipo Uzi Mamani Creative Commons (@uzigula)
  • 18. Tres Leyes de Test Driven Development 1. You are not allowed to write any production code unless it is to make a failing unit test pass. 2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test. 18http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTddUzi Mamani Creative Commons (@uzigula)
  • 19. Kata Login Api Api de Autenticación Como SysAdmin deseo un servicio que resuelva la autenticación/autorización de un usuario a una determinada aplicación, para así tener un único servicio de control de acceso. 19Uzi Mamani Creative Commons (@uzigula)
  • 20. Kata Login Api Confirmación: 1. Acceso Autorizado • Usuario y contraseña son válidos. • Devolver un Response con el token de Autorización. 2. Acceso Denegado • Usuario y/o contraseña no son válidos. • Cuenta esta bloqueada. • No tiene permisos para la aplicación solicitada. • Servicio no esta disponible (falla infraestrutura) 20Uzi Mamani Creative Commons (@uzigula)
  • 21. Enfoques para aplicar TDD en un Desarrollo 21Uzi Mamani Creative Commons (@uzigula)
  • 22. Outside-In Se comienza con una clase o componente de alto nivel, se mockean las dependencias necesarias. Cuando se ha finalizado con el componente, nos movemos al colaborador previamente mockeado y aplicamos TDD nuevamente ahí. 22 Mock Collaborator Collaborator Class User Controller Outer Class Model System Boundary In Out Uzi Mamani Creative Commons (@uzigula)
  • 23. Outside-In Beneficios • Permite pensar desde la perspectiva del usuario final, el diseño está guiado por necesidades reales. • Se construye incrementalmente partes completas de la aplicación. Desventajas • Puede llevar al uso excesivo de mocks/stubs ocasionando que las pruebas sean muy frágiles. 23Uzi Mamani Creative Commons (@uzigula)
  • 24. Inside-Out Comienza con una clase o componente de bajo nivel y se va progresando a los de más alto nivel. No utiliza mocking, debido a que los colaboradores son previamente creados o se devuelven valores en duro. 24 Collaborator Class Collaborator Class User Controller Outer Class Model System Boundary In Out Uzi Mamani Creative Commons (@uzigula)
  • 25. Inside-Out Beneficios • Tiende a tener un mejor diseño. Desventajas • Puedes construir funcionalidad en las clases que nunca será usada por la aplicación. 25Uzi Mamani Creative Commons (@uzigula)
  • 26. Test Doubles e Isolation (Mock) Frameworks 26Uzi Mamani Creative Commons (@uzigula)
  • 27. Test Doubles «Son todos aquellos objetos que son creados para reemplazar a los objetos reales con el propósito de hacer pruebas » 27Uzi Mamani Creative Commons (@uzigula)
  • 28. Isolation Mocking Frameworks • Permiten crear test doubles de manera más simple, rápida y sin errores. • Ayudan a evitar escribir código repetitivo. ▪ .NET: Moq, RhinoMock, Typemock , Nsubstitute ▪ Java: Mockito, EasyMock, Jmock ▪ Ruby: RSpec Built-in, Mocha 28Uzi Mamani Creative Commons (@uzigula)
  • 29. Test Doubles Stubs • Reemplaza una dependencia existente en el sistema de tal manera que el test no tenga que lidiar directamente con esa dependencia. • La prueba tiene el control sobre este test double, por lo que puede indicarle respuestas predefinidas a ciertas llamadas. • Son utilizados cuando nuestro método en prueba depende de un valor que es retornado por otro componente. 29Uzi Mamani Creative Commons (@uzigula)
  • 30. State Testing Vs Interaction Testing State Testing (Result Driven) Verificamos si un resultado final es el esperado. Ejm: que una propiedad ha cambiado su valor. Interaction Testing (Action Driven) Verificamos si una determinada acción se ha producido. Ejm: que se ha enviado un mensaje hacia otro objeto. 30Uzi Mamani Creative Commons (@uzigula)
  • 31. Test Doubles Mocks • No devuelve resultados predefinidos, sino está pendiente que 2 objetos hayan interactuado de manera esperada. • El Assert ya no se ejecuta sobre la clase en prueba sino sobre el mock. • Lo usamos para probar acciones que no pueden ser observadas a través de la API pública de la clase que se está probando. 31Uzi Mamani Creative Commons (@uzigula)
  • 32. Kata: Login API , nuevo requerimiento 32Uzi Mamani Creative Commons (@uzigula)
  • 33. Kata: Login Api (Nuevo requerimiento) Se requiere implementar en el API de Autorizacion una opción que permita resetear el password de un usuario registrado. 33Uzi Mamani Creative Commons (@uzigula)
  • 34. Como diferenciamos Stubs de Mocks ✓ Un Stub permite que el test pueda terminar su ejecución. (No falle) ✓ Un Mock es un test double sobre el cuál se realiza la verificacion (aserción) 34Uzi Mamani Creative Commons (@uzigula)
  • 35. Otros Test Doubles Dummy: Objetos que se encuentran instanciados pero nunca se utilizan, usualmente usados para llenar una lista de parámetros Fake : Remplazan a la dependencia real por razones diferentes a verificar salidas o comportamientos. Tienen la misma funcionalidad pero más sencilla 35Uzi Mamani Creative Commons (@uzigula)
  • 36. Kata: Simulador de Créditos 36Uzi Mamani Creative Commons (@uzigula)
  • 37. Simulador de Calendario de Pagos. Como sectorista deseo poder obtener el reporte de simulador de crédito de una solicitud, para así poder mostrar al cliente su posible calendario de pagos. La solicitud debe tener Monto Solicitado, Plazo en Meses, Interés. Considerar que pueden haber múltiples formas de calcular el valor de una cuota Por ahora las cuotas deberán ser calculadas usando Interés simple 37Uzi Mamani Creative Commons (@uzigula)
  • 38. Kata: Tratemos con algo de Tu Proyecto 38Uzi Mamani Creative Commons (@uzigula)
  • 39. 39 Don’t be a Cowboy Uzi Mamani Creative Commons (@uzigula)
  • 40. Uzi Mamani Creative Commons (@uzigula) Test Driven Development Uzi Mamani uzi.mamani@gmail.com www.about.me/uzigula