pratica avanzata del refactoring (2004)

35
1 RE RE F F ACTORING ACTORING APPLIED: APPLIED: Pratica avanzata del Refactoring Pratica avanzata del Refactoring www.luca.minudel.it www.luca.minudel.it

Upload: luca-minudel

Post on 03-Aug-2015

69 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Pratica avanzata del refactoring (2004)

1

REREFFACTORINGACTORINGAPPLIED:APPLIED:

Pratica avanzata del RefactoringPratica avanzata del Refactoring

www.luca.minudel.itwww.luca.minudel.it

Page 2: Pratica avanzata del refactoring (2004)

2

Sponsor

Page 3: Pratica avanzata del refactoring (2004)

3

ObiettiviObiettivi

Refactoring, perché?Refactoring, perché?

Quali prerequisiti per il Refactoring?Quali prerequisiti per il Refactoring?Come comprendere e reagire ai Come comprendere e reagire ai feedback del codice?feedback del codice?

Refactoring, perché?Refactoring, perché?

Quali prerequisiti per il Refactoring?Quali prerequisiti per il Refactoring?Come comprendere e reagire ai Come comprendere e reagire ai feedback del codice?feedback del codice?

Page 4: Pratica avanzata del refactoring (2004)

4

PremessaPremessa

Refactoring è il processo per Refactoring è il processo per modificaremodificare

un sistema software in modo tale un sistema software in modo tale da da

migliorare migliorare la struttura interna del la struttura interna del codicecodice

senza alterarne senza alterarne il comportamento il comportamento esternoesterno..

M. FowlerM. Fowler

Refactoring è il processo per Refactoring è il processo per modificaremodificare

un sistema software in modo tale un sistema software in modo tale da da

migliorare migliorare la struttura interna del la struttura interna del codicecodice

senza alterarne senza alterarne il comportamento il comportamento esternoesterno..

M. FowlerM. Fowler

Page 6: Pratica avanzata del refactoring (2004)

6

REFACTORING, PERCHÉ?REFACTORING, PERCHÉ?

Riconoscere situazioni e problemi che siRiconoscere situazioni e problemi che sirisolvono con il Refactoringrisolvono con il Refactoring

Riconoscere situazioni e problemi che siRiconoscere situazioni e problemi che sirisolvono con il Refactoringrisolvono con il Refactoring

Page 7: Pratica avanzata del refactoring (2004)

7

Il Refactoring è DisegnoIl Refactoring è Disegno

Il Disegno classico... non si fa o... si fa Il Disegno classico... non si fa o... si fa con un processo diviso in “Fasi”con un processo diviso in “Fasi”Il Refactoring si fa Il Refactoring si fa continuamentecontinuamente: : mentre si scrive il codicementre si scrive il codice

Il Disegno classico... non si fa o... si fa Il Disegno classico... non si fa o... si fa con un processo diviso in “Fasi”con un processo diviso in “Fasi”Il Refactoring si fa Il Refactoring si fa continuamentecontinuamente: : mentre si scrive il codicementre si scrive il codice

Page 8: Pratica avanzata del refactoring (2004)

8

Il Refactoring è DisegnoIl Refactoring è Disegno

Il Disegno classico up-front:Il Disegno classico up-front:raccolta dei raccolta dei RequisitiRequisiti e definizione e definizione SpecificheSpecificheil Disegno “il Disegno “up-frontup-front””e poi Implementazione (in fretta: c’è poco e poi Implementazione (in fretta: c’è poco tempo)tempo)

Il Refactoring Il Refactoring continuocontinuo::TDD: TDD: RossoRosso->->VerdeVerde->->RefactoringRefactoringImplementaImplementa->->problemi dal codice?problemi dal codice?-->>RefactoringRefactoring

Il Disegno classico up-front:Il Disegno classico up-front:raccolta dei raccolta dei RequisitiRequisiti e definizione e definizione SpecificheSpecificheil Disegno “il Disegno “up-frontup-front””e poi Implementazione (in fretta: c’è poco e poi Implementazione (in fretta: c’è poco tempo)tempo)

Il Refactoring Il Refactoring continuocontinuo::TDD: TDD: RossoRosso->->VerdeVerde->->RefactoringRefactoringImplementaImplementa->->problemi dal codice?problemi dal codice?-->>RefactoringRefactoring

Page 9: Pratica avanzata del refactoring (2004)

9

Quando e quanto Refactoring (Disegno) fare?

Quando e quanto Refactoring (Disegno) fare?

Per Per dominare la complessitàdominare la complessitàil sistema da realizzare ci sembra molto il sistema da realizzare ci sembra molto complesso complesso

Per Per permettere l’evoluzionepermettere l’evoluzioneil cliente desidera poter aggiungere o modificare il cliente desidera poter aggiungere o modificare funzionalità senza rifare tuttofunzionalità senza rifare tuttola software house vuole ridurre i costi di la software house vuole ridurre i costi di manutenzione o adattare il sistema a più clientimanutenzione o adattare il sistema a più clienti

Quanto?Quanto?

Per Per dominare la complessitàdominare la complessitàil sistema da realizzare ci sembra molto il sistema da realizzare ci sembra molto complesso complesso

Per Per permettere l’evoluzionepermettere l’evoluzioneil cliente desidera poter aggiungere o modificare il cliente desidera poter aggiungere o modificare funzionalità senza rifare tuttofunzionalità senza rifare tuttola software house vuole ridurre i costi di la software house vuole ridurre i costi di manutenzione o adattare il sistema a più clientimanutenzione o adattare il sistema a più clienti

Quanto?Quanto?

Page 10: Pratica avanzata del refactoring (2004)

10

Refactoring Vs DesignRefactoring Vs Design

disegno up-front e refactoring disegno up-front e refactoring possono coesisterepossono coesisterei principi del disegno valgono ancora i principi del disegno valgono ancora ed è necessario conoscerlied è necessario conoscerli

disegno up-front e refactoring disegno up-front e refactoring possono coesisterepossono coesisterei principi del disegno valgono ancora i principi del disegno valgono ancora ed è necessario conoscerlied è necessario conoscerli

Page 11: Pratica avanzata del refactoring (2004)

11

Refactoring Vs DesignRefactoring Vs Design

Quali i vantaggi del Refactoring?Quali i vantaggi del Refactoring?ci sono requisiti importanti che il cliente ci sono requisiti importanti che il cliente scopre dopo...scopre dopo...ci sono cose a cui il team di sviluppo non ci sono cose a cui il team di sviluppo non aveva pensato! aveva pensato!quando il progetto è lungo i bisogni del quando il progetto è lungo i bisogni del cliente possono cambiare... e con loro i cliente possono cambiare... e con loro i requisitirequisiti

Quali i vantaggi del Refactoring?Quali i vantaggi del Refactoring?ci sono requisiti importanti che il cliente ci sono requisiti importanti che il cliente scopre dopo...scopre dopo...ci sono cose a cui il team di sviluppo non ci sono cose a cui il team di sviluppo non aveva pensato! aveva pensato!quando il progetto è lungo i bisogni del quando il progetto è lungo i bisogni del cliente possono cambiare... e con loro i cliente possono cambiare... e con loro i requisitirequisiti->-> Adattarsi velocemente ai Adattarsi velocemente ai

cambiamenticambiamenti

Page 12: Pratica avanzata del refactoring (2004)

12

Refactoring Vs DesignRefactoring Vs Design

Quali i vantaggi del Refactoring?Quali i vantaggi del Refactoring?è difficile “indovinare” il disegno migliore al primo è difficile “indovinare” il disegno migliore al primo colpocolponon si riesce a decidere come implementare non si riesce a decidere come implementare alcune funzionalità alcune funzionalità implementando una funzionalità il disegno… implementando una funzionalità il disegno… degeneradegeneraa volte ci sono pezzi di codice che... non si sa più a volte ci sono pezzi di codice che... non si sa più cosa fanno o come funzionanocosa fanno o come funzionanoaltre volte si può migliorare il disegno... altre volte si può migliorare il disegno... cancellando parti di codicecancellando parti di codice

Quali i vantaggi del Refactoring?Quali i vantaggi del Refactoring?è difficile “indovinare” il disegno migliore al primo è difficile “indovinare” il disegno migliore al primo colpocolponon si riesce a decidere come implementare non si riesce a decidere come implementare alcune funzionalità alcune funzionalità implementando una funzionalità il disegno… implementando una funzionalità il disegno… degeneradegeneraa volte ci sono pezzi di codice che... non si sa più a volte ci sono pezzi di codice che... non si sa più cosa fanno o come funzionanocosa fanno o come funzionanoaltre volte si può migliorare il disegno... altre volte si può migliorare il disegno... cancellando parti di codicecancellando parti di codice->-> Migliorare grazie ai feedback del Migliorare grazie ai feedback del

codicecodice

Page 13: Pratica avanzata del refactoring (2004)

13

Cos’è buon Refactoring (Design) ?

Cos’è buon Refactoring (Design) ?Il codice diventa piùIl codice diventa più

FlessibileFlessibileriesco a fare una modifica intervenendo riesco a fare una modifica intervenendo localmente in parti isolate del codicelocalmente in parti isolate del codice

RobustoRobustofaccio una singola modifica del codice e questa faccio una singola modifica del codice e questa incide solo sul codice strettamente/logicamente incide solo sul codice strettamente/logicamente correlato correlato

RiusabileRiusabileriesco facilmente ad estrarre dal codice le riesco facilmente ad estrarre dal codice le funzionalità per riutilizzarlefunzionalità per riutilizzarle

Il codice diventa piùIl codice diventa piùFlessibileFlessibileriesco a fare una modifica intervenendo riesco a fare una modifica intervenendo localmente in parti isolate del codicelocalmente in parti isolate del codice

RobustoRobustofaccio una singola modifica del codice e questa faccio una singola modifica del codice e questa incide solo sul codice strettamente/logicamente incide solo sul codice strettamente/logicamente correlato correlato

RiusabileRiusabileriesco facilmente ad estrarre dal codice le riesco facilmente ad estrarre dal codice le funzionalità per riutilizzarlefunzionalità per riutilizzarle

Page 14: Pratica avanzata del refactoring (2004)

14

Cos’è buon Refactoring?Cos’è buon Refactoring?

Il codice diventa più Il codice diventa più semplicesemplice ... ...da capireda capireda analizzareda analizzareda modificareda modificareda testareda testare

Il codice diventa più Il codice diventa più semplicesemplice ... ...da capireda capireda analizzareda analizzareda modificareda modificareda testareda testare

Page 15: Pratica avanzata del refactoring (2004)

15

Cos’è buon Refactoring?Cos’è buon Refactoring?

È secondario mah… anche per l’utente È secondario mah… anche per l’utente potrebbero esserci benefici :-Dpotrebbero esserci benefici :-D

È secondario mah… anche per l’utente È secondario mah… anche per l’utente potrebbero esserci benefici :-Dpotrebbero esserci benefici :-D

Estrema semplicità Estrema semplicità ->->meno errori sui datimeno errori sui datimeno errori run-time (o fermi macchina)meno errori run-time (o fermi macchina)programmi più velociprogrammi più velociniente spreco di risorseniente spreco di risorse

Estrema semplicità Estrema semplicità ->->meno errori sui datimeno errori sui datimeno errori run-time (o fermi macchina)meno errori run-time (o fermi macchina)programmi più velociprogrammi più velociniente spreco di risorseniente spreco di risorse

Page 16: Pratica avanzata del refactoring (2004)

16

Refactoring (Design): Quali problemi risolve?Refactoring (Design): Quali problemi risolve?

i clienti continuano a chiedere i clienti continuano a chiedere modifiche, modifiche, il programma è a “fine corsa”, il programma è a “fine corsa”, nessuno ha il coraggio di rifarlo.nessuno ha il coraggio di rifarlo.

i clienti continuano a chiedere i clienti continuano a chiedere modifiche, modifiche, il programma è a “fine corsa”, il programma è a “fine corsa”, nessuno ha il coraggio di rifarlo.nessuno ha il coraggio di rifarlo.

è diventato impossibile stimare tempi è diventato impossibile stimare tempi e costi degli interventi richiesti dal e costi degli interventi richiesti dal cliente???cliente???

è diventato impossibile stimare tempi è diventato impossibile stimare tempi e costi degli interventi richiesti dal e costi degli interventi richiesti dal cliente???cliente???

aggiungere una nuova funzionalità aggiungere una nuova funzionalità è... un’impresa difficile e rischiosa!!!è... un’impresa difficile e rischiosa!!!aggiungere una nuova funzionalità aggiungere una nuova funzionalità è... un’impresa difficile e rischiosa!!!è... un’impresa difficile e rischiosa!!!

per correggere un bug ci vuole per correggere un bug ci vuole troppo tempo!troppo tempo!per correggere un bug ci vuole per correggere un bug ci vuole troppo tempo!troppo tempo!

Page 17: Pratica avanzata del refactoring (2004)

17

Azioni concrete:Azioni concrete:

Page 18: Pratica avanzata del refactoring (2004)

18

REFACTORING QUALI PREREQUISITI?

REFACTORING QUALI PREREQUISITI?

Dotarsi del necessario per applicare il Dotarsi del necessario per applicare il RefactoringRefactoring

in continuo miglioramentoin continuo miglioramento

Dotarsi del necessario per applicare il Dotarsi del necessario per applicare il RefactoringRefactoring

in continuo miglioramentoin continuo miglioramento

Page 19: Pratica avanzata del refactoring (2004)

19

Refactoring del 1° tipoRefactoring del 1° tipo

Le “code smell” che possono essere Le “code smell” che possono essere individuate automaticamente con le individuate automaticamente con le metriche OOmetriche OO

metodi/classi lunghe metodi/classi lunghe lunghe liste di parametri lunghe liste di parametri liste di switch/if liste di switch/if generalizzazione speculativageneralizzazione speculativa

Le “code smell” che possono essere Le “code smell” che possono essere individuate automaticamente con le individuate automaticamente con le metriche OOmetriche OO

metodi/classi lunghe metodi/classi lunghe lunghe liste di parametri lunghe liste di parametri liste di switch/if liste di switch/if generalizzazione speculativageneralizzazione speculativa

! vedi oometrics4refactoring.html vedi oometrics4refactoring.html

Page 20: Pratica avanzata del refactoring (2004)

20

Refactoring del 1° tipo, VS.NET & VilRefactoring del 1° tipo, VS.NET & Vil

Command:Command:C:\Programmi\...\C:\Programmi\...\refactoringmetrics.cmdrefactoringmetrics.cmdArguments: Arguments: $(TargetDir)*$(TargetExt) $$(TargetDir)*$(TargetExt) $(SolutionDir)(SolutionDir)

Command:Command:C:\Programmi\...\C:\Programmi\...\refactoringmetrics.cmdrefactoringmetrics.cmdArguments: Arguments: $(TargetDir)*$(TargetExt) $$(TargetDir)*$(TargetExt) $(SolutionDir)(SolutionDir)vil /nologo /a=%1 /m=loc,locals /s=loc ... /sc=imp /h ... /title="Membri troppo lunghi" ... /outhtmlshort=%2_locmembri.tmpvil ... cd /d %2echo ^<br^> ^<br^> ^<br^> > _s.tmpcopy _locmembri.tmp+_s.tmp+... ... oometrics4refactoring.html > nuloometrics4refactoring.html

Page 21: Pratica avanzata del refactoring (2004)

21

Refactoring del 1° tipo & TDDRefactoring del 1° tipo & TDD

Page 22: Pratica avanzata del refactoring (2004)

22

Refactoring del 2° tipoRefactoring del 2° tipo

Le “code smell” che richiedono Le “code smell” che richiedono “naso”“naso”

codice duplicato codice duplicato cambiamenti divergenti cambiamenti divergenti shotgun surgery shotgun surgery feature envy feature envy generalizzazione speculativa generalizzazione speculativa commenti commenti

Le “code smell” che richiedono Le “code smell” che richiedono “naso”“naso”

codice duplicato codice duplicato cambiamenti divergenti cambiamenti divergenti shotgun surgery shotgun surgery feature envy feature envy generalizzazione speculativa generalizzazione speculativa commenti commenti

Page 23: Pratica avanzata del refactoring (2004)

23

Refactoring del 2° tipo:fare pratica!Refactoring del 2° tipo:fare pratica!

Page 24: Pratica avanzata del refactoring (2004)

24

Refactoring del 2° tipo:la preparazioneRefactoring del 2° tipo:la preparazione

Programmazione OOProgrammazione OODisegnoDisegnoArchitetturaArchitettura

Programmazione OOProgrammazione OODisegnoDisegnoArchitetturaArchitettura

Page 25: Pratica avanzata del refactoring (2004)

25

Refactoring del 2° tipo:la preparazioneRefactoring del 2° tipo:la preparazione

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

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

Programmazione OOProgrammazione OO

Page 26: Pratica avanzata del refactoring (2004)

26

Refactoring del 2° tipo:la preparazioneRefactoring del 2° tipo:la preparazione

DisegnoDisegnoCos'è il disegno e che differenza c'è con l'analisi?Cos'è il disegno e che differenza c'è con l'analisi?Quando serve fare disegno?Quando serve fare disegno?Come si usano le schede CRC?Come si usano le schede CRC?Secondo quali criteri un disegno è buono (rigidità, fragilità, Secondo quali criteri un disegno è buono (rigidità, fragilità, immobilità; alta coesione-basso accoppiamento)?immobilità; alta coesione-basso accoppiamento)?Quali sono i casi di buon disegno da prendere come esempio o da Quali sono i casi di buon disegno da prendere come esempio o da conoscere? conoscere?

- I Design Pattern- I Design Pattern- ISO OSI Reference Model, TCP/IP Reference Model- ISO OSI Reference Model, TCP/IP Reference Model- Protocollo HTTP- Protocollo HTTP- Stili, paradigmi e principi dell'interazione utente (HCI)- Stili, paradigmi e principi dell'interazione utente (HCI)

Quali principi guidano il Design (Quali principi guidano il Design (LSPLSP Liskov Substitution Principle, Liskov Substitution Principle, OCPOCP Open Close Principle, Open Close Principle, DIPDIP Dependency Inversion Principle, SRP Dependency Inversion Principle, SRP Single Responsibility Principle, ISP Interface Segregation Principle, Single Responsibility Principle, ISP Interface Segregation Principle, REP/CCP/CRP/ADP/SDP/SAP Packaging Principles, The Martin REP/CCP/CRP/ADP/SDP/SAP Packaging Principles, The Martin Metrics)?Metrics)?Che diagrammi di modellazione si usano per descrivere un Disegno Che diagrammi di modellazione si usano per descrivere un Disegno (UML)? (UML)?

Cos'è il disegno e che differenza c'è con l'analisi?Cos'è il disegno e che differenza c'è con l'analisi?Quando serve fare disegno?Quando serve fare disegno?Come si usano le schede CRC?Come si usano le schede CRC?Secondo quali criteri un disegno è buono (rigidità, fragilità, Secondo quali criteri un disegno è buono (rigidità, fragilità, immobilità; alta coesione-basso accoppiamento)?immobilità; alta coesione-basso accoppiamento)?Quali sono i casi di buon disegno da prendere come esempio o da Quali sono i casi di buon disegno da prendere come esempio o da conoscere? conoscere?

- I Design Pattern- I Design Pattern- ISO OSI Reference Model, TCP/IP Reference Model- ISO OSI Reference Model, TCP/IP Reference Model- Protocollo HTTP- Protocollo HTTP- Stili, paradigmi e principi dell'interazione utente (HCI)- Stili, paradigmi e principi dell'interazione utente (HCI)

Quali principi guidano il Design (Quali principi guidano il Design (LSPLSP Liskov Substitution Principle, Liskov Substitution Principle, OCPOCP Open Close Principle, Open Close Principle, DIPDIP Dependency Inversion Principle, SRP Dependency Inversion Principle, SRP Single Responsibility Principle, ISP Interface Segregation Principle, Single Responsibility Principle, ISP Interface Segregation Principle, REP/CCP/CRP/ADP/SDP/SAP Packaging Principles, The Martin REP/CCP/CRP/ADP/SDP/SAP Packaging Principles, The Martin Metrics)?Metrics)?Che diagrammi di modellazione si usano per descrivere un Disegno Che diagrammi di modellazione si usano per descrivere un Disegno (UML)? (UML)?

Page 27: Pratica avanzata del refactoring (2004)

27

Refactoring del 2° tipo:la preparazioneRefactoring del 2° tipo:la preparazione

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

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

Page 28: Pratica avanzata del refactoring (2004)

28

Refactoring e Design Pattern?Refactoring e Design Pattern?

Refactoring to Patterns Refactoring to Patterns di Joshua Kerievskydi Joshua KerievskyAddison Wesley ProfessionalAddison Wesley Professionalhttp://industriallogic.com/xp/refachttp://industriallogic.com/xp/refactoringtoring

applicare i Pattern per migliorare applicare i Pattern per migliorare del codice già scritto (con il del codice già scritto (con il refactoring) refactoring) dà ottimi risultati…dà ottimi risultati………migliori che applicare i Pattern migliori che applicare i Pattern nel disegno inizialenel disegno iniziale

Refactoring to Patterns Refactoring to Patterns di Joshua Kerievskydi Joshua KerievskyAddison Wesley ProfessionalAddison Wesley Professionalhttp://industriallogic.com/xp/refachttp://industriallogic.com/xp/refactoringtoring

applicare i Pattern per migliorare applicare i Pattern per migliorare del codice già scritto (con il del codice già scritto (con il refactoring) refactoring) dà ottimi risultati…dà ottimi risultati………migliori che applicare i Pattern migliori che applicare i Pattern nel disegno inizialenel disegno iniziale

Page 29: Pratica avanzata del refactoring (2004)

29

Azioni concrete:Azioni concrete:

Page 30: Pratica avanzata del refactoring (2004)

30

COMPRENDERE & REAGIRE AI FEEDBACK DEL CODICECOMPRENDERE & REAGIRE AI FEEDBACK DEL CODICE

Esempio "Live" di Refactoring del 2° tipo

applicato al codice dell'interazione utente

Esempio "Live" di Refactoring del 2° tipo

applicato al codice dell'interazione utente

!

Page 31: Pratica avanzata del refactoring (2004)

31

Concludendo: i 3 punti chiaveConcludendo: i 3 punti chiave

Individuare i casi in cui applicare il Individuare i casi in cui applicare il Refactoring da Refactoring da maggiore beneficiomaggiore beneficio (ROI)(ROI)Riconoscere nel codice Riconoscere nel codice i difettii difetti che il che il Refactoring risolve Refactoring risolve e i beneficie i benefici che che comportacomportaApplicare il Refactoring Applicare il Refactoring con continuitàcon continuità e e formarsiformarsi sul design OO sul design OO

Individuare i casi in cui applicare il Individuare i casi in cui applicare il Refactoring da Refactoring da maggiore beneficiomaggiore beneficio (ROI)(ROI)Riconoscere nel codice Riconoscere nel codice i difettii difetti che il che il Refactoring risolve Refactoring risolve e i beneficie i benefici che che comportacomportaApplicare il Refactoring Applicare il Refactoring con continuitàcon continuità e e formarsiformarsi sul design OO sul design OO

Page 32: Pratica avanzata del refactoring (2004)

32

Call to Action!Call to Action!

Fare praticaFare praticaal lavoro: selezionare i progetti con al lavoro: selezionare i progetti con maggiore ROI per il Refactoring maggiore ROI per il Refactoring (feedback Vil e Svi/PM)(feedback Vil e Svi/PM)su progetti propri/open-sourcesu progetti propri/open-sourceper esercizio: aggiungere all’esempio il per esercizio: aggiungere all’esempio il controllo della navigazione: controllo della navigazione: http://www.ugidotnet.org/articles/articles_read.aspx?http://www.ugidotnet.org/articles/articles_read.aspx?ID=90ID=90

FormarsiFormarsiRefactoringRefactoringProgrammazione e disegno OOProgrammazione e disegno OO

Fare praticaFare praticaal lavoro: selezionare i progetti con al lavoro: selezionare i progetti con maggiore ROI per il Refactoring maggiore ROI per il Refactoring (feedback Vil e Svi/PM)(feedback Vil e Svi/PM)su progetti propri/open-sourcesu progetti propri/open-sourceper esercizio: aggiungere all’esempio il per esercizio: aggiungere all’esempio il controllo della navigazione: controllo della navigazione: http://www.ugidotnet.org/articles/articles_read.aspx?http://www.ugidotnet.org/articles/articles_read.aspx?ID=90ID=90

FormarsiFormarsiRefactoringRefactoringProgrammazione e disegno OOProgrammazione e disegno OO

Page 33: Pratica avanzata del refactoring (2004)

33

Prossime letture!Prossime letture!

http://www.refactoring.com/http://c2.com/cgi/wiki?CodeSmellhttp://wiki.java.net/bin/view/People/SmellsToRefactoringshttp://industriallogic.com/xp/refactoringhttp://www.sei.cmu.edu/str/descriptions/oodesign.htmlhttp://www.objectmentor.com/resources/ voce “Object Oriented Design”

www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdfhttp://martinfowler.com/books.html#eaahttp://www.extremeprogramming.org/http://www.uml.org/http://msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/http://www.microsoft.com/learning/books/professional/

http://www.refactoring.com/http://c2.com/cgi/wiki?CodeSmellhttp://wiki.java.net/bin/view/People/SmellsToRefactoringshttp://industriallogic.com/xp/refactoringhttp://www.sei.cmu.edu/str/descriptions/oodesign.htmlhttp://www.objectmentor.com/resources/ voce “Object Oriented Design”

www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdfhttp://martinfowler.com/books.html#eaahttp://www.extremeprogramming.org/http://www.uml.org/http://msdn.microsoft.com/msdnmag/issues/04/04/ExtremeProgramming/http://www.microsoft.com/learning/books/professional/

Page 34: Pratica avanzata del refactoring (2004)

34

Domande Risposte

&

Domande Risposte

&

Page 35: Pratica avanzata del refactoring (2004)

35FineFine