Descrizione del software Understand e delle sue principali caratteristiche
1 of 33
Downloaded 12 times
More Related Content
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
lutente 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 e鍖ettuare
a e
lanalisi di molte metriche. Le metriche pi` signi鍖cative 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 allinterno
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
dellorganizzazione del lavoro. Esso ` scritto in Java ed ` composto
e e
da:
549 classi
318 鍖les
29211 linee di codice
Questi dati sono stati ottenuti tramite i report di cui parleremo in
seguito.
Scrum team 2 Understand your code
6. Metric Charts
In aggiunta alla semplice visualizzazione testuale ` possibile
e
ottenere una rappresentazione gra鍖ca 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 gra鍖co 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 gra鍖co osserviamo che la ripartizione ` abbastanza uniforme, le linee vuote sono in numero minore, le linee di
e
codice eseguibile sono le pi` di鍖use.
u
Scrum team 2 Understand your code
8. File Volume
Indica semplicemente da quanti 鍖les ` 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 modi鍖che 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 gra鍖co 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 alleditor 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 dellintero
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:
gra鍖ci 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 identi鍖care 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
鍖usso.
Scrum team 2 Understand your code
18. Most complex 鍖les
Vengono mostrati i cinque 鍖les pi` complessi, identi鍖cando quindi
u
quei 鍖les 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 鍖usso per ogni metodo allinterno 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; ` su鍖ciente
e e
andare nel menu Reports e poi cliccare Generate Reports.
Scrum team 2 Understand your code
21. I gra鍖
Per creare un grafo relativo ad una classe/package bisogna:
1 Selezionare il nodo architetturale dinteresse con il tasto
destro del mouse
2 Andare su Graphical Views e selezionare il grafo desiderato
(Depends on, Depended on By, Butter鍖y-Dependency Graph,
Internal Dependencies)
Scrum team 2 Understand your code
22. Caratteristiche comuni ai gra鍖
I gra鍖 di dipendenza architetturale sono gra鍖 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, in鍖ne, vengono determinati contando il numero
di chiamate alla classe (o package/cartella a cui appartiene) di
destinazione dellarco.
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 allinterno 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 lelemento 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 dallelemento sul quale ` stato
e
generato il grafo.
Scrum team 2 Understand your code
26. Butter鍖y-Dependency
Questo tipo di grafo ` disponibile solo per package. Esso pu`
e o
essere considerato come lunione dei gra鍖 Depends on e Depended
on By generati su un elemento; mostra quali classi/package
dipendono dallelemento sul quale ` stato generato il grafo e le
e
classi package da cui lelemento dipende.
Scrum team 2 Understand your code
27. Internal dependencies
Questo tipo di grafo ` disponibile solo per package. Mostra le
e
dipendenze delle classi allinterno dellelemento (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 allinterno del software. Ogni freccia indica che la
classe di partenza ` 鍖glia 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 ` di鍖cilmente fruibile.
e
Scrum team 2 Understand your code
29. Graph architecture
Attraverso il grafo dellarchitettura ` possibile comprendere la
e
suddivisione e la ripartizione, in termini di 鍖le, 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)
dellalbero generato con il grafo dellarchitettura.
Riquadri
Rappresentano cartelle che al loro interno hanno solo 鍖le contenente
codice, ovvero non contengono altre sottocartelle. Questi sono sempre i
nodi foglia dellalbero generato attraverso il grafo dellarchitettura.
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
31. Code Check
Unulteriore funzionalit` o鍖erta 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 e鍖ettivamente
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 di鍖cile
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