Para trabajar con programas cada vez más complejos, una técnica muy útil y sugerida es la del desarrollo incremental, el objetivo de esta técnica es el de evitar largas sesiones de depuración, al añadir y probar solamente una pequeña cantidad de código a la vez.
Siempre es mas sencillo ver las cosas con un ejemplo asi que:
Supongamos que quieres hallar la distancia entre dos puntos, determinada por las coordenadas (x1, y1) y (x2, y2) en python.
Lo primero que debes saber es que según el teorema de Pitágoras, la distancia es:
distancia =
| √ |
|
| (x2 - x1)2 + (y2 - y1)2 |
|
Ya a partir de eso, lo que debemos tener en cuenta es qué aspecto debería tener una función de distancia en Python. En otras palabras, ¿cuáles son las entradas (parámentros) y cuál es el resultado (valor de retorno)?
En este caso, los dos puntos son las entradas, que podemos representar usando cuatro parámetros. El valor de retorno es la distancia, que es un valor en coma flotante.
A sabiendas de esto podemos escribir un esbozo de la función:
>>> def distancia(x1, y1, x2, y2):
.... return 0.0
Evidentemente, esta versión de la función no calcula distancias y siempre da cero, sin embargo, es sintácticamente correcta y funcionará, lo que significa que podemos probarla antes de hacerla más complicada.
Para probar la nueva función, la llamamos con valores de muestra:
>>> distancia(1, 2, 4, 6)
0.0
Elegimos estos valores para que la distancia horizontal sea igual a 3 y la vertical sea igual a 4, de esta manera, el resultado es 5 (la hipotenusa de un triángulo cuyos lados miden 3, 4 y 5)
Nota: Cuando se prueba una función, es útil saber el resultado correcto.
Hasta el momento, hemos confirmado que la función es sintácticamente correcta y podemos empezar a escribir líneas de código. Después de cada cambio incremental, probamos la función nuevamente y si se produce un error en cualquier momento, sabemos dónde debe estar -en la última línea que añadimos-.
Un primer paso lógico en el cálculo es hallar las restas x2 - x1 y y2 - y1. Almacenaremos esos valores en variables temporales denominadas dx y dy, y las presentaremos en pantalla.
def distancia(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
print "dx es", dx
print "dy es", dy
return 0.0
Si la función es correcta, los resultados deberían ser 3 y 4. Si es así, sabemos que la función tiene los parámetros adecuados y que ha realizado el primer cálculo correctamente. En caso contrario, solo hay que comprobar algunas líneas.
A continuación, calcularemos la suma de los cuadrados de dx y dy:
def distancia(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
dsquared = dx**2 + dy**2
print "dsquared es: ", dsquared
return 0.0
Es importante destacar que se retiraron las instrucciones print que escritas en el paso anterior ya que solo eran andamio -Los códigos como éste se llaman de andamio porque ayudan a construir el programa pero no forman parte del producto final.
De nuevo, lo que hay que hacer es ejecutar el programa y comprobar el resultado (que debería ser 25 en estos momentos).
Por último, si ha importado el módulo de matemáticas, ya se puede usar la función sqrt para hacer el cálculo y obtener el resultado:
def distancia(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
dsquared = dx**2 + dy**2
result = math.sqrt(dsquared)
return result
Si funciona de manera adecuada, lo has logrado. De lo contrario, puede que quieras presentar en pantalla el valor de resultado antes de la instrucción de retorno.
De esta forma, cuando se inicia, solo se deben añadir unas pocas lineas a la vez y a medida que se adquiera más experiencia, se podrá escribir y depurar fragmentos mayores.
De cualquier manera, el proceso de desarrollo incremental puede ahorrar un montón de tiempo de depuración y es una buena constumbre....
Los aspectos clave de este proceso son:
- Iniciar con un programa que ya funcione y hacer pequeños cambios incrementales. En cualquier momento, si hay algún error se sabe exactamente dónde está.
- Utiliza variables temporales para mantener valores intermedios para que puedas obtenerlos y comprobarlos.
- Una vez que el programa esté funcionando, puede que quieras quitar algo del andamiaje o consolidar las múltiples instrucciones en expresiones compuestas, pero sólo si esto no hace que el programa sea más difícil de leer.