Pratica avanzata del Refactoring

Slides:



Advertisements
Presentazioni simili
Perché.NET di Marco Maraglino don't worry...B-bright !
Advertisements

Meccanismi di IPC Problemi classici di IPC
/ fax
Introduzione al C++ e alla programmazione ad oggetti Corso Specialistico CNTC Bologna, febbraio 2001 Andrea Dell’Acqua e Claudio Grandi.
Consumare Web Service Andrea Saltarello
L’Informatica dal Problema alla Soluzione
Java Enterprise Edition (JEE)
File System Cos’è un File System File e Directory
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
DISEGNO TECNICO INDUSTRIALE
Training On Line – CONA. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Annuali > Nuova Richiesta Si accede alla pagina di Richiesta.
Training On Line - Report. 2 Report storico Da menu: Reportistica -> Report storico Si accede alla pagina di selezione del report storico.
1 9: Progettazione Architetturale Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
1 14. Verifica e Validazione Come assicurarsi che il software corrisponda alle necessità dellutente? Introdurremo i concetti di verifica e validazione.
PROGRAMMI DI COOPERAZIONE TERRITORIALE I controlli di primo livello in azione Un caso pratico Programma Interreg IV C Progetto B3 Regions Regione Piemonte.
Distributed Object Computing
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
eliana minicozzi linguaggi1a.a lezione2
Corso di Informatica per Giurisprudenza Lezione 5
DHTML: Modello degli Eventi 1. 2 Sommario Introduzione Evento onclick Evento onload Gestione errori con onerror Gestione mouse con levento onmousemove.
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Contenuti del corso Programmazione ad Oggetti Oggetti, polimorfismo, ereditarieta Metodologie di progetto Astrazione ed incapsulamento ( encapsulation)
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Strutture di controllo in C -- Flow Chart --
19 Lezione 21/5/04 Composizione dell'immagine 1 COMPOSIZIONE DELLIMMAGINE.
23.1 Prototyping 28/5/04 PROTOTYPING Prototyping 28/5/04 Perchè creare prototipi? Per avere un rapido feedback sul design Per sperimentare design.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione a C#.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto.
Introduzione alla programmazione Object Oriented
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Fare clic per modificare lo stile del titolo Fare clic per modificare stili del testo dello schema – Secondo livello Terzo livello – Quarto livello » Quinto.
SCOPRI LA TABELLINA click Trova la regola nascosta… click
1 Questionario di soddisfazione ATA - a. sc. 2008/09 Il questionario è stato somministrato nel mese di aprile Sono stati restituiti 29 questionari.
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
1101 = x 10 x 10 x x 10 x = CORRISPONDENZE
Fondamenti delle Reti di Computer Seconda parte Carasco 15/04/2010.
AICA Corso IT Administrator: modulo 4 AICA © EUCIP IT Administrator Modulo 4 - Uso Esperto della Rete Risoluzione dei Problemi e Analisi del Traffico.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Come affrontare un problema… Marco D. Santambrogio – Ver. aggiornata al 18 Ottobre.
Sviluppo Web Agile con Castle MonoRail Diego Guidi DotNetMarche.Start() 12 ottobre 2006.
14/06/2008 – Matteo Baglini Mail: Blog:
User stories Claudio Maccari Mail:
14 marzo 2002 Avvisi:.
Documentazione Tecnica
Ingegneria del software Modulo 2 -Il software come prodotto Unità didattica 2 -I costi del software Ernesto Damiani Università degli Studi di Milano Lezione.
Bando di Residenza Cap Scheda ENTE 3ROL - Richieste On Line.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
1 cin>>c8 s.r.l A.A Generalità Uno dei concetti largamente adottati negli ultimi anni dai professionisti del software in fase di sviluppo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algoritmi e basi del C Marco D. Santambrogio – Ver. aggiornata al 13 Marzo 2014.
Modulo 6 Test di verifica
a cura di Francesco Lattari
1 Progettazione Architetturale. 2 Obiettivo: stabilire la struttura globale di un sistema software Descriveremo diversi tipi di modello di architettura,
Programmazione ad oggetti
Lezione 1 Panoramica sui paradigmi di programmazione
1 Microsoft Access Gruppo di lavoro Alberti, Boldi, Gaito, Grossi, Malchiodi, Mereghetti, Morpurgo, Rosti, Palano, Zanaboni Informatica per laurea triennale.
USR-INRiM-GMEE-CE.SE.DI Formazione&Metrologia Modulo 1 1 Modulo 1 Costruzione di un linguaggio comune Preparazione liste dei termini. Condivisione.
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Transcript della presentazione:

Pratica avanzata del Refactoring 3/27/2017 2:28 AM REFACTORING APPLIED: Pratica avanzata del Refactoring www.luca.minudel.it

3/27/2017 2:28 AM Sponsor

Obiettivi Refactoring, perché? Quali prerequisiti per il Refactoring? 3/27/2017 2:28 AM Obiettivi Refactoring, perché? Quali prerequisiti per il Refactoring? Come comprendere e reagire ai feedback del codice?

Premessa Refactoring è il processo per modificare 3/27/2017 2:28 AM Premessa Refactoring è il processo per modificare un sistema software in modo tale da migliorare la struttura interna del codice senza alterarne il comportamento esterno. M. Fowler

Premessa http://www.agileday.it/slides/BrunoBossola.zip 3/27/2017 2:28 AM Premessa Introduzione al Refactoring: http://www.agileday.it/slides/BrunoBossola.zip

REFACTORING, PERCHÉ? Riconoscere situazioni e problemi che si 3/27/2017 2:28 AM REFACTORING, PERCHÉ? Riconoscere situazioni e problemi che si risolvono con il Refactoring

Il Refactoring è Disegno 3/27/2017 2:28 AM Il Refactoring è Disegno Il Disegno classico... non si fa o... si fa con un processo diviso in “Fasi” Il Refactoring si fa continuamente: mentre si scrive il codice

Il Refactoring è Disegno 3/27/2017 2:28 AM Il Refactoring è Disegno Il Disegno classico up-front: raccolta dei Requisiti e definizione Specifiche il Disegno “up-front” e poi Implementazione (in fretta: c’è poco tempo) Il Refactoring continuo: TDD: Rosso->Verde->Refactoring Implementa->problemi dal codice?->Refactoring

Quando e quanto Refactoring (Disegno) fare? 3/27/2017 2:28 AM Quando e quanto Refactoring (Disegno) fare? Per dominare la complessità il sistema da realizzare ci sembra molto complesso Per permettere l’evoluzione il cliente desidera poter aggiungere o modificare funzionalità senza rifare tutto la software house vuole ridurre i costi di manutenzione o adattare il sistema a più clienti Quanto?

3/27/2017 2:28 AM Refactoring Vs Design disegno up-front e refactoring possono coesistere i principi del disegno valgono ancora ed è necessario conoscerli

Refactoring Vs Design Quali i vantaggi del Refactoring? 3/27/2017 2:28 AM Refactoring Vs Design Quali i vantaggi del Refactoring? ci sono requisiti importanti che il cliente scopre dopo... ci sono cose a cui il team di sviluppo non aveva pensato! quando il progetto è lungo i bisogni del cliente possono cambiare... e con loro i requisiti -> Adattarsi velocemente ai cambiamenti

Refactoring Vs Design Quali i vantaggi del Refactoring? 3/27/2017 2:28 AM Refactoring Vs Design Quali i vantaggi del Refactoring? è difficile “indovinare” il disegno migliore al primo colpo non si riesce a decidere come implementare alcune funzionalità implementando una funzionalità il disegno… degenera a volte ci sono pezzi di codice che... non si sa più cosa fanno o come funzionano altre volte si può migliorare il disegno... cancellando parti di codice -> Migliorare grazie ai feedback del codice

Cos’è buon Refactoring (Design) ? 3/27/2017 2:28 AM Cos’è buon Refactoring (Design) ? Il codice diventa più Flessibile riesco a fare una modifica intervenendo localmente in parti isolate del codice Robusto faccio una singola modifica del codice e questa incide solo sul codice strettamente/logicamente correlato Riusabile riesco facilmente ad estrarre dal codice le funzionalità per riutilizzarle

Cos’è buon Refactoring? 3/27/2017 2:28 AM Cos’è buon Refactoring? Il codice diventa più semplice ... da capire da analizzare da modificare da testare

Cos’è buon Refactoring? 3/27/2017 2:28 AM Cos’è buon Refactoring? È secondario mah… anche per l’utente potrebbero esserci benefici :-D Estrema semplicità -> meno errori sui dati meno errori run-time (o fermi macchina) programmi più veloci niente spreco di risorse

Refactoring (Design): Quali problemi risolve? 3/27/2017 2:28 AM Refactoring (Design): Quali problemi risolve? per correggere un bug ci vuole troppo tempo! aggiungere una nuova funzionalità è... un’impresa difficile e rischiosa!!! è diventato impossibile stimare tempi e costi degli interventi richiesti dal cliente??? i clienti continuano a chiedere modifiche, il programma è a “fine corsa”, nessuno ha il coraggio di rifarlo.

3/27/2017 2:28 AM Azioni concrete:

REFACTORING QUALI PREREQUISITI? 3/27/2017 2:28 AM REFACTORING QUALI PREREQUISITI? Dotarsi del necessario per applicare il Refactoring in continuo miglioramento

3/27/2017 2:28 AM Refactoring del 1° tipo Le “code smell” che possono essere individuate automaticamente con le metriche OO metodi/classi lunghe lunghe liste di parametri liste di switch/if generalizzazione speculativa ! vedi oometrics4refactoring.html

Refactoring del 1° tipo, VS.NET & Vil 3/27/2017 2:28 AM Refactoring del 1° tipo, VS.NET & Vil Command: C:\Programmi\...\refactoringmetrics.cmd Arguments: $(TargetDir)*$(TargetExt) $(SolutionDir) vil /nologo /a=%1 /m=loc,locals /s=loc ... /sc=imp /h ... /title="Membri troppo lunghi" ... /outhtmlshort=%2_locmembri.tmp vil ... cd /d %2 echo ^<br^> ^<br^> ^<br^> > _s.tmp copy _locmembri.tmp+_s.tmp+... ... oometrics4refactoring.html > nul oometrics4refactoring.html

Refactoring del 1° tipo & TDD 3/27/2017 2:28 AM Refactoring del 1° tipo & TDD

Refactoring del 2° tipo Le “code smell” che richiedono “naso” 3/27/2017 2:28 AM Refactoring del 2° tipo Le “code smell” che richiedono “naso” codice duplicato cambiamenti divergenti shotgun surgery feature envy generalizzazione speculativa commenti

Refactoring del 2° tipo: fare pratica! 3/27/2017 2:28 AM Refactoring del 2° tipo: fare pratica!

Refactoring del 2° tipo: la preparazione 3/27/2017 2:28 AM Refactoring del 2° tipo: la preparazione Programmazione OO Disegno Architettura

Refactoring del 2° tipo: la preparazione 3/27/2017 2:28 AM Refactoring del 2° tipo: la preparazione Programmazione OO Cos'è il paradigma di programmazione OO? (cosa lo distingue dal paradigma di progr. procedurale, di progr. modulare/data hiding, di astrazione dei dati) Quando definire una classe base o quando definire un'interfaccia? Quando usare l'ereditarietà e quando il contenimento (riferimento, puntatore)? Quando usare l'ereditarietà e quando usare un “flag” per discriminare diversi tipi? Quando usare il polimorfismo run-time (funzioni virtuali) e quando il polimorfismo compile-time (template/generics)? Le funzioni (namespace, classi, costruttori, operatori, conversioni, overloading, funzioni virtuali, membri statici, visibilità, eccezioni, const/readonly...) del linguaggio che astrazioni definiscono e a cosa servono?

Refactoring del 2° tipo: la preparazione 3/27/2017 2:28 AM Refactoring del 2° tipo: la preparazione Disegno Cos'è il disegno e che differenza c'è con l'analisi? Quando serve fare disegno? Come si usano le schede CRC? Secondo quali criteri un disegno è buono (rigidità, fragilità, immobilità; alta coesione-basso accoppiamento)? Quali sono i casi di buon disegno da prendere come esempio o da conoscere? - I Design Pattern - ISO OSI Reference Model, TCP/IP Reference Model - Protocollo HTTP - Stili, paradigmi e principi dell'interazione utente (HCI) Quali principi guidano il Design (LSP Liskov Substitution Principle, OCP Open Close Principle, DIP Dependency Inversion Principle, SRP Single Responsibility Principle, ISP Interface Segregation Principle, REP/CCP/CRP/ADP/SDP/SAP Packaging Principles, The Martin Metrics)? Che diagrammi di modellazione si usano per descrivere un Disegno (UML)?

Refactoring del 2° tipo: la preparazione 3/27/2017 2:28 AM Refactoring del 2° tipo: la preparazione Architettura Cos'è l'architettura e cosa la distingue dal disegno? Cos'è l'architettura e cosa la distingue dall'infrastruttura? Da quali requisiti dipende e che obiettivi ha l'architettura di un sistema? Quali sono i principali Enterprise Application Patterns (multi-tiers, ...)? Quali sono i principali modelli di strutturazione (repository, C/S, abstract-layered) e controllo (Centralizzed call-return manager; event-driven broadcast, interrupt driven) di una architettura?

Refactoring e Design Pattern? 3/27/2017 2:28 AM Refactoring e Design Pattern? Refactoring to Patterns di Joshua Kerievsky Addison Wesley Professional http://industriallogic.com/xp/refactoring applicare i Pattern per migliorare del codice già scritto (con il refactoring) dà ottimi risultati… …migliori che applicare i Pattern nel disegno iniziale

3/27/2017 2:28 AM Azioni concrete:

COMPRENDERE & REAGIRE AI FEEDBACK DEL CODICE 3/27/2017 2:28 AM COMPRENDERE & REAGIRE AI FEEDBACK DEL CODICE Esempio "Live" di Refactoring del 2° tipo applicato al codice dell'interazione utente ! Shotgun surgery Codice duplicato Cambiamenti divergenti Commenti Generalizzazione speculativa

Concludendo: i 3 punti chiave 3/27/2017 2:28 AM Concludendo: i 3 punti chiave Individuare i casi in cui applicare il Refactoring da maggiore beneficio (ROI) Riconoscere nel codice i difetti che il Refactoring risolve e i benefici che comporta Applicare il Refactoring con continuità e formarsi sul design OO

Call to Action! Fare pratica Formarsi 3/27/2017 2:28 AM Call to Action! Fare pratica al lavoro: selezionare i progetti con maggiore ROI per il Refactoring (feedback Vil e Svi/PM) su progetti propri/open-source per esercizio: aggiungere all’esempio il controllo della navigazione: http://www.ugidotnet.org/articles/articles_read.aspx?ID=90 Formarsi Refactoring Programmazione e disegno OO

Prossime letture! http://www.refactoring.com/ 3/27/2017 2:28 AM Prossime letture! http://www.refactoring.com/ http://c2.com/cgi/wiki?CodeSmell http://wiki.java.net/bin/view/People/SmellsToRefactorings http://industriallogic.com/xp/refactoring http://www.sei.cmu.edu/str/descriptions/oodesign.html http://www.objectmentor.com/resources/ voce “Object Oriented Design” www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf http://martinfowler.com/books.html#eaa http://www.extremeprogramming.org/ http://www.uml.org/ http://msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/ http://www.microsoft.com/learning/books/professional/

3/27/2017 2:28 AM Domande Risposte &

3/27/2017 2:28 AM Fine