GapForge: Directed Compiler Fuzzing via Coverage-Gap Analysis
GapForge is een gerichte, op LLM gebaseerde compiler-fuzzingtechniek die systematisch de 'long-tail' coverage-gaten identificeert en overbrugt door onderbedekte bestanden te prioriteren, gedetailleerde triggervereisten af te leiden via padverschilanalyse, en iteratief prompts te synthetiseren om bestaande methoden aanzienlijk te overtreffen in zowel coverage als het ontdekken van bugs op GCC en LLVM.
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 de software die je telefoon, je auto of het internet aanstuurt voor als een gigantische, onzichtbare fabriek. Binnen deze fabriek zijn miljoenen kleine arbeiders (regels code) die jouw instructies op hoog niveau omzetten in de machinetaal die de computer begrijpt. Deze fabriek wordt een compiler genoemd. Als zelfs maar één arbeider lui is, in de war raakt of een regel overtreedt, kan de hele fabriek rommelige producten produceren—programma's die crashen, vastlopen of stiekem het verkeerde doen. Omdat deze fabrieken zo groot en complex zijn, is het ongelooflijk moeilijk om ervoor te zorgen dat elke enkele arbeider wordt gecontroleerd en getest.
Welkom in de wereld van softwaretesten. Zie dit als het sturen van een team inspecteurs om te zien of de fabriek wel goed functioneert. Jarenlang hebben inspecteurs twee belangrijke trucs gebruikt: of ze gooien met willekeurige pijltjes naar de fabriek (random testing), of ze proberen dingen kapot te maken door bestaande instructies te verdraaien (mutation testing). Maar hier is het probleem: de inspecteurs raken steeds de gemakkelijke, makkelijk bereikbare hoekjes van de fabriek, waardoor de stoffige, donkere, moeilijk bereikbare achterkamers volledig genegeerd worden. In deze "blinde vlekken" schuilen de gevaarlijkste bugs, wachtend om problemen te veroorzaken. Onlangs begonnen wetenschappers Large Language Models (LLMs) te gebruiken—superintelligente AI die code kan schrijven—om te helpen bij de inspecties. Maar zelfs deze AI-helpers dwalen vaak doelloos rond, zonder precies te weten welke donkere hoekjes het meeste licht nodig hebben.
Dit is waar een nieuwe techniek genaamd GapForge in beeld komt, die fungeert als een detective met een magische kaart. In plaats van alleen maar met pijltjes te gooien of te gokken, kijkt GapForge naar een kaart van de fabriek om precies te zien welke kamers nog nooit zijn bezocht. Vervolgens gebruikt het zijn AI-brein om uit te vogelen wat de specifieke "geheime handdruk" is (een specifiek type code en een speciale instelling) die nodig is om die gesloten deuren te openen. De onderzoekers testten dit op twee van de grootste compiler-fabrieken ter wereld, GCC en LLVM. Ze ontdekten dat GapForge een meester is in het vinden van deze verborgen kamers. In slechts 72 uur dekte het 68,13% van de kerncode van GCC en 69,11% van de LLVM-code. Dat klinkt misschien niet als 100%, maar onthoud dat de vorige beste AI-methode slechts ongeveer 64,62% en 65,02% wist te halen. GapForge tilde de cijfers niet alleen een beetje op; het vond 24.736 extra regels code in GCC en 19.798 extra in LLVM die de andere methoden volledig over het hoofd hadden gezien.
Hoe doet het dit? Denk aan GapForge als een proces van drie stappen. Eerst scant het de kaart van de fabriek en kiest het de "viesste" kamer—de kamer met de meeste ongeteste code. Ten tweede, in plaats van alleen maar naar de hele kamer te kijken, zoomt het in op de specifieke stoffige plek en vraagt het de AI: "Wat voor soort sleutel hebben we nodig om deze te openen?" De AI analyseert de omliggende schone gebieden om de exacte combinatie van codestructuren en fabrieksinstellingen (zoals het omzetten van een specifieke schakelaar) te raden die nodig zijn om die plek te bereiken. Derde, als de AI een sleutel probeert en deze niet werkt, onthoudt GapForge deze mislukking. Het vertelt de AI: "Probeer dat niet nog een keer; probeer iets anders," en stuurt het terug met een beter plan. Deze cyclus herhaalt zich, stap voor stap, terwijl het langzaam maar zeker elke donkere hoek verlicht.
De resultaten waren indrukwekkend. Niet alleen dekte GapForge meer terrein dan acht andere toptechnieken, maar het vond ook 12 echte bugs die in de schaduwen verborgen lagen. Dit omvatte 8 crashes (waarbij de compiler simpelweg opgaf en stopte) en 4 miscompilaties (waarbij de compiler stiekem een defect programma bouwde dat er perfect uitzag). De onderzoekers lieten zien dat elk deel van het proces van GapForge ertoe deed; als ze het "lezen van de kaart", het "raden van de sleutel" of het "leren van fouten" zouden verwijderen, werden de resultaten aanzienlijk slechter. Terwijl andere methoden bezig waren met het genereren van duizenden testprogramma's, genereerde GapForge er minder, maar veel intelligentere, wat bewees dat in de wereld van softwaretesten kwaliteit en richting vaak belangrijker zijn dan pure kwantiteit.
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.