tdd - test driven development (em php)
DESCRIPTION
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/gravataTRANSCRIPT
![Page 1: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/1.jpg)
Test Driven DevelopmentAugusto Pascutti / Nelson Senna
![Page 2: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/2.jpg)
Agenda
![Page 3: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/3.jpg)
Agenda• 1ª Palestra
![Page 4: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/4.jpg)
Agenda• 1ª Palestra
• Os pilotos
![Page 5: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/5.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
![Page 6: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/6.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
![Page 7: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/7.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
![Page 8: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/8.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
![Page 9: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/9.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
![Page 10: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/10.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
![Page 11: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/11.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
• Download avatar
![Page 12: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/12.jpg)
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
• Download avatar
• Aplicar gravata
![Page 13: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/13.jpg)
Os pilotos
![Page 14: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/14.jpg)
Nelson Senna
Twitter: @nelson_senna Github: nelsonsar Slides: http://bit.ly/nelsonsar Blog: http://nelsonsar.github.io
![Page 15: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/15.jpg)
Augusto Pascutti
Twitter: @augustohp Github: augustohp Slides: http://bit.ly/augustohp Blog: http://augustohp.com
![Page 16: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/16.jpg)
O que é um teste?
![Page 17: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/17.jpg)
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 }
![Page 18: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/18.jpg)
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 }
![Page 19: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/19.jpg)
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 }
![Page 20: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/20.jpg)
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 }
![Page 21: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/21.jpg)
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 }
![Page 22: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/22.jpg)
Diferentes níveis de teste
1. Unitário (white-box)
2. Integração (white-box, black-box)
3. Acceptance (black-box)
![Page 23: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/23.jpg)
O que não é TDD?
![Page 24: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/24.jpg)
Teste depois de desenvolver
![Page 25: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/25.jpg)
Teste depois do deploy
![Page 26: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/26.jpg)
Apenas fazer testes
![Page 27: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/27.jpg)
–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.”
![Page 28: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/28.jpg)
O que é TDD?
![Page 29: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/29.jpg)
–Ron Jeffries
“Código limpo que funciona.”
![Page 30: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/30.jpg)
–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
![Page 31: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/31.jpg)
Um ciclo
![Page 32: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/32.jpg)
Um ciclo
1. Criar um teste (RED)
![Page 33: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/33.jpg)
Um ciclo
1. Criar um teste (RED)
2. Fazer uma mudança pequena (GREEN)
![Page 34: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/34.jpg)
Um ciclo
1. Criar um teste (RED)
2. Fazer uma mudança pequena (GREEN)
3. Refactor
![Page 35: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/35.jpg)
Ciclo bacana
RED
GREEN
REFACTOR
![Page 36: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/36.jpg)
Ciclo bacana
RED
GREEN
REFACTOR
Tempo
![Page 37: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/37.jpg)
Ciclo bunda
RED
GREEN
REFACTOR
![Page 38: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/38.jpg)
Ciclo bunda
RED
GREEN
REFACTOR
![Page 39: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/39.jpg)
Ciclo bunda
RED
GREEN
REFACTOR
![Page 40: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/40.jpg)
Ciclo bunda
RED
GREEN
REFACTOR
![Page 41: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/41.jpg)
Ciclo BEM bunda
RED
GREEN
![Page 42: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/42.jpg)
Ciclo BEM bunda
RED
GREEN
Cadê o Refactor?
![Page 43: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/43.jpg)
–Kent Beck / Nat Pryce
“O TDD não garante boa arquitetura. Ele dá um retorno imediato do que, provavelmente, é uma
má arquitetura.”
![Page 44: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/44.jpg)
Por que usar TDD?
![Page 45: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/45.jpg)
Por que usar TDD?
• Evitar que defeito vire falha
• Evitar o “stress loop”
• Aumenta coesão, diminui acoplamento
• É uma forma de documentação
![Page 46: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/46.jpg)
Mão na massa?
![Page 47: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/47.jpg)
O que iremos fazer?
![Page 48: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/48.jpg)
Transformar “isso”
![Page 49: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/49.jpg)
Em puro garbo e elegância
![Page 51: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/51.jpg)
Iterações de desenvolvimento
![Page 52: TDD - Test Driven Development (em PHP)](https://reader034.vdocuments.us/reader034/viewer/2022042714/5549fd30b4c905507a8b4b6a/html5/thumbnails/52.jpg)
Iterações
1. Walking Sekeleton
2. Buscar avatar em http://gravatar.com.
3. Fazer download do gravatar.
4. Aplicar gravata.