SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Downloaden Sie, um offline zu lesen
@dudumendes




Desenvolvimento
Baseado em Testes
  Eduardo Mendes de Oliveira
       edumendes@gmail.com
@dudumendes




            Agenda
• Introdução
• Conceitos de desenvolvimento orientados a
  testes

 • TDD / BDD
• Revisão de Refatoração
• Padrões de teste
• Ferramentas
• Aulas práticas    2
@dudumendes




Introdução
@dudumendes



Processo de Software

                      Projeto	
  e	
  
    Especificação
                   Implementação




     Validação         Evolução
@dudumendes

Contexto do Processo de
   Sofware - Equipe
•Algo novo para a equipe de software
 •pessoas envolvidas
 •domínio da aplicação
 •tecnologia utilizada
 •uma combinação dos 03 anteriores
•Elementos surpresas
@dudumendes

Contexto do Processo de
   Sofware - Cliente

•Obriga a criar um novo olhar sobre a
  organização a partir de uma nova
  perspectiva
•É preciso negociar e formalizar
  processos que até então eram
  baseados na experiência e
  convenções
@dudumendes


     Processo de Software
   Processo de aprendizagem

•Sucesso do projeto
 •Entender o progresso do projeto
 •trabalho conjunto para identificar
   e resolver mal-entendidos
•É preciso um processo que ajude a
  lidar com as incertezas e antecipar
  mudanças inantecipadas
@dudumendes

      Princípios ágeis
       fundamentais

•Desenvolvimento incremental
•Envolvimento do cliente
•Pessoas, não processos
•Aceitar as mudanças
•Envolvimento do cliente
Incremento +
                                 @dudumendes




       Feedback
  analisar
  projetar               implantar
implementar
              CICLO



              feedback
@dudumendes



 Ciclos no Processo de Software



•Testes de unidade
•Testes de aceitação
•Reuniões diárias
•Releases
Lidando com a
                                           @dudumendes




          mudança
• Possuir testes de regressão sempre
 • adicionar funcionalidades sem quebrar as
    existentes
 • escrever testes às vezes é visto como
    uma tarefa chata
• Manter a simplicidade (FOWLER, 1999)
 • Código fácil de manter e modificar
 • exige esforço de refatoração constante
@dudumendes
@dudumendes

 Melhores práticas para
         programação
•Evitar código spaghetti
•Incluir comentários relevantes nos
  fontes
•Criar testes antes ou concomitantemente
  à codificação
•Inspeções formais
•Re-inspeções de código após mudanças
  significativas
•Renovar código legado antes de
  melhorias
@dudumendes




              TDD
•Teste antes, teste primeiro
 •ao invés de deixar o teste verificar
   o trabalho depois de feito
•Teste como atividade de projeto
 •esclarece as ideias sobre o que
   queremos que o código faça
 •separação dos projetos físicos e
   lógicos
Ciclo de vida do
                               @dudumendes




         software
Densenvolvimento

em um primeiro momento só
     existiam 02 fases
                        Manutenção



                   15
@dudumendes




      Ciclos ruins

•Quando se chega na época de
  entregar o software
 •Cliente não está satisfeito
  •Por falta de tempo, o software é
     entregue sem testes
@dudumendes




Espiral da morte

menos testes                 mais problemas




               menos tempo
Abordagens Ágeis
        Test First
          ✦   Modifica a abordagem
              tradicional para modelar
              e analisar


•Kent Beck         ✦   Cria práticas para
                       fornecer apoio ao
                       Test First


        Baby Steps

              18
Consequências



Densenvolvimento
  Manutenção
Consequências




TDD
Test Driven Development
Consequências




TDD
 Test Driven Design
TDD



• “Test-driven development
  is a way of managing fear during
  programming.”
                             Kent Beck
TDD



• “Desenvolvimento baseado em testes é
  uma forma de administrar o medo
  durante a programação.”
                            Kent Beck
“Alguém sabe o
 que isso faz?”
“Eu acho que não
 temos nenhuma
  documentação
    para isso!”
“Se eu mudar X
provalvemente
Y vai quebrar!”
“Na última vez que
peguei nesse negócio,
   nós passamos
    uma semana
  para corrigí-lo.”
@dudumendes




TDD
@dudumendes




Então o que é
       TDD
TDD
                                 @dudumendes




Escreva um teste ANTES
de escrever um código a ser testado
Escreva um código que
apenas faça compilar o teste
e observe o teste funcionando
Refatore para o formato mais simples
possível
@dudumendes




O ciclo básico do TDD
                                                      F
                     Fazer um código
 Escrever um          passar no teste
teste unitário
  que falha


                 Refatorar
@dudumendes




red / green / refactor
@dudumendes




 Feedback do TDD

•Implementação
 •Funciona?
•Projeto
 •Está bem elaborado?
@dudumendes




Benefícios do TDD
•Escrevendo testes
 •esclarece os critérios de aceitação
 •encoraja a escrever componentes
   fracamente acoplados para que
   sejam testados isoladamente
 •atribui uma descrição executável
   do que o código faz
 •ganha-se uma suíte de regressão
   completa
@dudumendes




Benefícios do TDD


•Executando testes
 •detecta erros enquanto o contexto
   do código ainda está em mente
 •avisa quando fizemos o bastante,
   evitando esforço desnecessário
@dudumendes




Benefícios resumo
•O projeto evolui constatemente
•O projeto está sobre constante
  revisão
 •qualidade de código
 •fraco acoplamento
 •alta coesão
@dudumendes



Regra de Ouro do TDD

   “Nunca codifique uma
    funcionalidade nova


  sem um teste falhando”
@dudumendes




Níveis de teste
Testes
                  preparar
                                 Unitários


            Componente	
  
“resetar”    testado	
  de	
     executar

              maneira	
  
               isolada



                  validar
TDD
                                   @dudumendes




 x Testes unitários
•TDD é somente a utilização de testes
  unitários?
 •melhor do que nada!
 •às vezes os testes ficam isolados e
   não podem ser integrados
@dudumendes




  Por onde começar?


• Por onde começa um projeto?
@dudumendes



Regra de Ouro do TDD

   “Nunca codifique uma
    funcionalidade nova


  sem um teste falhando”
@dudumendes




         Por onde começar?
                                    Fazer um código        F
                Escrever um          passar no teste
               teste unitário
                 que falha


   Escrever um                  Refatorar
teste de aceitação
     que falha
@dudumendes




       Níveis de teste
• Aceitação
 • O sistema funciona como um todo?
• Integração
 • Nosso código funciona com o código já
    existente?
• Unidade
 • Nossos objetos fazem a coisa certa do
    jeito certo?
Processo de Software
Requisitos



             Projeto



                       Implementa



                                    Teste



                                            Evolução
Processo de Software
     com TDD

   Projeto



             Implementa



                          Teste
Processo de Software
     com TDD

   Projeto



             Teste



                     Implementa
Processo de Software
     com TDD
 Projeto



           Teste



                   Implementa



                                Teste
TDD

         Projeto




Teste                Teste




        Implementa
TDD

         Projeto




Teste                Teste




        Implementa
TDD

                    Projeto



            crie uma lista de teste

          anote e identifique os testes

      seja conciso: uma classe ou método

posteriormente, é possível adicionar mais testes
TDD

Projeto




          Teste
TDD

Escreva o teste primeiro
 •pense no design
 •controle o escopo
                                     Teste
crie o teste utilizando assertivas
 •teste o que é esperado
    e o que não é esperado
TDD



             Teste




Implementa
TDD


implemente o código que deve ser testado

 faça o mínimo e somente o necessário
    para que o teste compile e passe

                Implementa
TDD



Teste




        Implementa
TDD



Teste   Verifique se o teste passou
TDD

            Projeto




Teste   E tudo de novo!   Teste




           Implementa
@dudumendes




Entendi!
       Já sei! TDD é um método
          para testar software
@dudumendes




PEINNNNN!!!!!
@dudumendes




           TDD é
um método*
para construir software

*método:
  abordagem repetítivel - ciclo
  para solucionar um determinado
  problema - aprendizado

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (20)

TDD (Test Driven Design)
TDD (Test Driven Design)TDD (Test Driven Design)
TDD (Test Driven Design)
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Test-Driven Development (TDD)
Test-Driven Development (TDD)Test-Driven Development (TDD)
Test-Driven Development (TDD)
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration Testing
 
An Introduction to Test Driven Development
An Introduction to Test Driven Development An Introduction to Test Driven Development
An Introduction to Test Driven Development
 
A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...A importância dos testes unitários: do código legado ao pipeline de testes em...
A importância dos testes unitários: do código legado ao pipeline de testes em...
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
Unit testing
Unit testingUnit testing
Unit testing
 
Test Driven Development (TDD)
Test Driven Development (TDD)Test Driven Development (TDD)
Test Driven Development (TDD)
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 
Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010
 
Teste de Software - Introdução
Teste de Software - IntroduçãoTeste de Software - Introdução
Teste de Software - Introdução
 
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
 
Unit tests & TDD
Unit tests & TDDUnit tests & TDD
Unit tests & TDD
 
Testes Funcionais
Testes FuncionaisTestes Funcionais
Testes Funcionais
 
Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 

Andere mochten auch

Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
Eduardo Mendes
 

Andere mochten auch (20)

Jquery
JqueryJquery
Jquery
 
Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
 
The Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own StartupThe Power of Collaboration to Build Your Own Startup
The Power of Collaboration to Build Your Own Startup
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
 
RSpec com doubles
RSpec com doublesRSpec com doubles
RSpec com doubles
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de Requisitos
 
Academia java intensivo
Academia java intensivoAcademia java intensivo
Academia java intensivo
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e Estrategias
 
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
 
Html Aula 1 - parte 2
Html Aula 1 - parte 2Html Aula 1 - parte 2
Html Aula 1 - parte 2
 
Rails - parte 1
Rails - parte 1Rails - parte 1
Rails - parte 1
 

Ähnlich wie Introdução ao TDD

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
 
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
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
elliando dias
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Neubio Ferreira
 

Ähnlich wie Introdução ao TDD (20)

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
 
RealDay: Introduction to TDD
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDD
 
Testes
TestesTestes
Testes
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
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
 
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
 
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
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a Testes
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
Criando uma Arquitetura Testável
Criando uma Arquitetura TestávelCriando uma Arquitetura Testável
Criando uma Arquitetura Testável
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
 
Tdd On Rails
Tdd On RailsTdd On Rails
Tdd On Rails
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
TDD
TDDTDD
TDD
 

Mehr von Eduardo Mendes

Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
Eduardo Mendes
 

Mehr von Eduardo Mendes (20)

JavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
 
AngularJS - Rotas
AngularJS - RotasAngularJS - Rotas
AngularJS - Rotas
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
Layout Fluido
Layout FluidoLayout Fluido
Layout Fluido
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 
Html - Aula 4
Html - Aula 4Html - Aula 4
Html - Aula 4
 
Html - Aula 3
Html - Aula 3Html - Aula 3
Html - Aula 3
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
 
ExtJS-4
ExtJS-4ExtJS-4
ExtJS-4
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Estimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
 
Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2Java web 6 JSP Expression Language Taglib parte 2
Java web 6 JSP Expression Language Taglib parte 2
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
 
Padrão Iterator
Padrão IteratorPadrão Iterator
Padrão Iterator
 
Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
 
Padrão Command
Padrão CommandPadrão Command
Padrão Command
 
Padrão Fachada
Padrão FachadaPadrão Fachada
Padrão Fachada
 
Padrão Adapter
Padrão AdapterPadrão Adapter
Padrão Adapter
 
Web Design Responsivo
Web Design ResponsivoWeb Design Responsivo
Web Design Responsivo
 

Introdução ao TDD

  • 1. @dudumendes Desenvolvimento Baseado em Testes Eduardo Mendes de Oliveira edumendes@gmail.com
  • 2. @dudumendes Agenda • Introdução • Conceitos de desenvolvimento orientados a testes • TDD / BDD • Revisão de Refatoração • Padrões de teste • Ferramentas • Aulas práticas 2
  • 4. @dudumendes Processo de Software Projeto  e   Especificação Implementação Validação Evolução
  • 5. @dudumendes Contexto do Processo de Sofware - Equipe •Algo novo para a equipe de software •pessoas envolvidas •domínio da aplicação •tecnologia utilizada •uma combinação dos 03 anteriores •Elementos surpresas
  • 6. @dudumendes Contexto do Processo de Sofware - Cliente •Obriga a criar um novo olhar sobre a organização a partir de uma nova perspectiva •É preciso negociar e formalizar processos que até então eram baseados na experiência e convenções
  • 7. @dudumendes Processo de Software Processo de aprendizagem •Sucesso do projeto •Entender o progresso do projeto •trabalho conjunto para identificar e resolver mal-entendidos •É preciso um processo que ajude a lidar com as incertezas e antecipar mudanças inantecipadas
  • 8. @dudumendes Princípios ágeis fundamentais •Desenvolvimento incremental •Envolvimento do cliente •Pessoas, não processos •Aceitar as mudanças •Envolvimento do cliente
  • 9. Incremento + @dudumendes Feedback analisar projetar implantar implementar CICLO feedback
  • 10. @dudumendes Ciclos no Processo de Software •Testes de unidade •Testes de aceitação •Reuniões diárias •Releases
  • 11. Lidando com a @dudumendes mudança • Possuir testes de regressão sempre • adicionar funcionalidades sem quebrar as existentes • escrever testes às vezes é visto como uma tarefa chata • Manter a simplicidade (FOWLER, 1999) • Código fácil de manter e modificar • exige esforço de refatoração constante
  • 13. @dudumendes Melhores práticas para programação •Evitar código spaghetti •Incluir comentários relevantes nos fontes •Criar testes antes ou concomitantemente à codificação •Inspeções formais •Re-inspeções de código após mudanças significativas •Renovar código legado antes de melhorias
  • 14. @dudumendes TDD •Teste antes, teste primeiro •ao invés de deixar o teste verificar o trabalho depois de feito •Teste como atividade de projeto •esclarece as ideias sobre o que queremos que o código faça •separação dos projetos físicos e lógicos
  • 15. Ciclo de vida do @dudumendes software Densenvolvimento em um primeiro momento só existiam 02 fases Manutenção 15
  • 16. @dudumendes Ciclos ruins •Quando se chega na época de entregar o software •Cliente não está satisfeito •Por falta de tempo, o software é entregue sem testes
  • 17. @dudumendes Espiral da morte menos testes mais problemas menos tempo
  • 18. Abordagens Ágeis Test First ✦ Modifica a abordagem tradicional para modelar e analisar •Kent Beck ✦ Cria práticas para fornecer apoio ao Test First Baby Steps 18
  • 22. TDD • “Test-driven development is a way of managing fear during programming.” Kent Beck
  • 23. TDD • “Desenvolvimento baseado em testes é uma forma de administrar o medo durante a programação.” Kent Beck
  • 24. “Alguém sabe o que isso faz?”
  • 25. “Eu acho que não temos nenhuma documentação para isso!”
  • 26. “Se eu mudar X provalvemente Y vai quebrar!”
  • 27. “Na última vez que peguei nesse negócio, nós passamos uma semana para corrigí-lo.”
  • 30. TDD @dudumendes Escreva um teste ANTES de escrever um código a ser testado Escreva um código que apenas faça compilar o teste e observe o teste funcionando Refatore para o formato mais simples possível
  • 31. @dudumendes O ciclo básico do TDD F Fazer um código Escrever um passar no teste teste unitário que falha Refatorar
  • 33. @dudumendes Feedback do TDD •Implementação •Funciona? •Projeto •Está bem elaborado?
  • 34. @dudumendes Benefícios do TDD •Escrevendo testes •esclarece os critérios de aceitação •encoraja a escrever componentes fracamente acoplados para que sejam testados isoladamente •atribui uma descrição executável do que o código faz •ganha-se uma suíte de regressão completa
  • 35. @dudumendes Benefícios do TDD •Executando testes •detecta erros enquanto o contexto do código ainda está em mente •avisa quando fizemos o bastante, evitando esforço desnecessário
  • 36. @dudumendes Benefícios resumo •O projeto evolui constatemente •O projeto está sobre constante revisão •qualidade de código •fraco acoplamento •alta coesão
  • 37. @dudumendes Regra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
  • 39. Testes preparar Unitários Componente   “resetar” testado  de   executar maneira   isolada validar
  • 40. TDD @dudumendes x Testes unitários •TDD é somente a utilização de testes unitários? •melhor do que nada! •às vezes os testes ficam isolados e não podem ser integrados
  • 41. @dudumendes Por onde começar? • Por onde começa um projeto?
  • 42. @dudumendes Regra de Ouro do TDD “Nunca codifique uma funcionalidade nova sem um teste falhando”
  • 43. @dudumendes Por onde começar? Fazer um código F Escrever um passar no teste teste unitário que falha Escrever um Refatorar teste de aceitação que falha
  • 44. @dudumendes Níveis de teste • Aceitação • O sistema funciona como um todo? • Integração • Nosso código funciona com o código já existente? • Unidade • Nossos objetos fazem a coisa certa do jeito certo?
  • 45. Processo de Software Requisitos Projeto Implementa Teste Evolução
  • 46. Processo de Software com TDD Projeto Implementa Teste
  • 47. Processo de Software com TDD Projeto Teste Implementa
  • 48. Processo de Software com TDD Projeto Teste Implementa Teste
  • 49. TDD Projeto Teste Teste Implementa
  • 50. TDD Projeto Teste Teste Implementa
  • 51. TDD Projeto crie uma lista de teste anote e identifique os testes seja conciso: uma classe ou método posteriormente, é possível adicionar mais testes
  • 52. TDD Projeto Teste
  • 53. TDD Escreva o teste primeiro •pense no design •controle o escopo Teste crie o teste utilizando assertivas •teste o que é esperado e o que não é esperado
  • 54. TDD Teste Implementa
  • 55. TDD implemente o código que deve ser testado faça o mínimo e somente o necessário para que o teste compile e passe Implementa
  • 56. TDD Teste Implementa
  • 57. TDD Teste Verifique se o teste passou
  • 58. TDD Projeto Teste E tudo de novo! Teste Implementa
  • 59. @dudumendes Entendi! Já sei! TDD é um método para testar software
  • 61. @dudumendes TDD é um método* para construir software *método: abordagem repetítivel - ciclo para solucionar um determinado problema - aprendizado

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. Contextualizar o processo / Conjunto de atividades que levam a um sistema\n
  5. \n
  6. \n
  7. Anotar mudanças e incertezas\n
  8. Anotar mudanças e incertezas\n
  9. Discutir um pouco as práticas para levar o benefício do feedback\n
  10. Implantar é a oportunidade de checar as suposições frente à realidade / Sem implantar não como ter um feedback completo\n A cada ciclo de incremento se repetem as etapas de desenvolver e obter feedback / Maneira de aprender algo sobre o sistema e aplicar este conhecimento de volta ao sistema\n
  11. Cada ciclo oferece um feedback em que o time pode descobrir e corrigir erros\nOs ciclos internos focam no detalhe, o ciclos exteros focam na organização e no time\nQuanto mais cedos obtivermos o feedback, melhor\n
  12. \n
  13. \n
  14. \n
  15. O esforço para escrever o teste primeiro dá-nos FEEDBACK sobre a qualidade das nossas ideias\nFazer código testável torna o desenvolvimento mais limpo e mais modular\nSe se escreve testes durante o processo de desenvolvimento, então TESTES de REGRESSÃO\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. Onde meu software está quebrando? Vou ter que fazer manutenção demais!\n\nO medo nos faz hesitantes\nO medo nos faz diminuir a comunicação\nO medo nos afastam do feedback\nO medo nos faz mal-humorados\n
  29. Onde meu software está quebrando? Vou ter que fazer manutenção demais!\n\nO medo nos faz hesitantes\nO medo nos faz diminuir a comunicação\nO medo nos afastam do feedback\nO medo nos faz mal-humorados\n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. Código limpo\ntestes como especificação\naumento de confiança\n
  47. Código limpo\ntestes como especificação\naumento de confiança\n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  57. Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  58. Problema: quando integra o sistema, propriedades emergentes surgem e quebram\n
  59. \n
  60. \n
  61. \n
  62. Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  63. Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  64. Os testes de aceitação demoram mais a passar / Testes de unidades devem passar logo depois que foram escritos / Testes unitários não devem comprometer o repositório de origem / Testes de aceitação devem estar presentes por todo o sistema / testando a GUI\n\n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n