Consigli per iniziare tdd

  • 1,101 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,101
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
5

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
  • 2. Il caso: EfficaciaFP
    • Codice legacy ereditato
    • 3. Codice procedurale
    • 4. Coding standard non coerenti
    • 5. Librerie self made
    • 6. Documentazione quanto basta
    • 7. Commenti inefficaci
  • 8. $fun is not fun! -_-° function emptyfoo($el){ return $el; }
  • 9. $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";
  • 10. $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
  • 11. 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.)
    • 12. Feedback (user story, 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 e Funzionali Assumono una condizione E controllano che sia soddisfatta Unit Testing per astrarre ogni componente Functional testing per soddisfare i comportamenti desiderati
  • 15. Test Driven Development
    • Test Driven Development:
    • 16. Per scrivere solo il codice necessario
    • 17. Per assicurarsi che soddisfi i requisiti,
    • 18. Nel tempo...
  • 19. 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!
  • 20. L'illuminazione: The more stress 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. Affermarlo nel test
    • 23. Eseguire subito il test, sbagliandolo!
    • 24. Leggere il messaggio di errore
    • 25. Provare a risolvere il problema
    • 26. Eseguire nuovamente il test, e ripetere fino a quando non si ottiene OK
    • 27. Ricominciare con un nuovo bisogno
  • 28. testProva.php (1) <?php require_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 class RERAuthentication { 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.11 by Sebastian Bergmann. ................ Time: 4 seconds, Memory: 4.75Mb OK (16 tests, 33 assertions) C:ProgrammiEasyPHP5.2.10wwwefficaciaFP est>
  • 33. Praiche di eXtreme Programming
    • Progettare con il cliente
    • 34. Test funzionali e unitari
    • 35. Refactoring (riscrivere il codice senza alterarne le funzionalità esterne)
    • 36. Progettare al minimo
    • 37. Descrivere il sistema con una metafora, anche per la descrizione formale
    • 38. Proprietà del codice collettiva (contribuisce alla stesura chiunque sia coinvolto nel progetto)
    • 39. Scegliere ed utilizzare un preciso standard di scrittura del codice
    • 40. Integrare continuamente i cambiamenti al codice ;
    • 41. Il cliente deve essere presente e disponibile a verificare (sono consigliate riunioni settimanali)
    • 42. Open Workspace
    • 43. 40 ore di lavoro settimanali (The Pomodoro Technique)
    • 44. Pair Programming (due programmatori lavorano insieme su un solo computer)
    http://it.wikipedia.org/wiki/Extreme_Programming
  • 45. Appendice: WebBrowser Extension
    • Estensione per PHPUnit per test funzionali
    • 46. Usabile al posto di Selenium RC
    • 47. Proxy per sfBrowser (symfony)
    • 48. Alpha! By Francesco Trucchia [email_address] Jacopo Romei [email_address]
  • 49. Credits ;) Documentazione
    • PHPUnit manual – Sebastian Bergmann
    • 50. Test Driven Development by Example – Kent Beck
    Materiale occorrente
    • Ambiente di sviluppo (lamp/wamp)
    • 51. Integrazione di PHPUnit in include_path
    • 52. Estensione PHPUnit_WebBrowser by Francesco Trucchia – cto ideato.it
    • 53. UNXUTILS http://sourceforge.net/projects/unxutils /