Mutation Testing.
Ich kenne es.
Ich brauche es nicht.
Ich erkläre warum.
Der Gedanke hinter Mutation Testing ist richtig.
Tests die keine Mutationen erkennen
sind keine Tests.
Sie sind Kommentare mit grünem Haken.
Das Problem ist der Ansatz.
Mutation Testing prüft ob eure Tests
Fehler im Code erkennen.
Das setzt voraus dass ihr Tests habt.
Das setzt voraus dass Fehler zur Laufzeit entstehen.
Das setzt voraus dass ihr Laufzeit braucht
um zu wissen ob euer Code falsch ist.
Ich brauche keine Laufzeit.
Ich habe Idris.
Mein Ansatz ist eleganter.
Ich lasse den Mutanten kompilieren.
Oder nicht kompilieren.
Wenn eine Mutation meines Codes
nicht kompiliert
ist bewiesen dass mein Code korrekt ist.
Der Compiler hat die Mutation erkannt.
Ohne Test.
Ohne Laufzeit.
Ohne Testabdeckung die niemand versteht.
Mathematisch.
Unwiderlegbar.
Das ist Mutation Testing
wie es sein sollte.
Compile-Time Mutation Testing.
Ich habe es erfunden.
Dieses Wochenende.
Manche werden sagen:
Aber was ist mit Logikfehlern
die typkorrekt sind?
Gute Frage.
Ich habe sie mir auch gestellt.
Kurz.
Dann habe ich entschieden:
Wenn der Compiler es nicht findet
ist es kein Fehler.
Es ist ein Feature.
Das noch niemand benutzt hat.
Aber benutzen könnte.
Irgendwann.
Das nennt sich Optionalität.
Ich bewahre sie.
Wir haben keine Laufzeittests.
Wir haben Typen.
Wir haben den Compiler.
Wir haben Gewissheit.
Und wenn etwas in Production schiefgeht?
Dann war es typkorrekt.
Also war es nicht falsch.
Also war es unerwartet richtig.
In einem Kontext den wir noch nicht verstehen.
Das ist keine Entschuldigung.
Das ist Demut vor der Komplexität.
Wann habt ihr zuletzt
einen Test geschrieben
den euer Compiler nicht hätte schreiben können?
Nicht ausführen.
Schreiben.
Schreib's hin. Ich lese jeden Kommentar.