SlideShare uma empresa Scribd logo
1 de 61
Baixar para ler offline
@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

Mais conteúdo relacionado

Mais procurados

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áticaFabrício Campos
 
TDD (Test Driven Design)
TDD (Test Driven Design)TDD (Test Driven Design)
TDD (Test Driven Design)nedirtv
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentTung Nguyen Thanh
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Mohamed Taman
 
ISTQB - What's testing
ISTQB - What's testingISTQB - What's testing
ISTQB - What's testingHoangThiHien1
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
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 2010guest5639fa9
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de UnidadeAline Ferreira
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareCamilo Almendra
 

Mais procurados (20)

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
 
TDD (Test Driven Design)
TDD (Test Driven Design)TDD (Test Driven Design)
TDD (Test Driven Design)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.
 
ISTQB - What's testing
ISTQB - What's testingISTQB - What's testing
ISTQB - What's testing
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Aula 6 - Qualidade de Software
Aula 6 - Qualidade de SoftwareAula 6 - Qualidade de Software
Aula 6 - Qualidade de Software
 
O compilador dev c++
O compilador dev c++O compilador dev c++
O compilador dev c++
 
Teste de Software - Introdução
Teste de Software - IntroduçãoTeste de Software - Introdução
Teste de Software - Introdução
 
MPS.BR
MPS.BRMPS.BR
MPS.BR
 
Testes Unitários
Testes UnitáriosTestes Unitários
Testes Unitários
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
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
 
Testes Funcionais
Testes FuncionaisTestes Funcionais
Testes Funcionais
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
TDD refresher
TDD refresherTDD refresher
TDD refresher
 
Verificação, Validação e Teste de Software
Verificação, Validação e Teste de SoftwareVerificação, Validação e Teste de Software
Verificação, Validação e Teste de Software
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 

Destaque

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 2Eduardo Mendes
 
Turbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseTurbinando o desenvolvimento com Eclipse
Turbinando o desenvolvimento com EclipseMarcos Sousa
 
Testes de Software parte 2
Testes de Software parte 2Testes de Software parte 2
Testes de Software parte 2Eduardo Mendes
 
Academia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeAcademia do Arquiteto Globalcode
Academia do Arquiteto GlobalcodeGlobalcode
 
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 StartupTaufan Erfiyanto
 
Evolucao de software - parte 1
Evolucao de software - parte 1Evolucao de software - parte 1
Evolucao de software - parte 1Eduardo Mendes
 
Teste de Software - parte 1
Teste de Software - parte 1Teste de Software - parte 1
Teste de Software - parte 1Eduardo Mendes
 
Evolucao de software - parte 2
Evolucao de software - parte 2Evolucao de software - parte 2
Evolucao de software - parte 2Eduardo Mendes
 
Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Desenvolvimento Web com PHP parte 7
Desenvolvimento Web com PHP parte 7Eduardo Mendes
 
Engenharia de Requisitos
Engenharia de RequisitosEngenharia de Requisitos
Engenharia de RequisitosEduardo Mendes
 
TDD Projeto e Estrategias
TDD Projeto e EstrategiasTDD Projeto e Estrategias
TDD Projeto e EstrategiasEduardo Mendes
 
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 2Eduardo Mendes
 
Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Desenvolvimento web com PHP parte 4
Desenvolvimento web com PHP parte 4Eduardo Mendes
 
TDD - Prática com RSpec
TDD - Prática com RSpecTDD - Prática com RSpec
TDD - Prática com RSpecEduardo Mendes
 
Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Desenvolvimento web com PHP parte 3
Desenvolvimento web com PHP parte 3Eduardo Mendes
 

Destaque (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
 

Semelhante a 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 AppCastingPedro Pereira Martins
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 
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 softwareDextra Sistemas / Etec Itu
 
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ândiaRogerio Fontes
 
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 PHPUnitDomingos Teruel
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
TDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesTDD - Desenvolvimento Dirigido a Testes
TDD - Desenvolvimento Dirigido a TestesNetto Cavalcante
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
Desenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesDesenvolvimento Orientado a Testes
Desenvolvimento Orientado a TestesAndre Carlucci
 
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 MGNeubio Ferreira
 
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 testeUniversidade Tiradentes
 

Semelhante a 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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
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
 

Mais de Eduardo Mendes

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 ObjetosEduardo Mendes
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - FundamentosEduardo Mendes
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
Introdução à Internet, Http e HTML
Introdução à Internet, Http e HTMLIntrodução à Internet, Http e HTML
Introdução à Internet, Http e HTMLEduardo Mendes
 
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 SoftwareEduardo Mendes
 
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 2Eduardo Mendes
 
Validações no Ruby on Rails
Validações no Ruby on Rails Validações no Ruby on Rails
Validações no Ruby on Rails 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
 

Mais de 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
 

Último

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 

Último (9)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

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 do 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