Testes. Prof. Dr. Fabio Kon. Departamento de Ciência da Computação IME / USP. Lab. Prog. I e sua relação com métodos ágeis

Documentos relacionados
03/10/14. Testes. Testar Depurar. Técnicas básicas. Exemplo: Teste o código em seus limites. Simplificando

Testes com JUnit. Treinamento ALESP SPL. Danilo Toshiaki Sato.

Modulo II Técnicas para desenvolvimento de Software Ágil

JUnit: framework de testes unitários. Fred Lopes

Testes Automatizados. Cursos de Verão 2007 IME/USP Dairton Bassi & Paulo Cheque

Programação Orientada a Objetos

Modulo II Técnicas para desenvolvimento de Software Ágil

SUnit Referências. SUnit. Jefferson Serafim Ascaneo, Suzana de Siqueira Santos

Objetos Dublês. Mariana Bravo AgilCoop Cursos de Verão 2009

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

Introdução a Testes Automatizados

Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo

Tratamento de Exceções

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

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

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

Objetos Dublês. AgilCoop Cursos de Verão Mariana Bravo IME/USP

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

SSC 0721 Teste e Validação de Software

Análise e Projeto Orientados a Objetos

Palavras Reservadas da Linguagem Java

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

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

O JUnit permite a realização de testes de unidades, conhecidos como "caixa branca", facilitando assim a correção de métodos e objetos.

JUNIT 28/03/2011. Márcio Delamaro Harry Trinta

Análise e Projeto Orientados a Objetos

Construtores e Especificadores de Acesso

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

Laboratório de Programação II

Engenharia de Software

Linguagem Java - Introdução

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Testes Unitários com JUnit

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Padrões de Testes Automatizados

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

ENGENHARIA DE SOFTWARE. Aula 12 Testes de software

TRATAMENTO DE EXCEÇÕES

Tratamento de Exceções

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Estruturas de Controle em c#

Teste Automatizado POO. Prof. Marcio Delamaro

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

Exceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares

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

1. A principal razão de dividir o processo de teste em tarefas distintas é:

Introdução a Teste de Software

Instituto Superior de Engenharia de Lisboa

Teste Unitários com NUnit. Anderson Martiniano da Rocha

Linguagem de Programação II Implementação

Computação II Orientação a Objetos

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Orientação a Objetos e Java

5 Mini Casos. 5.1.Campos Numéricos Interface e Especificação

1 Exercícios com ponteiros

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Capítulo 7. Expressões e Sentenças de Atribuição

Programação Estruturada e Orientada a Objetos

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

J820. Mock objects. Testes de código com dependências. argonavis.com.br. Helder da Rocha

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Community. .com. Introdução ao T D

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

Desenvolvimento de Software de Qualidade através de Testes Automatizados

Teste de Software. Proj. Desenvolvimento de Software. Prof. Cleverton Hentz. 30 de agosto de Material Apresentado

1. Quando algo visível para os usuário finais é um desvio em relação ao especificado ou um comportamento não esperado, isso é chamado de:

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Programação Java. Tratamento de Exceções

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

3 Ferramenta Proposta 3.1. Objetivos

Classes e Objetos. Prof. Fernando V. Paulovich 9 de agosto de 2010

ENGENHARIA DE SOFTWARE

Um guia de defesa pessoal para programadores inteligentes. Gibeon Aquino

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

SPYDER. um ambiente de desenvolvimento integrado (IDE*) para Python. Prof. Carlos Hitoshi Morimoto DCC IME USP Março, 2016

Tratamento de Exceções. Java Avançado. Tratamento de Exceções. Conceito de Exceções. Exemplo

Variáveis primitivas e Controle de fluxo

INSTRUÇÕES DE REPETIÇÃO

Análise de Programação

Algoritmos e Programação

Aula 13 Tratamento de Exceções. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Leitura Segura de Strings

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

9/24/2014. Prof. André Backes

4. Constantes. Constantes pré-definidas

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 28 de setembro de 12

Tratamento de Exceções

Programação I Aula 17 Correção de programas Pedro Vasconcelos DCC/FCUP

No final deste curso, saberás criar programas através da linguagem de programação Java.

Transcrição:

Testes e sua relação com métodos ágeis Prof. Dr. Fabio Kon Departamento de Ciência da Computação IME / USP Lab. Prog. I - 2009 1

Testar Depurar Simplificando Depurar - o que se faz quando se sabe que o programa não funciona; Teste - tentativas sistemáticas de encontrar erros em programa que você acha que está funcionando. Testes podem mostrar a presença de erros, não a sua ausência (Dijkstra) Copyleft AgilCoop (Aldafabio) 2/63

Teste enquanto você escreve código Se possível escreva os testes antes mesmo de escrever o código uma das técnicas de XP quanto antes for encontrado o erro melhor!! Copyleft AgilCoop (Aldafabio) 3/63

Técnicas básicas Teste o código em seus limites; Teste de pré e pós condições; Uso de premissas (assert); Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 4/63

Teste o código em seus limites Para cada pequeno trecho de código (um laço, ou if por exemplo) verifique o seu bom funcionamento; Tente ume entrada vazia, um único item, um vetor cheio, etc. Copyleft AgilCoop (Aldafabio) 5/63

Exemplo: int i; char s[max]; for(i=0; s[i] = getchar()!= \n && i < MAX - 1; i++); s[--i]= \0 ; Primeiro erro fácil: // o = tem precedência menor do que o!= for(i=0; (s[i] = getchar())!= \n && i < MAX - 1; i++); Copyleft AgilCoop (Aldafabio) 6/63

Exemplo: int i; char s[max]; for(i=0; i < MAX - 1; i++) if ((s[i] = getchar()) == \n ) break; s[i]= \0 ; Testes: linha vazia ok; 1 caractere ok; 2 caracteres ok; MAX caracteres ok e se o primeiro caractere já é o de fim de arquivo? Copyleft AgilCoop (Aldafabio) 7/63

Exemplo: int i; char s[max]; for(i=0; i < MAX - 1; i++) if (s[i] = getchar()) == \n s[i]==eof) break; s[i]= \0 ; Testes: ok. Mas o que se deve fazer se a string s fica cheia antes do \n Depende, estes caracteres são necessários, ou não? Copyleft AgilCoop (Aldafabio) 8/63

Teste de pré- e pós-condições Verificar certas propriedades antes e depois de trechos de código double avg(double a[], int n){ int i; double sum = 0.0; } for(i = 0; i < n; i++) sum += a[i]; return sum / n; Copyleft AgilCoop (Aldafabio) 9/63

Teste de pré e pós condições Solução possível // mudar o return return n <= 0? 0.0 : sum / n; Não existe uma única resposta certa A única resposta claramente errada é ignorar o erro!! Ex: USS Yorktown. Copyleft AgilCoop (Aldafabio) 10/63

Uso de premissas Em C e C++ use <assert.h>, jdk 1.4 ex: assert (n>0); se a condição for violadada: Assertion failed: n>0, file avgtest.c, line 7. Ajuda a identificar culpados pelos erros Copyleft AgilCoop (Aldafabio) 11/63

Programação defensiva Tratar situações que não podem acontecer Exemplo: if (nota < 0 nota > 10) // não pode acontecer letra =? ; else if (nota > 9) letra = A ; else... Isso é bom para evitar coisas do tipo: mqz@nyquist:~/área de Trabalho$ rm AIM/ rm: imposível remover `AIM/': É um diretório mqz@nyquist:~/área de Trabalho$ rmdir AIM/ rmdir: falha ao remover `AIM/': Não é um diretório Copyleft AgilCoop (Aldafabio) 12/63

Utilizar códigos de erro Checar os códigos de erro de funções e métodos; você sabia que o scanf retorna o número de parâmetros lidos, ou EOF? Sempre verificar se ocorreram erros ao abrir, ler, escrever e principalmente fechar arquivos. Em Java sempre tratar as possíveis exceções Copyleft AgilCoop (Aldafabio) 13/63

Pequeno exercício: int fatorial(int n) { int fat = 1; } while (n--) { fat *= n; } return fat; como testar isso? Copyleft AgilCoop (Aldafabio) 14/63

Testes sistemáticos (1/4) Teste incrementalmente durante a construção do sistema após testar dois pacotes independentemente teste se eles funcionam juntos Teste primeiro partes simples tenha certeza que partes básicas funcionam antes de prosseguir testes simples encontram erros simples teste as funções/métodos individualmente Ex: teste de função que faz a busca binária em inteiros Copyleft AgilCoop (Aldafabio) 15/63

Testes Sistemáticos (2/4) Conheça as saídas esperadas conheça a resposta certa para programas mais complexos valide a saída com exemplos conhecidos compiladores - arquivos de teste; numéricos - exemplos conhecidos, características; gráficos - exemplos, não confie apenas nos seus olhos. Copyleft AgilCoop (Aldafabio) 16/63

Testes Sistemáticos (3/4) Verifique as propriedades invariantes alguns programas mantém propriedades da entrada número de linhas tamanho da entrada freqüência de caracteres Ex: a qualquer instante o número de elementos em uma estrutura de dados deve ser igual ao número de inserções menos o número de remoções. Copyleft AgilCoop (Aldafabio) 17/63

Testes Sistemáticos (4/4) Compare implementações independentes os resultados devem ser os mesmos se forem diferentes pelo menos uma das implementações está incorreta Cobertura dos testes cada comando do programa deve ser executado por algum teste existem profilers que indicam a cobertura de testes Copyleft AgilCoop (Aldafabio) 18/63

Automação de testes Testes manuais tedioso, não confiável Testes automatizados devem ser facilmente executáveis junte em um script todos os testes Copyleft AgilCoop (Aldafabio) 19/63

Automação de testes Teste de regressão automáticos Comparar a nova versão com a antiga verificar se os erros da versão antiga foram corrigidos verificar que novos erros não foram criados Testes devem rodar de maneira silenciosa se tudo estiver OK Copyleft AgilCoop (Aldafabio) 20/63

Automação de testes Exemplo de script: for i in Ka_data.* # laço sobre os testes do old_ka $i > out1 # versao antiga new_ka $i > out2 # nova versao if!cmp -s out1 out2# compara then echo $i: Erro # imprime mensagem fi done Copyleft AgilCoop (Aldafabio) 21/63

Automação de testes Crie testes autocontidos testes que contém suas próprias entradas e respectivas saídas esperadas programas tipo awk podem ajudar O que fazer quando um erro é encontrado? se não foi encontrado por um teste faça um teste que o provoque Copyleft AgilCoop (Aldafabio) 22/63

Ambiente de testes As vezes para se testar um componente isoladamente é necessários criar um ambiente com características de onde este componente será executado ex: testar funções mem* do C (como memset) Copyleft AgilCoop (Aldafabio) 23/63

Ambiente de testes /* memset: set the first n bytes of s to the byte c */ void *memset(void *s, int c, size_t n) { size_t i; char *p; } p = (char *) s; for (i=0; i<n; i++) p[i] = c; return s; // memset(s0 + offset, c, n); // memset2(s1 + offset, c, n); // compare s0 e s1 byte a byte Como testar funções do math.h? Copyleft AgilCoop (Aldafabio) 24/63

Testes de estresse Testar com grandes quantidades de dados gerados automaticamente erros comuns: overflow nos buffers de entrada, vetores e contadores Exemplo: ataques de segurança gets do C - não limita o tamanho da entrada o scanf(``%s, str) também não... Erro conhecido por buffer overflow error NYT98 Copyleft AgilCoop (Aldafabio) 25/63

Testes de estresse Exemplos de erros que podem ser encontrados: char *p; p = (char *) malloc (x * y * z); Conversão entre tipos diferentes: Ariane 5 conversão de double de 64 bits em int de 16 bits => BOOM Copyleft AgilCoop (Aldafabio) 26/63

Dicas para fazer testes Cheque os limites dos vetores caso a linguagem não faça isto por você faça com que o tamanho dos vetores seja pequeno; ao invés de criar testes muito grandes Faça funções de hashing constantes Crie versões de malloc que ocasionalmente falham Desligue todos os testes antes de lançar a versão final Copyleft AgilCoop (Aldafabio) 27/63

Dicas para fazer testes Inicialize os vetores e variáveis com um valor não nulo ex: 0xDEADBEEF pode ser facilmente encontrado Não continue a implementação de novas características se já foram encontrados erros Teste em várias máquinas, compiladores e SOs Copyleft AgilCoop (Aldafabio) 28/63

Tipos de teste white box testes feitos por quem conhece (escreveu) o código black box testes sem conhecer o código usuários encontram novos erros pois usam o programa de formas que não foram previstas Copyleft AgilCoop (Aldafabio) 29/63

Teste de Software Orientado a Objetos Testes em geral (não apenas a la XP); Diferenças em relação a teste de software tradicional? Podemos não conhecer a implementação de objetos que o nosso código usa; a modularização e o encapsulamento ajudam a organização dos testes. Copyleft AgilCoop (Aldafabio) 30/63

Tipos de testes em software OO testes das classes testes de interações testes de regressão teste do sistema e sub-sistemas Está conforme aos requisitos? teste de aceitação Posso usar a componente X? testes de implantação Copyleft AgilCoop (Aldafabio) 31/63

Abordagem de McGregor/Sykes Lema: Teste cedo. Teste com frequência. Teste o necessário Processo iterativo: projete um pouco escreva um pouco de código teste o que puder analise um pouco Copyleft AgilCoop (Aldafabio) 32/63

Análise de Riscos 1/2 Análise de Riscos ajuda a planejar quais testes devem ser feitos Um risco - ameaça ao sucesso de um projeto riscos do gerenciamento do projeto testes não ajudam muito riscos do negócio testes da funcionalidade riscos técnicos testes unitários, das classes, componentes, etc. Copyleft AgilCoop (Aldafabio) 33/63

Análise de Riscos 2/2 Uma boa especificação de um projeto deve incluir uma análise dos riscos. Esta análise pode levar ao plano e processo de testes Copyleft AgilCoop (Aldafabio) 34/63

Dimensões do Processo de Testes 1/2 Quem cria os testes? Os desenvolvedores? uma equipe especializada em testes? ambos? Quais partes são testadas? Todas? Nenhuma? Ou só as de alto risco? Quando os testes serão realizados? Sempre? Rotineiramente? No final do projeto? Copyleft AgilCoop (Aldafabio) 35/63

Dimensões do Processo de Testes 2/2 Como será feito? Baseado no que o software faz ou em como o software faz? Os testadores conhecem a implementação ou só a interface? Quanto de testes é o adequado? Copyleft AgilCoop (Aldafabio) 36/63

Papéis no Processo de Testes Testador de classes Testador da Integração testa as interações entre objetos Testador do sistema conhece o domínio e é capaz de verificar a aplicação como um todo ponto de vista do usuário do sistema Gerente do Processo de Testes coordena e escalona os testes e as pessoas Copyleft AgilCoop (Aldafabio) 37/63

Planejamento de Testes 1/2 Muitas vezes é esquecido ou não é considerado pelos gerentes de projeto Atividades de planejamento: Escalonamento das Atividades de Testes Estimativas de custo, tempo e pessoal necessário para realizar os testes Equipamento necessário Copyleft AgilCoop (Aldafabio) 38/63

Planejamento de Testes 2/2 Atividades de planejamento: Definição do nível de cobertura: quanto maior, mais código será exigido. Beizer: 2% a 80% do tamanho da aplicação. métricas para avaliar eficácia de um conjunto de testes cobertura do código cobertura das pós-condições cobertura dos elementos do modelo Copyleft AgilCoop (Aldafabio) 39/63

Testes das Classes (unidades) Uma maneira é o peer-review Errar é humano Testes automatizados são melhores Difíceis de construir Testes automatizados devem cobrir alguns casos normais o maior número possível de casos limítrofes Copyleft AgilCoop (Aldafabio) 40/63

Testes das Interações Objetos podem interagir de 4 formas diferentes: um objeto é passado como parâmetro para outro objeto numa chamada de método um objeto devolve uma referência para outro objeto numa chamada de método um método cria uma instância de outro objeto um método usa uma instância global de outra classe (normalmente evitado) Copyleft AgilCoop (Aldafabio) 41/63

Casos: Teste das interações 1/2 Chamadas de métodos 2 abordagens: Programação defensiva O receptor verifica os parâmetros Programação por contrato A mensagem é verificada antes do envio Copyleft AgilCoop (Aldafabio) 42/63

Casos: Teste das interações 2/2 Subclasses/superclasses Use o diagrama de classes para identificar quais testes de regressão devem ser realizados quando uma classe é alterada ou uma nova classe é criada. Execute os testes escritos para a superclasse mas agora usando a nova subclasse Para testar classes abstratas, somos obrigados a criar classes concretas só para testá-las Copyleft AgilCoop (Aldafabio) 43/63

Lembre-se Por que não escrever testes? estou com pressa Quanto maior a pressão menos testes Com menos testes menos produtividade e menor estabilidade Logo, a pressão aumenta... Copyleft AgilCoop (Aldafabio) 44/63

O único conceito mais importante de testes é DO IT Copyleft AgilCoop (Aldafabio) 45/63

Baseado em Baseado em: The Practice of Programming: Kernighan & Pie A Practical Guide to Testing Object-Oriented Software. John McGregor & David Sykes http://www.testing.com/ Copyleft AgilCoop (Aldafabio) 46/63

Testes em Métodos Ágeis Cenário: Defeitos são caros Quanto mais tarde são encontrados, mais caros Conclusão: É melhor encontrar defeitos o mais cedo possível Portanto: Teste cedo e freqüentemente Copyleft AgilCoop (Aldafabio) 47/63

Testes em Métodos Ágeis Quando testar? sempre! antes, durante e depois da implementação Como testar? usando um arcabouço apropriado JUnit, CPPUnit, Sunit, C#Unit HTTPUnit, JWebUnit, Selenium mais obscuros: PDFUnit, XMLUnit, SQLUnit Copyleft AgilCoop (Aldafabio) 48/63

Introdução - Junit Arcabouço livre para testes automatizados escrito em Java Escrito originalmente por Kent Beck e Erich Gamma Parte de uma família de arquitetura para testes conhecida como xunit Utilizado principalmente no desenvolvimento de testes de unidade http://www.junit.org Copyleft AgilCoop (Aldafabio) 49/63

Por que usar JUnit? Facilita a escrita de testes automatizados Funcionalidades inclusas: Asserções para testar resultados esperados Fixtures para reutilização de dados para teste Test Suites para organizar e executar conjuntos de testes Interface gráfica e textual para execução de testes Integração com as principais IDEs Grande comunidade de usuários Copyleft AgilCoop (Aldafabio) 50/63

Quando escrever um teste? Sempre que estiver tentado a escrever um print() ou uma expressão de depuração, escreva um teste -- Martin Fowler Momentos em que é bom investir em testes: Durante o desenvolvimento Crie testes para as classes que está desenvolvendo Durante a correção de defeitos Crie um teste que reproduza o erro antes de corrigí-lo Copyleft AgilCoop (Aldafabio) 51/63

Como escrever um teste? Mais simples: Crie uma subclasse de TestCase public class TesteSimples extends TestCase { ( ) } Crie um método de teste (que comece com test) que verifica os resultados esperados public void testcolecaovazia() { Collection colecao = new ArrayList(); asserttrue(colecao.isempty()); } Copyleft AgilCoop (Aldafabio) 52/63

Como escrever um teste? Fixture: Conjunto de dados de teste e objetos utilizados na execução de um ou mais testes Para reaproveitar uma Fixture em mais de um teste: Sobrescreva o método setup() (inicialização) protected void setup() { colecao = new ArrayList(); } Sobrescreva o método teardown() (limpeza) protected void teardown() { colecao.clear(); } Copyleft AgilCoop (Aldafabio) 53/63

Como escrever um teste? public class TesteSimples extends TestCase { private Collection colecao; protected void setup() { colecao = new ArrayList(); } protected void teardown() { colecao.clear(); } public void testcolecaovazia() { asserttrue(colecao.isempty()); } public void testcolecaocomumitem() { colecao.add("itema"); assertequals(1, colecao.size()); } } Copyleft AgilCoop (Aldafabio) 54/63

Como escrever um teste? Possível ordem de execução: setup() testcolecaocomumitem() teardown() setup() testcolecaovazia() teardown() Como os testes são chamados por reflexão, a ordem de execução dos testes pode não seguir o mesmo fluxo do código Garantia: setup() será executado antes e teardown() será executado depois Copyleft AgilCoop (Aldafabio) 55/63

Como escrever um teste? Testando uma exceção esperada (cenário de erro) Capture a exceção num bloco try/catch e falhe o teste caso ela não seja lançada public void testindexoutofboundsexception() { ArrayList listavazia = new ArrayList(); try { Object o = listavazia.get(0); fail("não lançou exceção esperada."); } catch (IndexOutOfBoundsException e) { asserttrue(true); } } Copyleft AgilCoop (Aldafabio) 56/63

Como escrever um teste? Testando uma exceção não esperada Declare a exceção na assinatura do método e não capture-a no código do teste public void testfalhaindexoutofboundsexception() throws IndexOutOfBoundsException { } ArrayList listavazia = new ArrayList(); Object o = listavazia.get(0); Obs: Esse teste irá falhar Copyleft AgilCoop (Aldafabio) 57/63

Como escrever um teste? Algumas considerações: Testes de unidade devem exercitar o comportamento isolado de uma classe Geralmente, o comportamento de um objeto depende da interação com outros objetos Nesse caso, é comum utilizar objetos dublês para isolar o comportamento Alguns tipos de objetos dublês : Dummy Fake Stubs Mocks Copyleft AgilCoop (Aldafabio) 58/63

Como rodar um teste? JUnit vem com dois TestRunners: Textual: utilizado na linha de comando Gráfico: interface gráfica simples para execução e acompanhamento do progresso dos testes Copyleft AgilCoop (Aldafabio) 59/63

Como rodar um teste? Eclipse Clicar com o botão direito na classe de teste e escolher Run As > JUnit Test Copyleft AgilCoop (Aldafabio) 60/63

Conclusão O mais importante é: Testar cedo Testar freqüentemente Testar de forma automatizada Arcabouços de teste ajudam com o item 3 O resto é com você! Copyleft AgilCoop (Aldafabio) 61/63

Desenvolvimento Dirigido por Testes TDD (test-driven development) Testes a Priori (test-first programming) Copyleft AgilCoop (Aldafabio) 62/63

Referências http://www.junit.org K. Beck and E. Gamma. Test Infected: Programmers Love Writing Tests. Java Report, July 1998, Volume 3, Number 7 Copyleft AgilCoop (Aldafabio) 63/63