SlideShare una empresa de Scribd logo
1 de 38
Desarrollo Dirigido por Pruebas TDD Martín Salías (supliendo a Israel Antezana Rojas)
Agradecimiento La presentación y ejemplosfueronproducidospor el Maestro Angel “Java” Lópezpara el: Southworks Professional Improvement Program http://pip.southworks.net Twitter: @ajlopez
Test-Driven Development No es sólo escribir test Kent Beck: No escribir una línea de código sin tener primero un test (failing automated test) Eliminar duplicación Programmer Tests http://www.nunit.org Customer Tests http://fit.c2.com
La vida sin TDD
Origen de TDD Kent Beck “redescubre” TDD 1970: Waterfall – Winston  W. Royce(lo bueno y lo malo) 1996: Sunit (guía para un mejor Smalltalk) 1999: Primera edición XP (Extreme Programming) 2002: TDD byexample 2005: Segunda edición XP
Código Simple que Funcione (Cita de Ron Jeffries, Kent Beck) Criterio “que Funcione”: Pase todos los tests automáticos Criterio “Código Simple”: Apropiado para la audiencia Comunica la intención Factorizado, sin duplicaciones Mínimo
TDD en un slide
Primer Ejemplo Test de Calculadora
Características de un buen test Automático Si es manual, no lo hacemos, o nos cuesta mucho A fondo No debe dejar parte sin probar Repetible En cualquier momento Independiente Aíslado, poner bajo prueba una sola cosa Profesional Rápido Si no, evitamos ejecutarlo Vale el esfuerzo de escribir el test Fuente: PragmaticUnitTestingbyDave Thomas, Andy Hunt
Asserts AreEqual, AreNotEqual AreSame, AreNotSame IsNull, IsNotNull IsFalse, IsTrue
Atributos y Variantes TestCase, Fixture o Class Test Method SetUp, TearDown ExpectedExceptions
Los tests Escribirlos primero, diseñando lo que se necesita Se evita código innecesario Se crea la especificación de lo que se está construyendo Sirve como red de seguridad ante cambios Minimizan la depuración BabySteps
Segundo Ejemplo Desarrollar un Stack
Ejemplo: Lista de Tests Crear Stack y verificar IsEmpty Push un elemento y IsEmpty es falso Push un elemento, Pop, IsEmpty en verdadero Push un elemento, igual al siguiente Pop Push tres elementos, Pop de los tres, verificar orden Pop de una Stackvacía (que genere InvalidOperationException) Push de tres items, Pop de uno, IsEmpty en Falso
Refactoring Mejorar el diseño sin cambiar la funcionalidad Cambio de nombres Extraer métodos Eliminar código duplicado Tests en verde
Code Coverage Integrado en Visual Studio Reporte de código “cubierto” por los tests Aplicando TDD: No se agregan líneas que no respondan a un tests Se logra un CodeCoverage alto
SUT: System Under Testing Colaborador A Test Method SUT Test Method Colaborador B Test Method Colaborador C
Tipos de Objetos Colaboradores Dummy: pasado pero nunca usado Fake: implementación andando, pero es un atajo. Ej: base de datos en memoria Stubs: respuestas ya preparadas, pueden registrar información sobre los datos pasados Mocks: preprogramados con “expectations”,  que son una especificación de las llamadas a recibir El “Real”
Temas a discutir AAA BDD Refactor del Tests Threading Ejemplos con Atributos de inicialización, setup, etc.. Tests contra bases de datos
Ejercicio (dada una lista inicial de tests,ir construyendo el código)
Construir un Lexer Clase Lexer Dada una entrada nos debe dar los “tokens” en forma de string Entrada dada en el constructor Como TextReader Como String Gran método a implementar: string NextToken() Al no haber más a procesar, que devuelva null
Tests Crear el Lexer, y que procese “name” como nombre, y luego, null Procesa “ name “ (con espacios) como nombre “name”, y devuelve null Procesa “123” como “123” Procesa “name1 name2” como “name1”, “name2” , y devuelve null Procesa “(,)” como “(“, “,”, “)” , y devuelve null Procesa “name(par1, par2)” como “name”, “(“, “par1”, “,”, “par2”, “)” , y devuelve null
Resolución del Ejercicio
Ejercicios Adicionales
Números a Letras Implementar un método que reciba un entero y devuelva un string El string tendrá la traducción a palabras del número Ejemplo 12  “doce”
Lista de Tests 1 -> “uno” 2 -> “dos” … y así hasta 9 10 -> “diez” 11 -> “once”  12 -> “doce”.. Y así hasta 19 21 -> “veintiuno”… y así hasta 29 30 -> “treinta”, 40 -> “cuarenta”,  y así hasta 90 31 -> “treinta y uno” … y así hasta el 39
Lista de Tests Probar los 40..49, 40..59, y así hasta el 90..99 cumple el mismo patrón 100 -> cien 101 -> ciento uno, y así hasta 199 , dan “ciento “ más el módulo 100 200 -> doscientos, 300 -> trescientos, 400, 600, 800, son “número” + “cientos” Casos 500, 700, 900 1000 -> mil 1001 a 1999 dan “mil “ más módulo 1000 Casos 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000 son “número”+”mil”
Calculadora de String Clase con método Evaluate que reciba un String (texto) con números enteros y operaciones como 	1 * 3 + 12 Y devuelva el resultado
Lista de Tests Recibe “1” y devuelve 1 Recibe “2 + 3” y devuelve 5 Recibe “2 -3” y devuelve -1 Recibe “-1+2” y devueve 1 Recibe “2*3” y devuelve 6 Recibe “2*3+1” y devuelve 7 Recibe “2*(3+10)” y devuelve 26 Recibe “(3+3) / 2” (con espacios) y devuelve 3
Nueva Factura Hay productos, con descripcion, precio, peso, lleva IVA o no Hay Factura, a la que se le pueden agregar productos (cantidad facturada) Hay una tasa de IVA del 21%
Lista de Tests Tomemos Producto 1: $100, con IVA, 100gr de peso Producto 2: $200, sin IVA,  50gr de peso En nueva factura, su subtotal (sin IVA) es 0, total final es 0, IVA es 0, cantidad es 0, peso es 0 Se agrega un Producto 1 a Factura, dando Subtotal $ 100, IVA $ 21, Total $121 Cantidad 1, Peso 100 Se agrega un Producto 2 a Factura, dando Subtotal $ 200, IVA $ 0, Total $100 Cantidad 1, Peso 50
Lista de Tests Se agrega un Producto 1 y un Producto 2 Subtotal $ 300, Iva $21, Total $ 321 Cantidad 2, Peso 150 Se agrega 2 Producto 1 a Factura, dando Subtotal $ 200, Total $242 Cantidad 2, Peso 200 Se agrega un Producto 1 y dos Producto 2 Subtotal $ 500, IVA $21, Total $ 521 Cantidad 3, Peso 200 Sugerencia: hacer una planilla para especificar tests
Recursos Adicionales
Test-Driven Development By Example  By Kent Beck  Addison Wesley  2002  ISBN : 0-321-14653-0
Test-Driven Development in Microsoft .NET  by James W. Newkirk and Alexei A. Vorontsov  ISBN:0735619484  Microsoft Press © 2004
xUnit Test Patterns Refactoring Test Code Gerard Meszaros Addison-Wesley 0-13-149505-4
Enlaces Writing Great Unit Tests: Best and Worst Practiceshttp://blog.codeville.net/2009/08/24/writing-great-unit-tests-best-and-worst-practises/ Demistifying Extreme Programming: Test-driven programminghttp://www.ibm.com/developerworks/java/library/j-xp042203/index.html What is a Unit Test?http://jesschadwick.blogspot.com/2009/11/what-unit-test.html Qualities of a Good Unit Testhttp://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129552.aspx
Gracias Israel Antezana Rojasisraelantezana@gmail.com Martin Salias martin@salias.com.ar

Más contenido relacionado

Destacado

Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18
Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18
Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18Kleer Agile Coaching & Training
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónKleer Agile Coaching & Training
 
Incepción ágil at infosoft
Incepción ágil at infosoftIncepción ágil at infosoft
Incepción ágil at infosoftHiroshi Hiromoto
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de SoftwareMartin Salias
 
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín AlaimoKleer Agile Coaching & Training
 
Implementation Patterns
Implementation PatternsImplementation Patterns
Implementation PatternsMartin Salias
 
Adopción de scrum en una agencia de marketing digital
Adopción de scrum en una agencia de marketing digitalAdopción de scrum en una agencia de marketing digital
Adopción de scrum en una agencia de marketing digitalHiroshi Hiromoto
 
Workshop básico de Retrospectivas Multinivel
Workshop básico de Retrospectivas MultinivelWorkshop básico de Retrospectivas Multinivel
Workshop básico de Retrospectivas MultinivelHiroshi Hiromoto
 
Scrum Orgánico Pecha Kucha at Agile 2013
Scrum Orgánico Pecha Kucha at Agile 2013Scrum Orgánico Pecha Kucha at Agile 2013
Scrum Orgánico Pecha Kucha at Agile 2013Hiroshi Hiromoto
 
#Agile4Agencies - Agile2014 Orlando, FL
#Agile4Agencies - Agile2014 Orlando, FL#Agile4Agencies - Agile2014 Orlando, FL
#Agile4Agencies - Agile2014 Orlando, FLHiroshi Hiromoto
 
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando Fitnesse
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando FitnesseKleer - Agile Testing - Especificaciones por medio de Ejemplos usando Fitnesse
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando FitnesseKleer Agile Coaching & Training
 
Gestión Ágil de Proyectos con Scrum
Gestión Ágil de Proyectos con ScrumGestión Ágil de Proyectos con Scrum
Gestión Ágil de Proyectos con ScrumMartin Alaimo
 
Scrum orgánico - Congreso Internacional de TI UPC
Scrum orgánico - Congreso Internacional de TI UPCScrum orgánico - Congreso Internacional de TI UPC
Scrum orgánico - Congreso Internacional de TI UPCHiroshi Hiromoto
 
Organizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesOrganizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesMartin Salias
 

Destacado (20)

Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
 
Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18
Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18
Kleer: "Cómo llevamos scrum al próximo nivel" - Lima 2011-01-18
 
Dev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producciónDev ops e infraestructura – acompañando nuestro software a producción
Dev ops e infraestructura – acompañando nuestro software a producción
 
Incepción ágil at infosoft
Incepción ágil at infosoftIncepción ágil at infosoft
Incepción ágil at infosoft
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de Software
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo
#NoSeréFeliz, pero tengo trabajo - Ágiles 2014 - Martín Alaimo
 
Implementation Patterns
Implementation PatternsImplementation Patterns
Implementation Patterns
 
Adopción de scrum en una agencia de marketing digital
Adopción de scrum en una agencia de marketing digitalAdopción de scrum en una agencia de marketing digital
Adopción de scrum en una agencia de marketing digital
 
Workshop básico de Retrospectivas Multinivel
Workshop básico de Retrospectivas MultinivelWorkshop básico de Retrospectivas Multinivel
Workshop básico de Retrospectivas Multinivel
 
Arquitectura Ágil
Arquitectura ÁgilArquitectura Ágil
Arquitectura Ágil
 
Scrum detrás de Scrum en Ágiles 2013
Scrum detrás de Scrum en Ágiles 2013Scrum detrás de Scrum en Ágiles 2013
Scrum detrás de Scrum en Ágiles 2013
 
Jas 2012 keynote
Jas 2012 keynoteJas 2012 keynote
Jas 2012 keynote
 
Scrum Orgánico Pecha Kucha at Agile 2013
Scrum Orgánico Pecha Kucha at Agile 2013Scrum Orgánico Pecha Kucha at Agile 2013
Scrum Orgánico Pecha Kucha at Agile 2013
 
#Agile4Agencies - Agile2014 Orlando, FL
#Agile4Agencies - Agile2014 Orlando, FL#Agile4Agencies - Agile2014 Orlando, FL
#Agile4Agencies - Agile2014 Orlando, FL
 
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando Fitnesse
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando FitnesseKleer - Agile Testing - Especificaciones por medio de Ejemplos usando Fitnesse
Kleer - Agile Testing - Especificaciones por medio de Ejemplos usando Fitnesse
 
Gestión Ágil de Proyectos con Scrum
Gestión Ágil de Proyectos con ScrumGestión Ágil de Proyectos con Scrum
Gestión Ágil de Proyectos con Scrum
 
Scrum orgánico - Congreso Internacional de TI UPC
Scrum orgánico - Congreso Internacional de TI UPCScrum orgánico - Congreso Internacional de TI UPC
Scrum orgánico - Congreso Internacional de TI UPC
 
Refactoring
RefactoringRefactoring
Refactoring
 
Organizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesOrganizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo Ágiles
 

Similar a TDD-DesarrolloDirigidoPorPruebas

Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDHernan Wilkinson
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd introfperezplain
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cein
 
Mejorar la calidad de los tests con Mutation testing.pdf
Mejorar la calidad de los tests con Mutation testing.pdfMejorar la calidad de los tests con Mutation testing.pdf
Mejorar la calidad de los tests con Mutation testing.pdfIsmail Ismailov
 
Ejercicios condicionales simples
Ejercicios condicionales simplesEjercicios condicionales simples
Ejercicios condicionales simplesEcler Mamani Vilca
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmiacckokyco
 
Clase 1 Itinerario
Clase 1 ItinerarioClase 1 Itinerario
Clase 1 Itinerariovbalda
 
Machine Learning con Tensorflow y R, presentado por RStudio
Machine Learning con Tensorflow y R, presentado por RStudioMachine Learning con Tensorflow y R, presentado por RStudio
Machine Learning con Tensorflow y R, presentado por RStudioSoftware Guru
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishJordi Llonch
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishAkamon Engineering
 
C# conexión sql server2012-visualstudio2012-mantenimientos
C#   conexión sql server2012-visualstudio2012-mantenimientosC#   conexión sql server2012-visualstudio2012-mantenimientos
C# conexión sql server2012-visualstudio2012-mantenimientosJomar Burgos Palacios
 
oTema6 pruebas del software
oTema6 pruebas del softwareoTema6 pruebas del software
oTema6 pruebas del softwareSilvia Guilcapi
 

Similar a TDD-DesarrolloDirigidoPorPruebas (20)

Toi Tdd 20080409
Toi Tdd 20080409Toi Tdd 20080409
Toi Tdd 20080409
 
Como escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDDComo escribir buenos tests al hacer TDD
Como escribir buenos tests al hacer TDD
 
Artalde Tdd intro
Artalde Tdd introArtalde Tdd intro
Artalde Tdd intro
 
Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1Cesnavarra 2009-boletín 1
Cesnavarra 2009-boletín 1
 
Mejorar la calidad de los tests con Mutation testing.pdf
Mejorar la calidad de los tests con Mutation testing.pdfMejorar la calidad de los tests con Mutation testing.pdf
Mejorar la calidad de los tests con Mutation testing.pdf
 
Ejercicios condicionales simples
Ejercicios condicionales simplesEjercicios condicionales simples
Ejercicios condicionales simples
 
Fundamentos De Algoritmia
Fundamentos De AlgoritmiaFundamentos De Algoritmia
Fundamentos De Algoritmia
 
S9-DAW-2022S1.pptx
S9-DAW-2022S1.pptxS9-DAW-2022S1.pptx
S9-DAW-2022S1.pptx
 
Clase 1 Itinerario
Clase 1 ItinerarioClase 1 Itinerario
Clase 1 Itinerario
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
Qunit CookBook español
Qunit CookBook españolQunit CookBook español
Qunit CookBook español
 
Machine Learning con Tensorflow y R, presentado por RStudio
Machine Learning con Tensorflow y R, presentado por RStudioMachine Learning con Tensorflow y R, presentado por RStudio
Machine Learning con Tensorflow y R, presentado por RStudio
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
DeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - SpanishDeSymfonyDay 2014 - To mock or not to mock - Spanish
DeSymfonyDay 2014 - To mock or not to mock - Spanish
 
C# conexión sql server2012-visualstudio2012-mantenimientos
C#   conexión sql server2012-visualstudio2012-mantenimientosC#   conexión sql server2012-visualstudio2012-mantenimientos
C# conexión sql server2012-visualstudio2012-mantenimientos
 
software testing
software testingsoftware testing
software testing
 
Algorithm
AlgorithmAlgorithm
Algorithm
 
oTema6 pruebas del software
oTema6 pruebas del softwareoTema6 pruebas del software
oTema6 pruebas del software
 
Ciclo De Desarrollo
Ciclo De DesarrolloCiclo De Desarrollo
Ciclo De Desarrollo
 

Más de Martin Salias

Restricciones para la Creatividad
Restricciones para la CreatividadRestricciones para la Creatividad
Restricciones para la CreatividadMartin Salias
 
Arquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilArquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilMartin Salias
 
Building Hybrid Applications
Building Hybrid ApplicationsBuilding Hybrid Applications
Building Hybrid ApplicationsMartin Salias
 
Introduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareIntroduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareMartin Salias
 
Arquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaArquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaMartin Salias
 
High Maturity Agile Practice
High Maturity Agile PracticeHigh Maturity Agile Practice
High Maturity Agile PracticeMartin Salias
 
Explosión de Lenguajes
Explosión de LenguajesExplosión de Lenguajes
Explosión de LenguajesMartin Salias
 

Más de Martin Salias (10)

Restricciones para la Creatividad
Restricciones para la CreatividadRestricciones para la Creatividad
Restricciones para la Creatividad
 
LeSS Intro
LeSS IntroLeSS Intro
LeSS Intro
 
Arquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilArquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida Ágil
 
Why JavaScript
Why JavaScriptWhy JavaScript
Why JavaScript
 
Building Hybrid Applications
Building Hybrid ApplicationsBuilding Hybrid Applications
Building Hybrid Applications
 
Introduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareIntroduccion a la Arquitectura de Software
Introduccion a la Arquitectura de Software
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Arquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaArquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la práctica
 
High Maturity Agile Practice
High Maturity Agile PracticeHigh Maturity Agile Practice
High Maturity Agile Practice
 
Explosión de Lenguajes
Explosión de LenguajesExplosión de Lenguajes
Explosión de Lenguajes
 

Último

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

TDD-DesarrolloDirigidoPorPruebas

  • 1. Desarrollo Dirigido por Pruebas TDD Martín Salías (supliendo a Israel Antezana Rojas)
  • 2. Agradecimiento La presentación y ejemplosfueronproducidospor el Maestro Angel “Java” Lópezpara el: Southworks Professional Improvement Program http://pip.southworks.net Twitter: @ajlopez
  • 3. Test-Driven Development No es sólo escribir test Kent Beck: No escribir una línea de código sin tener primero un test (failing automated test) Eliminar duplicación Programmer Tests http://www.nunit.org Customer Tests http://fit.c2.com
  • 5. Origen de TDD Kent Beck “redescubre” TDD 1970: Waterfall – Winston W. Royce(lo bueno y lo malo) 1996: Sunit (guía para un mejor Smalltalk) 1999: Primera edición XP (Extreme Programming) 2002: TDD byexample 2005: Segunda edición XP
  • 6. Código Simple que Funcione (Cita de Ron Jeffries, Kent Beck) Criterio “que Funcione”: Pase todos los tests automáticos Criterio “Código Simple”: Apropiado para la audiencia Comunica la intención Factorizado, sin duplicaciones Mínimo
  • 7. TDD en un slide
  • 8. Primer Ejemplo Test de Calculadora
  • 9. Características de un buen test Automático Si es manual, no lo hacemos, o nos cuesta mucho A fondo No debe dejar parte sin probar Repetible En cualquier momento Independiente Aíslado, poner bajo prueba una sola cosa Profesional Rápido Si no, evitamos ejecutarlo Vale el esfuerzo de escribir el test Fuente: PragmaticUnitTestingbyDave Thomas, Andy Hunt
  • 10. Asserts AreEqual, AreNotEqual AreSame, AreNotSame IsNull, IsNotNull IsFalse, IsTrue
  • 11. Atributos y Variantes TestCase, Fixture o Class Test Method SetUp, TearDown ExpectedExceptions
  • 12. Los tests Escribirlos primero, diseñando lo que se necesita Se evita código innecesario Se crea la especificación de lo que se está construyendo Sirve como red de seguridad ante cambios Minimizan la depuración BabySteps
  • 14. Ejemplo: Lista de Tests Crear Stack y verificar IsEmpty Push un elemento y IsEmpty es falso Push un elemento, Pop, IsEmpty en verdadero Push un elemento, igual al siguiente Pop Push tres elementos, Pop de los tres, verificar orden Pop de una Stackvacía (que genere InvalidOperationException) Push de tres items, Pop de uno, IsEmpty en Falso
  • 15. Refactoring Mejorar el diseño sin cambiar la funcionalidad Cambio de nombres Extraer métodos Eliminar código duplicado Tests en verde
  • 16. Code Coverage Integrado en Visual Studio Reporte de código “cubierto” por los tests Aplicando TDD: No se agregan líneas que no respondan a un tests Se logra un CodeCoverage alto
  • 17. SUT: System Under Testing Colaborador A Test Method SUT Test Method Colaborador B Test Method Colaborador C
  • 18. Tipos de Objetos Colaboradores Dummy: pasado pero nunca usado Fake: implementación andando, pero es un atajo. Ej: base de datos en memoria Stubs: respuestas ya preparadas, pueden registrar información sobre los datos pasados Mocks: preprogramados con “expectations”, que son una especificación de las llamadas a recibir El “Real”
  • 19. Temas a discutir AAA BDD Refactor del Tests Threading Ejemplos con Atributos de inicialización, setup, etc.. Tests contra bases de datos
  • 20. Ejercicio (dada una lista inicial de tests,ir construyendo el código)
  • 21. Construir un Lexer Clase Lexer Dada una entrada nos debe dar los “tokens” en forma de string Entrada dada en el constructor Como TextReader Como String Gran método a implementar: string NextToken() Al no haber más a procesar, que devuelva null
  • 22. Tests Crear el Lexer, y que procese “name” como nombre, y luego, null Procesa “ name “ (con espacios) como nombre “name”, y devuelve null Procesa “123” como “123” Procesa “name1 name2” como “name1”, “name2” , y devuelve null Procesa “(,)” como “(“, “,”, “)” , y devuelve null Procesa “name(par1, par2)” como “name”, “(“, “par1”, “,”, “par2”, “)” , y devuelve null
  • 25. Números a Letras Implementar un método que reciba un entero y devuelva un string El string tendrá la traducción a palabras del número Ejemplo 12  “doce”
  • 26. Lista de Tests 1 -> “uno” 2 -> “dos” … y así hasta 9 10 -> “diez” 11 -> “once” 12 -> “doce”.. Y así hasta 19 21 -> “veintiuno”… y así hasta 29 30 -> “treinta”, 40 -> “cuarenta”, y así hasta 90 31 -> “treinta y uno” … y así hasta el 39
  • 27. Lista de Tests Probar los 40..49, 40..59, y así hasta el 90..99 cumple el mismo patrón 100 -> cien 101 -> ciento uno, y así hasta 199 , dan “ciento “ más el módulo 100 200 -> doscientos, 300 -> trescientos, 400, 600, 800, son “número” + “cientos” Casos 500, 700, 900 1000 -> mil 1001 a 1999 dan “mil “ más módulo 1000 Casos 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000 son “número”+”mil”
  • 28. Calculadora de String Clase con método Evaluate que reciba un String (texto) con números enteros y operaciones como 1 * 3 + 12 Y devuelva el resultado
  • 29. Lista de Tests Recibe “1” y devuelve 1 Recibe “2 + 3” y devuelve 5 Recibe “2 -3” y devuelve -1 Recibe “-1+2” y devueve 1 Recibe “2*3” y devuelve 6 Recibe “2*3+1” y devuelve 7 Recibe “2*(3+10)” y devuelve 26 Recibe “(3+3) / 2” (con espacios) y devuelve 3
  • 30. Nueva Factura Hay productos, con descripcion, precio, peso, lleva IVA o no Hay Factura, a la que se le pueden agregar productos (cantidad facturada) Hay una tasa de IVA del 21%
  • 31. Lista de Tests Tomemos Producto 1: $100, con IVA, 100gr de peso Producto 2: $200, sin IVA, 50gr de peso En nueva factura, su subtotal (sin IVA) es 0, total final es 0, IVA es 0, cantidad es 0, peso es 0 Se agrega un Producto 1 a Factura, dando Subtotal $ 100, IVA $ 21, Total $121 Cantidad 1, Peso 100 Se agrega un Producto 2 a Factura, dando Subtotal $ 200, IVA $ 0, Total $100 Cantidad 1, Peso 50
  • 32. Lista de Tests Se agrega un Producto 1 y un Producto 2 Subtotal $ 300, Iva $21, Total $ 321 Cantidad 2, Peso 150 Se agrega 2 Producto 1 a Factura, dando Subtotal $ 200, Total $242 Cantidad 2, Peso 200 Se agrega un Producto 1 y dos Producto 2 Subtotal $ 500, IVA $21, Total $ 521 Cantidad 3, Peso 200 Sugerencia: hacer una planilla para especificar tests
  • 34. Test-Driven Development By Example By Kent Beck Addison Wesley 2002 ISBN : 0-321-14653-0
  • 35. Test-Driven Development in Microsoft .NET by James W. Newkirk and Alexei A. Vorontsov ISBN:0735619484 Microsoft Press © 2004
  • 36. xUnit Test Patterns Refactoring Test Code Gerard Meszaros Addison-Wesley 0-13-149505-4
  • 37. Enlaces Writing Great Unit Tests: Best and Worst Practiceshttp://blog.codeville.net/2009/08/24/writing-great-unit-tests-best-and-worst-practises/ Demistifying Extreme Programming: Test-driven programminghttp://www.ibm.com/developerworks/java/library/j-xp042203/index.html What is a Unit Test?http://jesschadwick.blogspot.com/2009/11/what-unit-test.html Qualities of a Good Unit Testhttp://codebetter.com/blogs/jeremy.miller/archive/2005/07/20/129552.aspx
  • 38. Gracias Israel Antezana Rojasisraelantezana@gmail.com Martin Salias martin@salias.com.ar