tdd en c++ - usingstdcpp.files.wordpress.com · cómo funciona tdd haz un test que demuestre que a...

29
TDD en C++ Una introducción Raúl Huertas Díaz

Upload: duongkhanh

Post on 14-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

TDD en C++Una introducción

Raúl Huertas Díaz

Page 2: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

¿Por qué mola TDD?

¡Subida de salario!

Mi código se puede refactorizar. De hecho, TDD promueve la refactorización.

Genero arquitecturas modulares, con componentes reutilizables

Reduzco el número de errores

Tengo clases comprobables

Tengo tests

Page 3: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

¿Qué es TDD?

Metodología de desarrollo

Los tests indican el código a generar

NO se trata de hacer tests

Se trata de hacer especificaciones.

Page 4: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Cómo funciona TDD

Haz un test que demuestre que a tú programa le falta algo

Modifica el código para que el test pase

Refactoriza

Page 5: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Ejemplo rápido TDD

…ummmm, ¿alguno habéis usado la librería CATCH?

Curso hiperrápido CATCH:

Test: REQUIRE( v.size() == 5 );

Estructura casos de test:

Page 6: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Ejemplo Catch

Page 7: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Ejemplo rápido TDD. Especificación.

Vamos a hacer un conversor de UTF32 a UTF8

Queremos convertir un fichero compuesto por caracteres de 32 bits a un

fichero UTF8

Page 8: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Empezando

Page 9: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Rojo -> verde.

Page 10: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Invocando función

Page 11: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Declarando función

Page 12: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Terminando primer test

Page 13: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Lo hecho hasta ahora

Una única línea de código de producción (return 0x61;)

Que sabemos que está mal

Con una única declaración de función miembro (char encode(char32_t input))

Que sabemos que está mal

Pero tenemos el sistema montado

Y hemos comprobado que el sistema funciona: detecta errores, compila y es práctico

Y hemos tomado muchas decisiones de forma muy meditada:

Nombre clase

Parámetros de entrada y salida

Pinta de los tests

Y tampoco nos ha llevado tanto tiempo

Page 14: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Refactorizando: warning y tipo retornado

Page 15: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Refactorizando: usando parámetro

Page 16: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Refactorizando: compilación rápida

Page 17: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Nuevo test: ñ

A destacar:

• He tenido que averiguar el unicode de ‘ñ’

• Y el valor utf-8 de ‘ñ’

• ¡3 datos a la vez!... A punto de desbordar

• ¿Porqué se queja el compilador del ==?

• ¿No era mejor usar char(0xc3)?

Page 18: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

A verde: implementando caso ‘ñ’

Page 19: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Intentando hacer bien la función para ñ

A destacar:

• No soy muy listo

• No sé tanto C++

• Aún así, TDD me avisa inmediatamente

• … y me mantiene enfocado en el problema

• … y me permite casi programar en base a

prueba y error.

Page 20: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Parándome a pensar…

Notas:

• No enseñar este vídeo a mis padres

• … ni en una entrevista de trabajo

• A veces estamos cansados

• Y hasta lo evidente se nos escapa

• Porque… ¿sabéis qué pasaba verdad?

Page 21: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Y por fin tenemos ñ

Page 22: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Dejándolo como si supiera…

Page 23: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

A por un carácter de 3 bytes…

Importante:

• He detectado un posible error

• Pero estoy a otra cosa… ¡y en rojo!

• Se apunta en una lista de TODO

• Y sigo centrado en el problema actual

Page 24: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Terminando caso 3 bytes

Page 25: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Arreglo 7f

Page 26: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

¡Refactorizar!

Page 27: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

¡Los tests también se refactorizan!

Page 28: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

Terminando codificación 4 bytes. Ya del tirón.

Page 29: TDD en C++ - usingstdcpp.files.wordpress.com · Cómo funciona TDD Haz un test que demuestre que a tú programa le falta algo Modifica el código para que el test pase Refactoriza

…Y no tengo más tiempo

Me he dejado:

Tests de casos límite

Simplificación del código

Simplificación de los tests

Clase con su propio .hpp y .cpp

Ir entregando en GIT

¡Función para convertir el fichero!

Uso de Mocks

Mostrar cómo TDD hace emerger la arquitectura de la aplicación

Inyección de dependencias

Gestión de cambios en los requisitos