Técnicas de depuración de programas
Cuando se escriben programas, es normal cometer errores (bugs).
De hecho, en promedio, un programador comete un error cada 10 líneas
de programa. Esto significa que la probabilidad de que el programa
funcione a la primera vez es prácticamente nula.
Por lo tanto, el desarrollo de un programa siempre incorpora una etapa
de depuración (debugging), que consiste en buscar y resolver
los errores cometidos durante la programación. Para facilitar la etapa
de depuración es conveniente usar herramientas especializadas para
estos efectos. La más común es el depurador o también llamado
debugger.
El depurador:
Un depurador es una herramienta que permite intervenir durante la
ejecución de un programa, para saber cómo se está ejecutando. El
depurador permite:
- Ejecutar paso a paso un programa (stepping).
- Establecer puntos de detención (breakpoints).
- Examinar el contenido de las variables y objetos.
- Conocer el encadenamiento de llamadas de procedimientos.
- Retomar la ejecución hasta un nuevo punto de detención.
En este curso usaremos el depurador que trae incorporado JBuilder.
Depuración manual:
Cuando no se dispone de un depurador, se debe recurrir a la depuración
manual. Esta consiste en preparar el programa para poder conocer como
se está ejecutando el programa. La técnica más usual de depuración
de programas consiste en colocar println's en puntos estratégicos del
programa para desplegar el contenido de las variables. Siga las
siguientes recomendaciones para establecer estos puntos estratégicos:
- Dentro de un while, siempre coloque algún println que permita
detectar cuando cayó en un ciclo infinito su programa (un loop). Despliegue
el valor de contadores, datos leídos de un archivo, acumuladores, etc.
- Al inicio de una función o procedimiento, despliegue el valor
de los parámetros recibidos y al retornar despliegue el valor
retornado (mediante return).
- En un if, despliegue cuál de las ramas se tomó: la que corresponde
a la condición verdadera o el else.
Para que resulte más fácil la depuración, comience ejecutando
su programa con poquísimos datos. Nunca olvide, incluir datos
que representen las condiciones de borde del programa. Por
ejemplo: n=0, el archivo esta vacío, etc.
La biblioteca del curso incluye mecanismos para poder grabar
todos los mensajes que aparecen en la pantalla. Para hacer esto,
utilice la opción -l al ejecutar su programa:
java Run -l MiPrograma
Su programa se ejecutará igual que antes, pero además creará un
archivo de nombre console.log que contiene todos
los mensajes que aparecieron en pantalla durante la ejecución
del programa. Esto resulta muy útil, pues las 24 líneas de la
pantalla se hacen escasas con tanto despliegue con println.
Cuando Ud. estime que su programa funciona adecuadamente, comente los
println que introdujo para efectos de depuración (es decir agregue //
para transformalos en comentarios). No los borre, porque más tarde
podría darse cuenta que su programa todavía no funciona completamente
como debería.