Introdução ao TDD

598 visualizações

Publicada em

Introdução ao TDD - Palestra .NetRaptors 100loop apresentada Infórium

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
598
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
21
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Introdução ao TDD

  1. 1. Community .com Introdução ao T D D@CharlesFortes
  2. 2. Introdução ao Test-Driven Development .comCadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de UsuárioCadastro de Usuário Cadastro de Usuário Cadastro de Usuário @CharlesFortes
  3. 3. Introdução aoTest-Driven Development .com • Meu sistema pode ter no máximo 6 usuários; • Para poder cadastrar um usuário, deve-se estar logado no sistema e possuir permissão específica para isto; • Não podem haver dois logins iguais no sistema; • A senha deve ter no mínimo 6 caracteres e não pode ter mais de 50 caracteres; • Nome, Login e senha são campos obrigatórios; @CharlesFortes
  4. 4. Introdução aoTest-Driven Development .com O que é Test-DrivenDevelopment ? @CharlesFortes
  5. 5. Introdução aoTest-Driven Development .com É Desenvolver Focado no Caso de Testes, nas Especificações @CharlesFortes
  6. 6. Introdução aoTest-Driven Development .com WTF? É Desenvolver Focado no Caso de Testes, nas Especificações @CharlesFortes
  7. 7. Introdução aoTest-Driven Development .com Casos de Testes são condições aos quais o software deverá ser submetido para que possa ser testado quanto ao seu funcionamento adequado e verificando se ele atende ao que foi solicitado @CharlesFortes
  8. 8. Introdução aoTest-Driven Development .com Entende-se que nossa tela de cadastro de usuário está funcionando corretamente quando as seguintes condições estiverem satisfeitas: 1. Logado no sistema e tendo permissão para cadastrar usuários, cadastrar um usuário  Incluir corretamente, exibir mensagem de sucesso 2. Tentar inserir 7 usuário  O sistema não pode permitir, retornando uma exceção 3. Com 6 usuários cadastrados, remover um usuário e inserir um novo  Incluir corretamente, exibir mensagem de sucesso 4. Tentar cadastrar um usuário sem estar logado no sistema  Não permitir, retornar exceção 5. Estando logado no sistema, tentar cadastrar um usuário sem ter permissão  Não permitir, retornar exceção 6. Tentar cadastrar dois usuários com o mesmo nome  Não permitir, retornar uma exceção 7. Remover um usuário e cadastrar um novo com o mesmo nome @CharlesFortes
  9. 9. Introdução aoTest-Driven Development .com Entende-se que nossa tela de cadastro de usuário está funcionando corretamente quando as seguintes condições estiverem satisfeitas: 1. Tentar salvar um usuário com o login em branco  não permitir, retornar uma exceção 2. Tentar salvar um usuário com o nome em branco  não permitir, retornar uma exceção 3. Tentar cadastrar um usuário com senha em branco  não permitir, retornar uma exceção 4. Tentar cadastrar uma senha com 5 dígitos  não permitir, retornar uma exceção 5. Tentar cadastrar uma senha com 6 dígitos  Incluir corretamente, exibir mensagem de sucesso 6. Tentar cadastrar uma senha de 50 dígitos  Incluir corretamente, exibir mensagem de sucesso 7. Tentar cadastrar uma senha com 51 dígitos  não permitir, retornar uma exceção @CharlesFortes
  10. 10. Introdução aoTest-Driven Development .com Para cada um dos casos de testes apresentados anteriormente, deve existir um teste de unidade que o valide de forma absoluta. @CharlesFortes
  11. 11. Introdução aoTest-Driven Development .com WTF? Para cada um dos casos de testes apresentados anteriormente, deve existir um teste de unidade que o valide de forma absoluta. @CharlesFortes
  12. 12. Introdução aoTest-Driven Development .com Segundo a Wikipédia “Testes de unidade é um método pelo qual as unidades individuais do código-fonte são testados para determinar se eles estão aptos para o uso. A unidade é a menor parte testável de um aplicativo. Na programação procedural uma unidade pode ser uma função individual ou procedimento. Na programação orientada a objeto uma unidade é normalmente um método.” @CharlesFortes
  13. 13. Introdução aoTest-Driven Development .com Um teste de unidade, é um teste automatizado que testa uma funcionalidade/aspecto/Requisito do sistema i.e. Testar a capacidade do sistema de se permitir cadastrar um usuário dentro dos moldes do negócio @CharlesFortes
  14. 14. Introdução aoTest-Driven Development .com Testa @CharlesFortes
  15. 15. Introdução aoTest-Driven Development .com Teste de unidade deve ser executável independente dos dados O teste de unidade deve conter tudo o que o teste necessita, ele não pode depender de estados gerados por outros testes, ele deve funcionar tão bem sendo executado sozinho como com todos os demais Teste de unidade sempre será usado como teste de regressão @CharlesFortes
  16. 16. Introdução aoTest-Driven Development .com Teste de unidade feito por fazer não tem valor @CharlesFortes
  17. 17. Introdução aoTest-Driven Development .com Não altere ou exclua testes para ter um novo. O teste só deve mudar quando a funcionalidade mudar Teste de unidade deve testar o Contrato, não teste nada além do contrato @CharlesFortes
  18. 18. Introdução aoTest-Driven Development .com No modelo tradicional de desenvolvimento, primeiro se cria o código, e depois se implementam os testes necessários para seu funcionamento Planeja > Requisitos Teste de Aceite Planeja > Análise Teste de Sistema Planeja > Desenho Teste de Integração Planeja > Código Teste de Unidade @CharlesFortes
  19. 19. Introdução aoTest-Driven Development .com O problema deste modelo é que o teste muitas vezes se torna viciado, acaba sendo um teste criado para provar que o código funciona, e não para validar se há ou não falhas @CharlesFortes
  20. 20. Introdução aoTest-Driven Development .com Pensando em como solucionar este problema, foi criado o TDD Desenho reaproveitado de uma tirinha do site vidadeprogramador.com.br O texto apresentado não é o texto original da tirinha. @CharlesFortes
  21. 21. Introdução aoTest-Driven Development .com Pensando em como solucionar este problema, foi criado o TDD Planeja > Requisitos Teste de Aceite Análise Planeja > Teste de Sistema Desenho Planeja > Teste de Integração Planeja > Teste de Unidade Código @CharlesFortes
  22. 22. Introdução aoTest-Driven Development .com Quem diz: _“o importante é testar, não importa quando” esta errado, porque entende TDD como uma abordagem de testes. TDD utiliza testes para dirigir o desenvolvimento da aplicação @CharlesFortes
  23. 23. Introdução aoTest-Driven Development .com “Testes escritos antes do código da aplicação, antes de serem testes, são especificações” Giovanni Bassi @CharlesFortes
  24. 24. Introdução aoTest-Driven Development .com Dentre as vantagens desta abordagem estão o fato de que se desenvolve apenas o necessário e com agilidade E a segurança de que a aplicação continuará funcionando no futuro (evitando regressões), qualquer erro que apareça pode ser facilmente encontrado sem ficar debugando o código a esmo. @CharlesFortes
  25. 25. Introdução aoTest-Driven Development .com O TDD NÃO realiza todos os testes que o projeto precisa, ele apenas fornece uma direção para ser seguida durante o desenvolvimento que foca as especificações. Ele testa se o que foi solicitado funciona. O TDD deve ser realizado pelo desenvolvedor, de forma que guie seu raciocínio quanto a como e o que implementar @CharlesFortes
  26. 26. Introdução aoTest-Driven Development .com0100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100010000011110101010111111000001110011011010100101010100000111001101101010010101010010000011110100000001110001000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100 Lets Test01000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100010000011110101010111111000001110011011010100101010100000111001101101010010101010010000011110100000001110001000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100 @CharlesFortes
  27. 27. Introdução ao Test-Driven Development .comPensando em como solucionar este problema, foi criado o TDD @CharlesFortes
  28. 28. Introdução aoTest-Driven Development Pré-Condição .com Deve ser preparado o ambiente de testes, suas pré-condições Podem ser usados MOCKs, fakes, querys, a execução de outro teste (ou outros), etc... @CharlesFortes
  29. 29. Introdução aoTest-Driven Development Pré-Condição .com O Visual Studio usa a marcação TestInitialize em um método para executar algo que prepara o ambiente. @CharlesFortes
  30. 30. Introdução ao Domain-Driven Design .comu Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifiq @CharlesFortes
  31. 31. Introdução aoDomain-Driven Design .com @CharlesFortes
  32. 32. Introdução ao Domain-Driven Design .come Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore E @CharlesFortes
  33. 33. Introdução aoDomain-Driven Design .com @CharlesFortes
  34. 34. Introdução ao Domain-Driven Design .comque se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva @CharlesFortes
  35. 35. Introdução aoDomain-Driven Design .com @CharlesFortes
  36. 36. Introdução ao Domain-Driven Design .comque se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva @CharlesFortes
  37. 37. Introdução aoDomain-Driven Design .com @CharlesFortes
  38. 38. Introdução ao Domain-Driven Design .comque se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Es @CharlesFortes
  39. 39. Introdução aoTest-Driven Development .com VB6 @CharlesFortes
  40. 40. Introdução aoTest-Driven Development .com0100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100010000011110101010111111000001110011011010100101010100000111001101101010010101010010000011110100000001110001000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100 Lets Code01000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100010000011110101010111111000001110011011010100101010100000111001101101010010101010010000011110100000001110001000001111010101011111100000111001101101010010101010000011100110110101001010101001000001111010000000111000100000111101010101111110000011100110110101001010101000001110011011010100101010100100000111101000000011100 @CharlesFortes
  41. 41. Introdução aoTest-Driven Development .com http://bugbang.com.br http://artofunittesting.com http://www.agiledata.org/essays/tdd.html @CharlesFortes
  42. 42. Introdução aoTest-Driven Development @CharlesFortes br.linkedin.com/in/charlesfortes pangeanet.org/profile/charlesfortes

×