Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Pruebas basadas en propiedades

5 tareas · 40 min · Principiante

Las pruebas de ejemplos comprueban los datos que alguien escribió. Las pruebas basadas en propiedades comprueban una regla que debe cumplirse para cualquier dato, y una herramienta se encarga de buscar el dato que la rompe. En Pasca Analítica, una empresa ficticia, las pruebas de ejemplos de las funciones estadísticas pasan todas; las cuatro propiedades nuevas no. Lees las funciones, las propiedades y la salida de la corrida para decidir qué fallos son reales y qué propiedad no vigila nada. Todo es lectura sobre código propio ficticio.

0 de 5 · 0%

Objetivo de la sala

Las pruebas de ejemplos comprueban los datos que alguien escribió. Las pruebas basadas en propiedades comprueban una regla que debe cumplirse para cualquier dato, y una herramienta se encarga de buscar el dato que la rompe. En Pasca Analítica, una empresa ficticia, las pruebas de ejemplos de las funciones estadísticas pasan todas; las cuatro propiedades nuevas no. Lees las funciones, las propiedades y la salida de la corrida para decidir qué fallos son reales y qué propiedad no vigila nada. Todo es lectura sobre código propio ficticio.

Una propiedad es una frase que debe ser verdad para toda entrada de cierto tipo: «ordenar una lista no cambia cuántos elementos tiene», «leer lo que se acaba de escribir devuelve lo escrito», «la media está entre el mínimo y el máximo». La herramienta genera cientos de entradas, a menudo con valores incómodos (listas de un elemento, números enormes), y cuando una rompe la regla la reduce al ejemplo más pequeño que sigue rompiéndola.

Una propiedad útil describe un hecho independiente de la implementación. Si se limita a repetir el cálculo que hace la función, solo compara el código consigo mismo y nunca puede fallar.

Responde para continuar

Se prueba una función `ordenar`. ¿Cuál de estas es una propiedad que vigila algo?

Ver pista de ayuda

Una propiedad describe un hecho que debe cumplirse para cualquier lista, no repite el cálculo ni fija un caso.

Compara la propiedad con la función. Si la comprobación de la prueba es la misma expresión que usa la función, la prueba es una tautología: pasará aunque la fórmula esté mal, porque se equivoca igual en los dos lados. Las pruebas de ejemplos también caen en esto cuando el valor esperado se calcula con el código que se prueba.

Abre tablas/estadistica.py y tests/test_propiedades.py.

Responde para continuar

Escribe el nombre de la prueba de propiedades que repite la fórmula de la función en lugar de comprobar un hecho.

Ver pista de ayuda

Busca la prueba cuya comprobación calcula `sum(datos) / len(datos)`, igual que la función.

Cuando una propiedad falla, la herramienta imprime el ejemplo que la falsifica, ya reducido. No hay que adivinar nada: ahí está la entrada exacta. Lee el resultado de la media con esa entrada.

Abre salida/propiedades.txt.

Responde para continuar

¿Qué valor devuelve la media con el ejemplo mínimo que hace fallar la prueba de la media?

Ver pista de ayuda

La salida de la prueba lo imprime junto al ejemplo; piensa en qué pasa al sumar dos números casi en el límite de lo que cabe en un decimal.

La segunda propiedad que falla encontró un caso que ninguna prueba de ejemplos escribió: una lista donde todos los valores son iguales. Al normalizar, el denominador es cero. Las propiedades encuentran estos bordes porque las herramientas generan listas de un elemento, listas con valores repetidos y números en los extremos.

Responde para continuar

Escribe el nombre de la excepción que lanza la función de normalizar con el ejemplo mínimo.

Ver pista de ayuda

En `salida/propiedades.txt`, mira el segundo fallo y la función a la que apunta.

El ejemplo mínimo es oro: es una entrada real que rompió el código propio. Una vez corregida la función, no se tira. Se guarda como ejemplo fijo de la prueba (las herramientas de propiedades permiten añadir ejemplos explícitos, y algunas recuerdan por sí solas los que fallaron) o como una prueba de ejemplos normal. Así, si el fallo vuelve, lo detecta la siguiente ejecución sin depender de que el generador lo encuentre otra vez por azar.

Responde para continuar

Se corrigió `normalizar` y la propiedad pasa. ¿Qué se hace con el ejemplo mínimo que la rompía?

Ver pista de ayuda

Un fallo que ya ocurrió una vez es el mejor candidato a una prueba permanente.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad