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 • Quantitativo 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
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
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
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
Quanto se testar de cada vez? Que nome dar aos testes? Como entender porque o teste falhou? Como separar uma unidade de suas dependências? Fonte: Introducing BDD, Dan North
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
mesmas atenções que o código da aplicação! Atenção com Manutenção Qualidade Legibilidade Refatoração Code Rot Arcabouço, Armação, Andaime Ajuda a construir Removido ao fim da construção Mas software sem manutenção é software morto!
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
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)