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
El Alquimista de Indicaciones: Optimización Automatizada de Indicaciones Adaptadas a LLM para la Generación de Casos de Prueba
Los casos de prueba son esenciales para verificar la confiabilidad y calidad de las aplicaciones de software. Investigaciones recientes demuestran que los Modelos de Lenguaje Grande (LLMs) poseen la capacidad de generar casos de prueba útiles para código fuente dado. Sin embargo, los trabajos existentes se basan principalmente en indicaciones simples escritas manualmente, lo que a menudo produce resultados subóptimos, ya que el rendimiento de los LLMs depende altamente de la calidad de la indicación. Además, estos métodos utilizan la misma indicación para todos los LLMs, ignorando el hecho de que diferentes LLMs pueden ser más adecuados para diferentes indicaciones. Este artículo propone el método MAPS, que logra la optimización automatizada de indicaciones para diferentes LLMs a través de tres módulos principales: generación de indicaciones guiada por diversidad, inducción de reglas impulsada por fallos y extracción de conocimiento contextual del dominio.
La generación de casos de prueba es una tarea crítica en la ingeniería de software. Los métodos tradicionales como Evosuite y Randoop dependen de técnicas de búsqueda y restricción, mientras que los métodos basados en LLM, aunque muestran potencial, presentan los siguientes problemas:
Dependencia de indicaciones simples escritas manualmente, resultando en rendimiento subóptimo
Uso de la misma indicación para todos los LLMs, ignorando las diferencias entre ellos
Falta de optimización especializada para la tarea de generación de casos de prueba
Los autores descubrieron a través de experimentos preliminares tres problemas principales con los métodos existentes de Optimización Automatizada de Indicaciones (APO) en la tarea de generación de casos de prueba:
Baja Diversidad: Las indicaciones generadas carecen de diversidad, tendiendo a caer en óptimos locales
Errores Repetitivos: Las indicaciones optimizadas aún producen los mismos errores que las indicaciones originales
Falta de Conocimiento del Dominio: Ausencia de información contextual necesaria a nivel de proyecto, como relaciones de herencia e información de llamadas de clase
Primer Estudio: Según el conocimiento de los autores, este es el primer estudio especializado en optimización de indicaciones adaptadas a LLM para la tarea de generación de casos de prueba
Método Innovador: Se propone el método MAPS, que integra generación de indicaciones guiada por diversidad, inducción de reglas impulsada por fallos y extracción de conocimiento contextual del dominio
Mejora Significativa: Los experimentos en tres LLMs populares demuestran que MAPS mejora en promedio 6.19% la cobertura de líneas y 5.03% la cobertura de ramas en comparación con el método base más fuerte
Adaptación a LLM: Se demuestra la efectividad de generar indicaciones personalizadas para diferentes LLMs
Dado un modelo de caja negra M, un pequeño conjunto de desarrollo Ddev, un conjunto de prueba Dtest y una función de puntuación s(·), el APO tiene como objetivo descubrir una indicación optimizada p del espacio del lenguaje natural basada en Ddev, maximizando el rendimiento de M en el conjunto de prueba Dtest.
Este módulo proporciona al LLM información contextual relevante a nivel de proyecto:
Conocimiento Contextual Dentro del Archivo:
Firma de clase: Tipo y nombre de la clase que contiene el método focal
Método focal: El método específico para el cual se necesitan generar casos de prueba
Firmas de métodos miembros: Firmas de función de otros métodos dentro de la clase
Conocimiento Contextual Entre Archivos:
Información de herencia de clase: Para clases abstractas o privadas, escanea todo el proyecto para localizar sus subclases
Información de llamadas de clase: Identifica tipos de parámetros del método focal, rastreando definiciones de tipos definidos por el usuario y constructores
Este módulo crea indicaciones diversificadas explorando diferentes rutas de modificación:
Algoritmo 2: MEJORA DE INDICACIONES
1. Seleccionar los K mejores indicaciones por rendimiento
2. Generar N métodos de modificación diferentes
3. Generar nuevas indicaciones basadas en cada método de modificación
4. Combinar indicaciones seleccionadas e indicaciones recién generadas
Caso 1 - Llama-3.1: A través de la segunda regla inducida, el modelo generó correctamente casos de prueba que incluyen manejo de excepciones
Caso 2 - ChatGPT: A través del conocimiento contextual entre archivos, el modelo pudo inicializar correctamente clases abstractas
MAPS supera significativamente los métodos existentes de optimización de indicaciones en todos los LLMs
Diferentes LLMs realmente requieren indicaciones personalizadas
Los tres módulos principales contribuyen significativamente a la mejora de rendimiento, siendo la extracción de conocimiento contextual del dominio la que más contribuye
Costo Computacional: El proceso de optimización iterativa puede requerir numerosas llamadas a API, con costos relativamente altos
Calidad de Reglas: La inducción de reglas impulsada por fallos depende de la capacidad de reflexión del LLM, la calidad de las reglas puede ser inestable
Extracción de Contexto: La completitud y precisión de la extracción de contexto entre archivos requieren verificación adicional
El artículo cita 48 referencias relacionadas, cubriendo trabajos importantes en múltiples campos incluyendo pruebas de software, ingeniería de indicaciones y modelos de lenguaje grande, proporcionando una base teórica sólida para la investigación.
Evaluación General: Este es un artículo de investigación de alta calidad en ingeniería de software con importante valor teórico y práctico en el campo de la generación de casos de prueba con LLM. El diseño del método es razonable, la evaluación experimental es exhaustiva y los resultados son convincentes. Aunque existen algunas limitaciones, la contribución general es significativa, proporcionando un impulso importante para el desarrollo de este campo.