Test Driven Development

560 views
417 views

Published on

Apresentação sobre TDD (Test Driven Development) ou Desenvolvimento Guiado por Testes feita no Hotel Urbano Tech Talks. A primeira parte da apresentação conta com uma introdução a metodologia, apresentação de seus principais conceitos e algumas práticas consideradas boas pelos autores. A segunda parte consiste em um live coding mostrando iterações para construir um aplicativo utilizando a escola britânica, que mescla TDD com ATDD.

Published in: Engineering
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
560
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
1
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Test Driven Development

  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

×