Cómo hacer una prueba de escritorio
En este escrito te explico como hacer una prueba de escritorio detallada para un algoritmo. Para explicártela tomaré como ejemplo el algoritmo de ordenamiento de arreglos por selección. Y con él, paso a paso, y con muchas ilustraciones, construyo la prueba de escritorio.
Algo que he observado en mis muchos años de profesor universitario es que las pruebas de escritorio casi no se enseñan, y si se enseñan, es en su versión más reducida. Las pruebas de escritorio son vitales en la formación de cualquier programador y son muchas las razones para afirmar esto, pero sólo mencionaré algunas que considero muy importantes. La primera razón es que la pruebas de escritorio son una estrategia para buscar errores en un programa, sólo con esta razón debería ser suficiente para enseñarlas. La segunda razón, es que con una prueba de escritorio se puede entender como funciona un algoritmo, otra razón que por si sola justificaría enseñar las pruebas de escritorio. Y finalmente, la razón que considero más importante; las pruebas de escritorio desarrollan habilidades cognitivas que son esenciales para toda persona que programe.
Pero volviendo al tema, como te decía en el primer párrafo me basaré en el algoritmo de selección que se usa para ordenar arreglos. Este algoritmo ya lo había explicado en ¿Cómo ordenar un arreglo por selección?. Si no lo has leído este es un buen momento, y si ya lo hiciste y no has entendido mucho pues con la prueba de escritorio lo puedes entender; y si ya eres un experto en selección entenderás muy bien este escrito. De todos modos pongo el algoritmo a continuación para que lo recuerdes.
Una prueba de escritorio es una tabla en la que se ponen las sentencias y variables del algoritmo. En este orden de ideas lo primero que se construye de esa tabla es su encabezado, el cual te muestro a continuación.
Como puedes ver la primera columna es la de sentencias del algoritmo, las siguientes son las variables de éste. Además, si te fijas hay varias columnas para el arreglo y cada uno numerada.
Ahora para hacer una prueba de escritorio necesitamos unos datos de prueba, para la nuestra vamos a usar un arreglo de cuatro elementos para que no sea muy largo. Estos datos de prueba se ponen en la inicialización como se ve a continuación.
Como puedes ver la longitud del arreglo es cuatro y además están las valores iniciales del arreglo.
Ahora si, entremos en materia comenzando con el algoritmo. La primera sentencia que se ejecuta es la siguiente.
Se inicializa la variable i del ciclo. Esto agrega una fila en nuestra prueba de escritorio de la siguiente forma.
Puedes ver que la sentencia se anota en la columna de sentencia y el resultado de esta sentencia, el poner el valor de la variable i a cero, se escribe en la respectiva columna (la de la i).
La siguiente sentencia, la validación de la condición del ciclo, se ve en la ilustración.
Esto agrega una nueva fila a la prueba de escritorio de la siguiente forma.
Mira en la última fila, en la columna sentencia, pongo a continuación el detalle.
Como vez, se copia la sentencia y se evalúa paso por paso, hasta que se obtiene un valor. En este caso éste valor es true lo que quiere decir que el ciclo continua, si fuera false el ciclo terminaría.
Como es verdadero se ejecuta la primera sentencia del ciclo, que es.
En la prueba de escritorio lo anterior se anota de la siguiente forma.
Mira como la sentencia es evaluada paso a paso y cuando ya se tiene un resultado se pone éste en la columna respectiva. Pongo el detalle a continuación.
Ahora el algoritmo continua de la siguiente manera.
Se anota cual es la posición en el arreglo del menor elemento. Esto en la prueba de escritorio se escribe de la siguiente manera.
En todas las asignaciones se evalúa primero lo que está a la derecha del igual y cuando se tiene una constante a ese lado, esa constante se copia en la columna de la variable que aparece a la izquierda del igual.
El algoritmo sigue así.
Aquí se inicializa la variable j del ciclo interior con una posición más de la variable i. Lo cual en la prueba de escritorio se escribe de la siguiente manera.
También aquí la sentencia se evalúa por pasos y modifica la columna de la variable j.
En este momento espero que ya tengas la idea, pero para estar seguro te voy a mostrar a continuación toda la prueba de escritorio.
Si está muy pequeña puedes hacer clic sobre ella para verla más grande y si estás en un navegador como Firefox vuelve y le haces clic para hacer zoom. O mejor, mira el PDF de la prueba de escritorio que te anexo a continuación: Prueba de escritorio del Ordenamiento por Seleccion, para n=04 (PDF). Con este último puedes agrandarlo todo lo que quieras.
Finalmente he hecho una prueba de escritorio mucho más larga para el mismo algoritmo, para n = 10, de hecho con los mismos datos del artículo ¿Cómo ordenar un arreglo por selección?. Esta prueba la adjunto a continuación: Prueba de Escritorio para el algoritmo de ordenamiento por selección para n=10.
Para ser un experto en pruebas de escritorio solo hay un camino: Practicar y volver a practicar y volver al practicar y … . Si practicas muchos te puedo garantizar que tendrás una de las cosas necesarias para dominar la programación.
Hola Alejandro: Me parece una muy buena explicación de lo que es una prueba de escritorio. Tema que es necesario incentivarlo en los estudiantes de programación.
Con python se pueden hacer pruebas chéveres como esta http://pythontutor.com/visualize.html#mode=edit
Creo que las pruebas de escritorio ayudan a apreciar y entender el proceso subyacente.
chévere la producción escrita.
Pero es sólo con python
Necesito hacerla con C++
O con G
Hola aztlek, ante todo darte las gracias por el magnífico post. Estoy aprendiendo a programar de manera autodidacta (de momento), y esto puede ayudarme muchísimo a entender los algoritmos y flujos de datos, entre otras cosas.
Pero verás, tengo una duda que no consigo resolver (quizá es que hago mal el flujo o que aún no entiendo los bucles bien), pues no comprendo por qué en tu Prueba de Escritorio, en la línea 11 (J++), el bucle FOR que creas para la variable J, no vuelve a evaluar la condición «J<n" hasta que dicha condición es false (4<4); Al menos, no vuelve a aparecer escrito en la Prueba hasta dicho momento.
¿No se supone que se debe evaluar la condición "J<n" cada vez que la variable J cambia? Me tiene muy descolocado esto. ¿Cómo sabe el programa entonces que debe volver a ejecutar el contenido del bucle o saltarlo?
Espero haberme explicado bien. Un saludo.
creo que tiene fallas la prueba de escritorio porq en la linea 8 dice array en la posicion 0 no deberia ser la posicion 1 para que escoja el elemento 45 gracias…