Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como...

24
TESTS UNITARIOS “keep the bar green to keep the code clean”

Transcript of Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como...

Page 1: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

TESTS UNITARIOS

“keep the bar green to keep the code clean”

Page 2: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

¿Para qué hacer tests unitarios?

� Es imposible hacer software libre de defectos.

� Tiempo del desarrollador:

Diseño

Análisis

� Los tests unitarios aumentan la productividad, mejoran

la calidad y hacen que el software sea más confiable.

Debug

Desarrollo

Diseño

Page 3: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Pruebas que podemos hacer

Testing

Tests del desarrolladorTests del desarrollador

Tests automatizados

Tests unitarios

Page 4: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Los Tests Unitarios deben… (I)

Ayudar a mejorarla calidad

Tests comoespecificación

Ayudar a entenderel “sistema bajoprueba” (SUT)

Tests comodocumentación

Reducir

(no introducir)

riesgos

Tests como red de seguridadespecificación

Repelentes de bugs

Localización de defectos

documentación de seguridad

No causar daño

Page 5: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Los Tests Unitarios deben… (II)

Ser fáciles de ejecutar

Automáticos

Ser fáciles de escribir y mantener

Simples

Requerir mínimo mantenimiento, mie

ntras el sistema evoluciona

RobustosAutomáticos

Self-Checking

Repetibles

Simples

Expresivos

Separaciónde

incumbencias

Robustos

Page 6: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Principios (I)

� Escribir los tests primero (TDD)

� Diseñar para ser testeable

� Usar la puerta de entrada primero

� Comunicar intención

� No modificar el «sistema bajo prueba» (SUT)

� Mantener los tests independientes

� Aislar el SUT (evitar sensibilidad al contexto)

Page 7: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Principios (II)

� Minimizar la superposición de tests

� Minimizar el código no testeable

� Mantener la lógica del test fuera del código

productivoproductivo

� Verificar una condición por test

� Separar incumbencias por test

� Asegurar esfuerzo y responsabilidad

proporcionales

Page 8: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

¿Qué tipos de tests podemos automatizar?

Tests por funcionalidad

De aceptación

Tests transversales a la funcionalidad

UsabilidadDe aceptación

(Pruebas de cliente)

De componentes (Diseño del sistema)

Unitarios

(Diseño del código)

Usabilidad

Exploratorios

(Consistencia)

De interfaces

(Prototipos / Integración)

Page 9: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

¿Con qué objetivos automatizamos?

� Deben estar alineados con todos los objetivos

de Calidad.

� ¿Deseamos automatizar las pruebas regresivas?¿Deseamos automatizar las pruebas regresivas?

� ¿Deseamos realizar Integración Continua en

nuestro Proceso de Desarrollo?

� ¿Estamos buscando resolver un ítem específico

de Aseguramiento de Calidad?

Page 10: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Estrategias para automatizar tests

� Comenzar a automatizar tests desde el inicio

del proyecto

� Elegir la herramienta adecuada

� xUnit frameworks

� Robot user

� Scripted UI

� Seleccionar los casos de prueba a automatizar

Page 11: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Frameworks

� Java� jUnit http://www.junit.org

� TestNG http://www.testng.org

� .Net� MSTest Incorporada en Visual Studio� MSTest Incorporada en Visual Studio

� MBUnit http://www.mbunit.com

� NUnit http://www.nunit.org

� xUnit.NET http://www.codeplex.com/xuni

� Otros� HttpUnit

� DBUnit

Page 12: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Organizando los Tests Unitarios

xUnit

Test SuiteTest Suite

Test Fixture

Page 13: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Test Fixture

[Set Up] [Tear Down]

Crear el SUT y sus

dependencias

[Set Up]

• Inicializarlas en el estado

requerido

Ejecutar el SUT

Verificar

[Tear Down]

• Finalizar

Page 14: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Estrategias para el Test Fixture

Estrategia

TransientFresh

Set Up

X

Tear DownSet Up /

Tear DownTriggering

Fresh

PersistentFresh

Shared

X

X

X

X

X X

Page 15: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

¿El código es testeable?

Dependencias Configuración

TDDEstados internos

Page 16: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

¿Cómo testear?

• Set up de un estado “pre-test” simple del SUT

• Ejecutar el SUT, llamando al método a testear

Testear el “camino feliz”

• Llamar métodos de assert sobre las respuestas del SUT

• Llamar métodos de assert sobre el estado “post-test”

Verificar las salidasdirectas del

“camino feliz”

• Variar los argumentos del método SUT

• Variar el estado “pre-test” del SUT

• Controlar las salidas indirectas del SUT via un Test Stub

Verificar caminos alternativos

• Usar Mock Objects o Test Spies para interceptar y verificar las llamadas salientes a métodos

Verificar el comportamiento de

las salidas indirectas

• Hacer que los tests corran rápido

• Hacer que sean fáciles de entender y mantener

• Diseñar el SUT para ser testeable

• Reducir el riesgo de bugs no percibidos

Optimizar la ejecucióny mantenibilidad

Page 17: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Organizando los tests…

� Clase de Test por:

� Clase

� Funcionalidad

� Fixture

� Reutilización de código

de test

� Test superclass

� Test helper� Fixture

� Convenciones de

nombres

� Minimizar tamaño de

métodos de test

� Test helper

� Test Suites

� Independencia de tests

en producción

Page 18: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Recursos de verificación

• Reemplazan componentes de los cualesdepende el SUT, por una implementación liviana

• Mejoran la performance de los testsFakes

• Reemplazan un objeto del SUT para verificar siMocks • Reemplazan un objeto del SUT para verificar siesta siendo correctamente utilizado por el SUTMocks

• Alimentan al SUT con entradas indirectasesperadas

• Permiten verificar salidas indirectas del SUTStubs

• Objetos sin implementación que se pasan comoparámetros de métodos del SUTDummies

Page 19: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Frameworks

� NMock2

http://sourceforge.net/projects/nmock2

� TypeMock

http://www.typemock.comhttp://www.typemock.com

� Rhino Mocks

http://www.ayende.com/projects/rhino-mocks.aspx

Page 20: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Al verificar los resultados…

� Reducir duplicación de código de verificación

� Revelar la intención de la prueba

� Evitar la lógica condicional en los tests

(«ifs» y «loops»)

Page 21: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Integración continua

� Todo el equipo debe trabajar con la versión más reciente

� Permite detectar problemas de compatibilidad de manera tempranamanera temprana

� Reduce los riesgos y

tiempos de integración

� Cada desarrollador es

responsable de integrar

su propio código

Page 22: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Code coverage

� Métrica del grado en que el código de un software es testeado

� Criterios de coverage� Criterios de coverage

� Función

� Sentencia

� Decisión

� Condición (true/false)

� Condición / Decisión

Page 23: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

Bibliografía

� xUnit Test Patterns: Refactoring Test Code(Gerard Meszaros)

� http://xunitpatterns.com/

� Integración Continua(Martin Fowler)

� http://www.martinfowler.com/articles/continuousIntegration.html

Page 24: Tests Unitariosmaterias.fi.uba.ar/7510/practica/zips/TestsUnitarios.pdf · Tests como especificación Ayudar a entender el “sistema bajo ... bugs Localización de defectos No causar

FIN