Friday, November 21, 2008

Fiablidad en informática

Es una putada cuando se cuelga el ordenador. Por suerte, aun con Windows (moderno), eso pasa muy poco. También molesta cuando un programa deja de funcionar (¿cual es la traducción de "crash"? ¿petar?). Eso también ocurre poco, aunque al ser menos grave, se ve de vez en cuando. Sobre todo ocurre con los programas hechos por uno mismo. Si nos dieran un euro por "Segmentation fault", los informáticos seríamos de oro. Los programas publicados desde luego son mucho mas estables, pero, ¿hasta qué punto?

Ahora con el tema de la ley, las competencias, y todo ese rollo, han surgido varias reflexiones. ¿Que competencias puede tener un informático? ¿Quién se atrevería a "firmar" por un programa? Un arquitecto lo tiene fácil: una viga acero de X centímetros soporta Y kg. Si Y no es suficiente, aumentamos la X y listo. Pero... ¿un programa? Aparte de la obvia complejidad de cualquier software y la posibilidad de errores de especificación, diseño, codificación, estados imprevistos, datos de entrada erróneos, etc, se unen muchos más. Por ejemplo, que el código generado por el compilador sea realmente lo que hemos especificado en el lenguaje. Que el sistema operativo realice bien sus tareas, no se cuelgue, implemente bien las llamadas. Que el hardware no cambie ni un bit del estado del programa. Muchísimos factores que no dependen del programador.

Teniendo todo esto en cuenta, los hay que tener bien gordos para confiar tu vida a un ordenador. Y si sabes que el ordenador tiene 4k de RAM, 32k de ROM y está hecho con 4100 puertas NOR, es para asustarse. (Por otro la lado, tiene que ser un reto apasionante construir un ordenador funcional y 100% fiable con esas limitaciones.) Otros simplemente van por la vía fácil y montan los equipos por cuadruplicado, con un quinto alternativo ejecutando un programa independiente pero equivalente. Aparte de eso, los procesadores, compiladores, etc, tienen que estar comprobados y certificados. Se usan lenguajes específicos. Se testea cada módulo de tal manera que prácticamente no hay ningún estado no previsto o desconocido. Se hace lo humanamente posible. Resultado: las cosas funcionan. Trampa: "las cosas" caben en 1 Mega de RAM y lo único que hacen es leer sensores y ajustar válvulas. Y eso con un presupuesto como... ¿el de la NASA?

Es extraño como algo tan poco fiable como la informática ha conseguido convertirse en algo tan imprescindible. Un ejemplo más del efecto "good enough".

No comments: