Desenvolvimento Orientado por Testes                  Daniel Capó Sobral
Ou não?
Taxonomias• Funcional       • Automático     • Caixa Preta     • Exploratório   • Teste• Não             • Manual         ...
NíveisEscopo do Objeto TestadoUnit Testing  Integration Testing     System Testing        System Integration Testing
NíveisObjetivo do Teste              Smoke Test              Regressão              Aceitação                Alpha        ...
Não funcional    Performance            Carga           Usabilidade                     Internacionalização     Segurança ...
“In test-driven development a developer creates automated unittests” – wikipedia
O que é TDD?TDD é sobre comoescrever código deaplicação.                                Teste Unitário                    ...
Porque não fazer TDD?  Curva de Aprendizado Íngreme:  • Como escrever testes?  • Como escrever código testável?  • Como us...
Porque fazer TDD?  Menor Custo de Manutenção  • Confiança para efetuar mudanças  • Testes resguardam contra regressão  Mai...
O que dizem os estudos?                 • Inconclusivo                 • Boa correlação, mas...                 • Isolamen...
Famous last words.
Dificuldades                                                    Que nome dar                                              ...
O que é um bom teste unitário?Deve ser fácil de implementar.Deve ser automatizável e reproduzível de forma confiável.Qualq...
Teste (automatizado) é Código                        Arcabouço, Armação, Andaime                                Removido a...
Removendo dependências: FakesStubs             Mocks                Teste de  Teste de   estado               Interação   ...
Três leis de TDD Você não pode escrever código de aplicação exceto para            fazer passar um teste unitário.  Você n...
Três fases de TDD                          Vermelho                          • Escrever código                            ...
Fluxo de TDD                            Não                                    Executa teste         Escrever teste       ...
DemonstraçãoJogo de Boliche Regras:    10 jogadas (frames)    1 ou 2 arremessos por jogada (1ª à 9ª)    2 ou 3 arremes...
Diagrama de Classe TODO
Escrevendo o código com TDD TODO
Discutir!
Referências Clean Coders (Robert Martin) Making Software: What Really Works, and Why We    Believe It (Andy Oram & Greg ...
Introdução a TDD
Introdução a TDD
Upcoming SlideShare
Loading in …5
×

Introdução a TDD

857 views
755 views

Published on

Introduz TDD, situando em relação aos diversos tipos de testes existentes.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
857
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introdução a TDD

  1. 1. Desenvolvimento Orientado por Testes Daniel Capó Sobral
  2. 2. Ou não?
  3. 3. Taxonomias• Funcional • Automático • Caixa Preta • Exploratório • Teste• Não • Manual • Caixa Branca • Pré-definido Primeiro Funcional • Caixa Cinza • Teste por Último Informação Momento deObjeto de teste Execução Planejamento sobre o sistema escrita• Qualitativo • Estático • Estado • Verificação • TDD• Quantitativo (tipos, • Interação • Validação • ATDD provas) • BDD • Dinâmico Execução do Comportamento Contratado vs Técnica deResultado código testado observado Desejado Escrita
  4. 4. NíveisEscopo do Objeto TestadoUnit Testing Integration Testing System Testing System Integration Testing
  5. 5. NíveisObjetivo do Teste Smoke Test Regressão Aceitação Alpha Beta
  6. 6. Não funcional Performance Carga Usabilidade Internacionalização Segurança Destrutivo e Localização Compatibilidade Escalabilidade etc
  7. 7. “In test-driven development a developer creates automated unittests” – wikipedia
  8. 8. O que é TDD?TDD é sobre comoescrever código deaplicação. Teste Unitário Automatizado Teste Primeiro Técnica de Desenvolvimento de Software TDD não é sobre como escrever testes!
  9. 9. Porque não fazer TDD? Curva de Aprendizado Íngreme: • Como escrever testes? • Como escrever código testável? • Como usar as ferramentas? • Como se faz TDD? Menor Produtividade • Mais linhas de código • Interrupções constantes Maior Custo de Manutenção • Mais código, mais manutenção • Mudanças de arquitetura quebram testes! • Mudanças de comportamento quebram testes!
  10. 10. Porque fazer TDD? Menor Custo de Manutenção • Confiança para efetuar mudanças • Testes resguardam contra regressão Maior Produtividade • YAGNI! (You Ain’t Gonna Need It!) significa menos desperdício • Menos tempo corrigindo bugs: estava funcionando a cinco minutos atrás! Maior Qualidade • Mais testes leva a menos bugs • Testes unitários compreensivos resultam em baixo acoplamento
  11. 11. O que dizem os estudos? • Inconclusivo • Boa correlação, mas... • Isolamento • TDD ou outras práticas ágeis? • TDD ou número de testes? Maior • Mais testes levam a menos bugs? Confirmado. Qualidade? • Curva de aprendizado íngreme dificulta grupos de controle • Inconclusivo • Conforme estudo, melhor, pior ou indiferente EaProdutividade?
  12. 12. Famous last words.
  13. 13. Dificuldades Que nome dar aos testes? Quanto se O que não testar de cada testar? vez? O que testar? Como Onde entender começar? porque o teste falhou? Como separar uma unidade de suas dependências? Fonte: Introducing BDD, Dan North
  14. 14. O que é um bom teste unitário?Deve ser fácil de implementar.Deve ser automatizável e reproduzível de forma confiável.Qualquer um deve ser capaz de executá-lo, sem setups complicados.Deve ser executável com um simples click.Deve executar rapidamente.Uma vez escrito, deve ser preservado para uso futuro. Fonte: The Art of Unit Testing, Roy Osherove
  15. 15. Teste (automatizado) é Código Arcabouço, Armação, Andaime Removido ao fim da Mas software sem manutenção Ajuda a construir construção é software morto! Atenção com Manutenção Qualidade Legibilidade Refatoração Code Rot Em outras palavras, deve receber as mesmas atenções que o código da aplicação!
  16. 16. Removendo dependências: FakesStubs Mocks Teste de Teste de estado Interação Como? Asserções Injeção de Dependências Espelhamento
  17. 17. Três leis de TDD Você não pode escrever código de aplicação exceto para fazer passar um teste unitário. Você não pode escrever código de teste mais do que o necessário para falhar; falhar compilação também conta.Você não pode escrever código de aplicação mais do que o suficiente para fazer um teste unitário passar. Segundo Robert Martin
  18. 18. Três fases de TDD Vermelho • Escrever código de teste para evidenciar falha Azul Verde • Refactoring de • Escrever código código de aplicação (aplicação e para corrigir testes) falha
  19. 19. Fluxo de TDD Não Executa teste Escrever teste Falhou? Sim Sim Sim Não Passou? Escrever aplicação Executa teste Executa teste Refatoração Sim Não Passou? (aplicação e testes)
  20. 20. DemonstraçãoJogo de Boliche Regras:  10 jogadas (frames)  1 ou 2 arremessos por jogada (1ª à 9ª)  2 ou 3 arremessos na 10ª jogada  10 pinos  1 ponto por pino derrubado  Spare – 10 pinos derrubados em 2 arremessos  10 pontos + próximo arremesso  Strike – 10 pinos derrubados em 1 arremesso  10 pontos + 2 próximos arremessos
  21. 21. Diagrama de Classe TODO
  22. 22. Escrevendo o código com TDD TODO
  23. 23. Discutir!
  24. 24. Referências Clean Coders (Robert Martin) Making Software: What Really Works, and Why We Believe It (Andy Oram & Greg Wilson) The Art of Unit Testing: with Examples in .Net (Roy Osherove) Introducing BDD (Dan North) Wikipedia (duh!) Test Driven Development: By Example (Kent Beck)

×