REVIT ARCHITECTURE (960) – PYTHON – Funciones (44) – Excepciones (6) Caminos de ejecución. Prueba del código

Para probar el código se ha de revisar todos los caminos de ejecución que puede seguir este código.

Este proceso de comprobación se va a comprobar con el siguiente código donde hay tres caminos para seguir determinados por declaraciones if-elif-else. Por supuesto, los caminos de ejecución también pueden estar formados por muchos otros elementos, como bucles o incluso bloques try-except. :

7508

Entrada de datos:

7509

input(‘Introduce la temperatura actual:’): Esta función pide al usuario que ingrese un valor desde el teclado. El mensaje entre comillas aparece en la consola para guiar al usuario.
Conversión a flotante (float()): El valor que ingresa el usuario es inicialmente un string (cadena de texto). Para trabajar con este valor numéricamente, el programa lo convierte a un número flotante (es decir, un número que puede tener decimales) usando la función float().
El valor resultante, ya convertido a un número flotante, se almacena en la variable valor.
Ejemplo: Si el usuario ingresa -10, la función input() obtiene el valor «-10», y la función float() lo convierte en -10.0. Ese número flotante se asigna a la variable valor.

Estructura condicional (if-elif-else): Este bloque de código realiza una serie de evaluaciones lógicas para determinar qué mensaje debe imprimir en función del valor ingresado.

Primera condición (if valor > 0):

7510

El programa primero evalúa si el valor de la variable valor es mayor que 0.
Si esta condición es verdadera, se ejecuta el bloque de código dentro del if, que imprime el mensaje «Por encima de cero».
Ejemplo: Si el valor ingresado fue 15.0, el mensaje que aparecerá será «Por encima de cero».

Segunda condición (elif valor < 0):

7511

Si la primera condición no es verdadera (es decir, si valor no es mayor que 0), el programa evalúa si valor es menor que 0.
Si esta condición es verdadera, el programa ejecuta este bloque de código y muestra el mensaje «Por debajo de cero».
Ejemplo: Si el valor ingresado fue -7.0, el programa imprimirá «Por debajo de cero».

Última opción (else):

7512

Si ninguna de las dos condiciones anteriores se cumple, significa que el valor de valor es exactamente 0.0.
En este caso, se ejecuta el bloque del else, que imprime el mensaje «Cero».
Ejemplo: Si el valor ingresado fue 0, el programa imprimirá «Cero».

El Comportamiento del código es el siguiente:
El programa solicita al usuario que ingrese un valor (en la unidad que se esté utilizando).
El valor ingresado se convierte a un número de tipo flotante y se almacena en la variable valor.
El programa evalúa tres posibles escenarios:
Si el valor es mayor que 0, muestra el mensaje «Por encima de cero».
Si el valor es menor que 0, muestra el mensaje «Por debajo de cero».
Si el valor es exactamente 0, muestra el mensaje «Cero».

A continuación se indican Ejemplos de ejecución:
Ejemplo 1:

Entrada del usuario: 25
Proceso: valor = 25.0, que es mayor que 0.
Salida: «Por encima de cero»
Ejemplo 2:

Entrada del usuario: -8
Proceso: valor = -8.0, que es menor que 0.
Salida: «Por debajo de cero»
Ejemplo 3:

Entrada del usuario: 0
Proceso: valor = 0.0, que es igual a 0.
Salida: «Cero»
El Resumen del proceso lógico es el siguiente:
Se recibe un valor desde el usuario.
Se convierte el valor ingresado a un número flotante.
Se evalúa si el valor es mayor, menor o igual a cero.
Dependiendo de la evaluación, se muestra un mensaje correspondiente.

Para probar el código de manera justa, sin problemas (las pesadillas sobre bugs pueden ser devastadoras para el rendimiento de un desarrollador), es obligatorio preparar un conjunto de datos de prueba que obligue a tu código a recorrer todos los caminos posibles.

Intencionalmente se ha introducido un error en el código:  se ha eliminado solo una letra y, como resultado, una invocación válida de la función print() se convierte en la claramente inválida cláusula «prin()» en el bloque elif. No existe tal función como «prin()» en el ámbito de python, pero no está claro que ésto sea así para Python.

7513

El programa ejecuta el código e introduce 0. Como se puede  ver, el código termina su ejecución sin ningún obstáculo.  Python pasa por alto un error tan evidente del desarrollador.

El motivo por el cual el programa imprime «Cero» y no genera un error inmediatamente cuando se escribe prin() en el bloque elif se debe a la lógica de ejecución condicional de Python.

7514

Si valor es menor que 0, el programa intentaría ejecutar el bloque elif.
Sin embargo, como aquí hay un error tipográfico (prin() en lugar de print()), si el programa llega a esta línea, generará un error de ejecución (NameError), porque Python no reconoce la función prin().

Tercera condición (else):

7512

Si las dos condiciones anteriores (valor > 0 y valor < 0) son falsas, el programa ejecuta el bloque else y muestra «Cero».

El motivo por el que no se detecta el error en el bloque elif al imprimir «Cero» es por la Condición en elif no cumplida:

Si el valor que se ingresa es 0, la condición elif valor < 0 es falsa, porque 0 no es menor que 0.
Dado que esa condición es falsa, Python nunca entra en el bloque elif. Por lo tanto, no se ejecuta el código con el error (prin(«Por debajo de cero»)).
Ejecución del bloque else:

Como valor es igual a 0, las condiciones if valor > 0 y elif valor < 0 no se cumplen.
En este caso, Python ejecuta el bloque else, que es el último en la estructura condicional.
El mensaje «Cero» se imprime porque esa es la acción correspondiente al bloque else.
El error se generará únicamente si se ingresa un valor menor que 0, porque entonces el programa entraría en el bloque elif y trataría de ejecutar la función incorrecta prin(). En ese momento, Python intentaría llamar a una función que no existe, lo que provocaría el siguiente error:

7515

Resumen:
El error en prin() no se detecta si ingresas 0 porque la condición que lleva a ese error (valor < 0) no se cumple, por lo que Python no intenta ejecutar el bloque elif.
Python solo evalúa y ejecuta el bloque correspondiente a la primera condición verdadera. En este caso, como valor es igual a 0, Python ejecuta el bloque else y muestra «Cero», sin llegar al bloque donde está el error.

Licencia Creative Commons Contenido Web de Yolanda Muriel está sujeto bajo Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.

Deja un comentario