testeskon/presentations/testes2010.pdf · programe defensivamente; use os códigos de erro....
TRANSCRIPT
![Page 1: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/1.jpg)
1
Testes e sua relação com métodos ágeis
Prof. Dr. Fabio Kon
Departamento de Ciência da ComputaçãoIME / USP
Lab. Prog. I - 2010
![Page 2: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/2.jpg)
Copyleft AgilCoop (Aldafabio) 2/63
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)”
![Page 3: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/3.jpg)
Copyleft AgilCoop (Aldafabio) 3/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 !!
![Page 4: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/4.jpg)
Copyleft AgilCoop (Aldafabio) 4/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.
![Page 5: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/5.jpg)
Copyleft AgilCoop (Aldafabio) 5/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.
![Page 6: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/6.jpg)
Copyleft AgilCoop (Aldafabio) 6/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++);
![Page 7: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/7.jpg)
Copyleft AgilCoop (Aldafabio) 7/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 ?
![Page 8: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/8.jpg)
Copyleft AgilCoop (Aldafabio) 8/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 ?
![Page 9: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/9.jpg)
Copyleft AgilCoop (Aldafabio) 9/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;}
![Page 10: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/10.jpg)
Copyleft AgilCoop (Aldafabio) 10/63
Teste de pré e pós condições
Solução possível
Não existe uma única resposta certa A única resposta claramente errada é ignorar
o erro !! Ex: USS Yorktown.
// mudar o returnreturn n <= 0 ? 0.0 : sum / n;
![Page 11: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/11.jpg)
Copyleft AgilCoop (Aldafabio) 11/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
![Page 12: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/12.jpg)
Copyleft AgilCoop (Aldafabio) 12/63
Programação defensiva Tratar situações que não “podem” acontecer
Exemplo:
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
if (nota < 0 || nota > 10) // não pode acontecer letra = ‘?’;else if (nota > 9) letra = ‘A’;else ...
![Page 13: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/13.jpg)
Copyleft AgilCoop (Aldafabio) 13/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
![Page 14: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/14.jpg)
Copyleft AgilCoop (Aldafabio) 14/63
Pequeno exercício:
int fatorial(int n) { int fat = 1;
while (n--) { fat *= n; } return fat;}
como testar isso?
![Page 15: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/15.jpg)
Copyleft AgilCoop (Aldafabio) 15/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
![Page 16: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/16.jpg)
Copyleft AgilCoop (Aldafabio) 16/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.
![Page 17: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/17.jpg)
Copyleft AgilCoop (Aldafabio) 17/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.
![Page 18: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/18.jpg)
Copyleft AgilCoop (Aldafabio) 18/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
![Page 19: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/19.jpg)
Copyleft AgilCoop (Aldafabio) 19/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
![Page 20: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/20.jpg)
Copyleft AgilCoop (Aldafabio) 20/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
![Page 21: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/21.jpg)
Copyleft AgilCoop (Aldafabio) 21/63
Automação de testes
Exemplo de script:
for i in Ka_data.* # laço sobre os testesdo old_ka $i > out1 # versao antiga new_ka $i > out2 # nova versao if !cmp -s out1 out2# compara then echo $i: Erro # imprime mensagem fidone
![Page 22: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/22.jpg)
Copyleft AgilCoop (Aldafabio) 22/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
![Page 23: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/23.jpg)
Copyleft AgilCoop (Aldafabio) 23/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)
![Page 24: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/24.jpg)
Copyleft AgilCoop (Aldafabio) 24/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 ?
![Page 25: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/25.jpg)
Copyleft AgilCoop (Aldafabio) 25/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
![Page 26: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/26.jpg)
Copyleft AgilCoop (Aldafabio) 26/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 5conversão de double de 64 bits em int de 16 bits => BOOM
![Page 27: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/27.jpg)
Copyleft AgilCoop (Aldafabio) 27/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
![Page 28: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/28.jpg)
Copyleft AgilCoop (Aldafabio) 28/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
![Page 29: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/29.jpg)
Copyleft AgilCoop (Aldafabio) 29/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
![Page 30: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/30.jpg)
Copyleft AgilCoop (Aldafabio) 30/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.
![Page 31: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/31.jpg)
Copyleft AgilCoop (Aldafabio) 31/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
![Page 32: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/32.jpg)
Copyleft AgilCoop (Aldafabio) 32/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
![Page 33: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/33.jpg)
Copyleft AgilCoop (Aldafabio) 33/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.
![Page 34: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/34.jpg)
Copyleft AgilCoop (Aldafabio) 34/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
![Page 35: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/35.jpg)
Copyleft AgilCoop (Aldafabio) 35/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?
![Page 36: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/36.jpg)
Copyleft AgilCoop (Aldafabio) 36/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?
![Page 37: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/37.jpg)
Copyleft AgilCoop (Aldafabio) 37/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
![Page 38: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/38.jpg)
Copyleft AgilCoop (Aldafabio) 38/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
![Page 39: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/39.jpg)
Copyleft AgilCoop (Aldafabio) 39/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
![Page 40: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/40.jpg)
Copyleft AgilCoop (Aldafabio) 40/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
![Page 41: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/41.jpg)
Copyleft AgilCoop (Aldafabio) 41/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)
![Page 42: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/42.jpg)
Copyleft AgilCoop (Aldafabio) 42/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
![Page 43: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/43.jpg)
Copyleft AgilCoop (Aldafabio) 43/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
![Page 44: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/44.jpg)
Copyleft AgilCoop (Aldafabio) 44/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....
![Page 45: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/45.jpg)
Copyleft AgilCoop (Aldafabio) 45/63
O único conceito mais importante de testes é
DO IT
![Page 46: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/46.jpg)
Copyleft AgilCoop (Aldafabio) 46/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/
![Page 47: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/47.jpg)
Copyleft AgilCoop (Aldafabio) 47/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
![Page 48: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/48.jpg)
Copyleft AgilCoop (Aldafabio) 48/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
![Page 49: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/49.jpg)
Copyleft AgilCoop (Aldafabio) 49/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
![Page 50: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/50.jpg)
Copyleft AgilCoop (Aldafabio) 50/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
![Page 51: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/51.jpg)
Copyleft AgilCoop (Aldafabio) 51/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
![Page 52: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/52.jpg)
Copyleft AgilCoop (Aldafabio) 52/63
Como escrever um teste?
Mais simples:• Crie uma subclasse de TestCase
• Crie um método de teste (que comece com test) que verifica os resultados esperados
public class TesteSimples extends TestCase { (…)}
public void testColecaoVazia() { Collection colecao = new ArrayList(); assertTrue(colecao.isEmpty());}
![Page 53: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/53.jpg)
Copyleft AgilCoop (Aldafabio) 53/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)
• Sobrescreva o método tearDown() (limpeza)
protected void setUp() { colecao = new ArrayList();}
protected void tearDown() { colecao.clear();}
![Page 54: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/54.jpg)
Copyleft AgilCoop (Aldafabio) 54/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()); }}
![Page 55: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/55.jpg)
Copyleft AgilCoop (Aldafabio) 55/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
![Page 56: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/56.jpg)
Copyleft AgilCoop (Aldafabio) 56/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çadapublic 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); }}
![Page 57: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/57.jpg)
Copyleft AgilCoop (Aldafabio) 57/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
Obs: Esse teste irá falhar
public void testFalhaIndexOutOfBoundsException() throws IndexOutOfBoundsException {
ArrayList listaVazia = new ArrayList(); Object o = listaVazia.get(0);}
![Page 58: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/58.jpg)
Copyleft AgilCoop (Aldafabio) 58/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
![Page 59: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/59.jpg)
Copyleft AgilCoop (Aldafabio) 59/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
![Page 60: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/60.jpg)
Copyleft AgilCoop (Aldafabio) 60/63
Como rodar um teste?
Eclipse• Clicar com o botão direito na classe de teste
e escolher “Run As > JUnit Test”
![Page 61: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/61.jpg)
Copyleft AgilCoop (Aldafabio) 61/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ê!
![Page 62: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/62.jpg)
Copyleft AgilCoop (Aldafabio) 62/63
Desenvolvimento Dirigido por Testes TDD (test-driven development) Testes a Priori (test-first programming)
![Page 63: Testeskon/presentations/testes2010.pdf · Programe defensivamente; Use os códigos de erro. Copyleft AgilCoop (Aldafabio) 5/63 Teste o código em seus limites Para cada pequeno trecho](https://reader034.vdocuments.site/reader034/viewer/2022050216/5f626e8fa60ad458630b90b6/html5/thumbnails/63.jpg)
Copyleft AgilCoop (Aldafabio) 63/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