Pro php refactoring

458 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
458
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Pro php refactoring

  1. 1. © All rights reserved. Zend Technologies, Inc. Professional PHP Refactoring by Francesco Trucchia (Ideato srl), Enrico Zimuel (Zend Technologies srl)
  2. 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. 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. 4. © All rights reserved. Zend Technologies, Inc. PHP Refactoring
  5. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 15. © All rights reserved. Zend Technologies, Inc. Gli strumenti
  16. 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. 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. 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. 19. © All rights reserved. Zend Technologies, Inc. Le tecniche
  20. 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. 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. 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. 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. 24. © All rights reserved. Zend Technologies, Inc. Zend Studio per il Refactoring
  25. 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. 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. 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. 28. © All rights reserved. Zend Technologies, Inc. Demo Demo di Zend Studio per il Refactoring
  29. 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. 30. © All rights reserved. Zend Technologies, Inc. Grazie! Per maggiori informazioni: http://www.zend.com http://www.ideato.it

×