La misurazione del software, è una attività strettamente correlata sia alla sua qualità che a quella del suo processo di sviluppo e ha lo scopo di assegnare valori definiti agli attributi di un prodotto software. In pratica, rende misurabili alcuni parametri e consente una comparazione obiettiva tra prodotti e/o processi diversi.
=> Leggi come si valuta la qualità dei prodotti software
Da quando è nata l’ingegneria del software, gli studiosi tentano di sviluppare una metrica in grado di offrire una misura globale della complessità del software. Questa metrica nelle intenzioni dei vari autori dovrebbe avere caratteri di universalità (ovvero validità in ogni contesto e applicazione).
Facendo riferimento all’IEEE standard, possiamo definire la metrica come “una misura quantitativa del grado di possesso di uno specifico attributo da parte di un sistema, un componente, o un processo”, una metrica comprende anche le definizioni delle procedure e delle modalità di misurazione.
=> Leggi come si realizza un prodotto software
Seppure spesso si usino come sinonimi, la misurazione è un’entità diversa dalla metrica: la prima è un’attività che permette l’applicazione di un valore ad un attributo o ad un’entità, ovvero, l’applicazione di una misura, valida in un contesto determinato e non necessariamente “comparabile”; la seconda ci permette di comparare entità diverse.
La metrica va quindi intesa come strumento o parametro di comparazione tra diverse misurazioni.
Possiamo individuare tre gruppi di entità, cui applicare i concetti di misurazione del prodotto software:
- prodotti in sé: ciò che viene prodotto nel ciclo di vita del progetto, dalla documentazione ai test,
- processi e attività: dalla progettazione alla codifica, dal testing alla manutenzione,
- Risorse utilizzate: non solo hardware o software, ma anche impiego di risorse umane, usabilità etc.
=> Vai alla Guida di PMI.it sul Progetto Aziendale
Livelli di Scale
A queste entità è possibile, mediante misurazione, applicare un valore che per essere significativo deve appartenere ad una scala.
Esistono diversi tipi di scala, utili per usi e momenti diversi, alcuni autori ne individuano cinque (Nominale, Ordinale, Intervalli, Ratio, Assoluta). Secondo Stevens invece si deve parlare di “livelli di scala”.
Nella sua distinzione, i quattro tipi di scala stanno in una precisa gerarchia (la prima rappresenta il livello più basso, l’ultima livello più alto), dove passando da un livello di misurazione ad uno più alto aumenta il numero di operazioni matematiche che possono essere compiute sui valori della scala.
In particolare possiamo distinguere:
- Nominale: si attribuisce un nome o un simbolo in grado di classificare gli oggetti della misurazione, senza dare indicazioni quantitative o di ordine o di relazione. Ogni classificazione da origine ad una scala di questo tipo, dove l’unica operazione consentita è la distinzione tra uguaglianza e diversità.
- Ordinale: scala con cui si da un indice di priorità o di ordine (si aggiungono le relazioni di maggiore e minore) senza poter però quantificare le “distanze” tra i vai oggetti di misurazione, in pratica si stila una graduatoria senza voti.
- Ad intervalli equivalenti: viene definita una quantità (unità di misura) che ci permette di definirla come una scala ordinale più dettagliata, in grado cioè di definire anche la “distanza” tra gli oggetti della misurazione. Come per la scala nominale, è possibile così stabilire se due attributi sono uguali (15 ≠ 43), come per la scala ordinale è possibile anche costruire una relazione d’ordine (15 < 43), in più grazie alla definizione dell’unità di misura, è possibile stabilire anche una differenza, ad esempio tra 15 e 43 c’è una differenza di 28 (unità pari ad uno) o di 14 (se l’unità di misura è pari a 2). Questa scala non contempla l’elemento zero, o meglio non contempla uno zero assoluto ma mobile. Una scala ad intervalli equivalenti è quella, ad esempio, che si usa per misurare la temperatura. Le differenze di temperatura espresse in gradi, siano essi °C o °F o °K, danno infatti sempre differenze uguali (da 15 a 43 sono comunque 28 gradi di differenza) ma, essendo lo zero (l’inizio della scala) non univoco relazioni di moltiplicazione e divisione non sono possibili. Ad esempio non è possibile dire che oggi la temperatura sia tre volte quella di ieri (15 su 45 in °C da un valore di tre invece 288 su 318 °K no).
- A rapporti equivalenti: introduce l’elemento zero “assoluto” che rappresenta l’assenza dell’attributo che si sta misurando nell’oggetto della misurazione. Aver fissato l’elemento zero consente operazioni quali rapporti e moltiplicazioni.
Metriche
Vediamo ora alcune metriche che è possibile usare per avere dei riferimenti nelle varie fasi del ciclo di vita dei prodotti software.
- Per il modello di analisi: devono consentire al management di monitorare e controllare costi, mailstone e qualità. In genere si usano metriche basate sulle funzionalità .
- Qualità delle specifiche: alcuni attributi di qualità possono essere non ambiguità, completezza, correttezza, comprensibilità, verificabilità, modificabilità, riusabilità…alcune metriche contemplano il numero di oggetti che posseggono un dato attributo (ad esempio riusabilità) sul totale degli oggetti omologhi.
- Architettura: non considerano la struttura interna dei singoli moduli. Servono ad evidenziare i moduli del sistema e le loro relazioni.
- Di design a livello dei componenti: queste metriche valutano caratteristiche interne dei moduli software, quali coesione, accoppiamento e complessità. Un esempio è la metrica di McCabe detta anche numero ciclomatico, che rappresenta la complessità logica del programma, ovvero una misura dello sforzo necessario a realizzarlo e/o comprenderlo.
- Per la misura e la stima del codice sorgente: esistono principalmente due “filosofie”, quella LOC (lines of code) che è una metrica dimensionale, che misura la lunghezza di un programma con il numero di linee di codice (una definizione valida recita che una “linea di codice è ogni linea di testo di un programma che non sia bianca o un commento, indipendentemente dal numero di istruzioni in essa inclusa”).
In alternativa sono applicate le metriche di Halstead.
Halstead ha proposto un insieme di metriche basate sui seguenti parametri :
- n1 = numero di operatori distinti che compaiono in un programma,
- n2 = numero di operandi distinti che compaiono in un programma,
- N1 = numero totale delle occorrenze di operatori,
- N2 = numero totale delle occorrenze di operandi,
- Metriche per il testing: in genere si riferiscono più al processo di testing (sforzo, durata, numero di difetti rilevati…), che al risultato del test. In questo campo è molto interessante il lavoro di Binder
- Metriche per la manutenzione: danno una stima dell’indice di manutenibilità e di maturità del prodotto.
GQM
Il GQM, acronimo che sta per “goal, question, metric”, è infine un approccio di metrica del software promosso inizialmente da Victor Basili e poi perfezionato da Solingen nel 1999, i principi ispiratori sono immediati e ruotano, come nelle più avanzate logiche di gestione industriale, attorno agli obiettivi.
In particolare, partendo dagli obiettivi (definiti e descritti a partire da un oggetto, da una motivazione, da un punto di vista e dai dati a contorno) si vanno a trovare i dati in grado di valutare il raggiungimento degli stessi, definendo in fine uno schema quantitativo per l’interpretazione dei risultati.
Il modello di misura così ottenuto, si struttura su tre livelli, quello concettuale (i “goal”), operativo (le “question”), e quello quantitativo (le metriche associate alle domande), di solito sviluppato in sei fasi dove le prime tre riguardano gli obiettivi da fissare, mentre le altre tre i dati ottenuti e la loro strutturazione ai fini decisionali.