Vous êtes sur la page 1sur 6

Pruebas que se le hacen a los programas

La confirmacin de un sistema de software es un proceso continuo en cada etapa


del ciclo de vida del software. La prueba de los programas sigue siendo la tcnica
de confirmacin de sistemas ms utilizada, por lo que informe se centra en ese
tema en su proceso asociado de depuracin.

La prueba de los programas es parte del proceso de confirmacin que suele


realizarse durante la aplicacin y tambin, en una forma distinta, cuando este ha
terminado. La prueba consiste en ejercitar el programa utilizando datos similares a
los datos reales que harn de ser ejecutados por el programa, observar los
resultados y deducir la existencia de errores o insuficiencias del programa a partir
de las anomalas de este resultado.

En ocasiones, se piensa que las pruebas y la depuracin de programas son una


misma cosa. Aunque estn muy relacionadas, en realidad son procesos distintos.
La prueba es el proceso de establecer la existencia de errores en el programa.
Depuracin es el proceso de localizar dnde se produjeron esos errores y corregir
el cdigo incorrecto.

Es muy importante comprender que la prueba nunca demuestra que un programa


es correcto. Siempre es posible que existan errores aun despus de la prueba
ms completa. La prueba de programas slo puede demostrar la presencia de
errores en un programa, no su ausencia. De acuerdo con Myers, se considera
prueba acertada aquella que establece la presencia de uno o ms errores en el
software objeto de la prueba. Obsrvese la diferencia con la definicin normal de
prueba acertada, que es una prueba que no descubre anomalas en el resultado.

La prueba de programas es un proceso destructivo. Se disea para hacer que el


comportamiento de un programa sea distinto del que intentaba su diseador o
aplicador. Como es una caracterstica humana natural que un individuo tenga
cierta afinidad con los objetos que ha construido, el programador responsable de
la aplicacin del sistema no es la persona ms apropiada para probar un
programa. Psicolgicamente, el programador no querr destruir su creacin, lo
cual har que, de manera consciente o inconsciente, elija pruebas que fallan, por
lo que no sern adecuadas para demostrar la presencia de errores en el sistema.

Por otra parte, el conocimiento detallado de la estructura de un programa o


sistema de programacin puede ser muy til para identificar los casos de prueba
apropiados, y el aplicador del sistema tiene una parte importante de esto. La clave
de una prueba de programa acertada es establecer un ambiente de trabajo donde
los aplicadores del sistema y las personas implicadas en estas pruebas realicen
una funcin complementaria. Esto debe incluir la premisa de administracin de
que los errores de los programas son inevitables dada la complejidad de los
sistemas implicados y que los errores no son condenables. El proceso de prueba
no se debe ver como una amenaza para los individuos que participan en la
aplicacin, pues eso hara que se sintieran poco inclinados a cooperar con los
encargados de realizar las pruebas.

Depurar un programa

Las maneras en la cual consiste en depurar el programa usando una aplicacin


creada con este fin. Me estoy refiriendo al "debugger" o depurador, que
normalmente se incluye en casi todos los entornos de programacin. Un
depurador es una aplicacin que permite colocar puntos de parada, inspeccionar
variables o ejecutar un programa paso a paso, con el fin de buscar errores.

El depurador de Dev-C++

Dev-C++ contiene un depurador, no demasiado avanzado, pero s lo suficiente


como para resultar til. Los programas no pueden ser depurados siempre, antes
deben cumplir determinadas condiciones. La primera es que se pueda obtener un
ejecutable. Si no llegamos a eso los errores sern de compilacin o de enlazado, y
un depurador no tiene sentido hasta que se solucionen todos esos problemas.

La segunda condicin es que el fichero ejecutable contenga la informacin para la


depuracin. Un ejecutable que no contenga esa informacin se puede depurar,
pero slo en ensamblador, y no con el depurador que incluye Dev-C++. La
informacin de depuracin consiste en el propio fichero fuente, y los lazos que
unen cada una de las instrucciones del programa y variables, con las resultantes
de compilar el programa, de modo que el depurador pueda saber a qu
instrucciones de cdigo mquina corresponden cada instruccin de C/C++. Y
tambin a qu direcciones de memoria corresponde cada variable, as como su
tipo. Para que el compilador aada esa informacin al programa ejecutable hay
que indicar al enlazador que lo haga. Dev-C++ es lo bastante "listo" como para
hacer esto de forma automtica, pero no est de ms que sepamos cmo hacerlo
nosotros. Sobre todo porque dicha informacin aumenta considerablemente el
tamao del ejecutable, y una vez depurado, deberamos eliminarla para crear una
versin final.

Para hacer que el enlazador incluya o no la informacin del depurador debemos


acceder a las "Opciones del Compilador", que se encuentran en el men de
"Herramientas", y, como se ve en el siguiente grfico, en la pestaa
"Configuracin" del cuadro de dilogo de "Opciones del Compilador", en las
opciones del "linker". Si activamos la opcin "Generar Informacin de Debug",
dicha informacin se aadir la prxima vez que compilemos y enlacemos el
programa con xito. Si la desactivamos, se eliminar, del mismo modo, despus
de compilar y enlazar el programa.
La tercera condicin es colocar algn punto de parada en la parte del programa
que queremos depurar. Los puntos de parada indican al depurador que detenga la
ejecucin del programa y devuelvan el control al usuario, es decir, a nosotros. Una
vez detenido el programa podremos inspeccionar variables, modificarlas, continuar
la ejecucin, o seguir ejecutando el programa sentencia a sentencia.

Colocar un punto de parada

Hay dos formas de activar un punto de parada, breakpoint. La ms sencilla es


pulsar con el ratn en la zona del margen junto a la lnea en la que queremos
situar el punto de parada.
Otra forma es situar el cursor en la lnea en que queremos situar el punto de
parada y usar el men "Depurar->Aadir/Quitar punto de Ruptura".
En cualquiera de los casos, se visualizar la lnea con fondo rojo, y un icono rojo
con una 'V' verde en su interior en la zona del margen:
Para eliminar un punto de parada se procede del mismo modo.

Ejecutar un programa en modo de depuracin

De nuevo hay varias formas de hacer esto. Una consiste en pulsar el icono en
forma de 'V' en la barra de herramientas. El mismo icono est en la parte inferior,
en la pestaa de "Depurar", al activar esta pestaa podemos acceder al icono de
"Depurar", por ltimo, tambin podemos hacerlo mediante el men "Depurar-
>Depurar", o por el atajo, pulsando la tecla [F8].
En cualquier caso, el programa se ejecutar normalmente hasta alcanzar un punto
deparada. En ese momento el control vuelve al entorno de Dev-C++ y se muestra
la lnea de ejecucin actual con fondo azul y con un icono en forma de flecha en el
margen:
Otra variante de punto de parada consiste en situar el cursor en la lnea hasta la
que queremos que se ejecute el programa y pulsar "Ir al cursor". Esto trabaja igual
que si hubiramos situado un punto de parada en esa lnea, y lo borrramos una
vez alcanzado.
Pero cuidado, el resto de los puntos de parada siguen activos, si se alcanza uno
de ellos antes que la posicin del cursor, el programa parar en ese punto.

Parmetros

Si nuestro programa necesita recibir parmetros desde la lnea de programa,


podemos suministrarlos mediante la opcin del men "Depurar->Parmetros...".
Esto nos permite simular una orden desde la consola con la lista de parmetros
que prefiramos.
Ejecucin pas a paso

A partir de aqu podemos optar por ejecutar el programa hasta el siguiente punto
de parada, pulsando "Saltar paso", o reanudar la ejecucin paso a paso o ejecutar
la siguiente sentencia, mediante "siguiente paso".
La diferencia entre "siguiente paso" y "paso a paso" es sutil pero importante. La
primera opcin ejecuta cada sentencia como un nico paso, por ejemplo, si
tenemos una sentencia como:

for(int i=0; i < 12; i++) x[i] = i;

"Siguiente paso" la ejecutar de una sola vez, mientras que "paso a paso"
ejecutar cada una de las iteraciones.
Si la sentencia contiene una llamada a una funcin, "siguiente paso" la ejecutar
como una sentencia nica, y "paso a paso" transferir la ejecucin al interior de la
funcin y ejecutar sus sentencias paso a paso.

Inspeccionar variables

Mientras la ejecucin est detenida podemos consultar el valor de las variables


accesibles desde el punto de ejecucin actual, por ejemplo:
En este ejemplo hemos aadido algunas variables a la lista de variables
inspeccionadas, concretamente la variable x, que es un puntero a int, la variable
cadena que es un array de caracteres y el elemento 0 del array dinmico x.
Aadir variables a la lista es fcil, basta con pulsar en "Aadir watch" y escribir el
nombre de la variable a visualizar. Igual de sencillo es eliminarlas: seleccionamos
la variable a borrar y pulsamos sobre el icono "Quitar watch".
Existe otra herramienta, aunque parece que en la versin actual de Dev-C++ an
no est muy conseguida. Consiste en modificar el valor de alguna de las variables
observadas.
Pulsando sobre la variable en la lista, con el botn derecho aparece un men. La
segunda opcin tiene un icono con un martillo, "Modificar valor".

Detener la ejecucin

Si el programa ha entrado en una situacin en la que hemos perdido el control, o


sencillamente, no nos interesa continuar depurando, podemos detener la
ejecucin mediante
la opcin "Parar ejecucin", ya sea en el men de "Depurar" o en la zona de
depuracin inferior.

Bibliografas:

Moreno Bonett, Alberto., Acosta F., J.Jesus. (1987). mtodos de optimizacin.


Mxico D.F.: REPRESENTACIONES Y SERVICIOS DE INGENIERIA.

Field, Tim., Graham, Lyle J. (1986). IBM/DC. Mxico D.F.: Libros McGraw-Hill.