Top Banner
© All rights reserved. Zend Technologies, Inc. Professional PHP Refactoring by Francesco Trucchia (Ideato srl), Enrico Zimuel (Zend Technologies srl)
30
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Professional PHP Refactoring

by Francesco Trucchia (Ideato srl),Enrico Zimuel (Zend Technologies srl)

Page 2: Pro php refactoring

© 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

[email protected]

[email protected]

Page 3: Pro php refactoring

© 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

Page 4: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

PHP Refactoring

Page 5: Pro 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

Page 6: Pro php refactoring

© 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

Page 7: Pro php refactoring

© 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

Page 8: Pro php refactoring

© 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

Page 9: Pro php refactoring

© 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

Page 10: Pro php refactoring

© 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

Page 11: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Quando devo fare refactoring● Quando duplico codice (la regola dei tre)● Quando aggiungo funzionalità● Quando correggo un bug

Page 12: Pro php refactoring

© 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

Page 13: Pro php refactoring

© 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

Page 14: Pro php refactoring

© 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.

Page 15: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Gli strumenti

Page 16: Pro php refactoring

© 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

Page 17: Pro php refactoring

© 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.)

Page 18: Pro php refactoring

© 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

Page 19: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Le tecniche

Page 20: Pro php refactoring

© 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

Page 21: Pro php refactoring

© 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

Page 22: Pro php refactoring

© 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

Page 23: Pro php refactoring

© 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

Page 24: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Zend Studioper il Refactoring

Page 25: Pro php 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

Page 26: Pro php refactoring

© 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

Page 27: Pro php refactoring

© 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

Page 28: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Demo

Demo di Zend Studio

per il Refactoring

Page 29: Pro php 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/

Page 30: Pro php refactoring

© All rights reserved. Zend Technologies, Inc.

Grazie!

Per maggiori informazioni:http://www.zend.comhttp://www.ideato.it