The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation
Gao, Wang, Gao et al.
Test cases are essential for validating the reliability and quality of software applications. Recent studies have demonstrated the capability of Large Language Models (LLMs) to generate useful test cases for given source code. However, the existing work primarily relies on human-written plain prompts, which often leads to suboptimal results since the performance of LLMs can be highly influenced by the prompts. Moreover, these approaches use the same prompt for all LLMs, overlooking the fact that different LLMs might be best suited to different prompts. Given the wide variety of possible prompt formulations, automatically discovering the optimal prompt for each LLM presents a significant challenge. Although there are methods on automated prompt optimization in the natural language processing field, they are hard to produce effective prompts for the test case generation task. First, the methods iteratively optimize prompts by simply combining and mutating existing ones without proper guidance, resulting in prompts that lack diversity and tend to repeat the same errors in the generated test cases. Second, the prompts are generally lack of domain contextual knowledge, limiting LLMs' performance in the task.
academic
L'Alchimista dei Prompt: Ottimizzazione Automatica dei Prompt Personalizzati per LLM nella Generazione di Casi di Test
I casi di test sono essenziali per verificare l'affidabilità e la qualità delle applicazioni software. Ricerche recenti hanno dimostrato che i modelli linguistici di grandi dimensioni (LLM) possiedono la capacità di generare utili casi di test per il codice sorgente fornito. Tuttavia, i lavori esistenti si basano principalmente su prompt semplici scritti manualmente, il che spesso produce risultati subottimali, poiché le prestazioni degli LLM dipendono fortemente dalla qualità del prompt. Inoltre, questi metodi utilizzano lo stesso prompt per tutti gli LLM, ignorando il fatto che diversi LLM potrebbero essere più adatti a diversi prompt. Questo articolo propone il metodo MAPS, che realizza l'ottimizzazione automatica dei prompt personalizzati per diversi LLM attraverso tre moduli principali: generazione di prompt guidata dalla diversità, induzione di regole guidata dai fallimenti ed estrazione della conoscenza contestuale del dominio.
La generazione di casi di test è un compito critico nell'ingegneria del software. Metodi tradizionali come Evosuite e Randoop si basano su tecniche di ricerca e vincoli, mentre i metodi basati su LLM, sebbene promettenti, presentano i seguenti problemi:
Dipendenza da prompt semplici scritti manualmente, causando prestazioni subottimali
Utilizzo dello stesso prompt per tutti gli LLM, ignorando le differenze tra gli LLM
Mancanza di ottimizzazione specializzata per il compito di generazione di casi di test
Gli autori hanno identificato attraverso esperimenti preliminari tre problemi principali dei metodi di ottimizzazione automatica dei prompt (APO) nel compito di generazione di casi di test:
Bassa Diversità: I prompt generati mancano di diversità e tendono a cadere in ottimi locali
Errori Ripetuti: I prompt ottimizzati producono ancora gli stessi errori del prompt originale
Mancanza di Conoscenza del Dominio: Assenza di informazioni di contesto a livello di progetto necessarie, come relazioni di ereditarietà e informazioni di chiamata di classe
Primo Studio: Secondo gli autori, questo è il primo studio dedicato all'ottimizzazione dei prompt personalizzati per LLM specificamente per il compito di generazione di casi di test
Metodo Innovativo: Propone il metodo MAPS, che integra generazione di prompt guidata dalla diversità, induzione di regole guidata dai fallimenti ed estrazione della conoscenza contestuale del dominio
Miglioramenti Significativi: Gli esperimenti su tre LLM popolari dimostrano che MAPS migliora in media del 6,19% la copertura delle righe e del 5,03% la copertura dei rami rispetto al metodo di base più forte
Personalizzazione per LLM: Dimostra l'efficacia della generazione di prompt personalizzati per diversi LLM
Dato un modello black-box M, un piccolo insieme di sviluppo D_dev, un insieme di test D_test e una funzione di punteggio s(·), l'APO mira a scoprire un prompt ottimizzato p dallo spazio del linguaggio naturale basato su D_dev, massimizzando le prestazioni di M sull'insieme di test D_test.
Questo modulo fornisce all'LLM informazioni di contesto rilevanti a livello di progetto:
Conoscenza Contestuale Intra-file:
Firma della classe: tipo e nome della classe contenente il metodo focale
Metodo focale: il metodo specifico per il quale generare casi di test
Firme dei metodi membri: firme delle funzioni di altri metodi nella classe
Conoscenza Contestuale Inter-file:
Informazioni di ereditarietà della classe: per classi astratte o private, scansione dell'intero progetto per individuare le sottoclassi
Informazioni di chiamata della classe: identificazione dei tipi di parametri del metodo focale, tracciamento della definizione e dei costruttori dei tipi definiti dall'utente
Questo modulo crea prompt diversificati esplorando diversi percorsi di modifica:
Algoritmo 2: PROMPTIMPROVEMENT
1. Selezionare i K prompt con le migliori prestazioni
2. Generare N diversi metodi di modifica
3. Generare nuovi prompt basati su ogni metodo di modifica
4. Unire i prompt selezionati e i prompt appena generati
Analisi del contributo di ogni modulo (con ChatGPT come esempio):
Rimozione dell'estrazione della conoscenza contestuale del dominio: copertura delle righe diminuisce del 9,64%, copertura dei rami diminuisce dell'8,53%
Rimozione della generazione di prompt guidata dalla diversità: copertura delle righe diminuisce dell'8,21%, copertura dei rami diminuisce del 7,80%
Rimozione dell'induzione di regole guidata dai fallimenti: copertura delle righe diminuisce del 6,94%, copertura dei rami diminuisce del 4,76%
Caso 1 - Llama-3.1: Attraverso la seconda regola indotta, il modello ha generato correttamente casi di test contenenti gestione delle eccezioni
Caso 2 - ChatGPT: Attraverso la conoscenza contestuale inter-file, il modello è stato in grado di inizializzare correttamente le classi astratte
MAPS supera significativamente i metodi di ottimizzazione dei prompt esistenti su tutti gli LLM
Diversi LLM richiedono effettivamente prompt personalizzati
Tutti e tre i moduli principali contribuiscono in modo importante al miglioramento delle prestazioni, con l'estrazione della conoscenza contestuale del dominio che fornisce il contributo maggiore
Costo Computazionale: Il processo di ottimizzazione iterativa potrebbe richiedere numerose chiamate API, con costi elevati
Qualità delle Regole: L'induzione di regole guidata dai fallimenti dipende dalla capacità di riflessione dell'LLM, la qualità delle regole potrebbe essere instabile
Estrazione del Contesto: La completezza e l'accuratezza dell'estrazione del contesto inter-file richiedono ulteriore verifica
L'articolo cita 47 lavori correlati, coprendo importanti ricerche in più domini inclusi test del software, ingegneria dei prompt e modelli linguistici di grandi dimensioni, fornendo una solida base teorica per la ricerca.
Valutazione Complessiva: Questo è un articolo di ricerca di alta qualità nel campo dell'ingegneria del software con importante valore teorico e pratico nel dominio della generazione di casi di test con LLM. Il design del metodo è razionale, la valutazione sperimentale è completa e i risultati sono convincenti. Sebbene esistano alcune limitazioni, il contributo complessivo è significativo e fornisce un importante impulso allo sviluppo di questo campo.