Click here to load reader
Upload
william-g-comnisky
View
3.507
Download
6
Embed Size (px)
DESCRIPTION
Slides do minicurso de TDD ministrado por Pedro H. B. Santos e William G. Comnisky durante a PHPSC Conf 2009
Citation preview
TDD+PHPPedro H. B. Santos
William G. Comnisky
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.
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;
Por que surgem falhas?
•Alterações;
•Tempo;
•Complexidade;
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;
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.
Tipos de testes
•Estrutural;
•Funcional;
•De sistema;
•De regressão;
•De aceitação;
•Unitário;
Teste Unitário
“Procedimento automático usado para validar se uma
pequena parte do código funciona corretamente”.
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;
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;
Teste Unitário: como funciona?
<?php
class Calculator { public function add ($a, $b) { return $a + $b; } }?>
Teste Unitário: como funciona?
<?php
$fixture = new Calculator();print $fixture->add (0, 1 ) ;
$fixture = new Calculator();print $fixture->add (1, 0 );
?>
11
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
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);
?>
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;
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!
TDD – Test-Driven Development
“Desenvolvimento guiado por testes”.
“TDD se popularizou através da
Extreme Programming (XP) por Kent Beck”.
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
TDD: ciclo
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);
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)); } }
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)); } }
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)
•Aprendizado contínuo;
•Ambiente:
•Não-competitivo;
•Colaborativo;
•Inclusivo;
•Falha e Redundância;
•Baby steps;
dojorio.wordpress.com
Coding Dojo: princípios
•Computador + projetor;
•Par + platéia;
•TDD;
•Todos devem entender;
•Sempre começar do zero;
Coding Dojo: regras gerais
Ao final da sessão:
•O que aprendemos?
•O que gostamos?
•O que podemos melhorar?
•Comentários?
Coding Dojo: retrospectiva
•Kata:
•Apresentação da solução do problema;
•Todos devem conseguir reproduzir;
•Interrupções permitidas para tirar dúvidas;
Coding Dojo: formatos
•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
Coding Dojo: prática
Vamos aos códigos..
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
Contato
•Pedro H. B. Santos•[email protected]•http://blog.pedrohsantos.eti.br
•William G. Comnisky•[email protected]•http://blog.will.eti.br
TATFT!Test All The F*in’ Time