2025-11-21T20:19:23.757806

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

Informazioni Fondamentali

  • ID Articolo: 2501.01329
  • Titolo: The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation
  • Autori: Shuzheng Gao, Chaozheng Wang, Cuiyun Gao, Xiaoqian Jiao, Chun Yong Chong, Shan Gao, Michael R. Lyu
  • Classificazione: cs.SE cs.AI cs.CL
  • Data di Pubblicazione/Conferenza: JOURNAL OF LATEX CLASS FILES, VOL. 18, NO. 9, SEPTEMBER 2020
  • Link dell'Articolo: https://arxiv.org/abs/2501.01329

Riassunto

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.

Contesto di Ricerca e Motivazione

1. Problema Centrale

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

2. Importanza del Problema

  • La scrittura manuale di casi di test è dispendiosa in termini di tempo e difficile
  • I casi di test di alta qualità sono cruciali per l'assicurazione della qualità del software
  • Le potenti capacità degli LLM nella comprensione e generazione di codice devono essere pienamente sfruttate attraverso l'ottimizzazione dei prompt

3. Limitazioni dei Metodi Esistenti

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

Contributi Principali

  1. 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
  2. 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
  3. 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
  4. Personalizzazione per LLM: Dimostra l'efficacia della generazione di prompt personalizzati per diversi LLM

Spiegazione Dettagliata del Metodo

Definizione del Compito

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.

Architettura del Modello

MAPS contiene tre moduli principali:

1. Estrazione della Conoscenza Contestuale del Dominio (Domain Contextual Knowledge Extraction)

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

2. Generazione di Prompt Guidata dalla Diversità (Diversity-guided Prompt Generation)

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

3. Induzione di Regole Guidata dai Fallimenti (Failure-driven Rule Induction)

Questo modulo evita errori ripetuti analizzando i casi di test falliti e inducendo regole:

Selezione delle Informazioni di Fallimento:

  • Raccogliere i casi di test falliti e i messaggi di errore
  • Utilizzare l'algoritmo di clustering DBSCAN per aggregare le informazioni di fallimento
  • Eseguire il campionamento ponderato basato sulla dimensione del cluster e sulla somiglianza con i fallimenti storici

Riflessione su Errori:

  • Selezionare casi di fallimento rappresentativi per costruire prompt di riflessione
  • Chiedere all'LLM di fornire spiegazioni dettagliate e soluzioni
  • Convertire le spiegazioni e le soluzioni in regole concise

Verifica delle Regole:

  • Verificare la validità di ogni regola appena generata
  • Conservare le regole con le migliori prestazioni

Punti di Innovazione Tecnica

  1. Garanzia di Diversità: Garantire la diversità dei prompt attraverso l'uso forzato di diversi metodi di modifica, evitando ottimi locali
  2. Apprendimento dai Fallimenti: Imparare dai casi di fallimento, guidando il processo di ottimizzazione attraverso l'induzione di regole
  3. Potenziamento del Contesto: Fornire informazioni di contesto a livello di progetto, aiutando l'LLM a generare casi di test accurati
  4. Integrazione Morbida: Convertire l'output della riflessione in regole concise, evitando il calo di prestazioni causato da prompt lunghi

Configurazione Sperimentale

Dataset

Utilizza il benchmark Defects4J ampiamente adottato, contenente 5 progetti Java:

  • Apache Commons CLI (29 bug)
  • Apache Commons CSV (15 bug)
  • Google Gson (17 bug)
  • JFreeChart (26 bug)
  • Apache Commons Lang (60 bug)
  • Totale: 147 bug, 85 classi focali, 5.278 metodi focali

Metriche di Valutazione

  • Copertura delle Righe (%): Percentuale di righe di codice eseguite durante il test
  • Copertura dei Rami (%): Percentuale di rami eseguiti durante il test

Metodi di Confronto

Modelli LLM:

  • ChatGPT (gpt-3.5-turbo-0125)
  • Llama-3.1-70B-Instruct
  • Qwen2-72B-Instruct

Metodi di Base:

  • Basic: Prestazioni del miglior prompt seed
  • APE: Richiesta diretta all'LLM di generare varianti di prompt semanticamente equivalenti
  • OPRO: Generazione di nuovi prompt combinando informazioni di prestazione
  • EVOPROMPT (GA/DE): Metodo di ottimizzazione dei prompt basato su algoritmi evolutivi

Dettagli di Implementazione

  • Numero di prompt seed: 5
  • Numero di prompt generati per iterazione: 2
  • Numero massimo di iterazioni: 5
  • Insieme di sviluppo: campionamento casuale di 10 bug
  • Esperimenti ripetuti 3 volte con risultati medi riportati

Risultati Sperimentali

Risultati Principali

Prestazioni su ChatGPT:

  • Copertura delle righe: MAPS raggiunge il 53,80%, il metodo di base più forte EVOPROMPT(GA) è del 46,63%, miglioramento del 7,17%
  • Copertura dei rami: MAPS raggiunge il 41,84%, il metodo di base più forte è del 35,88%, miglioramento del 5,96%

Prestazioni su Llama-3.1:

  • Copertura delle righe: MAPS raggiunge il 50,59%, il metodo di base più forte è del 46,52%, miglioramento del 4,07%
  • Copertura dei rami: MAPS raggiunge il 39,50%, il metodo di base più forte è del 35,07%, miglioramento del 4,43%

Prestazioni su Qwen2:

  • Copertura delle righe: MAPS raggiunge il 45,51%, il metodo di base più forte è del 39,41%, miglioramento del 6,10%
  • Copertura dei rami: MAPS raggiunge il 32,71%, il metodo di base più forte è del 28,92%, miglioramento del 3,79%

Esperimenti di Ablazione

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%

Effetto della Personalizzazione per LLM

L'esperimento verifica che MAPS può generare prompt personalizzati per diversi LLM:

  • Ogni LLM mostra le migliori prestazioni sui suoi prompt ottimizzati esclusivi
  • Il prompt finale di ChatGPT su ChatGPT è superiore rispettivamente del 2,45% e del 2,66% nella copertura delle righe rispetto ai prompt di altri LLM
  • I prompt ottimizzati da MAPS sono superiori ai prompt progettati manualmente

Analisi di Casi

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

Lavori Correlati

Ottimizzazione Automatica dei Prompt

  • APE: Richiesta diretta all'LLM di generare varianti di prompt semanticamente equivalenti
  • OPRO: Combinazione di informazioni di prestazione per guidare la generazione di prompt
  • EVOPROMPT: Metodo più recente basato su algoritmi evolutivi

Generazione di Casi di Test

  • Metodi tradizionali: Randoop (fuzzing casuale), Evosuite (algoritmi di ricerca)
  • Metodi di apprendimento profondo: AthenaTest (fine-tuning BART), A3Test (potenziamento della conoscenza di asserzioni)
  • Metodi LLM: ChatUniTest, ChatTESTER, ecc.

Conclusioni e Discussione

Conclusioni Principali

  1. MAPS supera significativamente i metodi di ottimizzazione dei prompt esistenti su tutti gli LLM
  2. Diversi LLM richiedono effettivamente prompt personalizzati
  3. 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

Limitazioni

  1. Limitazioni degli LLM: Valutazione condotta solo su tre LLM rappresentativi
  2. Limitazioni Linguistiche: Gli esperimenti sono limitati a progetti Java, senza copertura di altri linguaggi di programmazione
  3. Portata del Dataset: Utilizzo solo del benchmark Defects4J

Direzioni Future

  1. Estensione a più LLM e linguaggi di programmazione
  2. Combinazione con metodi di generazione di test LLM esistenti
  3. Esplorazione di informazioni di contesto a livello di progetto più complesse

Valutazione Approfondita

Punti di Forza

  1. Definizione Chiara del Problema: Primo studio sistematico dell'ottimizzazione dei prompt per la generazione di casi di test LLM
  2. Forte Innovazione del Metodo: I tre moduli sono ben progettati e risolvono i problemi chiave dei metodi esistenti
  3. Esperimenti Completi: Valutazione completa su più LLM e progetti
  4. Alto Valore Pratico: Il metodo è generico e applicabile a diversi LLM e progetti

Insufficienze

  1. Costo Computazionale: Il processo di ottimizzazione iterativa potrebbe richiedere numerose chiamate API, con costi elevati
  2. Qualità delle Regole: L'induzione di regole guidata dai fallimenti dipende dalla capacità di riflessione dell'LLM, la qualità delle regole potrebbe essere instabile
  3. Estrazione del Contesto: La completezza e l'accuratezza dell'estrazione del contesto inter-file richiedono ulteriore verifica

Impatto

  1. Contributo Accademico: Apre una nuova direzione di ricerca nell'ottimizzazione dei prompt per la generazione di casi di test LLM
  2. Valore Pratico: Applicabile direttamente alla generazione di casi di test nello sviluppo software reale
  3. Riproducibilità: Fornisce un pacchetto di riproduzione completo, facilitando la ricerca successiva

Scenari Applicabili

  1. Progetti software che richiedono la generazione automatica di casi di test di alta qualità
  2. Team che utilizzano diversi LLM per la generazione di codice
  3. Compiti di ingegneria del software che richiedono l'ottimizzazione delle prestazioni degli LLM

Bibliografia

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.