Quality Assurance of LLM-generated Code: Addressing Non-Functional Quality Characteristics

Deze studie onthult een significante discrepantie tussen academische focus, industriële prioriteiten en het gedrag van LLM's met betrekking tot niet-functionele kwaliteitskenmerken van gegenereerde code, en pleit voor de integratie van kwaliteitsborging in generatiepijplijnen om technische schuld te voorkomen.

Xin Sun, Daniel Ståhl, Kristian Sandahl, Christoph Kessler

Gepubliceerd Fri, 13 Ma
📖 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 zeer slimme, maar soms wat ongeduldige assistent hebt die alles kan schrijven: van recepten tot complexe computerprogramma's. Deze assistent is een LLM (een groot taalmodel voor code). Hij is razendsnel en kan in seconden duizenden regels code genereren.

Maar hier is het probleem: deze assistent is net als een beginnende kok die een gerecht maakt dat er perfect uitziet en smaakt (het werkt), maar misschien te veel zout bevat, te snel opwarmt of na een week in de koelkast rot.

Dit artikel van onderzoekers van de Linköping Universiteit in Zweden kijkt niet alleen naar of het gerecht werkt, maar vooral naar de kwaliteit ervan. Ze noemen dit "niet-functionele eigenschappen". Laten we dit uitleggen met een paar creatieve vergelijkingen.

1. Het Grote Misverstand: "Het werkt, dus het is goed"

Vroeger keken onderzoekers alleen naar of de code deed wat hij moest doen (functionele juistheid). Het was alsof je alleen keek of de auto startte.

  • De realiteit: De auto start misschien, maar hij verbruikt misschien 50 liter benzine per 100 kilometer (slechte prestatie), hij heeft een slechte rem (slechte veiligheid), of hij is zo ingewikkeld gebouwd dat niemand hem ooit kan repareren (slechte onderhoudbaarheid).

De onderzoekers wilden weten: Is de code die deze AI schrijft ook echt goed voor de lange termijn?

2. Drie Manieren om het Te Onderzoeken

De onderzoekers hebben drie verschillende methoden gebruikt, alsof ze een detective zijn die een zaak oplost:

  • De Literatuuronderzoek (Het Boek van de Geschiedenis):
    Ze hebben 109 wetenschappelijke artikelen gelezen.

    • Wat vonden ze? De academische wereld is heel bezorgd over veiligheid (zodat hackers niet inbreken) en snelheid. Maar ze kijken vaak niet genoeg naar hoe makkelijk de code is om te lezen of te onderhouden. Het is alsof ze alleen kijken of de auto niet ontploft, maar vergeten te kijken of de stoelen comfortabel zijn.
  • De Werkplaatsen (De Praten met de Vaklieden):
    Ze hebben met 15 echte software-ontwikkelaars uit de industrie gepraat.

    • Wat vonden ze? De praktijk is anders! Voor bedrijven is onderhoudbaarheid en leesbaarheid het allerbelangrijkste. Ze maken zich zorgen dat als AI te veel code schrijft die "raar" of onduidelijk is, het bedrijf later vastloopt in een berg aan technische schuld.
    • De analogie: De wetenschappers kijken naar de motor, maar de vaklieden zeggen: "Hé, de motor is misschien sterk, maar als de bedrading zo rommelig is dat niemand hem kan repareren, is het een ramp."
  • Het Experiment (De Proef in het Lab):
    Ze hebben drie verschillende AI-modellen (GPT-4o, Claude, DeepSeek) laten werken aan echte problemen in grote softwareprojecten. Ze hebben gekeken naar drie dingen:

    1. Veiligheid: Is er een gat voor hackers?
    2. Onderhoudbaarheid: Is de code netjes en logisch?
    3. Prestaties: Is het snel en zuinig?

3. De Verbluffende Resultaten: De "Gouden Kooi"

Wat bleek er uit het experiment?

  • De AI is niet perfect: De code die de AI schreef, werkte vaak wel (de auto startte), maar was vaak rommeliger, trager of onveiliger dan code die door een mens was geschreven.
  • De "Prompt" is geen toverstaf: De onderzoekers probeerden de AI te corrigeren door haar specifieke instructies te geven (bijvoorbeeld: "Maak het veiliger!" of "Maak het sneller!").
    • Het probleem: Als je de AI vraagt om sneller te zijn, wordt hij vaak trager in andere dingen, of hij breekt zelfs de code. Het is alsof je een kok vraagt om het eten sneller te bakken, en hij gooit er zo veel vuur op dat het verbrandt.
    • Trade-offs: Je kunt niet alles tegelijk optimaliseren. Als je de code veiliger maakt, wordt hij soms trager. Als je hem sneller maakt, wordt hij soms onveiliger. De AI kan dit evenwicht niet goed vinden zonder hulp.

4. De Belangrijkste Les: "Passen" is niet genoeg

De grootste conclusie van het artikel is dit:
In de huidige wereld van AI-programmeren is het doel vaak: "Laat de code de tests halen."
Maar dit is gevaarlijk. Het is alsof je een huis bouwt dat voldoet aan de bouwvergunning (de tests), maar dat na tien jaar instort omdat de fundamenten slecht waren.

De onderzoekers zeggen: "We moeten stoppen met alleen kijken of de code werkt, en gaan kijken of de code goed is."

Samenvatting in één zin

Deze AI-assistent is een wonder van snelheid, maar zonder menselijke controle en betere kwaliteitschecks, bouwt hij een huis dat wel staat, maar dat vol zit met lekkages, trage deuren en gevaarlijke bedrading. We moeten de AI leren om niet alleen te werken, maar om te bouwen met kwaliteit.

De toekomst: De onderzoekers pleiten ervoor dat we in de software-ontwikkeling "kwaliteitscontroleurs" inbouwen die de AI in real-time controleren, zodat we niet alleen code krijgen die werkt, maar code die ook veilig, snel en makkelijk te onderhouden is.