Complessità del design del software
Il termine complessità sta per stato di eventi o cose, che hanno più collegamenti interconnessi e strutture altamente complicate. Nella programmazione del software, man mano che la progettazione del software viene realizzata, il numero di elementi e le loro interconnessioni diventano gradualmente enormi, il che diventa troppo difficile da capire immediatamente.
La complessità della progettazione del software è difficile da valutare senza utilizzare metriche e misure di complessità. Vediamo tre importanti misure di complessità del software.
Misure di complessità di Halstead
Nel 1977, il signor Maurice Howard Halstead ha introdotto le metriche per misurare la complessità del software. Le metriche di Halstead dipendono dall'effettiva implementazione del programma e dalle sue misure, che vengono calcolate direttamente dagli operatori e dagli operandi dal codice sorgente, in modo statico. Consente di valutare il tempo di test, il vocabolario, le dimensioni, la difficoltà, gli errori e gli sforzi per il codice sorgente C / C ++ / Java.
Secondo Halstead, "Un programma per computer è un'implementazione di un algoritmo considerato come una raccolta di token che possono essere classificati come operatori o operandi". Le metriche di Halstead pensano a un programma come una sequenza di operatori e i loro operandi associati.
Definisce vari indicatori per verificare la complessità del modulo.
Parametro | Senso |
---|---|
n1 | Numero di operatori univoci |
n2 | Numero di operandi univoci |
N1 | Numero di occorrenze totali di operatori |
N2 | Numero di occorrenze totali di operandi |
Quando selezioniamo il file di origine per visualizzare i dettagli della sua complessità in Metric Viewer, il seguente risultato viene visualizzato in Metric Report:
Metrico | Senso | Rappresentazione matematica |
---|---|---|
n | Vocabolario | n1 + n2 |
N | Taglia | N1 + N2 |
V | Volume | Lunghezza * Log2 Vocabolario |
D | Difficoltà | (n1 / 2) * (N1 / n2) |
E | Sforzi | Difficoltà * Volume |
B | Errori | Volume / 3000 |
T | Tempo di prova | Tempo = Sforzi / S, dove S = 18 secondi. |
Misure di complessità ciclomatica
Ogni programma comprende istruzioni da eseguire al fine di eseguire alcune attività e altre istruzioni decisionali che decidono quali istruzioni devono essere eseguite. Questi costrutti decisionali cambiano il flusso del programma.
Se confrontiamo due programmi della stessa dimensione, quello con più dichiarazioni decisionali sarà più complesso poiché il controllo del programma salta frequentemente.
McCabe, nel 1976, propose Cyclomatic Complexity Measure per quantificare la complessità di un dato software. È un modello basato su grafici che si basa su costrutti decisionali del programma come if-else, do-while, repeat-until, switch-case e goto.
Processo per creare un grafico di controllo del flusso:
- Interrompi il programma in blocchi più piccoli, delimitati da costrutti decisionali.
- Crea nodi che rappresentano ciascuno di questi nodi.
- Connetti i nodi come segue:
Se il controllo può diramarsi dal blocco i al blocco j
Disegna un arco
Da nodo di uscita a nodo di ingresso
Disegna un arco.
Per calcolare la complessità ciclomatica di un modulo di programma, usiamo la formula -
V(G) = e – n + 2
Where
e is total number of edges
n is total number of nodes
La complessità ciclomatica del modulo sopra è
e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
= 4
Secondo P. Jorgensen, la complessità ciclomatica di un modulo non dovrebbe superare 10.
Punto funzione
È ampiamente utilizzato per misurare le dimensioni del software. Function Point si concentra sulle funzionalità fornite dal sistema. Le caratteristiche e le funzionalità del sistema vengono utilizzate per misurare la complessità del software.
Il punto funzione conta su cinque parametri, denominati Ingresso esterno, Uscita esterna, File interni logici, File interfaccia esterna e Richiesta esterna. Per considerare la complessità del software, ogni parametro viene ulteriormente classificato come semplice, medio o complesso.
Vediamo i parametri del punto funzione:
Ingresso esterno
Ogni input univoco al sistema, dall'esterno, è considerato come input esterno. Viene misurata l'unicità dell'input, poiché non esistono due input dovrebbero avere gli stessi formati. Questi input possono essere dati o parametri di controllo.
Simple - se il numero di input è basso e influisce su meno file interni
Complex - se il numero di input è elevato e influisce su più file interni
Average - tra semplice e complesso.
Uscita esterna
Tutti i tipi di output forniti dal sistema vengono conteggiati in questa categoria. L'output è considerato unico se il formato e / o l'elaborazione di output sono unici.
Simple - se il conteggio delle uscite è basso
Complex - se il conteggio delle uscite è alto
Average - tra semplice e complesso.
File interni logici
Ogni sistema software conserva i file interni per mantenere le proprie informazioni funzionali e per funzionare correttamente. Questi file contengono dati logici del sistema. Questi dati logici possono contenere sia dati funzionali che dati di controllo.
Simple - se il numero di tipi di record è basso
Complex - se il numero di tipi di record è elevato
Average - tra semplice e complesso.
File di interfaccia esterna
Il sistema software potrebbe dover condividere i suoi file con un software esterno o potrebbe essere necessario passare il file per l'elaborazione o come parametro per alcune funzioni. Tutti questi file vengono conteggiati come file di interfaccia esterna.
Simple - se il numero di tipi di record nel file condiviso è basso
Complex - se il numero di tipi di record nel file condiviso è elevato
Average - tra semplice e complesso.
Indagine esterna
Una richiesta è una combinazione di input e output, in cui l'utente invia alcuni dati per richiedere informazioni come input e il sistema risponde all'utente con l'output della richiesta elaborata. La complessità di una query è più che un input esterno e un output esterno. Si dice che la query è univoca se il suo input e output sono unici in termini di formato e dati.
Simple - se la query richiede un'elaborazione ridotta e produce una piccola quantità di dati di output
Complex - se la query richiede un processo elevato e produce una grande quantità di dati di output
Average - tra semplice e complesso.
A ciascuno di questi parametri nel sistema viene assegnato un peso in base alla loro classe e complessità. La tabella seguente menziona il peso assegnato a ciascun parametro:
Parametro | Semplice | Media | Complesso |
---|---|---|---|
Ingressi | 3 | 4 | 6 |
Uscite | 4 | 5 | 7 |
Inchiesta | 3 | 4 | 6 |
File | 7 | 10 | 15 |
Interfacce | 5 | 7 | 10 |
La tabella sopra fornisce i punti funzione grezzi. Questi punti funzione vengono regolati in base alla complessità dell'ambiente. Il sistema è descritto utilizzando quattordici diverse caratteristiche:
- Comunicazione dei dati
- Elaborazione distribuita
- Obiettivi di performance
- Caricamento configurazione operazione
- Tasso di transazione
- Inserimento dati online,
- Efficienza dell'utente finale
- Aggiornamento in linea
- Logica di elaborazione complessa
- Re-usability
- Facilità di installazione
- Facilità operativa
- Più siti
- Desiderio di facilitare i cambiamenti
Questi fattori caratteristici vengono quindi valutati da 0 a 5, come indicato di seguito:
- Nessuna influenza
- Incidental
- Moderate
- Average
- Significant
- Essential
Tutte le valutazioni vengono quindi sommate come N. Il valore di N varia da 0 a 70 (14 tipi di caratteristiche x 5 tipi di valutazioni). Viene utilizzato per calcolare i fattori di regolazione della complessità (CAF), utilizzando le seguenti formule:
CAF = 0.65 + 0.01N
Poi,
Delivered Function Points (FP)= CAF x Raw FP
Questo FP può quindi essere utilizzato in varie metriche, come ad esempio:
Cost = $ / FP
Quality = Errori / FP
Productivity = FP / persona-mese