SlideShare a Scribd company logo
1 of 92
Download to read offline
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
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
Background
L’INGEGNERIA 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...
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...
- 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
...Il ciclo di vita
                  comprende la fase di
                    manutenzione...




Ciclo di sviluppo ≠ Ciclo di vita
...Il ciclo di vita
                  comprende la fase di
                    manutenzione...




Ciclo di sviluppo ≠ Ciclo di vita
Cambiamento continuo...




    “Un sistema usato in ambienti reali
     necessariamente DEVE cambiare o
  diventare progressivamente meno utile in
               quell’ambiente”



Lehman’s Laws
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
altri fattori tecnici influenzano le difficoltà




Manutenzione del software
altri fattori tecnici influenzano le difficoltà


   software non
  progettato per
  mo difiche future




Manutenzione del software
altri fattori tecnici influenzano le difficoltà


   software non            mancanza di
  progettato per         docu mentazione
  mo difiche future




Manutenzione del software
altri fattori tecnici influenzano le difficoltà


   software non            mancanza di
  progettato per         docu mentazione
  mo difiche future

          SOFTWARE DI BASSA
               QUALITÀ


Manutenzione del software
Background


QUALITÀ DEL CODICE
  E ANTIPATTERN
“Una soluzione progettuale
       generale ad un problema
              ricorrente”


- Non è un componente software
riusabile...
- Un modello da applicare per
risolvere un problema...



             Design Patterns
Come un sistema       Come un sistema può
 dovrebbe essere           diventare




              Antipattern
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
“Il grado di interdipendenza
    tra gli oggetti all’interno di
         una singola classe”




Coesione
“Il grado di interdipendenza
    tra gli oggetti all’interno di
         una singola classe”



 Alta coesione è desiderabile



Coesione
“Il grado di interdipendenza
        tra due classi”




              Accoppiamento
“Il grado di interdipendenza
          tra due classi”




Basso accoppiamento è desiderabile


                Accoppiamento
Come un sistema        Come un sistema può
       dovrebbe essere            diventare




Si può migliorare la qualità di un sistema?


                  Antipattern
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
Refactoring?
Apportare modifiche per semplificare la
         struttura del sistema



      Obiettivo
  Mantenere il comportamento del sistema
                 inalterato

       Migliorare i requisiti non funzionali
Come un sistema        Come un sistema può
       dovrebbe essere            diventare




Si può monitorare la qualità di un sistema?




                  Antipattern
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
Background

       L’ANTIPATTERN BLOB E
          L’EXTRACT CLASS
            REFACTORING
Object-Oriented
   programming è
Responsability-based...




Object-Oriented Programming
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...
BLO
   B
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
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
Fokaefs et al.       Bavota et al.   Bavota et al.
 ICSM 2009             JSS 2011       ASE 2010
 clustering          graph theory    graph theory




                 Stato dell’arte
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
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
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
Il progetto A.R.I.ES.
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



Bavota et al.
 ASE 2010
Passo 1: Calcolo della somiglianza strutturale



         m1      m2         m3


   m1             ci,j
   m2


   m3                                          VCM:
                                     Variable-based Cohesion
                                        between Methods


Costruzione della matrice Method-by-Method (1)
Passo 2: Calcolo della somiglianza strutturale



         m1      m2         m3


   m1             ci,j
   m2


   m3                                           CCM:
                                        Call-based Cohesion
                                         between Methods


Costruzione della matrice Method-by-Method (2)
Passo 3: Calcolo della somiglianza semantica



         m1       m2        m3


   m1             ci,j
   m2


   m3                                        CSM:
                                       Conceptual Similarity
                                        between Methods


Costruzione della matrice Method-by-Method (3)
Passo 4: La matrice Method-by-Method
                                                         m1   m2   m3
                                                    m1
                                            wvcm*   m2    VCM
                                                    m3

     m1      m2        m3
                                                         m1   m2   m3
m1                                                  m1
              ci,j                          wccm*   m2    CCM
m2                                                  m3


m3
                                                         m1   m2   m3
                                                    m1
                                            wcsm*   m2    CSM
                                                    m3



                                            *
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
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
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
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
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
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




Automated Refactoring in Eclipse
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
Lack of Cohesion in Methods



- Ii insieme delle variabili d’istanza
Conceptual Cohesion of Classes


Definita




                   Message Passing Coupling


   Data la classe C,
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




Check Quality
Identificazione automatica di
                               Blob

                         Analisi dei Blob

                    Extract Class Refactoring




Automated Refactoring in Eclipse
Identificazione automatica di
                                   Blob




                       Analisi dei Blob

                        Extract Class Refactoring




Automated Refactoring in Eclipse
Passo 3: Analisi della classe identificata



Topic Map




            Analyzer
Passo 3: Analisi della classe identificata



Topic Map                  Rappresentazione degli
                           argomenti della classe




            Analyzer
Passo 3: Analisi della classe identificata



Topic Map                  Rappresentazione degli
                           argomenti della classe


                        L’ideale sarebbe avere classi
                          che gestiscono un singolo
                                 argomento



            Analyzer
A.R.I.ES. Analyzer




Analyzer
Identificazione automatica di
                               Blob

                         Analisi dei Blob

                    Extract Class Refactoring




Automated Refactoring in Eclipse
Identificazione automatica di
                                     Blob




                               Analisi dei Blob




                    Extract Class Refactoring




Automated Refactoring in Eclipse
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
A.R.I.ES. Extract Class Refactoring




                          Preview della qualità raggiunta
                                 con l’estrazione




Extract Class Refactoring
sviluppi futuri
conclusioni
Bavota et al.
 ASE 2010



                Conclusioni
Nessun tool che
                       implementa il metodo




Bavota et al.
 ASE 2010



                Conclusioni
Nessun tool che
                       implementa il metodo


                         Nessun metodo di
                       identificazione di Blob


Bavota et al.
 ASE 2010



                Conclusioni
Bavota et al.            Palomba et al.
 ASE 2010             ICSE 2012 (in revision)



                Conclusioni
Class C1           Class C2

                                  Move Method Refactoring
methodA()
    ...
                  methodM()
methodN()             ...



                              Package P2         Package P1


 Move Class Refactoring                           classA()
                               classW()
                                  ...                ...
                               classM()           classN()




              Sviluppi futuri
Class C1           Class C2

                                  Move Method Refactoring
methodA()
    ...
                  methodM()
methodN()             ...



                              Package P2         Package P1


 Move Class Refactoring                           classA()
                               classW()
                                  ...                ...
                               classM()           classN()




              Sviluppi futuri
Class C1           Class C2

                                  Move Method Refactoring
                  methodA()
   ...
                  methodM()
methodN()             ...



                              Package P2         Package P1


 Move Class Refactoring                           classA()
                               classW()
                                  ...                ...
                               classM()           classN()




              Sviluppi futuri
Class C1           Class C2

                                  Move Method Refactoring
                  methodA()
   ...
                  methodM()
methodN()             ...



                              Package P2         Package P1


 Move Class Refactoring        classA()
                               classW()
                                  ...                ...
                               classM()           classN()




              Sviluppi futuri
Grazie!

            Questions and/or
               comments



Fabio Palomba
134553
fabio.palomba.89@gmail.com

More Related Content

Similar to Un plug-in Eclipse per il supporto all'Extract Class Refactoring

Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Giancarlo Valente
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliatiAlberto Brandolini
 
Sicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaSicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaPaolo Perego
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented ProgrammingAndrea Bozzoni
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei MicroserviziitalianaSoftware
 
DOCKER FROM ZERO TO HERO
DOCKER FROM ZERO TO HERODOCKER FROM ZERO TO HERO
DOCKER FROM ZERO TO HEROGiuliano Latini
 
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyProgettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyGiacomo Russo
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Nicola Junior Vitto
 
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...Emerasoft, solutions to collaborate
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the bossClaudio Cicali
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsAlberto Brandolini
 

Similar to Un plug-in Eclipse per il supporto all'Extract Class Refactoring (20)

Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)Inversion of control e Dependency Injection (ITA)
Inversion of control e Dependency Injection (ITA)
 
Stai guardando i dati sbagliati
Stai guardando i dati sbagliatiStai guardando i dati sbagliati
Stai guardando i dati sbagliati
 
Software Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpASoftware Testing Forum 2012 - Polarion e TRS SpA
Software Testing Forum 2012 - Polarion e TRS SpA
 
Spring 2.5
Spring 2.5Spring 2.5
Spring 2.5
 
Spring - Ecosistema
Spring - EcosistemaSpring - Ecosistema
Spring - Ecosistema
 
Sicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla PraticaSicurezza Applicatica Dalla Teoria Alla Pratica
Sicurezza Applicatica Dalla Teoria Alla Pratica
 
Aspect Oriented Programming
Aspect Oriented ProgrammingAspect Oriented Programming
Aspect Oriented Programming
 
La rivoluzione dei Microservizi
La rivoluzione dei MicroserviziLa rivoluzione dei Microservizi
La rivoluzione dei Microservizi
 
DOCKER FROM ZERO TO HERO
DOCKER FROM ZERO TO HERODOCKER FROM ZERO TO HERO
DOCKER FROM ZERO TO HERO
 
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacyProgettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
Progettazione di uno strumento per la reingegnerizzazione di applicazioni legacy
 
Tesi1
Tesi1Tesi1
Tesi1
 
Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011Blomming Lean Startup @ Better Software 2011
Blomming Lean Startup @ Better Software 2011
 
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...
Emerasoft Day 2012 - TRS "Uso del metodo Cosmic e di Polarion per la gestione...
 
Node.js – Convincing the boss
Node.js – Convincing the bossNode.js – Convincing the boss
Node.js – Convincing the boss
 
Bdd
BddBdd
Bdd
 
ORM - Introduzione
ORM - IntroduzioneORM - Introduzione
ORM - Introduzione
 
Object Oriented Programming
Object Oriented ProgrammingObject Oriented Programming
Object Oriented Programming
 
Owasp parte1-rel1.1
Owasp parte1-rel1.1Owasp parte1-rel1.1
Owasp parte1-rel1.1
 
Sviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con GrailsSviluppo Rapido Di Applicazioni Con Grails
Sviluppo Rapido Di Applicazioni Con Grails
 
Pycon
PyconPycon
Pycon
 

More from Fabio Palomba

Does Refactoring of Test Smells Induce Fixing Flaky Tests?
Does Refactoring of Test Smells Induce Fixing Flaky Tests?Does Refactoring of Test Smells Induce Fixing Flaky Tests?
Does Refactoring of Test Smells Induce Fixing Flaky Tests?Fabio Palomba
 
Social Debt Analytics for Improving the Management of Software Evolution Tasks
Social Debt Analytics for Improving the Management of Software Evolution TasksSocial Debt Analytics for Improving the Management of Software Evolution Tasks
Social Debt Analytics for Improving the Management of Software Evolution TasksFabio Palomba
 
A Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionA Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionFabio Palomba
 
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...Fabio Palomba
 
When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadFabio Palomba
 
Textual Analysis for Code Smell Detection
Textual Analysis for Code Smell DetectionTextual Analysis for Code Smell Detection
Textual Analysis for Code Smell DetectionFabio Palomba
 

More from Fabio Palomba (7)

Does Refactoring of Test Smells Induce Fixing Flaky Tests?
Does Refactoring of Test Smells Induce Fixing Flaky Tests?Does Refactoring of Test Smells Induce Fixing Flaky Tests?
Does Refactoring of Test Smells Induce Fixing Flaky Tests?
 
Social Debt Analytics for Improving the Management of Software Evolution Tasks
Social Debt Analytics for Improving the Management of Software Evolution TasksSocial Debt Analytics for Improving the Management of Software Evolution Tasks
Social Debt Analytics for Improving the Management of Software Evolution Tasks
 
A Textual-based Technique for Smell Detection
A Textual-based Technique for Smell DetectionA Textual-based Technique for Smell Detection
A Textual-based Technique for Smell Detection
 
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...
On the Diffusion of Test Smells in Automatically Generated Test Code: An Empi...
 
When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
Textual Analysis for Code Smell Detection
Textual Analysis for Code Smell DetectionTextual Analysis for Code Smell Detection
Textual Analysis for Code Smell Detection
 
People management
People managementPeople management
People management
 

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
  • 16. altri fattori tecnici influenzano le difficoltà Manutenzione del software
  • 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...
  • 36.
  • 37. BLO B
  • 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
  • 45. Bavota et al. ASE 2010
  • 46. Chiusura transitiva della matrice method-by-method Bavota et al. ASE 2010
  • 47. Chiusura transitiva della matrice method-by-method Output: Catene di metodi fortemente correlate Bavota et al. ASE 2010
  • 48. Passo 1: Calcolo della somiglianza strutturale m1 m2 m3 m1 ci,j m2 m3 VCM: Variable-based Cohesion between Methods Costruzione della matrice Method-by-Method (1)
  • 49. Passo 2: Calcolo della somiglianza strutturale m1 m2 m3 m1 ci,j m2 m3 CCM: Call-based Cohesion between Methods Costruzione della matrice Method-by-Method (2)
  • 50. Passo 3: Calcolo della somiglianza semantica m1 m2 m3 m1 ci,j m2 m3 CSM: Conceptual Similarity between Methods Costruzione della matrice Method-by-Method (3)
  • 51. Passo 4: La matrice Method-by-Method m1 m2 m3 m1 wvcm* m2 VCM m3 m1 m2 m3 m1 m2 m3 m1 m1 ci,j wccm* m2 CCM m2 m3 m3 m1 m2 m3 m1 wcsm* m2 CSM m3 *
  • 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
  • 59. Identificazione automatica di Blob Automated Refactoring in Eclipse
  • 60. Identificazione automatica di Blob Analisi dei Blob Automated Refactoring in Eclipse
  • 61. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 62. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 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
  • 65. Conceptual Cohesion of Classes Definita Message Passing Coupling Data la classe C,
  • 66. Passo 2: Estrazione degli outliers Check Quality
  • 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
  • 70. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 71. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 72. Passo 3: Analisi della classe identificata Topic Map Analyzer
  • 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
  • 76. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 77. Identificazione automatica di Blob Analisi dei Blob Extract Class Refactoring Automated Refactoring in Eclipse
  • 78. A.R.I.ES. Extract Class Refactoring Extract Class Refactoring
  • 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
  • 81. A.R.I.ES. Extract Class Refactoring Extract Class Refactoring
  • 82. A.R.I.ES. Extract Class Refactoring Preview della qualità raggiunta con l’estrazione Extract Class Refactoring
  • 84. Bavota et al. ASE 2010 Conclusioni
  • 85. Nessun tool che implementa il metodo Bavota et al. ASE 2010 Conclusioni
  • 86. Nessun tool che implementa il metodo Nessun metodo di identificazione di Blob Bavota et al. ASE 2010 Conclusioni
  • 87. Bavota et al. Palomba et al. ASE 2010 ICSE 2012 (in revision) Conclusioni
  • 88. Class C1 Class C2 Move Method Refactoring methodA() ... methodM() methodN() ... Package P2 Package P1 Move Class Refactoring classA() classW() ... ... classM() classN() Sviluppi futuri
  • 89. Class C1 Class C2 Move Method Refactoring methodA() ... methodM() methodN() ... Package P2 Package P1 Move Class Refactoring classA() classW() ... ... classM() classN() Sviluppi futuri
  • 90. Class C1 Class C2 Move Method Refactoring methodA() ... methodM() methodN() ... Package P2 Package P1 Move Class Refactoring classA() classW() ... ... classM() classN() Sviluppi futuri
  • 91. Class C1 Class C2 Move Method Refactoring methodA() ... methodM() methodN() ... Package P2 Package P1 Move Class Refactoring classA() classW() ... ... classM() classN() Sviluppi futuri
  • 92. Grazie! Questions and/or comments Fabio Palomba 134553 fabio.palomba.89@gmail.com