Introdução a Testes Automatizados

Documentos relacionados
Desenvolvimento de Software de Qualidade através de Testes Automatizados

Padrões de Testes Automatizados. Exame de Defesa de Mestrado Paulo Cheque Bernardo Orientador: Fabio Kon DCC IME/USP 4 de julho de 2011

Estratégias de Escrita de Testes Automatizados

Testes de Unidade. Curso de Verão IME/USP Hugo Corbucci

Refatoração: Melhorando código existente

Introdução aos Testes Automatizados

Engenharia de Software

Introdução a Métodos Ágeis. Curso de Verão IME/USP

Teste de Software. Estratégias de Teste. Rosemary Silveira Filgueiras Melo

Introdução a Teste de Software

TESTES DE SOFTWARE 1. Fundamentos sobre testes de software

Teste de Software. Roberta Coelho

JUnit. Facilitando o desenvolvimento e execução de testes unitários em código java. Peterson Rodrigues

Desenvolvimento de Software. Testes de Software. Tópicos da Aula. Onde estamos... Verificação x Validação. Testes de Software

Introdução aos Testes de Software

Dificuldades na implantação de Métodos Ágeis

Problemas e Práticas Recomendadas no Desenvolvimento de Software

Engenharia de Software

ENGENHARIA DE SOFTWARE

Organização para Realização de Teste de Software

especificação por meio de exemplos não é garantia de corretude, mas a experiência mostra que tende a ser melhor do que o estado da prática hoje

Modulo I Introdução ao XP

Engenharia de Software

Verificação e Validação (V & V)

Desenvolvimento orientado por testes, padrões de testes e JWebUnit

Engenharia de Software

Falta Erro Falha. Motivação. Teste de Software. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro. Falha, Falta e Erro 6/6/11

Programação Extrema na Prática

TESTES DE SOFTWARE Unidade 1 Importância do Teste de Software. Luiz Leão

BibIme - Um Software Gerenciador de Bibliotecas Produzido de Forma Cooperativa

DESCOBERTO. (Glen Myers)

Extreme Programming: Valores e Práticas

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Desenvolvimento ágil de software

Teste de Software. Competência: Entender as técnicas e estratégias de testes de Software

JUnit: framework de testes unitários. Fred Lopes

Estágio II. Aula 02 Conceitos de Teste de Software. Prof. MSc. Fred Viana

Teste como Serviço (TaaS) na Computação em Nuvem

ENGENHARIA DE SOFTWARE. Aula 12 Testes de software

Programação Orientada a Objetos

Engenharia de Software II

TS03. Teste de Software ESTÁGIOS DO TESTE DE SOFTWARE. COTI Informática Escola de Nerds

TESTES DE SOFTWARE. Profa. Maria Auxiliadora

Teste de Software. Prof. Camila. Pedro de Assis Sobreira Jr.

Engenharia de Software Simulado para a 1ª Avaliação Bimestral Professor: Danilo Giacobo - RESPOSTAS. Nome:

Desenvolvimento Ágil de Software. Prof. Edjandir Corrêa Costa

Teste de Software. Karen Frigo Busolin Novembro / 2010

BEHAVIOR DRIVEN DEVELOPMENT BRUNO ROLIM MANSUR

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Práticas Ágeis de Teste

Teste de software. Engenharia de software Profª karine sato da silva

Extreme Programming. Projeto de. Desenvolvimento. Software. Prof.: Ari Oliveira

Teste de Software. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1º semestre de 2015

Introdução à Programação extrema (XP)

Teste Unitários com NUnit. Anderson Martiniano da Rocha

Montagem, testes, depuração e documentação de circuitos digitais

Engenharia de Software

ENGENHARIA DE SOFTWARE

Processos de software

TESTES DE SOFTWARE Lista de Exercício 02. Luiz Leão

SSC 0721 Teste e Validação de Software

Métodos Ágeis e Programação Extrema (XP)

Transcrição:

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 Testes Automatizados -- Shigeo Shingo 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: 4 x 4 =? 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