Slide 1

Slide 1 text

Introducción a TDD A Coruña, 16 de enero de 2018 Borja Fdez Pillado (@BorjaL) Isidro López (@islomar)

Slide 2

Slide 2 text

Ego slide Desarrollador de software (de sabático) @islomar [email protected] Desarrollador de software (Barkibu) @borjal https://borjafernandezpillado.com

Slide 3

Slide 3 text

¿Para qué estamos aquí? ● Para divertirnos, aprender y compartir ● Qué son los tests automatizados ● Qué es TDD (Test-Driven Development) ● Qué es una kata ● Trabajar en parejas y con pomodoros

Slide 4

Slide 4 text

¿Qué es un Coding Dojo? ● Lugar donde aprender, mejorar y divertirse programando ● Lugar donde experimentar ● Lugar seguro para practicar: diseño, testing, refactoring, herramientas, etc. ● En parejas: humildad, generosidad, agradecimiento ● Práctica deliberada ● NO es un curso ni una formación ni una “clase maestra”: facilitadores

Slide 5

Slide 5 text

Disclaimer

Slide 6

Slide 6 text

Disclaimer Shu-Ha-Ri: si nos “creéis”, hacedlo poco... y sólo de momento Probad y verificad siempre todo por vuestra cuenta

Slide 7

Slide 7 text

El problema

Slide 8

Slide 8 text

Ariane 5 (1996) 40 segundos $500MM http://www-users.math.umn.edu/~arnold/disasters/ariane.html

Slide 9

Slide 9 text

https://www.bloomberg.com/news/photo-essays/2012-08-07/when-software-catastrophe-strikes

Slide 10

Slide 10 text

Código “acabado”… ¿funcionará?

Slide 11

Slide 11 text

https://i.ytimg.com/vi/QUyPALAJFpU/maxresdefault.jpg

Slide 12

Slide 12 text

Tests automatizados ● Red de seguridad = Tranquilidad ● Automatizar = Ahorro de tiempo ● Documentación ● Demuestran la presencia de errores, no su ausencia ● ¿Testear todo? Imposible y no deseable ● QA como rol, no como departamento

Slide 13

Slide 13 text

Pirámide de testing http://blog.cleancoder.com/uncle-bob/2017/05/05/TestDefinitions.html https://martinfowler.com/bliki/TestPyramid.html

Slide 14

Slide 14 text

calculadora = MiCalculadora() # Arrange resultado = calculadora.suma(2, 2) # Act expect(resultado).to(equal(4)) # Assert Estructura de un test: AAA http://wiki.c2.com/?ArrangeActAssert

Slide 15

Slide 15 text

Principios de los tests ● Legibilidad ● Robustez ● Velocidad ● Mantenibilidad

Slide 16

Slide 16 text

¿Cuándo ejecuto los tests? ● Integrado en el IDE/editor/entorno: ante un cambio, se reejecutan ● Cada commit/push al repo: hooks o https://github.com/typicode/husky ● Integración continua o Despliegue Continuo (Continuous Deployment) ○ Idealmente: entorno idéntico de tests y producción (e.g. con Docker) ○ Ejemplo: https://github.com/islomar/url-shortener-islomar ● Tareas configuradas vía Webpack, Gulp, Grunt, Gradle, Maven, etc.

Slide 17

Slide 17 text

Apreciaciones varias ● Código de test: ciudadano de primera, como el de producción ● Idealmente un único assert por test

Slide 18

Slide 18 text

TDD: Test-Driven Development

Slide 19

Slide 19 text

¿Qué es TDD? TL; DR: escribir el test antes que el código de producción. Una vez que tengas el test funcionando, puedes refactorizar. TDD es una técnica de desarrollo de software, una disciplina

Slide 20

Slide 20 text

¿Qué NO es TDD? TDD NO es simplemente una forma de escribir tests TDD NO es una técnica de diseño ni necesariamente mejora tu diseño

Slide 21

Slide 21 text

http://luizricardo.org/wordpress/wp-content/upload-files/2014/05/tdd_flow.gif

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Qué aporta TDD (I) ● FOCO en la funcionalidad a desarrollar: escribir menos código ● Feedback rápido ● Simplicidad ● Cadencia, flow…

Slide 24

Slide 24 text

Qué aporta TDD (II) ● Descubrir poco a poco cómo resolver el problema ● Crear mejores tests de tu código ● Documentación (muy probablemente mejor) ● Mejor diseño (si ya tienes los conocimientos) https://www.codesai.com/2016/10/lo-que-me-aporta-tdd

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

La regla dorada de TDD Nunca escribas nueva funcionalidad sin un test que falle

Slide 27

Slide 27 text

¿Cuándo no haría TDD? ● Spikes ○ Muy alta incertidumbre, exploración de una posible solución: tras verificar, borrarlo y empezar con TDD ● Código MUY legacy (sin tests, pésima legibilidad, etc.) ● Otros: e.g. un script simplón que voy a ejecutar una única vez, no crítico

Slide 28

Slide 28 text

¿Y todo esto, pa’ qué? ● Para vivir más tranquilos ● Para disfrutar más de tu trabajo (e incluso querer ir :-) ) ● … y para servir a negocio (aka aportar valor): clientes más satisfechos, menor Time-To-Market, más beneficios, etc. ● Es NUESTRA responsabilidad (no “just following orders”)

Slide 29

Slide 29 text

Hands-on time!! Pair programming Pomodoros: ~25 min. Kata FizzBuzz http://cdn2.hubspot.net/hub/213381/file-367603473-jpg/images/kata.jpg

Slide 30

Slide 30 text

http://luizricardo.org/wordpress/wp-content/upload-files/2014/05/tdd_flow.gif

Slide 31

Slide 31 text

Kata FizzBuzz Cómo vamos a hacerlo: ● Pomodoro (introducción + 3 iteraciones de 25 minutos cada una) ● Pair programming + Ping Pong ● Escribe lo mínimo para que funcione y pase el test https://github.com/CraftersEntrePercebes/FizzBuzz

Slide 32

Slide 32 text

http://www.solveet.com/exercises/Kata-FizzBuzz/11

Slide 33

Slide 33 text

Round 1… code!!

Slide 34

Slide 34 text

Bonus track ● Devolver “Woof” si un número es divisible por 7 ● Devolver “Fizz” si es divisible por 3 o si incluye un 3 en el número ● Devolver “Buzz” si es divisible por 5 o si incluye un 5 en el número ● Un único nivel de indentación por método ● Sin condicionales (if, while, etc.) ● Sin bucles (for, while, foreach, etc.) ● No más de 4 líneas por método.

Slide 35

Slide 35 text

Round 2… code!!

Slide 36

Slide 36 text

Round 3… code!!

Slide 37

Slide 37 text

Resumiendo, que es gerundio ● Testing: imprescindible… casi siempre ● TDD: técnica de desarrollo, más que recomendable ● Prueba y juzga por ti mismo ● Rodéate de buena gente con experiencia (y busca una mentora/mentor) ● A nivel profesional, el software es un medio para un fin: ¡nunca lo olvides!

Slide 38

Slide 38 text

https://goo.gl/AitF9H

Slide 39

Slide 39 text

Bibliografía ● TDD by example (Kent Beck) ● Growing Object-Oriented guided by tests (Steve Freeman, Nat Pryce) ● Diseño ágil con TDD (Carlos Blé) ● Specification by example (Gojko Adzic) ● Refactoring (Martin Fowler) ● Clean Code (Uncle Bob) ● XP Explained (Kent Beck)

Slide 40

Slide 40 text

Blogs http://blog.adrianbolboaca.ro/ http://blog.jbrains.ca/ https://codurance.com/publications/ https://www.codesai.com/publications/

Slide 41

Slide 41 text

Screencasts ● Screencasts de Sandro Mancuso: ○ Algorithms: https://www.youtube.com/watch?v=iZjgj1S0FCY ○ Outside-In TDD: ■ https://www.youtube.com/watch?v=XHnuMjah6ps ■ https://www.youtube.com/watch?v=24vzFAvOzo0 ● Carlos Blé ○ Implementando algoritmos con TDD ○ Kata sobre juego de cartas

Slide 42

Slide 42 text

Charlas ● Joaquín Engelmo (@kinisoftware) ○ Adicto al verde ○ Dando amor a los tests ● The limited red society ● The three laws of TDD ● Test-Bridle Development (@flipper83), SCPNA

Slide 43

Slide 43 text

Artículos y webs de interés ● https://martinfowler.com/bliki/IntegrationTest.html ● https://martinfowler.com/articles/microservice-testing/ ● http://www.agiledata.org/essays/tdd.html ● https://medium.com/@ramtop/what-im-talking-about-when-i-talk-about-t dd-546a383468be ● https://medium.com/powtoon-engineering/a-complete-guide-to-testing-ja vascript-in-2017-a217b4cd5a2a ● Ideas para katas: https://github.com/12meses12katas

Slide 44

Slide 44 text

Cursos https://www.codesai.com/curso-de-tdd/ http://www.jbrains.ca/training/the-worlds-best-introduction-to-test-driven-dev elopment/ http://www.codemanship.co.uk/tdd.html Pluralsight: https://www.pluralsight.com/search?q=TDD

Slide 45

Slide 45 text

http://3.bp.blogspot.com/-N6byEO21I0w/VoTzspUt8xI/AAAAAAAAC7M/oDukuU0kVdU/s1600/THANK-YOU-FOR-YOUR-TIME-1.png Graciñas!!

Slide 46

Slide 46 text

¡¡Gracias por el feedback!! https://islomar.typeform.com/to/HchXmN

Slide 47

Slide 47 text

No content