Crash-free Deductive Verifiers
Dit paper pleit voor het gebruik van fuzzing om de betrouwbaarheid en robuustheid van deductieve verifiers te verbeteren, wat wordt geïllustreerd door de prototype-tool AValAnCHE die problemen in de VerCors-verifier heeft blootgelegd.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
Stel je voor dat deductieve verifiers (zoals VerCors) als supersterke, maar soms wat onhandige rechercheurs zijn. Hun taak is om te controleren of computerprogramma's veilig en foutloos werken, zelfs als ze heel complex zijn. Ze kijken naar de code en zeggen: "Ja, dit is veilig" of "Nee, hier zit een fout".
Het probleem is echter: deze rechercheurs zijn zelf ook gemaakt van code. En net als elke software, kunnen ze ook vastlopen, crashen of gekke dingen doen als ze een heel rare of onverwachte vraag krijgen. Als een rechercheur in paniek raakt en de hele kamer opblaast (crasht) omdat iemand een raar woord gebruikte, is dat niet erg nuttig voor de mensen die hun werk willen laten controleren.
De auteurs van dit papier, Wander, Marcus en Marieke, zeggen: "We moeten deze rechercheurs trainen om niet meer te crashen."
Hier is hoe ze dat doen, vertaald naar alledaags taal:
1. Het probleem: De "Onmogelijke Vraag"
Stel je voor dat je een robot hebt die alleen maar vragen over appels mag beantwoorden. Als je hem plotseling vraagt: "Wat is de smaak van de getal 42?", dan kan de robot in de war raken, vastlopen en uitvallen.
Dit gebeurt ook met verifiers. Als ze een programma zien met een heel rare structuur (bijvoorbeeld een lege lijst of een naam die alleen uit de letters 'u' en 'l' bestaat), kunnen ze crashen. Omdat deze tools zo complex zijn, is het bijna onmogelijk om elke mogelijke rare vraag van tevoren te bedenken en te testen.
2. De oplossing: "Fuzzing" (Het Chaos-testen)
In plaats van te wachten tot iemand per ongeluk een rare vraag stelt, gaan de auteurs zelf op jacht. Ze gebruiken een techniek die Fuzzing heet.
- De Analogie: Stel je voor dat je een deur wilt testen of hij stevig is. Je kunt wachten tot er een storm komt, of je kunt zelf duizenden keren met een hamer, een steen, een boterham en een rubberen eend tegen de deur slaan.
- In de praktijk: De auteurs hebben een robot (een tool genaamd AValAnCHE) gebouwd die duizenden en duizenden willekeurige, soms bizarre, computerprogramma's genereert. Deze robot gooit deze programma's als een storm van vragen op de verifier.
- Soms zijn de vragen zinnig.
- Soms zijn ze compleet onzin (maar wel grammaticaal correct, alsof je een zin zegt in een vreemde taal die klinkt als Nederlands, maar geen betekenis heeft).
3. Wat deed de robot AValAnCHE?
De robot AValAnCHE is als een onvermoeibare testpiloot. Hij vliegt continu met VerCors (de verifier) door een storm van willekeurige data.
- Als VerCors normaal werkt, gaat de piloot door.
- Als VerCors crashen (de motor stopt), slaat de piloot alarm.
- De piloot kijkt dan precies naar wat er gebeurde: "Ah, hij crashte toen we een lege 'enum' gebruikten" of "Hij crashte toen we een naam gebruikten die alleen uit streepjes bestond".
4. De resultaten: Veel gevonden gaten
Met deze aanpak hebben ze vele verborgen fouten gevonden in VerCors en andere verifiers (zoals VeriFast en Dafny).
- Voorbeeld 1: Als je een lijst met namen maakt die alleen uit streepjes (
___) bestaat, crashte de verifier. - Voorbeeld 2: Als je een naam gaf die te lang was (te veel cijfers), dacht de computer dat het een getal was, maar kon hij het niet verwerken, en crashte.
- Voorbeeld 3: Soms probeerde de verifier iets te doen met een leeg blok code, en dat kon hij niet.
Deze fouten waren zo specifiek en vreemd dat ze waarschijnlijk nooit gevonden zouden zijn door normale code-reviewers of standaardtests. Het was alsof ze een sleutel vonden die alleen in een heel specifieke, rare sleutelgat paste.
5. Waarom is dit belangrijk?
De boodschap van het papier is simpel: Betrouwbaarheid is net zo belangrijk als de eigenlijke functie.
Als je een gereedschap koopt om je huis te bouwen, wil je dat het werkt, maar je wilt ook dat het niet uit elkaar valt als je er een beetje te hard op slaat.
Door "Fuzzing" te gebruiken, maken de ontwikkelaars hun tools onbreekbaar. Ze vinden de zwakke plekken voordat de echte gebruikers ze vinden.
Samenvatting in één zin
De auteurs hebben een robot gebouwd die duizenden bizarre, willekeurige vragen stelt aan een super-intelligente software-checker, zodat ze de momenten waarop die checker "nee, ik geef het op" schreeuwt, kunnen vinden en repareren, waardoor de software veiliger en betrouwbaarder wordt voor iedereen.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.