Entrambi descrivono la coerenza del comportamento di un'applicazione, ma la "robustezza" descrive la risposta di un'applicazione al suo input , mentre la "tolleranza agli errori" descrive la risposta di un'applicazione al suo ambiente .
Un'app è affidabile quando può funzionare in modo coerente con dati incoerenti. Ad esempio: un'applicazione di mappe è robusta quando può analizzare gli indirizzi in vari formati con vari errori di ortografia e restituire una posizione utile. Un lettore musicale è robusto quando può continuare a decodificare un MP3 dopo aver incontrato un frame non valido. Un editor di immagini è robusto quando può modificare un'immagine con metadati EXIF incorporati che potrebbe non riconoscere, soprattutto se può apportare modifiche all'immagine senza distruggere i dati EXIF.
Un'app è tollerante agli errori quando può funzionare in modo coerente in un ambiente incoerente. Un'applicazione di database è tollerante agli errori quando può accedere a un frammento alternativo quando il primario non è disponibile. Un'applicazione Web è tollerante agli errori quando può continuare a gestire le richieste dalla cache anche quando un host API non è raggiungibile. Un sottosistema di archiviazione è tollerante agli errori quando può restituire risultati calcolati dalla parità quando un membro del disco è offline.
In entrambi i casi, l'applicazione dovrebbe rimanere stabile, comportarsi in modo uniforme, preservare l'integrità dei dati e fornire risultati utili anche quando si verifica un errore. Ma quando si valuta la solidità, è possibile trovare criteri che coinvolgono i dati, mentre quando si valuta la tolleranza agli errori, si trovano criteri che coinvolgono il tempo di attività.
Uno non porta necessariamente all'altro. Un'app di riconoscimento vocale mobile può essere molto robusta, offrendo un'incredibile capacità di riconoscere il parlato in modo coerente in una varietà di accenti regionali con enormi quantità di rumore di fondo. Ma se è inutile senza una connessione dati cellulare veloce, non è molto tollerante agli errori. Allo stesso modo, un'applicazione di pubblicazione Web può essere immensamente tollerante ai guasti, con più ridondanze ad ogni livello, in grado di perdere interi data center senza errori, ma se elimina una tabella utente e si arresta in modo anomalo la prima volta che qualcuno si registra con un apostrofo nel suo cognome , non è affatto robusto.
Se stai cercando letteratura accademica per aiutare a descrivere la distinzione, potresti cercare in domini specifici che utilizzano il software, piuttosto che il software in generale. La ricerca sulle applicazioni distribuite potrebbe essere un terreno fertile per i criteri di tolleranza agli errori e Google ha pubblicato alcune delle loro ricerche che potrebbero essere pertinenti. La ricerca sulla modellizzazione dei dati probabilmente affronta questioni di robustezza, in quanto gli scienziati sono particolarmente interessati alle proprietà di robustezza che producono risultati riproducibili. Probabilmente puoi trovare articoli che descrivono applicazioni statistiche che potrebbero essere utili, come nella modellazione climatica, nella propagazione RF o nel sequenziamento del genoma. Troverai anche ingegneri che discutono di "design robusto" in cose come i sistemi di controllo.
Il white paper di Google File System descrive il loro approccio ai problemi di tolleranza agli errori, che generalmente implica le ipotesi che i guasti dei componenti siano di routine e quindi l'applicazione deve adattarsi a loro:
Questo progetto per una classe presso Rutgers supporta una definizione orientata a "guasti ai componenti" di "tolleranza agli errori":
Ci sono un sacco di documenti sulla "solida modellazione XYZ", a seconda del campo che si indaga. La maggior parte descriverà i loro criteri per "robusti" in astratto e scoprirai che tutto ha a che fare con il modo in cui il modello gestisce l'input.
Questo brief di uno scienziato del clima della NASA descrive la robustezza come criterio per la valutazione dei modelli climatici:
Questo documento di un ricercatore del MIT esamina le applicazioni del protocollo wireless, un dominio in cui la tolleranza agli errori e la robustezza si sovrappongono, ma gli autori usano "robusti" per descrivere applicazioni, protocolli e algoritmi, mentre usano la "tolleranza agli errori" in riferimento alla topologia e componenti: