Will It Break in Production? Metric-Driven Prediction of Residual Defects in Python Systems
Dit artikel toont aan dat toezicht opgeleide machine learning-modellen die proces- en code-metrics gebruiken, residudefecten in Python-systemen effectief kunnen voorspellen met een hoge recall, en dat ze beter presteren dan LLM's en onbewaakte benaderingen, terwijl ze ook aantonen dat metrics en code-embeddings complementaire informatie bevatten.
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 voor dat je een kwaliteitscontroleur bent in een enorme speelgoedfabriek. Jouw taak is het vinden van kapotte speelgoedstukken voordat ze het magazijn verlaten. Je hebt een team van inspecteurs (het testteam) dat elk speelgoedstuk controleert. Maar soms glippen er kapotte speelgoedstukken door de mazen van het net, worden ze naar een klant verzonden en breken ze pas wanneer het kind er mee probeert te spelen. In de wereld van software worden deze residuele fouten genoemd—bugs die alle tests overleven en pas zichtbaar worden zodra het programma "live" is in de echte wereld.
Dit artikel stelt een eenvoudige maar moeilijke vraag: Kunnen we een computerprogramma bouwen dat voorspelt welke bugs de fabriek zullen ontvluchten en in de echte wereld zullen breken?
De onderzoekers richtten zich op Python, een populaire programmeertaal die zeer flexibel is maar lastig kan zijn omdat het niet altijd fouten opvangt totdat de code daadwerkelijk wordt uitgevoerd.
Hier is wat ze vonden, opgesplitst in eenvoudige concepten:
1. De "super-intelligente" raadselaars faalden
De onderzoekers probeerden eerst Large Language Models (LLM's). Denk hierbij aan super-slimme AI-robots die bijna elk stuk code dat ooit is geschreven, hebben gelezen. Ze vroegen deze robots om een stuk code te bekijken en te raden: "Zal deze bug later opdoken?"
- Het resultaat: De AI-robots waren slecht in deze specifieke taak.
- Eén AI (Gemini) was zo enthousiast om problemen te vinden dat het voor bijna alles "GEVAAR!" schreeuwde. Het vond bijna alle echte slechte bugs, maar markeerde ook duizenden goede speelgoedstukken als kapot. Het was als een rookmelder die afgaat als je net een sneetje brood toast.
- Andere AI's (Claude, GPT-4) waren te voorzichtig. Ze zeiden meestal: "Lijkt goed", en misten de werkelijke gevaarlijke bugs.
- Zelfs toen ze probeerden deze robots specifiek op deze taak te "trainen", konden ze het patroon nog steeds niet leren. Ze konden simpelweg geen onderscheid maken tussen een bug die verborgen zou blijven en een die een crash zou veroorzaken.
2. De "oude-school" statistici wonnen
Vervolgens probeerden de onderzoekers een andere aanpak. In plaats van de AI te vragen om de code "te lezen" zoals een mens, voerden ze de computer een lijst met metrieken (cijfers en statistieken) over de code aan.
Denk hierbij aan een arts die de vitale functies van een patiënt controleert in plaats van te vragen hoe ze zich voelen. Ze keken naar zaken zoals:
Leeftijd: Hoe oud is dit stuk code?
Grootte: Hoe groot is het bestand?
Wisselvalligheid (Churn): Hoe vaak hebben mensen het gewijzigd?
Activiteit: Hoeveel verschillende ontwikkelaars hebben er aan gewerkt?
Het resultaat: Deze methode werkte veel beter.
- Met behulp van standaard machine learning-tools (zoals Random Forest en XGBoost) konden ze de ontvluchte bugs met hoge nauwkeurigheid voorspellen.
- Ze vingen ongeveer 85% tot 90% van de bugs die naar productie zouden zijn ontsnapt.
- Cruciaal: ze verlaagden het aantal gemiste bugs enorm in vergelijking met de AI-robots.
3. De "geheime saus" van de slechte bugs
De studie ontdekte precies wat een bug waarschijnlijk maakt dat deze aan detectie ontsnapt. Het ging niet om de complexe logica binnen de code; het ging om de geschiedenis en structuur van het bestand.
De bugs die ontsnapten, werden het meest waarschijnlijk aangetroffen in:
- Oude code: Bestanden die al lang bestaan.
- Grote code: Grote bestanden die moeilijk te navigeren zijn.
- Rommelige code: Bestanden die voortdurend zijn gewijzigd door veel verschillende mensen.
- Complexe code: Bestanden met vele verbindingen met andere delen van het systeem.
Het is als het ontdekken dat de speelgoedstukken die later het meest waarschijnlijk breken, die zijn die al jaren in het magazijn hebben gelegen, zijn gemaakt van te veel kleine onderdelen, en zijn samengesteld door een roterend gezelschap van verschillende werknemers.
4. Twee verschillende talen
Tot slot vroegen de onderzoekers: "Vertellen de 'begrip' van de AI van de code en de 'cijfers' (metrieken) ons hetzelfde?"
- Het antwoord: Nee. Ze zijn als twee verschillende talen.
- De metrieken vertellen je over de structuur en geschiedenis (de "vorm" van de code).
- De AI-embeddings (het interne begrip van de AI) vertellen je over de betekenis en semantiek (wat de code probeert te doen).
- De studie toonde aan dat deze twee soorten informatie volledig verschillende ruimtes innemen. Ze zijn complementair, wat betekent dat ze elkaar niet overlappen. Echter, toen de onderzoekers probeerden ze te combineren in één super-model, raakte de AI in de war en presteerde het slechter. Het lijkt erop dat voor nu de simpele cijfers het meest betrouwbare instrument zijn voor deze specifieke taak.
De bottom line
Als je de bugs wilt vinden die je software zullen breken nadat je het hebt gelanceerd, vertrouw dan niet op een chique AI om de code te "lezen" en te raden. Kijk in plaats daarvan naar de statistieken: controleer de leeftijd, grootte en wijzigingsgeschiedenis van je bestanden.
De beste strategie is om een eenvoudig, snel computermodel te gebruiken om de "oude, grote en rommelige" bestanden te markeren voor extra menselijke inspectie. Dit zal niet elke enkele bug vangen, maar het zal de overgrote meerderheid van de gevaarlijke vangen die meestal door de mazen van het net glippen.
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.