Riesgos del Software
Tutorial
Fritz Knabe
Pontificia Universidad Católica de Chile
November 1996
Estos apuntes están basados en Safeware: System Safety and Computers, por Nancy G. Leveson, © 1995 Addison-Wesley.
La verdad es que el hardware es barato. Pero el costo de escribir y certificar software muy confiable y seguro, más el costo de la mantención sin poner en peligro la confiabilidad y la seguridad, puede ser enorme. Por ejemplo, el software del transbordador espacial (400.000 palabras) cuesta más de US$100.00.000 por año a mantener. Un sistema electromecánico es frecuentemente más barato, particularmente si se pueden usar diseños estándares.
Los cambios son fáciles, pero hacer cambios sin introducir errores es muy difícil. Hay que verificar el software de nuevo con cada cambio. También, con cambios el software se pone frágil.
Es verdad que el software no falla como dispositivos normales, pero hay poca evidencia que indica que el comportamiento erróneo de software no es un problema significativo.
Estudios de sistemas muy críticos a la seguridad han mostrado que hasta 10% de los módulos se desviaron de la especificación en un modo o más de operación. Muchos errores eran pequeños, pero aproximadamente 1 en 20 producía efectos directos y observables en el sistema controlado.
Parece que la solución es sencillamente implementar el software correctamente. Pero esto es mucho más difícil que esperado. Por ejemplo, el software del transbordador espacial ha sido usado desde 1980 y NASA ha invertido recursos enormes en la verificación y mantención de este software. Sin embargo, desde la operación del transbordador se han encontrado 16 errores de grado de severidad 1 (pueden producir una pérdida del transbordador y su tripulación) en software liberado, de que ocho estaban en código usado en vuelos. Otros errores de menor severidad han ocurrido durante misiones (tres amenazaron el cumplimiento de la misión) a pesar que NASA tiene uno de los procesos de desarrollo y verificación de software más completos existentes.
No existen técnicas coma la redundancia para aumentar sencillamente la confiabilidad del software. Y aun cuando sea posible escribir software sin errores, las condiciones ideales para desarrollar software (dinero y tiempo sin límites) nunca existen.
Se puede mejorar la confiabilidad de software eliminando errores sin relación a la seguridad del sistema, así aumentando la confiabilidad sin aumentar la seguridad.
También, la confiabilidad de software se define como conformidad con los requerimientos, mientras que la mayoría de los errores de software crítico a la seguridad son debidos a errores en los requerimientos. El software puede ser correcto y todavía causar accidentes graves.
Las limitaciones de la prueba de software son bien conocidas. Básicamente hay demasiado estados en software real para probarlo completamente.
En el futuro la verificación puede chequear la consistencia entre las especificaciones y la implementación, pero esto requiere que las especificaciones (escritas en notación formal) son libres de errores.
También, muchos errores importantes son debidos a cosas que no están en el código. Por ejemplo, muchos accidentes relacionados a software han involucrado sobrecarga. Un sistema para los servicios de emergencia dejó de funcionar cuando recibió demasiadas llamadas.
Aunque el reuso puede aumentar la confiabilidad, puede disminuir la seguridad. La razón es porque engendra el falso sentido de seguridad y porque no se consideraron los peligros específicos del sistema nuevo cuando el software fue diseñado originalmente. Ejemplos:
Los computadores tienen esta potencial y pueden automatizar tareas peligrosas como el pintar de espray. Pero otros argumentos son discutibles:
Es verdad. Pero control más fino permite que el proceso se pueda operar más cerca a su óptimo, y se pueden reducir los margines de seguridad. Los sistemas que resultan tienen beneficios económicos, porque en teoría se cerrarán menos y la productividad se puede aumentar con control más óptimo. Pero la disminución en los margines pueden negar los beneficios posibles, quizás sin la capacidad de alcanzar la confiabilidad usado como el argumento para reducir los margines.
Debido a una carencia de conocimiento con los peligros, más accidentes ocurren cuando los operadores tienen que entrar en las áreas peligrosas. Por ejemplo, un robot mató a un trabajador en una planta que los diseñadores asumían requería poca intervención--no incluyeron pasarelas ni avisos audibles de movimiento. La suposición original era que se cerraría la planta para la mantención, pero la realidad era que los trabajadores tenían que rescatar los robots 15 a 20 veces por día.
Los errores de operadores se reemplazan con errores de diseño y mantención; los diseñadores hacen los mismos tipos de errores como los operadores. También, cuando se elimina el contacto directo con el sistema, los humanos pierden la información necesaria para hacer decisiones.
En teoría es verdad, pero esto es muy difícil lograr. Básicamente los computadores permiten que se provee demasiada información y en una forma menos útil para algunos propósitos que la instrumentación tradicional.
Es verdad solamente para una definición estrecha de "falla." Un resultado del reemplazo de dispositivos mecánicos por computadores es la incapacidad de predecir modos de falla. La mayoría de los sistema mecánicos tienen un número limitado de modos de falla, y se los pueden diseñar para fallar en una manera segura. Esto normalmente no es posible con el software.
La flexibilidad también refuerza la construcción prematura. El software permite los éxitos parciales.
En software no hay ninguna restricción física para limitar las interfaces, como en hardware de aviones a circuitos. Cualquiera cosa puede depender de cualquiera cosa.