![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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/2.jpg)
¿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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/3.jpg)
¿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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/26.jpg)
¡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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/27.jpg)
¡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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.co/reader031/viewer/2022021902/5b9bd57609d3f2cb3b8bd431/html5/thumbnails/29.jpg)
…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
…