An LLM-based Technique for Detection of Code Clones Across Open Source Microservice Repository Forks
Deze studie toont aan dat een RAG-gebaseerde pipeline die gebruikmaakt van het Codestral-22B LLM met few-shot continuous prompting effectief semantische codeclones en patronen van hergebruik in open-source microservice-forks identificeert, waarbij het traditionele syntaxisgebaseerde tools overtreft ondanks de huidige beperkingen in recall.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (https://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
In de uitgestrekte, collaboratieve wereld van softwareontwikkeling bouwen programmeurs vaak nieuwe applicaties door bestaande code te nemen en deze aan te passen voor een ander doel. Deze praktijk, bekend als 'forking', is de motor van open-source innovatie, waardoor teams op de schouders van reuzen kunnen staan in plaats van vanaf nul te beginnen. Echter, naarmate deze projecten groeien en vertakken, ontstaat er een verborgen complexiteit: de code binnen deze projecten kan een verstrengeld web van duplicaten worden. Sommige kopieën zijn exacte, regel-voor-regel replica's, terwijl andere slimme, herschreven versies zijn die hetzelfde doen maar er aan de oppervlakte volkomen anders uitzien. Dit staat bekend als codeclonen. Voor de onderhouders van grote softwaresystemen, vooral die gebouwd zijn als een verzameling kleine, onafhankelijke services, is het opsporen van deze duplicaten een monumentale taak. Traditionele tools zijn uitstekend in het opsporen van exacte kopieën, maar ze falen vaak in het herkennen wanneer twee stukken code zijn gerefactord om dezelfde functie uit te voeren op geheel verschillende manieren. Het begrijpen van waar en hoe deze duplicaten bestaan, is cruciaal, omdat het onthult hoe software evolueert, waar risico's op inconsistentie liggen en hoeveel inspanning er werkelijk nodig is om een systeem soepel draaiende te houden.
Een team van onderzoekers probeerde onlangs dit probleem op te lossen door een nieuw soort digitale tool te testen: large language models. Dit zijn dezelfde krachtige kunstmatige intelligentiesystemen die verhalen kunnen schrijven of vragen kunnen beantwoorden, maar hier waren ze getraind om de logica van computercode te begrijpen. De onderzoekers wilden zien of deze modellen als een geavanceerde microscoop konden fungeren, die niet alleen identieke code opspoort, maar ook de semantisch gelijkaardige code die traditionele tools missen. Ze richtten hun onderzoek op open-source microservice-projecten, wat moderne softwaresystemen zijn die zijn opgebouwd uit veel kleine, uitwisselbare onderdelen. Om te beginnen moesten ze deze modellen leren hoe ze de verschillende soorten codeclonen herkennen. Ze verzamelden een enorme dataset van tienduizend paren C++ codefragmenten, waarvan de helft bekend stond als functioneel identiek maar syntactisch verschillend, en de andere helft ongerelateerd was. Ze testten drie verschillende kunstmatige intelligentiemodellen, variërend van een algemeen systeem tot twee gespecialiseerde modellen die specifiek voor programmeertaken zijn ontworpen. Ze experimenteerden ook met verschillende manieren om de modellen de opdracht te geven, waarbij ze alles probeerden van eenvoudige instructies tot complexe prompts die voorbeelden boden en om betrouwbaarheidsscores vroegen.
De resultaten van deze initiële test waren veelzeggend. De onderzoekers ontdekten dat de gespecialiseerde programmeermodellen veel superieur waren aan het algemene model. Onder hen kwam een model genaamd Codestral als meest accuraat naar voren, met een hoogste algehele nauwkeurigheid van 65,5%, waarmee het zowel het andere gespecialiseerde model als het algemene systeem overtrof. De studie bracht echter ook een significante beperking aan het licht: zelfs het beste model maakte fouten. Het miste regelmatig de zeer specifieke duplicaten die het zou moeten vinden, en herkende ze ongeveer veertig procent van de tijd niet. Het was goed in het identificeren van code die definitief anders was, maar het was te voorzichtig als het ging om het opsporen van subtiele gelijkenissen. Dit hoge aantal gemiste detecties betekende dat deze krachtige tools, voorlopig, nog niet betrouwbaar genoeg zijn om als de enige methode voor het beheren van code in een professionele, geautomatiseerde omgeving te worden gebruikt. Ze zijn nuttige assistenten, maar ze kunnen de menselijke beoordeling of gevestigde detectiemethoden nog niet vervangen.
Gewapend met het best presterende model en de meest effectieve manier van prompten, richtten de onderzoekers hun aandacht vervolgens op de echte wereld. Ze selecteerden tweeëntwintig paren van open-source microservice-repositories, waarbij één de originele project was en de andere een fork die door een andere groep ontwikkelaars was aangepast. Ze voerden deze codebases in hun systeem in om precies in kaart te brengen welke soorten duplicaten er bestonden tussen het origineel en de fork. De bevindingen schetsen een duidelijk beeld van hoe deze projecten evolueren. Het meest voorkomende type duplicaat dat ze vonden, was de exacte kopie, waarbij de code ongewijzigd bleef. De tweede meest voorkomende was de Type-3 kloon, waarbij de code was gewijzigd door toevoegingen of verwijderingen, maar de oorspronkelijke functionaliteit behield. Verrassend genoeg kwam de volledig herschreven code die hetzelfde doet op een totaal andere manier minder vaak voor dan de andere typen in deze specifieke projecten. Dit suggereert dat wanneer ontwikkelaars een microservice forken, ze de kernstructuur intact houden in plaats van het wiel volledig opnieuw uit te vinden.
Om ervoor te zorgen dat hun geautomatiseerde bevindingen betrouwbaar waren, vergeleken de onderzoekers de output van het model met een handmatige beoordeling van drie van de projecten door menselijke experts. De menselijke beoordelaars bevestigden dat het model over het algemeen correct was in het identificeren van de meest voorkomende typen duplicaten, hoewel de specifieke aantallen varieerden afhankelijk van welke onderliggende technologie het model gebruikte om de code te lezen. De studie concludeerde dat hoewel kunstmatige intelligentie een veelbelovende nieuwe manier biedt om de diepe, semantische relaties tussen stukken code te begrijpen, het nog geen perfecte oplossing is. De technologie is krachtig genoeg om patronen te zien die mensen en oudere tools mogelijk missen, maar het worstelt nog steeds met de hoge inzet van het volledig missen van een duplicaat. Voor nu dienen deze modellen het beste als een gids om ontwikkelaars te helpen navigeren door de complexe geschiedenis van hun code, in plaats van als een definitieve autoriteit. De weg vooruit ligt in het verfijnen van deze tools om hun fouten te verminderen en het combineren van hun semantische begrip met traditionele methoden om een completer beeld van softwareevolutie te creëren.
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.