Your SlideShare is downloading. ×
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Minicurso de TDD
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Minicurso de TDD

2,261

Published on

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

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

Published in: Technology, Business
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,261
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
77
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. TDD+PHP Pedro H. B. Santos William G. Comnisky
  • 2. 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.
  • 3. 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;
  • 4. Por que surgem falhas?
      • Alterações;
      • Tempo;
      • Complexidade;
  • 5. 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;
  • 6. 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.
  • 7. Tipos de testes
      • Estrutural;
      • Funcional;
      • De sistema;
      • De regressão;
      • De aceitação;
      • Unitário;
  • 8. Teste Unitário “ Procedimento automático usado para validar se uma pequena parte do código funciona corretamente ”.
  • 9. 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;
  • 10. 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;
  • 11. Teste Unitário: como funciona?
      • <?php
      • class Calculator {
      • public function add ($a, $b)
      • {
      • return $a + $b;
      • }
      • }
      • ?>
  • 12. Teste Unitário: como funciona?
      • <?php
      • $fixture = new Calculator();
      • print  $fixture->add (0, 1 ) ;
      • $fixture = new Calculator();
      • print  $fixture->add (1, 0  );
      • ?>
      • 1
      • 1
  • 13. 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'; 
      • ?>
      • Passou
      • Passou
  • 14. 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);
      • ?>
  • 15. 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;
  • 16. 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!
  • 17. TDD – Test-Driven Development “ Desenvolvimento guiado por testes ”. “ TDD se popularizou através da Extreme Programming (XP) por Kent Beck ”.
  • 18. 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
  • 19. TDD: ciclo
  • 20. 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);
  • 21. PHPUnit: exemplo
      • <?php require_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));     }
      • }
  • 22. PHPUnit: exemplo
      • <?php require_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));     }
      • }
  • 23. 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)
  • 24.
      • Aprendizado contínuo;
      • Ambiente:
        • Não-competitivo;
        • Colaborativo;
        • Inclusivo;
      • Falha e Redundância;
      • Baby steps;
    • dojorio .wordpress.com
    Coding Dojo: princípios
  • 25.
      • Computador + projetor;
      • Par + platéia;
      • TDD;
      • Todos devem entender;
      • Sempre começar do zero;
    Coding Dojo: regras gerais
  • 26.
    • Ao final da sessão:
      • O que aprendemos?
      • O que gostamos?
      • O que podemos melhorar?
      • Comentários?
    Coding Dojo: retrospectiva
  • 27.
      • Kata:
        • Apresentação da solução do problema;
        • Todos devem conseguir reproduzir;
        • Interrupções permitidas para tirar dúvidas;
    Coding Dojo: formatos
  • 28.
      • 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
  • 29. Coding Dojo: prática Vamos aos códigos..
  • 30. 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
  • 31. Contato
      • Pedro H. B. Santos
        • [email_address]
        • http://blog.pedrohsantos.eti.br
      • William G. Comnisky
        • [email_address]
        • http://blog.will.eti.br
  • 32. TATFT! Test All The F*in’ Time

×