39

Al programar, como cualquier otra actividad humana. Estamos expuestos a cometer errores al codificar. Por ello es importante saber, que tipo de errores podemos cometer al realizar nuestros programas. En esta entrada de blog, te compartiré un artículo que nos ayudará un poco a entender este tema.

Hay distintos tipos de errores y distintas formas de clasificarlos. Vamos a ver primero una serie de definiciones para luego ver las clasificaciones. Los cuatro tipos básicos de errores son: de sintaxis, por proceso no válido, lógicos tipo bucle infinito y lógicos tipo resultado incorrecto.

ERRORES DE SINTÁXIS

Son todos aquellos que se generan por infringir las normas de escritura de un lenguaje. Suelen deberse a olvidos o a desconocimiento (programadores principiantes) y comprenden falta o mal uso de elementos separadores (comas, puntos y comas, dos puntos, etc.), palabras mal escritas (por ejemplo Mietras en vez de Mientras o Finelizar en vez de Finalizar).

Suelen ser errores obvios y fáciles de detectar. La mayoría de los lenguajes tienen herramientas de ayuda para facilitar la escritura y la corrección del código desde el punto de vista sintáctico. Además, en general, no es posible la ejecución de un programa con errores de sintaxis y se insta al programador a su corrección en los distintos puntos donde pueda haber problemas por parte del programa de gestión del lenguaje que se esté utilizando.

Téngase en cuenta que aparte de olvidos, escritura incorrecta de signos, palabras mal escritas, etc. la omisión de términos obligatorios también será considerada error de sintaxis. Por ejemplo un Si que no se cierra con un FinSi o un Repetir que no se corresponde con un Mientras.

ERRORES POR PROCESOS NO VÁLIDOS

Cada lenguaje tiene sus particularidades o formas de concepción. Cualquier sintaxis aparentemente correcta pero que infrinja las normas de construcción de programas que define el lenguaje dará lugar a un error. Las posibilidades son muy variadas. Por citar algunas habituales señalaremos:

  • Indeterminaciones matemáticas (p. ej. SQR(a) con a < 0).
  • Asignar un valor a la variable que no coincide con el tipo declarado para la variable.
  • Uso de variables no declaradas.
  • Modificaciones no permitidas del número de localizadores de un array dinámico.
  • Llamadas a módulos que no existen.
  • No pasar los parámetros o pasar un número incorrecto de parámetros a un módulo genérico.
  • Tratar de extraer datos o usar ficheros que no se encuentran.

Los procesos no válidos pueden deberse al programa o a circunstancias ajenas al programa, como que el usuario no introduzca el dato esperado, que un señalero no esté donde tiene que estar, que los datos no estén ordenados como tenían que estarlo, que un archivo no contenga la cantidad de datos que se espera o que un dato o fichero no esté donde se espera. Suelen ser errores que se pueden detectar y gestionar. Su localización se ve facilitada por las herramientas de corrección o depuración del lenguaje que utilicemos, como los ya comentados “paso a paso”.

ERRORES LÓGICOS

Son todos aquellos derivados de un mal diseño de los algoritmos o la arquitectura modular. Las posibilidades son muchas y los efectos posibles también. Pueden ir desde el bloqueo o detención indeseada del programa hasta un resultado incorrecto, una parte del programa que no se ejecuta, etc.

Los errores lógicos que afectan al desarrollo del programa son más fáciles de detectar que aquellos que no generan aparentemente problemas. A su vez, de entre los que aparentan no suponer problema, los que generan muy pequeñas disfunciones o desviaciones del resultado resultan más difíciles de detectar que los que dan lugar a resultados ostensiblemente desviados de lo esperado.

Los errores lógicos son quizás los que más grandes quebraderos de cabeza originan a los programadores, los más difíciles de evitar y los más difíciles de detectar. Un programa lleno de errores de sintaxis pero de lógica exquisita es una bendición comparado con un programa lleno de errores de lógica pero de perfecta sintaxis.

Evitar errores lógicos no pasa ya por conocer bien el lenguaje y las formas de construcción del lenguaje. Pasa por ser un buen programador, un buen pensador. Y eso es difícil de enseñar o de aprender. Partamos de estrategias y métodos que se saben eficientes y dejemos a la experiencia realizar el resto.

Vamos a dividir los errores lógicos en dos tipos.

  1. Errores lógicos tipo bucle infinito: son aquellos que dan lugar a una parada o bloqueo del programa. Incluiremos aquí procesos en realidad no infinitos pero que consumen un tiempo desmedido respecto a lo esperado.
  2. Errores lógicos tipo resultado incorrecto: no bloquean el flujo del programa pero dan lugar a un resultado desviado. El grado de desviación escaso puede dificultar su detección y corrección. El ordenador no puede saber que existe un error pues sólo el programador que idea el proceso puede decir si éste es correcto o no.

Hasta aquí lo que hemos llamado cuatro tipos básicos de errores. Cuando existe un procedimiento a seguir previsto ante la presencia de uno de estos errores decimos que se trata de un error gestionado. Ser gestionado es un atributo del error que cambia sus propiedades. La naturaleza sigue siendo la misma pero los efectos no, al ser “controlados” o “encauzados”. Lo ideal es que todos los errores posibles sean gestionados, pero esto no garantiza calidad ni buen funcionamiento del programa. Únicamente asegura que el programador y/o usuario mantienen un cierto control del flujo del programa con el fin de poder obtener resultados parciales, reorientar procesos o poder proceder a una salida controlada.

En la gestión del error normalmente interviene el propio programa. Cuando se produce el error, éste es detectado y se procede a su gestión. Por tanto un error lógico tipo resultado incorrecto no puede ser gestionado por esta vía (a la que llamaremos gestión vía detección) puesto que para el ordenador ese error no existe. La única posibilidad de gestionarlos es a su vez la vía lógica a través de módulos de control de resultados, lo que según qué casos puede resultar muy complicado”.

Para el manejo de errores, algunos lenguajes como java. Contienen un sistema de excepciones, que nos ayudan al buen manejo de los mismos. En nuestra siguiente sesión, trataremos justamente el manejo de estas excepciones.