Pro php refactoring

30
© All rights reserved. Zend Technologies, Inc. Professional PHP Refactoring by Francesco Trucchia (Ideato srl), Enrico Zimuel (Zend Technologies srl)

description

 

Transcript of Pro php refactoring

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