tdd - introdução e implementação
Post on 24-Jun-2015
147 Views
Preview:
DESCRIPTION
TRANSCRIPT
TDD - IntroduoTcnica de editar o estilo do subttulo mestre Clique paraDesenvolvimento e Design de Software
Objetivos do TDDEncorajar um bom design Produzir cdigo testvel Manter-nos longe de engenharia excessiva ou
pesada Evitar cdigo mal escrito, difcil de entender e de mudar Cortar o tempo em tarefas no produtivas:Debugging Resolvendo bugs
ConceitoIngrediente chave de metodologias geis Extreme Programming (XP) Scrum fazer certoFazer a coisa certa Acceptance TDD (ATDD)
Test-code-refactor/Red-green-refactor TDD = Test Driven Development TDD = Test Driven Design
FuncionamentoCiclo TDD Escreva o teste, e somente ento
escreva o cdigo para passar no teste. Por fim, transforme o design atual num melhor (refactor). Repetio dos ciclos TDD = design evolucionrio ou desenvolvimento Refact incremental Test Code or
Design EvolucionrioOne of the fundamental lessons in designing an
interface is that we only evaluate a design effectively and objectively when we try to use it. By writing the test first, we are ensuring that we will not miss that feedback.* When we write a test () were making design decision evolutionary design is less expensive than trying to get the final design on paper in the beginning.* focusing on the present is central to TDD*
* KOSKELA, 2008
Design EvolucionrioWriting the tests before the code does
indeed enforce a certain level of testability, but it helps if were aware of what kinds of designs promote testability and what kinds of designs might work now but will likely blow up soon after*
* KOSKELA, 2008
RefactoringTcnica para reestruturar um cdigo
existente, alterando sua estrutura interna sem alterar seu comportamento externo* Refactoring disciplinadoNo prevemos e nem nos preparamos para
problemas de design antes de ter um em mos, criando mais problemas
Refactoring to patterns Geralmente o refactoring orientado a design patterns*** FOWLER, 1999 ** KERIEVSKY, 2004
FerramentasFrameworks de testes EasyMock (dynamic mock object library) JUnit Maven Continuous Integration (Server) Hudson TeamCity Code CoverageEMMA (Eclipse Plugin)
EasyMock Ms Prticas
vazias como mocks de interfaces ou classes abstratas Atualizaes desnecessrias nas mudanas de interfaces ou classes abstratas Mock melhora o foco no teste e no no seu ambiente Exemplo de EasyMockPricingService mock = createMock(PricingService.class); expect(mock.getDiscountPercentage(custome r, product)).andReturn(discount);
Construo de classes (parcial)
Mocks
Fakes
Stubs
Continuous IntegrationA prtica do TDD a mdio e longo prazo gera
um portflio de testes No possvel executar todos os testes Executar suite de testes a cada pequena mudana permite um feedback imediato Servidor de IC permite:Feedback imediato ser contnuo Automatizar a execuo do restante dos
testes
TDD ImplementaoTcnica de editar o estilo do subttulo mestre Clique paraDesenvolvimento e Design de Software
Estratgias de Primeiros Passos
Tcnicas ou Estratgias Decomposio de Requisitos Programao por Inteno Decomposio de Requisitos Procure decompor o requisito em testes em vez de tarefas (testes aumentam o foco no que necessrio) Escreva cada teste como uma breve sentena The requirements have been transformed into something thats clearly a degree more concrete, more executable, more example-like. Lista de Testes = Documento vivo do requisito
Estratgias de Primeiros Passos por Inteno ProgramaoComo escrever o teste sem cdigo algum? Escreva como se o cdigo existisse! Tcnica para ajudar a focar no que
necessitamos e no no que temos.
Decomposi o de requisito
Programa o por inteno
Estratgias de Implementao Estratgias ou PassosFaking it Triangulation Obvious implementation
Implementation Faking it Passo mais fcil para o Triangulatio teste passar (red n green) Ter um momento maisFaking concreto it Comece retornando valores hardcoding
Estratgias de Implementao Triangulationtransformar cdigo fake em cdigo de produo Quando no temos uma clara idia de como transformar o fake em trecho de Obvious implementation cdigo, os testes Aps triangulao, o trabalho restante vai levam soluo correta bvio ou bem mais natural parecerTcnica para
Estratgias de Seleo de Testequal estratgia? Comear porDetalhada (algoritmo) ou Abrangente (design
com mocks) Incerta ou Conhecida Alto Valor ou Baixo Valor Bsico ou Situaes de Erro
No h frmula mgica, com a prtica a
escolha ser mais natural!
Boas Prticas Granularidade do teste
minutos Exceto quando depende do domnio, das ferramentas ou da tecnologia em questo. Granularidade da implementao para o teste Deve acompanhar a granularidade do teste Qualidade do teste Atmico (Coeso) Isolado Enxuto (aproximadamente 10 linhas de cdigo) Design Testvel Prefira padres de projeto que torne o design testvel
A construo de um teste deve demorar alguns segundos ou poucos
Design Testvel PrincpiosPrefira composio em vez de heranaMais cdigo Melhor testabilidad e, flexibilidade e manuteno
Procure isolar e injetar dependnciasMais cdigo Melhor testabilidad ee manuteno
AdicionaisPadres de Testes Escrita de assertivas Estrutura e construo de contextos compartilhados de testes (fixtures) Cdigo Legado Analisar a mudana Preparar para a mudana Mude orientado a teste ATDD Concordion
RefernciasKOSKELA, Lasse. Test Driven: Pratictal TDD
and Acceptance TDD for Java Developers. Manning. Greenwich, 2008. FOWLER, Martin. Refactoring: Improving the Design of Existing Code. Addison-Wesley. 1999. KERIEVSKY, Joshua. Refactoring to Patterns. Addison-Wesley. 2004.
top related