Ambos describen la consistencia del comportamiento de una aplicación, pero la "robustez" describe la respuesta de una aplicación a su entrada , mientras que la "tolerancia a fallas" describe la respuesta de una aplicación a su entorno .
Una aplicación es robusta cuando puede funcionar consistentemente con datos inconsistentes. Por ejemplo: una aplicación de mapas es robusta cuando puede analizar direcciones en varios formatos con varios errores ortográficos y devolver una ubicación útil. Un reproductor de música es robusto cuando puede continuar decodificando un MP3 después de encontrar un cuadro mal formado. Un editor de imágenes es robusto cuando puede modificar una imagen con metadatos EXIF incrustados que podría no reconocer, especialmente si puede realizar cambios en la imagen sin destruir los datos EXIF.
Una aplicación es tolerante a fallas cuando puede funcionar consistentemente en un entorno inconsistente. Una aplicación de base de datos es tolerante a fallas cuando puede acceder a un fragmento alternativo cuando el primario no está disponible. Una aplicación web es tolerante a fallas cuando puede continuar manejando solicitudes de caché incluso cuando no se puede acceder a un host de API. Un subsistema de almacenamiento es tolerante a fallas cuando puede devolver resultados calculados a partir de la paridad cuando un miembro del disco está fuera de línea.
En ambos casos, se espera que la aplicación permanezca estable, se comporte de manera uniforme, conserve la integridad de los datos y brinde resultados útiles incluso cuando se encuentre un error. Pero al evaluar la robustez, puede encontrar criterios que involucren datos, mientras que al evaluar la tolerancia a fallas, encontrará criterios que involucren tiempo de actividad.
Uno no necesariamente conduce al otro. Una aplicación móvil de reconocimiento de voz puede ser muy robusta, proporcionando una capacidad asombrosa para reconocer el habla de manera consistente en una variedad de acentos regionales con grandes cantidades de ruido de fondo. Pero si es inútil sin una conexión rápida de datos celulares, no es muy tolerante a fallas. Del mismo modo, una aplicación de publicación web puede ser inmensamente tolerante a fallas, con múltiples redundancias en todos los niveles, capaz de perder centros de datos completos sin fallar, pero si se cae una tabla de usuario y se bloquea la primera vez que alguien se registra con un apóstrofe en su apellido , no es robusto en absoluto.
Si está buscando literatura académica para ayudar a describir la distinción, puede buscar en dominios específicos que utilizan software, en lugar de software en general. La investigación de aplicaciones distribuidas podría ser un terreno fértil para los criterios de tolerancia a fallas, y Google ha publicado algunas de sus investigaciones que podrían ser relevantes. La investigación de modelos de datos probablemente aborda cuestiones de robustez, ya que los científicos están particularmente interesados en las propiedades de robustez que producen resultados reproducibles. Probablemente pueda encontrar documentos que describan aplicaciones estadísticas que podrían ser útiles, como en el modelado climático, el modelo de propagación de RF o la secuenciación del genoma. También encontrará ingenieros que discuten el "diseño robusto" en cosas como los sistemas de control.
El documento técnico del Sistema de archivos de Google describe su enfoque de los problemas de tolerancia a fallas, que generalmente implica la suposición de que las fallas de los componentes son rutinarias y, por lo tanto, la aplicación debe adaptarse a ellas:
Este proyecto para una clase en Rutgers admite una definición orientada a "falla de componentes" de "tolerancia a fallas":
Hay muchos documentos sobre "modelado robusto XYZ", dependiendo del campo que investigue. La mayoría describirá sus criterios para "robusto" en el resumen, y encontrará que todo tiene que ver con la forma en que el modelo maneja la entrada.
Este informe de un científico del clima de la NASA describe la robustez como un criterio para evaluar los modelos climáticos:
Este artículo de un investigador del MIT examina aplicaciones de protocolo inalámbrico, un dominio en el que se superponen la tolerancia a fallas y la solidez, pero los autores usan "robusto" para describir aplicaciones, protocolos y algoritmos, mientras que usan "tolerancia a fallas" en referencia a la topología y componentes: