SlideShare una empresa de Scribd logo
TDD y Python

javierj@us.es /
@IWT2_Javier
TDD no es probar
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.
Esto es todo

Gracias por su
atención
La complejidad

“Test-Driven Development
(TDD) is a deceptively simple
idea”

“El Desarrollo Dirigido por
Pruebas (TDD) es una idea
engañosamente simple”
¿Qué buscamos?
¿Por qué querríamos hacer TDD?
La complicación
Una buena manera de aplicar TDD
Ahora a por un problema

Hazme un programa que me busque
ficheros del mismo tamaño y me los borre.
Piensa
Y tú, ¿qué harías?

Con TDD
Escribe una prueba

Mi primera prueba:
Arrange:

Un directorio
Dos ficheros iguales dentro de
ese directorio
Act:
Llamar al algoritmo de borrado
Assert:
Uno de los ficheros ya no está
y el otro sí
Escribe una prueba

Mi primera prueba:
Arrange:

Un directorio
Dos ficheros iguales dentro de
ese directorio
Act:
Llamar al algoritmo de borrado

¿Creo un directorio y dos ficheros a
mano?
Tengo que crearlo cada vez que
ejecute la prueba
¿Creo un directorio y fichero con
código?
Tengo que aprender a hacerlo y
necesito código para restaurarlo

Assert:
Uno de los ficheros ya no está
y el otro sí

¿Obtengo un listado de los ficheros?
Tengo que aprender a hacerlo
No lo necesito (aún)
Vamos a escribir código

Snippet 01
TDD = ¡¡¡ Piensa !!!!

Directorio

Dame
Ficheros

Borra este

Borrado de ficheros
Utilizando Dobles de Prueba
• Diseñamos el API que
queremos.
• No nos preocupamos
por la implementación
• Verificaos qué se está
invocando
• Devolvemos los valores
adecuados para la
prueba
Single Repsonsibility Principle

A CLASS SHOULD HAVE ONLY ONE
REASON TO CHANGE.
¿Cuál es el mínimo código?

Snippet 02
Vuelta a empezar

Snippet 03
¿Y qué hacemos con los mocks?
¿Qué hacemos con los mocks?

Cuando el directorio está vacío entonces no tengo ficheros.
Cuando borro un fichero el directorio tiene un fichero menos.
Cuando recupero un fichero de un directorio entonces puedo
conocer su nombre.
Cuando recupero un fichero de un directorio entonces puedo
conocer su tamaño.
Etc.
Directorios temporales en Python
(módulo tempfile)
¿Y cuando lo ponemos todo junto?
En el mundo real
Conclusiones de este ejemplo

•
•
•

¿Cómo leemos
los ficheros de un
directorio?
¿Cómo borramos
ficheros?
¿Cómo leemos el
tamaño de un
fichero?

• Cómo podemos
leer una única vez
cada directorio?
• ¿Cómo sabemos
si hay más de un
fichero con el
mismo tamaño?

• UI
Retrospectiva de lo que Hemos Hecho

Nos centramos en
el algoritmo

Mejora el diseño

Hay que cambiar muchos
tets si cambiamos código
Tardamos más en
terminar
Testing en Python
Unittest, Doctest, N
ose
Mockito for
Python, Mocker, Pydou
bles
Selenium, Django
Testing
Behave, PyFIT, Lettu
ce, Mamba
http://wiki.python.org/moin/PythonTestingToolsTaxonomy
Advertencia
TDD

Yo
Conclusiones

Pruébalo y elige
Extra

Para saber más de TDD.
28
¿Quién soy yo?
Extra

10.000 líneas de código C#...
Comprobado…. 124 assemblies .NET
generados…. Comprobado…. 52
scripts de construcción…
comprobado

Ahora que mis pruebas unitarias
están escritas puedo empezar a
construir mis componentes.
Extra

31
Enlaces
•
•
•
•
•

•

Blog: http://iwt2-javierj.tumblr.com/
Libro:
http://www.iwt2.org/web/opencms/IWT2/comunidad/LibroTDD/?locale=es
GameUS: http://www.gameus.es/
IWT2 DojoUS:
http://www.iwt2.org/web/opencms/IWT2/comunidad/dojous/?locale=es
Pybonacci:
http://pybonacci.wordpress.com/2013/01/07/desarrollo-dirigido-por-pruebas-enpython-i-una-historia-que-pasa-todos-los-dias/#more-1352
http://pybonacci.wordpress.com/2013/06/19/desarrollo-dirigido-por-pruebas-enpython-ii-un-caso-practico-i/
Twitter: @IWT2_Javier/ @GameUsSev / @TDDPractico

Fin
32
Ahora sí

FIN

Más contenido relacionado

La actualidad más candente

Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
Fernando Perez
 
Cómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentCómo hacer Test Driven Development
Cómo hacer Test Driven Development
Javier Novoa Cataño
 
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
Orlando Bustos Mateluna
 
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Javier_J
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
Sofia Swidarowicz
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDDFran Grau
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
Eduardo Turiño
 
Introducción a automatización de pruebas web
Introducción a automatización de pruebas webIntroducción a automatización de pruebas web
Introducción a automatización de pruebas web
Francisco Moreno Sanz
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bddlsajrf
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
Cristian Romero Matesanz
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Agustin Ramos
 
Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.
José María Pérez Ramos
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
Aitor Suso Gáceta
 
Introduccion a XP
Introduccion a XPIntroduccion a XP
Introduccion a XP
Andrés Joaquín
 
Actividad 07 zsar
Actividad 07 zsarActividad 07 zsar
Actividad 07 zsar
Andres Valverde
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
Carlos Ble
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven Development
Ricardo Markiewicz
 

La actualidad más candente (20)

Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
Cómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentCómo hacer Test Driven Development
Cómo hacer Test Driven Development
 
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
 
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
Las Claves del Desarrollo Dirigido por Pruebas (o TDD)
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
Introducción a automatización de pruebas web
Introducción a automatización de pruebas webIntroducción a automatización de pruebas web
Introducción a automatización de pruebas web
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bdd
 
TDD
TDDTDD
TDD
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
 
Introduccion a XP
Introduccion a XPIntroduccion a XP
Introduccion a XP
 
Actividad 07 zsar
Actividad 07 zsarActividad 07 zsar
Actividad 07 zsar
 
TDD
TDDTDD
TDD
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Introducción a Behaviour Driven Development
Introducción a Behaviour Driven DevelopmentIntroducción a Behaviour Driven Development
Introducción a Behaviour Driven Development
 

Destacado

Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014
Javier_J
 
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
Javier_J
 
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
Javier_J
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
Osvaldo Santana Neto
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With Python
Siddhi
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
Javier_J
 

Destacado (6)

Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014Cómo aplicar TDD. Almería 13/05/2014
Cómo aplicar TDD. Almería 13/05/2014
 
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
Kata Tenis. Enunciados y soluciones alternativas. Python Sevilla 30/11/2012
 
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
Kata Tenis Completa Paso a Paso. Python Sevilla 30/11/2012
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With Python
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
 

Similar a TDD y Python

BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
Enrique Sánchez-Bayuela
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
Luis Alexander Aldazabal Gil
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
nacho mascort
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Aplicaciones de PLN en empresas - Fab Lab ESAN
Aplicaciones de PLN en empresas - Fab Lab ESANAplicaciones de PLN en empresas - Fab Lab ESAN
Aplicaciones de PLN en empresas - Fab Lab ESAN
Yabed Contreras Zambrano
 
Practica 2 Ordenes Administración de archivos linux
Practica 2 Ordenes Administración de archivos linuxPractica 2 Ordenes Administración de archivos linux
Practica 2 Ordenes Administración de archivos linux
Instituto Tecnológico de Tepic
 
Practica 2 Ordenes administracion de archivos linux
Practica 2 Ordenes administracion de archivos  linuxPractica 2 Ordenes administracion de archivos  linux
Practica 2 Ordenes administracion de archivos linux
Instituto Tecnológico de Tepic
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseñoaleja0940
 
Clase 2 - Introducción a la programación con Python I.pptx
Clase 2 - Introducción a la programación con Python I.pptxClase 2 - Introducción a la programación con Python I.pptx
Clase 2 - Introducción a la programación con Python I.pptx
jgs07
 
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
Aldibier Morales
 
Identificando problemas en el JVM
Identificando problemas en el JVMIdentificando problemas en el JVM
Identificando problemas en el JVM
superserch
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemas
Maestros en Linea
 
componentes de eclipse
componentes de eclipsecomponentes de eclipse
componentes de eclipse
YesiCGlez
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemas
Maestros Online
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POODiego Santimateo
 
Meetup errores en proyectos Big Data
Meetup errores en proyectos Big DataMeetup errores en proyectos Big Data
Meetup errores en proyectos Big Data
Jorge Lopez-Malla
 
Taller 3. Herramientas colaborativas
Taller 3. Herramientas colaborativasTaller 3. Herramientas colaborativas
Taller 3. Herramientas colaborativas
Nicolas Robinson-Garcia
 

Similar a TDD y Python (20)

BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Java Basico
Java BasicoJava Basico
Java Basico
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Aplicaciones de PLN en empresas - Fab Lab ESAN
Aplicaciones de PLN en empresas - Fab Lab ESANAplicaciones de PLN en empresas - Fab Lab ESAN
Aplicaciones de PLN en empresas - Fab Lab ESAN
 
Practica 2 Ordenes Administración de archivos linux
Practica 2 Ordenes Administración de archivos linuxPractica 2 Ordenes Administración de archivos linux
Practica 2 Ordenes Administración de archivos linux
 
Practica 2 Ordenes administracion de archivos linux
Practica 2 Ordenes administracion de archivos  linuxPractica 2 Ordenes administracion de archivos  linux
Practica 2 Ordenes administracion de archivos linux
 
Patrones de diseño
Patrones de diseñoPatrones de diseño
Patrones de diseño
 
Clase 2 - Introducción a la programación con Python I.pptx
Clase 2 - Introducción a la programación con Python I.pptxClase 2 - Introducción a la programación con Python I.pptx
Clase 2 - Introducción a la programación con Python I.pptx
 
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
De principiante a rockstar en Drupal: "Hablemos de buenas prácticas"
 
Identificando problemas en el JVM
Identificando problemas en el JVMIdentificando problemas en el JVM
Identificando problemas en el JVM
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemas
 
componentes de eclipse
componentes de eclipsecomponentes de eclipse
componentes de eclipse
 
Administración de sistemas
Administración de sistemasAdministración de sistemas
Administración de sistemas
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POO
 
Meetup errores en proyectos Big Data
Meetup errores en proyectos Big DataMeetup errores en proyectos Big Data
Meetup errores en proyectos Big Data
 
Examen supletorio
Examen supletorioExamen supletorio
Examen supletorio
 
Taller 3. Herramientas colaborativas
Taller 3. Herramientas colaborativasTaller 3. Herramientas colaborativas
Taller 3. Herramientas colaborativas
 

Más de Javier_J

Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebasCodemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Javier_J
 
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Javier_J
 
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y VideojuegosGamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
Javier_J
 
Videojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y JasmineVideojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y Jasmine
Javier_J
 
Introducción a Pruebas en Android
Introducción a Pruebas en AndroidIntroducción a Pruebas en Android
Introducción a Pruebas en Android
Javier_J
 
GameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de VideojuegosGameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de Videojuegos
Javier_J
 
Herramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de VideojuegosHerramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de Videojuegos
Javier_J
 
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
Javier_J
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no Programadores
Javier_J
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
Javier_J
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
Javier_J
 
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
Javier_J
 
Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012
Javier_J
 

Más de Javier_J (13)

Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebasCodemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
Codemotion 2013 - Desarrollo de videojuegos dirigido por pruebas
 
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
Conferencia Agile Spain 2.013 - Programando Juegos Casuales con Desarrollo Di...
 
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y VideojuegosGamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
GamwUS. Desarrollo Diriguido por Pruebas y Videojuegos
 
Videojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y JasmineVideojuegos en Javascript con TDD y Jasmine
Videojuegos en Javascript con TDD y Jasmine
 
Introducción a Pruebas en Android
Introducción a Pruebas en AndroidIntroducción a Pruebas en Android
Introducción a Pruebas en Android
 
GameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de VideojuegosGameUs - Herramientas de Desarrollo de Videojuegos
GameUs - Herramientas de Desarrollo de Videojuegos
 
Herramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de VideojuegosHerramientas para el Desarrollo de Videojuegos
Herramientas para el Desarrollo de Videojuegos
 
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
IWT2 Dojo US. Presentación, próximas actividades y agenda. 9 noviembre 2012
 
AdV - Programación para no Programadores
AdV - Programación para no ProgramadoresAdV - Programación para no Programadores
AdV - Programación para no Programadores
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
 
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: SokobanIWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
IWT2 DojoUs. 05 octubre 2012. Ejercicio: Sokoban
 
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
IWT2 Dojo US. Introducción a TDD. 5 octubre 2012
 
Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012Introducción a IWT2 Dojo US. 5 noviembre 2.012
Introducción a IWT2 Dojo US. 5 noviembre 2.012
 

Último

Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 

Último (20)

Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 

TDD y Python

  • 1. TDD y Python javierj@us.es / @IWT2_Javier
  • 2. TDD no es probar 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.
  • 3. Esto es todo Gracias por su atención
  • 4. La complejidad “Test-Driven Development (TDD) is a deceptively simple idea” “El Desarrollo Dirigido por Pruebas (TDD) es una idea engañosamente simple”
  • 5. ¿Qué buscamos? ¿Por qué querríamos hacer TDD?
  • 7. Una buena manera de aplicar TDD
  • 8. Ahora a por un problema Hazme un programa que me busque ficheros del mismo tamaño y me los borre.
  • 10. Y tú, ¿qué harías? Con TDD
  • 11. Escribe una prueba Mi primera prueba: Arrange: Un directorio Dos ficheros iguales dentro de ese directorio Act: Llamar al algoritmo de borrado Assert: Uno de los ficheros ya no está y el otro sí
  • 12. Escribe una prueba Mi primera prueba: Arrange: Un directorio Dos ficheros iguales dentro de ese directorio Act: Llamar al algoritmo de borrado ¿Creo un directorio y dos ficheros a mano? Tengo que crearlo cada vez que ejecute la prueba ¿Creo un directorio y fichero con código? Tengo que aprender a hacerlo y necesito código para restaurarlo Assert: Uno de los ficheros ya no está y el otro sí ¿Obtengo un listado de los ficheros? Tengo que aprender a hacerlo No lo necesito (aún)
  • 13. Vamos a escribir código Snippet 01
  • 14. TDD = ¡¡¡ Piensa !!!! Directorio Dame Ficheros Borra este Borrado de ficheros
  • 15. Utilizando Dobles de Prueba • Diseñamos el API que queremos. • No nos preocupamos por la implementación • Verificaos qué se está invocando • Devolvemos los valores adecuados para la prueba
  • 16. Single Repsonsibility Principle A CLASS SHOULD HAVE ONLY ONE REASON TO CHANGE.
  • 17. ¿Cuál es el mínimo código? Snippet 02
  • 19. ¿Y qué hacemos con los mocks?
  • 20. ¿Qué hacemos con los mocks? Cuando el directorio está vacío entonces no tengo ficheros. Cuando borro un fichero el directorio tiene un fichero menos. Cuando recupero un fichero de un directorio entonces puedo conocer su nombre. Cuando recupero un fichero de un directorio entonces puedo conocer su tamaño. Etc. Directorios temporales en Python (módulo tempfile)
  • 21. ¿Y cuando lo ponemos todo junto?
  • 22. En el mundo real
  • 23. Conclusiones de este ejemplo • • • ¿Cómo leemos los ficheros de un directorio? ¿Cómo borramos ficheros? ¿Cómo leemos el tamaño de un fichero? • Cómo podemos leer una única vez cada directorio? • ¿Cómo sabemos si hay más de un fichero con el mismo tamaño? • UI
  • 24. Retrospectiva de lo que Hemos Hecho Nos centramos en el algoritmo Mejora el diseño Hay que cambiar muchos tets si cambiamos código Tardamos más en terminar
  • 25. Testing en Python Unittest, Doctest, N ose Mockito for Python, Mocker, Pydou bles Selenium, Django Testing Behave, PyFIT, Lettu ce, Mamba http://wiki.python.org/moin/PythonTestingToolsTaxonomy
  • 28. Extra Para saber más de TDD. 28
  • 30. Extra 10.000 líneas de código C#... Comprobado…. 124 assemblies .NET generados…. Comprobado…. 52 scripts de construcción… comprobado Ahora que mis pruebas unitarias están escritas puedo empezar a construir mis componentes.
  • 32. Enlaces • • • • • • Blog: http://iwt2-javierj.tumblr.com/ Libro: http://www.iwt2.org/web/opencms/IWT2/comunidad/LibroTDD/?locale=es GameUS: http://www.gameus.es/ IWT2 DojoUS: http://www.iwt2.org/web/opencms/IWT2/comunidad/dojous/?locale=es Pybonacci: http://pybonacci.wordpress.com/2013/01/07/desarrollo-dirigido-por-pruebas-enpython-i-una-historia-que-pasa-todos-los-dias/#more-1352 http://pybonacci.wordpress.com/2013/06/19/desarrollo-dirigido-por-pruebas-enpython-ii-un-caso-practico-i/ Twitter: @IWT2_Javier/ @GameUsSev / @TDDPractico Fin 32