Sommario
• Obiettivi Tesi
• Argomenti Trattati
• Lavoro svolto
• metriche del software(cenni)
• metriche OO
• Punti Funzione
Metriche del software
In generale le metriche del software sono utili per:
• Migliorare il processo software
• Pianificare, seguire e controllare l’andamento di
un progetto
• Valutare la qualità di un prodotto
• Stimare lo sforzo richiesto per sviluppare un
sistema software
Le metriche del software dovrebbero essere:
• Semplici
• Oggettive
• Ottenibili ad un costo ragionevole
• Valide
• Robuste
LOC – Line of Code
1/2
• è la metrica dimensionale più semplice e conta
tutte le line fisiche del codice sorgente.
– NCNB (conteggia tutte le linee effettive del
codice sorgente, non sono conteggiate le
linee di commento e quelle vuote)
– EXEC (conta solo le linee di comando del
codice indipendentemente dalle linee fisiche )
LOC – Line of Code
2/2
– CLOC (conta solo le line di commento del
codice )
– CP (la percentuale di linee di commento
rispetto a tutte le linee di codice (escluse le
linee vuote)
Complessità Ciclomatica 1/2
• usata per valutare la complessità di un
algoritmo ed è interamente basata sulla struttura
del grafo che rappresenta l’algoritmo.
V(G): numero ciclomatico relativo al grafo G
L:
numero di archi nel grafo
N:
P:
numero di nodi del grafo
numero dei componenti del grafo
disconnessi
Complessità ciclomatica 2/2
• V(G) = L- N + 2*P
• V(G) = n° nodi decisionali +1
Function Point
1/3
• I Function Point sono una metrica del software
di tipo "funzionale", cioè definiscono le
dimensioni del prodotto software in termini di
funzionalità fornite all'utilizzatore.
Vantaggi:
• Sono orientati alla misurazione del prodotto finale dello
sviluppo software (le funzionalità) e quindi risultano utili
per definire quantitativamente il prodotto a fini
contrattuali
• Sono indipendenti dagli aspetti tecnologici e
metodologici
Function Point
2/3
• Possono essere utilizzati già nelle fasi alte del processo
di sviluppo del software, per effettuare stime e previsioni,
ma anche per valutare la dimensione di un'applicazione
appena terminata o già in produzione.
• Risultano utili per ricavare indicatori di efficienza
riguardo le attività di sviluppo e manutenzione del
software
• Sono riconosciuti in ambito internazionale e supportati
da organismi istituzionali: IFPUG, GUFPI , NESM
• Sono correlabili ai LOC (Lines Of Code), attraverso
tabelle di conversione
Fuction Point 3/3
Svantaggi:
• Non sono particolarmente sensibili alle
peculiarità delle applicazioni "embedded" (tipo
ERP) e Real-Time
• Un conteggio standard richiede un buon livello di
definizione funzionale del sistema
• Occorre acquisire una buona conoscenza (ed un
minimo di esperienza pratica) del metodo di
conteggio
Metriche OO
• Le metriche orientate agli oggetti si concentrano
sulla classe, l’elemento fondamentale della
programmazione orientata agli oggetti.
• Chidamber e Kemerer nel 1994 definirono sei
metriche basate sulla classe, spesso
collettivamente denominate CK
WMC (Weighted Methods per
Class) 1/2
• è il numero di metodi per classe, pesati
secondo la rispettiva complessità.
Supponiamo che in una classe C ciano definiti n
metodi, di complessità c1,c2,…,cn.
(Chidamber e Kemerer non indicano come
misurare la complessità di ciascun metodo)
n
WMC   ci
i 1
WMC (Weighted Methods per
Class) 2/2
Considerazioni:
Maggiore è tale numero, maggiore sarà il tempo
e lo sforzo necessario per sviluppare e gestire la
classe, maggiore sarà il potenziale impatto sulle
classi derivate, minori saranno le possibilità di
riuso della classe: la classe sarà specifica per
l’applicazione per la quale è stata progettata.
Per questi motivi, si deve cercare di mantenere
WMC il più basso possibile.
DIT (Depth of Inheritance Tree)
• è la distanza (numero di livelli) della classe dalla radice
della gerarchia di ereditarietà cui appartiene.
Considerazioni:
Tanto maggiore è DIT, tanto più grande è il numero di
metodi ereditati e quindi l’influenza delle proprietà degli
antenati sulla classe. Per le classi con DIT grande è
quindi più difficile prevedere il comportamento della
classe, ma è potenzialmente maggiore il riuso dei metodi
ereditati
NOC (Number Of Children)
il numero di sottoclassi che ereditano direttamente dalla
classe considerata
Considerazioni:
Un valore grande di NOC indica un grande impatto sui
discendenti, e un riuso potenzialmente elevato della
classe. Questo indica criticità nella progettazione della
classe (che deve essere una generalizzazione corretta di
tutte le classi discendenti) e la necessità di maggiore
attenzione in fase di verifica.
CBO (Coupling Between Object
classes)
1/2
è il numero di classi accoppiate alla classe
considerata, considerando accoppiate le classi
fra cui esiste dipendenza diretta (ad esempio,
l’una accede alle proprietà dell’altra).
Considerazioni:
• Un valore di CBO eccessivo indica scarsa
modularità, mancanza di indipendenza e
difficoltà di riuso.
CBO (Coupling Between Object
classes)
2/2
Considerazioni
• valori alti di CBO implicano elevata sensibilità
alle modifiche (gli effetti del cambiamento in una
classe si propagano a quelle accoppiate)
• il CBO è indice della complessità del testing
RFC (Response For a Class)
è il numero di metodi che possono essere invocati in
risposta alla ricezione di un messaggio da parte di
un’istanza della classe considerata.
RFC indica la complessità di una classe in base al
numero dei metodi e la quantità di comunicazione con le
altre classi.
Considerazioni:
Al crescere di RFC cresce la complessità della classe e
la difficoltà del testing e debugging
LCOM (Lack of COhesion in
Methods) 1/2
misura la coesione della classe considerata, in base al
numero di coppie di metodi che accedono ad un insieme
comune di attributi della classe.
Più precisamente LCOM è il numero delle coppie di metodi
che non hanno variabili in comune meno il numero di
coppie di metodi che hanno variabili in comune, quindi
due metodi di una classe sono tanto più coesi quanto più
numerose sono le variabili usate da entrambi i metodi.
LCOM (Lack of COhesion in
Methods) 2/2
Considerazioni:
La coesione è desiderabile poiché promuove
l’incapsulamento. Quando molte classi
presentano un valore di LCOM scarso il sistema
è caratterizzato da una struttura complessa più
soggetta a errori. Un valore di LCOM scarso
suggerisce di rivedere la progettazione della
classe, eventualmente dividendola in due classi
distinte.
Altre metriche
1/4
• Metriche di Lorenz e Kidd 1994
– Class size - CS (dimensione complessiva di
una classe )
– Number of Overridden Operations - NOO
(misura il numero di operazioni ridefinite da
una sottoclasse)
– number of operations added by a subclass NOA (il numero di operazioni aggiunte da
una sottoclasse )
Altre metriche
2/4
• number of scenario scripts - NSS (è il numero di
scenari, o casi d’uso)
• Specialization Index - SI (indica
approssimativamente il grado di
specializzazione di una classe)
• Number of Key Classes - NKC misura il numero
di classi che sono legate direttamente al
problema
Altre Metriche
3/4
Le metriche MOOD
• MIF (Method Inheritance Factor): il grado con il
quale l'architettura della classe di un sistema
OO usa l'ereditarietà per i metodi e gli attributi
• CF (Coupling Factor): fattore di accoppiamento
• PF (Polymorrphism Factor): il numero di metodi
che ridefiniscono i metodi ereditati, divisi per il
numero massimo delle possibili situazioni
polimorfiche
Altre Metriche
4/4
Le metriche di Cartwright e Shepperd
• Numero di attributi
• Numero di stati
• Numero di eventi cui la classe è sensibile
• Numero di accessi alla classe
• Profondità nell’albero di ereditarietà (DIT)
• Numero di figli (NOC)
• Numero di difetti
• Numero di righe di codice
Punti Funzione e metodologia orientata agli
oggetti
varianti ad hoc per avvicinare le metriche
funzionali al mondo OO:
•
•
•
•
Object Points
Object Points Analysis
Function Points con OO
Use Cases e OO
•
•
•
•
Object-Oriented Function Points
Object-Oriented Function Points
Use Case Points
Enhanced Object Points
Conteggio FP
1/2
Conteggio FP
2/2
Scarica

numero di metodi per classe