¿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

Cobertura de código: qué mide

Después de esta lección: Puedo leer una cobertura y decir qué deja sin comprobar.

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

Un cien por cien que engaña

La cobertura de código es el porcentaje de líneas o de caminos del programa que ejecutan tus pruebas. Te dice qué partes nunca ha mirado ninguna prueba.

Un equipo presume de un 100 % de cobertura. Aun así, entrega un descuento mal calculado. La cobertura mide lo que se ejecutó, no lo que se comprobó.

Al final de esta lección

Nota

Puedo leer una cobertura y decir qué deja sin comprobar.

Palabras clave

PalabraQué significaEjemplo
Coberturala parte del código que las pruebas ejecutan
Cobertura de líneasel porcentaje de líneas que se ejecutaron
Ramauno de los dos caminos de un ifsi y no
Cobertura de ramasel porcentaje de caminos que se recorrieron
Trazala lista de líneas que se ejecutaron

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

La cobertura de líneas cuenta líneas ejecutadas

Una herramienta apunta qué líneas se ejecutan mientras corren las pruebas. Esa lista es la traza.

La cobertura de líneas es las líneas ejecutadas entre las líneas totales, por cien. Si de 4 líneas se ejecutan 3, la cobertura es del 75 %.

Ejemplo: una función con una línea sin cubrir

LíneaCódigoEjecutada con 50 euros
1def descuento(total):Sí
2if total >= 100:Sí
3return total - 10No
4return totalSí

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

Contar la cobertura de líneas

Código: python
# Un descuento con dos caminos.
lineas = [1, 2, 3, 4]       # las cuatro líneas del cuerpo de la función
ejecutadas = [1, 2, 4]      # lo que una prueba con 50 euros recorrió

cubiertas = 0
for linea in lineas:
    if linea in ejecutadas:
        cubiertas = cubiertas + 1

print(cubiertas, "de", len(lineas))
print(cubiertas * 100 // len(lineas), "por ciento")
# Añade el 3 a ejecutadas y vuelve a ejecutar.

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 un programa con dos caminos

Comando
printf 'def descuento(total):\n    if total >= 100:\n        return total - 10\n    return total\n\nprint(descuento(50))\n' > desc.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecútalo midiendo la cobertura

Comando
python3 -m trace --count --missing -C cob desc.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira qué línea no se ejecutó

Comando
grep ">>>>>>" cob/desc.cover

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Las marcas señalan lo que ninguna prueba tocó

La primera orden imprime 50, que es lo que calcula el programa, y escribe un informe en la carpeta cob. La segunda busca en el informe las líneas marcadas con >>>>>>, que son las que nunca se ejecutaron.

Sale la línea return total - 10. Nadie ha probado un pedido de 100 euros o más.

Un error frecuente

Advertencia

Mucha gente cree que un 100 % de cobertura significa que el programa está bien probado. Solo significa que cada línea se ejecutó alguna vez. Una prueba sin aserción ejecuta código y no comprueba nada. Mira también que las pruebas comparen resultados.

La cobertura de ramas mira los dos caminos

Un if sin else tiene dos ramas: cuando la condición es verdadera y cuando es falsa. Una prueba puede ejecutar la línea del if y recorrer solo una rama.

La cobertura de ramas cuenta los caminos recorridos entre los posibles. Es más exigente que la de líneas.

Ejemplo: líneas y ramas con una sola prueba

PruebaLíneas cubiertasRamas cubiertas
Solo 50 euros3 de 4, un 75 %1 de 2, un 50 %
Solo 150 euros3 de 4, un 75 %1 de 2, un 50 %
50 y 150 euros4 de 4, un 100 %2 de 2, un 100 %

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

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.