Valutare la qualità del codice con modelli di linguaggio grandi
Questo documento esamina come i modelli linguistici di grandi dimensioni valutano la qualità del codice rispetto agli strumenti esistenti.
― 8 leggere min
Indice
- Qualità del Codice
- Strumenti di Analisi Statica del Codice
- Il Ruolo dei Grandi Modelli Linguistici
- Metodologia di Ricerca
- Selezione del Progetto
- Metriche per il Confronto
- Risultati
- Analisi del Progetto Quarkus
- Analisi del Progetto Shattered Pixel Dungeon
- Analisi della Correlazione
- Limitazioni degli LLM
- Direzioni Futuri
- Conclusione
- Fonte originale
- Link di riferimento
Lo sviluppo software si basa molto sulla scrittura di codice che sia facile da leggere, mantenere e migliorare. La Qualità del codice è un fattore chiave nel successo dei progetti software, poiché influisce su quanto bene i programmatori possono lavorare con il codice. Ci sono diversi aspetti che determinano la qualità del codice, tra cui la complessità, la Leggibilità, la testabilità e se segue buone pratiche. Esistono strumenti, chiamati Strumenti di Analisi Statica del Codice, che aiutano a misurare queste qualità. Tuttavia, alcune qualità richiedono il giudizio umano, come la leggibilità, che non può essere facilmente misurata dagli strumenti.
I Grandi Modelli Linguistici (LLM) si sono presentati come risorse potenziali per valutare la qualità del codice. Questi modelli possono elaborare il linguaggio naturale e comprendere la sintassi del codice. Questo documento esamina l'efficacia degli LLM nella valutazione della qualità del codice rispetto a strumenti tradizionali come SonarQube. Ci concentriamo su quanto bene gli LLM possono valutare aspetti del codice che non sono facilmente misurabili da strumenti automatici.
Qualità del Codice
La qualità del codice si riferisce a vari fattori che contribuiscono all'efficacia complessiva del codice. Alcuni di questi fattori includono:
- Complessità: Quanto è complicato il codice. Maggiore complessità può rendere il codice più difficile da mantenere e comprendere.
- Leggibilità: Quanto è facile per qualcuno leggere e comprendere il codice. Un codice ben scritto dovrebbe essere chiaro e diretto.
- Testabilità: Quanto è facile testare il codice per assicurarsi che funzioni come previsto.
- Interoperabilità: Quanto bene il codice interagisce con altri codici o sistemi.
- Riutilizzabilità: Quanto bene le parti del codice possono essere utilizzate in progetti o contesti diversi.
- Buone Pratiche: Seguire pratiche di codifica consolidate che migliorano la qualità.
Gli strumenti di analisi statica del codice aiutano a valutare questi fattori esaminando il codice e generando report. Nonostante l'aiuto di questi strumenti, ci sono alcuni aspetti che richiedono ancora il giudizio umano.
Strumenti di Analisi Statica del Codice
Strumenti come SonarQube analizzano il codice sorgente per identificare potenziali problemi e fornire metriche su vari aspetti della qualità del codice. SonarQube valuta il codice e genera valutazioni di mantenibilità basate su regole specifiche. Le valutazioni vanno da A a E, con A che rappresenta la migliore qualità e E la peggiore. Queste valutazioni indicano il costo e lo sforzo richiesti per risolvere i problemi identificati.
Sebbene gli strumenti di analisi statica del codice possano evidenziare efficacemente i problemi legati alla qualità del codice, hanno delle limitazioni. Ad esempio, potrebbero non cogliere appieno le sfumature di quanto sia leggibile o comprensibile il codice senza l'intuizione umana. Alcuni problemi possono essere sottili, come nomi di convenzioni scadenti o commenti confusi, che spesso sfuggono agli strumenti statici.
Il Ruolo dei Grandi Modelli Linguistici
I grandi modelli linguistici sono sistemi di intelligenza artificiale addestrati su enormi set di dati testuali. Possono comprendere e generare testi simili a quelli umani, rendendoli adatti a vari compiti, tra cui la valutazione del codice. Grazie all'elaborazione del linguaggio naturale, potrebbero valutare la qualità del codice e fornire feedback simile a quello di revisori umani.
Date le loro potenzialità, abbiamo esplorato se gli LLM potessero integrare gli strumenti di analisi statica tradizionali nella valutazione della qualità del codice. In particolare, abbiamo esaminato due versioni dell’LLM noto come ChatGPT: 3.5 Turbo e 4o.
Metodologia di Ricerca
Per valutare la capacità degli LLM di valutare la qualità del codice, abbiamo selezionato due progetti Java open-source con diverse valutazioni di mantenibilità: uno valutato A e l'altro B. Sono state analizzate un totale di 1.641 classi da questi progetti. Abbiamo confrontato i risultati delle valutazioni degli LLM con quelli di SonarQube.
Gli LLM sono stati istruiti a fornire un punteggio da 0 a 100 basato sulla leggibilità e sulla qualità generale. Abbiamo anche definito linee guida specifiche su come l’LLM dovrebbe giustificare il suo punteggio, concentrandosi su chiarezza e brevità. I risultati di entrambi gli LLM e SonarQube sono stati analizzati statisticamente per determinare correlazioni e discrepanze.
Selezione del Progetto
Due progetti open-source sono stati scelti per questa ricerca:
- Quarkus: Un framework cloud-native per scrivere applicazioni Java, con una valutazione di mantenibilità A.
- Shattered Pixel Dungeon: Un gioco roguelike open-source con una valutazione di mantenibilità B.
Questi progetti sono stati selezionati per fornire un contrasto nei livelli di qualità del codice pur assicurando che la dimensione del codice fosse sostanziale per un’analisi significativa.
Metriche per il Confronto
Abbiamo confrontato metriche specifiche derivate dall'analisi di SonarQube, tra cui:
- Numero di code smells
- Densità delle righe di commento
- Complessità cognitiva
- Complessità complessiva
- Conteggio delle dichiarazioni (numero di dichiarazioni eseguibili)
Queste metriche hanno fornito una base per il confronto con i punteggi assegnati dagli LLM.
Risultati
Analisi del Progetto Quarkus
Il progetto Quarkus conteneva 644 classi e un totale di 55.839 righe di codice. SonarQube ha identificato 1.626 code smells nel progetto. La valutazione di mantenibilità ha mostrato che la maggior parte delle classi aveva un'alta valutazione, con il 95,49% valutato A e il 3,26% valutato B.
L’LLM ha assegnato punteggi principalmente intorno all'85 o superiore, con una concentrazione significativa di classi che ha ricevuto un punteggio di 85. La correlazione tra i punteggi degli LLM e le valutazioni di SonarQube ha mostrato una relazione moderata per forte, indicando che l’LLM è stato in grado di identificare aspetti della qualità del codice che si allineavano con l'analisi di SonarQube.
Tuttavia, sono emerse discrepanze in aree specifiche. Ad esempio, alcune classi che SonarQube ha valutato come di qualità inferiore hanno ricevuto punteggi più alti dagli LLM. Questa differenza ha evidenziato come l’LLM possa valutare la leggibilità in modo diverso rispetto all'approccio incentrato sui costi di riparazione di SonarQube.
Analisi del Progetto Shattered Pixel Dungeon
Il progetto Shattered Pixel Dungeon aveva 997 classi e un totale di 148.701 righe di codice. SonarQube ha identificato 4.432 code smells e le valutazioni di mantenibilità hanno mostrato che solo il 67,2% delle classi valutava A, con molte classi che rientravano in valutazioni di qualità inferiore.
Per questo progetto, i punteggi degli LLM variavano ampiamente, con un numero notevole di classi che ricevevano punteggi inferiori a 70. L'analisi ha rivelato una tendenza per l’LLM a valutare classi che SonarQube classificava come di bassa qualità molto più in alto del previsto. Inoltre, le valutazioni dell’LLM erano più frammentate, indicando un approccio meno coerente rispetto al primo progetto.
Analisi della Correlazione
Abbiamo condotto un'analisi di correlazione tra le metriche di SonarQube e i punteggi degli LLM utilizzando la correlazione di Spearman. L'analisi ha indicato che alcune metriche si correlavano bene, mostrando che gli LLM potevano riflettere aspetti della qualità del codice come valutati da SonarQube.
Tuttavia, i risultati hanno anche evidenziato limitazioni nelle valutazioni degli LLM, in particolare nel catturare la complessità e le interrelazioni tra i diversi componenti del codice. L’LLM si è spesso concentrato sulla leggibilità del codice, mentre SonarQube considerava un contesto più ampio, comprese questioni di design e mantenibilità.
Limitazioni degli LLM
Sebbene lo studio abbia trovato risultati promettenti per gli LLM nella valutazione della qualità del codice, sono state identificate diverse limitazioni:
- Variabilità dei Risultati: Gli LLM potrebbero produrre risultati diversi per lo stesso input, portando a incoerenze nelle valutazioni.
- Focus sulla Leggibilità: Gli LLM valutano principalmente la qualità del codice in base agli aspetti di leggibilità, che potrebbero trascurare problemi più profondi che gli strumenti di analisi statica possono rilevare.
- Discrepanze tra Versioni: Diverse versioni dello stesso LLM possono fornire valutazioni di qualità diverse, indicando che fare affidamento su una singola versione per la valutazione del codice potrebbe non garantire risultati coerenti.
Direzioni Futuri
Questa ricerca evidenzia il potenziale di utilizzare gli LLM insieme a strumenti di analisi statica tradizionali per migliorare le valutazioni della qualità del codice. Il lavoro futuro potrebbe esplorare un uso più ampio degli LLM attraverso diversi linguaggi di programmazione e in vari contesti. Aree specifiche per ulteriori ricerche includono:
- Studi su Larga Scala: Espandere la valutazione per includere più progetti e linguaggi per convalidare i risultati su uno spettro più ampio.
- Confronto con Altri Strumenti: Valutare gli LLM insieme a una gamma più ampia di strumenti di analisi statica potrebbe fornire approfondimenti più profondi sulla loro efficacia.
- Ottimizzazione dei Prompt: Indagare diverse strategie di prompting per migliorare la qualità e la coerenza degli output generati dagli LLM.
- Integrazione della Revisione Umana: Combinare le valutazioni degli LLM con le revisioni umane potrebbe sfruttare i punti di forza di entrambi gli strumenti automatici e il giudizio umano, portando a risultati migliori per la qualità del codice.
Conclusione
Questo studio ha esplorato le capacità dei grandi modelli linguistici nella valutazione della qualità del codice rispetto a strumenti tradizionali come SonarQube. I risultati indicano che gli LLM possono fornire preziose intuizioni sulla leggibilità e sulla qualità generale del codice, complementando gli strumenti di analisi statica. Tuttavia, le differenze nei criteri valutativi tra LLM e strumenti di analisi statica sottolineano la necessità di un approccio integrato che combini i punti di forza di entrambi. Man mano che la tecnologia continua a evolversi, la ricerca futura sarà essenziale per affinare questi metodi e migliorare le pratiche di sviluppo software.
Titolo: Evaluating Source Code Quality with Large Language Models: a comparative study
Estratto: Code quality is an attribute composed of various metrics, such as complexity, readability, testability, interoperability, reusability, and the use of good or bad practices, among others. Static code analysis tools aim to measure a set of attributes to assess code quality. However, some quality attributes can only be measured by humans in code review activities, readability being an example. Given their natural language text processing capability, we hypothesize that a Large Language Model (LLM) could evaluate the quality of code, including attributes currently not automatable. This paper aims to describe and analyze the results obtained using LLMs as a static analysis tool, evaluating the overall quality of code. We compared the LLM with the results obtained with the SonarQube software and its Maintainability metric for two Open Source Software (OSS) Java projects, one with Maintainability Rating A and the other B. A total of 1,641 classes were analyzed, comparing the results in two versions of models: GPT 3.5 Turbo and GPT 4o. We demonstrated that the GPT 3.5 Turbo LLM has the ability to evaluate code quality, showing a correlation with Sonar's metrics. However, there are specific aspects that differ in what the LLM measures compared to SonarQube. The GPT 4o version did not present the same results, diverging from the previous model and Sonar by assigning a high classification to codes that were assessed as lower quality. This study demonstrates the potential of LLMs in evaluating code quality. However, further research is necessary to investigate limitations such as LLM's cost, variability of outputs and explore quality characteristics not measured by traditional static analysis tools.
Autori: Igor Regis da Silva Simões, Elaine Venson
Ultimo aggiornamento: 2024-09-22 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2408.07082
Fonte PDF: https://arxiv.org/pdf/2408.07082
Licenza: https://creativecommons.org/licenses/by-nc-sa/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://www.sonarsource.com/products/sonarqube/
- https://github.com/microsoft/CodeXGLUE
- https://fbinfer.com
- https://sonarcloud.io/explore/projects
- https://github.com/quarkusio/quarkus
- https://github.com/ismvru/shattered-pixel-dungeon
- https://platform.openai.com/docs/guides/text-generation/how-should-i-set-the-temperature-parameter
- https://sonarcloud.io/summary/overall?id=quarkusio
- https://rules.sonarsource.com/java/RSPEC-1104/
- https://rules.sonarsource.com/java/RSPEC-1444/
- https://rules.sonarsource.com/java/RSPEC-2696/
- https://sonarcloud.io/project/overview?id=ismvru
- https://rules.sonarsource.com/java/RSPEC-6541/
- https://rules.sonarsource.com/java/RSPEC-3776/
- https://rules.sonarsource.com/java/RSPEC-110/