Fatec - Jundiaí 09/04/2009 Introdução ao  Test-Driven Development
Test-Driven Development <ul><li>“ Escreva código novo apenas  se você primeiro tiver um teste falhando.” Kent Beck </li></ul>
Por que testar? <ul><li>Não existe software sem erros </li></ul><ul><li>Aumenta a qualidade do software </li></ul><ul><li>...
Modelo Waterfall
Test-Driven Development <ul><li>Test-first </li></ul><ul><li>Design incremental </li></ul>
Test-first <ul><li>Escrever testes antes da implementação: </li></ul><ul><li>Faz você pensar no comportamento </li></ul><u...
Design incremental <ul><li>Adição de novas funcionalides em pequenos passos </li></ul><ul><li>O conceito chave de TDD é te...
Test-Driven Development <ul><li>TDD é mais sobre design de software do que testes </li></ul>
Test-Driven Development <ul><li>“ Está pronto, só falta testar.” </li></ul><ul><li>Usando TDD, quando acabamos, realmento ...
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...
Eu não quero usar TDD… <ul><li>“ Você não tem tempo para escrever testes unitários, porque gasta tempo demais  debugando ....
Processo para usar TDD <ul><li>Lista de testes </li></ul><ul><li>Red / Green / Refactor </li></ul>
Red/Green/Refactor
Refatoração <ul><li>Melhora e aperfeiçoamento do código existente sem alterar o seu comportamento externo. </li></ul>
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ã...
Ferramentas para testes de unidade <ul><li>.NET: MSTest (Visual Studio), NUnit </li></ul><ul><li>Java: JUnit, Jtest </li><...
Exemplo – Calculadora  <ul><li>Lista de testes: </li></ul><ul><li>Somar dois números inteiros </li></ul><ul><li>Subtrair d...
Exemplo – Calculadora  <ul><li>Lista de testes: </li></ul><ul><li>Somar dois números inteiros </li></ul><ul><li>Subtrair d...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Soma_Dois_Numeros() </li></ul><ul><li>{ </li><...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Soma_Dois_Numeros() </li></ul><ul><li>{ </li><...
Exemplo – Calculadora
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Soma_Dois_Numeros() </li></ul><ul><li>{ </li><...
Exemplo – Calculadora
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Soma_Dois_Numeros() </li></ul><ul><li>{ </li><...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Soma_Dois_Numeros() </li></ul><ul><li>{ </li><...
Exemplo – Calculadora
Exemplo – Calculadora
Exemplo 2 – Music Player <ul><li>Lista de testes: </li></ul><ul><li>Criar uma instância de MusicPlayer  e verificar se a p...
Exemplo 2 – Music Player <ul><li>Lista de testes: </li></ul><ul><li>Criar uma instância de MusicPlayer e verificar se a pr...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
Exemplo 2 – Music Player
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
Exemplo 2 – Music Player
Exemplo 2 – Music Player
Exemplo 2 – Music Player
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
Exemplo 2 – Music Player
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
Exemplo 2 – Music Player
<ul><li>Teste </li></ul><ul><li>[TestMethod] </li></ul><ul><li>public void  Instancia_Music_Player() </li></ul><ul><li>{ <...
<ul><li>Teste </li></ul><ul><li>MusicPlayer  mp =  new   MusicPlayer (); </li></ul><ul><li>[TestMethod] </li></ul><ul><li>...
Exemplo 2 – Music Player
Exemplo 2 – Music Player
Test-Driven Development <ul><li>“ Escreva código novo apenas  se você primeiro tiver um teste falhando.” Kent Beck </li></ul>
Obrigado <ul><li>Prodis’ Blog </li></ul><ul><li>http://prodis.pro.br o </li></ul>
Upcoming SlideShare
Loading in …5
×

Apresentação de TDD na Fatec Jundiaí

2,064 views
2,004 views

Published on

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

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

No Downloads
Views
Total views
2,064
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
97
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

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>

×