Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
Il caso: EfficaciaFP Codice legacy ereditato
Codice procedurale
Coding standard non coerenti
Librerie self made
Documentazione quanto basta
Commenti inefficaci
$fun is not fun! -_-° function emptyfoo($el){ return $el; }
$fun is not fun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = "dataSQL"; else $foo = "emptyfoo"; //echo $foo("10/9/2007"); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', ", \) if($ADDSLHS)  $fun  = "addslashes"; else  $fun  = "emptyfoo";
$fun is not fun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = "dataSQL"; else $foo = "emptyfoo"; //echo $foo("10/9/2007"); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', ", \) if($ADDSLHS)  $fun  = "addslashes"; else  $fun  = "emptyfoo"; "if($ADDSLHS) $fun = "addslashes"; else $fun = "emptyfoo";" is not so fun...  Let's meet at  http:// phpday.it /2010  to get started with QA  3:46 PM  Apr  27th  via  Echofon
I valori di eXtreme Programming Comunicazione (tutti possono parlare con tutti, ehm sono da solo) Semplicità  (unit testing, d.r.y., k.i.s.s.)
Feedback  (user story, test funzionali, test immediati)
Coraggio   (si dà in uso il sistema subito e si implementano i cambiamenti)  ehm è già online!  http://it.wikipedia.org/wiki/Extreme_Programming
Test Unitari e Funzionali Assumono una condizione E controllano che sia soddisfatta Unit Testing  per astrarre ogni componente Functional testing  per soddisfare i  comportamenti desiderati
Test Driven Development Test Driven Development:
Per scrivere solo il codice necessario
Per assicurarsi che soddisfi i requisiti,
Nel tempo...
Consigli per iniziare TDD Ok,  red ,  green , prima i test e poi il codice … …  Ma  come inizio i test , se  non ho codice da testare ? E poi la console di windows è in bianco e nero!

Consigli per iniziare tdd

  • 1.
    Consigli per iniziareTDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
  • 2.
    Il caso: EfficaciaFPCodice legacy ereditato
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    $fun is notfun! -_-° function emptyfoo($el){ return $el; }
  • 9.
    $fun is notfun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = "dataSQL"; else $foo = "emptyfoo"; //echo $foo("10/9/2007"); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', ", \) if($ADDSLHS) $fun = "addslashes"; else $fun = "emptyfoo";
  • 10.
    $fun is notfun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = "dataSQL"; else $foo = "emptyfoo"; //echo $foo("10/9/2007"); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', ", \) if($ADDSLHS) $fun = "addslashes"; else $fun = "emptyfoo"; "if($ADDSLHS) $fun = "addslashes"; else $fun = "emptyfoo";" is not so fun... Let's meet at http:// phpday.it /2010 to get started with QA 3:46 PM Apr 27th via Echofon
  • 11.
    I valori dieXtreme Programming Comunicazione (tutti possono parlare con tutti, ehm sono da solo) Semplicità (unit testing, d.r.y., k.i.s.s.)
  • 12.
    Feedback (userstory, test funzionali, test immediati)
  • 13.
    Coraggio (si dà in uso il sistema subito e si implementano i cambiamenti) ehm è già online! http://it.wikipedia.org/wiki/Extreme_Programming
  • 14.
    Test Unitari eFunzionali Assumono una condizione E controllano che sia soddisfatta Unit Testing per astrarre ogni componente Functional testing per soddisfare i comportamenti desiderati
  • 15.
    Test Driven DevelopmentTest Driven Development:
  • 16.
    Per scrivere soloil codice necessario
  • 17.
    Per assicurarsi chesoddisfi i requisiti,
  • 18.
  • 19.
    Consigli per iniziareTDD Ok, red , green , prima i test e poi il codice … … Ma come inizio i test , se non ho codice da testare ? E poi la console di windows è in bianco e nero!
  • 20.
    L'illuminazione: The morestress you feel, the less likely you are to test enough. La quantità di stress è inversamente proporzionale alla quantità di test . (Kent Beck Test Driven Development by example, p.129)
  • 21.
    DAI! DAI! DAI!Portiamocelo a casa questo test! Identificare un bisogno
  • 22.
  • 23.
    Eseguire subito iltest, sbagliandolo!
  • 24.
  • 25.
  • 26.
    Eseguire nuovamente iltest, e ripetere fino a quando non si ottiene OK
  • 27.
    Ricominciare con unnuovo bisogno
  • 28.
    testProva.php (1) <?phprequire_once('PHPUnit/Framework.php'); require_once('PHPUnit/Extensions/WebBrowserTestCase.php'); class ProvaTest extends PHPUnit_Framework_TestCase { public function testProva () { $this-> assert True(true, 'True is true'); } }
  • 29.
    testProva.php class ProvaFunzionaleTest extends PHPUnit_Extensions_WebBrowserTestCase { public function setUp() { $this->url = 'http://www.regione.emilia-romagna.it'; } public function testProvaFunzionale () { $this->get($this->url); $this->responseContains('PER I CITTADINI'); } }
  • 30.
    testWsdl.php <?php require_once('PHPUnit/Framework.php');require_once('../Packages/RERAuthentication.php'); class WsdlTest extends PHPUnit_Framework_TestCase { public function setUp() { $this->rerAuth = new RERAuthentication; } public function testSoapExtension() { $this->assertEquals(1, SOAP_1_1); $this->assertEquals(2, SOAP_1_2); } public function testHttpsSocket() { $fp = fopen($this->rerAuth->getWsdl(), 'r'); $this->assertNotEquals(false, $fp); fclose($fp); } }
  • 31.
    RERAuthentication.php <?php classRERAuthentication { protected $wsdl = 'https://www……………/Authentication.asmx?WSDL'; […] /** * Restituisce la URL WSDL del webservice Autenticazione Centralizzata Authentication * * @return string URL WSDL * */ public function getWsdl() { return $this->wsdl; }
  • 32.
    cmd.exe PHPUnit 3.4.11by Sebastian Bergmann. ................ Time: 4 seconds, Memory: 4.75Mb OK (16 tests, 33 assertions) C:\Programmi\EasyPHP5.2.10\www\efficaciaFP\test>
  • 33.
    Praiche di eXtremeProgramming Progettare con il cliente
  • 34.
  • 35.
    Refactoring (riscrivereil codice senza alterarne le funzionalità esterne)
  • 36.
  • 37.
    Descrivere il sistemacon una metafora, anche per la descrizione formale
  • 38.
    Proprietà del codicecollettiva (contribuisce alla stesura chiunque sia coinvolto nel progetto)
  • 39.
    Scegliere ed utilizzareun preciso standard di scrittura del codice
  • 40.
    Integrare continuamente icambiamenti al codice ;
  • 41.
    Il cliente deveessere presente e disponibile a verificare (sono consigliate riunioni settimanali)
  • 42.
  • 43.
    40 ore dilavoro settimanali (The Pomodoro Technique)
  • 44.
    Pair Programming (dueprogrammatori lavorano insieme su un solo computer) http://it.wikipedia.org/wiki/Extreme_Programming
  • 45.
    Appendice: WebBrowser ExtensionEstensione per PHPUnit per test funzionali
  • 46.
    Usabile al postodi Selenium RC
  • 47.
  • 48.
    Alpha! By Francesco Trucchia [email_address] Jacopo Romei [email_address]
  • 49.
    Credits ;) DocumentazionePHPUnit manual – Sebastian Bergmann
  • 50.
    Test Driven Developmentby Example – Kent Beck Materiale occorrente Ambiente di sviluppo (lamp/wamp)
  • 51.
    Integrazione di PHPUnitin include_path
  • 52.
    Estensione PHPUnit_WebBrowser byFrancesco Trucchia – cto ideato.it
  • 53.