🔒 Registro cerrado · Apertura oficial próximamente · Acceso exclusivo para alumnos activos
Iniciar SesiónPruebas 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.
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.
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
Preferencias
Configuraciones de cookies
Elige qué categorías permitir. Las esenciales siempre están activas. Consulta la Política de Privacidad.
Esenciales
Siempre activas · sesión, CSRF, tema y esta preferencia
Necesarias para iniciar sesión, proteger formularios (CSRF) y recordar tu elección de cookies y tema. Sin ellas la plataforma no funciona de forma segura.
Analíticos
Hoy no activos en la plataforma; listos para cuando se conecten
Nos ayudan a entender uso de cursos y páginas. Si los activas, se usarán cuando conectemos analítica; hasta entonces no se carga ningún tracker.
Marketing
Hoy no activos; campañas futuras solo con tu permiso
Comunicaciones o campañas. No activos hoy en la plataforma; quedarán listos si los conectamos y solo si los permites.