Título: Inyección de errores para evaluación de aspectos no funcionales en sistemas
Marco de Trabajo: Investigación
Área de desarrollo: Ingeniería de Software, Testing
Autor: Ariel Sabiguero
Contacto: asabigue@fing.edu.uy
Día: MARTES
Hora: 11:45
Palabras Claves: software error injection, RAS, hardware fault injection, sistemas embebidos
Resumen:
Trabajo realizado en conjunto entre Ariel Sabiguero y Andrés Aguirre
Los requerimientos de funcionalidad impuestos por el mercado en dispositivos embebidos han dado
paso a una nueva generación de sistemas de este tipo, que involucran la utilización de sistemas operativos
estándar como parte de la plataforma. Ejemplos de éstos son muchos dispositivos de routing doméstico, sistemas GPS
y teléfonos celulares entre otros. Una opción frecuente es la utilización del sistema operativo GNU/Linux,
que ofrece una amplia gama de servicios y es de ámplio conocimiento. La estandarización de sus características de tiempo real
lo hacen adecuado para aplicaciones de control inclusive. Aunque dispongamos de software perfecto,
éste va a ser ejecutado en hardware que presenta fallas, con una tasa muy baja, pero fallas al fin.
Usualmente los defectos en el software son más frecuentes que los problemas introducidos por fallos en el
hardware, que no es ajeno a malos funcionamientos. Estos fallos pueden conducir al software a estados no considerados,
con comportamientos no especificados ni validados. Un error aislado de memoria, dependiendo del lugar dónde ocurra,
puede desde pasar inadvertido, modificar el valor de una variable del programa hasta modificar parte del código del programa.
Estos cambios pueden generar desviaciones en el comportamiento del sistema bajo prueba, haciéndolo apartarse de sus
objetivos operacionales. Estos estados y situaciones no pueden ser reproducidos con las técnicas tradicionales de testing sin
lograr tener una gran intrusión sobre el sistema bajo prueba. Dadas las características de los sistemas embebidos,
no es viable la utilización de técnicas intrusivas de testing. En general, en sistemas donde no tenemos acceso a su implementación,
tampoco es posible reproducir estos problemas sin técnicas de inyección de defectos.
En este contexto se refuerza la idea de utilizar técnicas de inyección de defectos para lograr tener una medida de calidad del
software bajo situaciones externas, que pueden ser predecibles pero que generalmente no son tomadas en cuenta.
Utilizando estas técnicas podemos anticipar el comportamiento de nuestro sistema en entornos operativos reales,
y medir el impacto de estas fallas en parámetros como reliability, availiability y safety (RAS).
Las técnicas de inyección de fallas son un proceso que no aporta información sobre cuan buena es determinada implementación,
en su lugar nos permiten estimar cuan mal puede llegar a comportarse ante eventos externos, lo que es de suma importancia
en los escenarios de aplicación en que se utilizan los sistemas embebidos. Los conceptos detrás de RAS se convierten en vitales
cuando entran en juego vidas humanas o los costos de fallos son muy elevados. En la bibliografía se pueden encontrar varios casos
conocidos de catástrofes que han ocurrido a causa de este tipo de problemas, tal es el caso del Ariane 5 o el Therac-25.
En este trabajo se presenta un módulo de software para la inyección de fallos para el sistema GNU/ Linux,
el cual permite realizar corrupciones de memoria y registros con disparos temporales, y presenta un mecanismo de intercepción de
funciones con bajo nivel de intrusividad que permite corromper los argumentos de entrada y/o el valor de retorno de las funciones.
Durante la presentación se expondrá el estado del arte del proyecto, así como, las interrogantes por abiertas este.
|