SlideShare a Scribd company logo
1 of 30
Download to read offline
© All rights reserved. Zend Technologies, Inc.
Professional PHP Refactoring
by Francesco Trucchia (Ideato srl),
Enrico Zimuel (Zend Technologies srl)
© All rights reserved. Zend Technologies, Inc.
Ci presentiamo...
● Francesco Trucchia, CTO di Ideato srl
● Fondatore di Ideato srl, esperto di sviluppo
software PHP tramite metodologie agili
● PHP 5.3 Certified Engineer
● Co-autore del libro “Pro PHP Refactoring” Apress
edizioni (2010)
● Enrico Zimuel, Senior Consultant & Architect di
Zend Technologies srl
● Software engineer dal 1996 con più di 10 anni di
esperienza nello sviluppo in PHP
● PHP 5 Certified Engineer, Zend Framework
Certified Engineer
ft@ideato.it
enrico@zend.com
© All rights reserved. Zend Technologies, Inc.
Sommario
● PHP Refactoring
▶ Quando il codice “puzza”
▶ Il refactoring: cos'è, quando e perchè
▶ Le regole
▶ I test automatici
▶ Gli strumenti
▶ Le tecniche
● Zend Studio per il Refactoring
▶ Funzionalità specifiche per il Refactoring
▶ Demo
© All rights reserved. Zend Technologies, Inc.
PHP Refactoring
© All rights reserved. Zend Technologies, Inc.
Ideato srl, solution partner Zend
● Esperti nello sviluppo e integrazione di applicazioni
e servizi web 2.0
● Il team di sviluppo supporta l'intero processo di
realizzazione di nuove idee per il web
● Il nostro processo produttivo si fonda sui principi
del manifesto agile per lo sviluppo del software
● Dal 2010 è Solution Partner di Zend Technologies
in Italia
http://www.ideato.it
© All rights reserved. Zend Technologies, Inc.
Quando il codice “puzza”
● Non riesci a capire o seguire le logiche del codice?
● Ci sono troppi commenti “inline” dentro il codice?
● Hai paura di aggiungere nuove funzionalità temendo il
bug?
● Ti perdi tra migliaglia di righe di codice?
● Il codice è procedurale?
“Se puzza, cambialo!” - Kent Back's grandmother
© All rights reserved. Zend Technologies, Inc.
I “cattivi odori” più famosi (bad smells)
● Codice duplicato
● Metodi lunghi
● Classi larghe
● Lunghe liste di parametri
● Cambiamenti divergenti
● Overhead di design
● Raggruppamenti di dati
● Ossessione di chiamate
primitive
● Molta logica condizionale
● Classi oziose
● Generalizzazioni inutili
● Variabili di appoggio o
temporanee
● Commenti
© All rights reserved. Zend Technologies, Inc.
Che cos'è il refactoring
Il refactoring è la tecnica attraverso la
quale si cambia la struttura interna del
software senza modificarne il
comportamento esterno
© All rights reserved. Zend Technologies, Inc.
Perchè dovrei fare refactoring (1)
In un sistema isolato l'entropia è una
funzione non decrescente nel tempo
(II legge termodinamica)
in altre parole
tutti i processi in cui è richiesta energia,
come quelli chimici, fisici ecc., subiscono
una riduzione di attività se isolati e se
non vi sono nuovi apporti energetici
© All rights reserved. Zend Technologies, Inc.
Perchè dovrei fare refactoring (2)
● Migliora il design del software
● Semplifica la comprensione del software
● Aiuta a scovare bug
● Aumenta la produttiva del team
© All rights reserved. Zend Technologies, Inc.
Quando devo fare refactoring
● Quando duplico codice (la regola dei tre)
● Quando aggiungo funzionalità
● Quando correggo un bug
© All rights reserved. Zend Technologies, Inc.
Le regole
● Test first
● Piccole e semplici modifiche
● Non cambiare mai il comportamento
● Segui i cattivi odori
● Segui le tecniche
© All rights reserved. Zend Technologies, Inc.
Perchè testare il software?
● Perchè...
▶ il debug costa
▶ ci dobbiamo difendere dall'evoluzione
caotica
▶ migliora la comunicazione
▶ aumenta il feedback
▶ incoraggia il cambiamento
▶ aumenta la fiducia del team
© All rights reserved. Zend Technologies, Inc.
Test automatici
● Test unitari: confermano che le singole
righe di codice computino il corretto
output quando viene passato un input
ben definito.
● Test funzionali: testano l'esperienza
utente e ne verificano il corretto
funzionamento.
© All rights reserved. Zend Technologies, Inc.
Gli strumenti
© All rights reserved. Zend Technologies, Inc.
Come scegliere l'IDE
● Capacità automatica di:
▶ rinominare parametri, metodi e classi
▶ spostare parametri, metodi classi
▶ incapsulare i parametri di classi in setter e
getter
© All rights reserved. Zend Technologies, Inc.
PHPUnit per i test unitari
● E' un framework della famiglia xUnit che permette di
testare in maniera unitaria il codice PHP
● Caratteristiche:
▶ Testare il database
▶ Usare mock object per testare classi
indipendentemente
▶ Organizzare i test in suite e gruppi
▶ Filtrare i test che si vogliono lanciare
▶ Eseguire azioni custom all'inizio e alla fine di ogni test
▶ Loggare il risultato dei test in vari formati
▶ Integrare i test con software di terze parti (Hudson,
Apache Maven, Cruise Control, ecc.)
© All rights reserved. Zend Technologies, Inc.
Selenium per i test funzionali
● Selenium è un framework multi-
piattaforma per testare l'esperienza
utente (e non solo) su applicazioni web.
● Selenium fornisce più strumenti:
▶ Selenium IDE
▶ Selenium RC
▶ Selenium Grid
● PHPUnit si integra con Selenium
© All rights reserved. Zend Technologies, Inc.
Le tecniche
© All rights reserved. Zend Technologies, Inc.
Le tecniche
● Ci sono più di 50 differenti tecniche di
refactoring
● Ogni tecnica offre una soluzione chiara e
a piccoli passi ad un problema di design
● Le tecniche dovrebbero essere eseguite
come dei kata
● Il kata aiuta ad automatizzare azioni
sequenziali
© All rights reserved. Zend Technologies, Inc.
Le tecniche servono a
● Sistemare il comportamento
● Cambiare la responsabilità delle classi
● Razionalizzare i dati
● Semplificare le logiche condizionali
● Semplificare le interfacce
● Semplificare le relazioni tra classi
● Trasformare codice procedurale ad
oggetti
© All rights reserved. Zend Technologies, Inc.
Estarre una classe
Cambiare la responsabilità delle classi
● Problema: Abbiamo una classe che ha responsabilità di più classi
● Soluzione: Creiamo una nuova classe e spostiamo le proprietà ed i metodi che non
appartengono alla classe origine nella nuova classe
● Meccanismo:
▶ Creiamo un test unitario per la classe origine
▶ Decidiamo quale proprietà e/o metodo estrarre
▶ Creiamo un nuovo test unitario per la nuova classe
▶ Creiamo la nuova classe
▶ Nel costruttore della classe origine, creiamo un'istanza della nuova classe
assegnandola ad una proprietà già esistente o ad una nuova
▶ Usiamo il metodo “sposta i parametri” per spostare ogni proprietà nella
nuova classe
▶ Usiamo il metodo “sposta i metodi” per spostare ogni metodo nella nuova
classe
▶ Decidiamo come esporre la nuova classe attraverso la classe origine
© All rights reserved. Zend Technologies, Inc.
Scomporre la logica condizionale
Semplificare le logiche condizionali
● Problema: abbiamo una dichiarazione condizionale
complessa (if/else)
● Soluzione:
▶ Estraiamo la condizione in metodi
▶ Estraiamo la parte “if” e poi la parte “else”
● Meccanismo:
▶ Estrai la condizione in un metodo privato
▶ Estrai i branch condizionali in altri metodi privati
© All rights reserved. Zend Technologies, Inc.
Zend Studio
per il Refactoring
© All rights reserved. Zend Technologies, Inc.
Zend Studio 8
● E' un IDE professionale per lo
sviluppo di applicazioni PHP
● E' un IDE basato sul progetto
Eclipse
▶ Agile development
▶ +1000 Eclipse plug-in
● Multipiattaforma:
▶ Windows, Linux, Mac Os X
© All rights reserved. Zend Technologies, Inc.
Zend Studio 8: alcune caratteristiche
● PHP Editor e File Manager
● Supporto Javascript, CSS, HTML
● Debug (anche Javascript), Profiling
● Supporto sistemi remoti e Virtual Machine
● Integrazione con PHPUnit e PHPDoc
● Generatore di codice PHP
● Source Control (CVS, SVN, Local History, Team)
● Database connectivity
● Integrazione Zend Framework
● Integrazione con Zend Server
© All rights reserved. Zend Technologies, Inc.
Zend Studio per il Refactoring PHP
● In Place Refactoring
▶ capacità di rinominare variabili durante
l'editing
● Estrarre variabili/metodi
● Muovere file/directory
● Rinominare classi, funzioni e variabili
● Profiling con funzione di code coverage
▶ per determinare le porzioni di codice PHP
eseguite a run-time
© All rights reserved. Zend Technologies, Inc.
Demo
Demo di Zend Studio
per il Refactoring
© All rights reserved. Zend Technologies, Inc.
Riferimenti
Pro PHP Refactoring
Francesco Trucchia, Jacopo Romei
(Apress 2010)
● Alcuni strumenti:
▶ PHPUnit, http://www.phpunit.de/
▶ Selenium, http://seleniumhq.org/
▶ Zend Studio, http://www.zend.com/en/products/studio/
© All rights reserved. Zend Technologies, Inc.
Grazie!
Per maggiori informazioni:
http://www.zend.com
http://www.ideato.it

More Related Content

Viewers also liked

OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORK
OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORKOPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORK
OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORKRiccardo Franconi
 
BDD tutta questione di comunicazione
BDD tutta questione di comunicazioneBDD tutta questione di comunicazione
BDD tutta questione di comunicazioneTassi Francesco
 
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Francesco Trucchia
 
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...Riccardo Franconi
 
Symfony e micro (non così tanto) services
Symfony e micro (non così tanto) servicesSymfony e micro (non così tanto) services
Symfony e micro (non così tanto) servicesMichele Orselli
 

Viewers also liked (10)

Business model canvas
Business model canvasBusiness model canvas
Business model canvas
 
Cowo42 - Coworking Osimo
Cowo42 - Coworking OsimoCowo42 - Coworking Osimo
Cowo42 - Coworking Osimo
 
OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORK
OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORKOPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORK
OPPORTUNITA’ DEL WEB 2.0 E DEI SOCIAL NETWORK
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
BDD tutta questione di comunicazione
BDD tutta questione di comunicazioneBDD tutta questione di comunicazione
BDD tutta questione di comunicazione
 
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
Raccolta requisiti, stima e pianificazione in progetti agili - Università di ...
 
From * to Symfony2
From * to Symfony2From * to Symfony2
From * to Symfony2
 
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...
PIATTAFORME OPEN SOURCE PER IL CRM (CUSTOMER RELATIONSHIP MANAGEMENT), IL CMS...
 
SpecBDD with phpspec
SpecBDD with phpspecSpecBDD with phpspec
SpecBDD with phpspec
 
Symfony e micro (non così tanto) services
Symfony e micro (non così tanto) servicesSymfony e micro (non così tanto) services
Symfony e micro (non così tanto) services
 

Similar to Pro php refactoring

Framework software e Zend Framework
Framework software e Zend FrameworkFramework software e Zend Framework
Framework software e Zend FrameworkEnrico Zimuel
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressEnrico Zimuel
 
Velocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionVelocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionEnrico Zimuel
 
Le pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingLe pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingAndrea Francia
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Meet Magento Italy
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8massimiliano.wosz
 
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliLuca Minudel
 
Caso reale di migrazione da Windows a sistemi Open Source in azienda
Caso reale di migrazione da Windows a sistemi Open Source in aziendaCaso reale di migrazione da Windows a sistemi Open Source in azienda
Caso reale di migrazione da Windows a sistemi Open Source in aziendaClaudio Cardinali
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliStefano Leli
 
Rapid prototyping with Ionic Framework
Rapid prototyping with Ionic FrameworkRapid prototyping with Ionic Framework
Rapid prototyping with Ionic FrameworkAlessio Delmonti
 

Similar to Pro php refactoring (20)

Zend Framework 2
Zend Framework 2Zend Framework 2
Zend Framework 2
 
Framework software e Zend Framework
Framework software e Zend FrameworkFramework software e Zend Framework
Framework software e Zend Framework
 
Integrare Zend Framework in Wordpress
Integrare Zend Framework in WordpressIntegrare Zend Framework in Wordpress
Integrare Zend Framework in Wordpress
 
Il Pattern di Zend Framework 2
Il Pattern di Zend Framework 2Il Pattern di Zend Framework 2
Il Pattern di Zend Framework 2
 
Velocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community EditionVelocizzare Joomla! con Zend Server Community Edition
Velocizzare Joomla! con Zend Server Community Edition
 
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
 
Le pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme ProgrammingLe pratiche ingegneristiche di eXtreme Programming
Le pratiche ingegneristiche di eXtreme Programming
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
 
Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8Alla scoperta di Zend Framework 1.8
Alla scoperta di Zend Framework 1.8
 
AgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agiliAgileDay 2006 - Essere agili nel diventare agili
AgileDay 2006 - Essere agili nel diventare agili
 
Caso reale di migrazione da Windows a sistemi Open Source in azienda
Caso reale di migrazione da Windows a sistemi Open Source in aziendaCaso reale di migrazione da Windows a sistemi Open Source in azienda
Caso reale di migrazione da Windows a sistemi Open Source in azienda
 
PHP goes mobile
PHP goes mobilePHP goes mobile
PHP goes mobile
 
Software libero e open source a costo zero per la grafica
Software libero e open source a costo zero per la graficaSoftware libero e open source a costo zero per la grafica
Software libero e open source a costo zero per la grafica
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Debugging with-z-ray
Debugging with-z-rayDebugging with-z-ray
Debugging with-z-ray
 
Intoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie AgiliIntoduzione Alle Metodologie Agili
Intoduzione Alle Metodologie Agili
 
Rapid prototyping with Ionic Framework
Rapid prototyping with Ionic FrameworkRapid prototyping with Ionic Framework
Rapid prototyping with Ionic Framework
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 

More from Francesco Trucchia

Oltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaOltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaFrancesco Trucchia
 
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Francesco Trucchia
 
eZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaeZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaFrancesco Trucchia
 

More from Francesco Trucchia (7)

Oltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italianaOltre Tata: lean startup all'italiana
Oltre Tata: lean startup all'italiana
 
Agile software lifecycle
Agile software lifecycleAgile software lifecycle
Agile software lifecycle
 
Spaghetti code refactoring
Spaghetti code refactoringSpaghetti code refactoring
Spaghetti code refactoring
 
Extreme Programming e PHP
Extreme Programming e PHPExtreme Programming e PHP
Extreme Programming e PHP
 
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
Reingegnerizzazione di un Content Management System verso l'accessibilità sec...
 
eZ publish - Introduzione al sistema
eZ publish - Introduzione al sistemaeZ publish - Introduzione al sistema
eZ publish - Introduzione al sistema
 
eZ publish - Extension
eZ publish - ExtensioneZ publish - Extension
eZ publish - Extension
 

Pro php refactoring

  • 1. © All rights reserved. Zend Technologies, Inc. Professional PHP Refactoring by Francesco Trucchia (Ideato srl), Enrico Zimuel (Zend Technologies srl)
  • 2. © All rights reserved. Zend Technologies, Inc. Ci presentiamo... ● Francesco Trucchia, CTO di Ideato srl ● Fondatore di Ideato srl, esperto di sviluppo software PHP tramite metodologie agili ● PHP 5.3 Certified Engineer ● Co-autore del libro “Pro PHP Refactoring” Apress edizioni (2010) ● Enrico Zimuel, Senior Consultant & Architect di Zend Technologies srl ● Software engineer dal 1996 con più di 10 anni di esperienza nello sviluppo in PHP ● PHP 5 Certified Engineer, Zend Framework Certified Engineer ft@ideato.it enrico@zend.com
  • 3. © All rights reserved. Zend Technologies, Inc. Sommario ● PHP Refactoring ▶ Quando il codice “puzza” ▶ Il refactoring: cos'è, quando e perchè ▶ Le regole ▶ I test automatici ▶ Gli strumenti ▶ Le tecniche ● Zend Studio per il Refactoring ▶ Funzionalità specifiche per il Refactoring ▶ Demo
  • 4. © All rights reserved. Zend Technologies, Inc. PHP Refactoring
  • 5. © All rights reserved. Zend Technologies, Inc. Ideato srl, solution partner Zend ● Esperti nello sviluppo e integrazione di applicazioni e servizi web 2.0 ● Il team di sviluppo supporta l'intero processo di realizzazione di nuove idee per il web ● Il nostro processo produttivo si fonda sui principi del manifesto agile per lo sviluppo del software ● Dal 2010 è Solution Partner di Zend Technologies in Italia http://www.ideato.it
  • 6. © All rights reserved. Zend Technologies, Inc. Quando il codice “puzza” ● Non riesci a capire o seguire le logiche del codice? ● Ci sono troppi commenti “inline” dentro il codice? ● Hai paura di aggiungere nuove funzionalità temendo il bug? ● Ti perdi tra migliaglia di righe di codice? ● Il codice è procedurale? “Se puzza, cambialo!” - Kent Back's grandmother
  • 7. © All rights reserved. Zend Technologies, Inc. I “cattivi odori” più famosi (bad smells) ● Codice duplicato ● Metodi lunghi ● Classi larghe ● Lunghe liste di parametri ● Cambiamenti divergenti ● Overhead di design ● Raggruppamenti di dati ● Ossessione di chiamate primitive ● Molta logica condizionale ● Classi oziose ● Generalizzazioni inutili ● Variabili di appoggio o temporanee ● Commenti
  • 8. © All rights reserved. Zend Technologies, Inc. Che cos'è il refactoring Il refactoring è la tecnica attraverso la quale si cambia la struttura interna del software senza modificarne il comportamento esterno
  • 9. © All rights reserved. Zend Technologies, Inc. Perchè dovrei fare refactoring (1) In un sistema isolato l'entropia è una funzione non decrescente nel tempo (II legge termodinamica) in altre parole tutti i processi in cui è richiesta energia, come quelli chimici, fisici ecc., subiscono una riduzione di attività se isolati e se non vi sono nuovi apporti energetici
  • 10. © All rights reserved. Zend Technologies, Inc. Perchè dovrei fare refactoring (2) ● Migliora il design del software ● Semplifica la comprensione del software ● Aiuta a scovare bug ● Aumenta la produttiva del team
  • 11. © All rights reserved. Zend Technologies, Inc. Quando devo fare refactoring ● Quando duplico codice (la regola dei tre) ● Quando aggiungo funzionalità ● Quando correggo un bug
  • 12. © All rights reserved. Zend Technologies, Inc. Le regole ● Test first ● Piccole e semplici modifiche ● Non cambiare mai il comportamento ● Segui i cattivi odori ● Segui le tecniche
  • 13. © All rights reserved. Zend Technologies, Inc. Perchè testare il software? ● Perchè... ▶ il debug costa ▶ ci dobbiamo difendere dall'evoluzione caotica ▶ migliora la comunicazione ▶ aumenta il feedback ▶ incoraggia il cambiamento ▶ aumenta la fiducia del team
  • 14. © All rights reserved. Zend Technologies, Inc. Test automatici ● Test unitari: confermano che le singole righe di codice computino il corretto output quando viene passato un input ben definito. ● Test funzionali: testano l'esperienza utente e ne verificano il corretto funzionamento.
  • 15. © All rights reserved. Zend Technologies, Inc. Gli strumenti
  • 16. © All rights reserved. Zend Technologies, Inc. Come scegliere l'IDE ● Capacità automatica di: ▶ rinominare parametri, metodi e classi ▶ spostare parametri, metodi classi ▶ incapsulare i parametri di classi in setter e getter
  • 17. © All rights reserved. Zend Technologies, Inc. PHPUnit per i test unitari ● E' un framework della famiglia xUnit che permette di testare in maniera unitaria il codice PHP ● Caratteristiche: ▶ Testare il database ▶ Usare mock object per testare classi indipendentemente ▶ Organizzare i test in suite e gruppi ▶ Filtrare i test che si vogliono lanciare ▶ Eseguire azioni custom all'inizio e alla fine di ogni test ▶ Loggare il risultato dei test in vari formati ▶ Integrare i test con software di terze parti (Hudson, Apache Maven, Cruise Control, ecc.)
  • 18. © All rights reserved. Zend Technologies, Inc. Selenium per i test funzionali ● Selenium è un framework multi- piattaforma per testare l'esperienza utente (e non solo) su applicazioni web. ● Selenium fornisce più strumenti: ▶ Selenium IDE ▶ Selenium RC ▶ Selenium Grid ● PHPUnit si integra con Selenium
  • 19. © All rights reserved. Zend Technologies, Inc. Le tecniche
  • 20. © All rights reserved. Zend Technologies, Inc. Le tecniche ● Ci sono più di 50 differenti tecniche di refactoring ● Ogni tecnica offre una soluzione chiara e a piccoli passi ad un problema di design ● Le tecniche dovrebbero essere eseguite come dei kata ● Il kata aiuta ad automatizzare azioni sequenziali
  • 21. © All rights reserved. Zend Technologies, Inc. Le tecniche servono a ● Sistemare il comportamento ● Cambiare la responsabilità delle classi ● Razionalizzare i dati ● Semplificare le logiche condizionali ● Semplificare le interfacce ● Semplificare le relazioni tra classi ● Trasformare codice procedurale ad oggetti
  • 22. © All rights reserved. Zend Technologies, Inc. Estarre una classe Cambiare la responsabilità delle classi ● Problema: Abbiamo una classe che ha responsabilità di più classi ● Soluzione: Creiamo una nuova classe e spostiamo le proprietà ed i metodi che non appartengono alla classe origine nella nuova classe ● Meccanismo: ▶ Creiamo un test unitario per la classe origine ▶ Decidiamo quale proprietà e/o metodo estrarre ▶ Creiamo un nuovo test unitario per la nuova classe ▶ Creiamo la nuova classe ▶ Nel costruttore della classe origine, creiamo un'istanza della nuova classe assegnandola ad una proprietà già esistente o ad una nuova ▶ Usiamo il metodo “sposta i parametri” per spostare ogni proprietà nella nuova classe ▶ Usiamo il metodo “sposta i metodi” per spostare ogni metodo nella nuova classe ▶ Decidiamo come esporre la nuova classe attraverso la classe origine
  • 23. © All rights reserved. Zend Technologies, Inc. Scomporre la logica condizionale Semplificare le logiche condizionali ● Problema: abbiamo una dichiarazione condizionale complessa (if/else) ● Soluzione: ▶ Estraiamo la condizione in metodi ▶ Estraiamo la parte “if” e poi la parte “else” ● Meccanismo: ▶ Estrai la condizione in un metodo privato ▶ Estrai i branch condizionali in altri metodi privati
  • 24. © All rights reserved. Zend Technologies, Inc. Zend Studio per il Refactoring
  • 25. © All rights reserved. Zend Technologies, Inc. Zend Studio 8 ● E' un IDE professionale per lo sviluppo di applicazioni PHP ● E' un IDE basato sul progetto Eclipse ▶ Agile development ▶ +1000 Eclipse plug-in ● Multipiattaforma: ▶ Windows, Linux, Mac Os X
  • 26. © All rights reserved. Zend Technologies, Inc. Zend Studio 8: alcune caratteristiche ● PHP Editor e File Manager ● Supporto Javascript, CSS, HTML ● Debug (anche Javascript), Profiling ● Supporto sistemi remoti e Virtual Machine ● Integrazione con PHPUnit e PHPDoc ● Generatore di codice PHP ● Source Control (CVS, SVN, Local History, Team) ● Database connectivity ● Integrazione Zend Framework ● Integrazione con Zend Server
  • 27. © All rights reserved. Zend Technologies, Inc. Zend Studio per il Refactoring PHP ● In Place Refactoring ▶ capacità di rinominare variabili durante l'editing ● Estrarre variabili/metodi ● Muovere file/directory ● Rinominare classi, funzioni e variabili ● Profiling con funzione di code coverage ▶ per determinare le porzioni di codice PHP eseguite a run-time
  • 28. © All rights reserved. Zend Technologies, Inc. Demo Demo di Zend Studio per il Refactoring
  • 29. © All rights reserved. Zend Technologies, Inc. Riferimenti Pro PHP Refactoring Francesco Trucchia, Jacopo Romei (Apress 2010) ● Alcuni strumenti: ▶ PHPUnit, http://www.phpunit.de/ ▶ Selenium, http://seleniumhq.org/ ▶ Zend Studio, http://www.zend.com/en/products/studio/
  • 30. © All rights reserved. Zend Technologies, Inc. Grazie! Per maggiori informazioni: http://www.zend.com http://www.ideato.it