Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
Il caso: EfficaciaFP <ul><li>Codice legacy ereditato
Codice procedurale
Coding standard non coerenti
Librerie self made
Documentazione quanto basta
Commenti inefficaci </li></ul>
$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($S...
$fun is not fun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($S...
I valori di eXtreme Programming <ul><li>Comunicazione </li></ul>(tutti possono parlare con tutti, ehm sono da solo) <ul><l...
Feedback  (user story, test funzionali, test immediati)
Coraggio   </li></ul>(si dà in uso il sistema subito e si implementano i cambiamenti)  ehm è già online!  http://it.wikipe...
Test Unitari e Funzionali Assumono una condizione E controllano che sia soddisfatta Unit Testing  per astrarre ogni compon...
Test Driven Development <ul><li>Test Driven Development:
Per scrivere solo il codice necessario
Per assicurarsi che soddisfi i requisiti,
Nel tempo... </li></ul>
Consigli per iniziare TDD Ok,  red ,  green , prima i test e poi il codice … …  Ma  come inizio i test , se  non ho codice...
Upcoming SlideShare
Loading in …5
×

Consigli per iniziare tdd

1,335 views
1,258 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,335
On SlideShare
0
From Embeds
0
Number of Embeds
70
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Consigli per iniziare tdd

  1. 1. Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
  2. 2. Il caso: EfficaciaFP <ul><li>Codice legacy ereditato
  3. 3. Codice procedurale
  4. 4. Coding standard non coerenti
  5. 5. Librerie self made
  6. 6. Documentazione quanto basta
  7. 7. Commenti inefficaci </li></ul>
  8. 8. $fun is not fun! -_-° function emptyfoo($el){ return $el; }
  9. 9. $fun is not fun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = &quot;dataSQL&quot;; else $foo = &quot;emptyfoo&quot;; //echo $foo(&quot;10/9/2007&quot;); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', &quot;, ) if($ADDSLHS) $fun = &quot;addslashes&quot;; else $fun = &quot;emptyfoo&quot;;
  10. 10. $fun is not fun! -_-° function emptyfoo($el){ return $el; } // verifico se le date vanno in formato SQL (YYYY-MM-DD) if($SQLDATE) $foo = &quot;dataSQL&quot;; else $foo = &quot;emptyfoo&quot;; //echo $foo(&quot;10/9/2007&quot;); exit; // verifica se bisogna inserire gli slashes nei caratteri che richiedono il quoting (es: ', &quot;, ) if($ADDSLHS) $fun = &quot;addslashes&quot;; else $fun = &quot;emptyfoo&quot;; &quot;if($ADDSLHS) $fun = &quot;addslashes&quot;; else $fun = &quot;emptyfoo&quot;;&quot; 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. 11. I valori di eXtreme Programming <ul><li>Comunicazione </li></ul>(tutti possono parlare con tutti, ehm sono da solo) <ul><li>Semplicità (unit testing, d.r.y., k.i.s.s.)
  12. 12. Feedback (user story, test funzionali, test immediati)
  13. 13. Coraggio </li></ul>(si dà in uso il sistema subito e si implementano i cambiamenti) ehm è già online! http://it.wikipedia.org/wiki/Extreme_Programming
  14. 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. 15. Test Driven Development <ul><li>Test Driven Development:
  16. 16. Per scrivere solo il codice necessario
  17. 17. Per assicurarsi che soddisfi i requisiti,
  18. 18. Nel tempo... </li></ul>
  19. 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. 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. 21. DAI! DAI! DAI! Portiamocelo a casa questo test! <ul><li>Identificare un bisogno
  22. 22. Affermarlo nel test
  23. 23. Eseguire subito il test, sbagliandolo!
  24. 24. Leggere il messaggio di errore
  25. 25. Provare a risolvere il problema
  26. 26. Eseguire nuovamente il test, e ripetere fino a quando non si ottiene OK
  27. 27. Ricominciare con un nuovo bisogno </li></ul>
  28. 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. 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. 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. 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. 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. 33. Praiche di eXtreme Programming <ul><li>Progettare con il cliente
  34. 34. Test funzionali e unitari
  35. 35. Refactoring (riscrivere il codice senza alterarne le funzionalità esterne)
  36. 36. Progettare al minimo
  37. 37. Descrivere il sistema con una metafora, anche per la descrizione formale
  38. 38. Proprietà del codice collettiva (contribuisce alla stesura chiunque sia coinvolto nel progetto)
  39. 39. Scegliere ed utilizzare un preciso standard di scrittura del codice
  40. 40. Integrare continuamente i cambiamenti al codice ;
  41. 41. Il cliente deve essere presente e disponibile a verificare (sono consigliate riunioni settimanali)
  42. 42. Open Workspace
  43. 43. 40 ore di lavoro settimanali (The Pomodoro Technique)
  44. 44. Pair Programming (due programmatori lavorano insieme su un solo computer) </li></ul>http://it.wikipedia.org/wiki/Extreme_Programming
  45. 45. Appendice: WebBrowser Extension <ul><li>Estensione per PHPUnit per test funzionali
  46. 46. Usabile al posto di Selenium RC
  47. 47. Proxy per sfBrowser (symfony)
  48. 48. Alpha! By Francesco Trucchia [email_address] Jacopo Romei [email_address] </li></ul>
  49. 49. Credits ;) Documentazione <ul><li>PHPUnit manual – Sebastian Bergmann
  50. 50. Test Driven Development by Example – Kent Beck </li></ul>Materiale occorrente <ul><li>Ambiente di sviluppo (lamp/wamp)
  51. 51. Integrazione di PHPUnit in include_path
  52. 52. Estensione PHPUnit_WebBrowser by Francesco Trucchia – cto ideato.it
  53. 53. UNXUTILS http://sourceforge.net/projects/unxutils / </li></ul>

×