TDD - Test Driven Development (em PHP)

1,543
-1

Published on

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

Published in: Engineering

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×