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

Post on 14-Jun-2015

226 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

NO DEBUGGEARÁS

Debuggear...Consume mucho tiempo

Debuggear...Hace que perdamos el foco

Debuggear...Produce una falsa confianza

Debuggear...Aumenta el riesgo de dejar basura

Debuggear...No asegura NO introducir nuevos bugs

Soluciones?

Niveles de TestUnitarioIntegracionFuncionalSistemaAceptacion

Unit Tests

Unit = UnidadTests = Pruebas

Unit Tests

Unit Tests

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

Cajas

Algunas reglasLos tests unitarios deben ser:

Repetibles

Independientes

Automatizables

La importanciaLos tests unitarios:

Facilitan el cambio

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrollo

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

La importanciaLos tests unitarios:

Facilitan el cambioSimplifican la integracion

Aunque no lo crean, aceleran el desarrolloValidan funcionalidad

Evitan regresiones

Verifican interfaces

Testean bugs dedicadamente

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

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

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

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

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

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

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

FrameworksLo basico que un framework xUnit nos debe ofrecer

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

Y...

FrameworksLo basico que un framework xUnit nos debe ofrecer

● Test Execution

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

Talibanismo

Tocar el filesystem

Los tests unitarios NO deben

Interactuar con la DB

Ni con la Red

Mock and Roll

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

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

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

TDD

TDD

2 Reglas

1 – Nada de codigo sin un test que falle

2 Reglas2 – 0% de codigo repetido

2 – 0% de codigo repetido

Coverage

Complejidad Ciclomatica

Build Continuo

Conclusiones

Conclusiones

Ejercicio

Autor: Sergio Orbesergioo@exo.com.ar

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

top related