Professional PHP Refactoring



Documenti analoghi
La strada per sviluppare più rapidamente: Unit Test & Continuous Integration

Giuseppe Capizzi. Ambienti di sviluppo Open Source

Corso Online Analista Programmatore Microsoft

Velocizzare l'esecuzione di Joomla! con Zend Server Community Edition

lem logic enterprise manager

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Programmazione Java Avanzata

Fabrizio Caccavello APP NO GRAZIE, LUNGA VITA A RESPONSIVE DESIGN cfabry cfabry Fabrizio Caccavello

Progetto ittorario Anno scol

Ingegneria del Software 1: Eclipse

Velocizzare l'esecuzione di Joomla! con Zend Server Community Edition

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Dispensa di Informatica I.1

Test e collaudo del software Continuous Integration and Testing

Ambienti di Sviluppo

Metodologie di programmazione in Fortran 90

Corso Analista Programmatore Microsoft. Corso Analista Programmatore Microsoft Programma

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

FINALMENTE SUL TREPPIEDE WINDOWS con PREGEO, AutoCAD, PFCAD e tutto quello che serve per la massima autonomia ed efficienza in campagna.

Alma Mater Studiorum Università di Bologna. Controllo di versione. S. Golovchenko (UNIBO) INGEGNERIA DEI SISTEMI SOFTWARE / 18

Servizio Monitoraggio Energia via Web. CEAM CWS32-H01 Professional Web Platform

FASE 1: Definizione del tema, degli obiettivi e del target con il cliente... (da cui dipendono le scelte successive!)

Le novità di QuarkXPress 10.1

Autori. Per cominciare. Si seleziona il titolo dell articolo dall elenco di submissions di cui correggere le bozze.

Codifica: dal diagramma a blocchi al linguaggio C++

Introduzione al Simple Cloud API

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

Programmazione Java Avanzata

LEZIONE 3. Il pannello di amministrazione di Drupal, configurazione del sito

LA FORZA DELLA SEMPLICITÀ. Business Suite

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

Remote Download (DLD ) veloce, comodo ed economico Trasferimento wireless tramite WLAN / GPRS

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

2008 Corso Base Programmazione Web in ambiente Linux

YOUR EASY SOLUTION FOR COSTING

Iniziamo la panoramica sul funzionamento dell'svn sulla suite S.A.

RADAR. Raccolta e Analisi Dati per Attribuzione Rating

WORD 97 SCRIVERE UNA TESI DI LAUREA

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

BiblioTech - Personal Digital Library

Mida Directory. Introduzione. Mida Directory

Il documento rappresenta una guida sintetica per descrivere sia la filosofia che il modulo software per l implementazione dei workflow in recuper@2.

Associazione Culturale VERDEBINARIO

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

Registratori di Cassa

Pieces of Technology at your service. dottesttm

Basi Android. Android si definisce open. Con8ene tecnologie open source. Il codice di Android è open. Licenza Open Source Apache 2.

Programmazione Java Avanzata Spring - JDBC

Soluzioni per l'integrazione e l'accesso alle informazioni. Visus RAD. Andrea Rocchini

Cap. 3. APERTURA NUOVO PROGETTO

P. zza XXV Aprile Borgomanero (NO) Tel fax

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Dal software al CloudWare

Poca documentazione: uso di Story Card e CRC (Class Responsibility Collabor) Collaborazione con il cliente rispetto alla negoziazione dei contratti

Alfa Layer S.r.l. Via Caboto, Torino ALFA PORTAL

STRUMENTI DI PRESENTAZIONE MODULO 6

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Homebrewing Manager Ver 1.1 Maggio 2013 Powered by BiloGe

Antivirus. Lezione 07. A cosa serve un antivirus

Approccio stratificato

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Database. Si ringrazia Marco Bertini per le slides

Indice PARTE PRIMA L INIZIO 1

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Il sistema informatico di trasmissione e analisi dei dati

Processo di Sviluppo delle Applicazioni

Installazione & Configurazione Php e MySQL su Mac Os X. Php

la tua presenza e il tuo BUSINESS ON-LINE

uadro Soluzione software e hardware Per le rilevazione presenze Gestione Aziendale Fa quadrato attorno alla tua azienda

Certiquality Aumenta la Customer Interaction del

Manuale d uso [Rev.1 del 07/08/2015] Manutenzione caldaie Lite Ver [05/01/2015]

Presentazione Data Base

ORACOLO Gestione questionari.

MANUALE UTENTE INFOCAR REPAIR ACCESSO SMARTPHONE/TABLET

itime Chiaramente inclusa la stampa del cartellino presenze come previsto dalle normative

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

SOLUZIONI INFORMATICHE PER LO STUDIO LEGALE

Analisi e utilizzo di un framework per lo sviluppo di applicazioni web

Corso Eclipse. Prerequisiti. 1 Introduzione

IceWarp Server 11.2 Novità per l amministratore. Leggere il presente documento prima dell aggiornamento.

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

ACQUISIZIONE DATI DI PRODUZIONE SISTEMA PDA

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

ammesso solo con il tuo consenso. Le modifiche apportate hanno lo scopo di semplificare il controllo di quali

Apprendere la matematica: dal problema al modello e dal modello all astrazione

Manuale d uso [Rev.1 del 07/08/2015] Manutenzione impianti termici Ver [05/01/2015]

Raggruppamenti Conti Movimenti

Mon Ami 3000 Multimagazzino Gestione di più magazzini fisici e/o logici

Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Vodafone Device Manager. La soluzione Vodafone per gestire Smartphone e Tablet aziendali in modo semplice e sicuro

Mac Application Manager 1.3 (SOLO PER TIGER)

Software per Helpdesk

Database Manager Guida utente DMAN-IT-01/09/10

Introduzione. Installare EMAS Logo Generator

Apache 2, PHP5, MySQL 5

Installazione del Software. per lo Sviluppo di Applicazioni Java

Transcript:

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

Ci presentiamo... ft@ideato.it 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@zend.com 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

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

PHP Refactoring

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

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

I cattivi odori più famosi (bad smells) Codice duplicato Raggruppamenti di dati Metodi lunghi Classi larghe Lunghe liste di parametri Cambiamenti divergenti Overhead di design Ossessione di chiamate primitive Molta logica condizionale Classi oziose Generalizzazioni inutili Variabili di appoggio o temporanee Commenti

Che cos'è il refactoring Il refactoring è la tecnica attraverso la quale si cambia la struttura interna del software senza modificarne il comportamento esterno

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

Perchè dovrei fare refactoring (2) Migliora il design del software Semplifica la comprensione del software Aiuta a scovare bug Aumenta la produttiva del team

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

Le regole Test first Piccole e semplici modifiche Non cambiare mai il comportamento Segui i cattivi odori Segui le tecniche

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

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.

Gli strumenti

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

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

Selenium per i test funzionali Selenium è un framework multipiattaforma 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

Le tecniche

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

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

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

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

Zend Studio per il Refactoring

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

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

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

Demo Demo di Zend Studio per il Refactoring

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/

Grazie! Per maggiori informazioni: http://www.zend.com http://www.ideato.it