33
Universit` a degli studi di Milano Bicocca Facolt` a di Scienze Matematiche Fisiche e Naturali 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

Presentazione understand

Embed Size (px)

DESCRIPTION

Descrizione del software Understand e delle sue principali caratteristiche

Citation preview

Page 1: Presentazione understand

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

Page 2: Presentazione understand

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

Page 3: Presentazione understand

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

Page 4: Presentazione understand

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

Page 5: Presentazione understand

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

Page 6: Presentazione understand

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

Page 7: Presentazione understand

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

Page 8: Presentazione understand

File Volume

Indica semplicemente da quanti files e composto il progetto.

Scrum team 2 Understand your code

Page 9: Presentazione understand

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

Page 10: Presentazione understand

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

Page 11: Presentazione understand

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

Page 12: Presentazione understand

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

Page 13: Presentazione understand

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

Page 14: Presentazione understand

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

Page 15: Presentazione understand

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

Page 16: Presentazione understand

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

Page 17: Presentazione understand

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

Page 18: Presentazione understand

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

Page 19: Presentazione understand

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

Page 20: Presentazione understand

Reports

Scrum team 2 Understand your code

Page 21: Presentazione understand

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

Page 22: Presentazione understand

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

Page 23: Presentazione understand

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

Page 24: Presentazione understand

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

Page 25: Presentazione understand

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

Page 26: Presentazione understand

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

Page 27: Presentazione understand

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

Page 28: Presentazione understand

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

Page 29: Presentazione understand

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

Page 30: Presentazione understand

Graph architecture

Scrum team 2 Understand your code

Page 31: Presentazione understand

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

Page 32: Presentazione understand

Code Check

E possibile esplorare i risultati per capire dove sono effettivamentecollocati gli errori rilevati.

Scrum team 2 Understand your code

Page 33: Presentazione understand

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