Peça seu código em casamento: TDD do jeito certo!

1,240 views
1,169 views

Published on

Todo desenvolvedor de software deveria ter um relacionamento de intimidade com seu código, cuidar muito bem dele e declarar votos para selar este relacionamento. Será apresentada a mais nova suite de testes da linguagem Python que permite qualquer desenvolvedor pedir seu código em casamento fazer ele jurar que está fazendo o que deveria fazer e do jeito certo.

Published in: Technology, Business
4 Comments
5 Likes
Statistics
Notes
No Downloads
Views
Total views
1,240
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
15
Comments
4
Likes
5
Embeds 0
No embeds

No notes for slide

Peça seu código em casamento: TDD do jeito certo!

  1. 1. Peça seu código em casamento: TDD do jeito certo! @rafaelcaricioquinta-feira, 30 de junho de 2011
  2. 2. Quem sou eu? @rafaelcaricioquinta-feira, 30 de junho de 2011
  3. 3. Quando você ama e confia...quinta-feira, 30 de junho de 2011
  4. 4. pede em casamento...quinta-feira, 30 de junho de 2011
  5. 5. Não vou ensinar a consseguir uma noiva (ou namorada)...quinta-feira, 30 de junho de 2011
  6. 6. Como confiar e amar seu código e assim casar com ele... TDD, Votos e Tópicosquinta-feira, 30 de junho de 2011
  7. 7. Qual o problema? Dificio manutenção Código obscuro Bugs ...quinta-feira, 30 de junho de 2011
  8. 8. O que é Test Driven Development?quinta-feira, 30 de junho de 2011
  9. 9. O que é Test Driven Development?quinta-feira, 30 de junho de 2011
  10. 10. Fluxo de desenvolvimento Design Test Test Implementquinta-feira, 30 de junho de 2011
  11. 11. O que é um teste? Um bloco de código que descreve um comportamento desejado. *quinta-feira, 30 de junho de 2011
  12. 12. Exemplo from friends import Tarsis def test_falar_bonito(): tarsisazevedo = Tarsis() palavras = tarsisazevedo.fala(2) assert 2 == len(palavras)quinta-feira, 30 de junho de 2011
  13. 13. Exemplo from friends import Tarsis def test_falar_bonito(): tarsisazevedo = Tarsis() palavras = tarsisazevedo.fala(2) assert 2 == len(palavras) O que você espera que vai acontecer!quinta-feira, 30 de junho de 2011
  14. 14. TDD não garante o melhor código! def fala(o): c = None return [“foco”] * o class Tarsis(): def __init__(self, *args, **kwargs): pass def fala(self, o): print “aqui: ” + str(o) a = fala(o) return aquinta-feira, 30 de junho de 2011
  15. 15. Faça refactory do seu código!quinta-feira, 30 de junho de 2011
  16. 16. class Tarsis(): def fala(self, numero_palavras): return [“foco”] * numero_palavrasquinta-feira, 30 de junho de 2011
  17. 17. class Tarsis(): def fala(self, numero_palavras): return [“foco”] * numero_palavrasquinta-feira, 30 de junho de 2011
  18. 18. class Tarsis(): def fala(self, numero_palavras): return [“foco”] * numero_palavrasquinta-feira, 30 de junho de 2011
  19. 19. O que eu posso usar para testar meu código? - unittest - Nose - pytest - pyVowsquinta-feira, 30 de junho de 2011
  20. 20. Vamos a um exemplo... def test_sum_returns_42():     result = add_two_numbers(41, 1)     assert result     assert int(result)     assert result == 42quinta-feira, 30 de junho de 2011
  21. 21. Uma forma mais organizada... def test_sum_returns_result():     result = add_two_numbers(41, 1)     assert result def test_sum_returns_a_number():     result = add_two_numbers(41, 1)     assert int(result) def test_sum_returns_42():     result = add_two_numbers(41, 1)     assert result == 42quinta-feira, 30 de junho de 2011
  22. 22. Alguns problemas identificados Repetição de código Muitos testes executando o mesmo código desnecessariamente Código ilegível Um teste com inúmeros assertsquinta-feira, 30 de junho de 2011
  23. 23. Alguns problemas identificados Repetição de código Tópicos Muitos testes executando o mesmo código desnecessariamente Código ilegível Votos Um teste com inúmeros assertsquinta-feira, 30 de junho de 2011
  24. 24. Uma boa ideia ... class SumContext(Vows.Context):     def topic(self):         return add_two_numbers(41, 1)     def we_get_a_result(self, topic):         expect(topic).Not.to_be_null()     def we_get_a_number(self, topic):         expect(topic).to_be_numeric()     def we_get_42(self, topic):         expect(topic).to_equal(42)quinta-feira, 30 de junho de 2011
  25. 25. quinta-feira, 30 de junho de 2011
  26. 26. quinta-feira, 30 de junho de 2011
  27. 27. Um exemplo prático...quinta-feira, 30 de junho de 2011
  28. 28. Xiii... mas eu não gostei desse “expect”quinta-feira, 30 de junho de 2011
  29. 29. Xiii... mas eu não gostei desse “expect” Use o assert! :)quinta-feira, 30 de junho de 2011
  30. 30. Xiii... mas eu não gostei desse “expect” Use o assert! :) class SumContext(Vows.Context):     def topic(self):         return add_two_numbers(41, 1)     def we_get_a_result(self, topic):         assert None != topicquinta-feira, 30 de junho de 2011
  31. 31. Gostei do “expect”, mas não tem um que atenda minha necessidade!quinta-feira, 30 de junho de 2011
  32. 32. Gostei do “expect”, mas não tem um que atenda minha necessidade! Crie um! :)quinta-feira, 30 de junho de 2011
  33. 33. Gostei do “expect”, mas não tem um que atenda minha necessidade! Crie um! :) @Vows.assertion def to_be_less_than_2(topic): assert topic < 2 class SumContext(Vows.Context):     def topic(self):         return add_two_numbers(41, 1)     def we_get_a_result(self, topic):         expect(topic).to_be_less_than_2()quinta-feira, 30 de junho de 2011
  34. 34. Certo, mas como instalo o pyVows? $ pip install pyvowsquinta-feira, 30 de junho de 2011
  35. 35. Extensões • Tornado • Django* • ...quinta-feira, 30 de junho de 2011
  36. 36. Como contribuir? • Pull request https://github.com/heynemann/pyvows/quinta-feira, 30 de junho de 2011
  37. 37. Hora de jogar o buquê!quinta-feira, 30 de junho de 2011
  38. 38. Peça seu código em casamento: TDD do jeito certo!quinta-feira, 30 de junho de 2011
  39. 39. Dúvidas? A hora é agora! Peça seu código em casamento: TDD do jeito certo! @rafaelcaricio rafael@caricio.comquinta-feira, 30 de junho de 2011

×