• Non ci sono risultati.

Metriche per programmi Java

N/A
N/A
Protected

Academic year: 2021

Condividi "Metriche per programmi Java"

Copied!
20
0
0

Testo completo

(1)

Metriche per programmi Java

Angelo Gargantini Informatica III (B)

2010

(2)

Misure statiche di programmi

Una serie di misure sui programmi da usare come indici di qualità/quantità

Esempi:

Numero di linee di codice

Numero di commenti

Quanti if hai usato...

(3)

Useremo questi tool

Javac:

warning di Javac (aumenta il livello)

es.: Uso di deprectated, generics, ...

PMD

http://pmd.sourceforge.net/

Metrics

http://metrics.sourceforge.net/

Jdepend

http://andrei.gmxhome.de/jdepend4eclipse/

(4)

Altri tools

FindBugs

CheckStyle

STAN

Vedi il tutorial su ilias !!!!

(5)

PMD

PMD scans Java source code and looks for potential problems like:

Possible bugs - empty try/catch/finally/switch statements

Dead code - unused local variables, parameters and private methods

Suboptimal code - wasteful String/StringBuffer usage

Overcomplicated expressions - unnecessary if statements, for loops that could be while loops

Duplicate code - copied/pasted code means copied/pasted bugs

(6)

PMD rules

Many rules divided into categoeries

Some examples:

Code

ExcessiveMethodLength

Design

UseSingleton (a class with only static methods)

Strings

UseEqualsToCompareStrings (== used instead of equals)

...

(7)

How to run PMD

Demo !!

(8)

PMD - CPD

Finding duplicate code

Try to extract common methods ...

(9)

metrics

Alcune metriche di complessità:

McCabe Cyclomatic Complexity

Misura il numero di percorsi computazionali di un metodo

Weighted Methods per Class (WMC)

Lack of Cohesion of Methods

Split classes

(10)

Mectrics plugin

Demo

(11)

JDepend

JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to

automatically measure the quality of a design in terms of its extensibility, reusability, and

maintainability to manage package dependencies effectively.

(12)

Running Jdepend

Select a folder,

RunJdepend

(13)

output

(14)

Metriche di stabilità

Nom e

Metrica Definizione

CC Classi concrete Il numero di classi concrete in un package P

AC Classi astratte Il numero di classi astratte o di interfacce in un package P Ca Accoppiamento

afferente (afferent coupling)

Il numero di package che dipendono da classi del package P

Ce Accoppiamento efferente (efferent coupling)

Il numero di package da cui dipendono le classi del package P

A Astrattezza La percentuale di classi astratte del package P, definita come il rapporto AC / (AC + CC)

I Instabilità Il rapporto fra l'accoppiamento efferente e l'accoppiamento totale Ce / (Ce + Ca). E' un indicatore della difficoltà di

modificare il package P (se infatti è alto, ciò significa che molte classi dipendono da esso).

(15)

Situazione ideale

(16)

Cosa fare

Spostare delle classi concrete in package instabili

Rendere astratte classi in packages stabili

(17)

Dipendenza di packaes

Un package A che importa da un altro B e B importa da A

Oppure indirette

(18)

Cosa fare

Rompere i cicli è molto difficile

Vedere dove è il ciclo e spostare metodi/classi

Rivela in genere un problema di progettazione

(19)

Quando usare questi tools

Usa queste metriche fin dall'inizio

Altrimenti se devi rimodificare il codice quando sei avanti con il progetto può essere

problematico

(20)

refactoring

Una volta scoperto i punti critici del vostro software cosa fare?

I punti critici sono detti anche “bad smell”...

“refactoring”

Riferimenti

Documenti correlati

Crea un oggetto di tipo File File denominato denominato nome nome a partire dalla directory dir a partire dalla directory dir (descritta tramite una stringa)..

● I metodi definiti nella superclasse possono essere invocati indipendentemente su ogni istanza di oggetti della gerarchia, ottenendo.. Classi e

Javascript, Python, Ruby, but also Lisp, etc...) -Type inference for generics, diamond operator -Fork/Join Framework for parallel programming. (aiuta a creare task paralleli, fa

Si inseriscano i valori nell’array sfruttando (opportune parti) degli

• FileOutputStream implementa questi metodi nel caso parti- colare in cui l’output è un file, il cui nome è passato al costrut- tore di FileOutputStream ; in alternativa si

3) Il servitore accetta la richiesta del cliente: con ciò si stabilisce una connezioe e si il server crea una nuova Socket già collegata al cliente, tramite cui i due comunicano.

• Il metodo run della classe di libreria Thread definisce l’insieme di statement Java che ogni thread (oggetto della classe) eseguirà.. concorrentemente con gli

[r]