Qualidade no desenvolvimento de software com PHPUnit

Loading...

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

1 comments

Comments 1 - 1 of 1 previous next Post a comment

  • + guest14e39 guest14e39 2 months ago
    HORRIIIIIIIIIIIIIIIIIIIIIIIIVEL *-*
Post a comment
Embed Video
Edit your comment Cancel

1 Favorite

Qualidade no desenvolvimento de software com PHPUnit - Presentation Transcript

  1. Qualidade no desenvolvimento de Software com PHPUnit
  2. Roteiro
    • Introdução
    • Motivações
    • O PHPUnit
    • Prática
    • Integração Contínua
    • Desenvolvimento Orientado a Testes (TDD)‏
    • Perguntas
  3. Introdução
    • Testes Unitários
      • São utilizados para testar as menores unidades de software desenvolvidas
      • Tem como objetivo encontrar falhas de funcionamento dentro de uma pequena parte do sistema.
  4. Motivações
    • Porque Testar?
      • Evita surpresas desagradáveis
      • Reduz o tempo gasto com debug
      • Auxilia o refactoring
      • O código está na fresco na mente, quaisquer erros podem ser corrigidos normalmente de maneira rápida.
  5. Motivações
    • Diagnosticar e resolver problemas após a entrega é freqüentemente 100 vezes mais caro do que fazê-lo durante as fases de análise de requisitos, arquitetura e projeto.
  6. Motivações
    • Atitudes
      • 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!
  7. O PHPUnit
    • Escrito por Sebastian Bergmann
    • Baseado nos conceitos do JUnit
    • Atualmente na versão 3.2.2
    • Requer PHP 5
  8. O PHPUnit
    • Quem usa?
      • eZ Systems
        • eZ Components
      • Zend Technolgies Ltd.
        • Zend Framework
      • PHP-GTK
      • IBM SDO
      • Agavi
      • Creole
      • Propel
      • Phing
      • Serendipity
      • Eu! 
  9. Instalação $ wget http://pear.phpunit.de/get/PHPUnit-3.2.2.tgz $ tar zxf PHPUnit-3.2.2.tgz $ cd PHPUnit-3.2.2 $ mv pear-phpunit phpunit $ cd .. $ cp -fR PHPUnit-3.2.2 /opt/ $ cd /opt $ ln -s PHPUnit-3.2.2/ phpunit $ vi /opt/phpunit/phpunit #! @php_bin@ -d safe_mode=Off #! /usr/bin/php -d safe_mode=Off <--substituir @php_bin@ $ chmod +x /opt/phpunit/phpunit
  10. Prática No PHP $ vi /usr/local/php5/lib/php.ini include_path = &quot;.: /opt/phpunit &quot;
  11. TextUI TestRunner
  12. Nosso primeiro teste
    • Exemplo da classe Calculadora
    <?php class Calculadora { public function somar( $arg1 , $arg2 )‏ { return $arg1 + $arg2 ; } } Classe que testaremos Criaremos um teste para afirmar que o método Calculadora::somar() realmente soma corretamente os dois argumentos passados
  13. Nosso primeiro teste
    • Nosso TestCase
    <?php require_once ( 'PHPUnit/Framework/TestCase.php' ); require_once ( 'Calculadora.php' ); class CalculadoraTest extends PHPUnit_Framework_TestCase { public function testS omar()‏ { $calculadora = new Calculadora(); $resultado = $calculadora ->somar( 5 , 3 ); $this ->assertEquals( 8 , $resultado ); } } Classes de teste devem estender a classe PHPUnit_Framework_TestCase método que ira testar a soma
  14. Nosso primeiro teste $ phpunit <TestCase> $ phpunit <TestCase> <Arquivo>
  15. Entendendo a execução
    • “ .” Exibido quando a execução do teste é bem sucedida
    • “ F” Exibido quando ocorre uma falha na execução
    • “ E” Exibido quando ocorre um erro ao rodar o teste
    • “ S” Exibido quando um teste não é executado
    • “ I” Exibido quando um teste é marcado como imcompleto ou não implementado
  16. setUp e tearDown class LinkedListTest extends PHPUnit_Framework_TestCase { private $dados ; protected function setUp() { parent ::setUp(); $this ->dados = array ( &quot;PHP&quot; , &quot;Java&quot; , &quot;Ruby&quot; , &quot;Python&quot; ); } protected function tearDown() { parent ::tearDown(); $this ->dados = null; } }
  17. PHPUnit_Framework_Assert
    • markTestIncomplete($mensagem)
    • markTestSkipped($mensagem)
    • fail()
    • void assertTrue($variavel)
    • void assertNull($variavel)
    • void assertEquals($esperado, $atual)
  18. PHPUnit_Framework_Assert
    • void assertContains($valor, $array)
    • void assertRegExp($padrao, $string)
    • void assertType($typo, $variavel)
    • ...
  19. Skeleton
  20. Skeleton <?php class Calculadora { /** * * @assert (2,3) == 5 */ public function somar ( $arg1 , $arg2 ) { return $arg1 + $arg2 ; } /** * * @assert (10,2) == 8 * @assert (12,2) == 10 * @assert (100,97) == 3 * @assert (5,3) == 2 */ public function subtrair ( $arg1 , $arg2 ) { return $arg1 - $arg2 ; } }
  21. Organizando seus testes Application/ Package/ Class (Application/Package/Class.php) ... ... ... Tests/ AllTests.php Package/ Package_AllTests.php ClassTest (Application/Tests/Package/ClassTest.php)
  22. Organizando seus testes <?php require_once ( 'PHPUnit/Framework/TestSuite.php' ); /** * inclue suites de testes que estão em um nível inferior */ require_once (dirname(__FILE__). '/Lista/AllTests.php' ); /** * inclue classes de teste no mesmo diretório */ require_once (dirname(__FILE__). '/CalculadoraTest.php' ); class AllTests { public static function suite() { $suite = new PHPUnit_Framework_TestSuite( 'PHP Conference' ); $suite ->addTest(Lista_AllTests::suite()); $suite ->addTestSuite( &quot;CalculadoraTest&quot; ); return $suite ; } }
  23. Organizando seus testes <?php require_once ( 'PHPUnit/Framework/TestSuite.php' ) ; require_once (dirname ( __FILE__ ) . '/LinkedListTest.php' ) ; class Lista_AllTests extends PHPUnit_Framework_TestSuite { protected function setUp () { //-- criando ambiente } public static function suite () { $suite = new PHPUnit_Framework_TestSuite ( 'PHP Conference - Listas' ) ; $suite ->addTestSuite ( 'LinkedListTest' ) ; return $suite ; } protected function tearDown () { //-- desfazendo ambiente } }
  24. Code Coverage
    • Como testar os meus testes?
    • Como saber quantos por cento de meu código esta coberto por testes?
    • Como saber quais linhas do meu código estão cobertas por testes?
  25. Code Coverage
    • Utiliza a extensão xDebug
    $ phpunit --coverage-html ./code_coverage AllTests.php
  26. Code Coverage
  27. Code Coverage
  28. Integração Contínua
    • Consiste em um ambiente onde cada membro da equipe integra pequenas partes ao software diariamente
    • A integração destas partes é sempre verificada e testada através de builds automatizados
  29. Integração Contínua
  30. Integração Contínua
  31. Integração Contínua
  32. Integração Contínua
  33. Desenvolvimento Orientado a Testes
    • Do inglês Test-driven development (TDD)‏
    • Tem como objetivo antecipar a identificação de falhas durante o desenvolvimento
    • Três passos
      • Escrever o teste
      • Escrever o código
      • Melhorar o código
  34. Perguntas?
  35. Links
    • www.diegotremper.com
    • http://cruisecontrol.sourceforge.net/
    • http://www.phpunit.de/
    • http://www.phpunit.de/wiki/phpUnderControl
    • http://pear.php.net/package/PHP_CodeSniffer
    • http://www.phpdoc.org/
  36. Obrigado!!!

+ diegotremperdiegotremper, 2 years ago

custom

1327 views, 1 favs, 1 embeds more stats

Palestra apresentada por Diego Tremper em dezembro more

More Info

© All Rights Reserved

Go to text version
  • Total Views 1327
    • 1324 on SlideShare
    • 3 from embeds
  • Comments 1
  • Favorites 1
  • Downloads 36
Most viewed embeds
  • 3 views on http://luismiguel-digital.blogspot.com

more

All embeds
  • 3 views on http://luismiguel-digital.blogspot.com

less

Flagged as inappropriate Flag as inappropriate
Flag as innappropriate

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

Cancel

Categories