title: Dependability
text: # 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.
  