Probar todo es imposible
Elegir casos de prueba es decidir qué pocos datos probar entre millones posibles. Las clases de equivalencia y los valores límite te dan un método para elegirlos.
Un museo cobra según la edad: gratis hasta 3 años, 5 euros hasta 17, 10 euros hasta 64 y 5 euros desde los 65. Probar las edades de 0 a 120 es largo. Probar cuatro bien elegidas no.
Al final de esta lección
Nota
Puedo elegir casos de prueba a partir de clases y límites.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Clase de equivalencia | un grupo de datos que el programa trata igual | |
| Valor límite | un dato en el borde entre dos clases | 17, 18, 19 |
| Caso de prueba | un dato de entrada y el resultado esperado | |
| Tabla de casos | una lista de casos con su resultado esperado | |
| Error por uno | un fallo por usar < en lugar de <=, o al revés |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Una clase agrupa datos que se tratan igual
Si el museo trata igual a los de 5 y a los de 12 años, basta probar uno de los dos. Todos pertenecen a la misma clase de equivalencia.
Busca las clases leyendo las reglas. Cada regla distinta es una clase. Después elige un representante de cada una.
Ejemplo: las cuatro clases del museo
| Clase | Edades | Precio esperado | Representante |
|---|---|---|---|
| Pequeños | 0 a 3 | 0 euros | 2 |
| Menores | 4 a 17 | 5 euros | 10 |
| Adultos | 18 a 64 | 10 euros | 40 |
| Mayores | 65 o más | 5 euros | 70 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un representante de cada clase
# Una prueba por clase: la entrada de un museo.
def precio(edad):
if edad < 4:
return 0
if edad < 18:
return 5
if edad < 65:
return 10
return 5
# Un representante de cada clase.
casos = [[2, 0], [10, 5], [40, 10], [70, 5]]
for caso in casos:
print(caso[0], precio(caso[0]) == caso[1])
# Añade el caso [18, 10] y mira qué pasa.
Un error frecuente
Advertencia
Mucha gente prueba solo valores del medio de cada clase, como 10 o 40, y cree que ya ha acabado. Los fallos viven en el borde, donde se cambia de clase. Añade siempre los valores de los bordes.
Los valores límite están en el borde
Un valor límite es un dato justo en el borde entre dos clases. Por cada borde, prueba el último valor de abajo, el primero de arriba y el siguiente.
En el borde de los 18 años pruebas 17, 18 y 19. Allí viven los errores por uno: usar < donde tocaba <=.
Ejemplo: tabla de casos con los bordes
| Edad | Por qué | Precio esperado |
|---|---|---|
| 3 | Último de los pequeños | 0 |
| 4 | Primero de los menores | 5 |
| 17 | Último de los menores | 5 |
| 18 | Primero de los adultos | 10 |
| 64 | Último de los adultos | 10 |
| 65 | Primero de los mayores | 5 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Entra en la carpeta de trabajo
mkdir -p ~/pruebas && cd ~/pruebasSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la entrada con un defecto
printf 'def precio(edad):\n if edad < 4:\n return 0\n if edad <= 18:\n return 5\n if edad < 65:\n return 10\n return 5\n' > entrada.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Prueba el borde de los 18 años
python3 -c "from entrada import precio; print(precio(17), precio(18), precio(19))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El borde muestra el defecto escondido
La orden imprime 5 5 10. La regla dice que desde los 18 se pagan 10 euros, y el 18 sale a 5.
Con las edades 10 y 40 nunca lo habrías visto. El defecto es <= en lugar de <, y solo el valor límite 18 lo muestra.
Corrige la línea
printf 'def precio(edad):\n if edad < 4:\n return 0\n if edad < 18:\n return 5\n if edad < 65:\n return 10\n return 5\n' > entrada.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Repite la prueba del borde
python3 -c "from entrada import precio; print(precio(17), precio(18), precio(19))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.