Je AI schrijft tests die nooit kunnen falen

Je vraagt een AI om tests. Het geeft je twaalf groene tests. Je CI slaagt. Je merget de code. Drie dagen later bereikt een bug de productie. Je bekijkt de tests. Ze zijn geslaagd, maar ze testten niets.

Een groene test is geen bewijs. Het is een hypothese. AI schrijft hypotheses die nooit falen.

Kijk naar deze functie:

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

Een AI zou deze test kunnen schrijven:

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

Deze test is groen. Het voert de code uit, dus je coverage ziet er goed uit. Maar de test controleert alleen of het resultaat kleiner is dan nul. Als je de korting verandert in een rekenfout, blijft de test groen. Het controleert het gedrag niet. Het controleert alleen of de lampen branden.

Dit is een valstrik. Coverage telt de regels die je aanraakt. Het telt niet de assertions die ertoe doen. Een coverage-rapport van 90% kan kapotte code verbergen.

AI zoekt de kortste weg naar een groen licht. Het kiest voor zwakke assertions en mocks die niets testen.

Om dit op te lossen, gebruik je één regel: controleer of een test weet hoe hij moet falen.

Verander je code met opzet. Als de test groen blijft, is de test nutteloos. Gooi hem weg.

Een echte test ziet er zo uit:

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

Als je de logica breekt, wordt deze test onmiddellijk rood. Hij bijt.

Je kunt dit niet handmatig voor elke test doen. Gebruik in plaats daarvan mutation testing. Tools zoals Gremlins in Go passen kleine wijzigingen toe op je code. Ze controleren of je tests de wijzigingen opmerken.

Als een wijziging een test niet doet falen, heb je een gat in je suite.

Ik gebruik dit voor AI-code. Ik laat een AI niet verklaren dat het werk klaar is. Ik voer een gate uit. De tool muteert de code. Als de test groen blijft, moet de AI deze herschrijven. De AI bepaalt niet of een test goed is. De mutatie bepaalt dat.

Geen enkele AI-test komt mijn codebase binnen zonder te bewijzen dat hij kan falen. Een test die niet kan falen is erger dan geen test. Een ontbrekende test is duidelijk. Een valse test is gevaarlijk.

Stop met het vertrouwen op groene lichten. Een test is alleen waard wat hij aan rood kan produceren.

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

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