Test Driven Development
Augusto Pascutti / Nelson Senna
Agenda
Agenda
• 1ª Palestra
Agenda
• 1ª Palestra
• Os pilotos
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
• Down...
Agenda
• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
• Down...
Os pilotos
Nelson Senna
Twitter: @nelson_senna
Github: nelsonsar
Slides: http://bit.ly/nelsonsar
Blog: http://nelsonsar.github.io
Augusto Pascutti
Twitter: @augustohp
Github: augustohp
Slides: http://bit.ly/augustohp
Blog: http://augustohp.com
O que é um teste?
1 <?php
2
3 namespace App;
4
5 class Download
6 {
7 public function fromUrl($fromUrl, $toFile)
8 {
9 $contents = file_get_...
1 <?php
2
3 namespace App;
4
5 class Download
6 {
7 public function fromUrl($fromUrl, $toFile)
8 {
9 $contents = file_get_...
1 <?php
2
3 namespace App;
4
5 class Download
6 {
7 public function fromUrl($fromUrl, $toFile)
8 {
9 $contents = file_get_...
1 <?php
2
3 namespace App;
4
5 class DownloadTest extends PHPUnit_Framework_TestCase
6 {
7 const DESTINATION_FILE = '/tmp/...
1 <?php
2
3 namespace App;
4
5 class DownloadTest extends PHPUnit_Framework_TestCase
6 {
7 const DESTINATION_FILE = '/tmp/...
Diferentes níveis de teste
1. Unitário (white-box)
2. Integração (white-box, black-box)
3. Acceptance (black-box)
O que não é TDD?
Teste depois de desenvolver
Teste depois do deploy
Apenas fazer testes
–Steve McConnell
“Só testar não aumenta a qualidade do
software. Tentar aumentar a qualidade do
software apenas aumentando...
O que é TDD?
–Ron Jeffries
“Código limpo que funciona.”
–Wikipedia: Test-driven development
“… metodologia que se baseia na repetição de
ciclos muito curtos de desenvolvimento.”
...
Um ciclo
Um ciclo
1. Criar um teste (RED)
Um ciclo
1. Criar um teste (RED)
2. Fazer uma mudança pequena (GREEN)
Um ciclo
1. Criar um teste (RED)
2. Fazer uma mudança pequena (GREEN)
3. Refactor
Ciclo bacana
RED
GREEN
REFACTOR
Ciclo bacana
RED
GREEN
REFACTOR
Tempo
Ciclo bunda
RED
GREEN
REFACTOR
Ciclo bunda
RED
GREEN
REFACTOR
Ciclo bunda
RED
GREEN
REFACTOR
Ciclo bunda
RED
GREEN
REFACTOR
Ciclo BEM bunda
RED
GREEN
Ciclo BEM bunda
RED
GREEN
Cadê o Refactor?
–Kent Beck / Nat Pryce
“O TDD não garante boa arquitetura. Ele dá um
retorno imediato do que, provavelmente, é uma
má arqu...
Por que usar TDD?
Por que usar TDD?
• Evitar que defeito vire falha
• Evitar o “stress loop”
• Aumenta coesão, diminui acoplamento
• É uma f...
Mão na massa?
O que iremos fazer?
Transformar “isso”
Em puro garbo e elegância
http://gravata.sexy
Iterações de
desenvolvimento
Iterações
1. Walking Sekeleton
2. Buscar avatar em http://gravatar.com.
3. Fazer download do gravatar.
4. Aplicar gravata.
http://github.com/augustohp/gravata
Próximos SlideShares
Carregando em…5
×

TDD - Test Driven Development (em PHP)

1.988 visualizações

Publicada em

Breve introdução a TDD, expondo uma aplicação simples - visível somente via controle de versão - escrita em PHP, exercitando os ciclos propostos pela metologia.

Gravação da apresentação: http://youtu.be/M5f32O-Afq0
Repositório do projeto: http://github.com/augustohp/gravata

Publicada em: Engenharia

TDD - Test Driven Development (em PHP)

  1. 1. Test Driven Development Augusto Pascutti / Nelson Senna
  2. 2. Agenda
  3. 3. Agenda • 1ª Palestra
  4. 4. Agenda • 1ª Palestra • Os pilotos
  5. 5. Agenda • 1ª Palestra • Os pilotos • O que não é TDD
  6. 6. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD?
  7. 7. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton
  8. 8. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton
  9. 9. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton • 2ª Palestra
  10. 10. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton • 2ª Palestra • Buscar avatar
  11. 11. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton • 2ª Palestra • Buscar avatar • Download avatar
  12. 12. Agenda • 1ª Palestra • Os pilotos • O que não é TDD • O que é TDD? • Walking Skeleton • 2ª Palestra • Buscar avatar • Download avatar • Aplicar gravata
  13. 13. Os pilotos
  14. 14. Nelson Senna Twitter: @nelson_senna Github: nelsonsar Slides: http://bit.ly/nelsonsar Blog: http://nelsonsar.github.io
  15. 15. Augusto Pascutti Twitter: @augustohp Github: augustohp Slides: http://bit.ly/augustohp Blog: http://augustohp.com
  16. 16. O que é um teste?
  17. 17. 1 <?php 2 3 namespace App; 4 5 class Download 6 { 7 public function fromUrl($fromUrl, $toFile) 8 { 9 $contents = file_get_contents($fromUrl); 10 // var_dump($contents); 11 $bytes = file_put_contents( 12 $toFile, 13 $contents 14 ); 15 // var_dump($bytes); 16 return $bytes; 17 } 18 }
  18. 18. 1 <?php 2 3 namespace App; 4 5 class Download 6 { 7 public function fromUrl($fromUrl, $toFile) 8 { 9 $contents = file_get_contents($fromUrl); 10 // var_dump($contents); 11 $bytes = file_put_contents( 12 $toFile, 13 $contents 14 ); 15 // var_dump($bytes); 16 return $bytes; 17 } 18 }
  19. 19. 1 <?php 2 3 namespace App; 4 5 class Download 6 { 7 public function fromUrl($fromUrl, $toFile) 8 { 9 $contents = file_get_contents($fromUrl); 10 // var_dump($contents); 11 $bytes = file_put_contents( 12 $toFile, 13 $contents 14 ); 15 // var_dump($bytes); 16 return $bytes; 17 } 18 }
  20. 20. 1 <?php 2 3 namespace App; 4 5 class DownloadTest extends PHPUnit_Framework_TestCase 6 { 7 const DESTINATION_FILE = '/tmp/test-file'; 8 9 public function tearDown() 10 { 11 unlink(self::DESTINATION_FILE); 12 } 13 14 public function testDownloadCreatesTheFile() 15 { 16 $file = self::DESTINATION_FILE; 17 $this->assertFileNotExists($file); 18 19 $downloader = new Download; 20 $url = 'http://example.org'; 21 $bytesWritten = $downloader->fromUrl($url, $file); 22 23 $this->assertGreaterThan(0, $bytesWritten); 24 $this->assertFileExists($file); 25 } 26 }
  21. 21. 1 <?php 2 3 namespace App; 4 5 class DownloadTest extends PHPUnit_Framework_TestCase 6 { 7 const DESTINATION_FILE = '/tmp/test-file'; 8 9 public function tearDown() 10 { 11 unlink(self::DESTINATION_FILE); 12 } 13 14 public function testDownloadCreatesTheFile() 15 { 16 $file = self::DESTINATION_FILE; 17 $this->assertFileNotExists($file); 18 19 $downloader = new Download; 20 $url = 'http://example.org'; 21 $bytesWritten = $downloader->fromUrl($url, $file); 22 23 $this->assertGreaterThan(0, $bytesWritten); 24 $this->assertFileExists($file); 25 } 26 }
  22. 22. Diferentes níveis de teste 1. Unitário (white-box) 2. Integração (white-box, black-box) 3. Acceptance (black-box)
  23. 23. O que não é TDD?
  24. 24. Teste depois de desenvolver
  25. 25. Teste depois do deploy
  26. 26. Apenas fazer testes
  27. 27. –Steve McConnell “Só testar não aumenta a qualidade do software. Tentar aumentar a qualidade do software apenas aumentando o número de testes é a mesma coisa que tentar perder peso se pesando com mais frequência.”
  28. 28. O que é TDD?
  29. 29. –Ron Jeffries “Código limpo que funciona.”
  30. 30. –Wikipedia: Test-driven development “… metodologia que se baseia na repetição de ciclos muito curtos de desenvolvimento.” https://en.wikipedia.org/wiki/Test-driven_development
  31. 31. Um ciclo
  32. 32. Um ciclo 1. Criar um teste (RED)
  33. 33. Um ciclo 1. Criar um teste (RED) 2. Fazer uma mudança pequena (GREEN)
  34. 34. Um ciclo 1. Criar um teste (RED) 2. Fazer uma mudança pequena (GREEN) 3. Refactor
  35. 35. Ciclo bacana RED GREEN REFACTOR
  36. 36. Ciclo bacana RED GREEN REFACTOR Tempo
  37. 37. Ciclo bunda RED GREEN REFACTOR
  38. 38. Ciclo bunda RED GREEN REFACTOR
  39. 39. Ciclo bunda RED GREEN REFACTOR
  40. 40. Ciclo bunda RED GREEN REFACTOR
  41. 41. Ciclo BEM bunda RED GREEN
  42. 42. Ciclo BEM bunda RED GREEN Cadê o Refactor?
  43. 43. –Kent Beck / Nat Pryce “O TDD não garante boa arquitetura. Ele dá um retorno imediato do que, provavelmente, é uma má arquitetura.”
  44. 44. Por que usar TDD?
  45. 45. Por que usar TDD? • Evitar que defeito vire falha • Evitar o “stress loop” • Aumenta coesão, diminui acoplamento • É uma forma de documentação
  46. 46. Mão na massa?
  47. 47. O que iremos fazer?
  48. 48. Transformar “isso”
  49. 49. Em puro garbo e elegância
  50. 50. http://gravata.sexy
  51. 51. Iterações de desenvolvimento
  52. 52. Iterações 1. Walking Sekeleton 2. Buscar avatar em http://gravatar.com. 3. Fazer download do gravatar. 4. Aplicar gravata.
  53. 53. http://github.com/augustohp/gravata

×