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