SlideShare a Scribd company logo
Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
Il caso: EfficaciaFP ,[object Object]
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 ,[object Object],(tutti possono parlare con tutti, ehm sono da solo) ,[object Object]
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 ,[object Object]
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!

More Related Content

What's hot

Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
Zend by Rogue Wave Software
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
orestJump
 
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Codemotion
 
Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cmsorestJump
 
Gianfrasoft Corso Di Php Parte 2
Gianfrasoft   Corso Di Php   Parte 2Gianfrasoft   Corso Di Php   Parte 2
Gianfrasoft Corso Di Php Parte 2Gianfranco Fedele
 
Quella sporca dozzina (a cascata)
Quella sporca dozzina (a cascata)Quella sporca dozzina (a cascata)
Quella sporca dozzina (a cascata)
Davide Di Pumpo
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
guest6b08a5
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
eugenio pombi
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
Daniel Londero
 

What's hot (11)

Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
 
Php mysql3
Php mysql3Php mysql3
Php mysql3
 
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
 
Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cms
 
Gianfrasoft Corso Di Php Parte 2
Gianfrasoft   Corso Di Php   Parte 2Gianfrasoft   Corso Di Php   Parte 2
Gianfrasoft Corso Di Php Parte 2
 
Costrutti linguistici
Costrutti linguisticiCostrutti linguistici
Costrutti linguistici
 
Quella sporca dozzina (a cascata)
Quella sporca dozzina (a cascata)Quella sporca dozzina (a cascata)
Quella sporca dozzina (a cascata)
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
 
Unit testing 101
Unit testing 101Unit testing 101
Unit testing 101
 

Viewers also liked

Macで使うWindows Phone 7
Macで使うWindows Phone 7Macで使うWindows Phone 7
Macで使うWindows Phone 7Shin Ise
 
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作るハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
Shin Ise
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1Shin Ise
 
すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4Shin Ise
 
Xamarin2.0であそぼう
Xamarin2.0であそぼうXamarin2.0であそぼう
Xamarin2.0であそぼう
Shin Ise
 
C#でiPhone開発とか
C#でiPhone開発とかC#でiPhone開発とか
C#でiPhone開発とかShin Ise
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCShin Ise
 
Cross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossCross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossShin Ise
 

Viewers also liked (8)

Macで使うWindows Phone 7
Macで使うWindows Phone 7Macで使うWindows Phone 7
Macで使うWindows Phone 7
 
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作るハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
ハブインテグレーションでWindows Phone 7の世界に溶け込むアプリを作る
 
すまべんLite@関西#1
すまべんLite@関西#1すまべんLite@関西#1
すまべんLite@関西#1
 
すまべんLite@関西#4
すまべんLite@関西#4すまべんLite@関西#4
すまべんLite@関西#4
 
Xamarin2.0であそぼう
Xamarin2.0であそぼうXamarin2.0であそぼう
Xamarin2.0であそぼう
 
C#でiPhone開発とか
C#でiPhone開発とかC#でiPhone開発とか
C#でiPhone開発とか
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRC
 
Cross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCrossCross platform development with Xamarin 2.0 + MvvmCross
Cross platform development with Xamarin 2.0 + MvvmCross
 

Similar to Consigli per iniziare tdd

TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
lucatume
 
Oo Javascript
Oo JavascriptOo Javascript
Oo Javascript
maraexception
 
jQuery e i suoi plugin
jQuery e i suoi pluginjQuery e i suoi plugin
jQuery e i suoi plugin
Pasquale Puzio
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
Zend by Rogue Wave Software
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
Davide Cerbo
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascriptPiero Bozzolo
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
Federico Paparoni
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)jampslide
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
lordarthas
 
Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Dati
segarva
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryAlberto Buschettu
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
DrupalDay
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
Franco Lombardo
 
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
Gabriele Guizzardi
 
Corso di php01
Corso di php01Corso di php01
Corso di php01
Emilia Calzetta
 

Similar to Consigli per iniziare tdd (20)

TDD in WordPress
TDD in WordPressTDD in WordPress
TDD in WordPress
 
Oo Javascript
Oo JavascriptOo Javascript
Oo Javascript
 
jQuery e i suoi plugin
jQuery e i suoi pluginjQuery e i suoi plugin
jQuery e i suoi plugin
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
Il testing con zend framework
Il testing con zend frameworkIl testing con zend framework
Il testing con zend framework
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Testing
TestingTesting
Testing
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascript
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Dati
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
 
Basi Di Dati 05
Basi Di Dati 05Basi Di Dati 05
Basi Di Dati 05
 
Smau 2006
Smau 2006Smau 2006
Smau 2006
 
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case studyMantenere una distribuzione Drupal attraverso test coverage: Paddle case study
Mantenere una distribuzione Drupal attraverso test coverage: Paddle case study
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
 
Corso di php01
Corso di php01Corso di php01
Corso di php01
 

Consigli per iniziare tdd

  • 1. Consigli per iniziare TDD PhpDay 2010 – Corropoli (TE) Pierluigi Tassi - tassoman@gmail.com
  • 2.
  • 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.
  • 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.
  • 16. Per scrivere solo il codice necessario
  • 17. Per assicurarsi che soddisfi i requisiti,
  • 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.
  • 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:rogrammiasyPHP5.2.10wwfficaciaFPest>
  • 33.
  • 34. Test funzionali e unitari
  • 35. Refactoring (riscrivere il codice senza alterarne le funzionalità esterne)
  • 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)
  • 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.
  • 46. Usabile al posto di Selenium RC
  • 47. Proxy per sfBrowser (symfony)
  • 48. Alpha! By Francesco Trucchia [email_address] Jacopo Romei [email_address]
  • 49.
  • 50.
  • 51. Integrazione di PHPUnit in include_path
  • 52. Estensione PHPUnit_WebBrowser by Francesco Trucchia – cto ideato.it