Pro php refactoring
-
Upload
francesco-trucchia -
Category
Technology
-
view
294 -
download
5
description
Transcript of Pro php refactoring
© 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
© 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 classeCambiare 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 condizionaleSemplificare 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 Studioper 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 RefactoringFrancesco 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.comhttp://www.ideato.it