SlideShare a Scribd company logo
1 of 33
Download to read offline
`
       Universita degli studi di Milano Bicocca
                 Facolt` di Scienze Matematiche Fisiche e Naturali
                       a

                      Corso di Laurea in Informatica




                                Understand your code

                                       Presentazione di
M. Bonini, L. La Torre, L. Mariot, L. Poto, M.Previtali, A. Ranchetti, D. Ranchetti, M. Susani



                                Anno Accademico 2010/2011




                             Scrum team 2         Understand your code
Introduzione
  Understand ` un ambiente commerciale multi-piattaforma e
              e
  multi-linguaggio sviluppato da SciTools che ha lo scopo di aiutare
  l’utente durante le fasi di reverse engineering. Permette di:
    1   calcolare metriche
    2 esplorare viste che rappresentano diverse caratteristiche del
      codice
  Supporta:
               Ada
                                                           Jovial
               C++
                                                           Delphi/Pascal
               C#
                                                           PL/M
               FORTRAN
                                                           VHDL
               Java




                             Scrum team 2   Understand your code
Funzionalit`
           a

  Tra le molte funzionalit` di Understand ` possibile effettuare
                           a               e
  l’analisi di molte metriche. Le metriche pi` significative sono:
                                             u
      CountLineCode : Linee di codice
      Cyclomatic : Numero ciclomatico (Edge - Nodi +
      Componenti Connesse)
      MaxNesting : Massimo livello di annidamento per le strutture
      di controllo
      PercentLackOfCohesion : Valore tra 0 e 100, un valore basso
      indica una alta coesione tra classi e metodi
      SumCyclomatic : Somma delle complessit` ciclomatiche di
                                            a
      funzioni annidate
  Una volta selezionato un elemento nel grafo ad albero all’interno
  del Project Metrics Browser, ` possibile esportare i valori ottenuti
                               e
  tramite Understand in formato CSV o HTML.

                          Scrum team 2   Understand your code
Il software analizzato



  Il software analizzato ` Gantt Project v. 1.11.1. Gantt ` una
                         e                                  e
  applicazione desktop per la gestione di progetto e
  dell’organizzazione del lavoro. Esso ` scritto in Java ed ` composto
                                       e                    e
  da:
      549 classi
      318 files
      29211 linee di codice
  Questi dati sono stati ottenuti tramite i report di cui parleremo in
  seguito.




                         Scrum team 2   Understand your code
Metriche


            AvgCyclomatic    :       1.73
    AvgCyclomaticModified    :       1.70                CountLineCodeDecl       :     10048.00
      AvgCyclomaticStrict    :       1.83                 CountLineCodeExe       :     11205.00
             AvgEssential    :       1.09                 CountLineComment       :      6822.00
                   AvgLine   :     123.15                         CountPath      :   8083364.00
             AvgLineBlank    :      19.81                    CountSemicolon      :     15605.00
              AvgLineCode    :      82.65                         CountStmt      :     20017.00
           AvgLineComment    :      21.59                     CountStmtDecl      :      9670.00
           CountDeclClass    :     547.00                      CountStmtExe      :     10347.00
     CountDeclClassMethod    :      64.00                        Cyclomatic      :      4693.00
   CountDeclClassVariable    :     279.00               CyclomaticModified       :      4619.00
            CountDeclFile    :     316.00                 CyclomaticStrict       :      4967.00
        CountDeclFunction    :    2713.00                         Essential      :      2948.00
  CountDeclInstanceMethod    :    2338.00                     MaxCyclomatic      :       106.00
CountDeclInstanceVariable    :    1349.00            MaxCyclomaticModified       :       106.00
          CountDeclMethod    :    2402.00              MaxCyclomaticStrict       :       131.00
       CountDeclMethodAll    :    3201.00               MaxInheritanceTree       :         3.00
   CountDeclMethodDefault    :     117.00                        Max N est ing   :         5.00
   CountDeclMethodPrivate    :     277.00               RatioCommentToCode       :         0.26
 CountDeclMethodProtected    :     138.00                     SumCyclomatic      :      4693.00
    CountDeclMethodPublic    :    1870.00            SumCyclomaticModified       :      4619.00
                 CountLine   :   38916.00              SumCyclomaticStrict       :      4967.00
           CountLineBlank    :    6261.00                      SumEssential      :      2948.00
            CountLineCode    :   26116.00




                                   Scrum team 2   Understand your code
Metric Charts



  In aggiunta alla semplice visualizzazione testuale ` possibile
                                                     e
  ottenere una rappresentazione grafica delle metriche. La loro
  generazione ` molto semplice, basta utilizzare i comandi presenti
              e
  sotto il menu Metrics. In particolare ` possibile visualizzare:
                                        e
    1   Code Volume Distribution
    2   File Volume
    3   Avarage Complexity
    4   Sum Complexity
    5   Metric TreeMap




                         Scrum team 2   Understand your code
Code Volume Distribution
  Questo grafico rappresenta la distribuzione delle linee di codice nel progetto in termini di:
          CountLineBlank: linee di codice vuote.
          CountLineCodeDecl: numero di linee contenente codice dichiarativo.
          CountLineCodeExe: numero di linee contenente codice sorgente eseguibile.
          CountLineComment: numero di linee contenente commenti.




  Dal grafico osserviamo che la ripartizione ` abbastanza uniforme, le linee vuote sono in numero minore, le linee di
                                            e

  codice eseguibile sono le pi` diffuse.
                              u

                                          Scrum team 2          Understand your code
File Volume


  Indica semplicemente da quanti files ` composto il progetto.
                                      e




                        Scrum team 2   Understand your code
Avarage Complexity
  Vengono rappresentate mediante un istogramma alcune misure di complessit`.
                                                                          a




          AvgCyclomatic: complessit` ciclomatica media di tutti i metodi e di tutte le funzioni innestati.
                                     a
          MaxCyclomatic: complessit` ciclomatica massima di tutti i metodi e di tutte le funzioni innestati.
                                      a
          MaxNesting: livello di innestamento massimo di strutture di controllo in una funzione.

  Notiamo che c’` un forte squilibrio tra la complessit` ciclomatica massima e quella media e questo indica che ci
                e                                      a

  sono classi che sono molto pi` complicate della media e sulle quali e quindi consigliabile operare modifiche atte a
                               u

  migliorare il codice.

                                          Scrum team 2         Understand your code
Sum Complexity




     CountPath: Numero di percorsi unici attraverso un blocco di codice,
     senza contare le uscite anomale o goto.
     SumCyclomatic: somma della complessit` ciclomatica di tutte le funzioni
                                             a
     innestate.
     SumEssential: somma della complessit` essenziale di tutte le funzioni
                                           a
     innestate.
                          Scrum team 2   Understand your code
Metric TreeMap
  Questo strumento fornisce una vista particolarmente interessante che ci
  permette di visualizzare una determinata caratteristica del codice che stiamo
  analizzando in funzione di una seconda caratteristica. Il menu per la
  generazione di tale grafico ci fornisce le seguenti possibilit`:
                                                               a




                             Scrum team 2   Understand your code
Metric TreeMap




  In questo esempio sono stati scelti come parametri il numero di
  linee per classe e la massima complessit` ciclomatica. Notiamo che
                                            a
  nella maggior parte dei casi le classi pi` complesse coincidono con
                                           u
  le classi di maggiori dimensioni. Grazie all’editor integrato `
                                                                e
  possibile mettere subito mano al codice.
                         Scrum team 2   Understand your code
Project Overview Charts



  Tramite la funzione di Project Overview Charts ` possibile avere
                                                   e
  una panoramica generale sulle principali caratteristiche dell’intero
  progetto analizzato. Per poter utilizzare questa funzione, dopo
  aver aperto il progetto, bisogner` andare nel men` Project e
                                   a                 u
  selezionare Project Overview Charts. Tipi di output:
      grafici a torta
      istogrammi
      tabelle




                          Scrum team 2   Understand your code
Code breakdown

  Con questa analisi ` possibile capire,tramite un diagramma a torta,
                      e
  la percentuale e il numero di linee di codice, linee di commento e
  linee vuote.




                         Scrum team 2   Understand your code
Function breakdown

  Questo strumento mostra, tramite un diagramma a torta, la
  percentuale e il numero di funzioni di tipo Public, Private,
  Protected e Default.




                         Scrum team 2   Understand your code
Class breakdown
  Con questa analisi ` possibile capire, tramite un diagramma a
                      e
  torta, la percentuale e il numero di classi di tipo Public, Private,
  Protected e Default.




  Il numero di classi con visibilit` Public sono in numero nettamente
                                   a
  maggiore alle altre con diversa visibilit`.
                                           a
                          Scrum team 2   Understand your code
Most complex functions
  `
  E possibile identificare le cinque funzioni pi` complesse del
                                               u
  progetto, permettendo quindi al designer, se ` possibile, di spartire
                                                 e
  le responsabilit` tra pi` funzioni, aumentando la mantenibilit` e la
                  a       u                                      a
  semplicit` del progetto. Per complessit` si intende il numero di
           a                              a
  cammini linearmente indipendenti attraverso il grafo di controllo di
  flusso.




                         Scrum team 2   Understand your code
Most complex files
  Vengono mostrati i cinque files pi` complessi, identificando quindi
                                      u
  quei files che potrebbero essere scomposti per suddividere meglio le
  responsabilit` e ridurre la complessit`. Per complessit` si intende la
                a                       a                 a
  media del numero di cammini linearmente indipendenti attraverso
  il grafo di controllo di flusso per ogni metodo all’interno del File.




                          Scrum team 2   Understand your code
Reports

  Understand genera una grande variet` di reports. I reports
                                     a
  rientrano in queste categorie:
      Cross-Reference Reports mostrano informazioni simili a quelle
      nel Browser Info, tranne che sono indicati tutte le entit`
                                                               a
      insieme in ordine alfabetico.
      Structure Reports mostrano la struttura del programma
      analizzato.
      Quality Reports mostrano aree in cui il codice potrebbe dover
      essere esaminato.
      Metric Reports indicano le metriche di base come il numero di
      righe di codice e commenti.
  `
  E possibile creare i reports sia in formato HTML sia in formato
  testuale. La generazione dei reports ` molto semplice; ` sufficiente
                                         e               e
  andare nel menu Reports e poi cliccare Generate Reports.

                        Scrum team 2   Understand your code
Reports




          Scrum team 2   Understand your code
I grafi

  Per creare un grafo relativo ad una classe/package bisogna:
    1    Selezionare il nodo architetturale d’interesse con il tasto
         destro del mouse
    2    Andare su Graphical Views e selezionare il grafo desiderato
         (Depends on, Depended on By, Butterfly-Dependency Graph,
         Internal Dependencies)




                            Scrum team 2   Understand your code
Caratteristiche comuni ai grafi

  I grafi di dipendenza architetturale sono grafi orientati e pesati. I
  vertici del grafo si dividono in due tipologie:
       Classi, rappresentati da riquadri bianchi;
       Package/cartelle rappresentati da riquadri colorati; facendo
       doppio clic su questi ultimi, ` possibile espandere la
                                     e
       visualizzazione del grafo alle classi/sottocartelle contenute al
       loro interno.
  Gli archi orientati possono essere invece di due colori:
       gli archi blu indicano una relazione di dipendenza semplice
       gli archi rossi una relazione di mutua dipendenza
  I pesi degli archi, infine, vengono determinati contando il numero
  di chiamate alla classe (o package/cartella a cui appartiene) di
  destinazione dell’arco.


                          Scrum team 2   Understand your code
Dependency graph




  Un grafo delle dipendenze mostra come le varie classi presenti nel
  progetto interagiscono tra loro. Attraverso un grafo delle
  dipendenze ` quindi possibile osservare quali classi o cartelle
              e
  vengono maggiormente utilizzate e richiamate o quali nodi fanno
  maggior uso di altre classi o cartelle all’interno del codice.




                         Scrum team 2   Understand your code
Depends on

  Questo tipo di grafo ` disponibile per classi e package. Mostra le
                        e
  classi e i package da cui dipende l’elemento sul quale ` stato
                                                         e
  generato il grafo.




                         Scrum team 2   Understand your code
Depended On By
  Questo tipo di grafo ` disponibile per classi e package. Mostra le
                        e
  classi e i package che dipendono dall’elemento sul quale ` stato
                                                           e
  generato il grafo.




                         Scrum team 2   Understand your code
Butterfly-Dependency

  Questo tipo di grafo ` disponibile solo per package. Esso pu`
                       e                                       o
  essere considerato come l’unione dei grafi Depends on e Depended
  on By generati su un elemento; mostra quali classi/package
  dipendono dall’elemento sul quale ` stato generato il grafo e le
                                     e
  classi package da cui l’elemento dipende.




                        Scrum team 2   Understand your code
Internal dependencies




  Questo tipo di grafo ` disponibile solo per package. Mostra le
                        e
  dipendenze delle classi all’interno dell’elemento (package) su cui `
                                                                     e
  stato generato il grafo.




                         Scrum team 2   Understand your code
UML class diagram
  Attraverso questo tipo di digramma ` possibile comprendere come si
                                         e
  comportano le classi all’interno del software. Ogni freccia indica che la
  classe di partenza ` figlia della classe di destinazione.
                     e




  Qui mostriamo solo un dettaglio del diagramma delle classi perch´ il
                                                                  e
  diagramma completo contiene 549 classi e la rappresentazione completa
  del diagramma ` difficilmente fruibile.
                e
                            Scrum team 2   Understand your code
Graph architecture
  Attraverso il grafo dell’architettura ` possibile comprendere la
                                        e
  suddivisione e la ripartizione, in termini di file, del progetto. Questo pu`
                                                                            o
  servire a comprendere i macro-blocchi che costituiscono il sistema.
  Ellissi
  Rappresentano delle cartelle che a loro volta contengono altre
  sottocartelle. Questi sono nodi interni (non possono essere foglie)
  dell’albero generato con il grafo dell’architettura.

  Riquadri
  Rappresentano cartelle che al loro interno hanno solo file contenente
  codice, ovvero non contengono altre sottocartelle. Questi sono sempre i
  nodi foglia dell’albero generato attraverso il grafo dell’architettura.

  Frecce
  Le frecce che collegano due cartelle, servono a rappresentare la gerarchia.
  In particolare una freccia uscente indica che la cartella di partenza
  contiene al suo interno la cartella di destinazione.
                            Scrum team 2   Understand your code
Graph architecture




                     Scrum team 2   Understand your code
Code Check




  Un’ulteriore funzionalit` offerta dal tool consiste in una breve
                          a
  analisi del codice. Essa permette di trovare alcuni difetti di
  programmazione. Permette di rilevare:
      errori di naming di variabili
      funzioni troppo lunghe
      funzioni troppo complesse
      codice non raggiungibile




                         Scrum team 2   Understand your code
Code Check




  `
  E possibile esplorare i risultati per capire dove sono effettivamente
  collocati gli errori rilevati.
                         Scrum team 2   Understand your code
Pregi e difetti

  Pregi:
      facile da installare e da
      utilizzare
                                          Difetti:
      ha un editor per il codice
                                                 alcune viste, come il
      integrato
                                                 diagramma delle classi,
      ` compatibile con molti
      e                                          sono di difficile
      linguaggi di                               consultazione
      programmazione
                                                 problemi ad esportare
      ha molti tipi di viste che                 immagini in caso di viste
      aiutano a comprendere                      molto complesse
      velocemente le
      caratteristiche del
      software


                          Scrum team 2   Understand your code

More Related Content

Viewers also liked

Supervisor Safety Training
Supervisor Safety TrainingSupervisor Safety Training
Supervisor Safety Training
Steve Wise
 

Viewers also liked (6)

Guy Podjarmy - Secure Node Code
Guy Podjarmy - Secure Node CodeGuy Podjarmy - Secure Node Code
Guy Podjarmy - Secure Node Code
 
How to create a sci fi novel slideshare
How to create a sci fi novel slideshareHow to create a sci fi novel slideshare
How to create a sci fi novel slideshare
 
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft..."Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
 
Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...
Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...
Protecting JavaScript source code using obfuscation - OWASP Europe Tour 2013 ...
 
Supervisor Safety Training
Supervisor Safety TrainingSupervisor Safety Training
Supervisor Safety Training
 
Ppt patient safety final
Ppt patient safety finalPpt patient safety final
Ppt patient safety final
 

Similar to Presentazione understand

Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Donato Clun
 
Monitoraggio di applicazioni software mediante modelli di Markov - slides
Monitoraggio di applicazioni software mediante modelli di Markov - slidesMonitoraggio di applicazioni software mediante modelli di Markov - slides
Monitoraggio di applicazioni software mediante modelli di Markov - slides
rkjp
 

Similar to Presentazione understand (20)

Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
Migrazione dei meccanismi di workflow di un sistema informativo assicurativo ...
 
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
Uno studio sull'efficacia di checker automatici per la modernizzazione di cod...
 
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
Presentazione: uno studio sull'efficacia di checker automatici per la moderni...
 
Thesis Amicucci Slides IT
Thesis Amicucci Slides ITThesis Amicucci Slides IT
Thesis Amicucci Slides IT
 
Concorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca DatiConcorso Informatici C3 INPS 2007 - Banca Dati
Concorso Informatici C3 INPS 2007 - Banca Dati
 
Introduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio bertiIntroduzione al framework dl4j Antonio berti
Introduzione al framework dl4j Antonio berti
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
PALUZZANO TESI
PALUZZANO TESIPALUZZANO TESI
PALUZZANO TESI
 
La scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptxLa scomposizione in sotto programmi in C++.pptx
La scomposizione in sotto programmi in C++.pptx
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
Analisi e realizzazione di uno strumento per la verifica di conformità su sis...
 
La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++La metodologia Top - Down - applicazione al C++
La metodologia Top - Down - applicazione al C++
 
High Level Synthesis Using Esterel
High Level Synthesis Using EsterelHigh Level Synthesis Using Esterel
High Level Synthesis Using Esterel
 
Monitoraggio di applicazioni software mediante modelli di Markov - slides
Monitoraggio di applicazioni software mediante modelli di Markov - slidesMonitoraggio di applicazioni software mediante modelli di Markov - slides
Monitoraggio di applicazioni software mediante modelli di Markov - slides
 
Relazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: PercolazioneRelazione Modellazione e Simulazioni Numeriche: Percolazione
Relazione Modellazione e Simulazioni Numeriche: Percolazione
 
Hadoop SAR
Hadoop SARHadoop SAR
Hadoop SAR
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Hadoop [software architecture recovery]
Hadoop [software architecture recovery]Hadoop [software architecture recovery]
Hadoop [software architecture recovery]
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 

Presentazione understand

  • 1. ` Universita degli studi di Milano Bicocca Facolt` di Scienze Matematiche Fisiche e Naturali a Corso di Laurea in Informatica Understand your code Presentazione di M. Bonini, L. La Torre, L. Mariot, L. Poto, M.Previtali, A. Ranchetti, D. Ranchetti, M. Susani Anno Accademico 2010/2011 Scrum team 2 Understand your code
  • 2. Introduzione Understand ` un ambiente commerciale multi-piattaforma e e multi-linguaggio sviluppato da SciTools che ha lo scopo di aiutare l’utente durante le fasi di reverse engineering. Permette di: 1 calcolare metriche 2 esplorare viste che rappresentano diverse caratteristiche del codice Supporta: Ada Jovial C++ Delphi/Pascal C# PL/M FORTRAN VHDL Java Scrum team 2 Understand your code
  • 3. Funzionalit` a Tra le molte funzionalit` di Understand ` possibile effettuare a e l’analisi di molte metriche. Le metriche pi` significative sono: u CountLineCode : Linee di codice Cyclomatic : Numero ciclomatico (Edge - Nodi + Componenti Connesse) MaxNesting : Massimo livello di annidamento per le strutture di controllo PercentLackOfCohesion : Valore tra 0 e 100, un valore basso indica una alta coesione tra classi e metodi SumCyclomatic : Somma delle complessit` ciclomatiche di a funzioni annidate Una volta selezionato un elemento nel grafo ad albero all’interno del Project Metrics Browser, ` possibile esportare i valori ottenuti e tramite Understand in formato CSV o HTML. Scrum team 2 Understand your code
  • 4. Il software analizzato Il software analizzato ` Gantt Project v. 1.11.1. Gantt ` una e e applicazione desktop per la gestione di progetto e dell’organizzazione del lavoro. Esso ` scritto in Java ed ` composto e e da: 549 classi 318 files 29211 linee di codice Questi dati sono stati ottenuti tramite i report di cui parleremo in seguito. Scrum team 2 Understand your code
  • 5. Metriche AvgCyclomatic : 1.73 AvgCyclomaticModified : 1.70 CountLineCodeDecl : 10048.00 AvgCyclomaticStrict : 1.83 CountLineCodeExe : 11205.00 AvgEssential : 1.09 CountLineComment : 6822.00 AvgLine : 123.15 CountPath : 8083364.00 AvgLineBlank : 19.81 CountSemicolon : 15605.00 AvgLineCode : 82.65 CountStmt : 20017.00 AvgLineComment : 21.59 CountStmtDecl : 9670.00 CountDeclClass : 547.00 CountStmtExe : 10347.00 CountDeclClassMethod : 64.00 Cyclomatic : 4693.00 CountDeclClassVariable : 279.00 CyclomaticModified : 4619.00 CountDeclFile : 316.00 CyclomaticStrict : 4967.00 CountDeclFunction : 2713.00 Essential : 2948.00 CountDeclInstanceMethod : 2338.00 MaxCyclomatic : 106.00 CountDeclInstanceVariable : 1349.00 MaxCyclomaticModified : 106.00 CountDeclMethod : 2402.00 MaxCyclomaticStrict : 131.00 CountDeclMethodAll : 3201.00 MaxInheritanceTree : 3.00 CountDeclMethodDefault : 117.00 Max N est ing : 5.00 CountDeclMethodPrivate : 277.00 RatioCommentToCode : 0.26 CountDeclMethodProtected : 138.00 SumCyclomatic : 4693.00 CountDeclMethodPublic : 1870.00 SumCyclomaticModified : 4619.00 CountLine : 38916.00 SumCyclomaticStrict : 4967.00 CountLineBlank : 6261.00 SumEssential : 2948.00 CountLineCode : 26116.00 Scrum team 2 Understand your code
  • 6. Metric Charts In aggiunta alla semplice visualizzazione testuale ` possibile e ottenere una rappresentazione grafica delle metriche. La loro generazione ` molto semplice, basta utilizzare i comandi presenti e sotto il menu Metrics. In particolare ` possibile visualizzare: e 1 Code Volume Distribution 2 File Volume 3 Avarage Complexity 4 Sum Complexity 5 Metric TreeMap Scrum team 2 Understand your code
  • 7. Code Volume Distribution Questo grafico rappresenta la distribuzione delle linee di codice nel progetto in termini di: CountLineBlank: linee di codice vuote. CountLineCodeDecl: numero di linee contenente codice dichiarativo. CountLineCodeExe: numero di linee contenente codice sorgente eseguibile. CountLineComment: numero di linee contenente commenti. Dal grafico osserviamo che la ripartizione ` abbastanza uniforme, le linee vuote sono in numero minore, le linee di e codice eseguibile sono le pi` diffuse. u Scrum team 2 Understand your code
  • 8. File Volume Indica semplicemente da quanti files ` composto il progetto. e Scrum team 2 Understand your code
  • 9. Avarage Complexity Vengono rappresentate mediante un istogramma alcune misure di complessit`. a AvgCyclomatic: complessit` ciclomatica media di tutti i metodi e di tutte le funzioni innestati. a MaxCyclomatic: complessit` ciclomatica massima di tutti i metodi e di tutte le funzioni innestati. a MaxNesting: livello di innestamento massimo di strutture di controllo in una funzione. Notiamo che c’` un forte squilibrio tra la complessit` ciclomatica massima e quella media e questo indica che ci e a sono classi che sono molto pi` complicate della media e sulle quali e quindi consigliabile operare modifiche atte a u migliorare il codice. Scrum team 2 Understand your code
  • 10. Sum Complexity CountPath: Numero di percorsi unici attraverso un blocco di codice, senza contare le uscite anomale o goto. SumCyclomatic: somma della complessit` ciclomatica di tutte le funzioni a innestate. SumEssential: somma della complessit` essenziale di tutte le funzioni a innestate. Scrum team 2 Understand your code
  • 11. Metric TreeMap Questo strumento fornisce una vista particolarmente interessante che ci permette di visualizzare una determinata caratteristica del codice che stiamo analizzando in funzione di una seconda caratteristica. Il menu per la generazione di tale grafico ci fornisce le seguenti possibilit`: a Scrum team 2 Understand your code
  • 12. Metric TreeMap In questo esempio sono stati scelti come parametri il numero di linee per classe e la massima complessit` ciclomatica. Notiamo che a nella maggior parte dei casi le classi pi` complesse coincidono con u le classi di maggiori dimensioni. Grazie all’editor integrato ` e possibile mettere subito mano al codice. Scrum team 2 Understand your code
  • 13. Project Overview Charts Tramite la funzione di Project Overview Charts ` possibile avere e una panoramica generale sulle principali caratteristiche dell’intero progetto analizzato. Per poter utilizzare questa funzione, dopo aver aperto il progetto, bisogner` andare nel men` Project e a u selezionare Project Overview Charts. Tipi di output: grafici a torta istogrammi tabelle Scrum team 2 Understand your code
  • 14. Code breakdown Con questa analisi ` possibile capire,tramite un diagramma a torta, e la percentuale e il numero di linee di codice, linee di commento e linee vuote. Scrum team 2 Understand your code
  • 15. Function breakdown Questo strumento mostra, tramite un diagramma a torta, la percentuale e il numero di funzioni di tipo Public, Private, Protected e Default. Scrum team 2 Understand your code
  • 16. Class breakdown Con questa analisi ` possibile capire, tramite un diagramma a e torta, la percentuale e il numero di classi di tipo Public, Private, Protected e Default. Il numero di classi con visibilit` Public sono in numero nettamente a maggiore alle altre con diversa visibilit`. a Scrum team 2 Understand your code
  • 17. Most complex functions ` E possibile identificare le cinque funzioni pi` complesse del u progetto, permettendo quindi al designer, se ` possibile, di spartire e le responsabilit` tra pi` funzioni, aumentando la mantenibilit` e la a u a semplicit` del progetto. Per complessit` si intende il numero di a a cammini linearmente indipendenti attraverso il grafo di controllo di flusso. Scrum team 2 Understand your code
  • 18. Most complex files Vengono mostrati i cinque files pi` complessi, identificando quindi u quei files che potrebbero essere scomposti per suddividere meglio le responsabilit` e ridurre la complessit`. Per complessit` si intende la a a a media del numero di cammini linearmente indipendenti attraverso il grafo di controllo di flusso per ogni metodo all’interno del File. Scrum team 2 Understand your code
  • 19. Reports Understand genera una grande variet` di reports. I reports a rientrano in queste categorie: Cross-Reference Reports mostrano informazioni simili a quelle nel Browser Info, tranne che sono indicati tutte le entit` a insieme in ordine alfabetico. Structure Reports mostrano la struttura del programma analizzato. Quality Reports mostrano aree in cui il codice potrebbe dover essere esaminato. Metric Reports indicano le metriche di base come il numero di righe di codice e commenti. ` E possibile creare i reports sia in formato HTML sia in formato testuale. La generazione dei reports ` molto semplice; ` sufficiente e e andare nel menu Reports e poi cliccare Generate Reports. Scrum team 2 Understand your code
  • 20. Reports Scrum team 2 Understand your code
  • 21. I grafi Per creare un grafo relativo ad una classe/package bisogna: 1 Selezionare il nodo architetturale d’interesse con il tasto destro del mouse 2 Andare su Graphical Views e selezionare il grafo desiderato (Depends on, Depended on By, Butterfly-Dependency Graph, Internal Dependencies) Scrum team 2 Understand your code
  • 22. Caratteristiche comuni ai grafi I grafi di dipendenza architetturale sono grafi orientati e pesati. I vertici del grafo si dividono in due tipologie: Classi, rappresentati da riquadri bianchi; Package/cartelle rappresentati da riquadri colorati; facendo doppio clic su questi ultimi, ` possibile espandere la e visualizzazione del grafo alle classi/sottocartelle contenute al loro interno. Gli archi orientati possono essere invece di due colori: gli archi blu indicano una relazione di dipendenza semplice gli archi rossi una relazione di mutua dipendenza I pesi degli archi, infine, vengono determinati contando il numero di chiamate alla classe (o package/cartella a cui appartiene) di destinazione dell’arco. Scrum team 2 Understand your code
  • 23. Dependency graph Un grafo delle dipendenze mostra come le varie classi presenti nel progetto interagiscono tra loro. Attraverso un grafo delle dipendenze ` quindi possibile osservare quali classi o cartelle e vengono maggiormente utilizzate e richiamate o quali nodi fanno maggior uso di altre classi o cartelle all’interno del codice. Scrum team 2 Understand your code
  • 24. Depends on Questo tipo di grafo ` disponibile per classi e package. Mostra le e classi e i package da cui dipende l’elemento sul quale ` stato e generato il grafo. Scrum team 2 Understand your code
  • 25. Depended On By Questo tipo di grafo ` disponibile per classi e package. Mostra le e classi e i package che dipendono dall’elemento sul quale ` stato e generato il grafo. Scrum team 2 Understand your code
  • 26. Butterfly-Dependency Questo tipo di grafo ` disponibile solo per package. Esso pu` e o essere considerato come l’unione dei grafi Depends on e Depended on By generati su un elemento; mostra quali classi/package dipendono dall’elemento sul quale ` stato generato il grafo e le e classi package da cui l’elemento dipende. Scrum team 2 Understand your code
  • 27. Internal dependencies Questo tipo di grafo ` disponibile solo per package. Mostra le e dipendenze delle classi all’interno dell’elemento (package) su cui ` e stato generato il grafo. Scrum team 2 Understand your code
  • 28. UML class diagram Attraverso questo tipo di digramma ` possibile comprendere come si e comportano le classi all’interno del software. Ogni freccia indica che la classe di partenza ` figlia della classe di destinazione. e Qui mostriamo solo un dettaglio del diagramma delle classi perch´ il e diagramma completo contiene 549 classi e la rappresentazione completa del diagramma ` difficilmente fruibile. e Scrum team 2 Understand your code
  • 29. Graph architecture Attraverso il grafo dell’architettura ` possibile comprendere la e suddivisione e la ripartizione, in termini di file, del progetto. Questo pu` o servire a comprendere i macro-blocchi che costituiscono il sistema. Ellissi Rappresentano delle cartelle che a loro volta contengono altre sottocartelle. Questi sono nodi interni (non possono essere foglie) dell’albero generato con il grafo dell’architettura. Riquadri Rappresentano cartelle che al loro interno hanno solo file contenente codice, ovvero non contengono altre sottocartelle. Questi sono sempre i nodi foglia dell’albero generato attraverso il grafo dell’architettura. Frecce Le frecce che collegano due cartelle, servono a rappresentare la gerarchia. In particolare una freccia uscente indica che la cartella di partenza contiene al suo interno la cartella di destinazione. Scrum team 2 Understand your code
  • 30. Graph architecture Scrum team 2 Understand your code
  • 31. Code Check Un’ulteriore funzionalit` offerta dal tool consiste in una breve a analisi del codice. Essa permette di trovare alcuni difetti di programmazione. Permette di rilevare: errori di naming di variabili funzioni troppo lunghe funzioni troppo complesse codice non raggiungibile Scrum team 2 Understand your code
  • 32. Code Check ` E possibile esplorare i risultati per capire dove sono effettivamente collocati gli errori rilevati. Scrum team 2 Understand your code
  • 33. Pregi e difetti Pregi: facile da installare e da utilizzare Difetti: ha un editor per il codice alcune viste, come il integrato diagramma delle classi, ` compatibile con molti e sono di difficile linguaggi di consultazione programmazione problemi ad esportare ha molti tipi di viste che immagini in caso di viste aiutano a comprendere molto complesse velocemente le caratteristiche del software Scrum team 2 Understand your code