Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na...

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