Mantendo a Qualidade dos Códigos de Teste

1,104
-1

Published on

Apresentação feita no Agile Brazil 2011, em Fortaleza, por Maurício Eduardo Szabo

Recomendo baixar a apresentação, a versão do slideshare não apresenta algumas animações que são essenciais para o entendimento

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total Views
1,104
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Mantendo a Qualidade dos Códigos de Teste

  1. 1. AgileBrazil 2011 Melhorando a Qualidade dos Códigos de Teste Maurício Eduardo Szabo [email_address] @mauricio_szabo http://mauricioszabo.wordpress.com http://github.com/mauricioszabo/AgileBrazil2011
  2. 2. about:me <ul><li>Programador Ruby, Java, Python, Scala, C/C++, etc...
  3. 3. Scrum Master
  4. 4. Test-Addicted
  5. 5. Clean-Code Addicted
  6. 6. Enfim... </li></ul>
  7. 7. Intro <ul><li>Agilidade, mudanças contínuas, requisitos mutantes </li><ul><li>Garantia de estabilidade – testes
  8. 8. ”Dedo duro” - sempre saber o estado de seu sistema
  9. 9. Confiabilidade no código, acabar com o ”medo de mudar”
  10. 10. Requisitos mudam == testes mudam </li></ul></ul>
  11. 11. Intro – Testes se Pagam <ul><li>Testes demoram para ser escritos? </li></ul>
  12. 12. Mudança - Exemplo <ul><li>Parsing de HTML </li><ul><li>Quero uma lista de todos os homens na página
  13. 13. Para saber se o Ariovaldo está aparecendo na listagem de homens </li></ul></ul>
  14. 14. Minha Abordagem: BDD <ul><li>Testes x Comportamento </li><ul><li>Deixa eu ver se isso funciona... </li><ul><li>assert(this, works()); </li></ul><li>Deixa eu ver se está fazendo isso mesmo... </li><ul><li>assertThat(this, isDoing(right)); </li></ul></ul><li>Assert x Should </li><ul><li>(Assert x Matcher) </li></ul><li>Big Picture – Small Picture – Smaller Picture – Unit Test </li></ul>
  15. 15. Primeiros Exemplos <ul><li>Situação: elemento está verde? </li></ul>
  16. 16. Mudança de ”Estilo” <ul><li>Situação: salário válido deve calcular IRPF </li></ul>
  17. 17. (Evitar Cometer) Erros Comuns
  18. 18. JAMAIS!!!
  19. 19. Oops... Certos testes não dizem NADA Certos testes dizem DEMAIS
  20. 20. Framework de Testes O que usar, como usar, por que usar?
  21. 21. Framework de Testes <ul><li>Test/Unit, JBehave, RSpec, ScalaTest, JUnit, Jasminne, JSpec...
  22. 22. Mocks: Mocha, FlexMock, Mockito, JMock, etc...
  23. 23. Escolha corretamente: Um framework de testes: </li><ul><li>Deve ser extensível
  24. 24. Deve ser flexível </li></ul><li>Um framework de mocks: </li><ul><li>Deve refletir a forma como você pensa </li></ul></ul>
  25. 25. Framework de Testes
  26. 26. Codebase <ul><li>Comparação entre código e linhas de teste 1:1 (se possível)
  27. 27. Testes devem crescer junto com seu código </li><ul><li>Classes auxiliares, métodos, custom matchers, etc </li></ul><li>Conforme seu projeto vai crescendo, a dificuldade de escrever novos testes deve ficar constante ou diminuir! </li></ul>
  28. 28. Mocks <ul><li>Expectations: antes do teste, o define-se o que esperamos que o mock receba </li><ul><li>(Mocha, RSpec, FlexMock, JMock) </li></ul><li>Assertions: depois do teste, vemos o que o mock recebeu </li><ul><li>(Mockito) </li></ul></ul>
  29. 29. Eu uso... <ul><li>Para Ruby: RSpec, e às vezes, Mocha
  30. 30. Para Scala: ScalaTest com Mockito
  31. 31. Para Java: JUnit (com os Hamcrest matchers) e Mockito
  32. 32. Para JavaScript: Jasminne </li></ul>
  33. 33. Primeiro, resolva o problema <ul><li>Represente! A vida é um teatro!
  34. 34. Não escreva NADA antes de resolver o problema
  35. 35. Protótipos são válidos, mas devem ser descartados </li></ul>
  36. 36. Então, escreva o código <ul><li>Teste vem PRIMEIRO
  37. 37. Código vem DEPOIS
  38. 38. Somente um teste deve falhar por vez </li><ul><li>Quer dizer... </li></ul></ul>
  39. 39. Somente um teste falhando? <ul><li>Mini-integrações </li></ul>
  40. 40. Ambiente Isolado <ul><li>Todo teste, no BDD, é um cenário
  41. 41. Pensar num teatro: </li><ul><li>Montar o cenário (Setup)
  42. 42. Apresentação (para o código)
  43. 43. Aceitação do público
  44. 44. Desmontar tudo </li></ul><li>Peça foi um fracasso: ainda assim, desmontar tudo </li><ul><li>TearDown </li></ul></ul>Infra-Estrutura do Teatro Setup Apresentação Aceitação
  45. 45. Preparação não pode ficar implícita <ul><li>(Muito comum no RSpec / Ruby) </li></ul>
  46. 46. Mas também, nada de explícita <ul><li>(Comum com situações que exigem muito ”setup”) </li></ul>
  47. 47. Meio-Termo <ul><li>Métodos que ajudam a construir o cenário ideal </li></ul>
  48. 48. Métricas (LOC) <ul><li>Setup (montar o cenário): </li><ul><li>Ideal: de 1 a 4 linhas
  49. 49. Ruim: de 5 a 7 linhas
  50. 50. Maior que 7: Rever a preparação do Cenário </li></ul><li>Chamada de método: </li><ul><li>Ideal: 1 linha
  51. 51. Péssimo: maior que 2 linhas </li></ul><li>JAMAIS: </li><ul><li>Use IF, CASE, ou qualquer condicional! </li></ul></ul>
  52. 52. Estilo de Teste Como fazer seu teste ter menos cara de código e mais cara de texto.
  53. 53. Bee English <ul><li>Dê sentido para as coisas! </li></ul>
  54. 54. Bee English <ul><li>Falta de Sentido: ”que é que isso fazia mesmo???” </li></ul>
  55. 55. Bee English <ul><li>Pense em como você descreveria aquele pedaço
  56. 56. Adapte o texto até chegar à linguagem de teste </li></ul>
  57. 57. Bee English <ul><li>Monte sua ”história” baseando-se na linguagem </li></ul>
  58. 58. Uma Última Coisa Mocks e Stubs
  59. 59. Stub! <ul><li>Stub como forma de ”controle”
  60. 60. Programação Funcional </li></ul>Stub em algum lugar aqui dentro...
  61. 61. Devil's Advocate <ul><li>Mas... e com a correria? </li><ul><li>Mas... você não demora mais pra fazer isso? </li></ul><li>Mas... a empresa (coloque aqui sua empresa favorita) não usa isso...
  62. 62. Mas... meu código sequer tem testes, como eu vou aplicar isso? </li></ul>
  63. 63. That's It <ul><li>Perguntas?
  64. 64. Idéias?
  65. 65. Contato: </li><ul><li>[email_address]
  66. 66. @mauricio_szabo
  67. 67. http://mauricioszabo.wordpress.com
  68. 68. http://github.com/mauricioszabo/AgileBrazil2011 </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×