Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apresentação de TDD na Fatec Jundiaí

2,176 views

Published on

Apresentação de introdução ao TDD - Test Driven-Development realizada na Fatec Jundiaí.

Published in: Technology, Business
  • Be the first to comment

Apresentação de TDD na Fatec Jundiaí

  1. 1. Fatec - Jundiaí 09/04/2009 Introdução ao Test-Driven Development
  2. 2. Test-Driven Development <ul><li>“ Escreva código novo apenas se você primeiro tiver um teste falhando.” Kent Beck </li></ul>
  3. 3. Por que testar? <ul><li>Não existe software sem erros </li></ul><ul><li>Aumenta a qualidade do software </li></ul><ul><li>Evita retrabalho </li></ul>
  4. 4. Modelo Waterfall
  5. 5. Test-Driven Development <ul><li>Test-first </li></ul><ul><li>Design incremental </li></ul>
  6. 6. Test-first <ul><li>Escrever testes antes da implementação: </li></ul><ul><li>Faz você pensar no comportamento </li></ul><ul><li>Reduz código especulativo </li></ul><ul><li>Documenta </li></ul><ul><li>Aumenta a qualidade </li></ul>
  7. 7. Design incremental <ul><li>Adição de novas funcionalides em pequenos passos </li></ul><ul><li>O conceito chave de TDD é ter um feedback rápido das mudanças no código </li></ul>
  8. 8. Test-Driven Development <ul><li>TDD é mais sobre design de software do que testes </li></ul>
  9. 9. Test-Driven Development <ul><li>“ Está pronto, só falta testar.” </li></ul><ul><li>Usando TDD, quando acabamos, realmento acabamos. </li></ul>
  10. 10. Eu não quero usar TDD… <ul><li>As 5 maiores desculpas para quem não quer desenvolver orientado a testes: </li></ul><ul><li>Vai demorar muito mais </li></ul><ul><li>A funcionalidade é muito fácil </li></ul><ul><li>Não sei como testar </li></ul><ul><li>Isso não dá para testar </li></ul><ul><li>Melhor deixar os testes com os testadores </li></ul>
  11. 11. Eu não quero usar TDD… <ul><li>“ Você não tem tempo para escrever testes unitários, porque gasta tempo demais debugando . ” </li></ul>
  12. 12. Processo para usar TDD <ul><li>Lista de testes </li></ul><ul><li>Red / Green / Refactor </li></ul>
  13. 13. Red/Green/Refactor
  14. 14. Refatoração <ul><li>Melhora e aperfeiçoamento do código existente sem alterar o seu comportamento externo. </li></ul>
  15. 15. Passos para criação de testes <ul><li>Escreva um teste </li></ul><ul><li>Compile o teste (ele não deverá compilar, pois não implementou nada ainda) </li></ul><ul><li>Implemente somente o suficiente para compilar </li></ul><ul><li>Rode o teste e veja-o falhar </li></ul><ul><li>Implemente somente o suficiente para o teste passar </li></ul><ul><li>Rode o teste e veja-o passar </li></ul><ul><li>Refatore para “limpar” e remover duplicação de código (implementação e teste) </li></ul><ul><li>Rode o teste e veja-o passar </li></ul><ul><li>Repita desde o primeiro passo. </li></ul>
  16. 16. Ferramentas para testes de unidade <ul><li>.NET: MSTest (Visual Studio), NUnit </li></ul><ul><li>Java: JUnit, Jtest </li></ul><ul><li>Ruby: Test::Unit </li></ul><ul><li>Python: PyUnit </li></ul><ul><li>PHP: PHPUnit, SimpleTest </li></ul><ul><li>JavaScript: JSUnit </li></ul>
  17. 17. Exemplo – Calculadora <ul><li>Lista de testes: </li></ul><ul><li>Somar dois números inteiros </li></ul><ul><li>Subtrair dois números inteiros </li></ul><ul><li>Multiplicar dois números inteiros </li></ul><ul><li>Dividir dois números inteiros </li></ul><ul><li>... </li></ul>
  18. 18. Exemplo – Calculadora <ul><li>Lista de testes: </li></ul><ul><li>Somar dois números inteiros </li></ul><ul><li>Subtrair dois números inteiros </li></ul><ul><li>Multiplicar dois números inteiros </li></ul><ul><li>Dividir dois números inteiros </li></ul><ul><li>... </li></ul>
  19. 19. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Soma_Dois_Numeros() </li></ul><ul><li>{ </li></ul><ul><li>Calculadora c = new Calculadora(); </li></ul><ul><li>int resultado = c.Soma(10, 10); </li></ul><ul><li>Assert .AreEqual(20, resultado); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul>Exemplo – Calculadora
  20. 20. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Soma_Dois_Numeros() </li></ul><ul><li>{ </li></ul><ul><li>Calculadora c = new Calculadora (); </li></ul><ul><li>int resultado = c.Soma(10, 10); </li></ul><ul><li>Assert .AreEqual(20, resultado); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class Calculadora </li></ul><ul><li>{ </li></ul><ul><li>public int Soma( int num1, int num2) </li></ul><ul><li>{ </li></ul><ul><li>return 0; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo – Calculadora
  21. 21. Exemplo – Calculadora
  22. 22. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Soma_Dois_Numeros() </li></ul><ul><li>{ </li></ul><ul><li>Calculadora c = new Calculadora (); </li></ul><ul><li>int resultado = c.Soma(10, 10); </li></ul><ul><li>Assert .AreEqual(20, resultado); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class Calculadora </li></ul><ul><li>{ </li></ul><ul><li>public int Soma( int num1, int num2) </li></ul><ul><li>{ </li></ul><ul><li>int soma = num1 + num2; </li></ul><ul><li>return soma; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo – Calculadora
  23. 23. Exemplo – Calculadora
  24. 24. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Soma_Dois_Numeros() </li></ul><ul><li>{ </li></ul><ul><li>Calculadora c = new Calculadora (); </li></ul><ul><li>int resultado = c.Soma(10, 10); </li></ul><ul><li>Assert. AreEqual(20, resultado); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class Calculadora </li></ul><ul><li>{ </li></ul><ul><li>public int Soma( int num1, int num2) </li></ul><ul><li>{ </li></ul><ul><li>int soma = num1 + num2; </li></ul><ul><li>return soma; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo – Calculadora
  25. 25. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Soma_Dois_Numeros() </li></ul><ul><li>{ </li></ul><ul><li>Calculadora c = new Calculadora (); </li></ul><ul><li>int resultado = c.Soma(10, 10); </li></ul><ul><li>Assert .AreEqual(20, resultado); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class Calculadora </li></ul><ul><li>{ </li></ul><ul><li>public int Soma( int num1, int num2) </li></ul><ul><li>{ </li></ul><ul><li>return num1 + num2; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo – Calculadora
  26. 26. Exemplo – Calculadora
  27. 27. Exemplo – Calculadora
  28. 28. Exemplo 2 – Music Player <ul><li>Lista de testes: </li></ul><ul><li>Criar uma instância de MusicPlayer e verificar se a propriedade AutoStart é falsa por padrão; </li></ul><ul><li>Verificar se propriedade IsPlaying é verdadeira quando um arquivo de música for configurado e AutoStart for verdadeiro; </li></ul><ul><li>... </li></ul>
  29. 29. Exemplo 2 – Music Player <ul><li>Lista de testes: </li></ul><ul><li>Criar uma instância de MusicPlayer e verificar se a propriedade AutoStart é falsa por padrão; </li></ul><ul><li>Verificar se propriedade IsPlaying é verdadeira quando um arquivo de música for configurado e AutoStart for verdadeiro; </li></ul><ul><li>... </li></ul>
  30. 30. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer(); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul>Exemplo 2 – Music Player
  31. 31. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>return true ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  32. 32. Exemplo 2 – Music Player
  33. 33. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>return false ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  34. 34. Exemplo 2 – Music Player
  35. 35. Exemplo 2 – Music Player
  36. 36. Exemplo 2 – Music Player
  37. 37. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Configura_Musica_Com_AutoStart() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>mp.AutoStart = true ; </li></ul><ul><li>mp.SetMusic( @&quot;C:musica.mp3&quot; ); </li></ul><ul><li>Assert .IsTrue(mp.IsPlaying); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>return false ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  38. 38. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Configura_Musica_Com_AutoStart() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>mp.AutoStart = true ; </li></ul><ul><li>mp.SetMusic( @&quot;C:musica.mp3&quot; ); </li></ul><ul><li>Assert .IsTrue(mp.IsPlaying); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>private bool autoStart; </li></ul><ul><li>private bool isPlaying; </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>get { return autoStart; } </li></ul><ul><li>set { autoStart = value ; } </li></ul><ul><li>} </li></ul><ul><li>public bool IsPlaying </li></ul><ul><li>{ </li></ul><ul><li>get { return isPlaying; } </li></ul><ul><li>set { isPlaying = value ; } </li></ul><ul><li>} </li></ul><ul><li>public void SetMusic( string path) </li></ul><ul><li>{ </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  39. 39. Exemplo 2 – Music Player
  40. 40. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Configura_Musica_Com_AutoStart() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>mp.AutoStart = true ; </li></ul><ul><li>mp.SetMusic( @&quot;C:musica.mp3&quot; ); </li></ul><ul><li>Assert .IsTrue(mp.IsPlaying); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>private bool autoStart; </li></ul><ul><li>private bool isPlaying; </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>get { return autoStart; } </li></ul><ul><li>set { autoStart = value ; } </li></ul><ul><li>} </li></ul><ul><li>public bool IsPlaying </li></ul><ul><li>{ </li></ul><ul><li>get { return isPlaying; } </li></ul><ul><li>set { isPlaying = value ; } </li></ul><ul><li>} </li></ul><ul><li>public void SetMusic( string path) </li></ul><ul><li>{ </li></ul><ul><li>IsPlaying = true ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  41. 41. Exemplo 2 – Music Player
  42. 42. <ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Configura_Musica_Com_AutoStart() </li></ul><ul><li>{ </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>mp.AutoStart = true ; </li></ul><ul><li>mp.SetMusic( @&quot;C:musica.mp3&quot; ); </li></ul><ul><li>Assert .IsTrue(mp.IsPlaying); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>private bool autoStart; </li></ul><ul><li>private bool isPlaying; </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>get { return autoStart; } </li></ul><ul><li>set { autoStart = value ; } </li></ul><ul><li>} </li></ul><ul><li>public bool IsPlaying </li></ul><ul><li>{ </li></ul><ul><li>get { return isPlaying; } </li></ul><ul><li>set { isPlaying = value ; } </li></ul><ul><li>} </li></ul><ul><li>public void SetMusic( string path) </li></ul><ul><li>{ </li></ul><ul><li>IsPlaying = true ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  43. 43. <ul><li>Teste </li></ul><ul><li>MusicPlayer mp = new MusicPlayer (); </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Instancia_Music_Player() </li></ul><ul><li>{ </li></ul><ul><li>Assert .IsFalse(mp.AutoStart); </li></ul><ul><li>} </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void Configura_Musica_Com_AutoStart() </li></ul><ul><li>{ </li></ul><ul><li>mp.AutoStart = true ; </li></ul><ul><li>mp.SetMusic( @&quot;C:musica.mp3&quot; ); </li></ul><ul><li>Assert .IsTrue(mp.IsPlaying); </li></ul><ul><li>} </li></ul><ul><li>Implementação </li></ul><ul><li>public class MusicPlayer </li></ul><ul><li>{ </li></ul><ul><li>private bool autoStart; </li></ul><ul><li>private bool isPlaying; </li></ul><ul><li>public bool AutoStart </li></ul><ul><li>{ </li></ul><ul><li>get { return autoStart; } </li></ul><ul><li>set { autoStart = value ; } </li></ul><ul><li>} </li></ul><ul><li>public bool IsPlaying </li></ul><ul><li>{ </li></ul><ul><li>get { return isPlaying; } </li></ul><ul><li>set { isPlaying = value ; } </li></ul><ul><li>} </li></ul><ul><li>public void SetMusic( string path) </li></ul><ul><li>{ </li></ul><ul><li>IsPlaying = true ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Exemplo 2 – Music Player
  44. 44. Exemplo 2 – Music Player
  45. 45. Exemplo 2 – Music Player
  46. 46. Test-Driven Development <ul><li>“ Escreva código novo apenas se você primeiro tiver um teste falhando.” Kent Beck </li></ul>
  47. 47. Obrigado <ul><li>Prodis’ Blog </li></ul><ul><li>http://prodis.pro.br o </li></ul>

×