Introdução ao TDD

Eduardo Mendes
Eduardo MendesProfessor Adjunto at Faculdade 7 de Setembro en Faculdade 7 de Setembro
@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
1 de 61

Recomendados

TDD (Test-Driven Development) por
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
3.8K vistas37 diapositivas
TDD - Test Driven Development por
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
7.9K vistas45 diapositivas
TDD Desenvolvimento orientado ao teste por
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeRafaela Prado
190 vistas13 diapositivas
TDD - Test Driven Development por
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentEngenharia de Software Ágil
545 vistas46 diapositivas
TDD na Prática por
TDD na PráticaTDD na Prática
TDD na PráticaRafael Fuchs, PMP, MBA
927 vistas43 diapositivas
Cucumber BDD por
Cucumber BDDCucumber BDD
Cucumber BDDPravin Dsilva
2.6K vistas30 diapositivas

Más contenido relacionado

La actualidad más candente

Introduction to BDD por
Introduction to BDDIntroduction to BDD
Introduction to BDDKnoldus Inc.
2.7K vistas14 diapositivas
Testando API REST - Parte 1 por
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1alinebiath
420 vistas17 diapositivas
Test-Driven Development por
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentJohn Blum
1.2K vistas59 diapositivas
Apresentação Clean Code por
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
749 vistas21 diapositivas
TDD Flow: The Mantra in Action por
TDD Flow: The Mantra in ActionTDD Flow: The Mantra in Action
TDD Flow: The Mantra in ActionDionatan default
2.2K vistas72 diapositivas
Test Driven Development (TDD) Preso 360|Flex 2010 por
Test Driven Development (TDD) Preso 360|Flex 2010Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010guest5639fa9
530 vistas52 diapositivas

La actualidad más candente(20)

Introduction to BDD por Knoldus Inc.
Introduction to BDDIntroduction to BDD
Introduction to BDD
Knoldus Inc.2.7K vistas
Testando API REST - Parte 1 por alinebiath
Testando API REST - Parte 1Testando API REST - Parte 1
Testando API REST - Parte 1
alinebiath420 vistas
Test-Driven Development por John Blum
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
John Blum1.2K vistas
Apresentação Clean Code por André Leoni
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
André Leoni749 vistas
Test Driven Development (TDD) Preso 360|Flex 2010 por guest5639fa9
Test Driven Development (TDD) Preso 360|Flex 2010Test Driven Development (TDD) Preso 360|Flex 2010
Test Driven Development (TDD) Preso 360|Flex 2010
guest5639fa9530 vistas
DevCamp - O papel de um testador em uma equipe ágil por Elias Nogueira
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
Elias Nogueira7.1K vistas
Ferramentas de Gestão de Testes por elliando dias
Ferramentas de Gestão de TestesFerramentas de Gestão de Testes
Ferramentas de Gestão de Testes
elliando dias7.7K vistas
Introdução à Qualidade e Testes Ágeis de Software por Claudia Melo
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de Software
Claudia Melo1.2K vistas
BDD testing with cucumber por Daniel Kummer
BDD testing with cucumberBDD testing with cucumber
BDD testing with cucumber
Daniel Kummer10.1K vistas
Introduction to Bdd and cucumber por Nibu Baby
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumber
Nibu Baby3K vistas
Robot Framework Dos And Don'ts por Pekka Klärck
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
Pekka Klärck131.2K vistas
Test-Driven Development - Introdução ao método de construção de software guia... por Thiago Faria de Andrade
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...
BDD with Cucumber por Knoldus Inc.
BDD with CucumberBDD with Cucumber
BDD with Cucumber
Knoldus Inc.15.8K vistas

Destacado

Jquery por
JqueryJquery
JqueryEduardo Mendes
1K vistas127 diapositivas
Java Web 4 - Servlets e JSP 2 por
Java Web 4 - Servlets e JSP 2Java Web 4 - Servlets e JSP 2
Java Web 4 - Servlets e JSP 2Eduardo Mendes
5K vistas16 diapositivas
Turbinando o desenvolvimento com Eclipse por
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
823 vistas18 diapositivas
Testes de Software parte 2 por
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2Eduardo Mendes
387 vistas46 diapositivas
Academia do Arquiteto Globalcode por
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
1.9K vistas10 diapositivas
The Power of Collaboration to Build Your Own Startup por
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 StartupTaufan Erfiyanto
562 vistas27 diapositivas

Destacado(20)

Turbinando o desenvolvimento com Eclipse por Marcos Sousa
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com Eclipse
Marcos Sousa823 vistas
Academia do Arquiteto Globalcode por Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto Globalcode
Globalcode1.9K vistas
The Power of Collaboration to Build Your Own Startup por Taufan Erfiyanto
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
Taufan Erfiyanto562 vistas
Evolucao de software - parte 1 por Eduardo Mendes
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1
Eduardo Mendes379 vistas
Teste de Software - parte 1 por Eduardo Mendes
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1
Eduardo Mendes431 vistas
Evolucao de software - parte 2 por Eduardo Mendes
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2
Eduardo Mendes373 vistas
Desenvolvimento Web com PHP parte 7 por Eduardo Mendes
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7
Eduardo Mendes455 vistas
Introdução à Linguagem Ruby - Fundamentos - Parte 2 por Eduardo Mendes
 Introdução à Linguagem Ruby - Fundamentos - Parte 2 Introdução à Linguagem Ruby - Fundamentos - Parte 2
Introdução à Linguagem Ruby - Fundamentos - Parte 2
Eduardo Mendes430 vistas
Desenvolvimento web com PHP parte 4 por Eduardo Mendes
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4
Eduardo Mendes303 vistas
TDD - Prática com RSpec por Eduardo Mendes
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpec
Eduardo Mendes1.1K vistas
Desenvolvimento web com PHP parte 3 por Eduardo Mendes
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3
Eduardo Mendes345 vistas

Similar a Introdução ao TDD

Introdução ao TDD nas soluções Global AppCasting por
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 AppCastingPedro Pereira Martins
147 vistas23 diapositivas
RealDay: Introduction to TDD por
RealDay: Introduction to TDDRealDay: Introduction to TDD
RealDay: Introduction to TDDMiguel Schmitz Grazziotin
539 vistas15 diapositivas
Testes por
TestesTestes
TestesDan Jesus
324 vistas17 diapositivas
UnP Eng. Software - Aula 27 por
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
325 vistas30 diapositivas
Os Benefícios dos testes no desenvolvimento de software por
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 softwareDextra Sistemas / Etec Itu
428 vistas27 diapositivas
Sobre TDD - Tech Friday da Everis Uberlândia por
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
66 vistas19 diapositivas

Similar a Introdução ao TDD(20)

Sobre TDD - Tech Friday da Everis Uberlândia por Rogerio Fontes
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes66 vistas
Qualidade no desenvolvimento de Software com TDD e PHPUnit por Domingos Teruel
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 Teruel2.1K vistas
Desenvolvimento Guiado por Testes por elliando dias
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
elliando dias449 vistas
TDD - Desenvolvimento Dirigido a Testes por Netto Cavalcante
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a Testes
Netto Cavalcante295 vistas
TDD com Código Legado por Cesar Romero
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
Cesar Romero163 vistas
Desenvolvimento Orientado a Testes por Andre Carlucci
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a Testes
Andre Carlucci411 vistas
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG por Neubio Ferreira
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Neubio Ferreira957 vistas

Más de Eduardo Mendes

JavaScript - Introdução com Orientação a Objetos por
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a ObjetosEduardo Mendes
952 vistas76 diapositivas
AngularJS - Rotas por
AngularJS - RotasAngularJS - Rotas
AngularJS - RotasEduardo Mendes
1.1K vistas41 diapositivas
Angular JS - Fundamentos por
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
871 vistas100 diapositivas
Singleton - Padrão de Projeto por
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
1.8K vistas18 diapositivas
Layout Fluido por
Layout FluidoLayout Fluido
Layout FluidoEduardo Mendes
3.9K vistas69 diapositivas
Web Design Responsivo por
Web Design ResponsivoWeb Design Responsivo
Web Design ResponsivoEduardo Mendes
1K vistas103 diapositivas

Más de Eduardo Mendes(20)

JavaScript - Introdução com Orientação a Objetos por Eduardo Mendes
JavaScript - Introdução com Orientação a ObjetosJavaScript - Introdução com Orientação a Objetos
JavaScript - Introdução com Orientação a Objetos
Eduardo Mendes952 vistas
Singleton - Padrão de Projeto por Eduardo Mendes
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
Eduardo Mendes1.8K vistas
Introdução à Internet, Http e HTML por Eduardo Mendes
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTML
Eduardo Mendes1.5K vistas
Estimativas de Esforço - Engenharia de Software por Eduardo Mendes
Estimativas de Esforço - Engenharia de SoftwareEstimativas de Esforço - Engenharia de Software
Estimativas de Esforço - Engenharia de Software
Eduardo Mendes3.4K vistas
Java web 6 JSP Expression Language Taglib parte 2 por Eduardo Mendes
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
Eduardo Mendes1.6K vistas
Validações no Ruby on Rails por Eduardo Mendes
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails
Eduardo Mendes15.5K vistas
Padroes Template-Method (Método Gabarito) por Eduardo Mendes
Padroes Template-Method (Método Gabarito)Padroes Template-Method (Método Gabarito)
Padroes Template-Method (Método Gabarito)
Eduardo Mendes2K vistas

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

Notas del editor

  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