48
Testes de Unidade Curso de Verão 2010 - IME/USP www.agilcoop.org.br Hugo Corbucci [email protected]

Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

  • Upload
    lehanh

  • View
    230

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Testes de Unidade

Curso de Verão 2010 - IME/USPwww.agilcoop.org.br

Hugo [email protected]

Page 2: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 2

Caracterização

Page 3: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 3

Caracterização

Page 4: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 4

Caracterização

Page 5: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 5

Caracterização

Page 6: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 6

Caracterização

Como?

Page 7: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 7

Caracterização

Page 8: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 9: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 10: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 10

Estratégias de testes

Poucos testes de unidade

Muitos testes de interface

Page 11: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 11

Estratégias de testes

Muitos testes de unidade

Poucos testes de interface

Page 12: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 12

Estratégias de testes

ou

Page 13: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 13

Estratégias de testes

X ✓

Page 14: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 15: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 15

Rápidos

Page 16: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 16

Rápidos

Quantas vezes por dia você rodaria esses testes?

Page 17: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 18: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · 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?

Page 19: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 19

Rápidos

● Então não faz testes que demoram?

● Apaga os testes que demoram?

● Ignora algoritmos pesados?

NÃO

Page 20: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 21: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 21

Como lidar com esses casos?

● Separe-os do resto!

● Suites de TestePastas fontes diferentesTarefas diferentes

Page 22: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 22

Independentes

Esses testes passam?

Page 23: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 23

Independentes

Esses nessa ordem?

Page 24: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 24

Independentes

● Outros testes– Ordem de execução

– Sucesso

Page 25: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 25

Independentes

● De outros testes– Devem funcionar em qualquer ordem de execução

Page 26: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 26

Independentes

● De outros testes– Devem funcionar em qualquer ordem de execução

– Do sucesso dos anteriores

Page 27: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 27

Repetíveis

O que precisa para esse teste passar?

Page 28: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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, ...

Page 29: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 29

Repetíveis

Page 30: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 30

Repetíveis

Page 31: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 31

Repetíveis

● Cuidado com situações não-determinísticas– Aleatoriedade

– Tempo

– Concorrência

– etc...

Page 32: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 33: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 33

Auto-verificantes

Page 34: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 34

Auto-verificantes

OU

Page 35: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 35

Auto-verificantes

OU

Page 36: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 37: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 38: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 39: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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!

Page 40: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 40

Úteis

Vale a pena testar isso?

Page 41: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 42: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 43: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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!

Page 44: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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!

Page 45: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 46: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

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

Page 47: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 47

Perguntas

?Hugo Corbucci

[email protected]

Page 48: Testes de Unidade - CCSLccsl.ime.usp.br/agilcoop/files/AgilCoop-Verao2010-Testes-04... · Na prática, há integração de unidades e os testes proveem feedback sobre as mudanças

Copyleft AgilCoop 2010 48

Mão na massa