Dynamic Symbolic Execution for Semantic Difference Analysis of Component and Connector Architectures

Dit onderzoek onderzocht de toepassing van dynamische symbolische uitvoering voor semantisch verschilanalyse van component- en connectorarchitecturen in MontiArc-modellen, waarbij gebleken is dat de methode waardevolle inzichten biedt maar beperkt wordt door schaalbaarheidsuitdagingen.

Johanna Grahl, Bernhard Rumpe, Max Stachon, Sebastian Stüber

Gepubliceerd 2026-03-10
📖 6 min leestijd🧠 Diepgaand

Each language version is independently generated for its own context, not a direct translation.

Titel: De Digitale Detective die Twee Bouwplaten Vergelijkt

Stel je voor dat je twee bijna identieke LEGO-bouwplaten hebt. Ze lijken hetzelfde, maar je wilt weten of er een klein verschil in de instructies zit dat ervoor zorgt dat het eindresultaat toch anders wordt. Misschien is bij het ene model een muur ietsje dikker, of springt een poppetje op een ander moment.

In de wereld van softwareontwikkeling doen ingenieurs precies dit, maar dan met complexe digitale systemen. Ze bouwen systemen uit losse onderdelen (zoals blokken) die met elkaar communiceren. Dit noemen ze "Component-and-Connector" architectuur. Het probleem is: als je een bouwplaat aanpast, hoe weet je dan zeker dat het nieuwe ontwerp zich echt anders gedraagt dan het oude, en niet alleen maar anders lijkt?

Dit artikel vertelt over een slimme nieuwe methode om dit verschil op te sporen. Laten we het eens uitleggen zonder moeilijke vaktermen.

1. Het Probleem: Twee Bouwplaten, Eén Vraag

De auteurs (Johanna, Bernhard, Max en Sebastian) werken met een taal genaamd MontiArc. Dit is een soort blauwdruk voor software. Ze wilden een manier vinden om twee blauwdrukken te vergelijken en te zeggen: "Kijk hier! Als je deze knop indrukt, doet het oude systeem X, maar het nieuwe systeem doet Y."

Een simpele vergelijking van de tekeningen (de code) is vaak niet genoeg. Je moet het systeem laten werken om het verschil te zien. Maar je kunt niet elke mogelijke situatie uitproberen; dat zijn er te veel (zoals elke mogelijke combinatie van getallen die je kunt invoeren).

2. De Oplossing: De Slimme Detective (DSE)

Om dit op te lossen, gebruiken ze iets genaamd Dynamic Symbolic Execution (DSE). Laten we dit zien als een super-detective die twee manieren van werken combineert:

  • Manier A: De Concrete Detective (De "Testen" aanpak)
    Stel je voor dat de detective een echte auto rijdt. Hij probeert een route met een snelheid van 50 km/u. Hij ziet wat er gebeurt. Maar hij kan niet tegelijkertijd ook 60 km/u rijden. Hij moet steeds stoppen en een nieuwe auto huren. Dit is traag als je alle routes wilt testen.

  • Manier B: De Symbolische Detective (De "Dromen" aanpak)
    Deze detective rijdt niet met een echte auto, maar met een "droom-auto". Hij zegt: "Stel, de snelheid is een magische variabele XX." Hij berekent in zijn hoofd: "Als XX kleiner is dan 10, ga ik linksaf. Als XX groter is dan 10, ga ik rechtsaf." Hij ziet alle routes tegelijk in zijn hoofd, maar kan ze niet echt afleggen.

DSE is de perfecte mix:
De detective rijdt eerst met een echte auto (bijvoorbeeld 50 km/u). Hij ziet dat hij linksaf gaat. Dan zegt hij: "Oké, ik wil nu weten wat er gebeurt als ik niet linksaf ga." Hij vraagt een slimme rekenmachine (een SMT-solver, in dit geval een tool genaamd Z3) om een snelheid te bedenken die niet 50 is, maar wel rechtsaf leidt. De rekenmachine zegt: "Probeer 15 km/u!"
De detective rijdt dan met 15 km/u. Zo springt hij van route naar route, zonder alle oneindige snelheden zelf te hoeven proberen. Hij vindt de "slimme" snelheden die de interessante routes openen.

3. Wat hebben ze gedaan?

De auteurs hebben een gereedschap gebouwd dat deze detective voor hun specifieke bouwplaten (MontiArc) laat werken.

  1. Vertaling: Ze hebben hun blauwdrukken vertaald naar Java-code (een programmeertaal) die de detective kan lezen.
  2. De Rekenmachine: Ze hebben de rekenmachine (Z3) gekoppeld. Deze doet het zware rekenwerk om te zeggen: "Welke invoer zorgt ervoor dat we een nieuw stukje van het systeem zien?"
  3. De Vergelijking: Ze laten de detective twee verschillende blauwdrukken doorlopen. Als hij een situatie vindt waarbij het ene systeem een uitkomst geeft en het andere systeem een andere uitkomst, dan heeft hij een "Diff-Witness" gevonden. Dit is het bewijs van het verschil.

4. Het Grote Nadeel: De "Explosie"

Hier komt de creatieve analogie voor de beperkingen.
Stel je voor dat je een doolhof hebt. Je detective probeert elke weg te vinden. Maar als het doolhof heel groot wordt, of als er veel vertakkingen zijn (zoals bij een systeem met veel keuzes), groeit het aantal routes niet lineair, maar exponentieel.

  • Bij 10 vertakkingen heb je misschien 1000 routes.
  • Bij 20 vertakkingen heb je er al 1 miljoen.
  • Bij 30 vertakkingen heb je er meer routes dan er atomen in het heelal zijn.

Dit noemen ze "Path Explosion". De computer wordt dan zo druk met rekenen dat het uren of zelfs dagen duurt om alle routes te checken. De auteurs merkten dat hun tool goed werkte voor kleine systemen, maar bij grotere systemen de rekenkracht (CPU) volledig opbrandde.

5. De Oplossing voor de Oplossing: De "Tijdbom"

Om dit op te lossen, hebben ze een slimme truc bedacht: Time-outs.
Stel je voor dat de detective een stopwatch heeft. Als hij een route probeert te vinden en het duurt langer dan 10 milliseconden, zegt hij: "Oké, deze route is waarschijnlijk te ingewikkeld of bestaat niet. Ik sla hem over en ga verder."
Dit maakt het veel sneller, maar het risico is dat je misschien een heel belangrijk, maar moeilijk te vinden, verschil mist. De auteurs hebben gekeken naar de perfecte balans: hoe kort mag de tijd zijn zodat je nog steeds goede resultaten krijgt? Ze vonden dat 10 milliseconden een goed compromis was.

Conclusie: Wat betekent dit voor ons?

Dit onderzoek is een belangrijke stap vooruit. Het laat zien dat we software-systemen niet alleen kunnen vergelijken door naar de code te kijken, maar door ze te "dromen" en te testen met slimme wiskunde.

  • Het goede nieuws: We kunnen nu automatisch ontdekken of twee versies van een systeem zich echt anders gedragen. Dit helpt bij het opsporen van bugs voordat de software überhaupt gemaakt is.
  • Het uitdaging: Het is nog steeds zwaar werk voor de computer. Voor heel grote, complexe systemen moeten we nog slimmere manieren vinden om de detective te versnellen (bijvoorbeeld door meerdere detectives tegelijk te laten werken, of het systeem in kleinere stukjes op te delen).

Kortom: Ze hebben een krachtige nieuwe lens voor softwareontwikkelaars bedacht, maar die lens is nog wel een beetje zwaar om vast te houden. De volgende stap is hem lichter maken!