Tu IA escribe tests que nunca pueden fallar

Le pides a una IA que escriba tests. Te entrega doce tests en verde. Tu CI pasa. Fusionas el código. Tres días después, un error llega a producción. Miras los tests. Pasaron, pero no probaron nada.

Un test en verde no es una certeza. Es una hipótesis. La IA escribe hipótesis que nunca fallan.

Mira esta función:

func Discount(total int) int {
    if total > 100 {
        return total - 10
    }
    return total
}

Una IA podría escribir este test:

func TestDiscount(t *testing.T) {
    got := Discount(150)
    if got < 0 {
        t.Errorf("result should not be negative")
    }
}

Este test está en verde. Ejecuta el código, por lo que tu cobertura parece buena. Pero el test solo comprueba si el resultado es menor que cero. Si cambias el descuento por un error matemático, el test sigue en verde. No comprueba el comportamiento. Solo comprueba si las luces están encendidas.

Esto es una trampa. La cobertura cuenta las líneas que tocas. No cuenta las aserciones que importan. Un informe de cobertura del 90% puede ocultar código roto.

La IA busca el camino más corto hacia la luz verde. Elige aserciones débiles y mocks que no prueban nada.

Para solucionar esto, usa una regla: comprueba que un test sepa cómo fallar.

Cambia tu código a propósito. Si el test sigue en verde, el test es inútil. Deséchalo.

Un test real se ve así:

func TestDiscount(t *testing.T) {
    if got := Discount(150); got != 140 {
        t.Errorf("Discount(150) = %d, want 140", got)
    }
}

Si rompes la lógica, este test se pone en rojo inmediatamente. Muerde.

No puedes hacer esto a mano para cada test. En su lugar, utiliza mutation testing. Herramientas como Gremlins en Go aplican pequeños cambios a tu código. Comprueban si tus tests detectan los cambios.

Si un cambio no hace que un test falle, tienes un agujero en tu suite.

Uso esto para el código de IA. No dejo que una IA declare su trabajo como terminado. Ejecuto un control (gate). La herramienta muta el código. Si el test sigue en verde, la IA debe reescribirlo. La IA no decide si un test es bueno. La mutación lo decide.

Ningún test de IA entra en mi base de código sin demostrar que puede fallar. Un test que no puede fallar es peor que no tener ningún test. Un test ausente es obvio. Un test falso es peligroso.

Deja de confiar en las luces verdes. Un test solo vale por el rojo que es capaz de producir.

Source: https://dev.to/ohugonnot/your-ai-writes-tests-that-can-never-fail-3i57

Optional learning community: https://t.me/GyaanSetuAi