Diferencia entre revisiones de «Error de software»

De Wikipedia, la enciclopedia libre
Contenido eliminado Contenido añadido
Página reemplazada por «[».
m Revertidos los cambios de 201.254.76.94 a la última edición de Obersachsebot
Línea 1: Línea 1:
[[Imagen:H96566k.jpg|thumb|right|Foto del origen de la leyenda acerca del primer "bug" informático conocido]]
[
Un '''defecto de software''' (''computer bug'' en [[idioma inglés|inglés]]), es el resultado de un fallo o deficiencia durante el proceso de creación de [[programas de ordenador o computadora (software)]]. Dicho fallo puede presentarse en cualquiera de las etapas del ciclo de vida del software aunque los más evidentes se dan en la etapa de desarrollo y [[programación]]. Los errores pueden suceder en cualquier etapa de la [[Ingeniería de software#Pasos del proceso|creación de software]]

En 1947, los creadores de Mark II informaron del primer caso de error en un ordenador causado por un bicho. El Mark II, ordenador sucesor de ASCC [[Harvard Mark I|Mark I]], construido en [[1944]], sufrió un fallo en un relé electromagnético. Cuando se investigó ese relé, se encontró una [[polilla]] que provocó que el relé quedase abierto.

[[Grace Murray Hopper]], licenciada en [[Física]] y destacada [[Matemáticas|matemática]] que trabajó como programadora en el Mark II, pegó el insecto con cinta adhesiva en la bitácora ([http://ei.cs.vt.edu/~history/Bug.GIF imagen]) y se refirió a ella como "bicho" para describir la causa del problema.

Este incidente es erróneamente conocido por algunos como el origen de la utilización del término inglés "bug" (bicho) para indicar un problema en un aparato o sistema.<ref>[http://www.catb.org/jargon/html/B/bug.html bug<!-- Título generado por un bot -->]</ref><ref>[http://www.microsiervos.com/archivo/leyendas-urbanas/polilla-volo-en-ordenador-y-origen-leyenda-bug.html La polilla que voló dentro de un ordenador y el origen de «bug informático» | Microsiervos (Leyendas Urbanas)<!-- Título generado por un bot -->]</ref> En realidad, [[Thomas Alva Edison]] ya había utilizado "bug" en algunas anotaciones relacionadas con interferencias y mal funcionamiento. Grace lo asoció por primera vez a la informática, en este caso, relacionado a un insecto real. No obstante, durante los años [[Años 1950|50]] del [[Siglo XX]], Grace también empleó el término "debug" al hablar de la depuración de errores en los códigos de programación.

Los programas que ayudan a detección y eliminación de errores de programación de software son denominados [[depurador]]es ([[debugger]]s)

== Defectos de diseño de programas ==
* Diseños con colores inapropiados para las personas que padecen [[daltonismo]]
* Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño.
* Diseños que fuerzan el uso del ratón o [[mouse]] sin dejar alternativas de teclado para personas con disfunciones motrices.
* Diseños con implicaciones culturales, por ejemplo usando partes del cuerpo que en una determinada cultura sean objeto de vergüenza o burla o símbolos con características de identidad cultural o religiosa.
* Estimar que el equipo donde se instalará tiene determinadas características como la resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o conectividad a [[internet]]
* Objetos intrusivos y obstrusivos como cuadros de diálogo modales al sistema o asistentes como "Clippy" (Clipo, en español) que impedía el uso uniforme de Office de Microsoft.

== Errores de programación comunes ==
* [[División por cero]]
* [[Ciclo infinito]]
* [[Problemas aritméticos]] como desbordamientos (''[[overflow]]'') o subdesbordamientos (''[[underflow]]'').
* Exceder el tamaño del [[array]]
* Utilizar una [[variable (programación)|variable]] no inicializada
* Acceder a [[Memoria de ordenador|memoria]] no permitida ([[access violation]])
* [[Pérdida de memoria (informática)|Pérdida de memoria]] (''memory leak'')
* Desbordamiento o subdesbordamiento de la [[pila (estructura de datos)]]
* [[Buffer overflow]]
* [[Deadlock]]
* Indizado inadecuado de tablas en bases de datos.

== Defectos de instalación o programación ==
* Eliminación o sustitución de [[Biblioteca (programación)|bibliotecas]] comunes a más de un programa o del sistema ([[DLL Hell]]).
* Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto.
* Presuponer que el usuario tiene una conexión permanente a [[internet]].

== Códigos de errores de lenguajes de programación ==
La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores que permiten a los programadores manejar las fallas de los programas de una manera eficiente y que no resulte agresiva con el usuario final. Dichos errores son de [[compilación]] y errores en [[tiempo de ejecución]].

Los errores de compilación normalmente inhiben que el código fuente derive en un programa [[ejecutable]], mientras que los errores en tiempo de ejecución son situaciones específicas en las que un evento externo al programa impide su ejecución. Regularmente un programador eficiente debe intentar imaginar como debe responder ante esos eventos de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan el problema. Así por ejemplo un bloque de error no manejado podría hacer lo siguiente:

Abre el archivo "miarchivo" para escritura
comienza a escribir datos en mi archivo
cierra el archivo

Si "miarchivo" no existe (o el programa o el usuario no tienen privilegios suficientes para abrirlo), el sistema operativo regresará un error que el programa no atrapará y tendremos un mensaje como "El archivo "miarchivo" no puede ser abierto para escritura" y botones para reintentar, cancelar y abortar (en el sistema operativo Windows), que no tendrán otra acción que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea dando por terminado violentamente el programa. Un código que permitiese atrapar el error en tiempo de ejecución sería:

Abre el archivo "miarchivo" para escritura
Si el sistema operativo lo permite
comienza a escribir datos en "miarchivo"
si no lo permitió
informa al usuario de lo que sucede
regresa al usuario a un punto donde no haya conflicto (el menú principal, por ejemplo)
Continúa operando normalmente

Los diferentes [[lenguaje de programación|lenguajes de programación]] permiten diferentes construcciones lógicas a los programadores para atrapar y resolver errores en tiempo de ejecución, como pueden ser las [[instrucción|sentencias]] ''assert, try'' y ''on error'' en diferentes lenguajes de programación.

== Véase también ==
* [[Agujero de seguridad]]
* [[Bugzilla]]
* [[Hotfix]]
* [[Depurador]]
* [[Depuración]]
* [[Ingeniería de Software]]
* [[Missingno.]]

== Referencias ==
<references/>

== Enlaces externos ==
* [http://webs.ono.com/joseaf/artic/errores.htm Errores raros en Windows]

[[Categoría:Programación]]

[[bg:Бъг]]
[[cs:Programátorská chyba]]
[[da:Bug (computer)]]
[[de:Programmfehler]]
[[el:Software bug]]
[[en:Software bug]]
[[eo:Cimo (komputiko)]]
[[fa:باگ (کامپیوتر)]]
[[fi:Ohjelmointivirhe]]
[[fr:Bug informatique]]
[[gl:Bug]]
[[he:באג]]
[[hu:Bug (informatika)]]
[[id:Bug]]
[[it:Bug]]
[[ja:バグ]]
[[ko:소프트웨어 버그]]
[[lb:Bug]]
[[ml:സോഫ്റ്റ്‌വെയര്‍ ബഗ്ഗ്]]
[[ms:Pepijat]]
[[nl:Bug]]
[[no:Programvarefeil]]
[[oc:Bug (informatica)]]
[[pl:Błąd (informatyka)]]
[[pt:Bug]]
[[ru:Баг]]
[[simple:Software bug]]
[[sl:Hrošč (računalništvo)]]
[[sq:Bug]]
[[sr:Баг (информатика)]]
[[sv:Bugg (dator)]]
[[th:บั๊ก]]
[[tr:Bug]]
[[uk:Баґ]]
[[yi:סאפטוועיר באג]]
[[zh:程序错误]]

Revisión del 23:40 26 may 2009

Foto del origen de la leyenda acerca del primer "bug" informático conocido

Un defecto de software (computer bug en inglés), es el resultado de un fallo o deficiencia durante el proceso de creación de programas de ordenador o computadora (software). Dicho fallo puede presentarse en cualquiera de las etapas del ciclo de vida del software aunque los más evidentes se dan en la etapa de desarrollo y programación. Los errores pueden suceder en cualquier etapa de la creación de software

En 1947, los creadores de Mark II informaron del primer caso de error en un ordenador causado por un bicho. El Mark II, ordenador sucesor de ASCC Mark I, construido en 1944, sufrió un fallo en un relé electromagnético. Cuando se investigó ese relé, se encontró una polilla que provocó que el relé quedase abierto.

Grace Murray Hopper, licenciada en Física y destacada matemática que trabajó como programadora en el Mark II, pegó el insecto con cinta adhesiva en la bitácora (imagen) y se refirió a ella como "bicho" para describir la causa del problema.

Este incidente es erróneamente conocido por algunos como el origen de la utilización del término inglés "bug" (bicho) para indicar un problema en un aparato o sistema.[1][2]​ En realidad, Thomas Alva Edison ya había utilizado "bug" en algunas anotaciones relacionadas con interferencias y mal funcionamiento. Grace lo asoció por primera vez a la informática, en este caso, relacionado a un insecto real. No obstante, durante los años 50 del Siglo XX, Grace también empleó el término "debug" al hablar de la depuración de errores en los códigos de programación.

Los programas que ayudan a detección y eliminación de errores de programación de software son denominados depuradores (debuggers)

Defectos de diseño de programas

  • Diseños con colores inapropiados para las personas que padecen daltonismo
  • Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño.
  • Diseños que fuerzan el uso del ratón o mouse sin dejar alternativas de teclado para personas con disfunciones motrices.
  • Diseños con implicaciones culturales, por ejemplo usando partes del cuerpo que en una determinada cultura sean objeto de vergüenza o burla o símbolos con características de identidad cultural o religiosa.
  • Estimar que el equipo donde se instalará tiene determinadas características como la resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o conectividad a internet
  • Objetos intrusivos y obstrusivos como cuadros de diálogo modales al sistema o asistentes como "Clippy" (Clipo, en español) que impedía el uso uniforme de Office de Microsoft.

Errores de programación comunes

Defectos de instalación o programación

  • Eliminación o sustitución de bibliotecas comunes a más de un programa o del sistema (DLL Hell).
  • Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto.
  • Presuponer que el usuario tiene una conexión permanente a internet.

Códigos de errores de lenguajes de programación

La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores que permiten a los programadores manejar las fallas de los programas de una manera eficiente y que no resulte agresiva con el usuario final. Dichos errores son de compilación y errores en tiempo de ejecución.

Los errores de compilación normalmente inhiben que el código fuente derive en un programa ejecutable, mientras que los errores en tiempo de ejecución son situaciones específicas en las que un evento externo al programa impide su ejecución. Regularmente un programador eficiente debe intentar imaginar como debe responder ante esos eventos de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan el problema. Así por ejemplo un bloque de error no manejado podría hacer lo siguiente:

Abre el archivo "miarchivo" para escritura
comienza a escribir datos en mi archivo
cierra el archivo

Si "miarchivo" no existe (o el programa o el usuario no tienen privilegios suficientes para abrirlo), el sistema operativo regresará un error que el programa no atrapará y tendremos un mensaje como "El archivo "miarchivo" no puede ser abierto para escritura" y botones para reintentar, cancelar y abortar (en el sistema operativo Windows), que no tendrán otra acción que repetirse indefinidamente sin posibilidad de salir de ese ciclo como no sea dando por terminado violentamente el programa. Un código que permitiese atrapar el error en tiempo de ejecución sería:

Abre el archivo "miarchivo" para escritura
Si el sistema operativo lo permite
 comienza a escribir datos en "miarchivo"
si no lo permitió 
 informa al usuario de lo que sucede
 regresa al usuario a un punto donde no haya conflicto (el menú principal, por ejemplo)
Continúa operando normalmente

Los diferentes lenguajes de programación permiten diferentes construcciones lógicas a los programadores para atrapar y resolver errores en tiempo de ejecución, como pueden ser las sentencias assert, try y on error en diferentes lenguajes de programación.

Véase también

Referencias

  1. bug
  2. La polilla que voló dentro de un ordenador y el origen de «bug informático» | Microsiervos (Leyendas Urbanas)

Enlaces externos