More Related Content
Similar to Pro php refactoring
Similar to Pro php refactoring (20)
More from Francesco Trucchia
More from Francesco Trucchia (7)
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