Padrões para Desenvolvimento de Software Guiado por Testes

31
Padrões para Desenvolvimento de Software Guiado por Testes Tech Talk Coquelux Mantra Vermelho/verde/refatorar Everton Rodrigues

description

Padrões para Desenvolvimento de Software Guiado por Testes.

Transcript of Padrões para Desenvolvimento de Software Guiado por Testes

  • 1. Padres para Desenvolvimentode Software Guiado por Testes Tech Talk Coquelux Mantra Vermelho/verde/refatorar Everton Rodrigues
  • 2. "TDD uma forma de administrar o medo durante a programao"Quanto mais estresse voce sentir, menos vai testar. Quanto menos voce testar, mais erros vai acontecer. Quanto mais erros voce cometer, mais estresse vai sentir.
  • 3. Questo Porque conhecer Padrespara TDD, o que vai ajudar?
  • 4. Padres para TDD ajudam a responder as perguntas:- O que queremos dizer comtestar?- Quanto testamos?- Como escolhemos que logicatestar?- Como escolhemos quais dadostestar?
  • 5. Testes isolados "Faa testes to rapidos de executar que possa roda-los sozinho e roda-los frequentemente""Busque testes em pequena escala em vez de buscar na aplicao inteira"
  • 6. Lista de testesAntes de comear, escreva uma lista de todos os testes que sabe que tera que escrever.Se eu conseguir pensar em um teste que pode no funcionar, faze-lo funcionar mais importante que liberar meu codigo.
  • 7. Teste primeiro Quando voce deveria escrever seus testes?Antes de escrever o codigo que vai ser testado.
  • 8. A assero deve vir primeiro (Assert first)Quando eu deveria escrever as asseres? Escreva-as primeiro pensando: Qual a resposta certa? Como eu vou verificar? Ex: assertTrue, assertEquals. testIfRunBackup, testIfExportArchive
  • 9. Dados de teste (Test data)Use dados que faam os testes faceis de ler e seguir.A alternativa mais indicada paraDados de teste o uso de Dados realistas.
  • 10. Padres de Barra Vermelhaquando e onde escreve e para de escrever testes - One Step Test - Starter Test - Explanation Test - Learning Test - Another Test - Regression Test - Break (Pausa) - Do Over (Faa de novo) - Cheap Desk, Nice Chair
  • 11. Teste de aprendizado (Learning test)Quando voce escreve testes parasoftware produzido externamente?Antes da primeira vez que voc vai usar algum componente deste pacote externo.Ex: escreva um teste que verifica se a API funciona.
  • 12. Teste de regresso (Regression test) Qual a primeira coisa que voce faz quando um defeito informado?Escreva o menor teste possivel que falhee que, uma vez rodado, sera refatorado.
  • 13. Faa de novo (Do Over) O que voce faz quando se sente perdido?Jogue o codigo fora e comece de novo.
  • 14. Padres de Testeso tecnicas mais detalhadas para escrever testes - Teste filho (child test) - Objeto simulado (mock object) - Autodesvio (self shunt) - String de registro (log string) - Modelo de teste de acidentes - Teste quebrado (broken test) - Check-in limpo (clean check-in)
  • 15. Objeto Simulado (Mock Object) Como voce testa um objeto que se baseia em um recurso caro ou complicado?Crie uma verso faz de conta do recurso que responde com constantes. Ex: mockar o database
  • 16. String de registro (Log String) Como voc testa se a sequencia em queas mensagens so chamadas esta correta?Mantenha um registro em um string (log) e, quando uma mensagem for chamada, acrescente-a string. Ex: conectou selecionou alterou desconectou
  • 17. Modelo de teste de acidentes Como voce testa codigo de erro que provavelmente sera pouco invocado? Invoque-o de qualquer forma com umobjeto especial que lana uma exceo em vez de fazer o trabalho real.Ex: testar o que acontece com o filesystem cheio
  • 18. Teste quebrado Como voce deixa uma sesso deprogramao quando esta programando sozinho? Deixe o ultimo teste quebrado.
  • 19. Padres de Barra Verdepadres para fazer o codigo funcionar - Fazer de conta (Fake it) - Triangular (Triangulate)- Implementao obvia (Obvious Implementation)- Um para muitos (One to many)
  • 20. Fazer de conta (Fake it)Qual sua primeira implementao uma vez que tem um teste que no funciona? Retorne uma constante. Depois de ter o teste rodando, gradualmente transforme a constante em uma expresso usando variaveis. Ex: validar CSV gerado dinamicamente
  • 21. TriangularComo voc conduz abstrao com testes de forma mais conservadora?Abstraia apenas quando tiver dois ou mais exemplos. Ex: assertEquals(4, soma(1,3)) assertEquals (7, soma(3,4)) Outro exemplo?
  • 22. Padres xUnit xUnit frameworks - Assertion - Fixture - Fixture externa - Test method - Exception test All tests
  • 23. Assero Como voce verifica que os testes funcionaram corretamente? Escreva expresses booleanas queautomatizem seu julgamento sobre se o codigo funcionou ou no. Ex: assertTrue, assertFalse, assertInternalType, assertEquals Outro exemplo?
  • 24. Fixture Como voce cria objetos comuns necessarios para varios testes?Converta as variaveis locais nos testes em variaveis de instancia. Sobrescreva setUp() e inicialize aquelas variaveis. Ex: Dados especificos no banco dados
  • 25. Fixture externaComo voce libera recursos externos na fixture? Sobrescreva tearDown() e libere os recursos. Ex: fopen.close() Outro exemplo?
  • 26. Metodo de testeComo voce representa um unico caso de teste?Como um metodo cujo nome comea com "test". Ex: testIfArrayGreaterThanOne(), testIsString() Outro exemplo?
  • 27. Teste de exceo Como voce testa excees inesperadas? Pegue excees esperadas e ignore-as,falhando apenas se a exceo no lanada.1. exchange->addRate("USD","GBP",2);2. function testMissingRate() { try { exchange->findRate("USD", "GBP"); fail(); //exceo lanada } catch (Exception $e) { // exception }}
  • 28. Todos os testes Como rodar todos os testes juntos?Faa uma suite de todas as suites de testes,agregando os pacotes de testes da aplicao inteira.
  • 29. O Programador Sem Medo"So os testes de unidade que mantem seus codigos flexiveis, reutilizaveis e passiveis demanuteno. A razo simples. Se voc tivertestes, no tera medo de alterar codigo! Sem os testes, cada modificao pode gerar umbug! Com os testes esse medo praticamente some" Robert C. Martin
  • 30. Referencias Test Driven Development: By Example - Kent Beck Clean Code - Robert C. MartinA Relao Entre TDD e Qualidade de Software - InfoQwww.infoq.com/br/articles/relacao-tdd-qualidade