Funciona, hasta que llega tu amigo
Haces un programa para cobrar la entrada del polideportivo. Pruebas con tu edad, 15 años. Sale bien.
Pero llega tu amigo, que tiene justo 12 años. El programa le cobra mal.
Un programa no está terminado hasta que lo has probado con cuidado.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Prueba | Ejecutar el programa con unos datos para ver si responde bien. | Probar con 15 años |
| Caso de prueba | Un dato de entrada y el resultado que esperas. | 15 años, 2.5 euros |
| Resultado esperado | Lo que debería salir. Lo decides antes de ejecutar. | 2.5 |
| Resultado real | Lo que sale de verdad al ejecutar. | 0.0 |
| Valor límite | Un dato justo en el borde de una regla. | 11, 12, 17 y 18 años |
| Prueba automática | Una prueba escrita en código que se ejecuta sola. | Las de Ejecutar pruebas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un caso de prueba
Una prueba tiene dos partes. Un dato de entrada y el resultado esperado.
Piensa el resultado antes de ejecutar. Si miras primero lo que sale, te lo creerás aunque esté mal.
Después comparas el resultado esperado con el resultado real. Si no coinciden, hay un fallo.
Pruébalo: tres casos de prueba
public class Main {
// Menos de 12 años: gratis. De 12 a 17: 2.5. De 18 en adelante: 4.
// El if significa "si". Lo verás con calma más adelante.
static double ticketPrice(int age) {
if (age < 12) {
return 0;
}
if (age <= 17) {
return 2.5;
}
return 4;
}
// Compara lo esperado con lo real y escribe OK o FALLA.
static void check(double expected, double actual) {
if (expected == actual) {
System.out.println("OK: salió " + actual);
} else {
System.out.println("FALLA: esperaba " + expected + " y salió " + actual);
}
}
public static void main(String[] args) {
check(0, ticketPrice(6));
check(2.5, ticketPrice(15));
check(4, ticketPrice(30));
}
}
Los fallos viven en el borde
Casi todos los fallos aparecen en el borde de una regla. Probar solo con 6, 15 y 30 no basta.
La regla cambia en el 12 y en el 18. Mira qué pasa justo antes y justo después.
Esos datos se llaman valores límite. Un buen probador siempre los prueba.
Pruébalo: los bordes de verdad
public class Main {
// Este precio tiene un fallo en un borde.
static double ticketPrice(int age) {
if (age <= 12) {
return 0;
}
if (age <= 17) {
return 2.5;
}
return 4;
}
static void check(double expected, double actual) {
if (expected == actual) {
System.out.println("OK: salió " + actual);
} else {
System.out.println("FALLA: esperaba " + expected + " y salió " + actual);
}
}
public static void main(String[] args) {
check(0, ticketPrice(11));
check(2.5, ticketPrice(12));
check(2.5, ticketPrice(17));
check(4, ticketPrice(18));
// Busca la línea con el fallo y corrígela.
}
}
Ejemplo resuelto: casos de prueba para la tarifa
| Edad | Esperado | Tipo de prueba | Por qué sirve |
|---|---|---|---|
| 6 | 0 | Normal | Está dentro del primer grupo. |
| 11 | 0 | Límite | Es el último año gratis. |
| 12 | 2.5 | Límite | Es el primer año de pago. |
| 17 | 2.5 | Límite | Es el último año del segundo grupo. |
| 18 | 4 | Límite | Es el primer año del tercer grupo. |
| 40 | 4 | Normal | Está dentro del último grupo. |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruebas que se ejecutan solas
Probar a mano cansa. Por eso los programadores escriben pruebas automáticas.
En Java se usa una herramienta llamada JUnit. Cada prueba compara lo esperado con lo real. La orden se llama assertEquals: primero va lo esperado y después lo real.
Cuando pulsas Ejecutar pruebas en una tarea, la plataforma hace exactamente esto.
Una prueba automática, para leer
@Test
void firstYearOfPayment() {
// Esperado 2.5, real lo que devuelve ticketPrice(12).
// El 0.001 es la diferencia pequeña que se acepta en decimales.
assertEquals(2.5, Main.ticketPrice(12), 0.001);
}
Qué datos probar siempre
Consejo
Uno normal, de en medio. Los dos límites de cada regla. Y uno raro, como 0 o un número negativo. Con eso encuentras casi todos los fallos.
Elige los casos
Inténtalo
Elige los casos
4 preguntasTus respuestas se corrigen aquí y no se guardan. Una cuenta guarda tus resultados.