Qualidade no desenvolvimento de Software com TDD e PHPUnit

Domingos Teruel
Domingos TeruelSenior PHP Developer, Consultant and Speaker.
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
1 de 63

Recomendados

TDD - Test Driven Development por
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven DevelopmentEngenharia de Software Ágil
553 vistas46 diapositivas
Introdução ao TDD por
Introdução ao TDDIntrodução ao TDD
Introdução ao TDDEduardo Mendes
1.2K vistas61 diapositivas
TDD (Test-Driven Development) por
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
3.8K vistas37 diapositivas
Introdução ao XP por
Introdução ao XPIntrodução ao XP
Introdução ao XPPaulo Rebelo, MSc, PMP, CSP
646 vistas30 diapositivas
TDD Desenvolvimento orientado ao teste por
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeRafaela Prado
190 vistas13 diapositivas
TDD na Prática por
TDD na PráticaTDD na Prática
TDD na PráticaRafael Fuchs, PMP, MBA
927 vistas43 diapositivas

Más contenido relacionado

La actualidad más candente

Test-Driven Develpment - TDD por
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
821 vistas27 diapositivas
Palestra TDD Javou! #08 2016 por
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Matheus Fechine de Moura
239 vistas62 diapositivas
TDD com Código Legado por
TDD com Código LegadoTDD com Código Legado
TDD com Código LegadoCesar Romero
163 vistas23 diapositivas
TDD com Código Legado - "Atualizado" por
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"Cesar Romero
181 vistas26 diapositivas
Facilitando o desenvolvimento orientado a testes em aplicações PHP por
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
591 vistas14 diapositivas
Desenvolvimento Dirigido por Testes por
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
1.7K vistas30 diapositivas

La actualidad más candente(19)

TDD com Código Legado por Cesar Romero
TDD com Código LegadoTDD com Código Legado
TDD com Código Legado
Cesar Romero163 vistas
TDD com Código Legado - "Atualizado" por Cesar Romero
TDD com Código Legado - "Atualizado"TDD com Código Legado - "Atualizado"
TDD com Código Legado - "Atualizado"
Cesar Romero181 vistas
Facilitando o desenvolvimento orientado a testes em aplicações PHP por Pedro Chaves
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
Pedro Chaves591 vistas
Desenvolvimento Dirigido por Testes por Camilo Ribeiro
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
Camilo Ribeiro1.7K vistas
Desenvolvimento em .Net - Testes Unitários por Vitor Silva
Desenvolvimento em .Net - Testes UnitáriosDesenvolvimento em .Net - Testes Unitários
Desenvolvimento em .Net - Testes Unitários
Vitor Silva1.4K vistas
CNQS - Testes Automatizados & Continuous Delivery por Samanta Cicilia
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
Samanta Cicilia1.4K vistas
Treinamento Testes Unitários - parte 1 por Diego Pacheco
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
Diego Pacheco1.8K vistas
Introdução a testes automatizados por Thiago Ghisi
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi5.5K vistas
Testando Aplicações Django: Quando, Como e Onde? por Bernardo Fontes
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 Fontes8.8K vistas

Destacado

Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo por
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
3.9K vistas15 diapositivas
Conceitos e fundamentos sobre testes de software e garantia da qualidade por
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
23.6K vistas82 diapositivas
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES por
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESCAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESMarco Coghi
587 vistas35 diapositivas
QA for noobs - qualidade de software para novatos por
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"
1.4K vistas23 diapositivas
Testes de software por
Testes de softwareTestes de software
Testes de softwareteste
779 vistas35 diapositivas
Qualidade de Software com Microsoft Visual Studio por
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioAdriano Bertucci
2.9K vistas85 diapositivas

Destacado(18)

Uma Metodologia Para Teste De Software No Contexto Da Melhoria De Processo por crc1404
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
crc14043.9K vistas
Conceitos e fundamentos sobre testes de software e garantia da qualidade por rzauza
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
rzauza23.6K vistas
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES por Marco Coghi
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZESCAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
CAPACITAÇÃO TÉCNICA DE JOVENS APRENDIZES
Marco Coghi587 vistas
Testes de software por teste
Testes de softwareTestes de software
Testes de software
teste779 vistas
Qualidade de Software com Microsoft Visual Studio por Adriano Bertucci
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual Studio
Adriano Bertucci2.9K vistas
Qualidade de Software no século XXI por Bruno Penteado
Qualidade de Software no século XXIQualidade de Software no século XXI
Qualidade de Software no século XXI
Bruno Penteado1.6K vistas
Introdução a Testes de Software por Igor Takenami
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
Igor Takenami887 vistas
Homologação requisitos para validar sistemas erp por Sérgio Caldeira
Homologação   requisitos para validar sistemas erpHomologação   requisitos para validar sistemas erp
Homologação requisitos para validar sistemas erp
Sérgio Caldeira4.2K vistas
[GUTS-RS] Testes em Projetos de Implantação de ERP por GUTS-RS
[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 2K vistas
[GUTS-RS] Performance Engineering por GUTS-RS
[GUTS-RS] Performance Engineering[GUTS-RS] Performance Engineering
[GUTS-RS] Performance Engineering
GUTS-RS 1.7K vistas
Desenvolvimento para iOS por Igor Takenami
Desenvolvimento para iOSDesenvolvimento para iOS
Desenvolvimento para iOS
Igor Takenami2.9K vistas
Lean para potencializar a qualidade no software por Dionatan default
Lean para potencializar a qualidade no softwareLean para potencializar a qualidade no software
Lean para potencializar a qualidade no software
Dionatan default1.9K vistas
Introdução a Qualidade de Software por Igor Takenami
Introdução a Qualidade de SoftwareIntrodução a Qualidade de Software
Introdução a Qualidade de Software
Igor Takenami1.9K vistas
Papéis em Teste e Qualidade de Software por Camilo Ribeiro
Papéis em Teste e Qualidade de SoftwarePapéis em Teste e Qualidade de Software
Papéis em Teste e Qualidade de Software
Camilo Ribeiro10K vistas
Testes De Software - Uma Visão Geral por paulo peres
Testes De Software - Uma Visão GeralTestes De Software - Uma Visão Geral
Testes De Software - Uma Visão Geral
paulo peres18.1K vistas

Similar a Qualidade no desenvolvimento de Software com TDD e PHPUnit

Desenvolvimento Guiado por Testes por
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
449 vistas37 diapositivas
Introdução à Engenharia de Testes de Software por
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
257 vistas17 diapositivas
1 2 3 - Testando - Automatizando os testes de software por
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
909 vistas87 diapositivas
Teste de software por
Teste de softwareTeste de software
Teste de softwareRafael Sanches
1.3K vistas25 diapositivas
Testes automatizados.pptx por
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
33 vistas50 diapositivas
Testes de unidade - RP Tec Com por
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec ComIgor Rozani
180 vistas35 diapositivas

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

Desenvolvimento Guiado por Testes por elliando dias
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
elliando dias449 vistas
Introdução à Engenharia de Testes de Software por Cloves da Rocha
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
Cloves da Rocha257 vistas
1 2 3 - Testando - Automatizando os testes de software por Heider Lopes
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
Heider Lopes909 vistas
Testes de unidade - RP Tec Com por Igor Rozani
Testes de unidade - RP Tec ComTestes de unidade - RP Tec Com
Testes de unidade - RP Tec Com
Igor Rozani180 vistas
Gerenciamento da Qualidade de Software 4.pptx por Roberto Nunes
Gerenciamento da Qualidade de Software 4.pptxGerenciamento da Qualidade de Software 4.pptx
Gerenciamento da Qualidade de Software 4.pptx
Roberto Nunes53 vistas
Palestra Teste de Software: princípios, ferramentas e carreira por Taís Dall'Oca
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
Taís Dall'Oca2.2K vistas
Introdução ao Teste de Software - Uma abordagem prática por Fabrício Campos
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
Fabrício Campos30.8K vistas
Introdução a Testes de Software - Unidade I por João Lourenço
Introdução a Testes de Software - Unidade IIntrodução a Testes de Software - Unidade I
Introdução a Testes de Software - Unidade I
João Lourenço6.1K vistas
A Carreira de Desenvolvedor: do Jr ao Sênior por Marcos Pereira
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
Marcos Pereira314 vistas
Menos teste e mais qualidade - como equilibrar essa equação? por Igor Abade
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 Abade723 vistas
Sobre TDD - Tech Friday da Everis Uberlândia por Rogerio Fontes
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes66 vistas
Behavior-Driven Development (BDD) - DevOps Summit 2016 por Renato Groff
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
Renato Groff882 vistas

Más de Domingos Teruel

Lições aprendidas com a Re (escrita |design) de uma aplicação PHP por
 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
768 vistas55 diapositivas
Por dentro do Projeto openSUSE por
Por dentro do Projeto openSUSEPor dentro do Projeto openSUSE
Por dentro do Projeto openSUSEDomingos Teruel
1.4K vistas62 diapositivas
Vamos falar de Clean Code, Refatoração e TDD por
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
1.4K vistas160 diapositivas
Zend Framework 2 - O que esperar da nova versão por
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
2K vistas76 diapositivas
Taxonomias e Tipos de Conteúdos com WordPress 3 por
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
2.3K vistas32 diapositivas
Desmistificando o Framework da Zend por
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da ZendDomingos Teruel
1.7K vistas75 diapositivas

Más de Domingos Teruel(11)

Lições aprendidas com a Re (escrita |design) de uma aplicação PHP por 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
Domingos Teruel768 vistas
Por dentro do Projeto openSUSE por Domingos Teruel
Por dentro do Projeto openSUSEPor dentro do Projeto openSUSE
Por dentro do Projeto openSUSE
Domingos Teruel1.4K vistas
Vamos falar de Clean Code, Refatoração e TDD por Domingos Teruel
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
Domingos Teruel1.4K vistas
Zend Framework 2 - O que esperar da nova versão por Domingos Teruel
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
Domingos Teruel2K vistas
Taxonomias e Tipos de Conteúdos com WordPress 3 por Domingos Teruel
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
Domingos Teruel2.3K vistas
Desmistificando o Framework da Zend por Domingos Teruel
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
Domingos Teruel1.7K vistas
Desenvolvendo Aplicações com Zend Framework por Domingos Teruel
Desenvolvendo Aplicações com Zend FrameworkDesenvolvendo Aplicações com Zend Framework
Desenvolvendo Aplicações com Zend Framework
Domingos Teruel3.4K vistas
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface por Domingos Teruel
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
Domingos Teruel646 vistas
Desenvolvendo Aplicativos com Zend Framework e banco de dados CDS/ISIS por Domingos Teruel
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
Domingos Teruel1.4K vistas
Desenvolvendo aplicações PHP, AJAX e YUI! Yahoo User Interface por Domingos Teruel
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
Domingos Teruel1.1K vistas
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface por Domingos Teruel
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
Domingos Teruel1.1K vistas

Último

DevFest2023-Pragmatismo da Internet das Coisas por
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das CoisasWalter Coan
23 vistas40 diapositivas
Skills e Squads, como trabalhar? por
Skills e Squads, como trabalhar?Skills e Squads, como trabalhar?
Skills e Squads, como trabalhar?Annelise Gripp
31 vistas13 diapositivas
Shift left DevOps Experience por
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps ExperienceWalter Coan
5 vistas19 diapositivas
Competências para extrair inovação na tecnologia! por
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!Annelise Gripp
15 vistas11 diapositivas
TechConnection 2023 Floripa Azure Container Apps por
TechConnection 2023 Floripa Azure Container AppsTechConnection 2023 Floripa Azure Container Apps
TechConnection 2023 Floripa Azure Container AppsWalter Coan
5 vistas14 diapositivas
certificado excel.pdf por
certificado excel.pdfcertificado excel.pdf
certificado excel.pdfjuniorcarvalho136
5 vistas1 diapositiva

Último(8)

DevFest2023-Pragmatismo da Internet das Coisas por Walter Coan
DevFest2023-Pragmatismo da Internet das CoisasDevFest2023-Pragmatismo da Internet das Coisas
DevFest2023-Pragmatismo da Internet das Coisas
Walter Coan23 vistas
Skills e Squads, como trabalhar? por Annelise Gripp
Skills e Squads, como trabalhar?Skills e Squads, como trabalhar?
Skills e Squads, como trabalhar?
Annelise Gripp31 vistas
Shift left DevOps Experience por Walter Coan
Shift left DevOps ExperienceShift left DevOps Experience
Shift left DevOps Experience
Walter Coan5 vistas
Competências para extrair inovação na tecnologia! por Annelise Gripp
Competências para extrair inovação na tecnologia!Competências para extrair inovação na tecnologia!
Competências para extrair inovação na tecnologia!
Annelise Gripp15 vistas
TechConnection 2023 Floripa Azure Container Apps por Walter Coan
TechConnection 2023 Floripa Azure Container AppsTechConnection 2023 Floripa Azure Container Apps
TechConnection 2023 Floripa Azure Container Apps
Walter Coan5 vistas
MAPA - CONTABILIDADE EMPRESARIAL - 54/2023 por AcademiaDL
MAPA - CONTABILIDADE EMPRESARIAL - 54/2023MAPA - CONTABILIDADE EMPRESARIAL - 54/2023
MAPA - CONTABILIDADE EMPRESARIAL - 54/2023
AcademiaDL62 vistas
Conheça agora o UiPath Autopilot™ para o Studio.pdf por BrunaCavalcanti29
Conheça agora o UiPath Autopilot™ para o Studio.pdfConheça agora o UiPath Autopilot™ para o Studio.pdf
Conheça agora o UiPath Autopilot™ para o Studio.pdf
BrunaCavalcanti2914 vistas

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]

Notas del editor

  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