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 [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