Documentos de Académico
Documentos de Profesional
Documentos de Cultura
▪ Fiabilidad: es la medida del éxito con la que el sistema se ajusta a alguna especificación
definitiva de su comportamiento.
▪ Errores: son la manifestación externa de un problema interno del sistema. Suceden cuando
el comportamiento del sistema no se ajusta a la especificación dada.
▪ Fallos o Defectos: son las causas (mecánicas, algorítmicas o eléctricas) por las que se
producen un error.
Los sistemas están formados generalmente por componentes que son, a su vez, otros sistemas.
▪ Transitorios: son fallos que se produce sólo durante un intervalo de tiempo (Ejemplo: fallo
en componentes hardware debidos a interferencias de elementos externos).
▪ Intermitentes: son fallos transitorios que ocurren de vez en cuando (Ejemplo: fallo que se
produce en un componente ante ciertas circunstancias periódicas).
¿Cuándo se puede considerar a un fallo dentro del dominio del tiempo o del valor?
Un sistema proporciona servicios, y, por tanto, puede fallar de varias maneras diferentes. Debido a
ello, podemos clasificar los modos de fallo de un sistema de acuerdo al impacto que tendrá en los
servicios que proporciona, identificando los dominios generales de fallos siguientes:
▪ Fallos de Valor: el valor asociado con el servicio es erróneo. Los fallos de valor pueden derivar
en un error de límites, ya que podría estar aún dentro del rango correcto de valores, o fuera
de ese rango esperado para ese servicio.
▪ Fallos de Tiempo: el servicio se completa a destiempo. Se puede dar el caso que el servicio
sea entregado:
▪ Arbitrarios: son fallos incontrolados, siendo estos una combinación de los fallos de valor y
los fallos de tiempo.
¿Como se pueden prevenir los fallos?
La prevención de fallos tiene como objetivo eliminar cualquier posibilidad de ocurrencia de fallos
antes de que el sistema entre en funcionamiento.
En contraparte, la tolerancia a fallos permite que un sistema siga funcionando, aunque exista
presencia de fallos.
Ambos enfoques pretenden producir sistemas fiables con modos de fallo bien definidos. En la
prevención de fallos existen dos fases:
▪ Eliminación: consiste en procedimientos para encontrar y eliminar las causas de los errores.
Los fallos que no puedan prevenirse, ¿cómo puede proporcionar el sistema tolerancia a estos?
El sistema debe reconfigurarse, habitualmente haciendo funcionar algún tipo de componente
redundante que pueda sustituir al componente causante del fallo, por lo que debe conseguirse que
el sistema sea tolerante a fallos.
Tolerancia a Fallos
Con la tolerancia a fallos se permite que un sistema siga funcionando incluso ante la presencia de
fallos. Existen los siguientes niveles de tolerancia a fallos:
▪ Tolerancia Total: el sistema continúa operativo durante un tiempo limitado ante la presencia
de fallos sin que éste tenga una pérdida significativa de funcionalidad o prestaciones.
El nivel requerido en cada caso dependerá de la aplicación. Los sistemas más críticos si exigirán una
tolerancia total frente a fallos.
Cuando al comparar los votos se producen resultados diferentes, se usan técnicas de votación
inexacta.
a) Suposición en la que se basa y ¿qué hay que realizar para que sea cierta y cuándo deja de
ser válida?
Se basa en la suposición de que se puede especificar completamente un programa de forma
consistente y sin ambigüedad, y que, los programas que han sido desarrollados
independientemente, fallarán de forma independiente (no existe relación entre los fallos de
una versión y los fallos de otra).
Esta suposición deja de ser válida si cada versión ha sido escrita en el mismo lenguaje de
programación, ya que los errores asociados con la implementación del lenguaje son comunes
a las distintas versiones.
c) ¿Qué se entiende por Votación Inexacta (Inexact Voting)? ¿Como se puede resolver? ¿En
qué consiste el problema de la Comparación Consistente (Consistent Comparison)?
La Votación Inexacta son técnicas utilizadas en la comparación de los tipos de resultados que
producen diferentes versiones. Una técnica simple es acabar comprobando un rango,
utilizando una estimación previa o un valor medio de los N resultados, aunque, aun así,
puede ser difícil encontrar un enfoque general para la votación inexacta.
▪ Especificación Inicial
La mayoría de fallos en el software provienen de una especificación inadecuada.
Resulta evidente que un error de especificación se manifestará en todas las N
versiones de la implementación.
▪ Independencia en el Diseño
La aplicación rigurosa del paradigma de la programación de N-Versiones conduce a la
eliminación de todos los errores encontrados antes de la aceptación del sistema.
▪ Presupuesto adecuado
En la mayoría de sistemas embebidos, el principal coste se debe al software, por lo
que un sistema de tres versiones triplicaría el presupuesto, así como causará
problemas de rendimiento.
▪ Detección en el Entorno
Los errores se detectan en el entorno en el cual se ejecuta el programa, entre los que
se incluyen:
➢ Los detectados por el hardware.
➢ Los detectados en tiempo de ejecución por el sistema soporte del lenguaje de
programación de tiempo real.
▪ Detección en la Aplicación
Los errores se detectan por la propia aplicación, siendo las técnicas empleadas por
las aplicaciones para ello correspondientes a las categorías:
➢ Comprobación de Réplicas
➢ Comprobaciones Temporales
➢ Comprobaciones Inversas
➢ Códigos de Comprobación
➢ Comprobaciones de Racionalidad
➢ Comprobaciones Estructurales
➢ Comprobaciones de Racionalidad Dinámica
b) Para el confinamiento del daño, realizar una técnica de descomposición modular del
software, y definir acciones atómicas, ¿serían técnicas adecuadas, o cuál sería la
diferencia?
El Confinamiento del Daño se refiere a la estructuración del sistema de modo que se
minimicen los daños causados por un componente defectuoso. También se le conoce como
construcción de cortafuegos.
Se pueden emplear dos técnicas para estructurar los sistemas, de modo que se facilite el
confinamiento del daño:
▪ Descomposición Modular
El sistema debería ser descompuesto en componentes, cada uno de los cuales se
representa por uno o más módulos. La interacción entre los componentes se produce
a través de interfaces bien definidas, y los detalles internos de los módulos están
ocultos, no siendo accesibles desde el exterior.
▪ Acciones Atómicas
La actividad de un componente es atómica si no existen interacciones entre la
actividad y el sistema durante el transcurso de la acción.
Para el resto del sistema, una acción atómica aparece como indivisible, y se lleva a
cabo de modo instantáneo. No se puede pasar información desde la acción atómica
hacia el resto del sistema, y viceversa.
d) En la recuperación de errores hacia atrás, ¿por qué y cómo se produce el efecto dominó?
El efecto dominó se produce cuando un proceso P debe volver atrás a un punto de
recuperación R, desde el cual, a su vez, debe deshacer la comunicación con otro proceso
(deshacer la comunicación entre procesos, es decir, IPC: Interprocess Communication), y
cuando esto sucede, vuelve a darse de nuevo este caso, hasta que ambos procesos sean
retrotraídos al comienzo de su interacción conjunta. Esto, en algunos casos, puede implicar
el tener que abortar ambos procesos.
Los Bloques de Recuperación son dinámicos, ya que los módulos alternativos sólo se ejecutan
cuando ha sido detectado algún error.
▪ Sobrecargas asociadas
Tanto la programación N-Versiones como los Bloques de Recuperación implican cierto coste
al desarrollo, al requerir ambos la creación de algoritmos alternativos.
▪ Diversidad en el diseño
Ambas aproximaciones exploran la diversidad en el diseño para conseguir la tolerancia de
errores no previstos, siendo ambas susceptibles de contener errores originados en la
especificación de requisitos.
▪ Detección de errores
La programación N-Versiones utiliza la comparación de votos para detectar los errores,
mientras que en los bloques de recuperación se utiliza un test de aceptación.
▪ Atomicidad
La programación N-Versiones elude el problema de la recuperación de errores hacia atrás
(cuando no se pueden deshacer los errores que se hayan podido producir en el entorno) ya
que, se supone, las versiones no interfieren entre ellas (son atómicas).
La gestión de una excepción, también denominada como manejo o captura de la excepción, viene
dada por la respuesta del invocador, y se entiende como un mecanismo de recuperación hacia
adelante, ya que, cuando la excepción ha sido lanzada, el sistema no es retrotraído al estado anterior,
sino que se pasa el control al gestor, de forma que se puedan iniciar los procedimientos de
recuperación.
Las excepciones y la gestión de excepciones, pueden utilizarse para las siguientes tareas:
¿Se podría considerar fiable un programa que es conforme a una especificación errónea de su
comportamiento?
La fiabilidad de un sistema es la medida del éxito con la que el sistema cumple con alguna de las
especificaciones obligatorias de su comportamiento. Que la especificación sea errónea, no hace al
sistema menos o nada fiable, ya que la fiabilidad se determina en función de la especificación dada
(el cómo de bien se ajusta a ella), por lo que sería un problema de especificación, no de fiabilidad.
Por ello, un programa que es conforme a una especificación, sin importar que sea errónea, es fiable.