Objetivo de Aprendizaje
Desarrollar la capacidad de realizar pruebas de escritorio y verificar algoritmos mediante el seguimiento meticuloso de la ejecución paso a paso del código, comprendiendo cómo las variables cambian su valor durante la ejecución y cómo las estructuras de control dirigen el flujo del programa, para fortalecer competencias técnicas en depuración y análisis algorítmico, habilidades cognitivas de pensamiento sistémico y razonamiento lógico, y actitudes de paciencia, precisión y pensamiento crítico que permitan crear software confiable y eficiente.
Introducción: El Detective del Código
Imagina que eres un detective investigando un misterio: tienes todas las pistas (el código fuente) pero necesitas reconstruir lo que sucedió paso a paso. La prueba de escritorio es tu método de investigación, tu lupa para examinar cada detalle del comportamiento del algoritmo. No se trata de ejecutar el código en la computadora, sino de ejecutarlo en tu mente, siendo tú mismo el procesador que interpreta cada instrucción.
Los estoicos practicaban la "premeditatio malorum": anticipar mentalmente los desafíos para estar preparados. En programación, la prueba de escritorio es nuestra premeditatio: anticipamos cómo se comportará el código antes de ejecutarlo, preparándonos para posibles errores y comprendiendo profundamente el algoritmo.
Cuando realizas una prueba de escritorio, te conviertes en un traductor entre dos mundos: el humano (que piensa en problemas y soluciones) y el computacional (que ejecuta instrucciones literales). Esta habilidad no solo te hará un mejor programador, sino un mejor pensador, capaz de descomponer problemas complejos en pasos manejables y predecir consecuencias de decisiones algorítmicas.
Conceptos Fundamentales
¿Qué es una Prueba de Escritorio?
Una prueba de escritorio (o "desk checking") es un proceso manual donde simulas la ejecución de un algoritmo paso a paso, registrando los valores de las variables en cada momento. Es como representar una obra de teatro donde tú eres el director, los actores y el público simultáneamente.
¿Por qué es Esencial?
Porque desarrolla tu capacidad de pensar algorítmicamente. Cuando depuras un programa, el 90% del tiempo no estás escribiendo código, sino pensando en por qué el código no funciona como esperabas. La prueba de escritorio entrena esa habilidad de pensamiento.
Ejemplo 1: Seguimiento de variables simples
a = 5
b = 10
# Intercambio de valores
temporal = a
a = b
b = temporal
# Resultado final
print(f"a = {a}, b = {b}")
Paso 1: a = 5, b = 10, temporal = ?
Paso 2: a = 5, b = 10, temporal = 5
Paso 3: a = 10, b = 10, temporal = 5
Paso 4: a = 10, b = 5, temporal = 5
Resultado final: a = 10, b = 5
Estructuras de Control en Pruebas de Escritorio
Las estructuras condicionales (if) y repetitivas (while, for) añaden complejidad a las pruebas de escritorio porque el flujo puede bifurcarse o repetirse. Aquí es donde la disciplina y meticulosidad se vuelven esenciales.
Ejemplo 2: Condicional con seguimiento detallado
tiene_licencia = False
if edad >= 18:
if tiene_licencia:
puede_conducir = True
else:
puede_conducir = False
else:
puede_conducir = False
print(f"¿Puede conducir? {puede_conducir}")
Paso 1: edad = 17, tiene_licencia = False, puede_conducir = ?
Paso 2: Evaluar condición (edad >= 18) → 17 >= 18 → False
Paso 3: Saltar al else (porque condición es False)
Paso 4: puede_conducir = False
Resultado final: ¿Puede conducir? False
La Tabla de Prueba de Escritorio
La forma más sistemática de realizar una prueba de escritorio es mediante una tabla donde cada fila representa un paso de ejecución y cada columna representa una variable o condición relevante.
Algoritmo: Suma de los primeros N números naturales
suma = 0
i = 1
while i <= n:
suma = suma + i
i = i + 1
print(f"La suma de los primeros {n} números es {suma}")
| Paso | Línea | n | suma | i | Condición (i <= n) | Acción |
|---|---|---|---|---|---|---|
| 1 | 1 | 5 | ? | ? | - | Inicialización |
| 2 | 2 | 5 | 0 | ? | - | Inicialización |
| 3 | 3 | 5 | 0 | 1 | - | Inicialización |
| 4 | 5 | 5 | 0 | 1 | True | Entra al ciclo |
| 5 | 6 | 5 | 1 | 1 | True | suma = 0 + 1 |
| 6 | 7 | 5 | 1 | 2 | True | i = 1 + 1 |
| 7 | 5 | 5 | 1 | 2 | True | Continúa ciclo |
| 8 | 6 | 5 | 3 | 2 | True | suma = 1 + 2 |
| 9 | 7 | 5 | 3 | 3 | True | i = 2 + 1 |
| 10 | 5 | 5 | 3 | 3 | True | Continúa ciclo |
| 11 | 6 | 5 | 6 | 3 | True | suma = 3 + 3 |
| 12 | 7 | 5 | 6 | 4 | True | i = 3 + 1 |
| 13 | 5 | 5 | 6 | 4 | True | Continúa ciclo |
| 14 | 6 | 5 | 10 | 4 | True | suma = 6 + 4 |
| 15 | 7 | 5 | 10 | 5 | True | i = 4 + 1 |
| 16 | 5 | 5 | 10 | 5 | True | Continúa ciclo |
| 17 | 6 | 5 | 15 | 5 | True | suma = 10 + 5 |
| 18 | 7 | 5 | 15 | 6 | False | i = 5 + 1 |
| 19 | 5 | 5 | 15 | 6 | False | Sale del ciclo |
Observa cómo la tabla nos permite visualizar claramente el patrón de ejecución: el ciclo se repite 5 veces (para i=1,2,3,4,5), suma acumula valores progresivamente, y la condición cambia de True a False cuando i supera a n. Esta visualización sistemática transforma un proceso dinámico en una estructura comprensible.
Simulador Interactivo de Prueba de Escritorio
Practica tus habilidades con este simulador. Selecciona un algoritmo y sigue la ejecución paso a paso como si fueras el intérprete de Python.
El Reto Final: El Verificador de Algoritmos
Ahora aplicarás todo lo aprendido en un contexto real. Tu misión es verificar un algoritmo que gestiona las calificaciones de estudiantes y determina si aprueban o reprueban una materia.
Algoritmo: Sistema de Calificaciones
calificaciones = [7.5, 8.0, 6.5, 9.0, 5.5, 7.0]
aprobados = 0
reprobados = 0
suma_calificaciones = 0
for calificacion in calificaciones:
suma_calificaciones = suma_calificaciones + calificacion
if calificacion >= 7.0:
aprobados = aprobados + 1
else:
reprobados = reprobados + 1
promedio = suma_calificaciones / len(calificaciones)
print(f"Aprobados: {aprobados}")
print(f"Reprobados: {reprobados}")
print(f"Promedio del grupo: {promedio:.2f}")
if promedio >= 7.5:
print("El grupo tiene rendimiento excelente")
elif promedio >= 6.0:
print("El grupo tiene rendimiento aceptable")
else:
print("El grupo necesita refuerzo académico")
Tu Misión
Realiza una prueba de escritorio completa para este algoritmo:
- Crea una tabla con las columnas: Iteración, calificacion, suma_calificaciones, aprobados, reprobados.
- Sigue la ejecución paso a paso para cada calificación en la lista.
- Calcula manualmente el promedio y verifica las condiciones finales.
- Identifica qué pasaría si agregamos una calificación de 10.0 al final de la lista.
- Reflexiona: ¿Este algoritmo es justo? ¿Considera situaciones especiales como estudiantes con discapacidad o dificultades temporales?
La verificación de algoritmos no es solo técnica; es también ética. Un algoritmo puede ser técnicamente correcto pero socialmente injusto. Como programadores éticos, debemos preguntarnos no solo "¿Funciona?" sino también "¿Es justo? ¿Qué impactos tiene en las personas?"
Para Profundizar
Una vez que completes la prueba de escritorio, considera estas preguntas:
- ¿Cómo modificarías el algoritmo para que considere una calificación de recuperación?
- ¿Qué sucede si la lista de calificaciones está vacía? ¿El algoritmo maneja este caso?
- ¿Cómo podrías transformar este algoritmo en una función reutilizable?
- ¿Qué aprendizajes de la prueba de escritorio puedes aplicar a otros aspectos de tu vida que requieran pensamiento sistemático?