53
Test Driven Development Augusto Pascutti / Nelson Senna

Test Driven Development

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Test Driven Development

Test Driven DevelopmentAugusto Pascutti / Nelson Senna

Page 2: Test Driven Development

Agenda

Page 3: Test Driven Development

Agenda• 1ª Palestra

Page 4: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

Page 5: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

Page 6: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

Page 7: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

Page 8: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

Page 9: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

• 2ª Palestra

Page 10: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

• 2ª Palestra

• Buscar avatar

Page 11: Test Driven Development

Agenda• 1ª Palestra

• Os pilotos

• O que não é TDD

• O que é TDD?

• Walking Skeleton

• 2ª Palestra

• Buscar avatar

• Download avatar

Page 12: Test Driven Development

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: Test Driven Development

Os pilotos

Page 14: Test Driven Development

Nelson Senna

Twitter: @nelson_senna Github: nelsonsar Slides: http://bit.ly/nelsonsar Blog: http://nelsonsar.github.io

Page 15: Test Driven Development

Augusto Pascutti

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

Page 16: Test Driven Development

O que é um teste?

Page 17: Test Driven Development

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: Test Driven Development

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: Test Driven Development

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: Test Driven Development

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: Test Driven Development

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: Test Driven Development

Diferentes níveis de teste

1. Unitário (white-box)

2. Integração (white-box, black-box)

3. Acceptance (black-box)

Page 23: Test Driven Development

O que não é TDD?

Page 24: Test Driven Development

Teste depois de desenvolver

Page 25: Test Driven Development

Teste depois do deploy

Page 26: Test Driven Development

Apenas fazer testes

Page 27: Test Driven Development

–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: Test Driven Development

O que é TDD?

Page 29: Test Driven Development

–Ron Jeffries

“Código limpo que funciona.”

Page 30: Test Driven Development

–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: Test Driven Development

Um ciclo

Page 32: Test Driven Development

Um ciclo

1. Criar um teste (RED)

Page 33: Test Driven Development

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

Page 34: Test Driven Development

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

3. Refactor

Page 35: Test Driven Development

Ciclo bacana

RED

GREEN

REFACTOR

Page 36: Test Driven Development

Ciclo bacana

RED

GREEN

REFACTOR

Tempo

Page 37: Test Driven Development

Ciclo bunda

RED

GREEN

REFACTOR

Page 38: Test Driven Development

Ciclo bunda

RED

GREEN

REFACTOR

Page 39: Test Driven Development

Ciclo bunda

RED

GREEN

REFACTOR

Page 40: Test Driven Development

Ciclo bunda

RED

GREEN

REFACTOR

Page 41: Test Driven Development

Ciclo BEM bunda

RED

GREEN

Page 42: Test Driven Development

Ciclo BEM bunda

RED

GREEN

Cadê o Refactor?

Page 43: Test Driven Development

–Kent Beck / Nat Pryce

“O TDD não garante boa arquitetura. Ele dá um retorno imediato do que, provavelmente, é uma

má arquitetura.”

Page 44: Test Driven Development

Por que usar TDD?

Page 45: Test Driven Development

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: Test Driven Development

Mão na massa?

Page 47: Test Driven Development

O que iremos fazer?

Page 48: Test Driven Development

Transformar “isso”

Page 49: Test Driven Development

Em puro garbo e elegância

Page 50: Test Driven Development

http://gravata.sexy

Page 51: Test Driven Development

Iterações de desenvolvimento

Page 52: Test Driven Development

Iterações

1. Walking Sekeleton

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

3. Fazer download do gravatar.

4. Aplicar gravata.

Page 53: Test Driven Development

http://github.com/augustohp/gravata