Universidade de Belo Horizonte<br />Desenvolvimento Dirigido por Testes<br />Camilo Ribeiro<br />camilo@camiloribeiro.com<...
Camilo Ribeiro<br /><ul><li>Mais de cinco anos de experiência em Engenharia de Software
Consultor em arquitetura de teste e qualidade de software
Instrutor e professor de teste de software na Iterasys
Graduado em Sistemas pela Internet pela Faculdade Pitágoras
Pós graduado em Engenharia de Software pela UFMG
Certificado pelo ISTQB, ALATS e ETS
Mantedor do blog técnico The Bug BangTheory (www.bugbang.com.br)
Palestrante e entusiasta de teste de software</li></ul>www.about.me/camiloribeiro<br />www.twitter.com/camiloribeiro<br />...
Agenda<br /><ul><li>O que é teste de unidade
Motivação para existência do teste de unidade
Problemas dos testes de unidade
Motivação para o TDD
Como funciona o TDD
Mitos sobre o TDD
Exemplos em .net
Framework Praxis em Java</li></ul>Fiquem à vontade para questionar qualquer assunto ou perguntar suas dúvidas.<br />Ao fin...
Não sou Desenvolvedor<br />Sou um testador que aprendeu um pouco dos dois caminhos <br />
Conceito: Teste de Unidade<br />Teste realizado com os componentes individuais de um software. [Subsequente ao IEEE 610] –...
O Modelo V Tradicional<br />Planeja ><br />Teste de Aceite<br />Requisitos<br />Teste de Sistema<br />Planeja ><br />Análi...
Problema de escrever testes depois<br />Você escreverá testes para passarem. <br />Testes não podem ser feitos para “passa...
TDD vem pra resolver esse problema<br />
O modelo V aplicado ao TDD<br />Planeja ><br />Teste de Aceite<br />Requisitos<br />Teste de Sistema<br />Planeja ><br />A...
Framework de Teste de Unidade<br />Código de produção<br />Requisitos<br />Gera<br />É testado por<br />Classe de Teste<br...
Considerações sobre Teste de Unidade<br />Teste de unidade valida uma unidade;<br />Teste de unidade deve ser executável i...
Outras Considerações Teste de Unidade<br />Nunca use lógica em testes de unidade. Testes de unidade devem ser configurados...
Como o TDD Funciona?<br />
O que tem de teste de software?<br />Uso de técnicas de teste como valores limites, partição de equivalência ou qualquer o...
O que tem de desenvolvimento?<br />Orientação por Objetos;<br />Acesso a bancos de dados e qualquer outro repositório usad...
Como o TDD Funciona?<br />Adicionar um teste: Incluir um teste, que pode por exemplo, ter o formato de um caso de teste.<b...
Próximos SlideShares
Carregando em…5
×

Desenvolvimento Dirigido por Testes

2.319 visualizações

Publicada em

Palestra realizada para os alunos das áreas de comutação e sistemas do UNIBH, durante a Jornada Tecnológica de 2011

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

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

Nenhuma nota no slide

Desenvolvimento Dirigido por Testes

  1. 1. Universidade de Belo Horizonte<br />Desenvolvimento Dirigido por Testes<br />Camilo Ribeiro<br />camilo@camiloribeiro.com<br />www.bugbang.com.br<br />
  2. 2. Camilo Ribeiro<br /><ul><li>Mais de cinco anos de experiência em Engenharia de Software
  3. 3. Consultor em arquitetura de teste e qualidade de software
  4. 4. Instrutor e professor de teste de software na Iterasys
  5. 5. Graduado em Sistemas pela Internet pela Faculdade Pitágoras
  6. 6. Pós graduado em Engenharia de Software pela UFMG
  7. 7. Certificado pelo ISTQB, ALATS e ETS
  8. 8. Mantedor do blog técnico The Bug BangTheory (www.bugbang.com.br)
  9. 9. Palestrante e entusiasta de teste de software</li></ul>www.about.me/camiloribeiro<br />www.twitter.com/camiloribeiro<br />camilo@camiloribeiro.com<br />
  10. 10. Agenda<br /><ul><li>O que é teste de unidade
  11. 11. Motivação para existência do teste de unidade
  12. 12. Problemas dos testes de unidade
  13. 13. Motivação para o TDD
  14. 14. Como funciona o TDD
  15. 15. Mitos sobre o TDD
  16. 16. Exemplos em .net
  17. 17. Framework Praxis em Java</li></ul>Fiquem à vontade para questionar qualquer assunto ou perguntar suas dúvidas.<br />Ao final teremos alguns exemplos práticos e tempo para perguntas também.<br />
  18. 18. Não sou Desenvolvedor<br />Sou um testador que aprendeu um pouco dos dois caminhos <br />
  19. 19. Conceito: Teste de Unidade<br />Teste realizado com os componentes individuais de um software. [Subsequente ao IEEE 610] – Glóssário de termos do ISTQB<br />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. Os testes unitários são criados por programadores ou ocasionalmente por testadores de caixa branca durante o processo de desenvolvimento. – Tradução Literal da Wikipedia Inglesa<br />
  20. 20. O Modelo V Tradicional<br />Planeja ><br />Teste de Aceite<br />Requisitos<br />Teste de Sistema<br />Planeja ><br />Análise <br />Teste de Integração<br />Planeja ><br />Desenho<br />Planeja ><br />Código<br />Teste de Unidade<br />
  21. 21. Problema de escrever testes depois<br />Você escreverá testes para passarem. <br />Testes não podem ser feitos para “passar”, devem ser feitos para avaliar o código de produção. <br />Testes feitos para ter testes não tem valor.<br />
  22. 22. TDD vem pra resolver esse problema<br />
  23. 23. O modelo V aplicado ao TDD<br />Planeja ><br />Teste de Aceite<br />Requisitos<br />Teste de Sistema<br />Planeja ><br />Análise <br />Teste de Integração<br />Planeja ><br />Desenho<br /> Gera ><br />Código<br />Teste de Unidade<br />
  24. 24. Framework de Teste de Unidade<br />Código de produção<br />Requisitos<br />Gera<br />É testado por<br />Classe de Teste<br />Acessa<br />Acessa<br />Implementa<br />Dados(DB, XML, Excel)<br />Framework<br />
  25. 25. Considerações sobre Teste de Unidade<br />Teste de unidade valida uma unidade;<br />Teste de unidade deve ser executável independente dos dados;<br />O teste de unidade deve conter tudo o que o teste necessita;<br />Teste de unidade não é teste de integração (Cuidado)<br />Teste de unidade feito por fazer não tem valor;<br />Teste de unidade sempre será usado como teste de regressão<br />
  26. 26. Outras Considerações Teste de Unidade<br />Nunca use lógica em testes de unidade. Testes de unidade devem ser configurados (Não queremos mais bugs :p )<br />Não altere ou exclua testes para ter um novo. Sempre adicione o novo. O teste só deve mudar quando a funcionalidade mudar; <br />Quando todos os testes passarem, mude algum if, mude atribuições e retornos de lugar no seu código de produção para ver se os testes são efetivos;<br />Code Review e Test Code Review tem a mesma importância;<br />Teste de unidade deve testar o Contrato, não teste nada além do contrato;<br />Testes de unidade devem ser isolados;<br />Reuse o código de teste;<br />
  27. 27. Como o TDD Funciona?<br />
  28. 28. O que tem de teste de software?<br />Uso de técnicas de teste como valores limites, partição de equivalência ou qualquer outra técnica usada para testes de sistema;<br />Casos de teste (em forma de código);<br />São requeridas as mesmas skills dos testes funcionais (criatividade, curiosidade, senso crítico, etc.)<br />. . .<br />
  29. 29. O que tem de desenvolvimento?<br />Orientação por Objetos;<br />Acesso a bancos de dados e qualquer outro repositório usado em programação;<br />Padrões de projeto como commanded, value object, imposter, factory method e composite ou qualquer outro usado em programação;<br />Acesso irrestrito a todos os recursos da linguagem e IDE usada;<br />. . .<br />
  30. 30. Como o TDD Funciona?<br />Adicionar um teste: Incluir um teste, que pode por exemplo, ter o formato de um caso de teste.<br />Executar o teste: Devemos ter certeza que o teste falha antes da implementação. Se necessário, desenvolva apenas o contrato ou mockspara isso;<br />Desenvolva: Agora complete seu contrato com o código funcional, como sempre fez. <br />Execute o teste: Agora o teste deve passar. Caso existam defeitos, o teste de unidade vai demonstrar erros;<br />Correção e reteste: Agora mude o código fonte de produção até que o teste de unidade tenha um resultado positivo;<br />*Se algo nos requisitos mudar, os testes mudam.<br />http://www.agiledata.org/essays/tdd.html<br />
  31. 31. Tem pra Java?<br />http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks<br />
  32. 32. Tem pra .Net?<br />http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks<br />
  33. 33. Tem pra outras linguagens?<br />2.41 Perl<br />2.42 PHP<br />2.43 PL/SQL<br />2.44 PostgreSQL<br />2.45 PowerBuilder<br />2.46 Progress 4GL<br />2.47 Prolog<br />2.48 Python<br />2.49 R programming language<br />2.50 REALbasic<br />2.51 Rebol<br />2.52 RPG<br />2.53 Ruby<br />2.54 SAS<br />2.55 Scala<br />2.56 Scheme<br />2.57 Shell<br />2.58 Simulink<br />2.59 Smalltalk<br />2.60 SQL<br />2.61 TargetLink<br />2.62 Tcl<br />2.63 TinyOS/nesC<br />2.64 Transact-SQL<br />2.65 Visual FoxPro<br />2.66 Visual Basic (VB6)<br />2.67 Visual Lisp<br />2.68 XML<br />2.69 XSLT<br />2.70 Other<br />Pyunit<br />http://pyunit.sourceforge.net/pyunit.html<br />PHPUnithttp://phpunit.sourceforge.net/<br />CppTest<br />http://cpptest.sourceforge.net/<br />Test::Unit<br />http://test-unit.rubyforge.org/<br />http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks<br />
  34. 34. Classe de teste = Caso de Teste<br />
  35. 35. Pré-Condição<br />Podem ser usados MOCKs, Stubs, fakes, procedures (Querys), importações, ou qualquer outro recurso computacional para preparar o ambiente para o teste.<br />A pré-condição também pode ser a execução de outro teste (ou outros).<br />O Visual Studio usa o atributteTestInitialize em um método para executar algo que prepara o ambiente.<br />Aqui é onde configuramos o teste<br />
  36. 36. Passos ou Procedimentos de Teste<br />São feitas as atribuições e executadas as funcionalidades. <br />Aqui também são feitas conferências parciais se necessárias.<br />Para finalizar é realizado ultimo procedimento que deve realizar a funcionalidade a ser testada.<br />Aqui é onde configuramos o que será testado<br />
  37. 37. Resultados Esperados / Pós condições<br />Aqui são realizadas a comparação (ou comparações se necessária mais de uma) entre o resultado esperado e o resultado atual.<br />Normalmente o framework disponibiliza recursos para execução e registro automático do teste. <br />Aqui é onde verificamos se o resultado esperado e atual são iguais<br />
  38. 38. Hello Word em JUnit<br />Testa<br />
  39. 39. Hello Word em MS UnitTest Framework<br />Testa<br />
  40. 40. Mitos sobre TDD<br />Só TDD realiza todos os testes que meu projeto precisa;<br />TDD deve ser realizado pelo Analista de Testes;<br />TDD é uma prática exclusiva de métodos ágeis;<br />Testes de Unidade e Testes Funcionais Automatizados são a mesma coisa;<br />TDD faz o projeto ficar mais caro, porque meu programador desenvolve duas vezes;<br />TDD não é escalável (não evolui com o projeto);<br />TDD deve ser usado para 100% do meu código fonte*;<br />TDD = Bala de prata. Se feitos corretamente, pegam todos os bugs;<br />
  41. 41. Quero saber mais!!!<br />http://gustavoquezada.blogspot.com/2010/01/vsts-visual-studio-team-system-para.html (Exemplo prático)<br />http://www.bugbang.com.br/?p=1661(Vídeo)<br />http://www.bugbang.com.br/?p=839(Exemplo prático)<br />http://www.agiledata.org/essays/tdd.html<br />http://www.extremeprogramming.org/rules/unittests.html<br />http://msdn.microsoft.com/en-us/library/aa292197(v=vs.71).aspx<br />http://viniciusquaiato.com/blog/tag/unit-testing/<br />http://social.msdn.microsoft.com/Forums/pt-BR/vsunittest/threads (Fórum)<br />http://diveintopython.org/unit_testing/index.html<br />http://artofunittesting.com/ (Vídeo)<br />
  42. 42. https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032486600&culture=pt-br<br />
  43. 43. Muito Obrigado<br />
  44. 44. Referências<br />Modelo V descrevendo o paralelismo entre as atividades de desenvolvimento e teste de software (CRAIG e JASKIEL, 2002)<br />http://www.agiledata.org/essays/tdd.html#Misconceptions (em 16/05/2011)<br />http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks(em 18/05/2011)<br />http://artofunittesting.com/ (em 16/05/2011)<br />http://gustavoquezada.blogspot.com/2010/01/vsts-visual-studio-team-system-para.html (Exemplo prático) (em 16/05/2011)<br />http://www.bugbang.com.br/?p=1661 (Vídeo) (em 16/05/2011)<br />http://www.bugbang.com.br/?p=839 (Exemplo prático) (em 16/05/2011)<br />http://www.agiledata.org/essays/tdd.html(em 16/05/2011)<br />http://www.extremeprogramming.org/rules/unittests.html(em 16/05/2011)<br />http://msdn.microsoft.com/en-us/library/aa292197(v=vs.71).aspx(em 16/05/2011)<br />http://viniciusquaiato.com/blog/tag/unit-testing/(em 16/05/2011)<br />http://social.msdn.microsoft.com/Forums/pt-BR/vsunittest/threads (Fórum) (em 16/05/2011)<br />http://diveintopython.org/unit_testing/index.html (em 16/05/2011)<br />http://artofunittesting.com/ (Vídeo) (em 16/05/2011)<br />

×