SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Introdução a
 Testes Automatizados


Cursos de Verão 2008 – IME/USP

      www.agilcoop.org.br
         Paulo Cheque
Testes Automatizados
   Teste de Software:
     −   Executar o programa a ser testado com alguma entrada e
         conferir visualmente os resultados obtidos

   Teste Automatizado:
     −   Programa ou script executável que roda o programa a
         ser testado e faz verificações automáticas em cima dos
         efeitos colaterais obtidos.

   Testar NÃO é depurar
     −   Testar é verificar a presença de erros
     −   Depurar é seguir o fluxo para identificar um erro
         conhecido
    copyleft by AgilCoop        2
Testes Automatizados e os
         Princípios Ágeis


       Software funcionando ...

       Adaptação a mudanças ...

       Colaboração com o cliente ...

       Indivíduos e Interações ...



copyleft by AgilCoop          3
Testes Automatizados e XP

   Entre as práticas mais importantes
     −   A mais importante em muitos contextos

   Muitas das práticas dependem de testes automatizados:
     −   Refatoração
     −   Integração Contínua
     −   Propriedade Coletiva do Código
     −   Ainda: Design Simples, Releases Pequenos




    copyleft by AgilCoop        4
Roteiro

1) Motivação
2) Importância dos Testes Automatizados
3) Alguns Conceitos de Testes Automatizados
4) Alguns Tipos de Testes
5) Dicas para Escrever Bons Testes
6) Considerações Finais




 copyleft by AgilCoop      5
Exemplo de Teste Manual

                       Jogo de cartas Buraco




          Usuário só pode criar jogos válidos




copyleft by AgilCoop           6
Problemas
   Difícil repetir os testes
   Demorado
   Cansativo
   Executado poucas vezes
   Poucos casos
   Casos simples
   Muito tempo gasto com depuração
   Erros encontrados tardiamente:
     −   Pressão, desconforto, estresse, perda de confiança
   Ciclo de adição de erros regressão
    copyleft by AgilCoop       7
Modelos “tradicionais”
Cascata, espiral...
        Requisitos


                       Análise

                             Arquitetura e
                                Design

                                     Implementação


                                             Validação


                                                     Produção

copyleft by AgilCoop                   8
+ Problemas
   Difícil repetir os testes
   Demorado
   Cansativo
   Executado poucas vezes
   Poucos casos
   Casos simples
   Muito tempo gasto com depuração
   Erros encontrados tardiamente:
     −   Pressão, desconforto, estresse, perda de confiança
   Ciclo de adição de erros regressão
    copyleft by AgilCoop        9
+ Problemas
   Difícil repetir os testes
   Demorado
   Cansativo
   Executado poucas vezes
   Poucos casos
   Casos simples
   Muito tempo gasto com depuração
   Erros encontrados tardiamente:
     −   Pressão, desconforto, estresse, perda de confiança
   Ciclo de adição de erros regressão
    copyleft by AgilCoop        10
Solução


   Métodos Ágeis
    “Inspecionar para previnir defeitos é bom; Inspecionar
    para encontrar defeitos é desperdício”
                                         -- Shigeo Shingo
   Testes Automatizados


    copyleft by AgilCoop      11
Exemplo de Teste Automatizado

                       Jogo de cartas Buraco




          Usuário só pode criar jogos válidos




copyleft by AgilCoop           12
Benefícios
   TODOS os testes podem ser executados a qualquer
    momento -> executado mais vezes

   Ajuda a encontrar erros mais cedo

   Aumenta a velocidade do desenvolvimento

   Melhora a qualidade do código, diminuindo o número
    de erros

    Diminui o tempo gasto com depuração e correção
    Aumenta tempo gasto com a validação do software

    copyleft by AgilCoop       13
+ Benefícios
   Segurança para mudanças no código:
     − Adição de novas funcionalidades
     − Correção
     − Refatoração

   Segurança para mudanças externas:
     − Infra-estrutura
     − Configurações de arcabouços

   Aumenta vida útil do software


    copyleft by AgilCoop        14
Roteiro

1) Motivação
2) Importância dos Testes Automatizados
3) Alguns Conceitos de Testes Automatizados
4) Alguns Tipos de Testes
5) Dicas para Escrever Bons Testes
6) Considerações Finais




 copyleft by AgilCoop      15
Testes Codificados
   Códigos dos testes merecem a mesma atenção
    dos códigos do sistema (?!)

   Precisam de manutenção

   Testes podem conter erros

   O código precisa ser simples

   Deve ser 'legível'             Documentação

    copyleft by AgilCoop      16
Set Up e Tear Down
   Os testes devem ser independentes:
     −   Uns dos outros
              Obs: padrão Chained Tests
     −   Do número de vezes que é executado
     −   De fatores externos

   Set Up: Prepara o ambiente para a execução
    do teste

   Tear Down: Limpa / Remove o ambiente

    copyleft by AgilCoop          17
Conceitos Básicos
   Caixa-preta (Funcional)



   Caixa-branca (Estrutural)



   Caixa-cinza



    copyleft by AgilCoop      18
Roteiro

1) Motivação
2) Importância dos Testes Automatizados
3) Alguns Conceitos de Testes Automatizados
4) Alguns Tipos de Testes
5) Dicas para Escrever Bons Testes
6) Considerações Finais




 copyleft by AgilCoop      19
Alguns Tipos de Testes

                          Unidade
                          Integração
                          Interface de Usuário
                          Aceitação
                          Mutação
                          Desempenho
                          Estresse
                          Segurança

copyleft by AgilCoop                20
Testes de Unidade
   Unidade: módulo/classe ou função/método

   Teste básico e muito importante
     −   Encontra muitos erros

   Não deve se preocupar com as
    responsabilidades de outras unidades

   Caixa-branca
     −   Focando na funcionalidade

    copyleft by AgilCoop      21
Padrões de Testes de Unidade
   Data-Driven Tests
   Generated Value
   Testcase Class
   Testcase Class per Class
   Testcase Class per Feature
   Unfinished Test Assertion
   ...



    copyleft by AgilCoop   22
Teste de Integração

   Testa a integração entre unidades ou
    componentes

   Duas unidades podem funcionar perfeitamente
    individualmente, mas podem haver falhas
    quando elas se comunicam




    copyleft by AgilCoop     23
Testes de Interface de Usuário
            (GUI, WUI...)
   Simula eventos do usuário e verifica o estado
    da interface
                      (FEST e FITNESSE)

   Módulos distintos e isolados podem alterar o
    estado da interface
     −   Estado pode ficar inconsistente
     −   Sujeira na tela
   Integração ou Aceitação

    copyleft by AgilCoop        24
Testes de Aceitação
   Testa as funcionalidades do sistema a partir do
    ponto de vista do cliente

   Caixa-preta
   Data-Driven Test
   Teste de alto nível
   “Prova” para o cliente de que o software
    funciona
   O cliente pode especificar os testes e os
    desenvolvedores os implementam
    copyleft by AgilCoop     25
Testes de Mutação
                      Testes dos Testes
   “Testes podem mostrar a presença de erros,
    não a sua ausência”
                                         -- Dijkstra
   Infinitas possibilidades de erros?
   Hipótese: Programador competente + Efeito de
    acoplamento
   Mutante: Sistema sob teste com pequenas
    alterações
   Verificar o resultado dos testes e fazer uma
    análise dos mutantes que os testes não
    identificaram
    copyleft by AgilCoop      26
Testes de Desempenho
   Otimizar somente quando necessário

   Código claro traz mais benefícios do que
    milésimos de segundo de otimização

   Começar pelos gargalos da aplicação

   Utilizar Profilers para detectar os gargalos
     −   Arcabouços mostram o tempo de duração dos
         testes


    copyleft by AgilCoop   27
Testes de Estresse
   Testar com grandes quantidades de dados
    gerados automaticamente
            (JMeter)
   Simulação de muitos usuários simultâneos
   Erros comuns:
     −   Overflow
     −   Falta de memória
   Alguns benefícios:
     −   Encontrar vazamento de memória
     −   Avaliar a capacidade de um ambiente

    copyleft by AgilCoop     28
Testes de Segurança
   Útil principalmente para aplicações Web
     −   Aplicações expostas a usuários mal-intencionados
   Testar valores inesperados:
     −   Null
     −   Grande quantidade de dados
     −   Tipos de dados não esperados
         ex: string em um campo que espera um inteiro
   Testes de estresse para lidar com ataques de
    negação de serviço (DoS)


    copyleft by AgilCoop     29
Roteiro

1) Motivação
2) Importância dos Testes Automatizados
3) Alguns Conceitos de Testes Automatizados
4) Alguns Tipos de Testes
5) Dicas para Escrever Bons Testes
6) Considerações Finais




 copyleft by AgilCoop      30
Maus cheiros
   Código dos Testes:
     −   Testes Obscuros
     −   Código Complexo: condições
     −   Difícil de testar
     −   Replicação de código de testes
     −   Lógica de testes em produção

   Cheiros de comportamento:
     −   Testes frágeis
     −   Intervenções manuais
     −   Testes lentos
    copyleft by AgilCoop        31
Dublês
   Módulos com dependências:
     −   não testadas
     −   lentas
     −   complexas
   => Crie um dublê (Test Double)




    copyleft by AgilCoop     32
Dicas Gerais

• Teste casos de sucesso
• Teste casos de erro:
  – Tratamento do erro
  – Exceção esperada




  copyleft by AgilCoop        33
+ Dicas gerais
   Particionamento de domínios

   Valores Limites:
     −   Números: 0, -1, 1, muito pequenos, muito grandes
     −   Strings: nula, vazia, pequenas, grandes
     −   Coleções: nula, vazia, cheia

   Testes aleatórios



    copyleft by AgilCoop         34
Dicas p/ POO - Testando Métodos
   Protegidos: Organize os códigos dos testes
    seguindo a mesma hierarquia de pacotes do
    código do sistema (boa prática)



   Privados (Um alerta para o design): Utilize
    reflexão ou arcabouços próprios para isso

   Triviais (ex: get/set): Podem não ser testados


    copyleft by AgilCoop   35
+ Dicas p/ POO - Testando Classes
   Internas: Testar a classe que usa é suficiente

   Abstratas: Instanciar uma subclasse e chamar
    os métodos da classe mãe

   Classes simples de armazenamento de dados
    não precisam ser testadas




    copyleft by AgilCoop   36
Testes com Banco de Dados
   DAOs, ORM, Queries, Stored Procedures,
    Triggers
   Set Up e Tear Down são importantes
   BDs de desenvolvimento/teste
     −   Sujeira no BD:
            Transaction Rollback Teardown
            Table Truncation Teardown


     −   Concorrência: Database Sandbox
   BDs em memória


    copyleft by AgilCoop       37
Sanity Tests
   Testes pouco precisos para módulos
    específicos (para erros “gigantes”)

   Exemplo 1:
     −   4x4=?
     −   Sabemos que 3 x 3 = 9 e 5 x 5 = 25
     −   Verifique que: 9 < 4 x 4 < 25
   Exemplo 2:
     −   3 x 153 = ? // (459)
     −   Verifique que (4 + 5 + 9) mod 3 = 0

    copyleft by AgilCoop        38
Smoke Tests

   Testes superficiais e abrangentes

   Realizados após a instalação do software

   Exemplo 1:
     −   Acesse uma página Web e verifique que não
         aparece o número 404




    copyleft by AgilCoop        39
Roteiro

1) Motivação
2) Importância dos Testes Automatizados
3) Alguns Conceitos de Testes Automatizados
4) Alguns Tipos de Testes
5) Dicas para Escrever Bons Testes
6) Considerações Finais




 copyleft by AgilCoop      40
Quando Escrever Testes
   Antes de escrever o código (Test First)
   Durante a implementação
   Antes de uma refatoração
   Quando um erro for encontrado: Escreva um
    teste que simule o erro e depois corrija-o
   Quando um teste de aceitação falha, pode ser
    um sinal que testes de unidade estão faltando
   Quando um usuário ou cliente encontra um
    erro, é um sinal que estão faltando testes de
    unidade e de aceitação

    copyleft by AgilCoop   41
Quando Executar os Testes
   A execução deve ser ágil
   Sempre que uma nova porção de código é
    criada
   À noite ou em uma máquina dedicada
   Assim que alterações são detectadas no
    repositório

   Lembre-se: É melhor escrever e executar
    testes incompletos do que não executar testes
    completos


    copyleft by AgilCoop   42
Para Finalizar...
   Testes automatizados é uma prática
    fundamental para garantir a qualidade do
    código

   “Qualquer funcionalidade que não possui testes
    automatizados simplesmente não existe”
                                     -- Kent Beck

   Capriche no código dos testes



    copyleft by AgilCoop           43
Algumas Ferramentas
   Testes de Unidade:
      −   Família XUnit:
             CxxTest: http://cxxtest.sourceforge.net
             JUnit: http://www.junit.org


      −   TestNG: http://testng.org
      −   rSpec:
      −   jBehave: http://jbehave.org




    copyleft by AgilCoop          44
+ Algumas Ferramentas
   Mock Objects:
      −   SevenMock (Java):
          http://seven-mock.sourceforge.net
      −   EasyMock (Java): http://www.easymock.org/
      −   JMock (Java): http://www.jmock.org
      −   Rhino.Mocks (.NET):
          http://www.ayende.com/projects/rhino-mocks.aspx
      −   SMock (Smalltalk):
          http://www.macta.f2s.com/Thoughts/smock.html
      −   Mockpp (C++): http://mockpp.sourceforge.net


    copyleft by AgilCoop     45
+ Algumas Ferramentas
   Testes de Interface Gráfica:
      −   Fest: http://fest.easytesting.org/swing
      −   Jemmy: http://jemmy.netbeans.org
      −   Marathon: http://www.marathontesting.com
   Testes de Interface Web:
      −   Selenium: http://www.openqa.org/selenium
      −   Watir: http://wtr.rubyforge.org
   Testes de Aceitação:
      −   Fit: http://fit.c2.com
      −   rSpec: https://rubyforge.org/projects/rspec

    copyleft by AgilCoop       46
+ Algumas Ferramentas
   Testes de Mutação:
      −   Jester: http://jester.sourceforge.net
      −   Heckle: https://rubyforge.org/projects/seattlerb
   Testes de Desempenho / Estresse:
      −   JMeter: http://jakarta.apache.org/jmeter
   Outros:
      −   JPDFUnit: http://jpdfunit.sourceforge.net




    copyleft by AgilCoop       47
Alguns links
   http://www.testing.com
   http://www.opensourcetesting.org
   http://xunitpatterns.com
   http://www.mockobjects.com
   http://java-source.net/open-source/testing-tools
   http://www.junit.org
   http://www.agilcoop.org.br



    copyleft by AgilCoop        48
Alguns livros
   Gerard Meszaros, “xUnit Test Patterns, Refactoring Test Code”,
    Addison-Wesley, 2007
   Robert V. Binder, “Testing Object-Oriented Systems”, Addison-
    Wesley Professional, 1999
   L. Crispin, T. House, “Testing Extreme Programming”, Addison-
    Wesley, 2005
   R. Mugridge, W. Cunningham, “Fit for Developing Software”, Prentice
    Hall, 2006
   M. Delamaro, J. Maldonado, M. Jino, “Introdução ao Teste de
    Software”, Campus, 2007




    copyleft by AgilCoop         49
ok ...
   Perguntas?
   Comentários?
   Críticas?
   Sugestões?



                           agilcoop@agilcoop.org.br



    copyleft by AgilCoop             50

Mais conteúdo relacionado

Mais procurados

Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Softwaremarthahuback
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 
DevCamp - O papel de um testador em uma equipe ágil
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 ágilElias Nogueira
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
 
Planejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilPlanejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilAriane Izac
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de softwareLeonardo Melo Santos
 
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produçãoBug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produçãoJoyce Bastos
 
Modelo de Prototipação
Modelo de PrototipaçãoModelo de Prototipação
Modelo de PrototipaçãoJuliano Pires
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de SoftwareCapgemini
 
Implantação de um Processo de Teste de Software - Randerson Melville
Implantação de um Processo de Teste de Software - Randerson Melville Implantação de um Processo de Teste de Software - Randerson Melville
Implantação de um Processo de Teste de Software - Randerson Melville minastestingconference
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de ConfiguraçãoWagner Zaparoli
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumSandy Maciel
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de ServiçoRafael Lima
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 
Automated Testing vs Manual Testing
Automated Testing vs Manual TestingAutomated Testing vs Manual Testing
Automated Testing vs Manual Testingdidev
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de softwareAlex Camargo
 

Mais procurados (20)

Processo de implantação de testes automatizados
Processo de implantação de testes automatizadosProcesso de implantação de testes automatizados
Processo de implantação de testes automatizados
 
Tecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De SoftwareTecnicas Para Planejamento E Execucao De Testes De Software
Tecnicas Para Planejamento E Execucao De Testes De Software
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
DevCamp - O papel de um testador em uma equipe ágil
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
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
Planejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágilPlanejamento de testes em um mundo ágil
Planejamento de testes em um mundo ágil
 
Verificação e validação de software
Verificação e validação de softwareVerificação e validação de software
Verificação e validação de software
 
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produçãoBug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
Bug metrics - o uso das métricas para apoiar a priorização dos Bugs de produção
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Modelo de Prototipação
Modelo de PrototipaçãoModelo de Prototipação
Modelo de Prototipação
 
Testes de Software
Testes de SoftwareTestes de Software
Testes de Software
 
Implantação de um Processo de Teste de Software - Randerson Melville
Implantação de um Processo de Teste de Software - Randerson Melville Implantação de um Processo de Teste de Software - Randerson Melville
Implantação de um Processo de Teste de Software - Randerson Melville
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
Introdução a testes de software utilizando selenium
Introdução a testes de software utilizando seleniumIntrodução a testes de software utilizando selenium
Introdução a testes de software utilizando selenium
 
BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de Serviço
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
Automated Testing vs Manual Testing
Automated Testing vs Manual TestingAutomated Testing vs Manual Testing
Automated Testing vs Manual Testing
 
Teste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e AplicandoTeste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e Aplicando
 
Elaboração de Projetos Inovadores
Elaboração de Projetos InovadoresElaboração de Projetos Inovadores
Elaboração de Projetos Inovadores
 
Qualidade de Software: Teste de software
Qualidade de Software: Teste de softwareQualidade de Software: Teste de software
Qualidade de Software: Teste de software
 

Semelhante a Introdução a Testes Automatizados

Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Daniel Wildt
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesJefferson Moreira
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesPaulo César M Jeveaux
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMAdriano Bertucci
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)elliando dias
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
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
 
Desenvolvendo aplicações orientadas a testes de aceitação: um caso prático
Desenvolvendo aplicações orientadas a testes de aceitação: um caso práticoDesenvolvendo aplicações orientadas a testes de aceitação: um caso prático
Desenvolvendo aplicações orientadas a testes de aceitação: um caso práticoelliando dias
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
GOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdfGOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdfRodolphoCesar2
 
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninFundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninDevInPF
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...Isaac de Souza
 

Semelhante a Introdução a Testes Automatizados (20)

Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
Just Java 2006 - Qualidade em Desenvolvimento Java para todos os gostos - Dan...
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas Doentes
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 
TesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdfTesteDeSoftware_WorkshopSINFO2014.pdf
TesteDeSoftware_WorkshopSINFO2014.pdf
 
Qualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALMQualidade de software com Visual Studio ALM
Qualidade de software com Visual Studio ALM
 
Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
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
 
Desenvolvendo aplicações orientadas a testes de aceitação: um caso prático
Desenvolvendo aplicações orientadas a testes de aceitação: um caso práticoDesenvolvendo aplicações orientadas a testes de aceitação: um caso prático
Desenvolvendo aplicações orientadas a testes de aceitação: um caso prático
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Testing sucks
Testing sucksTesting sucks
Testing sucks
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
GOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdfGOTEST-Aula5-Automacao-Parte2.pdf
GOTEST-Aula5-Automacao-Parte2.pdf
 
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline ZaninFundamentos de Teste de Software - Dev in PF. por Aline Zanin
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 

Mais de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 

Mais de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 

Último

Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPaulo Pagliusi, PhD, CISM
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAMarcio Venturelli
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfRodolpho Concurde
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASMarcio Venturelli
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiPaulo Pagliusi, PhD, CISM
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORDRONDINELLYRAMOS1
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)Alessandro Almeida
 
O futuro e o impacto da tecnologia nas salas de aulas
O futuro e o impacto da tecnologia  nas salas de aulasO futuro e o impacto da tecnologia  nas salas de aulas
O futuro e o impacto da tecnologia nas salas de aulasAurioOliveira6
 

Último (9)

Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
O futuro e o impacto da tecnologia nas salas de aulas
O futuro e o impacto da tecnologia  nas salas de aulasO futuro e o impacto da tecnologia  nas salas de aulas
O futuro e o impacto da tecnologia nas salas de aulas
 

Introdução a Testes Automatizados

  • 1. Introdução a Testes Automatizados Cursos de Verão 2008 – IME/USP www.agilcoop.org.br Paulo Cheque
  • 2. Testes Automatizados  Teste de Software: − Executar o programa a ser testado com alguma entrada e conferir visualmente os resultados obtidos  Teste Automatizado: − Programa ou script executável que roda o programa a ser testado e faz verificações automáticas em cima dos efeitos colaterais obtidos.  Testar NÃO é depurar − Testar é verificar a presença de erros − Depurar é seguir o fluxo para identificar um erro conhecido copyleft by AgilCoop 2
  • 3. Testes Automatizados e os Princípios Ágeis  Software funcionando ...  Adaptação a mudanças ...  Colaboração com o cliente ...  Indivíduos e Interações ... copyleft by AgilCoop 3
  • 4. Testes Automatizados e XP  Entre as práticas mais importantes − A mais importante em muitos contextos  Muitas das práticas dependem de testes automatizados: − Refatoração − Integração Contínua − Propriedade Coletiva do Código − Ainda: Design Simples, Releases Pequenos copyleft by AgilCoop 4
  • 5. Roteiro 1) Motivação 2) Importância dos Testes Automatizados 3) Alguns Conceitos de Testes Automatizados 4) Alguns Tipos de Testes 5) Dicas para Escrever Bons Testes 6) Considerações Finais copyleft by AgilCoop 5
  • 6. Exemplo de Teste Manual Jogo de cartas Buraco Usuário só pode criar jogos válidos copyleft by AgilCoop 6
  • 7. Problemas  Difícil repetir os testes  Demorado  Cansativo  Executado poucas vezes  Poucos casos  Casos simples  Muito tempo gasto com depuração  Erros encontrados tardiamente: − Pressão, desconforto, estresse, perda de confiança  Ciclo de adição de erros regressão copyleft by AgilCoop 7
  • 8. Modelos “tradicionais” Cascata, espiral... Requisitos Análise Arquitetura e Design Implementação Validação Produção copyleft by AgilCoop 8
  • 9. + Problemas  Difícil repetir os testes  Demorado  Cansativo  Executado poucas vezes  Poucos casos  Casos simples  Muito tempo gasto com depuração  Erros encontrados tardiamente: − Pressão, desconforto, estresse, perda de confiança  Ciclo de adição de erros regressão copyleft by AgilCoop 9
  • 10. + Problemas  Difícil repetir os testes  Demorado  Cansativo  Executado poucas vezes  Poucos casos  Casos simples  Muito tempo gasto com depuração  Erros encontrados tardiamente: − Pressão, desconforto, estresse, perda de confiança  Ciclo de adição de erros regressão copyleft by AgilCoop 10
  • 11. Solução  Métodos Ágeis “Inspecionar para previnir defeitos é bom; Inspecionar para encontrar defeitos é desperdício” -- Shigeo Shingo  Testes Automatizados copyleft by AgilCoop 11
  • 12. Exemplo de Teste Automatizado Jogo de cartas Buraco Usuário só pode criar jogos válidos copyleft by AgilCoop 12
  • 13. Benefícios  TODOS os testes podem ser executados a qualquer momento -> executado mais vezes  Ajuda a encontrar erros mais cedo  Aumenta a velocidade do desenvolvimento  Melhora a qualidade do código, diminuindo o número de erros Diminui o tempo gasto com depuração e correção Aumenta tempo gasto com a validação do software copyleft by AgilCoop 13
  • 14. + Benefícios  Segurança para mudanças no código: − Adição de novas funcionalidades − Correção − Refatoração  Segurança para mudanças externas: − Infra-estrutura − Configurações de arcabouços  Aumenta vida útil do software copyleft by AgilCoop 14
  • 15. Roteiro 1) Motivação 2) Importância dos Testes Automatizados 3) Alguns Conceitos de Testes Automatizados 4) Alguns Tipos de Testes 5) Dicas para Escrever Bons Testes 6) Considerações Finais copyleft by AgilCoop 15
  • 16. Testes Codificados  Códigos dos testes merecem a mesma atenção dos códigos do sistema (?!)  Precisam de manutenção  Testes podem conter erros  O código precisa ser simples  Deve ser 'legível' Documentação copyleft by AgilCoop 16
  • 17. Set Up e Tear Down  Os testes devem ser independentes: − Uns dos outros  Obs: padrão Chained Tests − Do número de vezes que é executado − De fatores externos  Set Up: Prepara o ambiente para a execução do teste  Tear Down: Limpa / Remove o ambiente copyleft by AgilCoop 17
  • 18. Conceitos Básicos  Caixa-preta (Funcional)  Caixa-branca (Estrutural)  Caixa-cinza copyleft by AgilCoop 18
  • 19. Roteiro 1) Motivação 2) Importância dos Testes Automatizados 3) Alguns Conceitos de Testes Automatizados 4) Alguns Tipos de Testes 5) Dicas para Escrever Bons Testes 6) Considerações Finais copyleft by AgilCoop 19
  • 20. Alguns Tipos de Testes  Unidade  Integração  Interface de Usuário  Aceitação  Mutação  Desempenho  Estresse  Segurança copyleft by AgilCoop 20
  • 21. Testes de Unidade  Unidade: módulo/classe ou função/método  Teste básico e muito importante − Encontra muitos erros  Não deve se preocupar com as responsabilidades de outras unidades  Caixa-branca − Focando na funcionalidade copyleft by AgilCoop 21
  • 22. Padrões de Testes de Unidade  Data-Driven Tests  Generated Value  Testcase Class  Testcase Class per Class  Testcase Class per Feature  Unfinished Test Assertion  ... copyleft by AgilCoop 22
  • 23. Teste de Integração  Testa a integração entre unidades ou componentes  Duas unidades podem funcionar perfeitamente individualmente, mas podem haver falhas quando elas se comunicam copyleft by AgilCoop 23
  • 24. Testes de Interface de Usuário (GUI, WUI...)  Simula eventos do usuário e verifica o estado da interface (FEST e FITNESSE)  Módulos distintos e isolados podem alterar o estado da interface − Estado pode ficar inconsistente − Sujeira na tela  Integração ou Aceitação copyleft by AgilCoop 24
  • 25. Testes de Aceitação  Testa as funcionalidades do sistema a partir do ponto de vista do cliente  Caixa-preta  Data-Driven Test  Teste de alto nível  “Prova” para o cliente de que o software funciona  O cliente pode especificar os testes e os desenvolvedores os implementam copyleft by AgilCoop 25
  • 26. Testes de Mutação Testes dos Testes  “Testes podem mostrar a presença de erros, não a sua ausência” -- Dijkstra  Infinitas possibilidades de erros?  Hipótese: Programador competente + Efeito de acoplamento  Mutante: Sistema sob teste com pequenas alterações  Verificar o resultado dos testes e fazer uma análise dos mutantes que os testes não identificaram copyleft by AgilCoop 26
  • 27. Testes de Desempenho  Otimizar somente quando necessário  Código claro traz mais benefícios do que milésimos de segundo de otimização  Começar pelos gargalos da aplicação  Utilizar Profilers para detectar os gargalos − Arcabouços mostram o tempo de duração dos testes copyleft by AgilCoop 27
  • 28. Testes de Estresse  Testar com grandes quantidades de dados gerados automaticamente (JMeter)  Simulação de muitos usuários simultâneos  Erros comuns: − Overflow − Falta de memória  Alguns benefícios: − Encontrar vazamento de memória − Avaliar a capacidade de um ambiente copyleft by AgilCoop 28
  • 29. Testes de Segurança  Útil principalmente para aplicações Web − Aplicações expostas a usuários mal-intencionados  Testar valores inesperados: − Null − Grande quantidade de dados − Tipos de dados não esperados ex: string em um campo que espera um inteiro  Testes de estresse para lidar com ataques de negação de serviço (DoS) copyleft by AgilCoop 29
  • 30. Roteiro 1) Motivação 2) Importância dos Testes Automatizados 3) Alguns Conceitos de Testes Automatizados 4) Alguns Tipos de Testes 5) Dicas para Escrever Bons Testes 6) Considerações Finais copyleft by AgilCoop 30
  • 31. Maus cheiros  Código dos Testes: − Testes Obscuros − Código Complexo: condições − Difícil de testar − Replicação de código de testes − Lógica de testes em produção  Cheiros de comportamento: − Testes frágeis − Intervenções manuais − Testes lentos copyleft by AgilCoop 31
  • 32. Dublês  Módulos com dependências: − não testadas − lentas − complexas  => Crie um dublê (Test Double) copyleft by AgilCoop 32
  • 33. Dicas Gerais • Teste casos de sucesso • Teste casos de erro: – Tratamento do erro – Exceção esperada copyleft by AgilCoop 33
  • 34. + Dicas gerais  Particionamento de domínios  Valores Limites: − Números: 0, -1, 1, muito pequenos, muito grandes − Strings: nula, vazia, pequenas, grandes − Coleções: nula, vazia, cheia  Testes aleatórios copyleft by AgilCoop 34
  • 35. Dicas p/ POO - Testando Métodos  Protegidos: Organize os códigos dos testes seguindo a mesma hierarquia de pacotes do código do sistema (boa prática)  Privados (Um alerta para o design): Utilize reflexão ou arcabouços próprios para isso  Triviais (ex: get/set): Podem não ser testados copyleft by AgilCoop 35
  • 36. + Dicas p/ POO - Testando Classes  Internas: Testar a classe que usa é suficiente  Abstratas: Instanciar uma subclasse e chamar os métodos da classe mãe  Classes simples de armazenamento de dados não precisam ser testadas copyleft by AgilCoop 36
  • 37. Testes com Banco de Dados  DAOs, ORM, Queries, Stored Procedures, Triggers  Set Up e Tear Down são importantes  BDs de desenvolvimento/teste − Sujeira no BD:  Transaction Rollback Teardown  Table Truncation Teardown − Concorrência: Database Sandbox  BDs em memória copyleft by AgilCoop 37
  • 38. Sanity Tests  Testes pouco precisos para módulos específicos (para erros “gigantes”)  Exemplo 1: − 4x4=? − Sabemos que 3 x 3 = 9 e 5 x 5 = 25 − Verifique que: 9 < 4 x 4 < 25  Exemplo 2: − 3 x 153 = ? // (459) − Verifique que (4 + 5 + 9) mod 3 = 0 copyleft by AgilCoop 38
  • 39. Smoke Tests  Testes superficiais e abrangentes  Realizados após a instalação do software  Exemplo 1: − Acesse uma página Web e verifique que não aparece o número 404 copyleft by AgilCoop 39
  • 40. Roteiro 1) Motivação 2) Importância dos Testes Automatizados 3) Alguns Conceitos de Testes Automatizados 4) Alguns Tipos de Testes 5) Dicas para Escrever Bons Testes 6) Considerações Finais copyleft by AgilCoop 40
  • 41. Quando Escrever Testes  Antes de escrever o código (Test First)  Durante a implementação  Antes de uma refatoração  Quando um erro for encontrado: Escreva um teste que simule o erro e depois corrija-o  Quando um teste de aceitação falha, pode ser um sinal que testes de unidade estão faltando  Quando um usuário ou cliente encontra um erro, é um sinal que estão faltando testes de unidade e de aceitação copyleft by AgilCoop 41
  • 42. Quando Executar os Testes  A execução deve ser ágil  Sempre que uma nova porção de código é criada  À noite ou em uma máquina dedicada  Assim que alterações são detectadas no repositório  Lembre-se: É melhor escrever e executar testes incompletos do que não executar testes completos copyleft by AgilCoop 42
  • 43. Para Finalizar...  Testes automatizados é uma prática fundamental para garantir a qualidade do código  “Qualquer funcionalidade que não possui testes automatizados simplesmente não existe” -- Kent Beck  Capriche no código dos testes copyleft by AgilCoop 43
  • 44. Algumas Ferramentas  Testes de Unidade: − Família XUnit:  CxxTest: http://cxxtest.sourceforge.net  JUnit: http://www.junit.org − TestNG: http://testng.org − rSpec: − jBehave: http://jbehave.org copyleft by AgilCoop 44
  • 45. + Algumas Ferramentas  Mock Objects: − SevenMock (Java): http://seven-mock.sourceforge.net − EasyMock (Java): http://www.easymock.org/ − JMock (Java): http://www.jmock.org − Rhino.Mocks (.NET): http://www.ayende.com/projects/rhino-mocks.aspx − SMock (Smalltalk): http://www.macta.f2s.com/Thoughts/smock.html − Mockpp (C++): http://mockpp.sourceforge.net copyleft by AgilCoop 45
  • 46. + Algumas Ferramentas  Testes de Interface Gráfica: − Fest: http://fest.easytesting.org/swing − Jemmy: http://jemmy.netbeans.org − Marathon: http://www.marathontesting.com  Testes de Interface Web: − Selenium: http://www.openqa.org/selenium − Watir: http://wtr.rubyforge.org  Testes de Aceitação: − Fit: http://fit.c2.com − rSpec: https://rubyforge.org/projects/rspec copyleft by AgilCoop 46
  • 47. + Algumas Ferramentas  Testes de Mutação: − Jester: http://jester.sourceforge.net − Heckle: https://rubyforge.org/projects/seattlerb  Testes de Desempenho / Estresse: − JMeter: http://jakarta.apache.org/jmeter  Outros: − JPDFUnit: http://jpdfunit.sourceforge.net copyleft by AgilCoop 47
  • 48. Alguns links  http://www.testing.com  http://www.opensourcetesting.org  http://xunitpatterns.com  http://www.mockobjects.com  http://java-source.net/open-source/testing-tools  http://www.junit.org  http://www.agilcoop.org.br copyleft by AgilCoop 48
  • 49. Alguns livros  Gerard Meszaros, “xUnit Test Patterns, Refactoring Test Code”, Addison-Wesley, 2007  Robert V. Binder, “Testing Object-Oriented Systems”, Addison- Wesley Professional, 1999  L. Crispin, T. House, “Testing Extreme Programming”, Addison- Wesley, 2005  R. Mugridge, W. Cunningham, “Fit for Developing Software”, Prentice Hall, 2006  M. Delamaro, J. Maldonado, M. Jino, “Introdução ao Teste de Software”, Campus, 2007 copyleft by AgilCoop 49
  • 50. ok ...  Perguntas?  Comentários?  Críticas?  Sugestões? agilcoop@agilcoop.org.br copyleft by AgilCoop 50