tdd - introdução e implementação

Download TDD - Introdução e Implementação

If you can't read please download the document

Upload: aislan-fernandes

Post on 24-Jun-2015

147 views

Category:

Documents


0 download

DESCRIPTION

Uma breve apresentação dos principais conceitos e práticas de TDD - Técnica de Desenvolvimento Orientada a Testes.

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.