introdução a tdd

Post on 18-Nov-2014

883 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Introduz TDD, situando em relação aos diversos tipos de testes existentes.

TRANSCRIPT

Test Driven DevelopmentDesenvolvimento Orientado por Testes

Daniel Capó Sobral

Teste é testeOu não?

Taxonomias• Funcional• Não

Funcional

Objeto de teste

• Automático

• Manual

Execução

• Caixa Preta

• Caixa Branca

• Caixa Cinza

Informação sobre o sistema

• Exploratório

• Pré-definido

Planejamento

• Teste Primeiro

• Teste por Último

Momento de escrita

• Qualitativo• Quantitativ

o

Resultado

• Estático (tipos, provas)

• Dinâmico

Execução do código testado

• Estado• Interação

Comportamento observado

• Verificação• Validação

Contratado vs Desejado

• TDD• ATDD• BDD

Técnica de Escrita

NíveisEscopo do Objeto Testado

Unit Testing

Integration Testing

System Testing

System Integration Testing

NíveisObjetivo do Teste

Beta

Alpha

Aceitação

Regressão

Smoke Test

Não funcionalPerformance Carga Usabilidade

SegurançaInternacionalizaç

ãoe Localização

Destrutivo

Compatibilidade Escalabilidade etc

Tá, mas e os testes de TDD?“In test-driven development a developer creates automated unit tests” – wikipedia

O que é TDD?

Técnica de Desenvolvimento

de Software

Teste Primeiro

Teste Unitário

Automatizado

TDD é sobre como escrever código de aplicação.

TDD não é sobre como escrever testes!

Porque não fazer TDD?

• Como escrever testes?• Como escrever código testável?• Como usar as ferramentas?• Como se faz TDD?

Curva de Aprendizado Íngreme:

• Mais linhas de código• Interrupções constantes

Menor Produtividade

• Mais código, mais manutenção• Mudanças de arquitetura quebram testes!• Mudanças de comportamento quebram testes!

Maior Custo de Manutenção

Porque fazer TDD?

• Confiança para efetuar mudanças• Testes resguardam contra regressão

Menor Custo de Manutenção

• YAGNI! (You Ain’t Gonna Need It!) significa menos desperdício

• Menos tempo corrigindo bugs: estava funcionando a cinco minutos atrás!

Maior Produtividade

• Mais testes leva a menos bugs• Testes unitários compreensivos resultam em baixo

acoplamento

Maior Qualidade

O que dizem os estudos?Maio

r Qualidade

?

• Inconclusivo• Boa correlação, mas...• Isolamento

• TDD ou outras práticas ágeis?• TDD ou número de testes?

• Mais testes levam a menos bugs? Confirmado.• Curva de aprendizado íngreme dificulta grupos de controle

E a Produtividade

?

• Inconclusivo• Conforme estudo, melhor, pior ou indiferente

Mas escrever um teste unitário parece simples...Famous last words.

Dificuldades

Onde começar?

O que testar?

O que não testar?

Quanto se testar de cada vez?

Que nome dar aos testes?

Como entender porque o

teste falhou?Como separar uma unidade de

suas dependência

s?

Fonte: Introducing BDD, Dan North

O que é um bom teste unitário?

Deve ser fácil de implementar.

Deve ser automatizável e reproduzível de forma confiável.

Qualquer um deve ser capaz de executá-lo, sem setups complicados.

Deve ser executável com um simples click.

Deve executar rapidamente.

Uma vez escrito, deve ser preservado para uso futuro.

Fonte: The Art of Unit Testing, Roy Osherove

Teste (automatizado) é Código

Em outras palavras, deve receber as mesmas atenções que o código da aplicação!

Atenção comManutenção Qualidade Legibilidade Refatoração Code Rot

Arcabouço, Armação, AndaimeAjuda a construir Removido ao fim da

construção

Mas software sem manutenção é software

morto!

Removendo dependências: Fakes

Stubs

Teste de estado

Mocks

Teste de Interação

Asserções

Espelhamento

Como?Injeção de Dependências

Ainda demora muito para chegar no TDD?

Três leis de TDD

Você não pode escrever código de aplicação mais do que o suficiente para fazer um teste

unitário passar.

Você não pode escrever código de teste mais do que o necessário para falhar; falhar compilação

também conta.

Você não pode escrever código de aplicação exceto para fazer passar um teste unitário.

Segundo Robert Martin

Três fases de TDDVermelho• Escrever

código de teste para evidenciar falha

Verde• Escrever

código de aplicação para corrigir falha

Azul• Refactoring

de código (aplicação e testes)

Fluxo de TDDEscrever teste

Escrever aplicação

Refatoração(aplicação e testes)

Falhou?

Passou?

Sim

Não

NãoSim

Executa teste

Executa teste

Passou?

Executa teste

Sim

NãoSim

Muito estranho! Como funciona isso na prática?

DemonstraçãoJogo de BolicheRegras:

10 jogadas (frames)1 ou 2 arremessos por jogada (1ª à 9ª)2 ou 3 arremessos na 10ª jogada10 pinos

1 ponto por pino derrubadoSpare – 10 pinos derrubados em 2 arremessos

10 pontos + próximo arremessoStrike – 10 pinos derrubados em 1 arremesso

10 pontos + 2 próximos arremessos

Diagrama de ClasseTODO

Escrevendo o código com TDDTODO

That’s all, folks!Discutir!

ReferênciasClean Coders (Robert Martin)Making Software: What Really Works, and

Why We Believe It (Andy Oram & Greg Wilson)

The Art of Unit Testing: with Examples in .Net (Roy Osherove)

Introducing BDD (Dan North)Wikipedia (duh!)Test Driven Development: By Example (Kent

Beck)

top related