pratica avanzata del refactoring (2004)
TRANSCRIPT
1
REREFFACTORINGACTORINGAPPLIED:APPLIED:
Pratica avanzata del RefactoringPratica avanzata del Refactoring
www.luca.minudel.itwww.luca.minudel.it
2
Sponsor
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?
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
5
PremessaPremessa
Introduzione al Refactoring:Introduzione al Refactoring: httphttp://://wwwwww..agiledayagileday..itit//slidesslides//
BrunoBossolaBrunoBossola.zip.zip
Introduzione al Refactoring:Introduzione al Refactoring: httphttp://://wwwwww..agiledayagileday..itit//slidesslides//
BrunoBossolaBrunoBossola.zip.zip
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
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
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
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?
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
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
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
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
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
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
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!
17
Azioni concrete:Azioni concrete:
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
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
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
21
Refactoring del 1° tipo & TDDRefactoring del 1° tipo & TDD
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
23
Refactoring del 2° tipo:fare pratica!Refactoring del 2° tipo:fare pratica!
24
Refactoring del 2° tipo:la preparazioneRefactoring del 2° tipo:la preparazione
Programmazione OOProgrammazione OODisegnoDisegnoArchitetturaArchitettura
Programmazione OOProgrammazione OODisegnoDisegnoArchitetturaArchitettura
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
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)?
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?
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
29
Azioni concrete:Azioni concrete:
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
!
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
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
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/
34
Domande Risposte
&
Domande Risposte
&
35FineFine