View
232
Download
0
Category
Preview:
Citation preview
Testes de Unidade
Curso de Verão 2010 - IME/USPwww.agilcoop.org.br
Hugo Corbuccihugo@agilcoop.org.br
Copyleft AgilCoop 2010 2
Caracterização
Copyleft AgilCoop 2010 3
Caracterização
Copyleft AgilCoop 2010 4
Caracterização
Copyleft AgilCoop 2010 5
Caracterização
Copyleft AgilCoop 2010 6
Caracterização
Como?
Copyleft AgilCoop 2010 7
Caracterização
Copyleft AgilCoop 2010 8
Ou seja....
● Testa uma Classe/Módulo, cada método/função● Foco: Funcionalidade● Baixo nível, básico mas muito importante● Preciso: aponta o caso específico que dá
problema● Sólido e independente
Copyleft AgilCoop 2010 9
Estratégias de testes
Testes de interface
Testes de integração, aceitação, história, etc.
Testes de unidade/micro/isolação
Copyleft AgilCoop 2010 10
Estratégias de testes
Poucos testes de unidade
Muitos testes de interface
Copyleft AgilCoop 2010 11
Estratégias de testes
Muitos testes de unidade
Poucos testes de interface
Copyleft AgilCoop 2010 12
Estratégias de testes
ou
Copyleft AgilCoop 2010 13
Estratégias de testes
X ✓
Copyleft AgilCoop 2010 14
Objetivos para Testes de Unidade
F ast (Rápidos)
I ndependent (Independentes)
R epeatable (Repetíveis)
S elf-verifying (Auto-verificantes)
T imely (Em tempo)
– Clean Code
Copyleft AgilCoop 2010 15
Rápidos
Copyleft AgilCoop 2010 16
Rápidos
Quantas vezes por dia você rodaria esses testes?
Copyleft AgilCoop 2010 17
Rápidos
● Serão numerosos e você não pode esperar o dia todo para eles rodarem
● Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças
Copyleft AgilCoop 2010 18
Rápidos
● Então não faz testes que demoram?
● Apaga os testes que demoram?
● Ignora algoritmos pesados?
Copyleft AgilCoop 2010 19
Rápidos
● Então não faz testes que demoram?
● Apaga os testes que demoram?
● Ignora algoritmos pesados?
NÃO
Copyleft AgilCoop 2010 20
O que pode tornar um teste lento?
● Algoritmos pesados:– Matemática
– Bioinformática
– Computação gráfica
– Otimização
● Alta complexidade computacional● Algoritmos concorrentes● Testes mini-integrados – não isolados
Copyleft AgilCoop 2010 21
Como lidar com esses casos?
● Separe-os do resto!
● Suites de TestePastas fontes diferentesTarefas diferentes
Copyleft AgilCoop 2010 22
Independentes
Esses testes passam?
Copyleft AgilCoop 2010 23
Independentes
Esses nessa ordem?
Copyleft AgilCoop 2010 24
Independentes
● Outros testes– Ordem de execução
– Sucesso
Copyleft AgilCoop 2010 25
Independentes
● De outros testes– Devem funcionar em qualquer ordem de execução
Copyleft AgilCoop 2010 26
Independentes
● De outros testes– Devem funcionar em qualquer ordem de execução
– Do sucesso dos anteriores
Copyleft AgilCoop 2010 27
Repetíveis
O que precisa para esse teste passar?
Copyleft AgilCoop 2010 28
Repetíveis
● Em vários ambientes– Com ou sem conexão externa: http, ftp, smtp, ...
– Em produção, homologação ou desenvolvimento
– Num servidor, no seu laptop, no micro de casa, ...
Copyleft AgilCoop 2010 29
Repetíveis
Copyleft AgilCoop 2010 30
Repetíveis
Copyleft AgilCoop 2010 31
Repetíveis
● Cuidado com situações não-determinísticas– Aleatoriedade
– Tempo
– Concorrência
– etc...
Copyleft AgilCoop 2010 32
Repetíveis
● Várias execuções dos testes deveriam ser idênticas
● Testes intermitentes são evidência de problema
● Isole a lógica e crie dublês
Copyleft AgilCoop 2010 33
Auto-verificantes
Copyleft AgilCoop 2010 34
Auto-verificantes
OU
Copyleft AgilCoop 2010 35
Auto-verificantes
OU
Copyleft AgilCoop 2010 36
Auto-verificantes
● Um teste tem UMA asserçãoPassa ou Falha
● Tem que falhar se estiver errado
● Tem que passar se estiver certo
Copyleft AgilCoop 2010 37
Em tempo
● Muito antes e provavelmente precisará ser reescrito
● Muito depois e provavelmente nunca será escrito
● Junto com o código de produção– Antes, se possível em TDD
Copyleft AgilCoop 2010 38
Em tempo
● E se já tiver código e não tiver testes ou estiverem incompletos?
● Para entender o sistema (testes de estudo)
● Antes de refatorar (não introduzir erros)
● Antes de mudar um comportamento
Copyleft AgilCoop 2010 39
Objetivos para Testes de Unidade
F ast (Rápidos)
I ndependent (Independentes)
R epeatable (Repetíveis)
S elf-verifying (Auto-verificantes)
T imely (Em tempo)
– Clean Code
Além disso: Úteis!
Copyleft AgilCoop 2010 40
Úteis
Vale a pena testar isso?
Copyleft AgilCoop 2010 41
Úteis
● Motivos para escrever um teste– Precisa mudar algo no código de produção
– Descobriu um bug
– Quer documentar um comportamento não evidente
– Está em dúvida sobre o funcionamento
Copyleft AgilCoop 2010 42
Casos especiais em O.O.
● Classes abstratas– Implementação simples pro teste
● Métodos de classe
● Protegidos => Teste no mesmo pacote
● Singletons
Copyleft AgilCoop 2010 43
Sinais de problemas
● Vontade de testar– Classes Anônimas
– Classes Privadas
– Métodos Privados
● Sinal de que essas coisa auxiliares tem lógicas complexas demais. Refatore!
Copyleft AgilCoop 2010 44
Dicas
● Verifique valores limites– Em loops (primeiro valor, último valor)
– Em comparações (o menor de um tipo contra maior de outro)
● Identifique e agrupe conjuntos de teste com um mesmo objetivo
● Teste que tudo dá certo com coisas certas.E que dá errado com coisas erradas!
Copyleft AgilCoop 2010 45
Dicas
● Listas: cheias, vazias, nulas● String: Vazias, nulas, grandes, caracteres
estranhos● Números: 0, negativos, positivos, grandes,
pequenos, valores máximos e mínimos● Expressões regulares: sequências repetidas,
acentos, caracteres estranhos, pontuações
Copyleft AgilCoop 2010 46
Ferramentas
● CxxTest (C++): http://cxxtest.tigris.org/● JUnit (Java): http://www.junit.org● DUnit (Delphi): http://dunit.sourceforge.net● VBUnit (Visual Basic): http://www.vbunit.com● TestNG (Java): http://testng.org● RSpec (Ruby): http://rspec.info/
● http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
Copyleft AgilCoop 2010 47
Perguntas
?Hugo Corbucci
hugo@agilcoop.org.br
Copyleft AgilCoop 2010 48
Mão na massa
Recommended