Download - TDD - A Verdadeira Face do Teste
![Page 2: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/2.jpg)
RoteiroContextosConceitosFerramentasTécnicasDemonstração
![Page 3: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/3.jpg)
ReferênciasKOSKELA, 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.
BECK, Kent. Programação Extrema (XP) Explicada – Acolha as mudanças. Porto Alegre: Bookman, 2004.
![Page 4: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/4.jpg)
Projeto
Custo
Tempo
Qualidade
Escopo
Contexto Maior (Organização)
Software Mudanças
Engenharia de
Software
![Page 5: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/5.jpg)
Contexto Menor (Equipe)
O custo da mudança não é exponencial mas achatado
Não há aquele código difícil de modificar , acompanhado de medo e da falta de testes para verificar se houve efeito colateral.
TDD é um ingrediente chave
* BECK, 2004; **LARMAN, Craig.
Metodologias Ágeis
Iterativo e Incremental
XP Scrum PU**
“Mudança é uma constante, o problema é falta de habilidade”*
![Page 6: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/6.jpg)
ConceitoTDD não é desenvolvimento com testes!
Regra 10 de Myers
Quanto mais cedo defeito descoberto
menor custo de correção
![Page 7: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/7.jpg)
ConceitoTDD = fazer certo TDD = Test-code-refactorTDD = Red-green-refactorTDD = Test Driven DevelopmentTDD = Test Driven DesignTDD = Test-First Programming
* Erich Gamma
Acceptance TDD (ATDD) = fazer a coisa certa ≈ BDD
“Infectado por Testes”* = não codificar sem teste antes
![Page 8: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/8.jpg)
100%
Objetivos* BenefíciosEncorajar um bom designProduzir código testávelEvitar engenharia excessiva ou
pesadaEvitar código mal escrito, difícil de
entender e de mudarCortar o tempo em tarefas não
produtivas:DebuggingResolvendo bugsEntendendo código ilegível
Testes
Revelar falhas
Mostrar que faz o que deve ser
feito
Revelar design
Especificar em exemplos
* KOSKELA, 2008
Programar e testar ao mesmo tempo é mais rápido do que apenas programar!
![Page 9: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/9.jpg)
FuncionamentoCiclo TDD Escreva o teste, e somente então escreva o
código para passar no teste. Por fim, transforme o design atual num melhor (refactor).
Repetição dos ciclos TDD = design evolucionárioQuando parar?Ponto de satisfação ≈ conhecimento de padrões de projeto
Test
Code
Refactor
Test
Code
Refactor
* BECK, 2004
“Os testes me dão a chance de pensar sobre o que eu quero independentemente da
implementação.”*
![Page 10: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/10.jpg)
* KOSKELA, 2008
Design
evolucionário
Design em papel
no come
ço
Design EvolucionárioFeedback imediato design somente evolui
quando efetiva e objetivamente o usamos, escrevendo o teste antes*Escrever teste = decidir sobre design
Focado no presente menos custosoUso de code coverage gordura?Priorizado em histórias
“Quando você acrescenta mais ao projeto hoje, você aumenta a sobrecarga do sistema. Há
mais coisas para testar, entender e explicar”**“Os problemas de hoje já são
suficientes”**** BECK, 2004
![Page 11: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/11.jpg)
* KOSKELA, 2008
Design EvolucionárioTestar + Refatorar Escrever testes antes
promove um certo nível de testabilidade, porém é preciso estar consciente de não construir um que funciona agora mas pode explodir em breve *
Design Testável Prefira composição em vez de herança
Mais código Melhor testabilidade, flexibilidade e manutenção
Procure isolar e injetar dependências
Mais código Melhor testabilidade e manutenção
![Page 12: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/12.jpg)
RefactoringTécnica para reestruturar um código
existente, alterando sua estrutura interna sem alterar seu comportamento externo*
DisciplinadoNão prevemos e nem nos preparamos para
problemas de design antes de ter um em mãos, evitando criar mais problemas
PadronizadoRemoção de código duplicadoProblemas específicos
* FOWLER, 1999
HerdarDelegar
HerançaComposição
GRASP
GoF
![Page 13: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/13.jpg)
Ferramentas
Análise EstáticaEMMA Code
CoveragePMD Duplicação e
padrões
Frameworks EasyMock JUnitDBUnit
Integração ContínuaHudsonTeamCityApache Continuum
![Page 14: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/14.jpg)
EasyMockMá Prática classes
vazias como mocksFoco preocupação
com teste e não com ambiente
Problemas erros de compilação nos testes quando mudam as interfaces
Mocks
Stubs
ITranslator mockTranslator = createMock(ITranslator.class);
Greeting greeting = new Greeting(mockTranslator);
expect(mockTranslator.translate("English", "Hindi",
"Hello")).andReturn("Namaste");replay(mockTranslator);
assertEquals("Namaste Paulo", greeting.sayHello("Hindi", "Paulo"));
verify(mockTranslator);
![Page 15: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/15.jpg)
Integração ContínuaMédio e longo prazo repositório de testes
difíceis de gerenciar individualmente Não é possível executar todos os testesExecutar suite de testes a cada pequena
mudança permite um feedback imediato
![Page 16: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/16.jpg)
Implementação
Decomposição de Requisito* criar uma lista de testes em vez de tarefas Foco no que é necessário e não no que
poderia ser feitoProgramação por Intenção* escrever teste
sem código algum, como se o código existisse!Foco no que necessitamos e não no que temos
Decomposição de
requisito
Programação por
intenção
* KOSKELA, 2008
Teste é algo um pouco mais concreto, mais executável, mais exemplificativo do que o requisito
![Page 17: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/17.jpg)
ImplementaçãoQual teste selecionar?Estratégias*
“Primeiro pelos Detalhes” X “Primeiro pelo Todo”
Incerto X FamiliarMaior Valor X Menor Valor“Caminho Feliz” X Situações de Erro
Não há fórmula mágica!
* KOSKELA, 2008
![Page 18: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/18.jpg)
Faking
Triangulação
Implementação
ImplementaçãoEtapas*
FakingTriangulaçãoImplementação Óbvia
FakingPasso mais fácil para o
teste passar (red green)
Ter um momento mais concreto
Comece retornando valores hardcoding
* KOSKELA, 2008
![Page 19: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/19.jpg)
Implementação
Implementação ÓbviaApós triangulação, o trabalho restante vai
parecer óbvio ou bem mais natural
Triangulação transformar código fake em código de produçãoOs testes levam à
solução corretaTriangular = variar
testes com novos valores
![Page 20: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/20.jpg)
DemonstraçãoX LTDA
Mostra 1 em 1 semana
Mudança!
Aceita e não entrega a 3.
História 3
História 2
Histó
ria 1
![Page 21: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/21.jpg)
DemonstraçãoX LTDA
TDD história 1
Mudança refactoring
Maior valor ficou!
![Page 22: TDD - A Verdadeira Face do Teste](https://reader033.vdocuments.pub/reader033/viewer/2022052600/55799b1dd8b42ae72b8b52ad/html5/thumbnails/22.jpg)
Considerações FinaisBoas práticas
Qualidade do teste atômico e enxutoGranularidade do código = teste
Outras aplicaçõesCódigo legadoInterface gráfica
DificuldadesTrabalho em equipe (coesão alta)Cultura (pré-conceito e atitude)Conhecimento de padrões
Curso de TDD