TDD do seu jeito




Israel Teixeira   @israelst mudadeideia.com.br

Rodolfo Carvalho @201      rodolfocarvalho.net
http://dojorio.org
Sobre o que vamos falar hoje


              TDD

               =


    Test-Driven Development


               =


Desenvolvimento Guiado por Testes
Preparando uma palestra
      sobre TDD
O que é TDD

• Técnica e boa prática de desenvolvimento de
  software
    Fluxo de desenvolvimento tradicional

      Design


                         Code


                                        Test
O que é TDD

  • Técnica e boa prática de desenvolvimento de
    software
                       Com TDD

              Design               Test




                Test               Code


Refactor
O que é TDD

• Técnica e boa prática de desenvolvimento de
  software



      Design                                    Code                                 Test



                                               x

           Design   Test              Design       Test              Design   Test




            Test    Code               Test     Code                  Test    Code     ...
Refactor                   Refactor                       Refactor




tempo
Exemplo: Caixa Eletrônico



1. Escrever um teste

      class CashMachineTests(unittest.TestCase):
         def test_draw_10_bucks(self):
             machine = CashMachine()
             self.assertEqual(machine.draw(10), [10])
Exemplo: Caixa Eletrônico



    2. Executar os testes e ver o novo teste falhar
       (vermelho)

E
======================================================================
ERROR: test_draw_10_bucks (__main__.CashMachineTests)
----------------------------------------------------------------------
Traceback (most recent call last):
    File "./cash_machine.py", line 6, in test_draw_10_bucks
     machine = CashMachine()
NameError: global name 'CashMachine' is not defined
Exemplo: Caixa Eletrônico



3. Implementar código suficiente para passar nos
   testes

              class CashMachine:
                 def draw(self, amount):
                     return [amount]
Exemplo: Caixa Eletrônico



     4. Executar os testes e ver todos passarem (verde)

.
----------------------------------------------------------------------
Ran 1 test in 0.000s


OK
Exemplo: Caixa Eletrônico



5. Refatorar

class CashMachine:           class CashMachine:
   def draw(self, amount):      def draw(self, amount):
       return [amount]              bills = [amount]
                                    return bills
Exemplo: Caixa Eletrônico



     6. Executar os testes e garantir que todos
        continuam passando

.
----------------------------------------------------------------------
Ran 1 test in 0.000s


OK
TDD é uma das formas de
  desenvolver software
      TDD != 42
Guiando o processo




 http://www.flickr.com/photos/fallenidol/1234034423
Intenção, avaliação, e feedback




“No término de um trabalho, a avaliação é
geralmente considerada uma operação óbvia, vista
por qualquer ser sensato como legítima e
desejável.”
                               Christophe Dejours
Por que TDD como metologia?




• TDD faz com que você reflita sobre o processo.
• 40% a 90% menos erros.
    Nagappan, Maximilien, Bhat e Williams. 2008.
    http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
TDD


• Ajuda a:
     Programar por intenção
     Evitar a "síndrome da tela em branco"
TDD




      101010
      010101
TDD


• Ajuda a:
     Programar por intenção
     Evitar a "síndrome da tela em branco"
     Reduzir a quantidade de bugs
     Documentar o código
     Rede de segurança contra regressões
     ...
O excesso de design prévio




https://picasaweb.google.com/rhcarvalho/Dojo25NaLapa   http://bit.ly/kKEKAc
Conclusões




• TDD não se aplica em todos os contextos
• Use TDD com sabedoria para guiar o
  desenvolvimento
• Faça design iterativo
• Não faça design prévio em excesso
?
Perguntas
Avisos


              Coding Dojo

• Quando: hoje, a partir de 15:00
• Onde: stand da globo.com



• No Rio de Janeiro:
            http://dojorio.org/onde

TDD do seu jeito

  • 1.
    TDD do seujeito Israel Teixeira @israelst mudadeideia.com.br Rodolfo Carvalho @201 rodolfocarvalho.net
  • 2.
  • 3.
    Sobre o quevamos falar hoje TDD = Test-Driven Development = Desenvolvimento Guiado por Testes
  • 4.
  • 5.
    O que éTDD • Técnica e boa prática de desenvolvimento de software Fluxo de desenvolvimento tradicional Design Code Test
  • 6.
    O que éTDD • Técnica e boa prática de desenvolvimento de software Com TDD Design Test Test Code Refactor
  • 7.
    O que éTDD • Técnica e boa prática de desenvolvimento de software Design Code Test x Design Test Design Test Design Test Test Code Test Code Test Code ... Refactor Refactor Refactor tempo
  • 8.
    Exemplo: Caixa Eletrônico 1.Escrever um teste class CashMachineTests(unittest.TestCase): def test_draw_10_bucks(self): machine = CashMachine() self.assertEqual(machine.draw(10), [10])
  • 9.
    Exemplo: Caixa Eletrônico 2. Executar os testes e ver o novo teste falhar (vermelho) E ====================================================================== ERROR: test_draw_10_bucks (__main__.CashMachineTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "./cash_machine.py", line 6, in test_draw_10_bucks machine = CashMachine() NameError: global name 'CashMachine' is not defined
  • 10.
    Exemplo: Caixa Eletrônico 3.Implementar código suficiente para passar nos testes class CashMachine: def draw(self, amount): return [amount]
  • 11.
    Exemplo: Caixa Eletrônico 4. Executar os testes e ver todos passarem (verde) . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
  • 12.
    Exemplo: Caixa Eletrônico 5.Refatorar class CashMachine: class CashMachine: def draw(self, amount): def draw(self, amount): return [amount] bills = [amount] return bills
  • 13.
    Exemplo: Caixa Eletrônico 6. Executar os testes e garantir que todos continuam passando . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
  • 14.
    TDD é umadas formas de desenvolver software TDD != 42
  • 15.
    Guiando o processo http://www.flickr.com/photos/fallenidol/1234034423
  • 16.
    Intenção, avaliação, efeedback “No término de um trabalho, a avaliação é geralmente considerada uma operação óbvia, vista por qualquer ser sensato como legítima e desejável.” Christophe Dejours
  • 17.
    Por que TDDcomo metologia? • TDD faz com que você reflita sobre o processo. • 40% a 90% menos erros. Nagappan, Maximilien, Bhat e Williams. 2008. http://research.microsoft.com/en-us/groups/ese/nagappan_tdd.pdf
  • 18.
    TDD • Ajuda a: Programar por intenção Evitar a "síndrome da tela em branco"
  • 19.
    TDD 101010 010101
  • 20.
    TDD • Ajuda a: Programar por intenção Evitar a "síndrome da tela em branco" Reduzir a quantidade de bugs Documentar o código Rede de segurança contra regressões ...
  • 21.
    O excesso dedesign prévio https://picasaweb.google.com/rhcarvalho/Dojo25NaLapa http://bit.ly/kKEKAc
  • 22.
    Conclusões • TDD nãose aplica em todos os contextos • Use TDD com sabedoria para guiar o desenvolvimento • Faça design iterativo • Não faça design prévio em excesso
  • 23.
  • 24.
    Avisos Coding Dojo • Quando: hoje, a partir de 15:00 • Onde: stand da globo.com • No Rio de Janeiro: http://dojorio.org/onde