Sistemas Criticos
Sistemas Criticos
Sistemas Criticos
Los sistemas crticos son sistemas tcnicos o socio-tcnicos de los cuales dependen las personas o los
negocios. Si estos sistemas no ofrecen sus servicios de la forma esperada, pueden provocar graves
problemas y prdidas importantes.
Sistemas de seguridad crticos: Son sistemas cuyo fallo de funcionamiento puede provocar perjuicio,
prdida de vidas o daos graves al medio ambiente.
Sistemas de misin crticos: Son sistemas cuyo fallo de funcionamiento puede provocar errores en
algunas actividades dirigidas por objetivos.
Sistemas de negocio crticos: Son sistemas cuyo fallo de funcionamiento puede provocar costes muy
elevados para el negocio que utiliza un sistema de este tipo.
Existen varias razones por las que la confiabilidad es la propiedad ms importante de los sistemas crticos:
Los sistemas que son no fiables, inseguros o desprotegidos son rechazados a menudo por sus usuarios. Si los
usuarios no confan en un sistema, se negarn a utilizarlo. Es ms , tambin rehusarn comprar o utilizar
productos de la misma compaa que produjo el sistema no confiable, puesto que creen que stos
tampoco son confiables.
Los costes de los fallos de funcionamiento del sistema pueden ser enormes. En algunas aplicaciones, como
un sistema de control de reactores o un sistema de navegacin area, el coste de un fallo en el sistema es
mayor en varios rdenes de magnitud que el coste de dicho sistema de control.
Los sistemas no confiables pueden provocar prdida de informacin. Es muy cara la captura y
mantenimiento de los datos; algunas veces cuesta ms que el sistema informtico que los procesa. Se
tiene que hacer un gran esfuerzo e invertir mucho dinero para duplicar los datos importantes a fin de
protegerlos de cualquier corrupcin.
El elevado coste de un fallo de funcionamiento en los sistemas crticos implica que se deben usar mtodos
y tcnicas confiables en su desarrollo. Como consecuencia, los sistemas crticos generalmente se desarrollan
utilizando tcnicas muy probadas en lugar de tcnicas novedosas que no han sido objeto de una extensa
experiencia prctica. En vez de utilizar mtodos y tcnicas novedosas, los desarrolladores de sistemas
crticos son conservadores por naturaleza. Prefieren utilizar tcnicas antiguas cuyas ventajas e
inconvenientes son muy conocidos, en lugar de nuevas tcnicas que aparentemente son mejores pero
cuyos problemas a largo plazo se desconocen.
Para el desarrollo de sistemas crticos, a menudo se utilizan tcnicas de ingeniera del software que por lo
general no son rentables. Una razn por la que se usan estos mtodos formales es que ayudan a reducir
la cantidad de pruebas requeridas. Para sistemas crticos, los costes de verificacin y validacin
generalmente son muy elevados ms del 50% de los costes totales de desarrollo del sistema.
Si bien un nmero reducido de sistemas se pueden automatizar completamente, la mayora de los sistemas
crticos son sistemas socio-tcnicos en los que las personas monitorizan y controlan el funcionamiento de
dichos sistemas informticos. Los costes de un fallo de funcionamiento de los sistemas crticos
generalmente son tan altos que es necesario contar con personal adicional en el sistema que pueda hacer
frente a situaciones inesperadas, y que pueda recuperar el funcionamiento normal del sistema cuando las
cosas van mal.
Desde luego, a pesar de que los operadores del sistema pueden ayudar a recuperarlo cuando algo va mal,
ellos mismos a su vez pueden generar problemas si cometen errores. Existen tres tipos de componentes
de sistemas susceptibles de generar un fallo en el sistema:
El hardware del sistema puede fallar debido a errores en su diseo, tambin debido a que los
componentes fallan como resultado de errores de fabricacin, o debido a que dichos
componentes han llegado al final de su vida til.
El software del sistema puede fallar debido a errores en su especificacin, diseo o implementacin.
Los operadores del sistema pueden provocar fallos en el sistema debido a un uso incorrecto del
mismo. As como el hardware y el software son cada vez ms fiables, hoy en da los fallos debidos a
un mal uso del sistema son probablemente la principal causa de fallos de funcionamiento en el
sistema.
Estos fallos pueden interrelacionarse. Un componente hardware que deja de funcionar puede implicar
que los operadores del sistema tengan que afrontar una situacin inesperada y una carga de trabajo
adicional. Esto hace que los operadores trabajen en estado de estrs y las personas que sufren estrs a
menudo cometen errores. Esto puede ocasionar que el software falle, lo que supone ms trabajo para los
operadores, ms estrs, y as sucesivamente.
Como resultado de todo lo anterior, es particularmente importante que los diseadores de los sistemas
crticos adopten una perspectiva holstica del sistema en lugar de centrarse en un nico aspecto del
mismo. S el hardware, el software y las formas de utilizacin del sistema se disean de forma separada sin
tener en cuenta los puntos dbiles potenciales del resto de las partes del sistema, entonces ser ms
probable que los errores se produzcan en las interfaces entre las distintas partes del sistema.
DESARROLLO DE SISTEMAS CRITICOS
Los sistemas crticos tales como aquellos que controlan maquinaria automtica, sistemas mdicos, centrales
de comunicacin o aviones necesitan niveles ms altos de confiabilidad.
Resulta fundamental, para conseguir la confiabilidad en cualquier sistema, nociones bsicas sobre
redundancia y diversidad.
Los sistemas crticos pueden incluir componentes que reproducen la funcionalidad de otros componentes o
cdigo de comprobacin adicional que no es estrictamente necesario para que el sistema funcione es
redundancia. Si los componentes redundantes no son exactamente iguales que otros componentes es
diversidad, aadir diversidad y redundancia a los sistemas los hacen ms complejos por lo tanto ms
difciles de entender.
El software libre de defectos es aquel software que cumple exactamente con su especificacin, sin embargo
esto no significa que el software nunca llegue a fallar ya que puede haber errores en la especificacin que se
refleja en el software o los usuarios pueden no comprender o no usar correctamente el sistema software.
Para sistemas de tamao pequeo y medio, las tcnicas de ingeniera de software son tales que
probablemente sea posible desarrollar software libre de defectos, para alcanzar este objetivo es necesario
utilizar varias tcnicas de ingeniera del software:
A medida que el software se hace ms fiable se necesita emplear ms y ms tiempo y esfuerzo para
encontrar menos y menos defectos. En algn momento, los costes de este esfuerzo para encontrar menos y
menos defectos se convierten en justificables. Como consecuencia las compaas desarrolladoras de
software siempre tendrn algn defecto residual.
Procesos confiables
Los procesos confiables estn adaptados a la prevencin y deteccin de defectos. Los procesos confiables
estn definidos y son repetibles, e incluyen una variedad de actividades de verificacin y validacin.
Un proceso confiable debera incluir siempre actividades de verificacin y validacin bien planificadas y
organizadas cuyo objetivo es asegurar el descubrimiento de defectos residuales en el software antes de que
ste sea desplegado. Las actividades del proceso que se llevan a cabo para prevenir y detectar los defectos
son:
Programacin confiable
La programacin confiable implica el uso de tcnicas y construccin de programacin que contribuyen a
prevenir y tolerar los defectos. Mientras que algunos errores tienen lugar debido a que los programadores
cometen errores o a malas interpretaciones de la especificacin, otros tienes lugar debido a la complejidad
de los programas o al uso de construcciones propensas a error, para alcanzar la confiabilidad sera preciso
realizar diseos simples, proteger la informacin de accesos no autorizados y minimizar el uso de
construcciones de programacin no seguras.
Las tcnicas de programacin para la prevencin de defectos se basan en el hecho de que hay una distincin
entre defectos y fallos de ejecucin.
Un fallo de ejecucin es algo que es observable para los usuarios de un sistema.
Un defecto de ejecucin es una caracterstica interna del sistema.
Si un defecto se manifiesta en un programa en ejecucin es posible tolralo detectndolo y realizando la
accin de recuperacin antes de que se convierta en un fallo de ejecucin del sistema.
Informacin protegida
Es la proteccin de los datos del sistema, es decir que los componentes del programa deberan tener acceso
solo a los datos que necesitan para su implementacin de ese modo pueden protegerse otros datos y
ocultarlos desde otra partes del programa ya que si se oculta informacin esta no puede llegar a ser
corrompida por los componentes del programa que se supone no la utilizan.
La proteccin de informacin es mucho ms sencilla en Java que en lenguajes ms antiguos, debido a que
estos lenguajes no tienen construcciones de encapsulacin tales como clases de objetos. Generalmente
cuando se programa en lenguaje orientado a objetos, proporciona mtodos que acceden a estos atributos
directamente, esto significa que puede cambiarse la representacin del atributo sin preocuparse de cmo
otros objetos utilizan el atributo, es importante utilizar esta aproximacin para estructuras de datos y otros
atributos complejos.
La construccin de definiciones de interfaces Java hace posible utilizar esta aproximacin y es posible
declarar la interfaz de un objeto sin hacer referencia a su implementacin.
Consideremos un sistema de sealizacin, implementando en Java que soporte luces rojas, amarillas y
verdes, debera definirse un tipo Signal que incluya declaraciones de constantes que reflejan estos colores,
por lo tanto es posible hacer referencia a Signal.red, Signal.yellow, Signal.green y asi sucesivamente,esto
evitara asignaciones de valores incorrectos a las variable de tipo Signal.
Class Signal {
Por lo tanto, se estn protegiendo variables de
tipo Signal de asignaciones incorrectas y al
static public final int red=1 ;
mismo tiempo ocultando la representacin de static public final int yellow=2 ;
rojo, amarillo y verde. Pueden cambiarse estos static public final int green=3 ;
valores constantes ms tarde sin tener que
realizar ningn otro cambio en el programa.
public int sigState ;
}
Una declaracin de una seal en JAVA que oculta el
tipo de representacin.
Programacin segura
La sentencia Goto o salto incondicional era una construccin de programacin propensa a error. Esta
observacin condujo al desarrollo de la programacin estructurada, este tipo de programacin es sin
sentencias Goto utilizando solamente bucles while y sentencias if como construcciones de control y un
diseo mediante una aproximacin descendente.
Es menos probable introducir defectos en los programas si se evitan o al menos se usan lo menos posible,
las construcciones potencialmente propensas a error, estas comprenden:
Nmeros en coma flotante.- Los nmeros en coma flotante son imprecisos, este es un problema
particular cuando hay comparaciones debido a que la imprecisin en la representacin puede
llevar a comparaciones incorrectas.
Punteros.- Los punteros son construcciones de bajo nivel que almacenan direcciones que hacen
referencia directamente a zonas de memoria de la mquina.
Asignacin dinmica de memoria.- La memoria del programa puede asignarse en tiempo de
ejecucin en lugar de en tiempo de compilacin.
Paralelismo.- El paralelismo es peligroso debido a las dificultades de predecir los efectos sutiles de
las interacciones temporales entre los procesos en paralelo. Los problemas temporales
normalmente no pueden detectarse mediante la inspeccin de programa, el paralelismo puede
ser inevitable pero su uso debera ser cuidadosamente controlado para minimizar las
dependencias entre los procesos.
Recursin.- LA recursin se produce cuando un proceso o mtodo se llama a s mismo o llama
otro procedimiento, el cual a su vez llama al procedimiento original que realizo la llamada. Su uso
puede generar programas concisos, pero puede ser difcil seguir la lgica de los programas
recursivos, por lo tanto los errores de programacin son ms difciles de detectar.
Interrupciones.- Son un modo de forzar la transferencia de control a una seccin de cdigo
independientemente del cdigo que se est ejecutando actualmente, pero la interrupcin puede
provocar la terminacin de una operacin crtica.
Herencia.- el problema de la herencia en la programacin orientada a objetos es que el cdigo
asociado con el objeto no est todo en un mismo sitio, esto hace ms difcil comprender el
comportamiento del objeto.
Aliasing.- Esto ocurre cuando se utiliza ms de un nombre para referir a la misma entidad en un
programa.
Vectores no limitados.- Los vectores son formas de acceder a la memoria y pueden hacerse
asignaciones ms all del final de un vector. El soporte de ejecucin del sistema no comprueba
que las asignaciones realmente se refieren a los elementos del vector. Una vulnerabilidad
conocida de la proteccin es el desbordamiento del bfer en el que un intruso deliberadamente
desarrolla un programa para escribir en la memoria ms all del final de un bfer que se
implementa como un vector.
Procesamiento de entradas por defecto.- Algunos sistemas proporcionan un procesamiento de las
entradas por defecto independientemente de las entrada presentada al sistema, esto es un
agujero en la proteccin, que un intruso puede aprovechar para presentar al programa entradas
no esperadas y que no sean rechazadas por el sistema.
Todas estas construcciones y tcnicas son tiles, pero tienen que utilizarse con cuidado siempre y cuando
sea posible, sus potenciales efectos peligrosos deberan controlarse utilizndolos dentro de tipos abstractos
de datos u objetos, estos actan limitando el dao ocasionado si se producen errores.
Manejo de excepciones
Los errores o eventos no esperados ocurren inevitablemente, esto puede darse debido a un defecto en el
programa o puede ser el resultado de circunstancias externas no predecibles. Un error o un evento
inesperado que ocurra durante la ejecucin de un programa se denominan una excepcin, esta puede ser
provocada por condiciones de hardware o software. Cuando ocurre una excepcin, esta debe ser manejada
por el sistema, esto puede hacerse dentro del mismo programa o puede implicar la transferencia de control
a un mecanismo de manejo de excepciones del sistema.
Algunos lenguajes de programacin como Java, C , incluyen construcciones que soportan el manejo de
excepciones de forma que no se necesitan sentencias condicionales adicionales para comprobar las
excepciones, en su lugar el lenguaje de programacin incluye un tipo de construccin especial, con
frecuencia llamado Exception y diferentes excepciones pueden declararse con este tipo. Cuando ocurre una
situacin excepcional, la excepcin es capturada y el soporte de ejecucin del lenguaje transfiere el control
a un manejador de excepciones adecuadas para manejar cada excepcin.
En Java pueden declararse nuevos tipos de excepciones extendiendo la clase Exception, las excepciones son
provocadas en Java utilizando una sentencia throw. El manejador de una excepcin se indica por la palabra
clave catch, seguida por un bloque de cdigos que maneja la excepcin.
Un sistema tolerante a defectos puede continuar en funcionamiento despus de que se manifiesten algunos
defectos en el programa, los mecanismos de tolerancia a defectos en el sistema aseguran que estos
defectos del sistema no provocan fallos de funcionamiento del sistema. Se necesita tolerancia a defectos en
situaciones en las que un fallo de funcionamiento del sistema podra provocar un accidente catastrfico o
en las que una prdida de funcionamiento del sistema pudiese causar grandes prdidas econmicas. Existen
cuatro aspectos a considerar en la tolerancia a defectos:
Deteccin de defectos.- El sistema debe detectar un defecto que podra conducir a un fallo de
ejecucin del sistema. Generalmente esto implica comprobar que el estado del sistema es
consistente.
Evaluacin de los daos.- Se deben detectar las partes del estado del sistema que han sido
afectadas por el defecto.
Recuperacin de defectos.- El sistema debe restaurar su estado a u estado <<seguro>> conocido.
Esto puede conseguirse corrigiendo el estado daado (recuperacin de errores hacia adelante) o
restaurando el sistema a un estad <<seguro>> conocido (recuperacin de errores hacia atrs).
Reparacin de defectos.- Esto implica modificar el sistema para que no vuelva a aparecer el
defecto. Sin embargo muchos defectos del software se manifiestan como estados transitorios, no es
necesario realizar ninguna reparacin y el procesamiento normal puede continuarse
inmediatamente despus de la recuperacin de los defectos.
Si no hay defectos en el sistema podra parecer que no hay ninguna posibilidad de un fallo de ejecucin del
sistema, pero libre de defectos no significa libre de fallos de ejecucin.
La primera etapa de la tolerancia a defectos es detectar que un defecto (un estado del sistema errneo) ha
ocurrido u ocurrir a menos que se realice inmediatamente alguna accin. Existen dos tipos de deteccin de
defectos que se pueden utilizar.
La deteccin de defectos preventiva es posible cuando se conoce el rango de valores que pueden asignarse
a una variable de estado. Sin embargo cuando un valor valido depende del valor asignado a otro valor
asignado a otras variables en el estado, la deteccin de defectos preventiva puede muy difcil.
Una forma de implementar la deteccin de defectos retrospectiva en Java consiste en asociar una funcin
comprobado con un objeto. Esta funcin puede llamarse despus de que los cambios en el estado hayan
tenido lugar para asegurar que se cumplan las restricciones del estado, estas pueden llamarse cuando sea
necesario (puede que no sea necesario comprobar el estado despus de cada cambio haya tenido lugar)
La funcin check comprueba que los elementos de un vector satisfacen alguna restriccin.
La evaluacin de daos implica analizar el estado del sistema para estimar el alcance de la corrupcin del
estado, la evaluacin de daos es necesaria cuando no se puede evitar realizar un cambio de estado o
cuando un defecto tiene lugar por una secuencia invalida de cambios de estado correctos individualmente.
La recuperacin de defectos es el proceso de modificar el espacio de estados del sistema para que los
efectos del defecto sean eliminados o reducidos. La recuperacin hacia adelante implica intentar corregir el
sistema daado y crear el estado esperado. La recuperacin hacia atrs restaura el estado del sistema a un
estado <<correcto>> conocido.
La recuperacin de errores hacia adelante solo es posible en situaciones en las que la informacin del
estado incluye redundancia. Existen dos situaciones generales en las que pueden aplicarse tcnicas de
recuperacin de errores:
Cuando los datos del cdigo estn daados.- El uso de tcnicas de codificacin que aaden
redundancia a los datos permite corregir los errores as como detectarlo.
Cuando las estructuras enlazadas estn daadas.- Cuando los punteros hacia adelante y hacia
atrs se incluyen en la estructura de datos, la estructura puede volverse a crear. Esta tcnica se
utiliza frecuentemente para sistemas de ficheros y reparacin de base de datos.
La recuperacin de errores hacia atrs es una tcnica que restaura el estado a un estado seguro conocido
despus de haberse detectado un error, la mayora de los sistemas de base de datos incluyen recuperacin
de errores hacia atrs.
Para la mayora de los sistemas crticos puede necesitarse una arquitectura especfica del sistema diseada
para soportar la tolerancia a defectos. Durante muchos aos ha habido una necesidad de construir
hardware tolerante a defectos, las tcnicas ms comnmente utilizada de tolerancia a defectos hardware
est basada en la nocin de redundancia modular triple (TMR).
La unidad hardware se reproduce tres veces (o algunas veces ms) , la salida de cada unidad se enva a un
comprobador de salida que normalmente se implementa como un sistema de votaciones, si una de las
unidades falla y no produce la misma salida que el resto de las unidades, se pasa por alto su salida. Un
gestor de defecto puede intentar reparar la unidad defectuosa de forma automtica, pero si esto es
imposible el sistema continua funcionando con dos unidades.
Redundancia modular triple para tratar los fallos de ejecucin del hardware.
Esta aproximacin a la tolerancia a defectos cubre la mayora de fallos de ejecucin del hardware que son el
resultado de fallos en los componentes en lugar de defectos de diseo, por lo tanto es probable que los
componentes fallen de forma independiente. Se supone que cuando son completamente funcionales todas
las unidades hardware funcionan de acuerdo con su especificacin, por lo tanto hay una baja probabilidad
de fallos simultneas en los componentes en todas las unidades hardware.
Si los requerimientos de disponibilidad y fiabilidad de un sistema son tales que se necesita utilizar hardware
tolerante a defectos tambin puede necesitar software tolerante a defectos. Existen dos aproximaciones
relacionadas con la provisin de software tolerante a defectos, estas son:
Bloques de recuperacin.- En esta aproximacin, cada componente del programa incluye una
prueba para verificar que el componente se ha ejecutado con xito, tambin incluye cdigo
alternativo que permite que el sistema vuelva hacia atrs y repita los clculos si la prueba detecta
un fallo de ejecucin. De forma delibera, las implementaciones son interpretaciones diferentes de
la misma especificacin. Se ejecutan en secuencia en lugar de en paralelo de forma que no se
requiere la replicacin de hardware.
Bloques de recuperacin
Bibliografa
http://idsuba.blogspot.com/2014/06/sistemas-criticos.html