SlideShare a Scribd company logo
1 of 35
Download to read offline
1 
RREEFFAACCTTOORRIINNGG 
AAPPPPLLIIEEDD:: 
PPrraattiiccaa aavvaannzzaattaa ddeell RReeffaaccttoorriinngg 
wwwwww..lluuccaa..mmiinnuuddeell..iitt
2 
Sponsor
3 
Obiettivi 
RReeffaaccttoorriinngg,, ppeerrcchhéé?? 
QQuuaallii pprreerreeqquuiissiittii ppeerr iill RReeffaaccttoorriinngg?? 
CCoommee ccoommpprreennddeerree ee rreeaaggiirree aaii ffeeeeddbbaacckk 
ddeell ccooddiiccee??
4 
Premessa 
Refactoring èè iill pprroocceessssoo ppeerr mmooddiiffiiccaarree 
uunn ssiisstteemmaa ssooffttwwaarree iinn mmooddoo ttaallee ddaa 
mmiigglliioorraarree llaa ssttrruuttttuurraa iinntteerrnnaa ddeell ccooddiiccee 
sseennzzaa aalltteerraarrnnee iill ccoommppoorrttaammeennttoo eesstteerrnnoo.. 
MM.. FFoowwlleerr
5 
Premessa 
IInnttrroodduuzziioonnee aall RReeffaaccttoorriinngg:: 
hhttttpp::////wwwwww..aaggiilleeddaayy..iitt//sslliiddeess// 
BBrruunnooBBoossssoollaa..zziipp
REFACTORING, PERCHÉ? 
Riconoscere ssiittuuaazziioonnii ee pprroobblleemmii cchhee ssii 
rriissoollvvoonnoo ccoonn iill RReeffaaccttoorriinngg 
6
Il Refactoring è Disegno 
Il Disegno classico... nnoonn ssii ffaa oo...... ssii ffaa ccoonn uunn 
pprroocceessssoo ddiivviissoo iinn ““FFaassii”” 
IIll RReeffaaccttoorriinngg ssii ffaa ccoonnttiinnuuaammeennttee:: mmeennttrree ssii 
ssccrriivvee iill ccooddiiccee 
7
Il Refactoring è Disegno 
IIll DDiisseeggnnoo ccllaassssiiccoo uupp--ffrroonntt:: 
rraaccccoollttaa ddeeii RReeqquuiissiittii ee ddeeffiinniizziioonnee SSppeecciiffiicchhee 
iill DDiisseeggnnoo ““uupp--ffrroonntt”” 
ee ppooii IImmpplleemmeennttaazziioonnee ((iinn ffrreettttaa:: cc’’èè ppooccoo tteemmppoo)) 
IIll RReeffaaccttoorriinngg ccoonnttiinnuuoo:: 
TTDDDD:: RRoossssoo-->>VVeerrddee-->>RReeffaaccttoorriinngg 
IImmpplleemmeennttaa-->>pprroobblleemmii ddaall ccooddiiccee??-->>RReeffaaccttoorriinngg 
8
Quando e quanto Refactoring 
(Disegno) fare? 
PPeerr ddoommiinnaarree llaa ccoommpplleessssiittàà 
iill ssiisstteemmaa ddaa rreeaalliizzzzaarree ccii sseemmbbrraa mmoollttoo ccoommpplleessssoo 
PPeerr ppeerrmmeetttteerree ll’’eevvoolluuzziioonnee 
iill cclliieennttee ddeessiiddeerraa ppootteerr aaggggiiuunnggeerree oo mmooddiiffiiccaarree 
ffuunnzziioonnaalliittàà sseennzzaa rriiffaarree ttuuttttoo 
llaa ssooffttwwaarree hhoouussee vvuuoollee rriidduurrrree ii ccoossttii ddii mmaannuutteennzziioonnee oo 
aaddaattttaarree iill ssiisstteemmaa aa ppiiùù cclliieennttii 
QQuuaannttoo?? 
9
10 
Refactoring Vs Design 
disegno uupp--ffrroonntt ee rreeffaaccttoorriinngg ppoossssoonnoo 
ccooeessiisstteerree 
ii pprriinncciippii ddeell ddiisseeggnnoo vvaallggoonnoo aannccoorraa eedd èè 
nneecceessssaarriioo ccoonnoosscceerrllii
11 
Refactoring Vs Design 
QQuuaallii ii vvaannttaaggggii ddeell RReeffaaccttoorriinngg?? 
ccii ssoonnoo rreeqquuiissiittii iimmppoorrttaannttii cchhee iill cclliieennttee ssccoopprree 
ddooppoo...... 
ccii ssoonnoo ccoossee aa ccuuii iill tteeaamm ddii ssvviilluuppppoo nnoonn 
aavveevvaa ppeennssaattoo!! 
qquuaannddoo iill pprrooggeettttoo èè lluunnggoo ii bbiissooggnnii ddeell cclliieennttee 
ppoossssoonnoo ccaammbbiiaarree...... ee ccoonn lloorroo ii rreeqquuiissiittii 
-->> AAddaattttaarrssii vveelloocceemmeennttee aaii 
ccaammbbiiaammeennttii
12 
Refactoring Vs Design 
QQuuaallii ii vvaannttaaggggii ddeell RReeffaaccttoorriinngg?? 
èè ddiiffffiicciillee ““iinnddoovviinnaarree”” iill ddiisseeggnnoo mmiigglliioorree aall pprriimmoo ccoollppoo 
nnoonn ssii rriieessccee aa ddeecciiddeerree ccoommee iimmpplleemmeennttaarree aallccuunnee 
ffuunnzziioonnaalliittàà 
iimmpplleemmeennttaannddoo uunnaa ffuunnzziioonnaalliittàà iill ddiisseeggnnoo…… ddeeggeenneerraa 
aa vvoollttee ccii ssoonnoo ppeezzzzii ddii ccooddiiccee cchhee...... nnoonn ssii ssaa ppiiùù ccoossaa 
ffaannnnoo oo ccoommee ffuunnzziioonnaannoo 
aallttrree vvoollttee ssii ppuuòò mmiigglliioorraarree iill ddiisseeggnnoo...... ccaanncceellllaannddoo ppaarrttii 
ddii ccooddiiccee 
-->> MMiigglliioorraarree ggrraazziiee aaii ffeeeeddbbaacckk ddeell ccooddiiccee
Cos’è 
buon Refactoring (Design) ? 
13 
IIll ccooddiiccee ddiivveennttaa ppiiùù 
FFlleessssiibbiillee 
rriieessccoo aa ffaarree uunnaa mmooddiiffiiccaa iinntteerrvveenneennddoo llooccaallmmeennttee iinn 
ppaarrttii iissoollaattee ddeell ccooddiiccee 
RRoobbuussttoo 
ffaacccciioo uunnaa ssiinnggoollaa mmooddiiffiiccaa ddeell ccooddiiccee ee qquueessttaa iinncciiddee 
ssoolloo ssuull ccooddiiccee ssttrreettttaammeennttee//llooggiiccaammeennttee ccoorrrreellaattoo 
RRiiuussaabbiillee 
rriieessccoo ffaacciillmmeennttee aadd eessttrraarrrree ddaall ccooddiiccee llee ffuunnzziioonnaalliittàà 
ppeerr rriiuuttiilliizzzzaarrllee
14 
Cos’è 
buon Refactoring? 
IIll ccooddiiccee ddiivveennttaa ppiiùù sseemmpplliiccee ...... 
ddaa ccaappiirree 
ddaa aannaalliizzzzaarree 
ddaa mmooddiiffiiccaarree 
ddaa tteessttaarree
15 
Cos’è 
buon Refactoring? 
È secondario mmaahh…… aanncchhee ppeerr ll’’uutteennttee 
ppoottrreebbbbeerroo eesssseerrccii bbeenneeffiiccii ::--DD 
EEssttrreemmaa sseemmpplliicciittàà -->> 
mmeennoo eerrrroorrii ssuuii ddaattii 
mmeennoo eerrrroorrii rruunn--ttiimmee ((oo ffeerrmmii mmaacccchhiinnaa)) 
pprrooggrraammmmii ppiiùù vveellooccii 
nniieennttee sspprreeccoo ddii rriissoorrssee
Refactoring (Design): 
Quali problemi risolve? 
ppeerr ccoorrrreeggggeerree uunn bbuugg ccii vvuuoollee ttrrooppppoo 
tteemmppoo!! 
aaggggiiuunnggeerree uunnaa nnuuoovvaa ffuunnzziioonnaalliittàà èè...... 
uunn’’iimmpprreessaa ddiiffffiicciillee ee rriisscchhiioossaa!!!!!! 
èè ddiivveennttaattoo iimmppoossssiibbiillee ssttiimmaarree tteemmppii ee 
ccoossttii ddeeggllii iinntteerrvveennttii rriicchhiieessttii ddaall cclliieennttee?????? 
i clienti ccoonnttiinnuuaannoo aa cchhiieeddeerree mmooddiiffiicchhee,, 
iill pprrooggrraammmmaa èè aa ““ffiinnee ccoorrssaa””,, nneessssuunnoo hhaa 
iill ccoorraaggggiioo ddii rriiffaarrlloo.. 
16
17 
Azioni concrete:
REFACTORING 
QUALI PREREQUISITI? 
Dotarsi del necessario ppeerr aapppplliiccaarree iill 
18 
RReeffaaccttoorriinngg 
iinn ccoonnttiinnuuoo mmiigglliioorraammeennttoo
19 
Refactoring del 1° tipo 
Le “code ssmmeellll”” cchhee ppoossssoonnoo eesssseerree 
iinnddiivviidduuaattee aauuttoommaattiiccaammeennttee ccoonn llee 
mmeettrriicchhee OOOO 
mmeettooddii//ccllaassssii lluunngghhee 
lluunngghhee lliissttee ddii ppaarraammeettrrii 
lliissttee ddii sswwiittcchh//iiff 
ggeenneerraalliizzzzaazziioonnee ssppeeccuullaattiivvaa 
! v veeddi io ooommeetrtricicss44rreefafacctotorriningg.h.htmtmll
20 
Refactoring del 1° tipo, 
VS.NET & Vil 
CCoommmmaanndd:: 
CC::PPrrooggrraammmmii......rreeffaaccttoorriinnggmmeettrriiccss..ccmmdd 
AArrgguummeennttss:: 
$$((TTaarrggeettDDiirr))**$$((TTaarrggeettEExxtt)) $$((SSoolluuttiioonnDDiirr)) 
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 
21
22 
Refactoring del 2° tipo 
Le ““ccooddee ssmmeellll”” cchhee rriicchhiieeddoonnoo ““nnaassoo”” 
ccooddiiccee dduupplliiccaattoo 
ccaammbbiiaammeennttii ddiivveerrggeennttii 
sshhoottgguunn ssuurrggeerryy 
ffeeaattuurree eennvvyy 
ggeenneerraalliizzzzaazziioonnee ssppeeccuullaattiivvaa 
ccoommmmeennttii
23 
Refactoring del 2° tipo: 
fare pratica!
24 
Refactoring del 2° tipo: 
la preparazione 
PPrrooggrraammmmaazziioonnee OOOO 
DDiisseeggnnoo 
AArrcchhiitteettttuurraa
25 
Refactoring del 2° tipo: 
la preparazione 
PPrrooggrraammmmaazziioonnee OOOO 
Cos'è il paradigma di programmazione OO? (cosa lloo ddiissttiinngguuee ddaall 
ppaarraaddiiggmmaa ddii pprrooggrr.. pprroocceedduurraallee,, ddii pprrooggrr.. mmoodduullaarree//ddaattaa hhiiddiinngg,, ddii 
aassttrraazziioonnee ddeeii ddaattii)) 
QQuuaannddoo ddeeffiinniirree uunnaa ccllaassssee bbaassee oo qquuaannddoo ddeeffiinniirree uunn''iinntteerrffaacccciiaa?? 
QQuuaannddoo uussaarree ll''eerreeddiittaarriieettàà ee qquuaannddoo iill ccoonntteenniimmeennttoo ((rriiffeerriimmeennttoo,, 
ppuunnttaattoorree))?? 
QQuuaannddoo uussaarree ll''eerreeddiittaarriieettàà ee qquuaannddoo uussaarree uunn ““ffllaagg”” ppeerr ddiissccrriimmiinnaarree 
ddiivveerrssii ttiippii?? 
QQuuaannddoo uussaarree iill ppoolliimmoorrffiissmmoo rruunn--ttiimmee ((ffuunnzziioonnii vviirrttuuaallii)) ee qquuaannddoo iill 
ppoolliimmoorrffiissmmoo ccoommppiillee--ttiimmee ((tteemmppllaattee//ggeenneerriiccss))?? 
LLee ffuunnzziioonnii ((nnaammeessppaaccee,, ccllaassssii,, ccoossttrruuttttoorrii,, ooppeerraattoorrii,, ccoonnvveerrssiioonnii,, 
oovveerrllooaaddiinngg,, ffuunnzziioonnii vviirrttuuaallii,, mmeemmbbrrii ssttaattiiccii,, vviissiibbiilliittàà,, eecccceezziioonnii,, 
ccoonnsstt//rreeaaddoonnllyy......)) ddeell lliinngguuaaggggiioo cchhee aassttrraazziioonnii ddeeffiinniissccoonnoo ee aa ccoossaa 
sseerrvvoonnoo??
26 
Refactoring del 2° tipo: 
la preparazione 
DDiisseeggnnoo 
CCooss''èè iill ddiisseeggnnoo ee cchhee ddiiffffeerreennzzaa cc''èè ccoonn ll''aannaalliissii?? 
QQuuaannddoo sseerrvvee ffaarree ddiisseeggnnoo?? 
CCoommee ssii uussaannoo llee sscchheeddee CCRRCC?? 
SSeeccoonnddoo qquuaallii ccrriitteerrii uunn ddiisseeggnnoo èè bbuuoonnoo ((rriiggiiddiittàà,, ffrraaggiilliittàà,, iimmmmoobbiilliittàà;; aallttaa 
ccooeessiioonnee--bbaassssoo aaccccooppppiiaammeennttoo))?? 
QQuuaallii ssoonnoo ii ccaassii ddii bbuuoonn ddiisseeggnnoo ddaa pprreennddeerree ccoommee eesseemmppiioo oo ddaa 
ccoonnoosscceerree?? 
-- II DDeessiiggnn PPaatttteerrnn 
-- IISSOO OOSSII RReeffeerreennccee MMooddeell,, TTCCPP//IIPP RReeffeerreennccee MMooddeell 
-- PPrroottooccoolllloo HHTTTTPP 
-- SSttiillii,, ppaarraaddiiggmmii ee pprriinncciippii ddeellll''iinntteerraazziioonnee uutteennttee ((HHCCII)) 
QQuuaallii pprriinncciippii gguuiiddaannoo iill DDeessiiggnn ((LLSSPP LLiisskkoovv SSuubbssttiittuuttiioonn PPrriinncciippllee,, OOCCPP 
OOppeenn CClloossee PPrriinncciippllee,, DDIIPP DDeeppeennddeennccyy IInnvveerrssiioonn PPrriinncciippllee,, SSRRPP SSiinnggllee 
RReessppoonnssiibbiilliittyy PPrriinncciippllee,, IISSPP IInntteerrffaaccee SSeeggrreeggaattiioonn PPrriinncciippllee,, 
RREEPP//CCCCPP//CCRRPP//AADDPP//SSDDPP//SSAAPP PPaacckkaaggiinngg PPrriinncciipplleess,, TThhee MMaarrttiinn MMeettrriiccss))?? 
CChhee ddiiaaggrraammmmii ddii mmooddeellllaazziioonnee ssii uussaannoo ppeerr ddeessccrriivveerree uunn DDiisseeggnnoo ((UUMMLL))??
27 
Refactoring del 2° tipo: 
la preparazione 
AArrcchhiitteettttuurraa 
CCooss''èè ll''aarrcchhiitteettttuurraa ee ccoossaa llaa ddiissttiinngguuee ddaall ddiisseeggnnoo?? 
CCooss''èè ll''aarrcchhiitteettttuurraa ee ccoossaa llaa ddiissttiinngguuee ddaallll''iinnffrraassttrruuttttuurraa?? 
DDaa qquuaallii rreeqquuiissiittii ddiippeennddee ee cchhee oobbiieettttiivvii hhaa ll''aarrcchhiitteettttuurraa ddii uunn ssiisstteemmaa?? 
QQuuaallii ssoonnoo ii pprriinncciippaallii EEnntteerrpprriissee AApppplliiccaattiioonn PPaatttteerrnnss ((mmuullttii--ttiieerrss,, ......))?? 
QQuuaallii ssoonnoo ii pprriinncciippaallii mmooddeellllii ddii ssttrruuttttuurraazziioonnee ((rreeppoossiittoorryy,, CC//SS,, aabbssttrraacctt-- 
llaayyeerreedd)) ee ccoonnttrroolllloo ((CCeennttrraalliizzzzeedd ccaallll--rreettuurrnn mmaannaaggeerr;; eevveenntt--ddrriivveenn 
bbrrooaaddccaasstt,, iinntteerrrruupptt ddrriivveenn)) ddii uunnaa aarrcchhiitteettttuurraa??
Refactoring e Design Pattern? 
RReeffaaccttoorriinngg ttoo PPaatttteerrnnss 
ddii JJoosshhuuaa KKeerriieevvsskkyy 
AAddddiissoonn WWeesslleeyy PPrrooffeessssiioonnaall 
hhttttpp::////iinndduussttrriiaallllooggiicc..ccoomm//xxpp//rreeffaaccttoorriinngg 
aapppplliiccaarree ii PPaatttteerrnn ppeerr mmiigglliioorraarree ddeell 
ccooddiiccee ggiiàà ssccrriittttoo ((ccoonn iill rreeffaaccttoorriinngg)) 
ddàà oottttiimmii rriissuullttaattii…… 
……mmiigglliioorrii cchhee aapppplliiccaarree ii PPaatttteerrnn nneell 
ddiisseeggnnoo iinniizziiaallee 
28
29 
Azioni concrete:
COMPRENDERE & REAGIRE 
AI FEEDBACK DEL CODICE 
Esempio "Live" di Refactoring del 2° tipo 
applicato al codice dell'interazione utente 
30 
!
Concludendo: i 3 punti chiave 
IInnddiivviidduuaarree ii ccaassii iinn ccuuii aapppplliiccaarree iill 
RReeffaaccttoorriinngg ddaa mmaaggggiioorree bbeenneeffiicciioo ((RROOII)) 
RRiiccoonnoosscceerree nneell ccooddiiccee ii ddiiffeettttii cchhee iill 
RReeffaaccttoorriinngg rriissoollvvee ee ii bbeenneeffiiccii cchhee ccoommppoorrttaa 
AApppplliiccaarree iill RReeffaaccttoorriinngg ccoonn ccoonnttiinnuuiittàà ee 
ffoorrmmaarrssii ssuull ddeessiiggnn OOOO 
31
32 
Call to Action! 
FFaarree pprraattiiccaa 
aall llaavvoorroo:: sseelleezziioonnaarree ii pprrooggeettttii ccoonn mmaaggggiioorree 
RROOII ppeerr iill RReeffaaccttoorriinngg ((ffeeeeddbbaacckk VViill ee SSvvii//PPMM)) 
ssuu pprrooggeettttii pprroopprrii//ooppeenn--ssoouurrccee 
ppeerr eesseerrcciizziioo:: aaggggiiuunnggeerree aallll’’eesseemmppiioo iill 
ccoonnttrroolllloo ddeellllaa nnaavviiggaazziioonnee:: 
hhttttpp::////wwwwww..uuggiiddoottnneett..oorrgg//aarrttiicclleess//aarrttiicclleess__rreeaadd..aassppxx??IIDD==9900 
FFoorrmmaarrssii 
RReeffaaccttoorriinngg 
PPrrooggrraammmmaazziioonnee ee ddiisseeggnnoo OOOO
33 
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/
Domande Risposte 
34 
&
35 FFiinnee

More Related Content

Viewers also liked

New Lean-Agile Coach Self-Assessment - detailed descriptions v3
New Lean-Agile Coach Self-Assessment - detailed descriptions v3New Lean-Agile Coach Self-Assessment - detailed descriptions v3
New Lean-Agile Coach Self-Assessment - detailed descriptions v3Luca Minudel
 
From Continuous Integration to Continuous Delivery and DevOps
From Continuous Integration to Continuous Delivery and DevOpsFrom Continuous Integration to Continuous Delivery and DevOps
From Continuous Integration to Continuous Delivery and DevOpsLuca Minudel
 
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular Ideas
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular IdeasLean & Agile Organizational Leadership: History, Theory, Models, & Popular Ideas
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular IdeasDavid Rico
 
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...Niels Pflaeging
 
New Lean-Agile Coach self-assessment radars v3.2
New Lean-Agile Coach self-assessment radars v3.2New Lean-Agile Coach self-assessment radars v3.2
New Lean-Agile Coach self-assessment radars v3.2Luca Minudel
 
Warum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtWarum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtJohann-Peter Hartmann
 
Organize for Complexity, part I+II - Special Edition Paper
Organize for Complexity, part I+II - Special Edition PaperOrganize for Complexity, part I+II - Special Edition Paper
Organize for Complexity, part I+II - Special Edition PaperNiels Pflaeging
 

Viewers also liked (7)

New Lean-Agile Coach Self-Assessment - detailed descriptions v3
New Lean-Agile Coach Self-Assessment - detailed descriptions v3New Lean-Agile Coach Self-Assessment - detailed descriptions v3
New Lean-Agile Coach Self-Assessment - detailed descriptions v3
 
From Continuous Integration to Continuous Delivery and DevOps
From Continuous Integration to Continuous Delivery and DevOpsFrom Continuous Integration to Continuous Delivery and DevOps
From Continuous Integration to Continuous Delivery and DevOps
 
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular Ideas
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular IdeasLean & Agile Organizational Leadership: History, Theory, Models, & Popular Ideas
Lean & Agile Organizational Leadership: History, Theory, Models, & Popular Ideas
 
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...
Personalentwicklung: Eine gar nicht mehr so gute Idee - Keynote von Niels Pfl...
 
New Lean-Agile Coach self-assessment radars v3.2
New Lean-Agile Coach self-assessment radars v3.2New Lean-Agile Coach self-assessment radars v3.2
New Lean-Agile Coach self-assessment radars v3.2
 
Warum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommtWarum die it nicht um new work herumkommt
Warum die it nicht um new work herumkommt
 
Organize for Complexity, part I+II - Special Edition Paper
Organize for Complexity, part I+II - Special Edition PaperOrganize for Complexity, part I+II - Special Edition Paper
Organize for Complexity, part I+II - Special Edition Paper
 

Similar to Pratica avanzata del refactoring (2004)

Marketing na Web / 2012 / Aula 2
Marketing na Web / 2012 / Aula 2Marketing na Web / 2012 / Aula 2
Marketing na Web / 2012 / Aula 2Paulo César Silva
 
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...Pablo Pazos
 
PARTES DE HARDWARE Y SOFTWARE
PARTES DE HARDWARE Y SOFTWAREPARTES DE HARDWARE Y SOFTWARE
PARTES DE HARDWARE Y SOFTWAREMarco Calla
 
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0DotNetMarche
 
Ch03 wrd25e instructor
Ch03 wrd25e instructorCh03 wrd25e instructor
Ch03 wrd25e instructorcwood
 
Transport en pontée en droit anglais
Transport en pontée  en droit anglaisTransport en pontée  en droit anglais
Transport en pontée en droit anglaisRabah HELAL
 
Aplicaciones Web
Aplicaciones WebAplicaciones Web
Aplicaciones WebMinfinity
 
22 Methodology of problem solving
22 Methodology of problem solving22 Methodology of problem solving
22 Methodology of problem solvingmaznabili
 
1 ruang lingkup analisis ekonomi dan pendapatan nasional
1 ruang lingkup analisis ekonomi dan pendapatan nasional1 ruang lingkup analisis ekonomi dan pendapatan nasional
1 ruang lingkup analisis ekonomi dan pendapatan nasionalARK081095
 
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)Nirmala Josephine
 
Java debugging tools
Java debugging toolsJava debugging tools
Java debugging toolsAman Ahmed
 
Implant parts/dental implant courses by Indian dental academy
Implant parts/dental implant courses by Indian dental academyImplant parts/dental implant courses by Indian dental academy
Implant parts/dental implant courses by Indian dental academyIndian dental academy
 
Integrated Approaches Across Focal Areas
Integrated Approaches Across Focal AreasIntegrated Approaches Across Focal Areas
Integrated Approaches Across Focal AreasIwl Pcu
 
Chapter 7 - Rotational Motion
Chapter 7 - Rotational MotionChapter 7 - Rotational Motion
Chapter 7 - Rotational MotionJPoilek
 
1185195456 173.criacao de_paginas_para_a_internet_v2
1185195456 173.criacao de_paginas_para_a_internet_v21185195456 173.criacao de_paginas_para_a_internet_v2
1185195456 173.criacao de_paginas_para_a_internet_v2Pelo Siro
 

Similar to Pratica avanzata del refactoring (2004) (20)

Marketing na Web / 2012 / Aula 2
Marketing na Web / 2012 / Aula 2Marketing na Web / 2012 / Aula 2
Marketing na Web / 2012 / Aula 2
 
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...
Presentacion InfoLac 2014 - generacion de interfaz de usuario para sistemas d...
 
PARTES DE HARDWARE Y SOFTWARE
PARTES DE HARDWARE Y SOFTWAREPARTES DE HARDWARE Y SOFTWARE
PARTES DE HARDWARE Y SOFTWARE
 
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
Adaptive rendering e ASP.NET 2.0 CSS Friendly Control Adapters 1.0
 
Ch03 wrd25e instructor
Ch03 wrd25e instructorCh03 wrd25e instructor
Ch03 wrd25e instructor
 
Transport en pontée en droit anglais
Transport en pontée  en droit anglaisTransport en pontée  en droit anglais
Transport en pontée en droit anglais
 
Aflowt by Vzljot Group
Aflowt by Vzljot GroupAflowt by Vzljot Group
Aflowt by Vzljot Group
 
Aplicaciones Web
Aplicaciones WebAplicaciones Web
Aplicaciones Web
 
22 Methodology of problem solving
22 Methodology of problem solving22 Methodology of problem solving
22 Methodology of problem solving
 
1 ruang lingkup analisis ekonomi dan pendapatan nasional
1 ruang lingkup analisis ekonomi dan pendapatan nasional1 ruang lingkup analisis ekonomi dan pendapatan nasional
1 ruang lingkup analisis ekonomi dan pendapatan nasional
 
Tp12
Tp12Tp12
Tp12
 
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)
BIOLOGY FORM 5 CHAPTER 5 - 5.3 C (DNA Fingerprinting)
 
Java debugging tools
Java debugging toolsJava debugging tools
Java debugging tools
 
Untitled 1
Untitled 1Untitled 1
Untitled 1
 
Implant parts/dental implant courses by Indian dental academy
Implant parts/dental implant courses by Indian dental academyImplant parts/dental implant courses by Indian dental academy
Implant parts/dental implant courses by Indian dental academy
 
Integrated Approaches Across Focal Areas
Integrated Approaches Across Focal AreasIntegrated Approaches Across Focal Areas
Integrated Approaches Across Focal Areas
 
Chapter 7 - Rotational Motion
Chapter 7 - Rotational MotionChapter 7 - Rotational Motion
Chapter 7 - Rotational Motion
 
sistemas operativos
sistemas operativossistemas operativos
sistemas operativos
 
1185195456 173.criacao de_paginas_para_a_internet_v2
1185195456 173.criacao de_paginas_para_a_internet_v21185195456 173.criacao de_paginas_para_a_internet_v2
1185195456 173.criacao de_paginas_para_a_internet_v2
 
Networks
NetworksNetworks
Networks
 

More from Luca Minudel

It takes two to tango - why tech and business succeed or fail together v4.1 b...
It takes two to tango - why tech and business succeed or fail together v4.1 b...It takes two to tango - why tech and business succeed or fail together v4.1 b...
It takes two to tango - why tech and business succeed or fail together v4.1 b...Luca Minudel
 
Scrum master self-assessment kit v3.2
Scrum master self-assessment kit v3.2Scrum master self-assessment kit v3.2
Scrum master self-assessment kit v3.2Luca Minudel
 
Project management in the age of accelerating change - IT/Tech specific
Project management in the age of accelerating change - IT/Tech specificProject management in the age of accelerating change - IT/Tech specific
Project management in the age of accelerating change - IT/Tech specificLuca Minudel
 
Project management in the age of accelerating change - general non IT specific
Project management in the age of accelerating change - general non IT specificProject management in the age of accelerating change - general non IT specific
Project management in the age of accelerating change - general non IT specificLuca Minudel
 
Scrum master self assessment v2.7
Scrum master self assessment v2.7Scrum master self assessment v2.7
Scrum master self assessment v2.7Luca Minudel
 
Agility - definition and curricula
Agility - definition and curriculaAgility - definition and curricula
Agility - definition and curriculaLuca Minudel
 
Agile Delivery Manager self-assessment radar
Agile Delivery Manager self-assessment radarAgile Delivery Manager self-assessment radar
Agile Delivery Manager self-assessment radarLuca Minudel
 
CTO self-assessment radar
CTO self-assessment radarCTO self-assessment radar
CTO self-assessment radarLuca Minudel
 
Reflections on Kent Beck's 3x Explore, Expand, and Extract
Reflections on Kent Beck's 3x Explore, Expand, and ExtractReflections on Kent Beck's 3x Explore, Expand, and Extract
Reflections on Kent Beck's 3x Explore, Expand, and ExtractLuca Minudel
 
Architettura del software un approccio Agile, Web-cast Microsoft 2006
Architettura del software un approccio Agile, Web-cast Microsoft 2006Architettura del software un approccio Agile, Web-cast Microsoft 2006
Architettura del software un approccio Agile, Web-cast Microsoft 2006Luca Minudel
 
Agility: The scientific definition of how to be(come) Agile
Agility: The scientific definition of how to be(come) AgileAgility: The scientific definition of how to be(come) Agile
Agility: The scientific definition of how to be(come) AgileLuca Minudel
 
Lightning talk: Active Agility, the magic ingredient of Lean and Agile
Lightning talk: Active Agility, the magic ingredient of Lean and AgileLightning talk: Active Agility, the magic ingredient of Lean and Agile
Lightning talk: Active Agility, the magic ingredient of Lean and AgileLuca Minudel
 
Software development in Formula One: challenges, complexity and struggle for ...
Software development in Formula One: challenges, complexity and struggle for ...Software development in Formula One: challenges, complexity and struggle for ...
Software development in Formula One: challenges, complexity and struggle for ...Luca Minudel
 
Refactoring legacy code driven by tests - ENG
Refactoring legacy code driven by tests - ENGRefactoring legacy code driven by tests - ENG
Refactoring legacy code driven by tests - ENGLuca Minudel
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITALuca Minudel
 
Continuous Delivery Overview
Continuous Delivery OverviewContinuous Delivery Overview
Continuous Delivery OverviewLuca Minudel
 

More from Luca Minudel (16)

It takes two to tango - why tech and business succeed or fail together v4.1 b...
It takes two to tango - why tech and business succeed or fail together v4.1 b...It takes two to tango - why tech and business succeed or fail together v4.1 b...
It takes two to tango - why tech and business succeed or fail together v4.1 b...
 
Scrum master self-assessment kit v3.2
Scrum master self-assessment kit v3.2Scrum master self-assessment kit v3.2
Scrum master self-assessment kit v3.2
 
Project management in the age of accelerating change - IT/Tech specific
Project management in the age of accelerating change - IT/Tech specificProject management in the age of accelerating change - IT/Tech specific
Project management in the age of accelerating change - IT/Tech specific
 
Project management in the age of accelerating change - general non IT specific
Project management in the age of accelerating change - general non IT specificProject management in the age of accelerating change - general non IT specific
Project management in the age of accelerating change - general non IT specific
 
Scrum master self assessment v2.7
Scrum master self assessment v2.7Scrum master self assessment v2.7
Scrum master self assessment v2.7
 
Agility - definition and curricula
Agility - definition and curriculaAgility - definition and curricula
Agility - definition and curricula
 
Agile Delivery Manager self-assessment radar
Agile Delivery Manager self-assessment radarAgile Delivery Manager self-assessment radar
Agile Delivery Manager self-assessment radar
 
CTO self-assessment radar
CTO self-assessment radarCTO self-assessment radar
CTO self-assessment radar
 
Reflections on Kent Beck's 3x Explore, Expand, and Extract
Reflections on Kent Beck's 3x Explore, Expand, and ExtractReflections on Kent Beck's 3x Explore, Expand, and Extract
Reflections on Kent Beck's 3x Explore, Expand, and Extract
 
Architettura del software un approccio Agile, Web-cast Microsoft 2006
Architettura del software un approccio Agile, Web-cast Microsoft 2006Architettura del software un approccio Agile, Web-cast Microsoft 2006
Architettura del software un approccio Agile, Web-cast Microsoft 2006
 
Agility: The scientific definition of how to be(come) Agile
Agility: The scientific definition of how to be(come) AgileAgility: The scientific definition of how to be(come) Agile
Agility: The scientific definition of how to be(come) Agile
 
Lightning talk: Active Agility, the magic ingredient of Lean and Agile
Lightning talk: Active Agility, the magic ingredient of Lean and AgileLightning talk: Active Agility, the magic ingredient of Lean and Agile
Lightning talk: Active Agility, the magic ingredient of Lean and Agile
 
Software development in Formula One: challenges, complexity and struggle for ...
Software development in Formula One: challenges, complexity and struggle for ...Software development in Formula One: challenges, complexity and struggle for ...
Software development in Formula One: challenges, complexity and struggle for ...
 
Refactoring legacy code driven by tests - ENG
Refactoring legacy code driven by tests - ENGRefactoring legacy code driven by tests - ENG
Refactoring legacy code driven by tests - ENG
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
 
Continuous Delivery Overview
Continuous Delivery OverviewContinuous Delivery Overview
Continuous Delivery Overview
 

Pratica avanzata del refactoring (2004)

  • 1. 1 RREEFFAACCTTOORRIINNGG AAPPPPLLIIEEDD:: PPrraattiiccaa aavvaannzzaattaa ddeell RReeffaaccttoorriinngg wwwwww..lluuccaa..mmiinnuuddeell..iitt
  • 3. 3 Obiettivi RReeffaaccttoorriinngg,, ppeerrcchhéé?? QQuuaallii pprreerreeqquuiissiittii ppeerr iill RReeffaaccttoorriinngg?? CCoommee ccoommpprreennddeerree ee rreeaaggiirree aaii ffeeeeddbbaacckk ddeell ccooddiiccee??
  • 4. 4 Premessa Refactoring èè iill pprroocceessssoo ppeerr mmooddiiffiiccaarree uunn ssiisstteemmaa ssooffttwwaarree iinn mmooddoo ttaallee ddaa mmiigglliioorraarree llaa ssttrruuttttuurraa iinntteerrnnaa ddeell ccooddiiccee sseennzzaa aalltteerraarrnnee iill ccoommppoorrttaammeennttoo eesstteerrnnoo.. MM.. FFoowwlleerr
  • 5. 5 Premessa IInnttrroodduuzziioonnee aall RReeffaaccttoorriinngg:: hhttttpp::////wwwwww..aaggiilleeddaayy..iitt//sslliiddeess// BBrruunnooBBoossssoollaa..zziipp
  • 6. REFACTORING, PERCHÉ? Riconoscere ssiittuuaazziioonnii ee pprroobblleemmii cchhee ssii rriissoollvvoonnoo ccoonn iill RReeffaaccttoorriinngg 6
  • 7. Il Refactoring è Disegno Il Disegno classico... nnoonn ssii ffaa oo...... ssii ffaa ccoonn uunn pprroocceessssoo ddiivviissoo iinn ““FFaassii”” IIll RReeffaaccttoorriinngg ssii ffaa ccoonnttiinnuuaammeennttee:: mmeennttrree ssii ssccrriivvee iill ccooddiiccee 7
  • 8. Il Refactoring è Disegno IIll DDiisseeggnnoo ccllaassssiiccoo uupp--ffrroonntt:: rraaccccoollttaa ddeeii RReeqquuiissiittii ee ddeeffiinniizziioonnee SSppeecciiffiicchhee iill DDiisseeggnnoo ““uupp--ffrroonntt”” ee ppooii IImmpplleemmeennttaazziioonnee ((iinn ffrreettttaa:: cc’’èè ppooccoo tteemmppoo)) IIll RReeffaaccttoorriinngg ccoonnttiinnuuoo:: TTDDDD:: RRoossssoo-->>VVeerrddee-->>RReeffaaccttoorriinngg IImmpplleemmeennttaa-->>pprroobblleemmii ddaall ccooddiiccee??-->>RReeffaaccttoorriinngg 8
  • 9. Quando e quanto Refactoring (Disegno) fare? PPeerr ddoommiinnaarree llaa ccoommpplleessssiittàà iill ssiisstteemmaa ddaa rreeaalliizzzzaarree ccii sseemmbbrraa mmoollttoo ccoommpplleessssoo PPeerr ppeerrmmeetttteerree ll’’eevvoolluuzziioonnee iill cclliieennttee ddeessiiddeerraa ppootteerr aaggggiiuunnggeerree oo mmooddiiffiiccaarree ffuunnzziioonnaalliittàà sseennzzaa rriiffaarree ttuuttttoo llaa ssooffttwwaarree hhoouussee vvuuoollee rriidduurrrree ii ccoossttii ddii mmaannuutteennzziioonnee oo aaddaattttaarree iill ssiisstteemmaa aa ppiiùù cclliieennttii QQuuaannttoo?? 9
  • 10. 10 Refactoring Vs Design disegno uupp--ffrroonntt ee rreeffaaccttoorriinngg ppoossssoonnoo ccooeessiisstteerree ii pprriinncciippii ddeell ddiisseeggnnoo vvaallggoonnoo aannccoorraa eedd èè nneecceessssaarriioo ccoonnoosscceerrllii
  • 11. 11 Refactoring Vs Design QQuuaallii ii vvaannttaaggggii ddeell RReeffaaccttoorriinngg?? ccii ssoonnoo rreeqquuiissiittii iimmppoorrttaannttii cchhee iill cclliieennttee ssccoopprree ddooppoo...... ccii ssoonnoo ccoossee aa ccuuii iill tteeaamm ddii ssvviilluuppppoo nnoonn aavveevvaa ppeennssaattoo!! qquuaannddoo iill pprrooggeettttoo èè lluunnggoo ii bbiissooggnnii ddeell cclliieennttee ppoossssoonnoo ccaammbbiiaarree...... ee ccoonn lloorroo ii rreeqquuiissiittii -->> AAddaattttaarrssii vveelloocceemmeennttee aaii ccaammbbiiaammeennttii
  • 12. 12 Refactoring Vs Design QQuuaallii ii vvaannttaaggggii ddeell RReeffaaccttoorriinngg?? èè ddiiffffiicciillee ““iinnddoovviinnaarree”” iill ddiisseeggnnoo mmiigglliioorree aall pprriimmoo ccoollppoo nnoonn ssii rriieessccee aa ddeecciiddeerree ccoommee iimmpplleemmeennttaarree aallccuunnee ffuunnzziioonnaalliittàà iimmpplleemmeennttaannddoo uunnaa ffuunnzziioonnaalliittàà iill ddiisseeggnnoo…… ddeeggeenneerraa aa vvoollttee ccii ssoonnoo ppeezzzzii ddii ccooddiiccee cchhee...... nnoonn ssii ssaa ppiiùù ccoossaa ffaannnnoo oo ccoommee ffuunnzziioonnaannoo aallttrree vvoollttee ssii ppuuòò mmiigglliioorraarree iill ddiisseeggnnoo...... ccaanncceellllaannddoo ppaarrttii ddii ccooddiiccee -->> MMiigglliioorraarree ggrraazziiee aaii ffeeeeddbbaacckk ddeell ccooddiiccee
  • 13. Cos’è buon Refactoring (Design) ? 13 IIll ccooddiiccee ddiivveennttaa ppiiùù FFlleessssiibbiillee rriieessccoo aa ffaarree uunnaa mmooddiiffiiccaa iinntteerrvveenneennddoo llooccaallmmeennttee iinn ppaarrttii iissoollaattee ddeell ccooddiiccee RRoobbuussttoo ffaacccciioo uunnaa ssiinnggoollaa mmooddiiffiiccaa ddeell ccooddiiccee ee qquueessttaa iinncciiddee ssoolloo ssuull ccooddiiccee ssttrreettttaammeennttee//llooggiiccaammeennttee ccoorrrreellaattoo RRiiuussaabbiillee rriieessccoo ffaacciillmmeennttee aadd eessttrraarrrree ddaall ccooddiiccee llee ffuunnzziioonnaalliittàà ppeerr rriiuuttiilliizzzzaarrllee
  • 14. 14 Cos’è buon Refactoring? IIll ccooddiiccee ddiivveennttaa ppiiùù sseemmpplliiccee ...... ddaa ccaappiirree ddaa aannaalliizzzzaarree ddaa mmooddiiffiiccaarree ddaa tteessttaarree
  • 15. 15 Cos’è buon Refactoring? È secondario mmaahh…… aanncchhee ppeerr ll’’uutteennttee ppoottrreebbbbeerroo eesssseerrccii bbeenneeffiiccii ::--DD EEssttrreemmaa sseemmpplliicciittàà -->> mmeennoo eerrrroorrii ssuuii ddaattii mmeennoo eerrrroorrii rruunn--ttiimmee ((oo ffeerrmmii mmaacccchhiinnaa)) pprrooggrraammmmii ppiiùù vveellooccii nniieennttee sspprreeccoo ddii rriissoorrssee
  • 16. Refactoring (Design): Quali problemi risolve? ppeerr ccoorrrreeggggeerree uunn bbuugg ccii vvuuoollee ttrrooppppoo tteemmppoo!! aaggggiiuunnggeerree uunnaa nnuuoovvaa ffuunnzziioonnaalliittàà èè...... uunn’’iimmpprreessaa ddiiffffiicciillee ee rriisscchhiioossaa!!!!!! èè ddiivveennttaattoo iimmppoossssiibbiillee ssttiimmaarree tteemmppii ee ccoossttii ddeeggllii iinntteerrvveennttii rriicchhiieessttii ddaall cclliieennttee?????? i clienti ccoonnttiinnuuaannoo aa cchhiieeddeerree mmooddiiffiicchhee,, iill pprrooggrraammmmaa èè aa ““ffiinnee ccoorrssaa””,, nneessssuunnoo hhaa iill ccoorraaggggiioo ddii rriiffaarrlloo.. 16
  • 18. REFACTORING QUALI PREREQUISITI? Dotarsi del necessario ppeerr aapppplliiccaarree iill 18 RReeffaaccttoorriinngg iinn ccoonnttiinnuuoo mmiigglliioorraammeennttoo
  • 19. 19 Refactoring del 1° tipo Le “code ssmmeellll”” cchhee ppoossssoonnoo eesssseerree iinnddiivviidduuaattee aauuttoommaattiiccaammeennttee ccoonn llee mmeettrriicchhee OOOO mmeettooddii//ccllaassssii lluunngghhee lluunngghhee lliissttee ddii ppaarraammeettrrii lliissttee ddii sswwiittcchh//iiff ggeenneerraalliizzzzaazziioonnee ssppeeccuullaattiivvaa ! v veeddi io ooommeetrtricicss44rreefafacctotorriningg.h.htmtmll
  • 20. 20 Refactoring del 1° tipo, VS.NET & Vil CCoommmmaanndd:: CC::PPrrooggrraammmmii......rreeffaaccttoorriinnggmmeettrriiccss..ccmmdd AArrgguummeennttss:: $$((TTaarrggeettDDiirr))**$$((TTaarrggeettEExxtt)) $$((SSoolluuttiioonnDDiirr)) 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
  • 21. Refactoring del 1° tipo & TDD 21
  • 22. 22 Refactoring del 2° tipo Le ““ccooddee ssmmeellll”” cchhee rriicchhiieeddoonnoo ““nnaassoo”” ccooddiiccee dduupplliiccaattoo ccaammbbiiaammeennttii ddiivveerrggeennttii sshhoottgguunn ssuurrggeerryy ffeeaattuurree eennvvyy ggeenneerraalliizzzzaazziioonnee ssppeeccuullaattiivvaa ccoommmmeennttii
  • 23. 23 Refactoring del 2° tipo: fare pratica!
  • 24. 24 Refactoring del 2° tipo: la preparazione PPrrooggrraammmmaazziioonnee OOOO DDiisseeggnnoo AArrcchhiitteettttuurraa
  • 25. 25 Refactoring del 2° tipo: la preparazione PPrrooggrraammmmaazziioonnee OOOO Cos'è il paradigma di programmazione OO? (cosa lloo ddiissttiinngguuee ddaall ppaarraaddiiggmmaa ddii pprrooggrr.. pprroocceedduurraallee,, ddii pprrooggrr.. mmoodduullaarree//ddaattaa hhiiddiinngg,, ddii aassttrraazziioonnee ddeeii ddaattii)) QQuuaannddoo ddeeffiinniirree uunnaa ccllaassssee bbaassee oo qquuaannddoo ddeeffiinniirree uunn''iinntteerrffaacccciiaa?? QQuuaannddoo uussaarree ll''eerreeddiittaarriieettàà ee qquuaannddoo iill ccoonntteenniimmeennttoo ((rriiffeerriimmeennttoo,, ppuunnttaattoorree))?? QQuuaannddoo uussaarree ll''eerreeddiittaarriieettàà ee qquuaannddoo uussaarree uunn ““ffllaagg”” ppeerr ddiissccrriimmiinnaarree ddiivveerrssii ttiippii?? QQuuaannddoo uussaarree iill ppoolliimmoorrffiissmmoo rruunn--ttiimmee ((ffuunnzziioonnii vviirrttuuaallii)) ee qquuaannddoo iill ppoolliimmoorrffiissmmoo ccoommppiillee--ttiimmee ((tteemmppllaattee//ggeenneerriiccss))?? LLee ffuunnzziioonnii ((nnaammeessppaaccee,, ccllaassssii,, ccoossttrruuttttoorrii,, ooppeerraattoorrii,, ccoonnvveerrssiioonnii,, oovveerrllooaaddiinngg,, ffuunnzziioonnii vviirrttuuaallii,, mmeemmbbrrii ssttaattiiccii,, vviissiibbiilliittàà,, eecccceezziioonnii,, ccoonnsstt//rreeaaddoonnllyy......)) ddeell lliinngguuaaggggiioo cchhee aassttrraazziioonnii ddeeffiinniissccoonnoo ee aa ccoossaa sseerrvvoonnoo??
  • 26. 26 Refactoring del 2° tipo: la preparazione DDiisseeggnnoo CCooss''èè iill ddiisseeggnnoo ee cchhee ddiiffffeerreennzzaa cc''èè ccoonn ll''aannaalliissii?? QQuuaannddoo sseerrvvee ffaarree ddiisseeggnnoo?? CCoommee ssii uussaannoo llee sscchheeddee CCRRCC?? SSeeccoonnddoo qquuaallii ccrriitteerrii uunn ddiisseeggnnoo èè bbuuoonnoo ((rriiggiiddiittàà,, ffrraaggiilliittàà,, iimmmmoobbiilliittàà;; aallttaa ccooeessiioonnee--bbaassssoo aaccccooppppiiaammeennttoo))?? QQuuaallii ssoonnoo ii ccaassii ddii bbuuoonn ddiisseeggnnoo ddaa pprreennddeerree ccoommee eesseemmppiioo oo ddaa ccoonnoosscceerree?? -- II DDeessiiggnn PPaatttteerrnn -- IISSOO OOSSII RReeffeerreennccee MMooddeell,, TTCCPP//IIPP RReeffeerreennccee MMooddeell -- PPrroottooccoolllloo HHTTTTPP -- SSttiillii,, ppaarraaddiiggmmii ee pprriinncciippii ddeellll''iinntteerraazziioonnee uutteennttee ((HHCCII)) QQuuaallii pprriinncciippii gguuiiddaannoo iill DDeessiiggnn ((LLSSPP LLiisskkoovv SSuubbssttiittuuttiioonn PPrriinncciippllee,, OOCCPP OOppeenn CClloossee PPrriinncciippllee,, DDIIPP DDeeppeennddeennccyy IInnvveerrssiioonn PPrriinncciippllee,, SSRRPP SSiinnggllee RReessppoonnssiibbiilliittyy PPrriinncciippllee,, IISSPP IInntteerrffaaccee SSeeggrreeggaattiioonn PPrriinncciippllee,, RREEPP//CCCCPP//CCRRPP//AADDPP//SSDDPP//SSAAPP PPaacckkaaggiinngg PPrriinncciipplleess,, TThhee MMaarrttiinn MMeettrriiccss))?? CChhee ddiiaaggrraammmmii ddii mmooddeellllaazziioonnee ssii uussaannoo ppeerr ddeessccrriivveerree uunn DDiisseeggnnoo ((UUMMLL))??
  • 27. 27 Refactoring del 2° tipo: la preparazione AArrcchhiitteettttuurraa CCooss''èè ll''aarrcchhiitteettttuurraa ee ccoossaa llaa ddiissttiinngguuee ddaall ddiisseeggnnoo?? CCooss''èè ll''aarrcchhiitteettttuurraa ee ccoossaa llaa ddiissttiinngguuee ddaallll''iinnffrraassttrruuttttuurraa?? DDaa qquuaallii rreeqquuiissiittii ddiippeennddee ee cchhee oobbiieettttiivvii hhaa ll''aarrcchhiitteettttuurraa ddii uunn ssiisstteemmaa?? QQuuaallii ssoonnoo ii pprriinncciippaallii EEnntteerrpprriissee AApppplliiccaattiioonn PPaatttteerrnnss ((mmuullttii--ttiieerrss,, ......))?? QQuuaallii ssoonnoo ii pprriinncciippaallii mmooddeellllii ddii ssttrruuttttuurraazziioonnee ((rreeppoossiittoorryy,, CC//SS,, aabbssttrraacctt-- llaayyeerreedd)) ee ccoonnttrroolllloo ((CCeennttrraalliizzzzeedd ccaallll--rreettuurrnn mmaannaaggeerr;; eevveenntt--ddrriivveenn bbrrooaaddccaasstt,, iinntteerrrruupptt ddrriivveenn)) ddii uunnaa aarrcchhiitteettttuurraa??
  • 28. Refactoring e Design Pattern? RReeffaaccttoorriinngg ttoo PPaatttteerrnnss ddii JJoosshhuuaa KKeerriieevvsskkyy AAddddiissoonn WWeesslleeyy PPrrooffeessssiioonnaall hhttttpp::////iinndduussttrriiaallllooggiicc..ccoomm//xxpp//rreeffaaccttoorriinngg aapppplliiccaarree ii PPaatttteerrnn ppeerr mmiigglliioorraarree ddeell ccooddiiccee ggiiàà ssccrriittttoo ((ccoonn iill rreeffaaccttoorriinngg)) ddàà oottttiimmii rriissuullttaattii…… ……mmiigglliioorrii cchhee aapppplliiccaarree ii PPaatttteerrnn nneell ddiisseeggnnoo iinniizziiaallee 28
  • 30. COMPRENDERE & REAGIRE AI FEEDBACK DEL CODICE Esempio "Live" di Refactoring del 2° tipo applicato al codice dell'interazione utente 30 !
  • 31. Concludendo: i 3 punti chiave IInnddiivviidduuaarree ii ccaassii iinn ccuuii aapppplliiccaarree iill RReeffaaccttoorriinngg ddaa mmaaggggiioorree bbeenneeffiicciioo ((RROOII)) RRiiccoonnoosscceerree nneell ccooddiiccee ii ddiiffeettttii cchhee iill RReeffaaccttoorriinngg rriissoollvvee ee ii bbeenneeffiiccii cchhee ccoommppoorrttaa AApppplliiccaarree iill RReeffaaccttoorriinngg ccoonn ccoonnttiinnuuiittàà ee ffoorrmmaarrssii ssuull ddeessiiggnn OOOO 31
  • 32. 32 Call to Action! FFaarree pprraattiiccaa aall llaavvoorroo:: sseelleezziioonnaarree ii pprrooggeettttii ccoonn mmaaggggiioorree RROOII ppeerr iill RReeffaaccttoorriinngg ((ffeeeeddbbaacckk VViill ee SSvvii//PPMM)) ssuu pprrooggeettttii pprroopprrii//ooppeenn--ssoouurrccee ppeerr eesseerrcciizziioo:: aaggggiiuunnggeerree aallll’’eesseemmppiioo iill ccoonnttrroolllloo ddeellllaa nnaavviiggaazziioonnee:: hhttttpp::////wwwwww..uuggiiddoottnneett..oorrgg//aarrttiicclleess//aarrttiicclleess__rreeaadd..aassppxx??IIDD==9900 FFoorrmmaarrssii RReeffaaccttoorriinngg PPrrooggrraammmmaazziioonnee ee ddiisseeggnnoo OOOO
  • 33. 33 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/

Editor's Notes

  1. 1 - quando e quanto 2 - gli strumenti per (non i tool) 3 - esempio “live” di refactoring
  2. Il punto da cui partiamo è questa defininizione. No intro
  3. tutte le informazioni utili per applicare il Refactoring anche in un ambiente Ostile (molte di queste nuove metodologie si applicano meglio in team)
  4. - non si fa xKè la SH non compra i Tool (ora c’è Together CE) o non fa formazione e quindi il Disegno lo sa leggere solo chi l’ha scritto e non a chi serve -Nel disegno classico lo fa il progettista -Nel Refactoring lo fa lo Sviluppatore
  5. Analisi: - Cosa il sistema deve fare (il comportamento esterno)- Usa il linguaggio dell’Utente (Non qui si parla di .NET/Java, Remoting/Web Services, SqlServer/Oracle) Disegno:- Come il sistema lo deve fare- Usa il linguaggio dello sviluppatore
  6. Quanto? - &amp;gt; = _quando_ serve! - quando fermarsi? -Quando abbiamo chiarito le complessità che avvertivamo del sistema e le abbiamo semplificate - Quando modificando il codice non avvertiamo “attriti” (si xKè il Refactoring si fa in maniera adattiva e non predittiva)
  7. - Design up-front è + facile da fare: svolge ruolo di indirizzo- il Design up-front può ridursi ed il ruolo di indirizzo lo fanno le sole schede CRC
  8. - vedendo e provando il programma l&amp;apos;utente capisce meglio ciò di cui aveva bisogno (nuovi requisiti e req cambiati) e anche noi capiamo cose a cui non avevamo pensato col tempo arrivano nuovi requisiti: mi serve questo… mi serve quello…
  9. - vi è mai capitato di arrivare alla fine di un progetto, di aver imparato molte cose e dire… “adesso lo progetterei in modo diverso”? è più difficile cancellare codice che scriverne Es. riunione col capo (poco tempo) o con utenti (poca concentrazione) o doc tecnico per colleghi da convincere/articolo-Tip il disegno migliora invece di degradare!
  10. Rigido - Fragile - ImmobileFlessibileLocalmente in parti isolate= 1+ metodi, 1+classi strettamente correlate (stesso namespace/assembly) =&amp;gt; When the extent of that cascade of change (in moduli correlati) cannot be predicted by the designers or maintainers the impact of the change cannot be estimated. Robusto- bug in cascata: fisso 1 e compare un altro- + applicazioni sulla stessa Virtual Directory- Portale&amp;lt;= applicazione (javascript/frame)Riutilizzabile- funz. Collegata a… autenticazione, log errori, condivisione connessione,…- user control con dentro SQL Un altro modo di dire Basso Accoppiamento Altra Coesione
  11. attributi interi ed esterni (predetti da misura di quelli interni con metodo statistico/modello matematico)
  12. Individuare i programmi che hanno i problemi appena descritti Individuare quali hanno esigenze di evoluzione/complessità (mutabilità dei requisiti, nuovi requisiti, tailoring per nuovi clienti, molti bug da correggere) Intervenire - Refactoring del 1° tipo (meccanico) sui punti che + ne hanno bisogno - Refactoring del 2° tipo (manuale) quando il cliente chiede modifiche
  13. Info da usare per far avvicinare i colleghi al R e altre info utili per migliorarsi. -Come comprendere e reagire ai feedback del codice?
  14. metriche predittive e di controllo attributi interi ed esterni (predetti da misura di quelli interni con metodo statistico/modello matematico) metriche statiche (complessità, comprensibilità, manutenibilità) metriche dinamiche (efficienza, affidabilità)
  15. Vil a linea di comando:- La metrica che voglio raccogliere- Il titolo- Il file htmpl di output Lo faccio per ogni metrica Con il Copy unisco tutti i risultati in un unico html e visualizzo il risultato Ho avuto problemi con la lunghezza del comando (command + arguments) da VS.NET External Tools… e ho risolto specificando la directory iniziale e quindi potendola togliere dal Command @echo on / pause ==&amp;gt; www.1bot.com
  16. trasformazioni in piccoli passi semplici applicati con sistematicità e disciplina velocità-&amp;gt;rischio di introdurre bug sottili
  17. Nota: questi sono i sintomi (queste metriche misurano attributi internni per predire quelli esterni) la malattia: cattivo disegno = rigidità, fragilità, immobilità la cura: fare refactoring (-&amp;gt;basso accoppiamento alta coesione) verificando se &amp;quot;ha senso&amp;quot; (OO, Pattern, LSP, OCP, DIP)
  18. modello iso osi, esempio chat e livelli applicazione e sessione -&amp;gt; programmazione OO + pratica -&amp;gt; feedback dal codice
  19. - da una parte i dp possono “materializzarsi” spontaneamente nel codice facendo refactoring - dall’altra funzionano da ispirazione durante il refactoring - inoltre nuovi dp possono nascere proprio facendo refactoring
  20. - Introdurre il refactoring come attività continua durante la scrittura di codice - approfondire i principi della programmazione OO e design e applicare il refactoring del 2° tipo - fare pratica di TDD e applicare TDD+Refactoring di 1° tipo
  21. Shotgun surgery Codice duplicato Cambiamenti divergenti Commenti Generalizzazione speculativa