53
Test Driven Development Augusto Pascutti / Nelson Senna

TDD - Test Driven Development (em PHP)

Embed Size (px)

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/gravata

Citation preview

Page 1: TDD - Test Driven Development (em PHP)

Test Driven DevelopmentAugusto Pascutti / Nelson Senna

Page 2: TDD - Test Driven Development (em PHP)

Agenda

Page 3: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

Page 4: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

• Os pilotos

Page 5: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

Page 6: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

Page 7: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

Page 8: TDD - Test Driven Development (em PHP)

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

Page 9: TDD - Test Driven Development (em PHP)

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)

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)

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)

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)

Os pilotos

Page 14: TDD - Test Driven Development (em PHP)

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)

Augusto Pascutti

Twitter: @augustohp Github: augustohp Slides: http://bit.ly/augustohp Blog: http://augustohp.com

Page 16: TDD - Test Driven Development (em PHP)

O que é um teste?

Page 17: TDD - Test Driven Development (em PHP)

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)

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)

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)

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)

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)

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)

O que não é TDD?

Page 24: TDD - Test Driven Development (em PHP)

Teste depois de desenvolver

Page 25: TDD - Test Driven Development (em PHP)

Teste depois do deploy

Page 26: TDD - Test Driven Development (em PHP)

Apenas fazer testes

Page 27: TDD - Test Driven Development (em PHP)

–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)

O que é TDD?

Page 29: TDD - Test Driven Development (em PHP)

–Ron Jeffries

“Código limpo que funciona.”

Page 30: TDD - Test Driven Development (em PHP)

–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)

Um ciclo

Page 32: TDD - Test Driven Development (em PHP)

Um ciclo

1. Criar um teste (RED)

Page 33: TDD - Test Driven Development (em PHP)

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

Page 34: TDD - Test Driven Development (em PHP)

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

3. Refactor

Page 35: TDD - Test Driven Development (em PHP)

Ciclo bacana

RED

GREEN

REFACTOR

Page 36: TDD - Test Driven Development (em PHP)

Ciclo bacana

RED

GREEN

REFACTOR

Tempo

Page 37: TDD - Test Driven Development (em PHP)

Ciclo bunda

RED

GREEN

REFACTOR

Page 38: TDD - Test Driven Development (em PHP)

Ciclo bunda

RED

GREEN

REFACTOR

Page 39: TDD - Test Driven Development (em PHP)

Ciclo bunda

RED

GREEN

REFACTOR

Page 40: TDD - Test Driven Development (em PHP)

Ciclo bunda

RED

GREEN

REFACTOR

Page 41: TDD - Test Driven Development (em PHP)

Ciclo BEM bunda

RED

GREEN

Page 42: TDD - Test Driven Development (em PHP)

Ciclo BEM bunda

RED

GREEN

Cadê o Refactor?

Page 43: TDD - Test Driven Development (em PHP)

–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)

Por que usar TDD?

Page 45: TDD - Test Driven Development (em PHP)

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)

Mão na massa?

Page 47: TDD - Test Driven Development (em PHP)

O que iremos fazer?

Page 48: TDD - Test Driven Development (em PHP)

Transformar “isso”

Page 49: TDD - Test Driven Development (em PHP)

Em puro garbo e elegância

Page 50: TDD - Test Driven Development (em PHP)

http://gravata.sexy

Page 51: TDD - Test Driven Development (em PHP)

Iterações de desenvolvimento

Page 52: TDD - Test Driven Development (em PHP)

Iterações

1. Walking Sekeleton

2. Buscar avatar em http://gravatar.com.

3. Fazer download do gravatar.

4. Aplicar gravata.

Page 53: TDD - Test Driven Development (em PHP)

http://github.com/augustohp/gravata