Riusabilità
# Riusabilità

In informatica si definisce riusabilità la facilità con cui un frammento di codice sorgente di un programma può essere riutilizzato riassemblandolo in un altro programma per fornire le stesse funzionalità senza che sia necessario modificarlo, oppure dopo avervi apportato piccoli aggiustamenti.

La possibilità di riutilizzare moduli e classi riduce il tempo di sviluppo delle applicazioni ed aumenta l'affidabilità poiché di solito il codice riutilizzato è già stato precedentemente collaudato, testato e corretto da eventuali bug.

Le subroutine o le funzioni sono la forma più semplice di riutilizzo. Una porzione di codice viene regolarmente organizzata utilizzando moduli o spazi dei nomi in livelli. I sostenitori affermano che oggetti e componenti software offrono una forma più avanzata di riusabilità, sebbene sia stato difficile misurare e definire oggettivamente livelli o punteggi di "riutilizzabilità".

La capacità di riutilizzare si basa in modo essenziale sulla capacità di costruire software più corposi da parti più piccole e sulla capacità di identificare i punti in comune tra quelle parti. La riusabilità è spesso una caratteristica richiesta del software. La riusabilità porta diversi aspetti allo sviluppo del software che non devono essere considerati quando la riusabilità non è richiesta.

La riusabilità implica una gestione esplicita dei problemi di costruzione, distribuzione, installazione, configurazione, manutenzione e aggiornamento. Se questi problemi non vengono presi in considerazione, il software può sembrare riutilizzabile dal punto di vista del design , ma non verrà riutilizzato nella pratica.

La riutilizzabilità del software si riferisce più specificamente alle caratteristiche di progettazione di un elemento software (o raccolta di elementi software) che ne migliorano l'idoneità al riutilizzo.

## Caratteristiche

Molti principi di progettazione del riutilizzo sono stati sviluppati nei workshop WISR.

Le caratteristiche di progettazione del candidato per il riutilizzo del software includono:

* Adattabilità
* Brevità: piccola dimensione
* Consistenza
* Correttezza
* Estensibilità
* Velocità
* Flessibilità
* Genericità
* Modularità
* Ortogonalità
* Parametrizzazione
* Semplicità
* Stabilità al mutare dei requisiti

Non è stato ancora raggiunto il consenso su questo elenco sull'importanza relativa delle voci né sulle questioni che rendono ciascuna importante per una particolare classe di applicazioni.

## Esempio

Il seguente codice HTML/CSS può essere utilizzato come menu di navigazione in tutte e tre le pagine del sito web oppure in altri siti web eventualmente modificando solo il nome delle voci. Si può quindi definire riusabile:

