Upload
luigi-la-torre
View
452
Download
1
Embed Size (px)
DESCRIPTION
Descrizione del software Understand e delle sue principali caratteristiche
Citation preview
Universita degli studi di Milano Bicocca
Facolta di Scienze Matematiche Fisiche e Naturali
Corso di Laurea in Informatica
Understand your code
Presentazione diM. 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 e un ambiente commerciale multi-piattaforma emulti-linguaggio sviluppato da SciTools che ha lo scopo di aiutarel’utente durante le fasi di reverse engineering. Permette di:
1 calcolare metriche
2 esplorare viste che rappresentano diverse caratteristiche delcodice
Supporta:Ada
C++
C #
FORTRAN
Java
Jovial
Delphi/Pascal
PL/M
VHDL
Scrum team 2 Understand your code
Funzionalita
Tra le molte funzionalita di Understand e possibile effettuarel’analisi di molte metriche. Le metriche piu significative sono:
CountLineCode : Linee di codice
Cyclomatic : Numero ciclomatico (Edge - Nodi +Componenti Connesse)
MaxNesting : Massimo livello di annidamento per le strutturedi controllo
PercentLackOfCohesion : Valore tra 0 e 100, un valore bassoindica una alta coesione tra classi e metodi
SumCyclomatic : Somma delle complessita ciclomatiche difunzioni annidate
Una volta selezionato un elemento nel grafo ad albero all’internodel Project Metrics Browser, e possibile esportare i valori ottenutitramite Understand in formato CSV o HTML.
Scrum team 2 Understand your code
Il software analizzato
Il software analizzato e Gantt Project v. 1.11.1. Gantt e unaapplicazione desktop per la gestione di progetto edell’organizzazione del lavoro. Esso e scritto in Java ed e compostoda:
549 classi
318 files
29211 linee di codice
Questi dati sono stati ottenuti tramite i report di cui parleremo inseguito.
Scrum team 2 Understand your code
Metriche
AvgCyc lomat ic : 1 . 7 3A v g C y c l o m a t i c M o d i f i e d : 1 . 7 0
A v g C y c l o m a t i c S t r i c t : 1 . 8 3A v g E s s e n t i a l : 1 . 0 9
AvgLine : 123 .15AvgLineBlank : 1 9 . 8 1
AvgLineCode : 8 2 . 6 5AvgLineComment : 2 1 . 5 9C o u n t D e c l C l a s s : 547 .00
CountDec lClassMethod : 6 4 . 0 0C o u n t D e c l C l a s s V a r i a b l e : 279 .00
C o u n t D e c l F i l e : 316 .00C o u n t D e c l F u n c t i o n : 2713.00
CountDec l Ins tanceMethod : 2338.00C o u n t D e c l I n s t a n c e V a r i a b l e : 1349 .00
CountDeclMethod : 2402.00CountDec lMethodAl l : 3201 .00
CountDec lMethodDefau l t : 117 .00CountDec lMethodPr ivate : 277 .00
CountDec lMethodProtected : 138 .00CountDec lMethodPubl ic : 1870.00
CountL ine : 38916.00CountL ineBlank : 6261 .00
CountLineCode : 26116.00
CountLineCodeDec l : 10048.00CountLineCodeExe : 11205.00CountLineComment : 6822 .00
CountPath : 8083364.00CountSemico lon : 15605.00
CountStmt : 20017.00CountStmtDecl : 9670.00
CountStmtExe : 10347.00C y c l o m a t i c : 4693 .00
C y c l o m a t i c M o d i f i e d : 4619.00C y c l o m a t i c S t r i c t : 4967.00
E s s e n t i a l : 2948 .00MaxCyclomatic : 106 .00
MaxCyc lomat icModi f i ed : 106 .00M a x C y c l o m a t i c S t r i c t : 131 .00
M a x I n h e r i t a n c e T r e e : 3 . 0 0MaxNesting : 5 . 0 0
RatioCommentToCode : 0 . 2 6SumCyclomatic : 4693 .00
SumCyc lomat icModi f i ed : 4619 .00S u m C y c l o m a t i c S t r i c t : 4967 .00
S u m E s s e n t i a l : 2948 .00
Scrum team 2 Understand your code
Metric Charts
In aggiunta alla semplice visualizzazione testuale e possibileottenere una rappresentazione grafica delle metriche. La lorogenerazione e molto semplice, basta utilizzare i comandi presentisotto il menu Metrics. In particolare e possibile visualizzare:
1 Code Volume Distribution
2 File Volume
3 Avarage Complexity
4 Sum Complexity
5 Metric TreeMap
Scrum team 2 Understand your code
Code Volume DistributionQuesto 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 e abbastanza uniforme, le linee vuote sono in numero minore, le linee di
codice eseguibile sono le piu diffuse.
Scrum team 2 Understand your code
File Volume
Indica semplicemente da quanti files e composto il progetto.
Scrum team 2 Understand your code
Avarage ComplexityVengono rappresentate mediante un istogramma alcune misure di complessita.
AvgCyclomatic: complessita ciclomatica media di tutti i metodi e di tutte le funzioni innestati.
MaxCyclomatic: complessita ciclomatica massima di tutti i metodi e di tutte le funzioni innestati.
MaxNesting: livello di innestamento massimo di strutture di controllo in una funzione.
Notiamo che c’e un forte squilibrio tra la complessita ciclomatica massima e quella media e questo indica che ci
sono classi che sono molto piu complicate della media e sulle quali e quindi consigliabile operare modifiche atte a
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 complessita ciclomatica di tutte le funzioniinnestate.
SumEssential: somma della complessita essenziale di tutte le funzioniinnestate.
Scrum team 2 Understand your code
Metric TreeMap
Questo strumento fornisce una vista particolarmente interessante che cipermette di visualizzare una determinata caratteristica del codice che stiamoanalizzando in funzione di una seconda caratteristica. Il menu per lagenerazione di tale grafico ci fornisce le seguenti possibilita:
Scrum team 2 Understand your code
Metric TreeMap
In questo esempio sono stati scelti come parametri il numero dilinee per classe e la massima complessita ciclomatica. Notiamo chenella maggior parte dei casi le classi piu complesse coincidono conle classi di maggiori dimensioni. Grazie all’editor integrato epossibile mettere subito mano al codice.
Scrum team 2 Understand your code
Project Overview Charts
Tramite la funzione di Project Overview Charts e possibile avereuna panoramica generale sulle principali caratteristiche dell’interoprogetto analizzato. Per poter utilizzare questa funzione, dopoaver aperto il progetto, bisognera andare nel menu Project eselezionare Project Overview Charts. Tipi di output:
grafici a torta
istogrammi
tabelle
Scrum team 2 Understand your code
Code breakdown
Con questa analisi e possibile capire,tramite un diagramma a torta,la percentuale e il numero di linee di codice, linee di commento elinee vuote.
Scrum team 2 Understand your code
Function breakdown
Questo strumento mostra, tramite un diagramma a torta, lapercentuale e il numero di funzioni di tipo Public, Private,Protected e Default.
Scrum team 2 Understand your code
Class breakdown
Con questa analisi e possibile capire, tramite un diagramma atorta, la percentuale e il numero di classi di tipo Public, Private,Protected e Default.
Il numero di classi con visibilita Public sono in numero nettamentemaggiore alle altre con diversa visibilita.
Scrum team 2 Understand your code
Most complex functions
E possibile identificare le cinque funzioni piu complesse delprogetto, permettendo quindi al designer, se e possibile, di spartirele responsabilita tra piu funzioni, aumentando la mantenibilita e lasemplicita del progetto. Per complessita si intende il numero dicammini linearmente indipendenti attraverso il grafo di controllo diflusso.
Scrum team 2 Understand your code
Most complex files
Vengono mostrati i cinque files piu complessi, identificando quindiquei files che potrebbero essere scomposti per suddividere meglio leresponsabilita e ridurre la complessita. Per complessita si intende lamedia del numero di cammini linearmente indipendenti attraversoil grafo di controllo di flusso per ogni metodo all’interno del File.
Scrum team 2 Understand your code
Reports
Understand genera una grande varieta di reports. I reportsrientrano in queste categorie:
Cross-Reference Reports mostrano informazioni simili a quellenel Browser Info, tranne che sono indicati tutte le entitainsieme in ordine alfabetico.
Structure Reports mostrano la struttura del programmaanalizzato.
Quality Reports mostrano aree in cui il codice potrebbe doveressere esaminato.
Metric Reports indicano le metriche di base come il numero dirighe di codice e commenti.
E possibile creare i reports sia in formato HTML sia in formatotestuale. La generazione dei reports e molto semplice; e sufficienteandare 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 tastodestro 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. Ivertici del grafo si dividono in due tipologie:
Classi, rappresentati da riquadri bianchi;
Package/cartelle rappresentati da riquadri colorati; facendodoppio clic su questi ultimi, e possibile espandere lavisualizzazione del grafo alle classi/sottocartelle contenute alloro 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 numerodi chiamate alla classe (o package/cartella a cui appartiene) didestinazione dell’arco.
Scrum team 2 Understand your code
Dependency graph
Un grafo delle dipendenze mostra come le varie classi presenti nelprogetto interagiscono tra loro. Attraverso un grafo delledipendenze e quindi possibile osservare quali classi o cartellevengono maggiormente utilizzate e richiamate o quali nodi fannomaggior uso di altre classi o cartelle all’interno del codice.
Scrum team 2 Understand your code
Depends on
Questo tipo di grafo e disponibile per classi e package. Mostra leclassi e i package da cui dipende l’elemento sul quale e statogenerato il grafo.
Scrum team 2 Understand your code
Depended On By
Questo tipo di grafo e disponibile per classi e package. Mostra leclassi e i package che dipendono dall’elemento sul quale e statogenerato il grafo.
Scrum team 2 Understand your code
Butterfly-Dependency
Questo tipo di grafo e disponibile solo per package. Esso puoessere considerato come l’unione dei grafi Depends on e Dependedon By generati su un elemento; mostra quali classi/packagedipendono dall’elemento sul quale e stato generato il grafo e leclassi package da cui l’elemento dipende.
Scrum team 2 Understand your code
Internal dependencies
Questo tipo di grafo e disponibile solo per package. Mostra ledipendenze delle classi all’interno dell’elemento (package) su cui estato generato il grafo.
Scrum team 2 Understand your code
UML class diagram
Attraverso questo tipo di digramma e possibile comprendere come sicomportano le classi all’interno del software. Ogni freccia indica che laclasse di partenza e figlia della classe di destinazione.
Qui mostriamo solo un dettaglio del diagramma delle classi perche il
diagramma completo contiene 549 classi e la rappresentazione completa
del diagramma e difficilmente fruibile.
Scrum team 2 Understand your code
Graph architecture
Attraverso il grafo dell’architettura e possibile comprendere lasuddivisione e la ripartizione, in termini di file, del progetto. Questo puoservire a comprendere i macro-blocchi che costituiscono il sistema.
Ellissi
Rappresentano delle cartelle che a loro volta contengono altresottocartelle. 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 contenentecodice, ovvero non contengono altre sottocartelle. Questi sono sempre inodi 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 partenzacontiene 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 funzionalita offerta dal tool consiste in una breveanalisi del codice. Essa permette di trovare alcuni difetti diprogrammazione. 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 effettivamentecollocati gli errori rilevati.
Scrum team 2 Understand your code
Pregi e difetti
Pregi:
facile da installare e dautilizzare
ha un editor per il codiceintegrato
e compatibile con moltilinguaggi diprogrammazione
ha molti tipi di viste cheaiutano a comprenderevelocemente lecaratteristiche delsoftware
Difetti:
alcune viste, come ildiagramma delle classi,sono di difficileconsultazione
problemi ad esportareimmagini in caso di vistemolto complesse
Scrum team 2 Understand your code