Introdução ao TDD (Test-Driven Development) - #guma10anos

1,226 views

Published on

Introdução ao TDD (Test-Driven Development) palestrado no #guma10anos. Fazendo uma relação com o TFD (Test First Development) e Refatoração, xUnit, Baby Steps, Clean Code, Patters para TDD, Agile Testing e ATDD (Acceptance Test-Driven Development). Ao final os Coding Dojos já realizados pelo RSJUG. Ao final um Prepared Kata demonstrando o TDD na prática.

Published in: Software

Introdução ao TDD (Test-Driven Development) - #guma10anos

  1. 1. Introdução ao TDD Dionatan Moura about.me/dionatanmoura #guma10anos Abril de 2014
  2. 2. Introdução ao TDD ➔ Extreme Programming ➔ TDD ➔ Refatoração ➔ xUnit ➔ Baby Steps ➔ Clean Code ➔ Patterns para TDD ➔ Red Bar ➔ Test ➔ Green Bar ➔ Design Patterns ➔ Agile Testing ➔ ATDD ➔ Dojos
  3. 3. http://commons.wikimedia.org/wiki/File:Creador_de_la_metodologia_xp.jpg “Test-Driven Development (TDD) é uma técnica para contrução de software que guia o desenvolvimento de software através da escrita de testes. Kent Beck
  4. 4. https://5com1001-0912.wikispaces.com/
  5. 5. http://alisina.org/blog/2013/10/31/taqiyah-is-onion-shaped/ EstratégiaEstratégia PortfólioPortfólio ProdutoProduto ReleaseRelease IteraçãoIteração DiáriaDiária TDDTDD
  6. 6. Regras I. Escrever novo código somente se já existir um teste automatizado falhando II. Eliminar duplicação
  7. 7. Escreva um teste para o próximo pedaço da funcionalidade. 3 Passos http://www.pro-tools-expert.com
  8. 8. Escreva um teste para o próximo pedaço da funcionalidade. 3 Passos Escreva código funcional até o teste passar. Refatore o código novo (e antigo) até ficar bem estruturado. http://www.pro-tools-expert.com
  9. 9. Escreva um teste para o próximo pedaço da funcionalidade. 3 Passos Escreva código funcional até o teste passar. Refatore o código novo (e antigo) até ficar bem estruturado. http://www.pro-tools-expert.com
  10. 10. http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html Mantra do TDD
  11. 11. TDD.equals(TFD + Refatoração);
  12. 12. TFD Test First Development (code) TDD.equals(TFD + Refatoração);
  13. 13. Refatoração “Uma mudança feita na estrutura interna do software para deixá-lo mais fácil de entender e barato de modificar sem mudar seu comportamento observável.” Martin Fowler http://martinfowler.com TDD.equals(TFD + Refatoração);
  14. 14. Refatoração no TDD Comportamento Observável == Testes
  15. 15. xUnit para TDD
  16. 16. Como escrever código simples para rodar o teste, e com uma refatoração por vez?
  17. 17. Baby Steps http://rusbase.com/news/author/williamlearn2ru/learn2-baby-steps/
  18. 18. Mas cuidado! https://www.mulberrybush.co.uk/
  19. 19. “O objetivo do TDD é escrever clean code que funciona.” Ron Jeffries https://twitter.com/RonJeffries
  20. 20. Clean Code http://programmer.97things.oreilly.com/wiki/index.php/Uncle_Bob
  21. 21. Lembre-se...
  22. 22. http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
  23. 23. Patterns para TDD
  24. 24. Patterns para TDD Test Como testar software? Escreva um teste automatizado.
  25. 25. Patterns para TDD Isolated Test Como os testes devem afetar uns aos outros? De modo algum.
  26. 26. Patterns para TDD Test List O que testar? Comece uma lista com os testes que você sabe.
  27. 27. Patterns para TDD Test First Quando escrever os testes? Antes de escrever o código (a ser testado).
  28. 28. Patterns para TDD Assert First Quando escrever os asserts? Tente por primeiro.
  29. 29. Patterns para TDD Test Data Quais dados usar para os testes? Dados que facilitam a leitura dos testes e a continuidade.
  30. 30. Patterns para TDD Evident Data Como representar o objetivo dos dados? Com um relacionamento evidente entre resultado esperado e resultado real
  31. 31. Red Bar Patterns
  32. 32. Red Bar Patterns One Step Test Qual teste pegar da lista? O que vai te ensinar algo e que se tem certeza de implementar.
  33. 33. Red Bar Patterns Starter Test Com qual caso de teste começar? Comece por uma variante da operação que faz nada.
  34. 34. Red Bar Patterns Learning Test Quando escrever testes para software externo? Antes da primeira vez de utilizar uma nova funcionalidade externa.
  35. 35. Red Bar Patterns Another Test Como manter uma discussão técnica fora do tópico? Adicione na lista e volte ao tópico original.
  36. 36. Red Bar Patterns Regression Test O que fazer com um defeito relatado? Escreva o melhor teste que falhe.
  37. 37. Red Bar Patterns Break O que fazer quando se está cansado ou travado? Faça uma pausa.
  38. 38. Red Bar Patterns Do Over O que fazer quando se está perdido? Jogue fora o código e recomece.
  39. 39. Red Bar Patterns Cheap Desk, Nice Chair Qual configuração física para TDD? Tenha uma cadeira muito boa, economizando no resto da mobília.
  40. 40. Testing Patterns
  41. 41. Testing Patterns Mock Object Como testar um objeto com recursos caros ou complicados? Crie uma versão fake com respostas constantes.
  42. 42. Testing Patterns Broken Test Como deixar uma sessão sozinha de programação? Deixe o último teste quebrado.
  43. 43. Testing Patterns Clean Check-in Como deixar uma sessão em time de programação? Deixe todos os testes rodando.
  44. 44. Green Bar Patterns
  45. 45. Green Bar Patterns Fake It Qual será a primeira implementação do teste? Retorne uma constante, e depois refatore em variáveis.
  46. 46. Green Bar Patterns Triangulate Como fazer a maior abstração conservativa com testes? Abstraia apenas quando houver 2+ testes. (Similar à indução matemática)
  47. 47. Green Bar Patterns Obvious Implementation Como implementar operações simples? Apenas implemente-as.
  48. 48. Green Bar Patterns One to Many Como implementar uma operação de coleção de objetos? Implemente inicialmente sem coleções.
  49. 49. Design Patterns bases para TDD
  50. 50. Design Patterns bases
  51. 51. E para não esquecer...
  52. 52. http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
  53. 53. Teste é o foco do TDD?
  54. 54. “The focus of TDD is design. Test is a (nice) side effect.” Marco Trincardi
  55. 55. TDD usa apenas Unit Testing?
  56. 56. “O ato de escrever um teste de unidade é mais um ato de design do que de verificação.” Uncle Bob (Robert C. Martin) http://www.techcn.com.cn
  57. 57. Agile Testing http://lisacrispin.com
  58. 58. Mas e o tal de ATDD? http://greatmiddleway.wordpress.com
  59. 59. <Título> Como um <papel de usuário> Eu quero <objetivo> Para que <razão> ATDD Acceptance Test-Driven Development Critério de Aceitação Dado que <pré-condição> Quando <ação> Então <resultado>
  60. 60. ATDD TDD
  61. 61. TDD é sobre quando e como codificar ATDD é sobre o que codificar
  62. 62. JUnit Test Infected: Programmers Love Writing Tests http://junit.sourceforge.net/doc/testinfected/testing.htm
  63. 63. Como aprender TDD?
  64. 64. Por que Dojos com TDD?
  65. 65. “Ensinar não é transferir conhecimento, mas criar as possibilidades para a sua própria produção ou a sua construção.” Paulo Freire http://aosmestresdaeducacao.blogspot.com.br
  66. 66. RSJUG Roman Numerals
  67. 67. RSJUG TroLolo (FizzBuzz)
  68. 68. RSJUG Construindo uma DSL com Java e ANTLR
  69. 69. RSJUG Testando aplicações Java Web fora do container
  70. 70. Mas como começar já nessa segunda-feira?
  71. 71. http://www.cakeeventsblog.com
  72. 72. Implicações Sociais ✔ Menos surpresas desagradáveis ✔ QA proativo ✔ Maior colaboração entre o time ✔ Entrega contínua
  73. 73. E não esqueça:
  74. 74. http://blog.gravypower.net/
  75. 75. http://agileinaflash.blogspot.com.br/2009/02/red-green-refactor.html
  76. 76. Obrigado! Obrigado!Obrigado!

×