SlideShare una empresa de Scribd logo
1 de 50
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
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
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Camilo Ribeiro
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Elmano Cavalcanti
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Á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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentElias Nogueira
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias Nogueira
 
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
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes ExploratóriosAlan Carlos
 
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
 
4 Major Advantages of API Testing
4 Major Advantages of API Testing4 Major Advantages of API Testing
4 Major Advantages of API TestingQASource
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven DevelopmentJohn Blum
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de TesteElias Nogueira
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaElias Nogueira
 

La actualidad más candente (20)

Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
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
 
Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade Teste de Software Introdução à Qualidade
Teste de Software Introdução à Qualidade
 
Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)Teste de software - aula 01 (motivação)
Teste de software - aula 01 (motivação)
 
O que é Teste de Software?
O que é Teste de Software?O que é Teste de Software?
O que é Teste de Software?
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Á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
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Teste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e AplicandoTeste de software - Conhecendo e Aplicando
Teste de software - Conhecendo e Aplicando
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
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
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
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
 
4 Major Advantages of API Testing
4 Major Advantages of API Testing4 Major Advantages of API Testing
4 Major Advantages of API Testing
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 
Arquitetura de Automação de Teste
Arquitetura de Automação de TesteArquitetura de Automação de Teste
Arquitetura de Automação de Teste
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
 

Similar a Introdução 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
 
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
 

Similar a Introdução 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...
 
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 ...
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 
Introdução ao Teste de Software
Introdução ao Teste de SoftwareIntrodução ao Teste de Software
Introdução ao Teste de Software
 

Más 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
 

Más 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
 

Introdução 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