O documento descreve os conceitos e benefícios do Desenvolvimento Guiado por Testes (TDD), incluindo suas regras fundamentais, ciclo de desenvolvimento, tipos de testes, e consequências como código mais testável e integração contínua.
Regras fundamentais doTDD: Escreva o teste da implementação ANTES de escrevê-la Escreva somente código suficiente para o teste passar e nada além disso Escreva testes pequenos: teste a menor quantidade possível de código de cada vez Escreva testes muito rápidos: não devem demorar mais do que alguns segundos para serem executados
4.
Ciclo do desenvolvimentocom TDD: Criar um teste Executar todos os testes da aplicação para ver o novo teste falhar Escrever a implementação testada Executar os testes para ver se todos passarão Refactoring Executar os testes novamente para garantir que eles continuam passando
Motivações para adoçãode TDD: Design pouco testável Baixa cobertura de testes unitários Necessidade de “levantar” todo o ambiente para desenvolver e testar Necessidade de manter compatibilidade retroativa Insegurança ao modificar base de código
Tipos de testes:Testes Unitários Testes de Integração Testes de Aceitação
9.
1. Testes Unitários:Testam apenas um componente do sistema Todos os outros componentes são simulados (mock objects) Ferramentas: JUnit, JMock/EasyMock Fundamental para a prática do TDD!
10.
2. Testes deIntegração: Testam a integração entre componentes Envolvem dois ou mais componentes (classes+SGBD, classes+SGBD+Fast, etc.) Ferramentas: JUnit, DBUnit, HSQLDB, Fit Normalmente não utilizado em TDD
11.
3. Testes deAceitação: Testam uma história, funcionalidade ou caso de uso Envolvem vários componentes do sistema Ferramenta : JUnit, Selenium Pode ser utilizado em TDD
11. Execução doteste: (teste passou: temos 100% de certeza que o código CONTINUA funcionando e que nenhum componente que depende deste código quebrou após o refactor)
Consequências: Suite deregressão Testes completos sendo executados no build: aplicação não sobe para produção se não passar no teste de regressão Testes também pode ser feitos na IDE Não há necessidade de deploy da aplicação para execução dos teste s Bugs são encontrados com maior facilidade e corrigidos com maior velocidade Bugs comprovados por testes unitários
26.
Consequências: Código maistestável Estimula um design melhor Força que os designs antigos que são pouco testáveis sejam refatorados Facilita o refactoring Evita “overdesign” Só se escreve código suficiente para o teste passar Evita que o desenvolvedor fique tentando adivinhar o futuro Colabora com a documentação
Conclusões: Colabora parao aumento da qualidade dos sistemas Desenvolvedores ficam mais corajosos e confiantes ao programar! Software cresce de forma ordenada e com qualidade de design Software se adapta com mais facilidade a mudanças
Conclusões: Demora mais?No início é necessário escrever muitos testes Depois da inércia a suite de regressão está pronta e escrevem-se menos testes Certeza de que a implementação está funcionando Maioria dos bugs encontrados em tempo de desenvolvimento Bugs de produção são encontrados e corrigidos com muito mais velocidade Então no fim das contas demora-se muito menos tempo e com muito mais qualidade!
33.
Leitura complemetar: Introductionto TDD: http://www.agiledata.org/essays/tdd.html Desenvolvimento Orientado a Testes: http://www.improveit.com.br/xp/praticas/tdd Screencast TDD em ação: http://dojofloripa.wordpress.com/2007/05/21/screencast-tdd-em- acao/ Improve your unit tests by replacing your collaborators with mock objects: http://www.opensourcetutorials.com/tutorials/Server-Side-Coding/Java/java-unit-testing-with-mock-objects Behaviour-Driven Development: http://behaviour-driven.org/