28
Advanced Live Testing Augusto Pascutti / Nelson Senna

Nossa experiência com TDD

Embed Size (px)

DESCRIPTION

Palestra de TDD apresentada no InterconPHP no dia 19/07/2014. A apresentação discorre rapidamente sobre conceitos básicos do Test Driven Development como: - A diferença entre teste e teste automatizado; - Os diferentes tipos de testes; - O que é TDD; - Explicação de um ciclo de TDD; - E o porquê de usar TDD. O repositório ao final da apresentação faz parte de uma demonstração de algumas iterações feitas pelos apresentadores para ilustrar os ciclos da prática.

Citation preview

Page 1: Nossa experiência com TDD

Advanced Live TestingAugusto Pascutti / Nelson Senna

Page 2: Nossa experiência com TDD

Advanced Live TestingAugusto Pascutti / Nelson Senna

Page 3: Nossa experiência com TDD

Nossa experiência com TDDAugusto Pascutti / Nelson Senna

Page 4: Nossa experiência com TDD

Os pilotos

Page 5: Nossa experiência com TDD

Augusto Pascutti

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

Page 6: Nossa experiência com TDD

Nelson Senna

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

Page 7: Nossa experiência com TDD

O que é um teste?

Page 8: Nossa experiência com TDD

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 9: Nossa experiência com TDD

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 10: Nossa experiência com TDD

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 11: Nossa experiência com TDD

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 12: Nossa experiência com TDD

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 13: Nossa experiência com TDD

Diferentes níveis de teste

1. Unitário (white-box)

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

3. Acceptance (black-box)

Page 14: Nossa experiência com TDD

O que é TDD?

Page 15: Nossa experiência com TDD

–Ron Jeffries

“Código limpo que funciona.”

Page 16: Nossa experiência com TDD

–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 17: Nossa experiência com TDD

Um ciclo

Page 18: Nossa experiência com TDD

Um ciclo

1. Criar um teste (RED)

Page 19: Nossa experiência com TDD

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

Page 20: Nossa experiência com TDD

Um ciclo

1. Criar um teste (RED)

2. Fazer uma mudança pequena (GREEN)

3. Refactor

Page 21: Nossa experiência com TDD

–Kent Beck / Nat Pryce

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

má arquitetura.”

Page 22: Nossa experiência com TDD

Por que usar TDD?

Page 23: Nossa experiência com TDD

Por que usar TDD?

• Evitar que defeito vire falha

• Evitar o “stress loop”

• Aumenta coesão, diminui acoplamento

• É uma forma de documentação

Page 24: Nossa experiência com TDD

Mão na massa?

Page 25: Nossa experiência com TDD

O que iremos fazer?

Page 26: Nossa experiência com TDD
Page 27: Nossa experiência com TDD

Iterações

1. Falha ao salvar um e-mail na newsletter.

2. Validação de email ao salvar.

3. Salvar um e-mail.

Page 28: Nossa experiência com TDD

http://github.com/PHPSP/Jarbas