Minicurso de TDD

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    Minicurso de TDD - Presentation 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)
        • 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
    24. Coding Dojo: prática Vamos aos códigos..
    25. 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
    26. Contato
        • Pedro H. B. Santos
          • [email_address]
          • http://blog.pedrohsantos.eti.br
        • William G. Comnisky
          • [email_address]
          • http://blog.will.eti.br
    27. TATFT! Test All The F*in’ Time

    + William G. ComniskyWilliam G. Comnisky, 5 months ago

    custom

    323 views, 1 favs, 0 embeds more stats

    Slides do minicurso de TDD ministrado por Pedro H. more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 323
      • 323 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 11
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories