no debuggearás - introducción al unit testing y tdd

48
NO DEBUGGEARÁS

Upload: reyiyo

Post on 14-Jun-2015

226 views

Category:

Technology


0 download

DESCRIPTION

Charla sobre Testing Unitario y TDD brindada por EXO S.A. en UADE (Universidad Argentina de la Empresa) el 12/12/2013

TRANSCRIPT

Page 1: No debuggearás - Introducción al Unit Testing y TDD

NO DEBUGGEARÁS

Page 2: No debuggearás - Introducción al Unit Testing y TDD

Debuggear...Consume mucho tiempo

Page 3: No debuggearás - Introducción al Unit Testing y TDD

Debuggear...Hace que perdamos el foco

Page 4: No debuggearás - Introducción al Unit Testing y TDD

Debuggear...Produce una falsa confianza

Page 5: No debuggearás - Introducción al Unit Testing y TDD

Debuggear...Aumenta el riesgo de dejar basura

Page 6: No debuggearás - Introducción al Unit Testing y TDD

Debuggear...No asegura NO introducir nuevos bugs

Page 7: No debuggearás - Introducción al Unit Testing y TDD

Soluciones?

Page 8: No debuggearás - Introducción al Unit Testing y TDD
Page 9: No debuggearás - Introducción al Unit Testing y TDD

Niveles de TestUnitarioIntegracionFuncionalSistemaAceptacion

Page 10: No debuggearás - Introducción al Unit Testing y TDD

Unit Tests

Unit = UnidadTests = Pruebas

Page 11: No debuggearás - Introducción al Unit Testing y TDD

Unit Tests

Page 12: No debuggearás - Introducción al Unit Testing y TDD

Unit Tests

Page 13: No debuggearás - Introducción al Unit Testing y TDD

Unit Testsclass Calculator(object):

def add(self, a, b): return a + b def sub(self, a, b): return a - b def multiply(self, a, b): return a * b def divide(self, a, b): return a / b def square(self, a): return a * a

Page 14: No debuggearás - Introducción al Unit Testing y TDD

Cajas

Page 15: No debuggearás - Introducción al Unit Testing y TDD

Algunas reglasLos tests unitarios deben ser:

Repetibles

Independientes

Automatizables

Page 16: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambio

Page 17: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Page 18: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrollo

Page 19: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Page 20: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Page 21: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Page 22: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Page 23: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Page 24: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Facilitan la migracion

Page 25: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Facilitan la migracion

Son documentacion que nunca pasa de moda

Page 26: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Facilitan la migracion

Son documentacion que nunca pasa de moda

Reducen el tiempo de testeo manual

Page 27: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Facilitan la migracion

Son documentacion que nunca pasa de moda

Reducen el tiempo de testeo manual

Permiten la integracion continua

Page 28: No debuggearás - Introducción al Unit Testing y TDD

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

Fuerza la modularizacion

Facilitan la migracion

Son documentacion que nunca pasa de moda

Reducen el tiempo de testeo manual

Permiten la integracion continua

Reducen la necesidad de debugging

Page 29: No debuggearás - Introducción al Unit Testing y TDD

LimitacionesLos tests unitarios:

● No van a asegurar un programa libre de bugs● Solo testean la funcionalidad de las unidades en si● No pueden testear algoritmos no-deterministicos● Tambien pueden tener bugs● Necesitan mantenerse actualizados

Page 30: No debuggearás - Introducción al Unit Testing y TDD

FrameworksLo basico que un framework xUnit nos debe ofrecer

● Test Runner● Test Case● Test Suites● Test Fixtures● Test Result Formatter● Assertions

Y...

Page 31: No debuggearás - Introducción al Unit Testing y TDD

FrameworksLo basico que un framework xUnit nos debe ofrecer

● Test Execution

setup();.../* * Cuerpo de la prueba */...teardown();

Page 32: No debuggearás - Introducción al Unit Testing y TDD
Page 33: No debuggearás - Introducción al Unit Testing y TDD

Talibanismo

Tocar el filesystem

Los tests unitarios NO deben

Interactuar con la DB

Ni con la Red

Page 34: No debuggearás - Introducción al Unit Testing y TDD

Mock and Roll

Page 35: No debuggearás - Introducción al Unit Testing y TDD

Mock and RollUsamos mocks para:

● Aislar la unidad que testeamos

● Escenarios dificiles de reproducir● Error de red, DB,

Filesystem● Algoritmos no-

deterministicos● Fecha/Hora● Ambientes costosos

de crear● Objetos que todavia

no existen

Page 36: No debuggearás - Introducción al Unit Testing y TDD

Mock and RollLo que un framework de mock basico deberia tener:

● Crear Mocks● Definirles stub methods● Definirles expectativas● Verificar las expectativas

Page 37: No debuggearás - Introducción al Unit Testing y TDD

TDD

Page 38: No debuggearás - Introducción al Unit Testing y TDD

TDD

Page 39: No debuggearás - Introducción al Unit Testing y TDD

2 Reglas

1 – Nada de codigo sin un test que falle

Page 40: No debuggearás - Introducción al Unit Testing y TDD

2 Reglas2 – 0% de codigo repetido

2 – 0% de codigo repetido

Page 41: No debuggearás - Introducción al Unit Testing y TDD

Coverage

Page 42: No debuggearás - Introducción al Unit Testing y TDD

Complejidad Ciclomatica

Page 43: No debuggearás - Introducción al Unit Testing y TDD

Build Continuo

Page 44: No debuggearás - Introducción al Unit Testing y TDD

Conclusiones

Page 45: No debuggearás - Introducción al Unit Testing y TDD

Conclusiones

Page 46: No debuggearás - Introducción al Unit Testing y TDD

Ejercicio

Page 47: No debuggearás - Introducción al Unit Testing y TDD
Page 48: No debuggearás - Introducción al Unit Testing y TDD

Autor: Sergio [email protected]

Licencia Creative Commons Reconocimiento – CompartirIgual (by-sa): Se permite el uso comercial de la obra y de las posibles obras

derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Ejemplo de código:https://github.com/reyiyo/vending-machine