Date post: | 06-May-2015 |
Category: |
Engineering |
Upload: | augusto-pascutti |
View: | 1,185 times |
Download: | 0 times |
Test Driven DevelopmentAugusto 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
• Download avatar
Agenda• 1ª Palestra
• Os pilotos
• O que não é TDD
• O que é TDD?
• Walking Skeleton
• 2ª Palestra
• Buscar avatar
• Download avatar
• Aplicar gravata
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_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 }
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 }
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 }
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 }
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 }
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 número de testes é a mesma coisa que tentar perder peso
se pesando com mais frequência.”
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.”
https://en.wikipedia.org/wiki/Test-driven_development
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á arquitetura.”
Por que usar TDD?
Por que usar TDD?
• Evitar que defeito vire falha
• Evitar o “stress loop”
• Aumenta coesão, diminui acoplamento
• É uma forma de documentação
Mão na massa?
O que iremos fazer?
Transformar “isso”
Em puro garbo e elegância
Iterações de desenvolvimento
Iterações
1. Walking Sekeleton
2. Buscar avatar em http://gravatar.com.
3. Fazer download do gravatar.
4. Aplicar gravata.