Dependability
# Dependability

Nel campo dell'ingegneria dell'affidabilità l'affidabilità dei sistemi (in inglese tecnico dependability ) consiste nella capacità di un sistema di mostrarsi affidabile nei confronti degli utilizzatori. Questa caratteristica porta gli utenti a potersi "fidare" del corretto funzionamento del sistema stesso e a utilizzarlo senza particolari preoccupazioni o precauzioni.

La dependability è una caratteristica molto importante da valutare durante la fase di progettazione dei sistemi , in particolare nell'ambito informatico. Alcuni casi in cui la dependability diventa una caratteristica fondamentale sono: i database contenenti dati sensibili, le applicazioni nelle quali una bassa dependability comporterebbe bassi introiti (ad esempio i portali web che offrono servizi a pagamento), le applicazioni critiche nelle quali una bassa dependability comporterebbe danni a cose o persone (sistemi di controllo delle centrali nucleari), ecc.

La dependability è un attributo generico derivato dalla sintesi dei seguenti attributi di sistema:

* affidabilità (reliability): capacità del sistema di funzionare ininterrottamente senza guasti;
* manutenibilità (maintainability): possibilità di intervenire con riparazioni o altre azioni di manutenzioni in maniera efficace e non bloccante;
* disponibilità (availability): capacità del sistema di continuare a funzionare correttamente anche in presenza di interruzioni (è correlata con affidabilità e manutenibilità);
* continuità di prestazioni (performability): capacità del sistema di offrire i servizi attesi nei tempi e modi prefissati;
* incolumità (safety): capacità di non arrecare danni a cose, persone e ambiente;
* sicurezza (security): capacità del sistema di assicurare confidenzialità (impedire la fuga di informazioni riservate permettendo l'accesso solo a utenti autorizzati) e integrità (accesso e modifica ai dati da parte degli utenti autorizzati ed esclusivamente nelle modalità previste).

## Minacce

Le minacce che possono violare la dependability di un sistema sono classificate in:

* guasti: minacce di natura non prevedibile e probabilistica;
* errori: minacce spesso di natura umana che possono danneggiare il sistema a seguito di procedure errate;
* disastri: minacce non intenzionali a danno del sistema (come alluvioni, terremoti, ecc.);
* attacchi: minacce intenzionali a danno del sistema (come intrusioni informatiche, vandalismo, ecc.).

## Tecniche

Data la complessità di un sistema informativo, è possibile individuare diverse tecniche in base alla minaccia che si vuole prevenire. Tra le soluzioni, possiamo trovare:

* fault prevention (prevenzione dei guasti): basata sulla prevenzione: il sistema implementa di default misure di sicurezza che non portano il sistema in errore;
* fault tolerance (tolleranza ai guasti): basata sulla tolleranza: il sistema anche se cade in errore può gestirlo;
* fault removal (rimozione dei guasti): basata sulla rimozione: il sistema se in errore può portarsi ad uno stato di reset;
* fault forecasting (previsione dei guasti): basata sulla previsione: il sistema prevede i casi in cui può portare sé stesso in errore.
