Error de software (bug)

Se denomina error de software (en inglés “bug”) a un error o fallo en un programa de computadora que hace que se produzca un resultado incorrecto o inesperado, o que se comporte de manera no intencionada. La mayoría de los bugs se deben a errores cometidos en el código fuente del programa, en su diseño, en los componentes y sistemas operativos utilizados por dichos programas o pueden ser causados ​​por compiladores que producen código incorrecto. Los errores pueden tener efectos de poca importancia o hacer que el programa se bloquee o bloquee el equipo.

Error de software (bug)

Qué es un error de software (bug)

Un error de software, también denominado bug (“bicho” en inglés), es un fallo que se presenta en una aplicación o sistema de software, que ocasiona un resultado inesperado o no deseado. La mayoría de los errores de software se deben a fallos cometidos en el código fuente del programa, en su diseño o en los componentes y sistemas operativos utilizados por dichos programas. Algunos errores de software son causados ​​por el compilador que genera el código ejecutable, que producen código incorrecto. Un programa que contiene un gran número de bugs y/o errores que interfieren seriamente con su funcionalidad, se dice que es buggy (defectuoso).

El uso de la palabra “bug” para denominar estos fallos en ordenadores se le atribuye comúnmente a Grace Murray Hopper, una destacada física y matemática, que trabajó como programadora en el Mark II, donde se utilizó por primera vez el término “bug” para describir a una polilla que había sido la causa de un mal funcionamiento en una computadora electromecánica. A Grace también se le asocia el uso de “debug” para referirse a la depuración de errores, un término muy usado en la actualidad.

Sin embargo, el termino bug para describir errores ha sido una parte de la jerga de la ingeniería durante muchas décadas y es anterior a las computadoras y los programas informáticos. De hecho, ya había sido usado por Thomas Alva Edison para referirse a fallos en otros dispositivos.

Los bugs pueden tener diferentes efectos, pueden tener efectos sutiles de poca importancia o hacer que se bloquee el programa o el equipo. Otros se califican como errores de seguridad y, por ejemplo, pueden permitir a un usuario malintencionado pasar por alto los controles de acceso para obtener privilegios no autorizados.

Para la detección y eliminación de errores de software se utilizan programas denominados depuradores (debuggers). Encontrar y corregir errores, o depurar, es una parte importante de la programación de computadoras. Normalmente, la parte más difícil de depurar es encontrar el bug. Una vez que se encuentra, la corrección generalmente es relativamente fácil. Los probadores de software son personas cuya tarea principal es encontrar errores o escribir código para establecer pruebas. En algunos proyectos, se pueden gastar más recursos en pruebas que en el desarrollo del programa.

La administración de errores incluye el proceso de documentar, categorizar, asignar, reproducir, corregir y liberar el código corregido. Los cambios propuestos para solucionar los errores de software, así como las solicitudes de mejora, se administran comúnmente mediante sistemas de seguimiento de errores (bug tracking system).

La gravedad de un bug es el impacto que tiene el error en la operación del sistema. Este impacto puede ser pérdida de datos, pérdidas económicas, esfuerzo desperdiciado, etc.Las reglas para clasificar los errores en niveles según su importancia, serán determinadas por las metas del proyecto y el tipo de industria. Por ejemplo, un bug en un videojuego tiene un impacto totalmente diferente de un bug en un navegador web o en un sistema de monitoreo en tiempo real.

Los niveles de gravedad no están estandarizados, pero se suelen utilizar los siguientes:

  • Crítico (Blocker/Critical): Error que hace que el programa no pueda ejecutarse (por ejemplo, bloqueo del sistema o falta una característica).
  • Alto (High/Major): Error que afecta seriamente a la funcionalidad de la aplicación (por ejemplo, una función no funciona en otro navegador o SO).
  • Medio (Medium/Normal): Impacto de nivel medio (por ejemplo, algunos los mensajes de la aplicación son incorrectos).
  • Bajo (Low/Trivial): Error de bajo impacto (por ejemplo, problemas estéticos en la interfaz de usuario o errores tipográficos).

La gravedad de un error puede no estar relacionada con su prioridad para ser corregido, ambos parámetros suelen ser cuantificados y gestionados por separado. Las prioridades pueden ser similares o incluso idénticas a los niveles de gravedad. Los errores de prioridad “Crítica” siempre se arreglan para la próxima versión, mientras que los errores de prioridad “Baja” pueden no ser arreglados. Algunos errores graves pueden no ser de alta prioridad, por ejemplo si ocurre sólo raramente.

Los bugs de baja gravedad suelen tener baja prioridad independientemente de la probabilidad de que ocurran. De hecho, es una práctica común liberar software con bugs conocidos de baja prioridad. Las razones por las que un desarrollador de software opta por no arreglar un error pueden ser variadas, como por ejemplo los cambios necesarios para solucionar el error son demasiado costosos, no es posible solucionarlo antes de la fecha de lanzamiento, el error ya está arreglado en la próxima versión, el problema está en un área que será obsoleta en la próxima versión, no es un error sino una característica, entre otras.

Respecto a los tipos de bugs, en proyectos de desarrollo de software, un bug puede ser introducido en cualquier etapa. Los bugs surgen de negligencias o malentendidos realizados durante la especificación, diseño, codificación, entrada de datos o documentación. Existen errores debidos al diseño, tales como incorporación de colores no aptos para daltónicos, uso de texto con tipografías que resulta complicado leer, el programa para que no se adapta a diferentes dispositivos, no tiene en cuenta las variaciones en procesadores, resoluciones de pantalla, etc.

Los errores de programación más comunes son ciclo infinito, exceso en el tamaño de array, problemas aritméticos en la programación, incorporar accesos a memoria no permitida, usar una variable no iniciada, deadlock o bloqueo mutuo, etc. Pueden darse también errores durante la instalación, tales como eliminar o reemplazar bibliotecas comunes de uno o varios programas o propias del sistema (DLL Hell), hacer un reinicio de sesión de forma arbitraria para que la instalación se complete, asumir que el usuario dispone de Internet constante y no tomar acciones si esto no sucediera, usar ficheros que tienden a cambiar de ubicación para enlazarlos como fuentes de datos, etc. También se dan los errores de compilación, que impiden que el código fuente pase a ser un programa ejecutable.

La política de un desarrollador con respecto a la calidad del software en lo que se refiere a los errores dependerá de la cantidad y tipo de daños que un bug puede causar. En aplicaciones tales como los viajes espaciales tripulados o la seguridad de un vehículo, ya que un error de software tienen el potencial de causar lesiones humanas o incluso la muerte, dicho software tendrá un mayor control de calidad que, por ejemplo, un software para sitios web de compras online. En aplicaciones como la banca, donde los errores de software tienen el potencial de causar graves daños financieros a un banco o a sus clientes, el control de calidad también es más exigente que, por ejemplo, en una aplicación de edición de fotos.