Coesione (informatica)

La coesione è una misura qualitativa, il che significa che il codice sorgente da misurare viene esaminato usando una rubrica per determinare una classificazione. I tipi di coesione, dal peggiore al migliore, sono i seguenti:

Coesione coincidente (peggiore) La coesione coincidente è quando parti di un modulo sono raggruppate arbitrariamente; l’unica relazione tra le parti è che sono state raggruppate insieme (ad esempio, una classe “Utilities”). Esempio:

/*Groups: The function definitionsParts: The terms on each function*/Module A{ /* Implementation of r(x) = 5x + 3 There is no particular reason to group functions in this way, so the module is said to have Coincidental Cohesion. */ r(x) = a(x) + b(x) a(x) = 2x + 1 b(x) = 3x + 2}
Coesione logica La coesione logica è quando le parti di un modulo sono raggruppate perché sono logicamente categorizzate per fare la stessa cosa anche se sono diverse per natura (ad esempio, raggruppare tutte le routine di gestione dell’input di mouse e tastiera). Coesione temporale La coesione temporale è quando le parti di un modulo sono raggruppate in base a quando vengono elaborate – le parti vengono elaborate in un momento particolare dell’esecuzione del programma (ad esempio, una funzione che viene chiamata dopo aver catturato un’eccezione che chiude i file aperti, crea un registro degli errori e notifica l’utente). Coesione procedurale La coesione procedurale è quando le parti di un modulo sono raggruppate perché seguono sempre una certa sequenza di esecuzione (ad esempio, una funzione che controlla i permessi dei file e poi apre il file). Coesione comunicazionale/informativa La coesione comunicazionale è quando le parti di un modulo sono raggruppate perché operano sugli stessi dati (per esempio, un modulo che opera sullo stesso record di informazioni). Coesione sequenziale La coesione sequenziale è quando le parti di un modulo sono raggruppate perché l’output di una parte è l’input di un’altra parte come una catena di montaggio (per esempio, una funzione che legge i dati da un file e li elabora). Coesione funzionale (migliore) La coesione funzionale è quando le parti di un modulo sono raggruppate perché contribuiscono tutte a un singolo compito ben definito del modulo (ad esempio, analisi lessicale di una stringa XML). Esempio:

/*Groups: The function definitionsParts: The terms on each function*/Module A { /* Implementation of arithmetic operations This module is said to have functional cohesion because there is an intention to group simple arithmetic operations on it. */ a(x, y) = x + y b(x, y) = x * y}Module B { /* Module B: Implements r(x) = 5x + 3 This module can be said to have atomic cohesion. The whole system (with Modules A and B as parts) can also be said to have functional cohesion, because its parts both have specific separate purposes. */ r(x) = .a(.b(5, x), 3)}
Coesione perfetta (atomica) Esempio.

/*Groups: The function definitionsParts: The terms on each function*/Module A { /* Implementation of r(x) = 2x + 1 + 3x + 2 It's said to have perfect cohesion because it cannot be reduced any more than that. */ r(x) = 5x + 3}

Anche se la coesione è una scala di tipo ranking, i ranghi non indicano una progressione costante di miglioramento della coesione. Studi di varie persone tra cui Larry Constantine, Edward Yourdon e Steve McConnell indicano che i primi due tipi di coesione sono inferiori; la coesione comunicazionale e quella sequenziale sono molto buone; e la coesione funzionale è superiore.

Mentre la coesione funzionale è considerata il tipo di coesione più desiderabile per un modulo software, potrebbe non essere raggiungibile. Ci sono casi in cui la coesione comunicazionale è il massimo livello di coesione che può essere raggiunto nelle circostanze.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *