Un plug-in Eclipse per il supporto all'Extract Class Refactoring
-
Upload
fabio-palomba -
Category
Technology
-
view
290 -
download
1
description
Transcript of Un plug-in Eclipse per il supporto all'Extract Class Refactoring
“UN PLUG-IN ECLIPSE PER IL SUPPORTO ALL’EXTRACT CLASS REFACTORING”
RELATORE: Chiar.mo Prof. Rocco OLIVETO
CANDIDATO:Fabio PALOMBAMatricola: 134553
Anno Accademico 2010/2011
UNIVERSITÀ DEGLI STUDI DEL MOLISE
FACOLTÀ DI SCIENZE MM.FF.NN CORSO DI LAUREA IN INFORMATICA
Tesi di Laurea in
Ingegneria del Software
Sommario
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 Classrefactoring...
L’INGEGNERIA DELSOFTWARE
Background
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...
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...
Falso
Alcuni miti del cliente
- L’Ingegneria del Software è la branca dell’Informatica che si occupa di definire metodi a supporto dello sviluppo del software per garantire
- 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...
- 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....
- 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...
- 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à...
Il ciclo di sviluppo indica tutte le attività
da seguire per arrivare alla consegna del
prodotto al cliente...
Ciclo di sviluppo ≠ Ciclo di vita
Ciclo di sviluppo ≠ Ciclo di vita
...Il ciclo di vita comprende la fase di
manutenzione...
Ciclo di sviluppo ≠ Ciclo di vita
...Il ciclo di vita comprende la fase di
manutenzione...
Lehman’s Laws
“Un sistema usato in ambienti reali necessariamente DEVE cambiare o
diventare progressivamente meno utile in quell’ambiente”
Cambiamento continuo...
Lehman’s Laws
“Quando un sistema cambia, la sua struttura tende a diventare più complessa. Risorse extra devono essere utilizzate per preservare e semplificare la struttura”
Entropia crescente...
Manutenzione del software
altri fattori tecnici influenzano le difficoltà
software non progettato per modifiche future
Manutenzione del software
altri fattori tecnici influenzano le difficoltà
software non progettato per modifiche future
mancanza di documentazione
Manutenzione del software
altri fattori tecnici influenzano le difficoltà
software non progettato per modifiche future
mancanza di documentazione
Manutenzione del software
altri fattori tecnici influenzano le difficoltà
SOFTWARE DI BASSA QUALITÀ
Background
QUALITÀ DEL CODICEE ANTIPATTERN
Design Patterns
“Una soluzione progettuale generale ad un problema
ricorrente”
- Un modello da applicare per risolvere un problema...
- Non è un componente software riusabile...
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
Coesione
“Il grado di interdipendenzatra gli oggetti all’interno di
una singola classe”
Coesione
“Il grado di interdipendenzatra gli oggetti all’interno di
una singola classe”
Alta coesione è desiderabile
“Il grado di interdipendenzatra due classi”
Accoppiamento
“Il grado di interdipendenzatra due classi”
Accoppiamento
Basso accoppiamento è desiderabile
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Si può migliorare la qualità di un sistema?
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
Refactoring?
Migliorare i requisiti non funzionali
Obiettivo
Apportare modifiche per semplificare la struttura del sistema
Mantenere il comportamento del sistema inalterato
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Si può monitorare la qualità di un sistema?
Antipattern
Come un sistema dovrebbe essere
Come un sistema può diventare
Si può monitorare la qualità di un sistema?
Si può migliorare la qualità di un sistema?
L’ANTIPATTERN BLOB E L’EXTRACT CLASS
REFACTORING
Background
Object-Oriented Programming
Object-Oriented programming è
Responsability-based...
Class
Class
Class
ClassClassClassClass
Spesso i programmatoriaggiungono responsabilità non
corrette ad una classe...
...facendola diventare troppo complessa e
con bassa coesione...
BLOB
Dividere la classe avente troppe responsabilità in più classi
Input
Coesione = 0.2
BLOBOutput
Coesione = 0.5 Coesione = 0.4
Class C Class C1 Class C2
Extract Class Refactoring
In che modo?
Input
Coesione = 0.2
Output
Coesione = 0.5 Coesione = 0.4
Class C Class C1 Class C2
BLOB
Extract Class Refactoring
Bavota et al.JSS 2011
Bavota et al.ASE 2010
graph theory
Fokaefs et al.ICSM 2009clustering graph theory
Stato dell’arte
Bavota et al.JSS 2011
Bavota et al.ASE 2010
graph theory
Fokaefs et al.ICSM 2009clustering graph theory
Stato dell’arte
Nessun tool disponibile
Bavota et al.JSS 2011
Bavota et al.ASE 2010
graph theory
Fokaefs et al.ICSM 2009clustering graph theory
Stato dell’arte
NESSUN METODO DI IDENTIFICAZIONE DI BLOB
Bavota et al.JSS 2011
Bavota et al.ASE 2010
graph theory
Fokaefs et al.ICSM 2009clustering graph theory
Stato dell’arte
NESSUN METODO DI IDENTIFICAZIONE DI BLOB
Il progetto A.R.I.ES.
Bavota et al.ASE 2010
Bavota et al.ASE 2010
Chiusura transitiva della matrice method-by-method
Bavota et al.ASE 2010
Chiusura transitiva della matrice method-by-method
Output: Catene di metodi fortemente correlate
m1 m2 m3
m1
m2
m3
Costruzione della matrice Method-by-Method (1)
Passo 1: Calcolo della somiglianza strutturale
VCM: Variable-based Cohesion
between Methods
ci,j
m1 m2 m3
m1
m2
m3
Costruzione della matrice Method-by-Method (2)
Passo 2: Calcolo della somiglianza strutturale
CCM: Call-based Cohesionbetween Methods
m1 m2 m3
m1
m2
m3
ci,j
m1 m2 m3
m1
m2
m3
Costruzione della matrice Method-by-Method (3)
Passo 3: Calcolo della somiglianza semantica
m1 m2 m3
m1
m2
m3
m1 m2 m3
m1
m2
m3
ci,j
m1 m2 m3
m1
m2
m3 CSM: Conceptual Similarity
between Methods
ci,j
m1 m2 m3
m1
m2
m3
m1 m2 m3
m1
m2
m3
m1 m2 m3
m1
m2
m3
m1 m2 m3
m1
m2
m3
wvcm
wccm
wcsm
VCM
CCM
CSM
*
Passo 4: La matrice Method-by-Method
*
*
*
m1 m2 m3
m1
m2
m3
Passo 5: Filtraggio della matrice e chiusura transitiva
0,3 0,6
0,80,3
0,6 0,8
minCoupling = 0,4
Filtraggio della matrice Method-by-Method
m1 m2 m3
m1
m2
m3
Passo 5: Filtraggio della matrice e chiusura transitiva
0,3 0,6
0,80,3
0,6 0,8
minCoupling = 0,4
Filtraggio della matrice Method-by-Method
m1 m2 m3
m1
m2
m3
Passo 5: Filtraggio della matrice e chiusura transitiva
0,3 0,6
0,80,3
0,6 0,8
minCoupling = 0,4
Filtraggio della matrice Method-by-Method
m1 m2 m3
m1
m2
m3
Passo 5: Filtraggio della matrice e chiusura transitiva
0,6
0,8
0,6 0,8
0
Filtraggio della matrice Method-by-Method
minCoupling = 0,4
0
0
DU
UU
CU
IU0.6
0.7
Candidate Chain C1
Candidate Chain C2
Trivial Chain T1
UUIU DU
Candidate Class C1
DTIT UT CT
Candidate Class C2
EU
Method-by-method Relationships before Filtering Method-by-method Relationships after Filtering Proposed Refactoring
0.7
EU
0.7
0.2
IT
0.1
0.60.1
0.6
UT
DT
CT
0.7
0.6
0.3
0.6
0.3
0.1
DU
UU
CU
IU0.6
0.7
0.7
EU
0.7
IT0.6
0.6
UT
DT
CT
0.7
0.6
0.3
0.6
0.3
CU
method-by-method matrix after transitive closure proposed refactoring
Passo 6: Fusione delle trivial-chains
Automated Refactoring in Eclipse
Automated Refactoring in Eclipse
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Check Quality
Passo 1: Calcolo delle metriche a livello di progetto
LCOM: Lack of Cohesion in Methods
C3: Conceptual Cohesion of Classes
MPC: Message Passing Coupling
Lack of Cohesion in Methods
- Ii insieme delle variabili d’istanza
Conceptual Cohesion of Classes
Definita
Message Passing Coupling
Data la classe C,
Check Quality
Passo 2: Estrazione degli outliers
Check Quality
Passo 2: Estrazione degli outliers
Una classe è outlier se non è in linea con la qualità media
del sistema
Check Quality
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
A.R.I.ES. Check Quality
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Passo 3: Analisi della classe identificata
Analyzer
Topic Map
Passo 3: Analisi della classe identificata
Rappresentazione degli argomenti della classe
Analyzer
Topic Map
Passo 3: Analisi della classe identificata
Rappresentazione degli argomenti della classe
L’ideale sarebbe avere classi che gestiscono un singolo
argomento
Analyzer
Topic Map
Analyzer
A.R.I.ES. Analyzer
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Automated Refactoring in Eclipse
Identificazione automatica di Blob
Analisi dei Blob
Extract Class Refactoring
Extract Class Refactoring
A.R.I.ES. Extract Class Refactoring
Extract Class Refactoring
A.R.I.ES. Extract Class Refactoring
Proposte ottenute dall’algoritmo di estrazione
basato su grafi
Extract Class Refactoring
A.R.I.ES. Extract Class Refactoring
Proposte ottenute dall’algoritmo di estrazione
basato su grafi
Personalizzazione della proposta
Extract Class Refactoring
A.R.I.ES. Extract Class Refactoring
Extract Class Refactoring
Preview della qualità raggiunta con l’estrazione
A.R.I.ES. Extract Class Refactoring
conclusionisviluppi futuri
Bavota et al.ASE 2010
Conclusioni
Bavota et al.ASE 2010
Conclusioni
Nessun tool che implementa il metodo
Nessun metodo di identificazione di Blob
Bavota et al.ASE 2010
Conclusioni
Nessun tool che implementa il metodo
Bavota et al.ASE 2010
Conclusioni
Palomba et al.ICSE 2012 (in revision)
Sviluppi futuri
Class C1 Class C2
methodA()...methodN()
Package P1Package P2
classA()
...classN()
Move Method Refactoring
Move Class Refactoring
methodM()...
classM()...
classW()
Sviluppi futuri
Class C1 Class C2
methodA()...methodN()
Package P1Package P2
classA()
...classN()
Move Method Refactoring
Move Class Refactoring
methodM()...
classM()...
classW()
Sviluppi futuri
Class C1 Class C2
methodA()...methodN()
Package P1Package P2
classA()
...classN()
Move Method Refactoring
Move Class Refactoring
methodM()...
classM()...
classW()
Sviluppi futuri
Class C1 Class C2
methodA()...methodN()
Package P1Package P2
classA()
...classN()
Move Method Refactoring
Move Class Refactoring
methodM()...
classM()...
classW()