Una tienda que cobra de menos
Probar un programa es ejecutarlo con datos conocidos para ver si hace lo que se espera. Sirve para encontrar fallos antes de que los encuentre un cliente.
Una tienda online vende un pedido de 100 euros y cobra solo 21. Nadie lo nota hasta que llega la factura del mes. Una comprobación de dos líneas lo habría visto el primer día.
Al final de esta lección
Nota
Puedo decir qué tipo de prueba encuentra cada tipo de fallo.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Defecto | la línea de código que está mal |
| Fallo | lo que se ve mal cuando el programa se ejecuta |
| Error | la equivocación de la persona que escribió el código |
| Prueba unitaria | comprueba una sola función |
| Prueba de integración | comprueba que dos partes trabajan juntas |
| Prueba de aceptación | comprueba que se cumple lo que pidió el cliente |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Error, defecto y fallo son cosas distintas
Una persona comete un error: confunde dos ideas al escribir. Ese error deja un defecto en el código. Cuando el programa se ejecuta con ciertos datos, el defecto produce un fallo que alguien ve.
Una prueba solo ve fallos. Después tú buscas el defecto que lo causó. Prueba el ejemplo de la tienda en el laboratorio.
Crea una carpeta de trabajo
mkdir -p ~/pruebasSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Entra en ella
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 función con un defecto
printf 'def iva(precio):\n return precio * 0.21\nprint(iva(100))\n' > iva.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútala y mira el fallo
python3 iva.pySe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejemplo: error, defecto y fallo de la tienda
| Palabra | En nuestro ejemplo |
|---|---|
| Error | Quien escribió la función confundió el IVA con el precio con IVA |
| Defecto | La línea `return precio * 0.21` devuelve solo el impuesto |
| Fallo | El programa imprime 21.0 y se esperaba 121.0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que si el programa no falla hoy, no tiene defectos. Un defecto puede dormir meses hasta que llega un dato concreto. Una prueba que no falla solo te dice que esos datos funcionan, nada más.
Cada nivel de prueba mira más lejos
Las pruebas se ordenan por el tamaño de lo que comprueban. Una prueba unitaria mira una función. Una prueba de integración mira dos partes juntas, por ejemplo la tienda y la base de datos.
Una prueba de sistema ejecuta el programa entero, como lo haría un usuario. Una prueba de aceptación pregunta si el programa cumple lo que pidió el cliente.
Ejemplo: qué nivel encuentra cada fallo
| Fallo que se ve | Dónde está el defecto | Nivel que lo encuentra |
|---|---|---|
| El IVA de un precio sale mal | En una función | Unitaria |
| El pedido se guarda pero el correo no sale | Entre el pedido y el correo | Integración |
| La web se cae con 200 pedidos a la vez | En el programa entero | Sistema |
| El cliente pidió factura en PDF y sale en texto | En lo que se pidió | Aceptación |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un defecto cuesta más cuanto más tarde aparece
Un defecto que ves al escribir la función se arregla en un minuto. El mismo defecto en producción obliga a avisar al cliente, buscar la causa y publicar otra versión.
La tabla es una regla práctica con cifras de ejemplo, no una medida exacta.
Ejemplo: el coste relativo según cuándo se encuentra
| Cuándo se encuentra | Qué hay que hacer | Coste de ejemplo |
|---|---|---|
| Al escribir la función | Corregir la línea | 1 |
| En las pruebas | Corregir y repetir las pruebas | 10 |
| Con el cliente ya usándolo | Avisar, corregir, publicar y pedir perdón | 100 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Busca un fallo real en el registro
grep -o "ERROR payment service did not answer" /var/log/test.log | head -n 1Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un registro guarda los fallos que nadie probó
La orden anterior muestra una línea del registro del laboratorio: el servicio de pagos no respondió. Ese fallo ocurrió con la máquina en marcha, sin que ninguna prueba lo mirara.
Una prueba de integración entre la tienda y el servicio de pagos lo habría buscado antes.