1) O documento discute técnicas e ferramentas para testes e depuração de código Python, incluindo testes de unidade, integração e doctest.
2) É apresentada uma agenda com visão geral sobre testes e depuração de software, além de técnicas, processos e ferramentas para cada tópico.
3) O documento fornece detalhes sobre módulos e princípios para testes de unidade em Python, como unittest, pytest e nose, assim como técnicas de depuração como print, logging e debug
1. Testes e Depuração
de Código com
Python
CONSEGI, Brasília
20 de Agosto de 2010
http://www.python.org.br
http://associacao.python.org.br
2. Agenda
‣ Visão geral sobre testes de software
‣ Técnicas, processos e ferramentas
de testes
‣ Visão geral sobre depuração de
software
‣ Técnicas, processos e ferramentas
de depuração
3. O que esta oficina
‣ 100% prática
‣ Uma referência completa sobre o
assunto
‣ Algo muito útil para
desenvolvedores já experientes
‣ A solução para todos os seus
problemas
‣ Então para começar descontraído...
7. Testes: Princípios
‣ Para cada entrada, definir a saída
esperada
‣ Deve testar uma entrada por vez
‣ Deve testar entradas válidas e
inválidas
‣ Deve agregar valor ao software
‣ E se você falhar...
8.
9. Testes:
‣ Devem rodar sem interação humana
na entrada de dados
‣ Devem verificar os resultados sem
interação humana
‣ Devem rodar de forma
independente, sem que um teste
cause efeitos colaterais em outros
‣ Se causar...
10.
11. Testes: Vantagens
‣ Garante que o código funcione da
forma esperada, para as situações
testadas
‣ Serve como exemplo/modelo de
como o código desenvolvido pode/
deve ser usado
‣ Dá segurança ao desenvolvedor (ou
a outros membos da equipe de
desenvolvimento) para efetuar
12. Testes:
‣ Alguns testes podem demandar
bastante tempo para serem escritos
‣ O desenvolvedor passa a ter que
manter o código e os testes do
código
‣ Testes não garantem código sem
bugs
‣ Obviamente tinha que existir algo
ruim...
13.
14. Martin Fowler Rules
‣ Não tenha medo de modificar o
código
‣ Integre cedo, integre
frequentemente
‣ Sempre escreva testes
‣ Sempre rode seus testes
‣ Sempre preste atenção quando os
seus testes falharem
15. Testes: Golden
‣ Os testes devem ser reproduzíveis
em todos os aspectos: atenção
especial quando usar data, hora,
fuso horário, arredondamento,
variáveis de ambiente, ...
‣ Sempre teste as condições de
borda/limite: minuto e segundo
antes e depois da meia-noite,
primeiro/último elementos
17. Módulo unittest
‣ Baseado no JUnit do Java (que por
sua vez foi baseado no framework
de testes do Smalltalk), introduzido
na versão 2.1 do Python
‣ http://docs.python.org/library/
unittest.html
‣ assertEqual, assertNotEqual,
assertRaises, assertTrue,
assertFalse, ...
18. Nomenclatura
‣ Test: teste propriamente dito
‣ Test Fixture: preparação necessária
para rodar um ou mais testes
‣ Test Case: agrupamento diferentes
testes sobre um mesmo assunto
‣ Test Suite: agrupamento diferentes
testes ou Test Cases que devem ser
executados juntos
19. Testes: Fixture
‣ setUp: método executado antes de
cada teste, usado para fornecer
qualquer inicialização necessária
‣ tearDown: método executado após
cada teste, usado para limpar a
inicialização utilizada
33. Testivus: Coverage
Numa manhã bem cedo um jovem
programador perguntou ao Grande
Mestre:
- “Estou pronto para escrever alguns
testes de unidade. Qual a cobertura
que devo buscar?”
O Grande Mestre respondeu: “Não se
preocupe com a cobertura, apenas
escreva bons testes.”
34. Testivus: Coverage
Mais tarde naquele dia, um segundo
programador perguntou a mesma
coisa.
O Grande Mestre então apontou para
uma panela com água fervente e disse:
- “Quantos grãos de arroz devo colocar
na panela?”
35. Testivus: Coverage
O programador, perplexo, respondeu:
- “Como poderei dizer? Depende de
quantas pessoas você pretende
alimentar, de quão famintas elas estão,
que outras comidas serão servidas,
quanto arroz está disponível e assim
por diante!”
- “Exatamente!”, disse o Grande
Mestre.
36. Testivus: Coverage
Perto do fim do dia, um terceiro
programador veio e fez a mesma
pergunta sobre cobertura de código.
“Oitenta porcento, no mínimo!”,
respondeu o Grande Mestre em voz
firme, batendo o punho na mesa!
O terceiro programador sorriu, curvou-
se e saiu.
37. Testivus: Coverage
Após essa última resposta, um jovem
aprendiz aproximou-se do Grande
Mestre e perguntou:
- “Grande mestre, hoje eu ouvi o
senhor responder a mesma pergunta
sobre cobertura de código com 3
diferentes respostas. Por quê?”
O Grande mestre levantou-se de sua
cadeira:
38. Testivus: Coverage
Depois deles encherem suas xícaras
com o chá verde quente e fumegante, o
Grande Mestre começou:
- “O primeiro programador é novo e
está apenas iniciando com os testes.
No momento ele tem um monte de
código e nenhum teste. Ele tem um
longo caminho a percorrer; focando na
cobertura de código neste momento
seria deprimente e completamente
39. Testivus: Coverage
- “É melhor ele apenas se acostumar a
escrever e executar alguns testes. Ele
pode se preocupar com a cobertura do
código mais tarde.”
- “O segundo programador, por outro
lado, é bastante experiente tanto na
programação quanto nos testes.
Quando eu respondi, pedindo-lhe
quantos grãos de arroz deveriam ser
colocados na panela, ajudei-o a
40. Testivus: Coverage
- “Ele conhece esse fatores melhor do
que eu, afinal é seu código. Não existe
uma única, simples, resposta, e ele é
inteligente o suficiente para lidar com a
verdade e trabalhar com isso."
- “Eu compreendo”, disse o jovem
aprendiz, mas se não há uma resposta
simples e única, então por que o
senhor disse ao terceiro programador:
“Oitenta porcento, no mínimo!”?
41. Testivus: Coverage
O Grande Mestre caiu na gargalhada e
completou:
- “O terceiro programador só quer
respostas simples, mesmo quando não
existem essas respostas simples... e no
fim ele ainda acaba não seguindo elas!”
O jovem aprendiz e o Grande Mestre
grisalho terminaram de beber o chá,
contemplando, em silêncio.
42. Depuração de
‣ Nem sempre é possível escrever
código do zero, com testes como
deveria ser
‣ Muitas vezes precisamos integrar
aplicações com bases de código
desconhecidas, não
documentadas e
sem testes...
‣ Pior ainda: quando você tiver que