tdc 2011 - e no sétimo dia ele escreveu testes
DESCRIPTION
Testes e o TDD estão se tornando uma parte muito importante do nosso dia a dia como desenvolvedores. Veja como os testes se aplicam ao seu trabalho e como seus sistemas e equipe podem se beneficiar com isso. Aprenda também o que é o TDD e quais melhorias ele traz ao processo de desenvolvimento.TRANSCRIPT
![Page 1: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/1.jpg)
E NO SÉTIMO DIA ELE CRIOU TESTES
TDD e o papel de testes no desenvolvimento de aplicações
Rafael [email protected]
Saturday, July 9, 2011
![Page 2: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/2.jpg)
⚠Aviso
As referências e opiniões religiosas apresentadas nesta palestra não refletem a opinião do autor, e
são apresentadas puramente com intuito de ilustrar pontos-chave de forma descontraída e
humorística.
Saturday, July 9, 2011
![Page 3: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/3.jpg)
A CRIAÇÃO DO MUNDOdo ponto de vista do desenvolvimento de software
Saturday, July 9, 2011
![Page 4: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/4.jpg)
Saturday, July 9, 2011
![Page 5: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/5.jpg)
Saturday, July 9, 2011
![Page 6: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/6.jpg)
Saturday, July 9, 2011
![Page 7: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/7.jpg)
Saturday, July 9, 2011
![Page 8: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/8.jpg)
Saturday, July 9, 2011
![Page 9: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/9.jpg)
Saturday, July 9, 2011
![Page 10: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/10.jpg)
Saturday, July 9, 2011
![Page 11: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/11.jpg)
Saturday, July 9, 2011
![Page 12: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/12.jpg)
@OCriador
Saturday, July 9, 2011
![Page 13: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/13.jpg)
@OCriador* Adão has joined #earth
* Eva has joined #earthAdão
Eva
Saturday, July 9, 2011
![Page 14: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/14.jpg)
@OCriador* Adão has joined #earth
* Eva has joined #earth
Adão: Agora vou apavorar!
Eva: Primeiro post!
Eva: ah droga!
Eva: Olha! uma maçã!
Adão
Eva
Saturday, July 9, 2011
![Page 15: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/15.jpg)
@OCriador* Adão has joined #earth
* Eva has joined #earth
Adão: Agora vou apavorar!
Eva: Primeiro post!
Eva: ah droga!
Eva: Olha! uma maçã!
> Eva morde a maçã
OCriador: eu avisei!
Adão
Eva
Saturday, July 9, 2011
![Page 16: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/16.jpg)
@OCriador* Adão has joined #earth
* Eva has joined #earth
Adão: Agora vou apavorar!
Eva: Primeiro post!
Eva: ah droga!
Eva: Olha! uma maçã!
> Eva morde a maçã
OCriador: eu avisei!
OCriador kicks Eva
OCriador kicks Adão
OCriador adds ban on *@earth on #earth
Adão
Eva
Saturday, July 9, 2011
![Page 17: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/17.jpg)
Rafael Dohms
Evangelista PHP, membro ativo da Comunidade PHP e certificado ZCE. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compartilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast.
Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.
phot
o cr
edit:
Eli W
hite
Saturday, July 9, 2011
![Page 18: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/18.jpg)
TESTESporque você precisa deles, mas ainda não sabe
Sebastian Bergmann
Saturday, July 9, 2011
![Page 19: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/19.jpg)
TESTES?
• Descrever programaticamente um caso de uso válido e garantir sua funcionalidade
• Forçar a execução de seu código em diversos cenários
• Objetivos
• Garantir funcionamento
• Agilizar a refatoração
• Testes automatizados
Saturday, July 9, 2011
![Page 20: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/20.jpg)
TIPOS
• Teste Unitário
• Pequeno e pontual
• Geralmente testa a entrada/saída de uma função
• Teste Funcional
• Verifica a funcionalidade de interfaces
• End-to-End
• Verifica o processo do início ao fim
• Analisa o fluxo de sua aplicação
Saturday, July 9, 2011
![Page 21: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/21.jpg)
PRÓS• “Simulação”
• Facilidade de testar funções sem precisar preencher formulários, criar usuários
• Tudo fica centralizado no teste e é feito apenas uma vez
• “Certeza”
• Testes podem simular todas situações possíveis e garantir que seu código funciona como esperado
• “Garantia”
• Com um sistema coberto de testes você tem certeza que sua alteração não vai quebrar outra área do sistema
Saturday, July 9, 2011
![Page 22: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/22.jpg)
CONS
• Tempo
• Embora você gaste mais tempo criando testes, você ganha tempo durante as simulações e na manutenção
• Gerência
• Convencer os responsáveis pelo projeto de que testes irão trazer lucro é geralmente complicado
Saturday, July 9, 2011
![Page 23: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/23.jpg)
CADA SITUAÇÃO, UMA FERRAMENTA
Frontend Backend PHP
Selenium+
PHPUnit PHPUnit PHPT
Saturday, July 9, 2011
![Page 24: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/24.jpg)
ESCREVENDO TESTESquando você começar, nunca mais vai parar
skoop @flickr
Saturday, July 9, 2011
![Page 25: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/25.jpg)
MANOWARS!
• Sistema de Batalhas
• Garantindo o elemento aleatório
• Ataque: Fixo + Random
• Defesa: Fixo + Random
• Damage: Atk/Def * Random
Saturday, July 9, 2011
![Page 26: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/26.jpg)
UMA BATALHA!Mano Gil pronto para combater. > Atk: 10 / Def: 8Mano Brown pronto para combater. > Atk: 11 / Def: 9Round 1Fight!Gil took 3 damage from BrownGil did 13 damage on BrownGil did 10 damage on BrownGil did 1 damage on BrownGil took 12 damage from BrownGil did 13 damage on BrownGil did 2 damage on BrownGil did 0 damage on BrownGil took 7 damage from BrownGil did 13 damage on BrownGil did 10 damage on BrownGil did 0 damage on BrownGil took 13 damage from BrownGil took 1 damage from BrownGil took 10 damage from BrownGil took 10 damage from BrownGil did 14 damage on BrownGil took 9 damage from BrownGil took 7 damage from BrownGil did 6 damage on BrownGil did 8 damage on BrownGil did 2 damage on BrownGil did 12 damage on BrownGil won!
Saturday, July 9, 2011
![Page 27: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/27.jpg)
MW_MANOVamos ver de perto o código
Saturday, July 9, 2011
![Page 28: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/28.jpg)
O QUE TESTAR?1.O construtor esta definindo as variáveis?
2.O health (saúde) está em 100 quando damos reset?
3.Quando ele se machuca, o health diminui?
4.Quando vivo, ele diz “tô vivo”?
5.Quando morto, ele morre?
6.Ele se defende com o valor de defesa esperado?
7.Ele ganha bonus de defesa?
8.Qual o resultado de um ataque (sem bônus), quando:
8.1.Atk > Def
8.2.Def > Atk
8.3.Atk = Def
Saturday, July 9, 2011
![Page 29: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/29.jpg)
RAIO-X DE UMA SUITE DE TESTES
AllTests
PHPUnit_Framework_TestSuite
Saturday, July 9, 2011
![Page 30: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/30.jpg)
RAIO-X DE UMA SUITE DE TESTES
AllTests
PHPUnit_Framework_TestSuite
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
Saturday, July 9, 2011
![Page 31: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/31.jpg)
RAIO-X DE UMA SUITE DE TESTES
AllTests
PHPUnit_Framework_TestSuite
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
testX
testY
...testX
testY
...testX
testY
...
Saturday, July 9, 2011
![Page 32: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/32.jpg)
RAIO-X DE UMA SUITE DE TESTES
AllTests
PHPUnit_Framework_TestSuite
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
ClassXTest
PHPUnit_Framework_TestCase
SetUp
TearDown
SetUp
TearDown
SetUp
TearDown
SetUp
TearDown
testX
testY
...testX
testY
...testX
testY
...
Saturday, July 9, 2011
![Page 33: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/33.jpg)
EXECUÇÃO DA SUITESetUp
TearDown
SetUp
TearDown
SetUp
TearDown
SetUp
TearDown
Para cada teste
Para cada teste
Para cada teste
Saturday, July 9, 2011
![Page 34: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/34.jpg)
ISOLAMENTO
• Mantenha seus testes isolados
• Nunca rode testes no servidor de produção!
• Soluções
• Crie uma base separada
• Use pastas separadas para arquivos
• Sempre destrua tudo que seu teste construiu
Saturday, July 9, 2011
![Page 35: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/35.jpg)
ESQUADRÃO LIMPEZALimpe tudo o que seu teste criar!
class CleanUpTest extends PHPUnit_Framework_TestCase{ private $file = "/tmp/file";
protected function setUp() { parent::setUp(); }
protected function tearDown() { unlink($this->file); parent::tearDown(); }
public function testFile() { file_put_contents($this->file); }
Saturday, July 9, 2011
![Page 36: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/36.jpg)
ESQUADRÃO LIMPEZALimpe tudo o que seu teste criar!
Everything must be clean!
class CleanUpTest extends PHPUnit_Framework_TestCase{ private $file = "/tmp/file";
protected function setUp() { parent::setUp(); }
protected function tearDown() { unlink($this->file); parent::tearDown(); }
public function testFile() { file_put_contents($this->file); }
Saturday, July 9, 2011
![Page 37: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/37.jpg)
ESQUADRÃO LIMPEZALimpe tudo o que seu teste criar!
Everything must be clean!
class CleanUpTest extends PHPUnit_Framework_TestCase{ private $file = "/tmp/file";
protected function setUp() { parent::setUp(); }
protected function tearDown() { unlink($this->file); parent::tearDown(); }
public function testFile() { file_put_contents($this->file); }
Arquivos, Banco de Dados, etc...
Saturday, July 9, 2011
![Page 38: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/38.jpg)
QUANDO LIMPAR?class CleanUpTest extends PHPUnit_Framework_TestCase{ private $file = "/tmp/file";
protected function setUp() { parent::setUp(); }
protected function tearDown() { parent::tearDown(); }
public function testFile() { file_put_contents($this->file); $this->assertSomething(...); unlink($this->file); }
Saturday, July 9, 2011
![Page 39: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/39.jpg)
QUANDO LIMPAR?class CleanUpTest extends PHPUnit_Framework_TestCase{ private $file = "/tmp/file";
protected function setUp() { parent::setUp(); }
protected function tearDown() { parent::tearDown(); }
public function testFile() { file_put_contents($this->file); $this->assertSomething(...); unlink($this->file); }
Interrompe o teste se falhar
Saturday, July 9, 2011
![Page 40: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/40.jpg)
TESTANDO OS BÁSICOS
• Estrutura da Suite
• AllTests.php
• MW_Mano
• Testes do 1 ao 6
Saturday, July 9, 2011
![Page 41: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/41.jpg)
public function attack(MW_Mano $victim){ $atk = $this->getAtk() + trim(file_get_contents('URL')); $def = $victim->defend(); $dmgMultiplier = (trim(file_get_contents('URL')))/100; if ($atk > $def){ $dmg = round($atk * $dmgMultiplier); $victim->hurt( $dmg ); $action = "%s did %d damage on %s"; }else{ $dmg = round($def * $dmgMultiplier); $this->hurt( $dmg ); $action = "%s took %d damage from %s"; } return sprintf($action, $this->getName(), $dmg, $victim->getName());}
Para Facilitar leitura:[URL] => http://www.random.org/integers/?num=1&min=0&max=100&col=1&base=10&format=plain&rnd=new
Saturday, July 9, 2011
![Page 42: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/42.jpg)
CÓDIGO DEINTESTÁVEL
• Singletons
•MyClass::getInstance();
• Dependências
• SO: exec(‘ls -la’);
• Recursos externos: APIs, File System
• Métodos Privados
•private method fazTudo(){...}
Saturday, July 9, 2011
![Page 43: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/43.jpg)
public function attack(MW_Mano $victim){ $atk = $this->getAtk() + $this->getRandom(); $def = $victim->defend(); $dmgMultiplier = $this->getRandom(1,100)/100; if ($atk > $def){ $dmg = round($atk * $dmgMultiplier); $victim->hurt( $dmg ); $action = "%s did %d damage on %s"; }else{ $dmg = round($def * $dmgMultiplier); $this->hurt( $dmg ); $action = "%s took %d damage from %s"; } return sprintf($action, $this->getName(), $dmg, $victim->getName());}
public function getRandom($min = 1, $max = 10){ return trim(file_get_contents('http://www.random.org/integers/?num=1&min='.$min.'&max='.$max.'&col=1&base=10&format=plain&rnd=new'));}
Saturday, July 9, 2011
![Page 44: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/44.jpg)
public function attack(MW_Mano $victim){ $atk = $this->getAtk() + $this->getRandom(); $def = $victim->defend(); $dmgMultiplier = $this->getRandom(1,100)/100; if ($atk > $def){ $dmg = round($atk * $dmgMultiplier); $victim->hurt( $dmg ); $action = "%s did %d damage on %s"; }else{ $dmg = round($def * $dmgMultiplier); $this->hurt( $dmg ); $action = "%s took %d damage from %s"; } return sprintf($action, $this->getName(), $dmg, $victim->getName());}
public function getRandom($min = 1, $max = 10){ return trim(file_get_contents('http://www.random.org/integers/?num=1&min='.$min.'&max='.$max.'&col=1&base=10&format=plain&rnd=new'));}
Saturday, July 9, 2011
![Page 45: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/45.jpg)
CENAS ARRISCADAS
• Porque, às vezes, os testes precisam de dublês
• Removem dependências em código externo
• Oferecem controle sobre resultados
• Estratégias comuns:
• Dummy, Fake, Stub, Spy, Mock
Saturday, July 9, 2011
![Page 46: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/46.jpg)
MOCK OBJECT
• Em português: falso, imitação (Objeto falso)
• Significa: copiar, imitar ou falsificar
• Objetivo: trocar algo que não temos controle por outro do qual podemos garantir o resultado, forçando diferentes cenários.
Saturday, July 9, 2011
![Page 47: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/47.jpg)
RANDOM SEM O RANDOMpublic function testDefendWithoutLuck(){ //Obter Mock $manoMock = $this->getMock('MW_Mano',array('getRandom'), array('John')); //Definir que o objeto retorne zero. $manoMock->expects($this->any()) ->method('getRandom') ->will($this->returnValue(0)); //Definir defesa $manoMock->setDef(5); //Verificar que defesa nao se altera $this->assertEquals(5, $manoMock->defend());}
Saturday, July 9, 2011
![Page 48: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/48.jpg)
DATA PROVIDERS
• Um teste, muitos dados
• Análise completa de diferentes cenários
Saturday, July 9, 2011
![Page 49: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/49.jpg)
CODE COVERAGE
• phpunit.xml<phpunit colors="true" verbose="true">
<logging> <log type="coverage-html" target="_reports" charset="UTF-8" yui="true" highlight="true" /> </logging>
<filter> <blacklist> <directory suffix=".php">../libs/Zend</directory> </blacklist> <whitelist> <directory suffix=".php">../libs/MW</directory> </whitelist> </filter> </phpunit>
Medindo a eficiência de nossos testes
Saturday, July 9, 2011
![Page 50: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/50.jpg)
Saturday, July 9, 2011
![Page 51: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/51.jpg)
TDDNão é sobre testes, é sobre especificações
Test Driven Development
Saturday, July 9, 2011
![Page 52: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/52.jpg)
“TDD é uma forma de projetar software, não apenas uma forma de testar software.”
Sebastian Bergmann - criador do PHPUnit
“It's about figuring out what you are trying to do before you run off half-cocked to try
to do it.”Dave Astels - autor de livros sobre TDD
Saturday, July 9, 2011
![Page 53: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/53.jpg)
TDD
• Escrever testes que definem o comportamento de sua aplicação antes de escrever código.
• Testar comportamento, não apenas funcionamento
• Especificar e não apenas validar
Saturday, July 9, 2011
![Page 54: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/54.jpg)
CICLO DE DESENVOLVIMENTOsem TDD
Especificação Análise Codificação
TestesDeployManutenção
Saturday, July 9, 2011
![Page 55: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/55.jpg)
Codificação
Saturday, July 9, 2011
![Page 56: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/56.jpg)
Codificação
Saturday, July 9, 2011
![Page 57: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/57.jpg)
Codificação
Saturday, July 9, 2011
![Page 58: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/58.jpg)
Codificação
Saturday, July 9, 2011
![Page 59: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/59.jpg)
Codificação
Saturday, July 9, 2011
![Page 60: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/60.jpg)
Codificação
Saturday, July 9, 2011
![Page 61: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/61.jpg)
Codificação
Saturday, July 9, 2011
![Page 62: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/62.jpg)
Codificação
Saturday, July 9, 2011
![Page 63: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/63.jpg)
CICLO DE DESENVOLVIMENTOsem TDD
Especificação Análise Codificação
TestesDeployManutenção
Saturday, July 9, 2011
![Page 64: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/64.jpg)
CICLO DE DESENVOLVIMENTOsem TDD
Especificação Análise
Codificação
Testes
DeployManutenção
Saturday, July 9, 2011
![Page 65: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/65.jpg)
CICLO DE DESENVOLVIMENTOsem TDD
Especificação Análise
Codificação
Testes
DeployManutenção
Saturday, July 9, 2011
![Page 66: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/66.jpg)
Codificação
Testes
O que desejamos que <método> faça?
Como <método> fará o que precisa?
Quais são os cenários que ele precisa estar preparado para lidar?
Sem formulários, teste direto o backend com os dados
Saturday, July 9, 2011
![Page 67: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/67.jpg)
CICLO DE DESENVOLVIMENTOsem com TDD
Especificação Análise
DeployManutenção Codificação
Testes
Saturday, July 9, 2011
![Page 68: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/68.jpg)
Manutenção
•Processo de correção de bugs
• Identificar erro
•Escrever teste que cause falha
•Corrigir código
•Rodar teste novamente
•Verificar que o teste passou
Saturday, July 9, 2011
![Page 69: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/69.jpg)
RINSE AND REPEATAutomatize seus testes e garanta qualidade da equipe
Saturday, July 9, 2011
![Page 70: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/70.jpg)
CONTINUOS INTEGRATION
• “Integração contínua”
• Processo automatizado
• Executado após cada commit
• Identifica falhas
• Identifica culpados
• Controla qualidade
Saturday, July 9, 2011
![Page 71: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/71.jpg)
Saturday, July 9, 2011
![Page 72: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/72.jpg)
FERRAMENTAS• phpUnderControl
• baseado no CruiseControl
• Versão atual já formata:
• Resultados de Testes
• PHP Code Sniffer
• Code Coverage
• phpDoc
• Hudson
• Resultados de Testes
• PHP Code Sniffer
• Code Coverage
• phpDoc
• Arbit
• PHP!
• Integração Contínua
• Bug Tracker
Saturday, July 9, 2011
![Page 73: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/73.jpg)
Saturday, July 9, 2011
![Page 74: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/74.jpg)
Saturday, July 9, 2011
![Page 75: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/75.jpg)
DÚVIDAS?
Saturday, July 9, 2011
![Page 76: TDC 2011 - E no sétimo dia ele escreveu testes](https://reader035.vdocuments.pub/reader035/viewer/2022062418/554f5698b4c905b9508b5112/html5/thumbnails/76.jpg)
Avalie essa palestra: http://joind.in/3571
http://[email protected]
Obrigado!
Slides: http://slides.doh.ms
Código: https://github.com/rdohms/ManoWars
Saturday, July 9, 2011