SlideShare uma empresa Scribd logo
Desenvolvimento Orientado por Testes




                  Daniel Capó Sobral
Ou não?
Taxonomias
• Funcional       • Automático     • Caixa Preta     • Exploratório   • Teste
• Não             • Manual         • Caixa Branca    • Pré-definido     Primeiro
  Funcional                        • Caixa Cinza                      • Teste por
                                                                        Último
                                   Informação                         Momento de
Objeto de teste   Execução                           Planejamento
                                   sobre o sistema                    escrita




• Qualitativo     • Estático       • Estado          • Verificação    • TDD
• Quantitativo      (tipos,        • Interação       • Validação      • ATDD
                    provas)                                           • BDD
                  • Dinâmico
                  Execução do      Comportamento     Contratado vs    Técnica de
Resultado
                  código testado   observado         Desejado         Escrita
Níveis
Escopo do Objeto Testado
Unit Testing

  Integration Testing

     System Testing

        System Integration Testing
Níveis
Objetivo do Teste
              Smoke Test


              Regressão


              Aceitação


                Alpha


                 Beta
Não funcional
    Performance            Carga           Usabilidade




                     Internacionalização
     Segurança                             Destrutivo
                        e Localização




   Compatibilidade     Escalabilidade          etc
“In test-driven development a developer creates automated unit
tests” – wikipedia
O que é TDD?
TDD é sobre como
escrever código de
aplicação.                                Teste Unitário
                                          Automatizado




                                Teste
                               Primeiro



                                                       Técnica de
                                                   Desenvolvimento de
                                                        Software


             TDD não é sobre
             como escrever
             testes!
Porque não fazer TDD?
  Curva de Aprendizado Íngreme:

  • Como escrever testes?
  • Como escrever código testável?
  • Como usar as ferramentas?
  • Como se faz TDD?

  Menor Produtividade

  • Mais linhas de código
  • Interrupções constantes

  Maior Custo de Manutenção

  • Mais código, mais manutenção
  • Mudanças de arquitetura quebram testes!
  • Mudanças de comportamento quebram testes!
Porque fazer TDD?
  Menor Custo de Manutenção

  • Confiança para efetuar mudanças
  • Testes resguardam contra regressão

  Maior Produtividade

  • YAGNI! (You Ain’t Gonna Need It!) significa menos desperdício
  • Menos tempo corrigindo bugs: estava funcionando a cinco minutos atrás!

  Maior Qualidade

  • Mais testes leva a menos bugs
  • Testes unitários compreensivos resultam em baixo acoplamento
O que dizem os estudos?
                 • Inconclusivo
                 • Boa correlação, mas...
                 • Isolamento
                   • TDD ou outras práticas ágeis?
                   • TDD ou número de testes?
   Maior         • Mais testes levam a menos bugs? Confirmado.
 Qualidade?      • Curva de aprendizado íngreme dificulta grupos de controle




                 • Inconclusivo
                 • Conforme estudo, melhor, pior ou indiferente
     Ea
Produtividade?
Famous last words.
Dificuldades
                                                    Que nome dar
                                                     aos testes?

                                     Quanto se
       O que não
                                   testar de cada
        testar?
                                        vez?


                   O que testar?


                                                                       Como
         Onde                                                        entender
       começar?                                                    porque o teste
                                                                      falhou?
                   Como separar
                    uma unidade
                      de suas
                   dependências?




                                                      Fonte: Introducing BDD, Dan North
O que é um bom teste unitário?
Deve ser fácil de implementar.

Deve ser automatizável e reproduzível de forma confiável.

Qualquer um deve ser capaz de executá-lo, sem setups complicados.

Deve ser executável com um simples click.

Deve executar rapidamente.

Uma vez escrito, deve ser preservado para uso futuro.


                                      Fonte: The Art of Unit Testing, Roy Osherove
Teste (automatizado) é Código
                        Arcabouço, Armação, Andaime
                                Removido ao fim da      Mas software sem manutenção
    Ajuda a construir
                                   construção                 é software morto!




                                 Atenção com

 Manutenção         Qualidade      Legibilidade      Refatoração       Code Rot




 Em outras palavras, deve receber as mesmas atenções que o código da
                              aplicação!
Removendo dependências: Fakes
Stubs

             Mocks
                Teste de
  Teste de
   estado
               Interação
                            Como?
              Asserções
                                Injeção de Dependências
             Espelhamento
Introdução a TDD
Três leis de TDD
 Você não pode escrever código de aplicação exceto para
            fazer passar um teste unitário.



  Você não pode escrever código de teste mais do que o
 necessário para falhar; falhar compilação também conta.



Você não pode escrever código de aplicação mais do que o
      suficiente para fazer um teste unitário passar.
                                           Segundo Robert Martin
Três fases de TDD
                          Vermelho
                          • Escrever código
                            de teste para
                            evidenciar
                            falha




       Azul                                   Verde
       • Refactoring de                       • Escrever código
         código                                 de aplicação
         (aplicação e                           para corrigir
         testes)                                falha
Fluxo de TDD                            Não


                                    Executa teste
         Escrever teste                                  Falhou?


              Sim
                                                           Sim

 Sim                          Não
            Passou?                                 Escrever aplicação


         Executa teste                                Executa teste


          Refatoração                   Sim                              Não
                                                         Passou?
       (aplicação e testes)
Introdução a TDD
Demonstração
Jogo de Boliche
 Regras:
    10 jogadas (frames)
    1 ou 2 arremessos por jogada (1ª à 9ª)
    2 ou 3 arremessos na 10ª jogada
    10 pinos
        1 ponto por pino derrubado
    Spare – 10 pinos derrubados em 2 arremessos
        10 pontos + próximo arremesso
    Strike – 10 pinos derrubados em 1 arremesso
        10 pontos + 2 próximos arremessos
Diagrama de Classe
 TODO
Escrevendo o código com TDD
 TODO
Discutir!
Referências
 Clean Coders (Robert Martin)
 Making Software: What Really Works, and Why We
    Believe It (Andy Oram & Greg Wilson)
   The Art of Unit Testing: with Examples in .Net (Roy
    Osherove)
   Introducing BDD (Dan North)
   Wikipedia (duh!)
   Test Driven Development: By Example (Kent Beck)

Mais conteúdo relacionado

Mais procurados

Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2
Victor Hugo Germano
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Domingos Teruel
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
Engenharia de Software Ágil
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de Software
Adriano Bertucci
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passos
Hélio Medeiros
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
testedesoftwarepe
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
GessdaSilvaMachado
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
Camilo Ribeiro
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
Thiago Faria de Andrade
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Developer Academy
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao teste
Rafaela Prado
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
Jorge Oleques
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
Bruno Eustáquio
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
Cesar Romero
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Edgar Silva
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
Igor Takenami
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
Diego Pacheco
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
Manoel Pimentel Medeiros
 
2011 seminario rodrigo 2011
2011 seminario rodrigo 20112011 seminario rodrigo 2011
2011 seminario rodrigo 2011
Rodrigo Rocha
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
Alessandro Binhara
 

Mais procurados (20)

Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
BaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de SoftwareBaixadaTech 2012 - Qualidade de Software
BaixadaTech 2012 - Qualidade de Software
 
Automatizando testes em 4 passos
Automatizando testes em 4 passosAutomatizando testes em 4 passos
Automatizando testes em 4 passos
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...Test driven development teste e design no mundo real by mauricio aniche (z-li...
Test driven development teste e design no mundo real by mauricio aniche (z-li...
 
Introdução a Automação de Teste de Software
Introdução a Automação de Teste de SoftwareIntrodução a Automação de Teste de Software
Introdução a Automação de Teste de Software
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao teste
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
2011 seminario rodrigo 2011
2011 seminario rodrigo 20112011 seminario rodrigo 2011
2011 seminario rodrigo 2011
 
Testes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NETTestes e mocks: Em Visual Studio com .NET
Testes e mocks: Em Visual Studio com .NET
 

Semelhante a Introdução a TDD

Teste Unitários e TDD
Teste Unitários e TDDTeste Unitários e TDD
Teste Unitários e TDD
Diogo Damiani
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
Luiz Ricardo Silva
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
Eduardo Mendes
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
Waldyr Felix
 
O poder do TDD
O poder do TDDO poder do TDD
O poder do TDD
Rafael Queiroz
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
Hélio Medeiros
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
rodrigodealer
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
Luiz Fernando Signorelli
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
Andre Carlucci
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?
Alex Tercete
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
Dionatan default
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
Miguel Schmitz Grazziotin
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
Dextra Sistemas / Etec Itu
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
Raphael Paiva
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
Fabrício Campos
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Renan Siravegna
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
Rafael Ponte
 
Testes
TestesTestes
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
Pedro Pereira Martins
 

Semelhante a Introdução a TDD (20)

Teste Unitários e TDD
Teste Unitários e TDDTeste Unitários e TDD
Teste Unitários e TDD
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
O poder do TDD
O poder do TDDO poder do TDD
O poder do TDD
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Testes - Para que?
Testes - Para que?Testes - Para que?
Testes - Para que?
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
 
Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?Por que você não escreve Testes Unitários?
Por que você não escreve Testes Unitários?
 
Introdução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anosIntrodução ao TDD (Test-Driven Development) - #guma10anos
Introdução ao TDD (Test-Driven Development) - #guma10anos
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?Como TDD pode influenciar na construção do seu Produto?
Como TDD pode influenciar na construção do seu Produto?
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
Testes
TestesTestes
Testes
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 

Mais de Daniel Sobral

What can scala puzzlers teach us
What can scala puzzlers teach usWhat can scala puzzlers teach us
What can scala puzzlers teach us
Daniel Sobral
 
Injecting Clock in Java
Injecting Clock in JavaInjecting Clock in Java
Injecting Clock in Java
Daniel Sobral
 
A JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeA JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA Time
Daniel Sobral
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
Daniel Sobral
 
Scala 2.10.0 (english version)
Scala 2.10.0 (english version)Scala 2.10.0 (english version)
Scala 2.10.0 (english version)
Daniel Sobral
 
Scala 2.10.0
Scala 2.10.0Scala 2.10.0
Scala 2.10.0
Daniel Sobral
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
Daniel Sobral
 
Tutorial Puppet
Tutorial PuppetTutorial Puppet
Tutorial Puppet
Daniel Sobral
 
Regex
RegexRegex
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Daniel Sobral
 

Mais de Daniel Sobral (10)

What can scala puzzlers teach us
What can scala puzzlers teach usWhat can scala puzzlers teach us
What can scala puzzlers teach us
 
Injecting Clock in Java
Injecting Clock in JavaInjecting Clock in Java
Injecting Clock in Java
 
A JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeA JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA Time
 
Gestão automática de configuração usando puppet
Gestão automática de configuração usando puppetGestão automática de configuração usando puppet
Gestão automática de configuração usando puppet
 
Scala 2.10.0 (english version)
Scala 2.10.0 (english version)Scala 2.10.0 (english version)
Scala 2.10.0 (english version)
 
Scala 2.10.0
Scala 2.10.0Scala 2.10.0
Scala 2.10.0
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
 
Tutorial Puppet
Tutorial PuppetTutorial Puppet
Tutorial Puppet
 
Regex
RegexRegex
Regex
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
 

Introdução a TDD

  • 1. Desenvolvimento Orientado por Testes Daniel Capó Sobral
  • 3. Taxonomias • Funcional • Automático • Caixa Preta • Exploratório • Teste • Não • Manual • Caixa Branca • Pré-definido Primeiro Funcional • Caixa Cinza • Teste por Último Informação Momento de Objeto de teste Execução Planejamento sobre o sistema escrita • Qualitativo • Estático • Estado • Verificação • TDD • Quantitativo (tipos, • Interação • Validação • ATDD provas) • BDD • Dinâmico Execução do Comportamento Contratado vs Técnica de Resultado código testado observado Desejado Escrita
  • 4. Níveis Escopo do Objeto Testado Unit Testing Integration Testing System Testing System Integration Testing
  • 5. Níveis Objetivo do Teste Smoke Test Regressão Aceitação Alpha Beta
  • 6. Não funcional Performance Carga Usabilidade Internacionalização Segurança Destrutivo e Localização Compatibilidade Escalabilidade etc
  • 7. “In test-driven development a developer creates automated unit tests” – wikipedia
  • 8. O que é TDD? TDD é sobre como escrever código de aplicação. Teste Unitário Automatizado Teste Primeiro Técnica de Desenvolvimento de Software TDD não é sobre como escrever testes!
  • 9. Porque não fazer TDD? Curva de Aprendizado Íngreme: • Como escrever testes? • Como escrever código testável? • Como usar as ferramentas? • Como se faz TDD? Menor Produtividade • Mais linhas de código • Interrupções constantes Maior Custo de Manutenção • Mais código, mais manutenção • Mudanças de arquitetura quebram testes! • Mudanças de comportamento quebram testes!
  • 10. Porque fazer TDD? Menor Custo de Manutenção • Confiança para efetuar mudanças • Testes resguardam contra regressão Maior Produtividade • YAGNI! (You Ain’t Gonna Need It!) significa menos desperdício • Menos tempo corrigindo bugs: estava funcionando a cinco minutos atrás! Maior Qualidade • Mais testes leva a menos bugs • Testes unitários compreensivos resultam em baixo acoplamento
  • 11. O que dizem os estudos? • Inconclusivo • Boa correlação, mas... • Isolamento • TDD ou outras práticas ágeis? • TDD ou número de testes? Maior • Mais testes levam a menos bugs? Confirmado. Qualidade? • Curva de aprendizado íngreme dificulta grupos de controle • Inconclusivo • Conforme estudo, melhor, pior ou indiferente Ea Produtividade?
  • 13. Dificuldades Que nome dar aos testes? Quanto se O que não testar de cada testar? vez? O que testar? Como Onde entender começar? porque o teste falhou? Como separar uma unidade de suas dependências? Fonte: Introducing BDD, Dan North
  • 14. O que é um bom teste unitário? Deve ser fácil de implementar. Deve ser automatizável e reproduzível de forma confiável. Qualquer um deve ser capaz de executá-lo, sem setups complicados. Deve ser executável com um simples click. Deve executar rapidamente. Uma vez escrito, deve ser preservado para uso futuro. Fonte: The Art of Unit Testing, Roy Osherove
  • 15. Teste (automatizado) é Código Arcabouço, Armação, Andaime Removido ao fim da Mas software sem manutenção Ajuda a construir construção é software morto! Atenção com Manutenção Qualidade Legibilidade Refatoração Code Rot Em outras palavras, deve receber as mesmas atenções que o código da aplicação!
  • 16. Removendo dependências: Fakes Stubs Mocks Teste de Teste de estado Interação Como? Asserções Injeção de Dependências Espelhamento
  • 18. Três leis de TDD Você não pode escrever código de aplicação exceto para fazer passar um teste unitário. Você não pode escrever código de teste mais do que o necessário para falhar; falhar compilação também conta. Você não pode escrever código de aplicação mais do que o suficiente para fazer um teste unitário passar. Segundo Robert Martin
  • 19. Três fases de TDD Vermelho • Escrever código de teste para evidenciar falha Azul Verde • Refactoring de • Escrever código código de aplicação (aplicação e para corrigir testes) falha
  • 20. Fluxo de TDD Não Executa teste Escrever teste Falhou? Sim Sim Sim Não Passou? Escrever aplicação Executa teste Executa teste Refatoração Sim Não Passou? (aplicação e testes)
  • 22. Demonstração Jogo de Boliche  Regras:  10 jogadas (frames)  1 ou 2 arremessos por jogada (1ª à 9ª)  2 ou 3 arremessos na 10ª jogada  10 pinos  1 ponto por pino derrubado  Spare – 10 pinos derrubados em 2 arremessos  10 pontos + próximo arremesso  Strike – 10 pinos derrubados em 1 arremesso  10 pontos + 2 próximos arremessos
  • 24. Escrevendo o código com TDD  TODO
  • 26. Referências  Clean Coders (Robert Martin)  Making Software: What Really Works, and Why We Believe It (Andy Oram & Greg Wilson)  The Art of Unit Testing: with Examples in .Net (Roy Osherove)  Introducing BDD (Dan North)  Wikipedia (duh!)  Test Driven Development: By Example (Kent Beck)