¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Casos de prueba: clases y límites

Después de esta lección: Puedo elegir casos de prueba a partir de clases y límites.

Lección de 55 min5 comandosLaboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

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

PalabraQué significaEjemplo
Clase de equivalenciaun grupo de datos que el programa trata igual
Valor límiteun dato en el borde entre dos clases17, 18, 19
Caso de pruebaun dato de entrada y el resultado esperado
Tabla de casosuna lista de casos con su resultado esperado
Error por unoun 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

ClaseEdadesPrecio esperadoRepresentante
Pequeños0 a 30 euros2
Menores4 a 175 euros10
Adultos18 a 6410 euros40
Mayores65 o más5 euros70

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un representante de cada clase

Código: python
# 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

EdadPor quéPrecio esperado
3Último de los pequeños0
4Primero de los menores5
17Último de los menores5
18Primero de los adultos10
64Último de los adultos10
65Primero de los mayores5

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Entra en la carpeta de trabajo

Comando
mkdir -p ~/pruebas && cd ~/pruebas

Se 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

Comando
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.py

Se 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

Comando
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

Comando
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.py

Se 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

Comando
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.

Sobre este laboratorio y su código: Laboratorio de comandos de Linux de cada día: los treinta comandos que se escriben de memoria

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.