SlideShare a Scribd company logo
1 of 14
Download to read offline
REFACTORING
Talk 6

1
REFACTORING
L'atto del modificare la struttura
interna del codice per renderlo
più comprensibile e modificabile,
senza alterarne il comportamento
osservabile.
2
RE-FUCK-TORING
L'atto del modificare la struttura del
codice per piegarla alle proprie
intenzioni, rendendolo
incomprensibile agli altri, non testabile,
non mantenibile e non riutilizzabile.
3
PERCHÉ PERDERE TEMPO IN
QUESTO MODO?
• D'altra

parte il codice funziona, perché
modificarlo?	


• Non

dà valore aggiunto al prodotto.
4
È mantenibile?

È leggibile?

IL TUO CODICE FA SCHIFO
È testabile?

È riutilizzabile?

5
È MANTENIBILE?
• Il

codice NON è per sempre.	


•I

requisiti cambiano.	


• Le

dipendenze cambiano.	


• Le

prestazioni cambiano.	


• Le

idee che sembravano buone non lo sono più abbastanza.	


• Gli

sviluppatori cambiano.
6
È LEGGIBILE?
• Tutti

sanno scrivere codice comprensibile da un computer, i buoni
programmatori scrivono codice comprensibile da un umano.	


• Non

siete da soli: dovete programmare come se i vostri colleghi
fossero violenti psicopatici che sanno dove abitate.	


• Il

codice è di tutti.	


• Il

tempo che ci serve per scrivere bene (una volta) è minore di
quello che serve per capire codice incomprensibile (tutte le volte
che serve).
7
È TESTABILE?

• Il

codice deve essere pensato per il testing, come le schede
madri.	


• Se

non è leggibile e bisogna modificarlo, chi garantisce che non
vengano inseriti errori?

8
È RIUTILIZZABILE?
• Questa

classe può essere usata insieme ad altre per fare un
altro lavoro?	


• Oppure

devo perdere tempo per farne un'altra molto simile?	


• Esempio: ho

una classe che raddoppia gli interi: devo perdere
tempo a fare una classe che triplica. Perché non ho fatto una
classe che moltiplica, mannaggia!
9
10
CODE SMELL
• Codice

duplicato	


• Metodo

troppo lungo	


• Classe

troppo grande	


• Troppi

parametri	


• Commenti

di che?	


• Nomi
• Dead
11

oscuri	

code
OPERAZIONI DI REFACTORING

12
13
http://sourcemaking.com/refactoring

14

More Related Content

Similar to 06 Refactoring

Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiMarco Breveglieri
 
Festivalmente: Getting Things done
Festivalmente: Getting Things doneFestivalmente: Getting Things done
Festivalmente: Getting Things doneVincenzo Garambone
 
Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19Ferdinando Santacroce
 
Test Driven Development @ Xe.Net
Test Driven Development @ Xe.NetTest Driven Development @ Xe.Net
Test Driven Development @ Xe.NetMauro Servienti
 
Instilling Scrum Workshop
Instilling Scrum WorkshopInstilling Scrum Workshop
Instilling Scrum WorkshopRaoul Buzziol
 
Agile Project Management - the Board Game workshop
Agile Project Management  - the Board Game workshopAgile Project Management  - the Board Game workshop
Agile Project Management - the Board Game workshopGiulio Roggero
 

Similar to 06 Refactoring (7)

Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con DelphiDelphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
Delphi & Dintorni Webinar - Padroneggiare i principi SOLID con Delphi
 
Festivalmente: Getting Things done
Festivalmente: Getting Things doneFestivalmente: Getting Things done
Festivalmente: Getting Things done
 
Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19Testare l'intestabile - Italian Agile Days 2019 #IAD19
Testare l'intestabile - Italian Agile Days 2019 #IAD19
 
Test Driven Development @ Xe.Net
Test Driven Development @ Xe.NetTest Driven Development @ Xe.Net
Test Driven Development @ Xe.Net
 
Instilling Scrum Workshop
Instilling Scrum WorkshopInstilling Scrum Workshop
Instilling Scrum Workshop
 
Instilling Scrum Workshop
Instilling Scrum WorkshopInstilling Scrum Workshop
Instilling Scrum Workshop
 
Agile Project Management - the Board Game workshop
Agile Project Management  - the Board Game workshopAgile Project Management  - the Board Game workshop
Agile Project Management - the Board Game workshop
 

More from Federico Russo (19)

23 Sicurezza in BBox
23 Sicurezza in BBox23 Sicurezza in BBox
23 Sicurezza in BBox
 
21 Buzzwords
21 Buzzwords21 Buzzwords
21 Buzzwords
 
18 - InfluxDB
18 - InfluxDB18 - InfluxDB
18 - InfluxDB
 
19 - The Highlander Project
19 - The Highlander Project19 - The Highlander Project
19 - The Highlander Project
 
22 - Better Coding
22 - Better Coding22 - Better Coding
22 - Better Coding
 
20 - Ottimizzare le query
20 - Ottimizzare le query20 - Ottimizzare le query
20 - Ottimizzare le query
 
17 - Web Application Threats
17 - Web Application Threats17 - Web Application Threats
17 - Web Application Threats
 
16 - Project Lombok
16 - Project Lombok16 - Project Lombok
16 - Project Lombok
 
15 - Java 8
15 - Java 815 - Java 8
15 - Java 8
 
14 - Atom
14 - Atom14 - Atom
14 - Atom
 
BBox e vaadin7
BBox e vaadin7BBox e vaadin7
BBox e vaadin7
 
Tile server
Tile serverTile server
Tile server
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
12 java modifiers
12 java modifiers12 java modifiers
12 java modifiers
 
10 Data caching
10 Data caching10 Data caching
10 Data caching
 
04-JVM
04-JVM04-JVM
04-JVM
 
02 - Collezioni
02 - Collezioni02 - Collezioni
02 - Collezioni
 
01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismo01 - Ereditarietà e polimorfismo
01 - Ereditarietà e polimorfismo
 
DataSnap
DataSnapDataSnap
DataSnap
 

06 Refactoring

  • 2. REFACTORING L'atto del modificare la struttura interna del codice per renderlo più comprensibile e modificabile, senza alterarne il comportamento osservabile. 2
  • 3. RE-FUCK-TORING L'atto del modificare la struttura del codice per piegarla alle proprie intenzioni, rendendolo incomprensibile agli altri, non testabile, non mantenibile e non riutilizzabile. 3
  • 4. PERCHÉ PERDERE TEMPO IN QUESTO MODO? • D'altra parte il codice funziona, perché modificarlo? • Non dà valore aggiunto al prodotto. 4
  • 5. È mantenibile? È leggibile? IL TUO CODICE FA SCHIFO È testabile? È riutilizzabile? 5
  • 6. È MANTENIBILE? • Il codice NON è per sempre. •I requisiti cambiano. • Le dipendenze cambiano. • Le prestazioni cambiano. • Le idee che sembravano buone non lo sono più abbastanza. • Gli sviluppatori cambiano. 6
  • 7. È LEGGIBILE? • Tutti sanno scrivere codice comprensibile da un computer, i buoni programmatori scrivono codice comprensibile da un umano. • Non siete da soli: dovete programmare come se i vostri colleghi fossero violenti psicopatici che sanno dove abitate. • Il codice è di tutti. • Il tempo che ci serve per scrivere bene (una volta) è minore di quello che serve per capire codice incomprensibile (tutte le volte che serve). 7
  • 8. È TESTABILE? • Il codice deve essere pensato per il testing, come le schede madri. • Se non è leggibile e bisogna modificarlo, chi garantisce che non vengano inseriti errori? 8
  • 9. È RIUTILIZZABILE? • Questa classe può essere usata insieme ad altre per fare un altro lavoro? • Oppure devo perdere tempo per farne un'altra molto simile? • Esempio: ho una classe che raddoppia gli interi: devo perdere tempo a fare una classe che triplica. Perché non ho fatto una classe che moltiplica, mannaggia! 9
  • 10. 10
  • 11. CODE SMELL • Codice duplicato • Metodo troppo lungo • Classe troppo grande • Troppi parametri • Commenti di che? • Nomi • Dead 11 oscuri code
  • 13. 13