Pro php refactoring
Upcoming SlideShare
Loading in...5
×
 

Pro php refactoring

on

  • 235 views

 

Statistics

Views

Total Views
235
Views on SlideShare
235
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Pro php refactoring Pro php refactoring Presentation Transcript

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