Automated Generation of Issue-Reproducing Tests by Combining LLMs and Search-Based Testing

Dit paper introduceert BLAST, een tool die grote taalmodellen en zoekgebaseerde softwaretesten combineert om automatisch tests te genereren die bugs reproduceren, wat in een evaluatie 35,4% succes opleverde en in een praktijkexperiment met een GitHub-bot leidde tot het succesvol aanreiken van dergelijke tests aan ontwikkelaars.

Konstantinos Kitsios, Marco Castelluccio, Alberto Bacchelli

Gepubliceerd 2026-03-11
📖 4 min leestijd☕ Koffiepauze-leesvoer

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

Stel je voor dat je een grote, complexe machine bouwt: een stuk software. Soms gaat er iets mis, een "bug" duikt op. Een programmeur repareert de machine (dit heet een "patch"), maar hoe weet je zeker dat de bug echt weg is en niet terugkomt?

Het antwoord is een test: een kleine controle die laat zien dat de machine op het oude, gebrekkige moment faalt, maar op het nieuwe, gerepareerde moment werkt. Helaas zijn programmeurs vaak druk en vergeten ze deze tests te schrijven.

Dit artikel introduceert BLAST, een slimme tool die dit werk voor hen overneemt. BLAST is als een super-assistent die twee verschillende methoden combineert om die perfecte test te vinden.

Hier is hoe het werkt, vertaald naar alledaagse taal:

1. De Twee Helden van BLAST

BLAST gebruikt twee krachten die samenwerken, net als een detective en een sporttrainer.

  • De Detective (LLM - Large Language Model):
    Dit is de slimme, creatieve kant. Het is een AI die kan lezen en begrijpen wat er mis is gegaan. Het leest het verhaal van de bug (de "issue") en de reparatie (de "patch").

    • Het probleem: Soms droomt deze AI (ze noemen het "hallucineren"). Hij probeert dingen te gebruiken die niet bestaan, alsof hij probeert een sleutel te maken voor een slot dat er niet is.
    • De oplossing: BLAST geeft de detective extra hulpmiddelen: oude testcases, de structuur van de code en zelfs de resultaten van de sporttrainer (zie hieronder).
  • De Sporttrainer (SBST - Search-Based Software Testing):
    Dit is de methodische, harde werkende kant. In plaats van te dromen, probeert deze tool duizenden willekeurige combinaties van knoppen en schakelaars om te zien wat er gebeurt. Het is alsof je een machine honderden keren per seconde aan- en uitzet om te kijken of hij stopt met piepen.

    • Het probleem: De trainer weet niet waarom de machine stuk was. Hij probeert van alles, maar mist vaak de specifieke knop die de bug veroorzaakte.
    • De oplossing: BLAST geeft de trainer een hint (een "zaadje") van de detective. De trainer weet dan: "Ah, ik moet vooral op deze knop letten!"

2. Hoe BLAST Samenwerkt (De Dans)

BLAST laat deze twee niet alleen werken, maar zorgt voor een perfecte dans:

  1. De Detective schrijft een hint: De AI leest het probleem en schrijft een beginnende test (een "seed").
  2. De Trainer krijgt de hint: De trainer neemt die hint, past hem aan zodat hij technisch perfect is, en begint daar mee te "trainen" (zoeken).
  3. De Trainer leert de Detective: De trainer maakt tests die werken. Deze tests worden teruggegeven aan de detective. De detective ziet: "Oh, zo werkt het! Ik kan nu een betere test schrijven."
  4. Het resultaat: Ofwel de trainer vindt de perfecte test, ofwel de detective schrijft hem op basis van de trainer's werk.

3. Wat hebben ze ontdekt? (De Resultaten)

De onderzoekers hebben BLAST getest op een enorme verzameling oude bugs (426 stuks).

  • De oude manier: De beste bestaande AI kon ongeveer 23% van de bugs goed testen.
  • BLAST: Door de detective en de trainer te laten samenwerken, slaagde BLAST in 35% van de gevallen. Dat is een flinke sprong!

Maar het echte bewijs kwam uit de echte wereld. Ze bouwden een robot (een "bot") die automatisch meekijkt op GitHub (waar programmeurs samenwerken).

  • De robot keek naar 32 nieuwe reparaties.
  • In 11 gevallen vond hij een test die de bug reproduceerde.
  • De programmeurs keken er naar en vonden in 6 van de 11 gevallen dat de test echt nuttig was. Soms zelfs zo goed, dat ze de test direct in hun eigen software opnamen!

4. Waarom is dit belangrijk?

Stel je voor dat je een auto bouwt. Als je een band verwisselt, wil je zeker weten dat hij goed zit.

  • Zonder test: Je rijdt weg en hoopt dat het goed gaat.
  • Met BLAST: De robot zegt: "Hé, als je deze band niet vastdraait, valt hij eraf. Maar als je hem vastdraait (de reparatie), blijft hij zitten. Hier is een test die dat bewijst."

De grote les:
Soms is een slimme AI (de detective) niet genoeg; hij droomt te veel. Soms is een brute-force zoekmachine (de trainer) niet slim genoeg; hij mist de context. Maar als je ze samen laat werken, krijg je het beste van beide werelden: een test die niet alleen werkt, maar ook echt het probleem oplost.

Conclusie

BLAST is als een tandarts-assistent die niet alleen de boor vasthoudt (de AI), maar ook de spiegel en de verlichting regelt (de zoekmachine), zodat de tandarts (de programmeur) precies weet waar het gat zit en hoe hij het moet vullen. Het maakt software veiliger, betrouwbaarder en bespaart programmeurs tijd.