SlideShare a Scribd company logo
1 of 30
Ricardo Striquer Soares (ricardophp) http://twitter.com/rstriquer  http://www.programabrasil.org/ e teste de software
O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele  deve operar. Isso inclui o processo de  utilizar o produto para encontrar seus defeitos. Teste  de software
Frases celebres! - Depois validamos com o cliente; - O prazo está apertado, vamos deixar os testes para a próxima faze; - Depois escrevo o caso de teste;
Resultados conhecidos! - Não, eu fiz o que você mandou! - O software podia estar incorreto, mas ele não pode ter estragado seu computador! - Na minha máquina funcionou.
http://pt.wikipedia.org/wiki/ISO_9126 ISO/IEC 9126 ou NBR ISO/IEC 9126.
Objetivos de teste de softwares 1) Garantir que os objetivos técnicos e de negócios que guiaram o design e o desenvolvimento foram conquistados; 2) Autenticar que o software funciona como esperado; 3) Garantir que o processo (aplicativo) pode ser implementado com as mesmas características (esperadas);
Objetivos do xUnit Rápido ao se executar Isolado Composto Fácil de escrever Fácil de aprender Fácil de Ler Simples de executar
Fácil de aprender a se escrever X Fácil de escrever Isolados X Rápido de executar Problemas padrão de um xUnit
' Padrão de um autêntico xUnit http://flylib.com/books/en/1.104.1.24/1/
Funcionalidade padrão de um xUnit
Era uma vez .... EM 1997 Kent Beck e Eric Gamma estavam em um voo de Zürich para Atlanta seguindo para a OOPSLA Conference. Kent Beck possuía um framework de testes para SmallTalk e gostaria de aprender Java, Erich Gamma possuía um computador com Java e gostaria de ter um framework de testes parar Java, quando o Avião chegou a Atlanta Kent Beck havia aprendido Java de Erick Gamma e eles haviam escrito a versão inicial do que hoje é conhecido como jUnit.
A concorrência http://ojesunit.blogspot.com/ http://code.google.com/p/snaptest/ (Módulo Lime) http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing http://www.simpletest.org/
Quem utiliza phpUnit http://logging.apache.org/log4php/ http://www.s9y.org/ http://www.osoa.org/display/PHP/SOA+PHP+Homepage http://www.phpunit.de/wiki/WhoUsesPHPUnit http://propel.phpdb.org/ http://gtk.php.net/ http://agavi.org/ http://www.phing.info/
Características principais
Pontos importantes: TAGs para descritivos de funções @depends @dataProvider @expectedException @expectedException Classe PHPUnit_Framework_Assert assertArrayHasKey(); assertClassHasAttribute(); assertClassHasStaticAttribute(); assertContains(); assertContainsOnly(); assertEmpty(); assertEqualXMLStructure(); assertEquals(); assertFalse(); assertFileEquals(); assertFileExists(); assertGreaterThan(); assertGreaterThanOrEqual(); assertInstanceOf(); assertInternalType(); assertLessThan();assertLessThanOrEqual(); assertNull(); assertObjectHasAttribute(); assertRegExp(); assertStringMatchesFormat(); assertStringMatchesFormatFile(); assertSame(); assertSelectCount(); assertSelectEquals(); assertSelectRegExp(); assertStringEndsWith(); assertStringEqualsFile(); assertStringStartsWith(); assertTag(); assertThat(); assertTrue(); assertType(); assertXmlFileEqualsXmlFile(); assertXmlStringEqualsXmlFile(); assertXmlStringEqualsXmlString
Teste prático Simples. http://ticomqi.blogspot.com/2010/08/capitulo-4-escrevendo-testes-para.html Exemplo 4.1: operações com matrizes Testes com PHPUnit
Teste prático Complexo.
phpunit CarrinhoTest.php PHPUnit 3.4.15 by Sebastian Bergmann. ..FF.. Time: 1 second, Memory: 12,25Mb There were 2 failures: 1) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #2 (0.05, false, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 2) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #3 (0.05, true, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 FAILURES! Tests: 6, Assertions: 6, Failures: 2. Exemplo de resultado de erro
<?php include  ( &quot;../../loja.php&quot; ); include  ( __PATH_CARRINHO_DIR__ .  &quot;/carrinho.php&quot; ); /** * Classe de teste da classe Fechamento *  @package  Unit Test */ class  CarrinhoTest  extends  PHPUnit_Framework_TestCase { /**   * Efetua o teste da função FormaPagCartao   * @dataProvider provider_Carrinho___aplicaPromocaoPagamentoEntrega   */ public function  test_Carrinho___aplicaPromocaoPagamentoEntrega ( $desconto_perc ,  $bPagamentoComposto ,  $fTotalEmbalagem ,  $fFrete ,  $f_val_montagem ,  $iPagPag ,  $fResultado ) { $aListaCarrinho  =  array ( 'fTotalEmbalagem'  =>  $fTotalEmbalagem , 'fFrete'  =>  $fFrete , ); $aPromocaoInfo  =  array ( 'desconto_perc'  =>  $desconto_perc , ); $aFrete  =  array ( 'f_val_montagem'  =>  $f_val_montagem ); $this ->assertEquals(Carrinho :: __aplicaPromocaoPagamentoEntrega( $aPromocaoInfo ,  $bPagamentoComposto , & $aListaCarrinho ,  $aFrete ,  $iPagPag ),  $fResultado ); } /**   * Disponibiliza dados para o teste da forma de pagamento.   */ public function  provider_Carrinho___aplicaPromocaoPagamentoEntrega () { return  ( array  ( array (NULL,  false ,  0 , NULL,  0 ,  0 ,  0 ),  // resultado correto 0 array (NULL,  false ,  0 , NULL,  0 ,  6 ,  0 ),  // resultado correto 0  array ( 0.05 ,  false ,  10 ,  20 ,  100 ,  0 ,  120 ),  // resultado correto 130 array ( 0.05 ,  true ,  10 ,  20 ,  100 ,  0 ,  120 ),  // resultado correto 130 array ( 0 ,  false ,  0 ,  25 ,  0 ,  0 ,  25 ),  // resultado correto 25 array ( 0 ,  true ,  0 ,  25 ,  0 ,  0 ,  25 ),  // resultado correto 25 ) ); } } Exemplo de resultado de erro
Só isso ? E agora, o que mais? Selenium
Só isso ? E agora, o que mais? xDebug
Só isso ? E agora, o que mais? KCacheGrind
Só isso ? E agora, o que mais? CruiseControl
Só isso ? E agora, o que mais? phpUnderControl
Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 1 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 2 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
Perguntas legais Como testar métodos privados? Você parece estar ciente já, mas só vou reexpressá-lo de qualquer maneira, é um mau sinal, se você precisa testar métodos protegidos. O objectivo de um teste de unidade, é a interface de uma classe de teste e métodos protegidos são detalhes de implementação. Dito isto, há casos em que faz sentido. Se você usar a herança, você pode ver uma superclasse, fornecendo uma interface para a subclasse. Então, aqui, você teria que testar o método protegido (mas nunca um privado um). A solução para isso, é criar uma subclasse para fins de teste e usar isso para expor os métodos. Ex.: http://pt.efreedom.com/Question/1-34571/Qual-e-a-melhor-forma-de-metodos-particulares-de-teste-de-unidade
Perguntas legais Testando formulário entradas em PHPUnit Qual é a melhor maneira de testar $_GETe $_POSTentradas em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit
Perguntas legais Testando headers Qual é a melhor maneira de testar headers em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit Construir programa de exemplo com cURL
Fim http://www.programabrasil.org/palestras http://www.phpunit.de/ http://ticomqi.blogspot.com/p/phpunit.html

More Related Content

What's hot

Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
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
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot frameworkClaudenir Freitas
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Robson Agapito Correa
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitRobinson Castilho
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraValberto Carneiro
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...As Zone
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Thiago Dieb
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidEduardo Carrara de Araujo
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservicesClaudenir Freitas
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnitLeonardo Soares
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnitelliando dias
 

What's hot (20)

Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
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
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
Fisl 16 - Nem tudo o que reluz é ouro. hackeando as principais dicas de dese...
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
Palestra - PHPESTE 2015 - Hacker do bem, quebrando as principais dicas de des...
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Indo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps AndroidIndo além com Automação de Testes de Apps Android
Indo além com Automação de Testes de Apps Android
 
Junit
JunitJunit
Junit
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservices
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 

Viewers also liked

Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014Júlio de Lima
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXOtávio Calaça Xavier
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnitMindfire Solutions
 

Viewers also liked (6)

Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014Testes de Performance na Nuvem | TDC2014
Testes de Performance na Nuvem | TDC2014
 
Apostila Wordpress
Apostila WordpressApostila Wordpress
Apostila Wordpress
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
PHPUnit
PHPUnitPHPUnit
PHPUnit
 
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAXDesenvolvimento em três camadas com PHP 5, MVC e AJAX
Desenvolvimento em três camadas com PHP 5, MVC e AJAX
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnit
 

Similar to PHPUnit e teste de software

Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de SeleniumAutotic
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
TDC 2014 SP - Visual Regression Testing com PhantomCSS
TDC 2014 SP - Visual Regression Testing com PhantomCSSTDC 2014 SP - Visual Regression Testing com PhantomCSS
TDC 2014 SP - Visual Regression Testing com PhantomCSSStefan Teixeira
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverStefan Teixeira
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 
Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Webcasts developerWorks Brasil
 
Teste cabra da peste
Teste cabra da pesteTeste cabra da peste
Teste cabra da pesteMichele Silva
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDaniel Carvalhinho
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 

Similar to PHPUnit e teste de software (20)

Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
TDC 2014 SP - Visual Regression Testing com PhantomCSS
TDC 2014 SP - Visual Regression Testing com PhantomCSSTDC 2014 SP - Visual Regression Testing com PhantomCSS
TDC 2014 SP - Visual Regression Testing com PhantomCSS
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados Reusabilidade na Utilização de Frameworks Automatizados
Reusabilidade na Utilização de Frameworks Automatizados
 
Teste cabra da peste
Teste cabra da pesteTeste cabra da peste
Teste cabra da peste
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 

More from ricardophp

XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendadoricardophp
 
Xss Desvendado!
Xss Desvendado!Xss Desvendado!
Xss Desvendado!ricardophp
 
Mercado De Trabalho Curitibano
Mercado De Trabalho CuritibanoMercado De Trabalho Curitibano
Mercado De Trabalho Curitibanoricardophp
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
[Especial Conisli] Projetos De Software Em Uma Pequena Empresa
[Especial Conisli] Projetos De Software Em Uma Pequena Empresa[Especial Conisli] Projetos De Software Em Uma Pequena Empresa
[Especial Conisli] Projetos De Software Em Uma Pequena Empresaricardophp
 

More from ricardophp (6)

XSS Desvendado
XSS DesvendadoXSS Desvendado
XSS Desvendado
 
Xss Desvendado!
Xss Desvendado!Xss Desvendado!
Xss Desvendado!
 
Mercado De Trabalho Curitibano
Mercado De Trabalho CuritibanoMercado De Trabalho Curitibano
Mercado De Trabalho Curitibano
 
Php Security
Php SecurityPhp Security
Php Security
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
[Especial Conisli] Projetos De Software Em Uma Pequena Empresa
[Especial Conisli] Projetos De Software Em Uma Pequena Empresa[Especial Conisli] Projetos De Software Em Uma Pequena Empresa
[Especial Conisli] Projetos De Software Em Uma Pequena Empresa
 

PHPUnit e teste de software

  • 1. Ricardo Striquer Soares (ricardophp) http://twitter.com/rstriquer http://www.programabrasil.org/ e teste de software
  • 2. O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos. Teste de software
  • 3. Frases celebres! - Depois validamos com o cliente; - O prazo está apertado, vamos deixar os testes para a próxima faze; - Depois escrevo o caso de teste;
  • 4. Resultados conhecidos! - Não, eu fiz o que você mandou! - O software podia estar incorreto, mas ele não pode ter estragado seu computador! - Na minha máquina funcionou.
  • 6. Objetivos de teste de softwares 1) Garantir que os objetivos técnicos e de negócios que guiaram o design e o desenvolvimento foram conquistados; 2) Autenticar que o software funciona como esperado; 3) Garantir que o processo (aplicativo) pode ser implementado com as mesmas características (esperadas);
  • 7. Objetivos do xUnit Rápido ao se executar Isolado Composto Fácil de escrever Fácil de aprender Fácil de Ler Simples de executar
  • 8. Fácil de aprender a se escrever X Fácil de escrever Isolados X Rápido de executar Problemas padrão de um xUnit
  • 9. ' Padrão de um autêntico xUnit http://flylib.com/books/en/1.104.1.24/1/
  • 11. Era uma vez .... EM 1997 Kent Beck e Eric Gamma estavam em um voo de Zürich para Atlanta seguindo para a OOPSLA Conference. Kent Beck possuía um framework de testes para SmallTalk e gostaria de aprender Java, Erich Gamma possuía um computador com Java e gostaria de ter um framework de testes parar Java, quando o Avião chegou a Atlanta Kent Beck havia aprendido Java de Erick Gamma e eles haviam escrito a versão inicial do que hoje é conhecido como jUnit.
  • 12. A concorrência http://ojesunit.blogspot.com/ http://code.google.com/p/snaptest/ (Módulo Lime) http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing http://www.simpletest.org/
  • 13. Quem utiliza phpUnit http://logging.apache.org/log4php/ http://www.s9y.org/ http://www.osoa.org/display/PHP/SOA+PHP+Homepage http://www.phpunit.de/wiki/WhoUsesPHPUnit http://propel.phpdb.org/ http://gtk.php.net/ http://agavi.org/ http://www.phing.info/
  • 15. Pontos importantes: TAGs para descritivos de funções @depends @dataProvider @expectedException @expectedException Classe PHPUnit_Framework_Assert assertArrayHasKey(); assertClassHasAttribute(); assertClassHasStaticAttribute(); assertContains(); assertContainsOnly(); assertEmpty(); assertEqualXMLStructure(); assertEquals(); assertFalse(); assertFileEquals(); assertFileExists(); assertGreaterThan(); assertGreaterThanOrEqual(); assertInstanceOf(); assertInternalType(); assertLessThan();assertLessThanOrEqual(); assertNull(); assertObjectHasAttribute(); assertRegExp(); assertStringMatchesFormat(); assertStringMatchesFormatFile(); assertSame(); assertSelectCount(); assertSelectEquals(); assertSelectRegExp(); assertStringEndsWith(); assertStringEqualsFile(); assertStringStartsWith(); assertTag(); assertThat(); assertTrue(); assertType(); assertXmlFileEqualsXmlFile(); assertXmlStringEqualsXmlFile(); assertXmlStringEqualsXmlString
  • 16. Teste prático Simples. http://ticomqi.blogspot.com/2010/08/capitulo-4-escrevendo-testes-para.html Exemplo 4.1: operações com matrizes Testes com PHPUnit
  • 18. phpunit CarrinhoTest.php PHPUnit 3.4.15 by Sebastian Bergmann. ..FF.. Time: 1 second, Memory: 12,25Mb There were 2 failures: 1) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #2 (0.05, false, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 2) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #3 (0.05, true, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 FAILURES! Tests: 6, Assertions: 6, Failures: 2. Exemplo de resultado de erro
  • 19. <?php include ( &quot;../../loja.php&quot; ); include ( __PATH_CARRINHO_DIR__ . &quot;/carrinho.php&quot; ); /** * Classe de teste da classe Fechamento * @package Unit Test */ class CarrinhoTest extends PHPUnit_Framework_TestCase { /** * Efetua o teste da função FormaPagCartao * @dataProvider provider_Carrinho___aplicaPromocaoPagamentoEntrega */ public function test_Carrinho___aplicaPromocaoPagamentoEntrega ( $desconto_perc , $bPagamentoComposto , $fTotalEmbalagem , $fFrete , $f_val_montagem , $iPagPag , $fResultado ) { $aListaCarrinho = array ( 'fTotalEmbalagem' => $fTotalEmbalagem , 'fFrete' => $fFrete , ); $aPromocaoInfo = array ( 'desconto_perc' => $desconto_perc , ); $aFrete = array ( 'f_val_montagem' => $f_val_montagem ); $this ->assertEquals(Carrinho :: __aplicaPromocaoPagamentoEntrega( $aPromocaoInfo , $bPagamentoComposto , & $aListaCarrinho , $aFrete , $iPagPag ), $fResultado ); } /** * Disponibiliza dados para o teste da forma de pagamento. */ public function provider_Carrinho___aplicaPromocaoPagamentoEntrega () { return ( array ( array (NULL, false , 0 , NULL, 0 , 0 , 0 ), // resultado correto 0 array (NULL, false , 0 , NULL, 0 , 6 , 0 ), // resultado correto 0 array ( 0.05 , false , 10 , 20 , 100 , 0 , 120 ), // resultado correto 130 array ( 0.05 , true , 10 , 20 , 100 , 0 , 120 ), // resultado correto 130 array ( 0 , false , 0 , 25 , 0 , 0 , 25 ), // resultado correto 25 array ( 0 , true , 0 , 25 , 0 , 0 , 25 ), // resultado correto 25 ) ); } } Exemplo de resultado de erro
  • 20. Só isso ? E agora, o que mais? Selenium
  • 21. Só isso ? E agora, o que mais? xDebug
  • 22. Só isso ? E agora, o que mais? KCacheGrind
  • 23. Só isso ? E agora, o que mais? CruiseControl
  • 24. Só isso ? E agora, o que mais? phpUnderControl
  • 25. Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 1 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
  • 26. Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 2 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
  • 27. Perguntas legais Como testar métodos privados? Você parece estar ciente já, mas só vou reexpressá-lo de qualquer maneira, é um mau sinal, se você precisa testar métodos protegidos. O objectivo de um teste de unidade, é a interface de uma classe de teste e métodos protegidos são detalhes de implementação. Dito isto, há casos em que faz sentido. Se você usar a herança, você pode ver uma superclasse, fornecendo uma interface para a subclasse. Então, aqui, você teria que testar o método protegido (mas nunca um privado um). A solução para isso, é criar uma subclasse para fins de teste e usar isso para expor os métodos. Ex.: http://pt.efreedom.com/Question/1-34571/Qual-e-a-melhor-forma-de-metodos-particulares-de-teste-de-unidade
  • 28. Perguntas legais Testando formulário entradas em PHPUnit Qual é a melhor maneira de testar $_GETe $_POSTentradas em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit
  • 29. Perguntas legais Testando headers Qual é a melhor maneira de testar headers em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit Construir programa de exemplo com cURL
  • 30. Fim http://www.programabrasil.org/palestras http://www.phpunit.de/ http://ticomqi.blogspot.com/p/phpunit.html

Editor's Notes

  1. http://www.youtube.com/watch?v=dUhDggoNktA
  2. Definição de teste Definição de teste de software
  3. Por que escrever testes. - Ao entregar o software vc terá certeza de que fez um trab bem feito e poderá atender o cliente sem a preocupação de saber se o app irá ou não estar funcionando; - O aplicativo fica mais bem documentado pois o teste é um método de documentação; - Você terá um atestado de qualidade do aplicativo que poderá ser validado por outros.
  4. Por que escrever testes. - Ao entregar o software vc terá certeza de que fez um trab bem feito e poderá atender o cliente sem a preocupação de saber se o app irá ou não estar funcionando; - O aplicativo fica mais bem documentado pois o teste é um método de documentação; - Você terá um atestado de qualidade do aplicativo que poderá ser validado por outros.
  5. Fácil de escrever If it&apos;s hard to learn how to write tests, developers will not learn to write them. Easy to write. If tests are not easy to write, developers will not write them. Easy to read. Test code should contain no extraneous overhead so that the test itself does not get lost in noise that surrounds it. Easy to execute. The tests should run at the touch of a button and present their results in a clear and unambiguous format. Quick to execute. Tests should run fast so so they can be run hundreds or thousands of times a day. Isolated. The tests should not affect each other. If the order in which the tests are run changes, the results of the tests should not change. Composable. We should be able to run any number or combination of tests together. This is a corollary of isolation.
  6. There are two main clashes between these constraints: Easy to learn to write versus easy to write. Tests do not generally require all the flexibility of a programming language. Many testing tools provide their own scripting language that only includes the minimum necessary features for writing tests. The resulting tests are easy to read and write because they have no noise to distract you from the content of the tests. However, learning yet another programming language and set of programming tools is inconvenient and clutters the mind. Isolated versus quick to execute. If you want the results of one test to have no effect on the results of another test, each test should create the full state of the world before it begins to execute and return the world to its original state when it finishes. However, setting up the world can take a long time: for example connecting to a database and initializing it to a known state using realistic data.
  7. - xUnit - Apoiado pela Zend utilizado no Zend Framework Perg: Você testar Método privado? Eu li o post sobre como testar o método privado (http://pt.efreedom.com/Question/1-34571/whats-the-best-way-of-unit-testing-private-methods) porque eu normalmente não testá-los, eu sempre pensei que é mais rápido para testar apenas método público que será chamado de externas do objeto. Você testar Método privado?ou se eu sempre testar Método privado? Esta questão foi originado stackoverflow.com Resposta Eu faço o teste de unidade não métodos privados. Um método particular é um detalhe de implementação que deve ser escondido para os usuários da classe. Testando métodos particulares quebras de encapsulamento. Se eu achar que o método particular é grande ou complexa ou suficientemente importante para exigir que seus próprios testes, eu apenas colocá-lo em outra classe e torná-la pública lá (Método Object).Em seguida, posso facilmente testar o método anteriormente-público-privado mas-agora que agora vive na sua própria classe.
  8. http://www.phpunit.de/wiki/Features