Metriche per programmi Java
Angelo Gargantini
Informatica III (B)
2010
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...
Useremo questi tool
●
●
Javac:
●
warning di Javac (aumenta il livello)
●
es.: Uso di deprectated, generics, ...
PMD
●
●
Metrics
●
●
http://pmd.sourceforge.net/
http://metrics.sourceforge.net/
Jdepend
●
http://andrei.gmxhome.de/jdepend4eclipse/
Altri tools
●
FindBugs
●
●
CheckStyle
●
STAN
●
Vedi il tutorial su ilias !!!!
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
PMD rules
●
Many rules divided into categoeries
●
Some examples:
●
Code
–
●
Design
–
●
UseSingleton (a class with only static methods)
Strings
–
●
ExcessiveMethodLength
...
UseEqualsToCompareStrings (== used instead of equals)
How to run PMD
●
Demo !!
PMD - CPD
●
Finding duplicate code
●
Try to extract common methods ...
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
Mectrics plugin
●
Demo
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.
Running Jdepend
●
Select a folder,
●
RunJdepend
output
Metriche di stabilità
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
Il numero di package che dipendono da classi del package P
afferente (afferent
coupling)
Ce
Accoppiamento
Il numero di package da cui dipendono le classi del package
efferente (efferent P
coupling)
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).
D
Distanza dalla
sequenza
principale
La distanza del package P dalla retta di equazione A + I = 1.
E' un indicatore del compromesso raggiunto dal package fra
astrattezza (A = 1, I = 0) e instabilità (A = 0, I = 1).
Nom
e
Situazione ideale
Cosa fare
●
●
Spostare delle classi concrete in package
instabili
Rendere astratte classi in packages stabili
Dipendenza di packaes
●
●
Un package A che importa da un altro B e B
importa da A
Oppure indirette
Cosa fare
●
Rompere i cicli è molto difficile
●
Vedere dove è il ciclo e spostare metodi/classi
●
Rivela in genere un problema di progettazione
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
refactoring
●
Una volta scoperto i punti critici del vostro
software cosa fare?
●
●
I punti critici sono detti anche “bad smell”...
“refactoring”