Probar cómo se comportan los sistemas informáticos bajo tensiones inusuales
En informática , la inyección de fallos es una técnica de prueba para comprender cómo se comportan los sistemas informáticos cuando se someten a tensiones inusuales. Esto se puede lograr utilizando medios físicos o basados en software, o utilizando un enfoque híbrido. [1] Las inyecciones de fallos físicos ampliamente estudiadas incluyen la aplicación de altos voltajes, temperaturas extremas y pulsos electromagnéticos en componentes electrónicos, como la memoria de la computadora y las unidades centrales de procesamiento . [2] [3] Al exponer los componentes a condiciones más allá de sus límites operativos previstos, los sistemas informáticos pueden verse obligados a ejecutar instrucciones incorrectas y corromper datos críticos.
En las pruebas de software , la inyección de fallos es una técnica para mejorar la cobertura de una prueba mediante la introducción de fallos en las rutas de código de prueba; en particular, las rutas de código de manejo de errores , que de otro modo rara vez se seguirían. A menudo se utiliza con pruebas de estrés y se considera ampliamente que es una parte importante del desarrollo de software robusto . [4] Las pruebas de robustez [5] (también conocidas como pruebas de sintaxis, fuzzing o pruebas fuzz ) son un tipo de inyección de fallos que se utiliza comúnmente para probar vulnerabilidades en interfaces de comunicación como protocolos, parámetros de línea de comandos o API.
La propagación de una falla hasta convertirse en una falla observable sigue un ciclo bien definido. Cuando se ejecuta, una falla puede causar un error, que es un estado no válido dentro de los límites del sistema. Un error puede causar más errores dentro de los límites del sistema, por lo tanto, cada nuevo error actúa como una falla, o puede propagarse a los límites del sistema y ser observable. Cuando se observan estados de error en los límites del sistema, se denominan fallas. Este mecanismo se denomina ciclo falla-error-falla [6] y es un mecanismo clave en la confiabilidad .
Historia
La técnica de inyección de fallos se remonta a la década de 1970 [7] , cuando se utilizó por primera vez para inducir fallos a nivel de hardware. Este tipo de inyección de fallos se denomina Inyección de fallos implementada en hardware (HWIFI) e intenta simular fallos de hardware dentro de un sistema. Los primeros experimentos con fallos de hardware implicaban nada más que cortocircuitar las conexiones en las placas de circuitos y observar el efecto en el sistema (puentear fallos). Se utilizó principalmente como prueba de la fiabilidad del sistema de hardware. Más tarde se desarrolló hardware especializado para ampliar esta técnica, como dispositivos para bombardear áreas específicas de una placa de circuitos con radiación intensa. Pronto se descubrió que los fallos podían inducirse mediante técnicas de software y que aspectos de esta técnica podían ser útiles para evaluar sistemas de software. En conjunto, estas técnicas se conocen como Inyección de fallos implementada en software (SWIFI).
Inyección de fallas implementada por software
Las técnicas SWIFI se pueden clasificar en dos tipos: inyección en tiempo de compilación e inyección en tiempo de ejecución.
La inyección en tiempo de compilación es una técnica de inyección en la que se modifica el código fuente para inyectar fallas simuladas en un sistema. Un método se denomina prueba de mutación , que modifica las líneas de código existentes para que contengan fallas. Un ejemplo simple de esta técnica podría ser cambiar a = a + 1
aa = a – 1
La mutación del código produce fallas muy similares a las que los programadores agregan involuntariamente.
Un refinamiento de la mutación de código es la inyección de errores de inserción de código , que agrega código en lugar de modificar el código existente. Esto se hace generalmente mediante el uso de funciones de perturbación, que son funciones simples que toman un valor existente y lo perturban mediante cierta lógica para convertirlo en otro valor, por ejemplo
int pFunc ( int valor ) { valor de retorno + 20 ; } int main ( int argc , char * argv []) { int a = pFunc ( aFunction ( atoi ( argv [ 1 ]))); if ( a > 20 ) { /* hacer algo */ } else { /* hacer algo más */ } }
En este caso, pFunc es la función de perturbación y se aplica al valor de retorno de la función que se ha llamado introduciendo un fallo en el sistema.
Las técnicas de inyección en tiempo de ejecución utilizan un disparador de software para inyectar una falla en un sistema de software en ejecución. Las fallas se pueden inyectar a través de varios métodos físicos y los disparadores se pueden implementar de varias maneras, como: disparadores basados en tiempo (cuando el temporizador alcanza un tiempo específico, se genera una interrupción y el controlador de interrupciones asociado con el temporizador puede inyectar la falla); disparadores basados en interrupciones (se utilizan excepciones de hardware y mecanismos de trampa de software para generar una interrupción en un lugar específico en el código del sistema o en un evento particular dentro del sistema, por ejemplo, el acceso a una ubicación de memoria específica).
Las técnicas de inyección en tiempo de ejecución pueden utilizar varias técnicas diferentes para insertar fallas en un sistema a través de un disparador.
- Corrupción del espacio de memoria: Esta técnica consiste en corromper la RAM, los registros del procesador y el mapa de E/S.
- Técnicas de interposición de llamadas al sistema: se ocupa de la propagación de fallas desde las interfaces del núcleo del sistema operativo hasta el software de los sistemas en ejecución. Esto se hace interceptando las llamadas del sistema operativo realizadas por el software de nivel de usuario e inyectando fallas en ellas.
- Inyección de fallas a nivel de red: esta técnica se ocupa de la corrupción, pérdida o reordenamiento de paquetes de red en la interfaz de red.
Estas técnicas a menudo se basan en las facilidades de depuración que ofrecen las arquitecturas de procesadores de computadora.
Inyección de fallos en el software de protocolo
Los sistemas de software complejos, especialmente los sistemas distribuidos de múltiples proveedores basados en estándares abiertos, realizan operaciones de entrada/salida para intercambiar datos a través de intercambios estructurados y con estado, conocidos como " protocolos ". Un tipo de inyección de fallas que es particularmente útil para probar implementaciones de protocolos (un tipo de código de software que tiene la característica inusual de que no puede predecir ni controlar su entrada) es el fuzzing . El fuzzing es una forma especialmente útil de prueba de caja negra , ya que las diversas entradas no válidas que se envían al sistema de software no dependen de los detalles del código que se ejecuta dentro del sistema y no se crean en función del conocimiento de estos.
Inyección de fallas implementada por hardware
Esta técnica se aplicó en un prototipo de hardware. Los probadores inyectan fallas al cambiar el voltaje de algunas partes de un circuito, aumentar o disminuir la temperatura, bombardear la placa con radiación de alta energía, etc.
Características de la inyección de fallas
Las fallas tienen tres parámetros principales. [8]
- Tipo: ¿Qué tipo de falla se debe inyectar? Por ejemplo, fallas por defecto, fallas por retraso, fallas que ignoran algunas funciones, fallas que ignoran algunos parámetros o variables, fallas aleatorias, fallas de polarización, ruido, etc. La amplitud de cada falla también es importante.
- Hora: ¿Cuándo debe activarse? Por ejemplo, la hora de activación de la falla o la condición de activación de la falla.
- Ubicación: ¿Dónde debería estar en el sistema? Por ejemplo, falla en el enlace/conexión entre sistemas, fallas dentro de sistemas/subsistemas/funciones, etc.
Estos parámetros crean el ámbito del espacio de fallas. El ámbito del espacio de fallas aumentará exponencialmente al aumentar la complejidad del sistema. Por lo tanto, el método tradicional de inyección de fallas no será aplicable para su uso en los sistemas ciberfísicos modernos, porque serán muy lentos y encontrarán una pequeña cantidad de fallas (menor cobertura de fallas). Por lo tanto, los evaluadores necesitan un algoritmo eficiente para elegir fallas críticas que tengan un mayor impacto en el comportamiento del sistema. Por lo tanto, la principal pregunta de investigación es cómo encontrar fallas críticas en el ámbito del espacio de fallas que tengan efectos catastróficos en el comportamiento del sistema. A continuación, se presentan algunos métodos que pueden ayudar a la inyección de fallas para explorar eficientemente el espacio de fallas para alcanzar una mayor cobertura de fallas en menos tiempo de simulación.
- Análisis de sensibilidad: [9] En este método, se ha utilizado el análisis de sensibilidad para identificar las señales más importantes que tienen un mayor impacto en la especificación del sistema. Al identificar esas señales o parámetros importantes, la herramienta de inyección de fallas se centrará en esas señales efectivas en lugar de centrarse en todas las señales del sistema.
- Aprendizaje de refuerzo: [10] En este método, se ha utilizado el algoritmo de aprendizaje de refuerzo para explorar de manera eficiente el espacio de fallas y encontrar fallas críticas.
Herramientas de inyección de fallas
Aunque este tipo de fallos se pueden inyectar manualmente, la posibilidad de introducir un fallo no deseado es alta, por lo que existen herramientas para analizar un programa automáticamente e insertar fallos.
Herramientas de investigación
Se han desarrollado varias herramientas SWIFI y aquí se ofrece una selección de ellas. Las seis herramientas de inyección de fallos más utilizadas son Ferrari, FTAPE, Doctor, Orchestra, Xception y Grid-FIT.
- MODIFI (MODel-Implemented Fault Injection) es una herramienta de inyección de fallas para la evaluación de la robustez de los modelos de comportamiento de Simulink. Admite el modelado de fallas en XML para la implementación de modelos de fallas específicos del dominio. [11]
- Ferrari (Fault and ERRor Automatic Real-time Injection) se basa en trampas de software que inyectan errores en un sistema. Las trampas se activan mediante una llamada a una ubicación de memoria específica o un tiempo de espera. Cuando se llama a una trampa, el controlador inyecta una falla en el sistema. Las fallas pueden ser transitorias o permanentes. La investigación realizada con Ferrari muestra que la detección de errores depende del tipo de falla y de dónde se inserta la falla. [12]
- FTAPE (Fault Tolerance and Performance Evaluator) puede inyectar fallos, no solo en la memoria y los registros, sino también en los accesos al disco. Esto se logra insertando un controlador de disco especial en el sistema que puede inyectar fallos en los datos enviados y recibidos desde la unidad de disco. FTAPE también tiene una unidad de carga sintética que puede simular cantidades específicas de carga para fines de prueba de robustez. [13]
- DOCTOR (IntegrateD SOftware Fault InjeCTiOn EnviRonment) permite la inyección de fallos de memoria y de registros, así como de comunicaciones de red. Utiliza una combinación de time-out, trap y modificación de código. Los disparadores time-out inyectan fallos transitorios de memoria y los traps inyectan fallos transitorios de hardware emulados, como corrupción de registros. La modificación de código se utiliza para inyectar fallos permanentes. [14]
- Orchestra es un inyector de fallas controlado por scripts que se basa en la inyección de fallas a nivel de red. Su uso principal es la evaluación y validación de las características de tolerancia a fallas y temporización de protocolos distribuidos. Orchestra se desarrolló inicialmente para el sistema operativo Mach y utiliza ciertas características de esta plataforma para compensar las latencias introducidas por el inyector de fallas. También se ha portado con éxito a otros sistemas operativos. [15]
- Xception está diseñado para aprovechar las características avanzadas de depuración disponibles en muchos procesadores modernos. Está escrito para no requerir ninguna modificación de la fuente del sistema ni la inserción de trampas de software, ya que las capacidades de manejo de excepciones del procesador activan la inyección de fallas. Estos activadores se basan en accesos a ubicaciones de memoria específicas. Dichos accesos pueden ser para obtener datos o instrucciones. Por lo tanto, es posible reproducir con precisión las ejecuciones de pruebas porque los activadores se pueden vincular a eventos específicos, en lugar de tiempos de espera. [7]
- Grid-FIT (Grid – Fault Injection Technology) [16] es un método y una herramienta de evaluación de la confiabilidad para evaluar los servicios de Grid mediante la inyección de fallas. Grid-FIT se deriva de un inyector de fallas anterior, WS-FIT [17], que estaba orientado a los servicios web Java implementados mediante el transporte Apache Axis. Grid-FIT utiliza un nuevo mecanismo de inyección de fallas que permite utilizar la inyección de fallas a nivel de red para brindar un nivel de control similar a la inyección de fallas por inserción de código, pero al mismo tiempo es menos invasivo. [18]
- LFI (Library-level Fault Injector) [19] es un conjunto de herramientas de prueba automáticas que se utilizan para simular, en un entorno de prueba controlado, situaciones excepcionales que los programas deben manejar en tiempo de ejecución pero que no son fáciles de verificar mediante pruebas de entrada únicamente. LFI identifica automáticamente los errores expuestos por bibliotecas compartidas, encuentra código de recuperación de errores potencialmente defectuoso en los binarios del programa e inyecta los fallos deseados en el límite entre las bibliotecas compartidas y las aplicaciones.
- FIBlock (Fault Injection Block), [20] un método de inyección de fallas basado en modelos implementado como un bloque Simulink altamente personalizable. Admite la inyección en modelos Simulink de MATLAB de fallas típicas de componentes heterogéneos esenciales de sistemas ciberfísicos, como sensores, hardware informático y redes. Las entradas y salidas de activación adicionales del bloque permiten el modelado de fallas condicionales. Además, dos o más FIBlocks conectados con las señales de activación pueden modelar los denominados errores encadenados.
Herramientas comerciales
- Más allá de la seguridad beSTORM [21] es una herramienta comercial de análisis de seguridad de software de caja negra . A menudo se utiliza durante el desarrollo por parte de los fabricantes de equipos originales, pero también se utiliza para probar productos antes de la implementación, en particular en los sectores aeroespacial, bancario y de defensa. El proceso de prueba de beSTORM comienza con los escenarios de ataque más probables y luego recurre a un análisis exhaustivo basado en la generación de vulnerabilidades . beSTORM proporciona módulos para protocolos comunes y "aprende automáticamente" protocolos nuevos o propietarios, incluidos los ataques basados en mutaciones. Aspectos destacados: análisis binario y textual, pruebas de protocolos personalizados, depuración y seguimiento de pila, desarrollo independiente del lenguaje, compatible con CVE.
- ExhaustiF es una herramienta de software comercial que se utiliza para realizar pruebas de caja gris basadas en la inyección de fallos de software (SWIFI) para mejorar la fiabilidad de los sistemas con uso intensivo de software. La herramienta se puede utilizar durante las fases de integración y prueba de sistemas de cualquier ciclo de vida de desarrollo de software, complementando también otras herramientas de prueba. ExhaustiF puede inyectar fallos tanto en el software como en el hardware. Al inyectar fallos simulados en el software, ExhaustiF ofrece los siguientes tipos de fallos: corrupción de variables y corrupción de procedimientos. El catálogo de inyecciones de fallos de hardware incluye fallos en la memoria (E/S, RAM) y la CPU (unidad entera, unidad flotante). Hay diferentes versiones disponibles para RTEMS/ERC32, RTEMS/Pentium, Linux/Pentium y MS-Windows/Pentium. [22]
- Holodeck [23] es una herramienta de prueba desarrollada por Security Innovation que utiliza la inyección de fallas para simular errores de sistemas y aplicaciones del mundo real para aplicaciones y servicios de Windows. Entre los clientes de Holodeck se incluyen muchas de las principales empresas de desarrollo de software comercial, incluidas Microsoft, Symantec, EMC y Adobe. Proporciona un entorno controlado y repetible en el que analizar y depurar el código de manejo de errores y las superficies de ataque de las aplicaciones para realizar pruebas de fragilidad y seguridad. Simula fallas de fuzzing de archivos y redes, así como una amplia gama de otras fallas de recursos, sistemas y personalizadas. Analiza el código y recomienda planes de prueba y también realiza el registro de llamadas de función, la interceptación de API, pruebas de estrés, análisis de cobertura de código y muchas otras funciones de garantía de seguridad de aplicaciones.
- La plataforma Chaos Engineering de Proofdock se centra en la plataforma de nube Microsoft Azure . Inyecta fallas a nivel de infraestructura, plataforma y aplicación.
- Gremlin es una plataforma de "Failure-as-a-Service" que ayuda a las empresas a construir sistemas más resilientes mediante la práctica de la ingeniería del caos. Gremlin recrea las fallas más comunes en tres categorías ( recurso , red y estado ) al inyectar fallas de manera segura en los sistemas para identificar y reparar de manera proactiva fallas desconocidas.
- Codenomicon Defensics [24] es un marco de automatización de pruebas de caja negra que realiza la inyección de fallas en más de 150 interfaces diferentes, incluidos protocolos de red, interfaces API, archivos y estructuras XML. El producto comercial se lanzó en 2001, después de cinco años de investigación en la Universidad de Oulu en el área de inyección de fallas de software. VTT, uno de los miembros del consorcio PROTOS, publicó un trabajo de tesis que explica los principios de fuzzing utilizados. [5]
- El Mu Service Analyzer [25] es una herramienta comercial de pruebas de servicios desarrollada por Mu Dynamics . [26] El Mu Service Analyzer realiza pruebas de caja negra y caja blanca de servicios basados en sus interfaces de software expuestas, utilizando simulaciones de denegación de servicio, variaciones de tráfico a nivel de servicio (para generar entradas no válidas) y la reproducción de desencadenadores de vulnerabilidad conocidos. Todas estas técnicas ejercitan la validación de entrada y el manejo de errores y se utilizan junto con monitores de protocolo válidos y SNMP para caracterizar los efectos del tráfico de prueba en el sistema de software. El Mu Service Analyzer permite a los usuarios establecer y rastrear métricas de confiabilidad, disponibilidad y seguridad a nivel de sistema para cualquier implementación de protocolo expuesta. La herramienta ha estado disponible en el mercado desde 2005 por clientes en América del Norte, Asia y Europa, especialmente en los mercados críticos de operadores de red (y sus proveedores) y sistemas de control industrial (incluida la infraestructura crítica ).
- Xception [27] es una herramienta de software comercial desarrollada por Critical Software SA [28] utilizada para pruebas de caja negra y caja blanca basadas en inyección de fallas de software (SWIFI) e inyección de fallas de Scan Chain (SCIFI). Xception permite a los usuarios probar la robustez de sus sistemas o solo parte de ellos, permitiendo tanto la inyección de fallas de software como la inyección de fallas de hardware para un conjunto específico de arquitecturas. La herramienta se ha utilizado en el mercado desde 1999 y tiene clientes en los mercados americano, asiático y europeo, especialmente en el mercado crítico de la industria aeroespacial y el mercado de telecomunicaciones. La familia completa de productos Xception incluye: a) La herramienta principal Xception, un líder de última generación en tecnología de inyección de fallas implementada por software (SWIFI); b) Las herramientas complementarias Easy Fault Definition (EFD) y Xtract (Xception Analysis Tool); c) La herramienta Xception extendida (eXception), con las extensiones de inyección de fallas para Scan Chain y forzado a nivel de pin.
- AWS Fault Injection Service es un servicio totalmente administrado para ejecutar experimentos de inyección de fallas en AWS que facilitan la mejora del rendimiento, la capacidad de observación y la resiliencia de una aplicación. Los experimentos de inyección de fallas se utilizan en la ingeniería del caos, que es la práctica de someter a estrés a una aplicación en entornos de prueba o producción mediante la creación de eventos disruptivos, como un aumento repentino en el consumo de CPU o memoria, la observación de cómo responde el sistema y la implementación de mejoras.
Bibliotecas
- libfiu (Fault injection in userspace), biblioteca C para simular fallos en rutinas POSIX sin modificar el código fuente. Se incluye una API para simular fallos arbitrarios en tiempo de ejecución en cualquier punto del programa.
- TestApi es una biblioteca API de código compartido que proporciona funciones para pruebas de inyección de fallas, así como otros tipos de pruebas, estructuras de datos y algoritmos para aplicaciones .NET.
- Fuzzino es una biblioteca de código abierto que proporciona un amplio conjunto de heurísticas de fuzzing que se generan a partir de una especificación de tipo y/o valores válidos.
- krf es un módulo de kernel de Linux de código abierto que proporciona una función configurable para devolver de manera probabilística valores de error para llamadas del sistema. Se explica con más detalle en la publicación del blog.
- nlfaultinjection está diseñado para proporcionar un marco de inyección de fallas simple y portátil capaz de ejecutarse en casi cualquier sistema, sin importar cuán restringido esté y depende únicamente de la biblioteca estándar de C.
Inyección de fallos en propiedades funcionales o casos de prueba
A diferencia de las pruebas de mutación tradicionales, en las que se generan fallas mutantes y se inyectan en la descripción del código del modelo, también se ha investigado la aplicación de una serie de operadores de mutación recientemente definidos directamente a las propiedades del modelo en lugar de al código del modelo. [29] Las propiedades mutantes que se generan a partir de las propiedades iniciales (o casos de prueba) y que son validadas por el verificador de modelos deben considerarse como propiedades nuevas que se han omitido durante el procedimiento de verificación inicial. Por lo tanto, agregar estas propiedades recientemente identificadas a la lista existente de propiedades mejora la métrica de cobertura de la verificación formal y, en consecuencia, conduce a un diseño más confiable.
Aplicación de inyección de fallas
La inyección de fallos puede adoptar muchas formas. En las pruebas de sistemas operativos , por ejemplo, la inyección de fallos suele ser realizada por un controlador ( software en modo kernel ) que intercepta llamadas del sistema (llamadas al kernel) y devuelve aleatoriamente un fallo para algunas de las llamadas. Este tipo de inyección de fallos es útil para probar software en modo usuario de bajo nivel. Para software de nivel superior, existen varios métodos para inyectar fallos. En código administrado , es común utilizar instrumentación . Aunque la inyección de fallos se puede realizar a mano, existen varias herramientas de inyección de fallos para automatizar el proceso de inyección de fallos. [30]
Dependiendo de la complejidad de la API para el nivel en el que se inyectan las fallas, las pruebas de inyección de fallas a menudo deben diseñarse cuidadosamente para minimizar la cantidad de falsos positivos. Incluso una prueba de inyección de fallas bien diseñada a veces puede producir situaciones que son imposibles en el funcionamiento normal del software. Por ejemplo, imagine que hay dos funciones de API , Commit
y PrepareForCommit
, de modo que, por sí solas, cada una de estas funciones puede fallar, pero si PrepareForCommit
se llama y tiene éxito, se garantiza que una llamada posterior a Commit
tendrá éxito. Ahora considere el siguiente código:
error = PrepareForCommit (); si ( error == ÉXITO ) { error = Commit (); afirmar ( error == ÉXITO ); }
A menudo, no será posible que la implementación de inyección de errores realice un seguimiento de suficiente estado para garantizar lo que garantizan las funciones de API. En este ejemplo, una prueba de inyección de errores del código anterior podría afectar a assert , mientras que esto nunca sucedería en una operación normal.
Véase también
Referencias
- ^ Moradi, Mehrdad; Van Acker, Bert; Vanherpen, Ken; Denil, Joachim (2019). "Inyección de fallas híbridas implementadas por modelos para Simulink (demostraciones de herramientas)". En Chamberlain, Roger; Taha, Walid; Törngren, Martin (eds.). Sistemas ciberfísicos. Diseño basado en modelos . Apuntes de clase en informática. Vol. 11615. Springer International Publishing. págs. 71–90. doi :10.1007/978-3-030-23703-5_4. ISBN 9783030237035.S2CID 195769468 .
- ^ Shepherd, Carlton; Markantonakis, Konstantinos; Van Heijningen, Nico; Aboulkassimi, Driss; Gaine, Clement; Heckmann, Thibaut; Naccache, David (2021). "Inyección de fallas físicas y ataques de canal lateral en dispositivos móviles: un análisis exhaustivo". Computadoras y seguridad . 111 (102471). Elsevier: 102471. arXiv : 2105.04454 . doi :10.1016/j.cose.2021.102471. S2CID 236957400.
- ^ Bar-El, Hagai; Choukri, Hamid; Naccache, David; Tunstall, Michael; Whelan, Claire (2004). "La guía del aprendiz de brujo para los ataques de falla". Actas del IEEE . 94 (2). IEEE: 370–382. doi :10.1109/JPROC.2005.862424. S2CID 2397174.
- ^ J. Voas, "Inyección de fallas para las masas", Computer, vol. 30, págs. 129-130, 1997.
- ^ ab Kaksonen, Rauli. Un método funcional para evaluar la seguridad de la implementación de protocolos. 2001.
- ^ A. Avizienis, J.-C. Laprie, Brian Randell y C. Landwehr, "Conceptos básicos y taxonomía de la informática confiable y segura", Dependable and Secure Computing, vol. 1, págs. 11–33, 2004.
- ^ ab JV Carreira, D. Costa y SJ G, "La inyección de fallas verifica la confiabilidad del sistema informático", IEEE Spectrum, págs. 50-55, 1999.
- ^ Benso, Alfredo; Prinetto, Paolo, eds. (2003). Técnicas y herramientas de inyección de fallas para la evaluación de la confiabilidad de sistemas integrados. Frontiers in Electronic Testing. Springer US. ISBN 978-1-4020-7589-6.
- ^ "Optimización de la inyección de fallas en la co-simulación FMI mediante partición de sensibilidad | Actas de la Conferencia de Simulación de Verano de 2019". dl.acm.org . Consultado el 14 de junio de 2020 .
- ^ Moradi, M., Oakes, BJ, Saraoglu, M., Morozov, A., Janschek, K. y Denil, J., 2020. EXPLORACIÓN DEL ESPACIO DE PARÁMETROS DE FALLA UTILIZANDO LA INYECCIÓN DE FALLA BASADA EN EL APRENDIZAJE DE REFUERZO.
- ^ Rickard Svenningsson, Jonny Vinter, Henrik Eriksson y Martin Torngren, "MODIFI: una herramienta de inyección de fallas implementada por MODel", Lecture Notes in Computer Science, 2010, volumen 6351/2010, 210-222.
- ^ GA Kanawati, NA Kanawati y JA Abraham, "FERRARI: Un sistema flexible de inyección de errores y fallas basado en software", IEEE Transactions on Computers, vol. 44, págs. 248, 1995.
- ^ T. Tsai y R. Iyer, "FTAPE: una herramienta de inyección de fallas para medir la tolerancia a fallas", presentado en Computing in aerospace, San Antonio; TX, 1995.
- ^ S. Han, KG Shin y HA Rosenberg, "DOCTOR: Un entorno integrado de inyección de fallas de software para sistemas distribuidos en tiempo real", presentado en el Simposio internacional sobre rendimiento y confiabilidad de computadoras, Erlangen, Alemania, 1995.
- ^ S. Dawson, F. Jahanian y T. Mitton, "ORCHESTRA: Un entorno de sondeo e inyección de fallos para probar implementaciones de protocolos", presentado en el Simposio internacional sobre rendimiento y confiabilidad de computadoras, Urbana-Champaign, EE. UU., 1996.
- ^ Sitio web de Grid-FIT Archivado el 2 de febrero de 2008 en Wayback Machine.
- ^ N. Looker, B. Gwynne, J. Xu y M. Munro, "Un enfoque basado en ontología para determinar la confiabilidad de arquitecturas orientadas a servicios", en las actas del 10º Taller internacional IEEE sobre sistemas confiables en tiempo real orientados a objetos, EE. UU., 2005.
- ^ N. Looker, M. Munro y J. Xu, "Una comparación de la inyección de fallas a nivel de red con la inserción de código", en las actas de la 29.ª Conferencia internacional sobre software y aplicaciones informáticas del IEEE, Escocia, 2005.
- ^ Sitio web de LFI
- ^ Flatag (16 de mayo de 2020), Flatag/FIBlock , consultado el 16 de mayo de 2020
- ^ Información del producto beSTORM
- ^ Sitio de herramientas SWIFI de ExhaustiF
- ^ Descripción general del producto Holodeck Archivado el 13 de octubre de 2008 en Wayback Machine
- ^ Descripción general del producto Codenomicon Defensics
- ^ Analizador de servicios Mu
- ^ Mu Dinámicas, Inc.
- ^ Sitio web de Xception
- ^ Software crítico SA
- ^ Abbasinasab, Ali; Mohammadi, Mehdi; Mohammadi, Siamak; Yanushkevich, Svetlana; Smith, Michael (2011). "Inyección de fallas mutantes en propiedades funcionales de un modelo para mejorar las métricas de cobertura". 2011 14.ª Conferencia Euromicro sobre diseño de sistemas digitales . págs. 422–425. doi :10.1109/DSD.2011.57. ISBN. 978-1-4577-1048-3.S2CID15992130 .
- ^ N. Looker, M. Munro y J. Xu, "Simulación de errores en servicios web", Revista internacional de sistemas de simulación, ciencia y tecnología, vol. 5, 2004.
Enlaces externos
- Software de certeza de Certess Inc.
- Cómo DoorDash utiliza las pruebas de inyección de fallas para mejorar la confiabilidad