Test Driven Development Nazareno Andrade Baseado no material do prof. Hyggo Almeida Contextualização Testar software não é uma atividade divertida!!! Você sabe que é necessário!!! Diz a todo mundo para fazer!!!! Mas não faz!!! Test Driven Development (Hyggo Oliveira de Almeida) 2 Contextualização Ciclo de desenvolvimento “tradicional” Testes depois da implementação Problemas??? Não!!?!! Tudo que implemento, depois testo!!! Em ciclos curtos... Será??? Test Driven Development (Hyggo Oliveira de Almeida) 3 Motivação O que acontece em geral... Implementação Início Testes Resultado: Manutenção cara Test Driven Development (Hyggo Oliveira de Almeida) Prazo final 4 Test Driven Development Fórmula de Ambler TDD = TFD + Refactoring Test First Development (Confiança no funcionamento) Test Driven Development (Hyggo Oliveira de Almeida) Limpeza (Alta qualidade do código) 5 Test Driven Development Técnica segundo a qual você deve primeiro escrever testes e depois escrever código!!! Testes devem guiar o desenvolvimento do código Primeiro a intenção... Testes provêem uma especificação de “o que” um pedaço de código faz Servem como documentação Refactoring garante a alta qualidade do código Test Driven Development (Hyggo Oliveira de Almeida) 6 Ciclo de desenvolvimento TDD Escreva um teste Refatore o código (e teste) Compile Execute testes, veja o sucesso Corrija erros de compilação Escreva código Execute testes, veja as falhas Test Driven Development (Hyggo Oliveira de Almeida) 7 Requisito básico para TDD Arcabouço para testes de unidade automatizados xUNIT (Java, C++, Python, Delphi...) A filosofia de TDD se alinha a XP De fato, possuem o mesmo pai (Kent Beck) É possível utilizar TDD independentemente Test Driven Development (Hyggo Oliveira de Almeida) 8 Objetivo: Barra verde Ferramenta Java já conhecida JUnit Possui plug-in para o Eclipse Seu trabalho agora é: Escrever testes primeiro... ... escrever código depois... ... manter a barra verde!!! Limpar o código... ... Manter a barra verde!!! Test Driven Development (Hyggo Oliveira de Almeida) 9 Por que TDD? Disciplina a escrita de software incrementalmente em pedaços realmente pequenos Retorno constante do sucesso da implementação (green bar) Redução no tempo de depuração Tempo de depuração nunca é reutilizado! Test Driven Development (Hyggo Oliveira de Almeida) 10 Sobre refatoramento O objetivo é remover código mal-cheiroso Código duplicado Métodos/classes muito grandes Subclasses muito semelhantes ... Extrair método, extrair constantes, usar variável explicativa... http://www.refactoring.com/catalog Test Driven Development Mito TDD é para projetos pequenos?!?! Kent Beck reportou em seu livro um projeto de 4 anos, com 40 desenvolvedores, 250 mil linhas de código e 250 mil linhas de teste! Mais de 4000 teste eram executados em intervalos menores que 20 minutos Todos os testes eram executados várias vezes ao dia Resultado: sucesso Test Driven Development (Hyggo Oliveira de Almeida) 12 Conclusão TDD é comprovadamente uma estratégia promissora para o seu projeto É muito mais uma questão de disciplina que de mudança filosófica! O projeto de SI1 deve ser feito com TDD Se você acha que não vai gostar, primeiro prove... 13 Bibliografia Kent Beck. Test-Driven Development by Example. Addison Wesley, 2003 David Astels. Test Driven Development: A Practical Guide.Prentice Hall, 2003 Martin Fowler. Refactoring: Improving the Design of Existing Code. AddisonWesley. 1999 Scott Ambler’s Web Site (http://www.ambysoft.com/) Test Driven Development (Hyggo Oliveira de Almeida) 14