← Nieuwste papers
🤖 AI

Graph Construction and Matching for Imperative Programs using Neural and Structural Methods

Dit artikel presenteert een pipeline die imperatieve programma's en hun annotaties omzet in gestructureerde, getypeerde attributengrafen door het integreren van abstracte syntaxisboom-parsing met semantische embeddings, waardoor consistente graafrepresentaties over verschillende talen en annotatiestijlen mogelijk worden om het hergebruik van verificatieartefacten te faciliteren.

Oorspronkelijke auteurs: Arshad Beg, Diarmuid O'Donoghue, Rosemary Monahan

Gepubliceerd 2026-04-30
📖 5 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Arshad Beg, Diarmuid O'Donoghue, Rosemary Monahan

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 een enorme bibliotheek voor met instructiehandleidingen voor het bouwen van verschillende soorten machines. Sommige zijn geschreven in het Engels, sommige in het Frans en sommige in een geheime code. Zelfs als twee machines precies hetzelfde doen (zoals "een zware doos tillen"), kunnen hun handleidingen er volledig anders uitzien vanwege de gebruikte taal of de specifieke schrijfstijl.

Het probleem is: Hoe vind je de juiste handleiding om opnieuw te gebruiken wanneer je een nieuwe machine moet bouwen? Meestal moet een mens honderden pagina's doorbladeren om een match te vinden, wat traag en frustrerend is.

Dit artikel stelt een slimme manier voor om dat probleem op te lossen met behulp van computergrafieken en AI. Hier is de uiteenzetting van hun aanpak met eenvoudige analogieën:

1. Het Doel: "Tweelingen" vinden in een Menigte

De onderzoekers willen "verificatieartefacten" vinden. Denk hierbij aan de blauwdrukken, veiligheidscontroles en kwaliteitsgaranties die aan softwareprogramma's zijn gekoppeld. Ze willen weten: "Lijkt dit nieuwe programma op een oude die we al hebben gecontroleerd?" Als dat zo is, kunnen we de oude veiligheidscontroles opnieuw gebruiken in plaats van opnieuw te beginnen.

2. De Uitdaging: Verschillende Talen, Dezelfde Logica

Het artikel kijkt naar drie verschillende "talen" voor het schrijven van deze veiligheidscontroles:

  • C met ACSL: Alsof je een recept schrijft in een specifiek notitieboekstijl.
  • Java met JML: Alsof je datzelfde recept schrijft, maar dan in een ander notitieboek met iets andere symbolen.
  • Dafny (voor C#): Alsof je het recept direct in de kookinstructies schrijft zonder een apart notitieboek.

Hoewel ze hetzelfde werk doen, zien de symbolen en woorden er anders uit. Een computer raakt meestal in de war door deze oppervlakkige verschillen.

3. De Oplossing: Code Omzetten in "Moleculaire Modellen"

In plaats van de woorden te lezen, zetten de onderzoekers de code en de veiligheidsregels om in 3D moleculaire modellen (die ze grafieken noemen).

  • De Knopen (De Atomen): Elk deel van het programma (zoals een variabele, een lus of een veiligheidsregel) wordt een stip.
  • De Randen (De Bindingen): De lijnen die de stippen verbinden, tonen hoe ze met elkaar samenhangen (bijvoorbeeld: "deze variabele voedt die lus").

Dit creëert een visuele kaart van de structuur van het programma. Cruciaal is dat ze niet alleen de code in kaart brengen, maar ook de veiligheidsregels (de annotaties) direct op de kaart zetten.

4. De Geheime Ingrediënt: De Kaart een "Brein" Geven

Een kaart is goed, maar het begrijpt geen betekenis. Twee kaarten kunnen structureel gelijk lijken, maar verschillende betekenissen hebben. Om dit op te lossen, gebruiken de onderzoekers AI-modellen (specifiek SentenceTransformer en CodeBERT) om de kaart een "brein" te geven.

  • De Analogie: Stel je voor dat je een foto maakt van je moleculaire model en deze door een super slimme vertaler laat lopen. De AI leest de tekst binnenin het model en creëert een digitaal vingerafdruk (een vector) die de betekenis van de code vastlegt, niet alleen de vorm.
  • Nu kan de computer het "vingerafdruk" van een Java-programma vergelijken met het "vingerafdruk" van een C-programma. Zelfs als ze er anders uitzien, als hun vingerafdrukken overeenkomen, weet de computer dat ze in wezen hetzelfde zijn.

5. Het Proces: Een Fabrieksassemblagelijn

Het artikel beschrijft een pijplijn (een assemblagelijn) die dit automatisch doet:

  1. Input: Ze nemen ruwe code (C, Java of C#).
  2. Vertaling: Ze gebruiken scripts om automatisch veiligheidsregels aan de code toe te voegen als die er niet zijn, of om de code naar verschillende talen te vertalen.
  3. Grafiek Bouwen: Ze zetten de code om in die "moleculaire modellen" (grafieken).
  4. AI Verrijking: Ze gebruiken de AI om de "vingerafdrukken" voor deze grafieken te genereren.
  5. Matching: Ze vergelijken de vingerafdrukken. Als twee programma's vergelijkbare vingerafdrukken hebben, zijn ze een match.

6. Wat Ze Vonden

Ze testten dit op 56 verschillende programma's (zoals lijsten sorteren of naar nummers zoeken) en hun variaties.

  • Het Resultaat: Het systeem slaagde erin om deze grafiekkaarten voor alle drie de talen te maken.
  • De Match: Toen ze de programma's vergeleken, identificeerde het systeem correct dat twee programma's "tweelingen" waren (zeer hoge gelijkenisscore), zelfs als het ene in C was geschreven en het andere in Java. Het identificeerde ook correct dat een sorteerpogramma en een zoekprogramma geen tweelingen waren (lage gelijkenisscore).

7. De Haken (Beperkingen)

De auteurs zijn eerlijk over de gebreken:

  • Het "Regex"-Probleem: Het systeem gebruikt eenvoudige patroonherkenningsregels (zoals een "vinden en vervangen"-tool) om de grafieken te bouwen. Het is snel, maar als de code rommelig of raar geschreven is, kan het systeem een detail missen.
  • De Kennis van de AI: De gebruikte AI-modellen zijn algemeen doelgericht. Ze zijn niet specifiek getraind om "juristen" voor code te zijn. Ze kunnen zeer subtiele verschillen in veiligheidsregels missen die een menselijke expert zou opmerken.

Samenvatting

Kortom, dit artikel bouwde een universele vertaler en matcher voor softwareveiligheidscontroles. Door code en de regels ervan om te zetten in gestructureerde kaarten en die kaarten vervolgens AI-genererde betekenissen te geven, toonden ze aan dat computers vergelijkbare software over verschillende programmeertalen heen kunnen vinden. Dit is de eerste stap naar een toekomst waarin we veiligheidscontroles automatisch kunnen hergebruiken, wat ontwikkelaars tijd bespaart en software veiliger maakt.

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.

Probeer Digest →