SlideShare a Scribd company logo
1 of 63
Download to read offline
Qualidade de Software
com TDD e PHPUnit
        Domingos Teruel
              Desenvolvedor
      São José, 21 de agosto de 2011
O Palestrante
✦   Tecnólogo em Computação especialista em Sistemas Web e
    Interface
✦   Atua na área de desenvolvimento e implementação de projetos de
    Software Web
✦   Desenvolvedor Mobile
✦   Desenvolvedor PHP desde 1999 e membro ativo desde 2001
✦   Desenvolvedor WordPress
✦   Membro ativo das comunidades de SL: PHP-SP, PHP-SC, ZF-BR,
    KDE-BR, OpenSUSE-BR, AMAROK-DE e WP-DEVEL
✦   Trocou São Paulo por Floripa para desenvolver seu trabalho na
    Primesoft Sistemas
✦   Na rede: http://about.me/mingomax
A Audiência
✓ Estudantes?
✓ Curiosos / Entusiastas?
✓ Desenvolvedores PHP?
✓ Desenvolvedores de outras linguagens?
✓ Todas as opções acima!
✓ Nenhuma da Opções acima!
Agenda

• Contextualização
• TDD
• Teste Unitários
• PHPUnit
Reflexão
• Errar é inerente a natureza humana.
  Precaver-se contra os erros é uma atitude
  inteligente.

• O processo de desenvolvimento de software
  é sujeito a erros. Sendo assim, a atividade de
  teste é fundamental para se obter produtos
  de software com garantia de qualidade.

• Discordar ou ignorar a frase acima revela
  grande amadorismo.
Qualidade de Software

“Totalidade de características de uma entidade que lhe confere
    a capacidade de satisfazer as necessidades explícitas e
                           implícitas.”
• Conformidade a:
 • Requisitos funcionais e de desempenho;
 • Padrões e convenções de
    desenvolvimento preestabelecidos;

 • Atributos implícitos que todo software
    desenvolvido profissionalmente deve
    possuir.
Como garantir a
qualidade de software?
• 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 quê surgem as
          falhas?

• Alterações;
• Tempo;
• Complexidade;
TESTES
Porque você precisa dele, mas
        ainda não sabe
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
Contras
• 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
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 versus
 Depuração
Objetivo 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
• Testes de Unidade;
• Testes de Integração;
• Testes de Sistema;
• Testes de Integração de Sistema;
• Testes de Aceitação;
A “Espiral da Morte” do Teste
Test Driven
Development, TDD
“TDD = Test-
First + Design
 Incremental”
    Kent Beck
•   TDD é uma técnica de desenvolvimento de software
    cujo processo é formado por pequenas iterações para o
    desenvolvimento de uma nova funcionalidade,
    começando pela implementação de um caso de teste,
    depois pelo código necessário para fazer o teste passar,
    e finalmente pela refatoração do código visando melhor
    acomodar as mudanças feitas.

•   Não é um método para testar software, mas para
    construir software.

•   TDD vem do conceito de “test-first programming” do XP
    (Extreme Programming), mas acabou ganhando tanto
    interesse, que hoje tem sido adotado independente do
    XP e das técnicas de programação ágil;
Test-first
• Escrever testes antes da implementação:
   • Faz você pensar no comportamento
   • Reduz código especulativo
   • Documenta
• Escreva somente código suficiente para o
  teste passar e nada além disso

• Escreva testes pequenos: teste a menor
  quantidade possível de código de cada vez

• Escreva testes muito rápidos: não devem
  demorar mais do que alguns segundos para
  serem executados
Design incremtal
• Adição de novas funcionalidades em
  pequenos passos

• O conceito chave de TDD é ter um
  feedback rápido das mudanças no código
• A Metodologia TDD é conduzida através
  dos “testes do programador”.

• Frequentemente esses testes são chamados
  de “teste de unidade”, mas esse nem
  sempre é o caso (pode ser teste de
  integração).

• É importante destacar que não se trata dos
  testes de sistema (caixa preta) nem os de
  aceitação (feitos pelo usuário final)
MANTRA
  DO
 TDD
Ainda sobre tipo de
       testes
Testes Unitários
• Testam apenas um componente do sistema
• Todos os outros componentes são
  simulados (mock objects)

• Ferramenta: PHPUnit
• Fundamental para a prática do
  TDD!
Testes de Integração
• Testam a integração entre componentes
• Envolvem dois ou mais componentes
  (classes+SGBD, classes+SGBD+Fast, etc.)

• Ferramenta: PHPUnit, DBUnit, HSQLDB, Fit
• Normalmente não utilizado em TDD
Testes de Aceitação
• Testam uma história, funcionalidade ou caso
  de uso

• Envolvem vários componentes do sistema
• Ferramenta
: PHPUnit, Selenium
• Pode ser utilizado em TDD
Teste Unitário e
    PHPUnit
Atitude!

• Testar é uma atividade destrutiva!
• Pense de forma negativa quando estiver
  criando planos de teste ou explorando o
  software!
• Explore funcionalidades, pense no que não
  foi pensado!
Princípios
•   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;
PHPUnit
•   Escrito por Sebastian
    Bergmann

•   Baseado nos conceitos
    do JUnit

•   Atualmente na versão
    3.6.12

•   Requer PHP 5
Escrevendo testes
Quando você começar, nunca mais vai parar
Anatomia
•   Toda classe deve ter seu par para Teste:
     •   nomeClasse.php
     •   <nomeClasse>Test.php


•   Escrever o caso de teste, usando o pós-fixo “Test”
     •   A classe tem um metodo algumaCoisa()
     •   Deve-se criar um metodo testAlgumaCoisa()
Anatomia de um teste
      unitário
Raio-x Suite de Testes
Executando
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
Mantenha seu ambiente
       limpo!
O que não se pode
     testar?
•   Singletons

        •   MinhaClasse::getInstance();

•   Depêndencias

        •   SO exec('ls -la')

        •   Recursos externos: APIs, Filesystem

•   Métodos privados

    •   private method fazTudo() {...
Outros recursos
 interessantes
As vezes os testes
  precisam de dublês
• Dummy
• Fake
• Stub
• Spy
• Mock
•   Gera resultados não determinísticos (hora, temperatura
    atual...);

•   Tem estados que são difíceis de criar ou reproduzir
    (erro de
    comunicação da rede);

•   É lento (um banco de dados completo que precisa ser
    inicializado antes do teste);

•   Ainda não existe ou pode ter comportamento alterado;

•   Teriam que adicionar informações e métodos
    exclusivamente para os testes (e não para sua função
    real).
Conclusões
• Colabora para o aumento da qualidade dos
  sistemas

• Desenvolvedores ficam mais corajosos e
  confiantes ao programar!

• Software cresce de forma ordenada e com
  qualidade de design

• Software se adapta com mais facilidade a
  mudanças
•   Demora mais?

    •   No início é necessário escrever muitos testes

    •   Depois da inércia a suite de regressão está pronta e
        escrevem-se menos testes

    •   Certeza de que a implementação está funcionando

    •   Maioria dos bugs encontrados em tempo de
        desenvolvimento

    •   Bugs de produção são encontrados e corrigidos com muito
        mais velocidade

•   Então no fim das contas demora-se muito menos tempo e com
    muito mais qualidade!
Referências
•   Introduction to TDD: http://www.agiledata.org/essays/tdd.html

•   Desenvolvimento Orientado a Testes: http://www.improveit.com.br/xp/
    praticas/tdd

•   Screencast TDD em ação: http://dojofloripa.wordpress.com/2007/05/21/
    screencast-tdd-em- acao/

•   Improve your unit tests by replacing your collaborators with mock
    objects: http://www.opensourcetutorials.com/tutorials/Server-Side-
    Coding/Java/java-unit-testing-with-mock-objects

•   Behaviour-Driven Development: http://behaviour-driven.org/

•   Test-drivendevelopment: by example [KentBeck]

•   Growing Object-Oriented Software,Guided byTests [Steve Freeman]

•   PHPUnit Pocket guide [Sebastian Bergmann]
Perguntas
Obrigado!!!!!
Feedbacks: http://joind.in/event/view/779

More Related Content

What's hot

Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPPedro Chaves
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosVitor Silva
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelManoel Pimentel Medeiros
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesPaulo César M Jeveaux
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração ContínuaScrumHalf Tool
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 

What's hot (19)

Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDD
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
TDD com Código Legado
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
 
TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Desenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
 
Implementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel PimentelImplementando Testes Unitários em Java - Manoel Pimentel
Implementando Testes Unitários em Java - Manoel Pimentel
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
Testes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de TestesTestes de Software & Ferramentas de Testes
Testes de Software & Ferramentas de Testes
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Metodologias Ágeis
Metodologias ÁgeisMetodologias Ágeis
Metodologias Ágeis
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
TDD
TDDTDD
TDD
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 

Viewers also liked

Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De ProcessoUma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processocrc1404
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESCAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESMarco Coghi
 
QA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosQA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosBruno Fernandes "PorKaria"
 
Testes de software
Testes de softwareTestes de software
Testes de softwareteste
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioAdriano Bertucci
 
Qualidade de Software no século XXI
Qualidade de Software no século XXIQualidade de Software no século XXI
Qualidade de Software no século XXIBruno Penteado
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de SoftwareIgor Takenami
 
Homologação requisitos para validar sistemas erp
Homologação   requisitos para validar sistemas erpHomologação   requisitos para validar sistemas erp
Homologação requisitos para validar sistemas erpSérgio Caldeira
 
[GUTS-RS] Testes em Projetos de Implantação de ERP
[GUTS-RS] Testes em Projetos de Implantação de ERP[GUTS-RS] Testes em Projetos de Implantação de ERP
[GUTS-RS] Testes em Projetos de Implantação de ERPGUTS-RS
 
[GUTS-RS] Performance Engineering
[GUTS-RS] Performance Engineering[GUTS-RS] Performance Engineering
[GUTS-RS] Performance EngineeringGUTS-RS
 
Desenvolvimento para iOS
Desenvolvimento para iOSDesenvolvimento para iOS
Desenvolvimento para iOSIgor Takenami
 
Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareDionatan default
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareNécio de Lima Veras
 
Introdução a Qualidade de Software
Introdução a Qualidade de SoftwareIntrodução a Qualidade de Software
Introdução a Qualidade de SoftwareIgor Takenami
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwareCamilo Ribeiro
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geralpaulo peres
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução Elaine Cecília Gatto
 

Viewers also liked (18)

Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De ProcessoUma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESCAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
 
QA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatosQA for noobs - qualidade de software para novatos
QA for noobs - qualidade de software para novatos
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual Studio
 
Qualidade de Software no século XXI
Qualidade de Software no século XXIQualidade de Software no século XXI
Qualidade de Software no século XXI
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
 
Homologação requisitos para validar sistemas erp
Homologação   requisitos para validar sistemas erpHomologação   requisitos para validar sistemas erp
Homologação requisitos para validar sistemas erp
 
[GUTS-RS] Testes em Projetos de Implantação de ERP
[GUTS-RS] Testes em Projetos de Implantação de ERP[GUTS-RS] Testes em Projetos de Implantação de ERP
[GUTS-RS] Testes em Projetos de Implantação de ERP
 
[GUTS-RS] Performance Engineering
[GUTS-RS] Performance Engineering[GUTS-RS] Performance Engineering
[GUTS-RS] Performance Engineering
 
Desenvolvimento para iOS
Desenvolvimento para iOSDesenvolvimento para iOS
Desenvolvimento para iOS
 
Lean para potencializar a qualidade no software
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no software
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Introdução a Qualidade de Software
Introdução a Qualidade de SoftwareIntrodução a Qualidade de Software
Introdução a Qualidade de Software
 
Papéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de Software
 
Testes De Software - Uma Visão Geral
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
 
Qualidade de Software - Introdução
Qualidade de Software - Introdução Qualidade de Software - Introdução
Qualidade de Software - Introdução
 

Similar to Qualidade no desenvolvimento de Software com TDD e PHPUnit

Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe munizMatheus de Lara Calache
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxRoberto Nunes
 
Palestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraTaís Dall'Oca
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaFabrício Campos
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IJoão Lourenço
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorMarcos Pereira
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Igor Abade
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentOtavio Augusto
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 

Similar to Qualidade no desenvolvimento de Software com TDD e PHPUnit (20)

Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz6. apresentacao rp tec com 2018 igor rozani e felipe muniz
6. apresentacao rp tec com 2018 igor rozani e felipe muniz
 
Testes de unidade - RP Tec Com
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
 
Gerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
 
Palestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreiraPalestra Teste de Software: princípios, ferramentas e carreira
Palestra Teste de Software: princípios, ferramentas e carreira
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Introdução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?Menos teste e mais qualidade - como equilibrar essa equação?
Menos teste e mais qualidade - como equilibrar essa equação?
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 

More from Domingos Teruel

Lições aprendidas com a Re (escrita |design) de uma aplicação PHP
 Lições aprendidas com a Re (escrita |design) de uma aplicação PHP  Lições aprendidas com a Re (escrita |design) de uma aplicação PHP
Lições aprendidas com a Re (escrita |design) de uma aplicação PHP Domingos Teruel
 
Por dentro do Projeto openSUSE
Por dentro do Projeto openSUSEPor dentro do Projeto openSUSE
Por dentro do Projeto openSUSEDomingos Teruel
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDDomingos Teruel
 
Zend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versãoZend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versãoDomingos Teruel
 
Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Domingos Teruel
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDomingos Teruel
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDomingos Teruel
 
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISISDesenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISISDomingos Teruel
 
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDesenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDomingos Teruel
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDomingos Teruel
 

More from Domingos Teruel (11)

Lições aprendidas com a Re (escrita |design) de uma aplicação PHP
 Lições aprendidas com a Re (escrita |design) de uma aplicação PHP  Lições aprendidas com a Re (escrita |design) de uma aplicação PHP
Lições aprendidas com a Re (escrita |design) de uma aplicação PHP
 
Por dentro do Projeto openSUSE
Por dentro do Projeto openSUSEPor dentro do Projeto openSUSE
Por dentro do Projeto openSUSE
 
Vamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDDVamos falar de Clean Code, Refatoração e TDD
Vamos falar de Clean Code, Refatoração e TDD
 
Zend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versãoZend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versão
 
Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3Taxonomias e Tipos de Conteúdos com WordPress 3
Taxonomias e Tipos de Conteúdos com WordPress 3
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Desenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
 
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISISDesenvolvendo Aplicativos com  Zend Framework  e banco de dados CDS/ISIS
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS
 
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User InterfaceDesenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface
 
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User InterfaceDesenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
 

Qualidade no desenvolvimento de Software com TDD e PHPUnit

  • 1. Qualidade de Software com TDD e PHPUnit Domingos Teruel Desenvolvedor São José, 21 de agosto de 2011
  • 2. O Palestrante ✦ Tecnólogo em Computação especialista em Sistemas Web e Interface ✦ Atua na área de desenvolvimento e implementação de projetos de Software Web ✦ Desenvolvedor Mobile ✦ Desenvolvedor PHP desde 1999 e membro ativo desde 2001 ✦ Desenvolvedor WordPress ✦ Membro ativo das comunidades de SL: PHP-SP, PHP-SC, ZF-BR, KDE-BR, OpenSUSE-BR, AMAROK-DE e WP-DEVEL ✦ Trocou São Paulo por Floripa para desenvolver seu trabalho na Primesoft Sistemas ✦ Na rede: http://about.me/mingomax
  • 3. A Audiência ✓ Estudantes? ✓ Curiosos / Entusiastas? ✓ Desenvolvedores PHP? ✓ Desenvolvedores de outras linguagens? ✓ Todas as opções acima! ✓ Nenhuma da Opções acima!
  • 4. Agenda • Contextualização • TDD • Teste Unitários • PHPUnit
  • 6. • Errar é inerente a natureza humana. Precaver-se contra os erros é uma atitude inteligente. • O processo de desenvolvimento de software é sujeito a erros. Sendo assim, a atividade de teste é fundamental para se obter produtos de software com garantia de qualidade. • Discordar ou ignorar a frase acima revela grande amadorismo.
  • 7. Qualidade de Software “Totalidade de características de uma entidade que lhe confere a capacidade de satisfazer as necessidades explícitas e implícitas.”
  • 8. • Conformidade a: • Requisitos funcionais e de desempenho; • Padrões e convenções de desenvolvimento preestabelecidos; • Atributos implícitos que todo software desenvolvido profissionalmente deve possuir.
  • 9. Como garantir a qualidade de software? • 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;
  • 10. Por quê surgem as falhas? • Alterações; • Tempo; • Complexidade;
  • 11. TESTES Porque você precisa dele, mas ainda não sabe
  • 12. Prós
  • 13. “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
  • 15. • 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
  • 16. O que são testes?
  • 17. “ O teste consiste em executar o programa com a intenção de encontrar erros”. (Myers, 1979)
  • 18. • 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;
  • 20. Objetivo 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
  • 22. • Testes de Unidade; • Testes de Integração; • Testes de Sistema; • Testes de Integração de Sistema; • Testes de Aceitação;
  • 23. A “Espiral da Morte” do Teste
  • 25. “TDD = Test- First + Design Incremental” Kent Beck
  • 26. TDD é uma técnica de desenvolvimento de software cujo processo é formado por pequenas iterações para o desenvolvimento de uma nova funcionalidade, começando pela implementação de um caso de teste, depois pelo código necessário para fazer o teste passar, e finalmente pela refatoração do código visando melhor acomodar as mudanças feitas. • Não é um método para testar software, mas para construir software. • TDD vem do conceito de “test-first programming” do XP (Extreme Programming), mas acabou ganhando tanto interesse, que hoje tem sido adotado independente do XP e das técnicas de programação ágil;
  • 28. • Escrever testes antes da implementação: • Faz você pensar no comportamento • Reduz código especulativo • Documenta
  • 29. • Escreva somente código suficiente para o teste passar e nada além disso • Escreva testes pequenos: teste a menor quantidade possível de código de cada vez • Escreva testes muito rápidos: não devem demorar mais do que alguns segundos para serem executados
  • 31. • Adição de novas funcionalidades em pequenos passos • O conceito chave de TDD é ter um feedback rápido das mudanças no código
  • 32. • A Metodologia TDD é conduzida através dos “testes do programador”. • Frequentemente esses testes são chamados de “teste de unidade”, mas esse nem sempre é o caso (pode ser teste de integração). • É importante destacar que não se trata dos testes de sistema (caixa preta) nem os de aceitação (feitos pelo usuário final)
  • 33. MANTRA DO TDD
  • 34. Ainda sobre tipo de testes
  • 36. • Testam apenas um componente do sistema • Todos os outros componentes são simulados (mock objects) • Ferramenta: PHPUnit • Fundamental para a prática do TDD!
  • 38. • Testam a integração entre componentes • Envolvem dois ou mais componentes (classes+SGBD, classes+SGBD+Fast, etc.) • Ferramenta: PHPUnit, DBUnit, HSQLDB, Fit • Normalmente não utilizado em TDD
  • 40. • Testam uma história, funcionalidade ou caso de uso • Envolvem vários componentes do sistema • Ferramenta : PHPUnit, Selenium • Pode ser utilizado em TDD
  • 41. Teste Unitário e PHPUnit
  • 42. Atitude! • Testar é uma atividade destrutiva! • Pense de forma negativa quando estiver criando planos de teste ou explorando o software! • Explore funcionalidades, pense no que não foi pensado!
  • 43. Princípios • 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;
  • 44. PHPUnit • Escrito por Sebastian Bergmann • Baseado nos conceitos do JUnit • Atualmente na versão 3.6.12 • Requer PHP 5
  • 45. Escrevendo testes Quando você começar, nunca mais vai parar
  • 46. Anatomia • Toda classe deve ter seu par para Teste: • nomeClasse.php • <nomeClasse>Test.php • Escrever o caso de teste, usando o pós-fixo “Test” • A classe tem um metodo algumaCoisa() • Deve-se criar um metodo testAlgumaCoisa()
  • 47. Anatomia de um teste unitário
  • 48. Raio-x Suite de Testes
  • 50. 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
  • 52. O que não se pode testar?
  • 53. Singletons • MinhaClasse::getInstance(); • Depêndencias • SO exec('ls -la') • Recursos externos: APIs, Filesystem • Métodos privados • private method fazTudo() {...
  • 55. As vezes os testes precisam de dublês • Dummy • Fake • Stub • Spy • Mock
  • 56. Gera resultados não determinísticos (hora, temperatura atual...); • Tem estados que são difíceis de criar ou reproduzir (erro de comunicação da rede); • É lento (um banco de dados completo que precisa ser inicializado antes do teste); • Ainda não existe ou pode ter comportamento alterado; • Teriam que adicionar informações e métodos exclusivamente para os testes (e não para sua função real).
  • 58. • Colabora para o aumento da qualidade dos sistemas • Desenvolvedores ficam mais corajosos e confiantes ao programar! • Software cresce de forma ordenada e com qualidade de design • Software se adapta com mais facilidade a mudanças
  • 59. Demora mais? • No início é necessário escrever muitos testes • Depois da inércia a suite de regressão está pronta e escrevem-se menos testes • Certeza de que a implementação está funcionando • Maioria dos bugs encontrados em tempo de desenvolvimento • Bugs de produção são encontrados e corrigidos com muito mais velocidade • Então no fim das contas demora-se muito menos tempo e com muito mais qualidade!
  • 61. Introduction to TDD: http://www.agiledata.org/essays/tdd.html • Desenvolvimento Orientado a Testes: http://www.improveit.com.br/xp/ praticas/tdd • Screencast TDD em ação: http://dojofloripa.wordpress.com/2007/05/21/ screencast-tdd-em- acao/ • Improve your unit tests by replacing your collaborators with mock objects: http://www.opensourcetutorials.com/tutorials/Server-Side- Coding/Java/java-unit-testing-with-mock-objects • Behaviour-Driven Development: http://behaviour-driven.org/ • Test-drivendevelopment: by example [KentBeck] • Growing Object-Oriented Software,Guided byTests [Steve Freeman] • PHPUnit Pocket guide [Sebastian Bergmann]

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n