← Ultimi articoli
💻 informatica

An LLM-based Technique for Detection of Code Clones Across Open Source Microservice Repository Forks

Questo studio dimostra che una pipeline basata su RAG che utilizza il modello LLM Codestral-22B con few-shot continuous prompting identifica efficacemente i cloni di codice semantici e i pattern di riutilizzo nei fork di microservizi open-source, superando gli strumenti tradizionali basati sulla sintassi nonostante le attuali limitazioni nella recall.

Autori originali: Jamie Kemman, Shreya Nakum, Alexander Bakhtin, Matteo Esposito, Tomas Cerny, Valentina Lenarduzzi, Davide Taibi

Pubblicato 2026-10-21
📖 5 min di lettura🧠 Approfondimento

Autori originali: Jamie Kemman, Shreya Nakum, Alexander Bakhtin, Matteo Esposito, Tomas Cerny, Valentina Lenarduzzi, Davide Taibi

Articolo originale sotto licenza CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). ✨ Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

Nel vasto e collaborativo mondo dello sviluppo software, i programmatori spesso costruiscono nuove applicazioni prendendo codice esistente e adattandolo per uno scopo diverso. Questa pratica, nota come forking, è il motore dell'innovazione open-source, permettendo ai team di stare sulle spalle dei giganti invece di partire da zero. Tuttavia, man mano che questi progetti crescono e si diramano, sorge una complessità nascosta: il codice al loro interno può diventare una rete intricata di duplicati. Alcune copie sono repliche esatte, riga per riga, mentre altre sono versioni astutamente riscritte che fanno la stessa cosa ma appaiono completamente diverse in superficie. Questi sono noti come cloni del codice. Per i manutentori di grandi sistemi software, specialmente quelli costruiti come una collezione di piccoli servizi indipendenti, trovare questi duplicati è un compito monumentale. Gli strumenti tradizionali sono eccellenti nel individuare copie esatte, ma spesso non riescono a riconoscere quando due pezzi di codice sono stati rifattorizzati per eseguire la stessa funzione in modi del tutto diversi. Comprendere dove e come esistono questi duplicati è crucialo, poiché rivela come il software evolve, dove risiedono i rischi di incoerenza e quanto sforzo sia realmente necessario per mantenere un sistema in funzione senza intoppi.

Un team di ricercatori si è recentemente posto l'obiettivo di risolvere questo problema testando un nuovo tipo di strumento digitale: i modelli linguistici di grandi dimensioni (large language models). Questi sono gli stessi potenti sistemi di intelligenza artificiale che possono scrivere storie o rispondere a domande, ma qui sono stati addestrati per comprendere la logica del codice informatico. I ricercatori volevano vedere se questi modelli potessero agire come un microscopio sofisticato, individuando non solo il codice identico, ma anche il codice semanticamente simile che gli strumenti tradizionali perdono. Si sono concentrati sulla loro investigazione su progetti di microservizi open-source, che sono sistemi software moderni costruiti da molte parti piccole e intercambiabili. Per iniziare, dovevano insegnare a questi modelli come riconoscere le diverse tipologie di cloni del codice. Hanno raccolto un enorme dataset di diecimila coppie di frammenti di codice C++, la metà dei quali era noto per essere funzionalmente identico ma sintatticamente diverso, e l'altra metà non correlata. Hanno testato tre diversi modelli di intelligenza artificiale, che spaziavano da un sistema di uso generale a due modelli specializzati progettati specificamente per compiti di programmazione. Hanno anche sperimentato diversi modi di chiedere ai modelli di eseguire il compito, provando di tutto, dalle istruzioni semplici a prompt complessi che fornivano esempi e richiedevano punteggi di confidenza.

I risultati di questo test iniziale sono stati rivelatori. I ricercatori hanno scoperto che i modelli di programmazione specializzati erano molto superiori a quello di uso generale. Tra questi, un modello chiamato Codestral è emerso come il più accurato, raggiungendo l'accuratezza complessiva più alta del 65,5% e superando sia l'altro modello specializzato che il sistema di uso generale. Tuttavia, lo studio ha anche messo in luce un limite significativo: anche il miglior modello commetteva errori. Spesso mancava proprio i duplicati che doveva trovare, fallendo nel riconoscerli circa il quaranta percento delle volte. Era bravo nell'identificare il codice che era decisamente diverso, ma era troppo cauto quando si trattava di individuare le sottili somiglianze. Questo alto tasso di mancate rilevazioni significava che, per ora, questi potenti strumenti non sono ancora abbastanza affidabili da essere utilizzati come unico metodo per gestire il codice in un contesto professionale e automatizzato. Sono utili assistenti, ma non possono ancora sostituire il giudizio umano o i metodi di rilevamento stabiliti.

Armati del modello con le prestazioni migliori e del modo più efficace di interrogarlo, i ricercatori hanno poi rivolto la loro attenzione al mondo reale. Hanno selezionato ventidue coppie di repository di microservizi open-source, dove uno era il progetto originale e l'altro era un fork che era stato modificato da un gruppo diverso di sviluppatori. Hanno inserito queste basi di codice nel loro sistema per mappare esattamente quali tipi di duplicati esistessero tra l'originale e il fork. Le scoperte hanno delineato un quadro chiaro di come evolvono questi progetti. Il tipo di duplicato più comune che hanno trovato era la copia esatta, in cui il codice rimaneva invariato. Il secondo più comune era il clone di Tipo-3, in cui il codice era stato alterato con aggiunte o eliminazioni ma manteneva la sua funzionalità originale. Sorprendentemente, il codice completamente riscritto che fa la stessa cosa in un modo totalmente diverso era meno comune rispetto agli altri tipi in questi specifici progetti. Ciò suggerisce che quando gli sviluppatori effettuano il forking di un microservizio, tendono a mantenere intatta la struttura centrale piuttosto che reinventare completamente la ruota.

Per garantire che i loro risultati automatizzati fossero affidabili, i ricercatori hanno confrontato l'output del modello con una revisione manuale di tre dei progetti da parte di esperti umani. I revisori umani hanno confermato che il modello era generalmente corretto nell'identificare i tipi di duplicati più comuni, sebbene i numeri specifici variassero a seconda della tecnologia sottostante utilizzata dal modello per leggere il codice. Lo studio ha concluso che, sebbene l'intelligenza artificiale offra un nuovo modo promettente per comprendere le profonde relazioni semantiche tra i pezzi di codice, non è ancora una soluzione perfetta. La tecnologia è abbastanza potente da vedere schemi che gli umani e gli strumenti più vecchi potrebbero perdere, ma fatica ancora con l'alto rischio di mancare completamente un duplicato. Per ora, questi modelli servono al meglio come una guida per aiutare gli sviluppatori a navigare nella complessa storia del loro codice, piuttosto che come un'autorità finale. La strada da seguire consiste nel perfezionare questi strumenti per ridurre i loro errori e nel combinare la loro comprensione semantica con i metodi tradizionali per creare un quadro più completo dell'evoluzione del software.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →