minicurso de tdd

32

Click here to load reader

Upload: william-g-comnisky

Post on 29-Nov-2014

3.504 views

Category:

Technology


6 download

DESCRIPTION

Slides do minicurso de TDD ministrado por Pedro H. B. Santos e William G. Comnisky durante a PHPSC Conf 2009

TRANSCRIPT

Page 1: Minicurso de TDD

TDD+PHPPedro H. B. Santos

William G. Comnisky

Page 2: Minicurso de TDD

Qualidade de Software

“Totalidade de características de uma entidade que lhe confere a

capacidade de satisfazer a necessidades explícitas e implícitas”.

Conformidade a:

•Requisitos funcionais e de desempenho;

•Padrões e convenções de desenvolvimento pré-estabelecidos;

•Atributos implícitos que todo software desenvolvido

profissionalmente deve possuir.

Page 3: Minicurso de TDD

Como garantir a qualidade?

•Aplicação de métodos e ferramentas técnicas;

•Realização de revisões técnicas e inspeções;

•Atividades de testes;

•Aplicação de padrões;

Page 4: Minicurso de TDD

Por que surgem falhas?

•Alterações;

•Tempo;

•Complexidade;

Page 5: Minicurso de TDD

O que são testes?

“O teste consiste em executar o programa com a intenção de

encontrar erros”. (Myers, 1979)

Principais objetivos dos testes:

•Foco na prevenção de erros;

•Descobrir sintomas causados por erros;

•Fornecer diagnósticos claros para que os erros sejam facilmente

corrigidos;

Page 6: Minicurso de TDD

Teste vs. Depuração

Objetivos do teste: mostrar que o software tem erros.

Objetivos da depuração: encontrar a causa do erro detectado no

teste, e projetar e implementar as modificações no programa para

correção do erro.

Page 7: Minicurso de TDD

Tipos de testes

•Estrutural;

•Funcional;

•De sistema;

•De regressão;

•De aceitação;

•Unitário;

Page 8: Minicurso de TDD

Teste Unitário

“Procedimento automático usado para validar se uma

pequena parte do código funciona corretamente”.

Page 9: Minicurso de TDD

Teste Unitário: quando testar?

•Antes e durante o desenvolvimento: quando é necessário adicionar novas funcionalidades ao sistema;

•Após o desenvolvimento: quando o erro é detectado no sistema em produção;

Page 10: Minicurso de TDD

Teste Unitário: como testar?

•São independentes:

•Do código já testado;•Da ordem de execução;•Do ambiente;

•Devem ser:

•Fáceis de escrever;•Fáceis de executar;•Fáceis de compreender;•Desenvolvidos paralelamente ao código;

Page 11: Minicurso de TDD

Teste Unitário: como funciona?

<?php

class Calculator { public function add ($a, $b) { return $a + $b; } }?>

Page 12: Minicurso de TDD

Teste Unitário: como funciona?

<?php

$fixture = new Calculator();print  $fixture->add (0, 1 ) ;

$fixture = new Calculator();print  $fixture->add (1, 0  );

?>

11

Page 13: Minicurso de TDD

Teste Unitário: como funciona?

<?php

$fixture = new Calculator();print  $fixture->add (0, 1 ) == 1 ? 'Passou' : 'Falhou';

$fixture = new Calculator();print  $fixture->add (1, 0  ) == 1 ? 'Passou' : 'Falhou'; 

?>

PassouPassou

Page 14: Minicurso de TDD

Teste Unitário: como funciona?

<?php 

function assertTrue($expressao){    if(!$expressao)      throw new Exception  ('Falhou');  }$fixture = new Calculator();assertTrue ($fixture->add (0, 1 ) == 1);  $fixture = new Calculator();assertTrue ($fixture->add (1, 0  ) == 1);

?>

Page 15: Minicurso de TDD

Teste Unitário: desculpas mais comuns

•Requer tempo, e meus projetos são “pra ontem”;

•É perda de tempo, pois se mudar minha classe, tenho que alterar os testes;

•Está “funcionando” em produção faz tempo;

•Não preciso de teste, meu código é sólido como uma pedra;

•Depois eu faço;

•Os testes ficam para a próxima etapa;

Page 16: Minicurso de TDD

Teste Unitário: benefícios

•Reduz a quantidade de erros do código;

•Diminui a manutenção do sistema;

•Testes automatizados podem ser executados quando necessário;

•Fácil de alterar e refatorar o código;

•As classes são modularizadas;

•São uma forma de documentação do código;

•Testes Unitários são divertidos!

Page 17: Minicurso de TDD

TDD – Test-Driven Development

“Desenvolvimento guiado por testes”.

“TDD se popularizou através da

Extreme Programming (XP) por Kent Beck”.

Page 18: Minicurso de TDD

TDD: princípios

•Primeiro o teste, depois a implementação;

•O teste define o que a classe deve fazer;

•Nunca alterar um teste para facilitar que outro passe;

•Simplicidade •KISS – Keep It Simple Stupid•DRY – Don’t Repeat Yourself•YAGNI – You Ain’t Gonna Need It

Page 19: Minicurso de TDD

TDD: ciclo

Page 20: Minicurso de TDD

PHPUnit

“O PHPUnit é um framework que auxilia a criação e a execução automática de testes unitários sobre classes PHP”.

•Fácil integração com IDEs (Netbeans, Eclipse PDT);

•Integração com frameworks de desenvolvimento (Symfony, Zend Framework);

Page 21: Minicurso de TDD

PHPUnit: exemplo

<?phprequire_once 'PHPUnit/Framework.php'; class ArrayTest extends PHPUnit_Framework_TestCase{    public function testNewArrayIsEmpty()    {        // Cria um array.        $array = array();         // Verifica se o tamanho do array é igual a 0.        $this->assertEquals(0, sizeof($array));    }     public function testArrayContainsAnElement()    {         // Cria um array.        $array = array();         // Adiciona um elemento ao array        $array[] = 'Element';         // Verifica se o tamanho do array é igual a 1.        $this->assertEquals(1, sizeof($array));    } }

Page 22: Minicurso de TDD

PHPUnit: exemplo

<?phprequire_once 'PHPUnit/Framework.php'; class ArrayTest extends PHPUnit_Framework_TestCase{    public function testNewArrayIsEmpty()    {        // Cria um array.        $array = array();         // Verifica se o tamanho do array é igual a 0.        $this->assertEquals(0, sizeof($array));    }     public function testArrayContainsAnElement()    {         // Cria um array.        $array = array();         // Adiciona um elemento ao array        $array[] = 'Element';         // Verifica se o tamanho do array é igual a 1.        $this->assertEquals(1, sizeof($array));    } }

Page 23: Minicurso de TDD

Coding Dojo

“É uma técnica de treinamento que remete as artes marciais. O dojô é

o local onde os movimentos da luta são repetidos a exaustão, sempre

fazendo pequenas melhorias a cada repetição. No nosso caso, o

treino deve reunir pessoas para resolver um problema simples de

programação em conjunto, usando apenas um computador ligado a

um projetor”. (dojofloripa.wordpress.com)

Page 24: Minicurso de TDD

•Aprendizado contínuo;

•Ambiente:

•Não-competitivo;

•Colaborativo;

•Inclusivo;

•Falha e Redundância;

•Baby steps;

dojorio.wordpress.com

Coding Dojo: princípios

Page 25: Minicurso de TDD

•Computador + projetor;

•Par + platéia;

•TDD;

•Todos devem entender;

•Sempre começar do zero;

Coding Dojo: regras gerais

Page 26: Minicurso de TDD

Ao final da sessão:

•O que aprendemos?

•O que gostamos?

•O que podemos melhorar?

•Comentários?

Coding Dojo: retrospectiva

Page 27: Minicurso de TDD

•Kata:

•Apresentação da solução do problema;

•Todos devem conseguir reproduzir;

•Interrupções permitidas para tirar dúvidas;

Coding Dojo: formatos

Page 28: Minicurso de TDD

•Randori:

•Programação em par;

•Turnos “time-boxed”;

•Após o turno:•O co-piloto vira piloto;•O piloto volta pra platéia;•Um novo co-piloto é convidado da platéia;

•Comentários e críticas somente no verde;

•Silêncio no vermelho;

Coding Dojo: formatos

Page 29: Minicurso de TDD

Coding Dojo: prática

Vamos aos códigos..

Page 30: Minicurso de TDD

Links e referências

•http://www.phpunit.de•http://www.simpletest.org•http://www.agiledata.org•http://www.improveit.com.br•http://c2.com/cgi/wiki?TestDrivenDevelopment •http://www.infoq.com/br•http://blog.agilephp.com•http://www.slideshare.net/sebastian_bergmann•http://dojofloripa.wordpress.com•http://dojorio.wordpress.com•http://agilesoftwaredevelopment.com •http://misko.hevery.com•http://martinfowler.com•http://www.testdriven.com•http://www.lastcraft.com/blog

Page 31: Minicurso de TDD

Contato

•Pedro H. B. Santos•[email protected]•http://blog.pedrohsantos.eti.br

•William G. Comnisky•[email protected]•http://blog.will.eti.br

Page 32: Minicurso de TDD

TATFT!Test All The F*in’ Time