domingo, 10 de abril de 2011

El primer BUG de la historia...

Fuente: http://www.aprendergratis.com/el-primer-bug-de-la-informatica.html


“Bug”, cuya traducción literal del inglés es “bicho”, adquiere otro significado en el mundo de los bits. Esta otra acepción se refiere a elementos y circunstancias en el software o hardware, involuntarios e indeseados, que provocan un mal funcionamiento.

A lo largo de los años este término se ha popularizado y hoy día se utiliza comúnmente para referirse a los errores en los programas informáticos. Entonces, un “bug” es un error de software.

La relación con la seguridad informática es directa, ya que muchas de las vulnerabilidades que día a día se conocen están asociadas a “bugs”, que pueden solucionarse con los “parches” que se distribuyen -generalmente por Internet- a medida que se van detectando.Pero también son “bugs” aquellos errores de configuración que no dejan a la PC funcionar correctamente, o en el caso de Internet, a una web que se visualice bien.

Aunque el término “bug” fue asociado a interferencias y malfuncionamiento desde mucho tiempo antes de que existieran las computadoras modernas (Thomas Edison fue uno de los primeros en emplear este significado), fue una mujer -Grace Murray Hopper- quién a mediados de los años 40 del siglo XX popularizaría el término “bug” aplicado a la informática.

Grace Murray Hopper (1906-1992), graduada en matemáticas y física en el Vassar College, y doctora en matemáticas de la universidad de Yale, pasó a la historia por ser una innovadora programadora en la prehistoria de la computación.




En 1943, durante la segunda guerra mundial, decidió incorporarse a la marina estadounidense. Fue destinada al laboratorio de cálculo de Howard Aiken en la Universidad de Harvard, donde trabajó como programadora en el Mark I.

El 9 de septiembre de 1945  (o de 1947, según otras fuentes) el grupo de trabajo de Aiken y Grace se encontraba en la sala del Mark II intentando averiguar por qué no funcionaba adecuadamente. Tras un exhaustivo examen lograron detectar que la culpable era una polilla que se había colado entre los contactos de unos de los relés del Mark II. Más tarde registrarían el incidente en el cuaderno de bitácoras, pegaron la polilla que causó el problema y anotaron debajo la frase “First actual case of bug being found”.




A partir de entonces, cada vez que se detectó un problema en una computadora, comenzó a decirse que tenía “bugs” (bichos o insectos). Años más tarde Grace también acuñaría el término “debug” para referirse a la depuración de programas, “des-bichar” un software.

La única razón de ser de las primeras computadoras fueron los fines militares. Según cuenta la historia, Grace fue de las primeras personas en buscar utilidades civiles a la informática, por fuera de los conflictos bélicos. Entre sus muchos méritos hay que destacar la creación del lenguaje Flowmatic, el desarrollo del primer compilador, o su trabajo en la primera versión del lenguaje COBOL (muy utilizado popularmente en los primeros años ´80).

Grace continuó con sus avances en computación y tuvo numerosos reconocimientos a lo largo de su extensa carrera. Entre otras distinciones, recibió el premio Hombre del Año (SIC) en las Ciencias de Cómputos por la Data Processing Management Association. Fue la primera mujer nombrada Distinguished fellow of the British Computer Society, y la primera mujer almirante en la marina de los Estados Unidos.

Entre los bugs mas famosos se encuentran varios errores en misiones de la NASA; el de Therac-25 (una máquina empleada en terapia de radiación, que por un problema en la interfaz gráfica proporcionaba dosis de radiaciones mortales, más de diez mil rad, a los pacientes, ocasionando al menos 5 muertes entre el ’85 y el ’87); o –quizás el más popular de todos- el bug del año 2000 (Y2K). En un principio las computadoras no estaban capacitadas para “comprender” el paso del año 1999 al 2000, por lo que llegado el 1º de enero del último año del siglo XX, las PC retrocederían al 1900. Pese a cierta psicosis colectiva que se generó en torno a un problema real, la gravedad no era tanta, dado que fue advertido a tiempo y las máquinas cruciales que se podrían ver afectada por el “bug” tuvieron su “debug”.

En esta misma línea, existe también el bug del año 2038. Debido a la forma de representación del tiempo basada en el sistema POSIX, que se basa en contar el número de segundos transcurridos desde el 1 de enero de 1970 a las 00 hs (ignorando los segundos intercalares), llegada las 00:14:07 del 19 de enero de 2038, las computadoras al segundo siguiente interpretarán que están en el año 1901 o en el 1970 (dependiendo de la implementación).

En la mayoría de sistemas de 32 bits, el tipo de dato time_t usado para guardar el contador de segundos es un entero de 32 bits con signo. Es decir, que puede representar un rango de números entre -2147483648 y 2147483647 (-231 y 231-1; 1 bit para el signo, y 31 para el valor absoluto). Por lo que el último segundo representable con este formato será la hora que ya mencionamos, cuando el contador llegue a 2.147.483.647 segundos. Un segundo después, el contador se desbordará, y saltará al valor -2147483648, dando origen a este problema.

En parte este bug está solucionado,  porque la tecnología de 64 bits y otros avances, hacen que para la mayoría de las computadoras actuales (como mínimo, aquellas que se consideran cruciales para el funcionamiento de sistemas financieros, vuelos, etc, y muchas de uso hogareño), este bug sea ya historia pasada. A lo sumo, llegado el 2038, afectará sólo a algunas pocas computadoras domésticas.

Quienes deberán seguir atentos la evolución de este bug, son nuestros descendientes, ya que en efecto el problema no se elimina por completo sino que se retrasa unos años, 290 mil millones de años. Para ser más precisos, el bug ocurriría el domingo 4 de diciembre del año 292.277.026.596 a las 15:30:08 UTC. Aunque de seguro, en ese año, los avances científicos podrán prever el problema. Como así también existirán nuevos bugs…

Otro bug informático muy común, es el de la división por cero. Como sabemos, cualquier número dividido por cero es siempre cero. Sin embargo, en informática estamos ante un error lógico.

Muchos algoritmos informáticos clásicos de división usan el método de restas sucesivas, y si el divisor es cero, la resta como tal se ejecuta por siempre, ya que el dividendo nunca cambia. La aplicación en cuestión entra entonces en un bucle infinito.

Para prevenir esto, actualmente los procesadores matemáticos entregan un error al sistema si durante una división el divisor es cero. Este error suele ser de una categoría tal que la aplicación en cuestión será terminada sin más.

Este problema de la división por cero no lo vemos en la calculadora de Windows, que está prevista para tal cosa, sino en las instrucciones de funcionamiento otorgadas a software para aplicaciones más complejas, aunque suele presentarse en algunos sitios web mal configurados cuando hacen consultas a las bases de datos Sql.

No hay comentarios:

Publicar un comentario