ERROR DE SOFTWARE
Error de software
Un bug es un error lógico en un programa. El humano programador, al programar computadoras le da una serie de operaciónes a realizar. Si esa serie de operaciones es logicamente incorrecta, el programa (software) se dice que presenta bugs.
Ejemplo:
- Abre el archivo "miarchivo" para escritura
- comienza a escribir datos en mi archivo
- cierra el archivo
¿Que sucede si “miarchivo” no existe?
Es un error que se puede presentar bajo condiciones “no previstas” por lo general y se presentan a menudo en validaciones no realizadas, con el ejemplo sencillo que muestra Anibal Antonelli, el programa está hecho para leer un archivo y escribir en él, y como dijo Anibal, qué pasa si no existe?? o si el archivo solo está en modo lectura, o está en una extensión que no es txt o un tipo de extensión raro??? o Si simplemente por alguna razón independiente al programa no se puede abrir o guardar?? en ese caso y dependiendo del programa, se podría solucionar de forma “general” con instrucciones try catch.
Continuando con el ejemplo, si el archivo se puede leer, tiene una extensión válida, etc el programa funcionará de maravilla, si alguien en algún momento sel cambia el nombre o la extensión u otra cosa que le impida al programa continuar, éste fallará y puede ser que se pasme, que se cierre, que no pase “nada”, pero simplemente no funcionará… Implementando las instrucciones try catch, si no se puede completar la acción, el programa no se detiene… continúa ejecutándose, pero puedes indicar que si el programa entra al catch mande un mensaje con el error encontrado, y el usuario puede proceder a tratar de resolverlo, si es que está en sus manos… Dentro de la lógica se puede hacer un segundo intento de lectura o notificarle al usuario del error u otra acción.
Las instrucciones try catch, funcionan similar a if else, sólo que try catch se usa más en situaciones que no dependen directamente del código si no de otros elementos, por ejemplo, la lectura de un archivo, imagen, documento, etc, una consulta a la base de datos, una consulta a un API, etc.
- División por cero
- Ciclo infinito
- Problemas aritméticos como desbordamientos (overflow) o subdesbordamientos (underflow).
- Exceder el tamaño del array definido
- Utilizar una variable no inicializada
- Errores tipográficos varios, por ejemplo confundir el dígito "0" con la vocal "O", confundir el dígito "1" con la letras "I" o "l", o escribir "," en lugar de "." como parte de nombres de variables en lenguajes donde no es necesario declarar las variables antes de usarlas. Por ejemplo, en Fortran IV los espacios no cuentan, por lo que cambiar una coma por un punto en un bucle DO 100 I=1. 10 equivale a la asignación DO100I = 1.10 que por ser una instrucción válida no la reporta el compilador.
- Usar constantes mágicas, es decir que en lugar de definir una variable o macro para definir un parámetro que puede cambiar, poner el valor en el código. Por ejemplo, declarar un arreglo float X[10] y usarla en bucles for i=0 to 10 en varias partes del programa en lugar de definir una constante XSize=10; float X[XSize]; y usar for i=0 to XSize, con lo que se evitan omisiones cuando se cambie la dimensión de X, ya que basta con con cambiar XSize=20 en lugar de buscar en todo el código las constantes mágicas 10 para cambiarlas por 20.
- Acceder a memoria no permitida (Violación de acceso)
- Pérdida de memoria (memory leak)
- Desbordamiento o subdesbordamiento de la pila (estructura de datos) (Stack overflow)
- Desbordamiento de búfer (buffer overflow)
- Bloqueo mutuo (deadlock)
- Indizado inadecuado de tablas en bases de datos.
- Corrupción de las bases de datos relacionales por no estar normalizadas.
- Desbordamiento de la pila de recursión, cuando se dejan demasiadas llamadas en espera.
- Programar por ensayo y error, en lugar de desarrollar los programas sistemáticamente.
- No atender los mensajes de advertencia al momento de compilar un programa.
- Errores que resultan del uso indiscriminado de variables de alcance global.
- Errores por no declarar el tipo de las variables.
- Errores que emergen porque el programador no toma en cuenta la semántica del lenguaje de programación. Por ejemplo, desconocer si el alcance es léxico o dinámico.
- Errores de sintaxis, por ejemplo, no terminar una instrucción con un punto y coma ( ; ) en un lenguaje de programación que lo requiere.
- No documentar correctamente el programa, provoca el no entender qué hace, lo que acarrea errores por no tener claro lo que hace.
- Condición de carrera (race condition)
- Uso incorrecto de API.
- Incompatibilidad de sistemas.
Comentarios
Publicar un comentario