Un plug-in Eclipse per il supporto all'Extract Class Refactoring
1. UNIVERSITÀ DEGLI
STUDI DEL MOLISE
FACOLTÀ DI SCIENZE MM.FF.NN
CORSO DI LAUREA IN INFORMATICA
Tesi di Laurea
in
Ingegneria del Software
“UN PLUG-IN ECLIPSE PER IL SUPPORTO
ALL’EXTRACT CLASS REFACTORING”
RELATORE: CANDIDATO:
Chiar.mo Prof. Fabio PALOMBA
Rocco OLIVETO Matricola: 134553
Anno Accademico
2010/2011
2. Background
- L’Ingegneria del Software...
- Qualità del codice e Antipattern...
- L’Antipattern Blob e l’Extract Class Refactoring...
Il progetto A.R.I.ES.
Automated Refactoring in Eclipse
Un approccio basato su grafi per l’Extract Class
refactoring...
Sommario
4. Alcuni miti del cliente
Un’affermazione generica degli scopi è sufficiente per
cominciare a scrivere programmi...
I mutamenti nei requisiti di un progetto si gestiscono
facilmente grazie alla flessibilità del software...
5. Alcuni miti del cliente
Fal
s
Un’affermazione generica degli scopi è sufficiente per
cominciare a scrivere programmi...
o
I mutamenti nei requisiti di un progetto si gestiscono
facilmente grazie alla flessibilità del software...
6. - L’Ingegneria del Software è la branca
dell’Informatica che si occupa di definire metodi a
supporto dello sviluppo del software per garantire
7. - L’Ingegneria del Software è la branca
dell’Informatica che si occupa di definire metodi a
supporto dello sviluppo del software per garantire
il giusto prodotto...
8. - L’Ingegneria del Software è la branca
dell’Informatica che si occupa di definire metodi a
supporto dello sviluppo del software per garantire
il giusto prodotto...
...al giusto costo....
9. - L’Ingegneria del Software è la branca
dell’Informatica che si occupa di definire metodi a
supporto dello sviluppo del software per garantire
il giusto prodotto...
...al giusto costo....
...nei tempi giusti...
10. - L’Ingegneria del Software è la branca
dell’Informatica che si occupa di definire metodi a
supporto dello sviluppo del software per garantire
il giusto prodotto...
...al giusto costo....
...nei tempi giusti...
...e con la giusta qualità...
11. Il ciclo di sviluppo
indica tutte le attività
da seguire per arrivare
alla consegna del
prodotto al cliente...
Ciclo di sviluppo ≠ Ciclo di vita
12. ...Il ciclo di vita
comprende la fase di
manutenzione...
Ciclo di sviluppo ≠ Ciclo di vita
13. ...Il ciclo di vita
comprende la fase di
manutenzione...
Ciclo di sviluppo ≠ Ciclo di vita
14. Cambiamento continuo...
“Un sistema usato in ambienti reali
necessariamente DEVE cambiare o
diventare progressivamente meno utile in
quell’ambiente”
Lehman’s Laws
15. Entropia crescente...
“Quando un sistema cambia, la sua
struttura tende a diventare più complessa.
Risorse extra devono essere utilizzate per
preservare e semplificare la struttura”
Lehman’s Laws
17. altri fattori tecnici influenzano le difficoltà
software non
progettato per
mo difiche future
Manutenzione del software
18. altri fattori tecnici influenzano le difficoltà
software non mancanza di
progettato per docu mentazione
mo difiche future
Manutenzione del software
19. altri fattori tecnici influenzano le difficoltà
software non mancanza di
progettato per docu mentazione
mo difiche future
SOFTWARE DI BASSA
QUALITÀ
Manutenzione del software
21. “Una soluzione progettuale
generale ad un problema
ricorrente”
- Non è un componente software
riusabile...
- Un modello da applicare per
risolvere un problema...
Design Patterns
22. Come un sistema Come un sistema può
dovrebbe essere diventare
Antipattern
23. Come un sistema Come un sistema può
dovrebbe essere diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
Antipattern
24. “Il grado di interdipendenza
tra gli oggetti all’interno di
una singola classe”
Coesione
25. “Il grado di interdipendenza
tra gli oggetti all’interno di
una singola classe”
Alta coesione è desiderabile
Coesione
26. “Il grado di interdipendenza
tra due classi”
Accoppiamento
27. “Il grado di interdipendenza
tra due classi”
Basso accoppiamento è desiderabile
Accoppiamento
28. Come un sistema Come un sistema può
dovrebbe essere diventare
Si può migliorare la qualità di un sistema?
Antipattern
29. Come un sistema Come un sistema può
dovrebbe essere diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
Antipattern
30. Refactoring?
Apportare modifiche per semplificare la
struttura del sistema
Obiettivo
Mantenere il comportamento del sistema
inalterato
Migliorare i requisiti non funzionali
31. Come un sistema Come un sistema può
dovrebbe essere diventare
Si può monitorare la qualità di un sistema?
Antipattern
32. Come un sistema Come un sistema può
dovrebbe essere diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
Antipattern
33. Background
L’ANTIPATTERN BLOB E
L’EXTRACT CLASS
REFACTORING
34. Object-Oriented
programming è
Responsability-based...
Object-Oriented Programming
35. Class
Class
Class
Class Spesso i programmatori
aggiungono responsabilità non
Class corrette ad una classe...
Class
...facendola diventare troppo
Class complessa e
con bassa coesione...
38. Dividere la classe avente troppe
responsabilità in più classi
Class C Class C1 Class C2
Input Output
BLO
B
Coesione = 0.2 Coesione = 0.5 Coesione = 0.4
Extract Class Refactoring
39. In che modo?
Class C Class C1 Class C2
Input Output
BLO
B
Coesione = 0.2 Coesione = 0.5 Coesione = 0.4
Extract Class Refactoring
40. Fokaefs et al. Bavota et al. Bavota et al.
ICSM 2009 JSS 2011 ASE 2010
clustering graph theory graph theory
Stato dell’arte
41. Nes
sun
too
l disp
onib
ile
Fokaefs et al. Bavota et al. Bavota et al.
ICSM 2009 JSS 2011 ASE 2010
clustering graph theory graph theory
Stato dell’arte
42. NES
SUN
MET
ODO
DI ID
ENT
IFIC
AZIO
NE D
I BL
OB
Fokaefs et al. Bavota et al. Bavota et al.
ICSM 2009 JSS 2011 ASE 2010
clustering graph theory graph theory
Stato dell’arte
43. NES
SUN
MET
ODO
DI ID
ENT
IFIC
AZIO
NE D
I BL
OB
Fokaefs et al. Bavota et al. Bavota et al.
ICSM 2009 JSS 2011 ASE 2010
clustering graph theory graph theory
Stato dell’arte
52. Passo 5: Filtraggio della matrice e chiusura transitiva
m1 m2 m3
m1 0,3 0,6
minCoupling = 0,4
m2 0,3 0,8
m3 0,6 0,8
Filtraggio della matrice Method-by-Method
53. Passo 5: Filtraggio della matrice e chiusura transitiva
m1 m2 m3
m1 0,3 0,6
minCoupling = 0,4
m2 0,3 0,8
m3 0,6 0,8
Filtraggio della matrice Method-by-Method
54. Passo 5: Filtraggio della matrice e chiusura transitiva
m1 m2 m3
m1 0,3 0,6
minCoupling = 0,4
m2 0,3 0,8
m3 0,6 0,8
Filtraggio della matrice Method-by-Method
55. Passo 5: Filtraggio della matrice e chiusura transitiva
m1 m2 m3
m1 0 0,6
minCoupling = 0,4
m2 0 0,8
m3 0,6 0,8
Filtraggio della matrice Method-by-Method
56. Passo 6: Fusione delle trivial-chains
method-by-method matrix
Method-by-method Relationships before Filtering
after transitive closure
Method-by-method Relationships after Filtering proposed refactoring
Proposed Refactoring
Candidate Chain C1
Candidate Class C1
0.7 DU
Candidate Chain C2
UT 0.6
0.7 DU IU DU UU EU CU
0.7 0.6 IU UU UT
0.7
0.6
0.7 0.6
IU 0.7 UU 0.7
0.7 0.1
0.6
0.6 0.6
IT DT
0.6
IT DT Candidate Class C2
0.1
EU 0.6
0.2 0.1 0.3 0.3
EU 0.6
CU 0.3 0.3 IT DT UT CT
CT
CT
CU
Trivial Chain T1
63. Passo 1: Calcolo delle metriche a livello di progetto
LCOM: Lack of Cohesion in Methods
C3: Conceptual Cohesion of Classes
MPC: Message Passing Coupling
Check Quality
64. Lack of Cohesion in Methods
- Ii insieme delle variabili d’istanza
67. Passo 2: Estrazione degli outliers
Una classe è outlier se non è
in linea con la qualità media
del sistema
Check Quality
68. Passo 2: Estrazione degli outliers
Una classe è outlier se non è
in linea con la qualità media
del sistema
Migliorando la qualità degli
outliers superiori, migliora la
qualità dell’intero sistema
Check Quality
73. Passo 3: Analisi della classe identificata
Topic Map Rappresentazione degli
argomenti della classe
Analyzer
74. Passo 3: Analisi della classe identificata
Topic Map Rappresentazione degli
argomenti della classe
L’ideale sarebbe avere classi
che gestiscono un singolo
argomento
Analyzer
79. A.R.I.ES. Extract Class Refactoring
Proposte ottenute
dall’algoritmo di estrazione
basato su grafi
Extract Class Refactoring
80. A.R.I.ES. Extract Class Refactoring
Proposte ottenute
dall’algoritmo di estrazione
basato su grafi
Personalizzazione della
proposta
Extract Class Refactoring