Mantendo a Qualidade dos Códigos de Teste

download Mantendo a Qualidade dos Códigos de Teste

If you can't read please download the document

description

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

Transcript of Mantendo a Qualidade dos Códigos de Teste

  • 1. AgileBrazil 2011 Melhorando a Qualidade dos Cdigos de Teste Maurcio Eduardo Szabo [email_address] @mauricio_szabo http://mauricioszabo.wordpress.com http://github.com/mauricioszabo/AgileBrazil2011

2. about:me

  • Programador Ruby, Java, Python, Scala, C/C++, etc...

3. Scrum Master 4. Test-Addicted 5. Clean-Code Addicted 6. Enfim... 7. Intro

  • Agilidade, mudanas contnuas, requisitos mutantes
  • Garantia de estabilidade testes

8. Dedo duro - sempre saber o estado de seu sistema 9. Confiabilidade no cdigo, acabar com o medo de mudar 10. Requisitos mudam == testes mudam 11. Intro Testes se Pagam

  • Testes demoram para ser escritos?

12. Mudana - Exemplo

  • Parsing de HTML
  • Quero uma lista de todos os homens na pgina

13. Para saber se o Ariovaldo est aparecendo na listagem de homens 14. Minha Abordagem: BDD

  • Testes x Comportamento
  • Deixa eu ver se isso funciona...
  • assert(this, works());

Deixa eu ver se est fazendo isso mesmo...

  • assertThat(this, isDoing(right));

Assert x Should

  • (Assert x Matcher)

Big Picture Small Picture Smaller Picture Unit Test 15. Primeiros Exemplos

  • Situao: elemento est verde?

16. Mudana de Estilo

  • Situao: salrio vlido deve calcular IRPF

17. (Evitar Cometer) Erros Comuns 18. JAMAIS!!! 19. Oops... Certos testes no dizem NADA Certos testes dizem DEMAIS 20. Framework de Testes O que usar, como usar,por que usar? 21. Framework de Testes

  • Test/Unit, JBehave, RSpec, ScalaTest, JUnit, Jasminne, JSpec...

22. Mocks: Mocha, FlexMock, Mockito, JMock, etc... 23. Escolha corretamente: Um framework de testes:

  • Deve ser extensvel

24. Deve ser flexvel Um framework de mocks:

  • Deve refletir a forma como voc pensa

25. Framework de Testes 26. Codebase

  • Comparao entre cdigo e linhas de teste 1:1 (se possvel)

27. Testes devem crescer junto com seu cdigo

  • Classes auxiliares, mtodos, custom matchers, etc

Conforme seu projeto vai crescendo, a dificuldade de escrever novos testes deve ficar constante ou diminuir! 28. Mocks

  • Expectations: antes do teste, o define-se o que esperamos que o mock receba
  • (Mocha, RSpec, FlexMock, JMock)

Assertions: depois do teste, vemos o que o mock recebeu

  • (Mockito)

29. Eu uso...

  • Para Ruby: RSpec, e s vezes, Mocha

30. Para Scala: ScalaTest com Mockito 31. Para Java: JUnit (com os Hamcrest matchers) e Mockito 32. Para JavaScript: Jasminne 33. Primeiro, resolva o problema

  • Represente! A vida um teatro!

34. No escreva NADA antes de resolver o problema 35. Prottipos so vlidos, mas devem ser descartados 36. Ento, escreva o cdigo

  • Teste vem PRIMEIRO

37. Cdigo vem DEPOIS 38. Somente um teste deve falhar por vez

  • Quer dizer...

39. Somente um teste falhando?

  • Mini-integraes

40. Ambiente Isolado

  • Todo teste, no BDD, um cenrio

41. Pensar num teatro:

  • Montar o cenrio (Setup)

42. Apresentao (para o cdigo) 43. Aceitao do pblico 44. Desmontar tudo Pea foi um fracasso: ainda assim, desmontar tudo

  • TearDown

Infra-Estrutura do Teatro Setup Apresentao Aceitao 45. Preparao no pode ficar implcita

  • (Muito comum no RSpec / Ruby)

46. Mas tambm, nada de explcita

  • (Comum com situaes que exigem muito setup)

47. Meio-Termo

  • Mtodos que ajudam a construir o cenrio ideal

48. Mtricas (LOC)

  • Setup (montar o cenrio):
  • Ideal: de 1 a 4 linhas

49. Ruim: de 5 a 7 linhas 50. Maior que 7: Rever a preparao do Cenrio Chamada de mtodo:

  • Ideal: 1 linha

51. Pssimo: maior que 2 linhas JAMAIS:

  • Use IF, CASE, ou qualquer condicional!

52. Estilo de Teste Como fazer seu teste ter menos cara de cdigo e mais cara de texto. 53. Bee English

  • D sentido para as coisas!

54. Bee English

  • Falta de Sentido: que que isso fazia mesmo???

55. Bee English

  • Pense em como voc descreveria aquele pedao

56. Adapte o texto at chegar linguagem de teste 57. Bee English

  • Monte sua histria baseando-se na linguagem

58. Uma ltima Coisa Mocks e Stubs 59. Stub!

  • Stub como forma de controle

60. Programao Funcional Stub em algum lugar aqui dentro... 61. Devil's Advocate

  • Mas... e com a correria?
  • Mas... voc no demora mais pra fazer isso?

Mas... a empresa (coloque aqui sua empresa favorita) no usa isso... 62. Mas... meu cdigo sequer tem testes, como eu vou aplicar isso? 63. That's It

  • Perguntas?

64. Idias? 65. Contato:

  • [email_address]

66. @mauricio_szabo 67. http://mauricioszabo.wordpress.com 68. http://github.com/mauricioszabo/AgileBrazil2011