Test-Driven Development
Software quality factors
Testability
“Disposition to support acceptance criteria and
evaluation of performance. Such a characteristic
must be built-in during the design phase if the
product is to be easily testable; a complex design
leads to poor testability”
From Wikipedia
Agenda
• Testes
• Testes Unitários
• Testes Unitários Automatizados
• Mock
• Test-driven Development
Por que testamos?
Validação. Garantir que o software ou
componente se comporta como foi projetado
Unit test
“In computer programming, unit testing is a
method by which individual units of source
code are tested to determine if they are fit for
use. A unit is the smallest testable part of an
application”
From Wikipedia
Por que automatizamos?
• Confiabilidade
• Regressão
• Refactoring
DEMONSTRAÇÃO
Testes Unitários Automatizados
• Fácil para componentes isolados
Classe a
ser testada
Classe de
Teste
Testes Unitários Automatizados
• Difícil quando há dependências
Classe a
ser testada
Classe de
Teste
Testes Unitários Automatizados
• Quebra-se as dependências para obter
isolamento
Classe a
ser testada
Classe de
Teste
M
o
c
k
M
o
c
k
M
o
c
k
DEMONSTRAÇÃO
Testes
Desenho
Implementação
Testes
Primeiro Testes
Desenho
Testes
Implementação
Primeiro Testes
Desenho
Testes
Implementação
Testes
Test-driven Developement
Desenho
Testes
Implementação
Testes
Test-driven Developement
Novo
Requerimento
Escreve Novo
Teste
Executa Testes
Escreve o
Código
Executa Testes
Refactoring
Executa Testes
Faça Falhar
Faça Funcionar
Faça Melhor
Ciclo TDD
• Escreva o teste
– Garante que todo o código funcional é testável
– Prove uma especificação funcional para o código
– Ajuda a pensar no desenho
– Garante que o código é tangível
• Escreva o código
– Complete o requerimento
– Escreva a solução mais simples
– Deixe as melhorias para um passo seguinte
– O código serve somente para passar no teste
• Reescreva (Refactoring)
– Faça a limpeza no código
– Aplique as melhores práticas de codificação
– Repense o desenho
– Delete o código desnecessário
Importante!
Não escreva o código em sua cabeça antes de
escrever o teste!!
Lembre-se: está escrevendo um teste unitário
caixa preta
Por que aplicar TDD
• Confiabilidade
– Aumenta confiança no código
– Elimina o medo de refactoring
• Documenta os requisitos (no código)
• Teste de regressão = Estabilidade = Qualidade
Por que aplicar TDD
0
1
2
3
4
5
6
7
8
9
10
0%
20%
40%
60%
80%
100%
Requirements Coding Integration Testing Support
Thousand$s
%defectscreated
% of Defects Introduced Cost to Fix a Defect
The pain is here! This is too late…
DEMONSTRAÇÃO
OBRIGADO

Test-Driven Development