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'Alchimiste des Invites : Optimisation Automatisée des Invites Adaptées aux LLM pour la Génération de Cas de Test
Les cas de test sont essentiels pour vérifier la fiabilité et la qualité des applications logicielles. Des recherches récentes ont démontré que les grands modèles de langage (LLM) possèdent la capacité de générer des cas de test utiles pour un code source donné. Cependant, les travaux existants s'appuient principalement sur des invites simples rédigées manuellement, ce qui entraîne souvent des résultats sous-optimaux, car la performance des LLM dépend fortement de la qualité de l'invite. De plus, ces méthodes utilisent la même invite pour tous les LLM, ignorant le fait que différents LLM pourraient être mieux adaptés à différentes invites. Cet article propose la méthode MAPS, qui réalise l'optimisation automatisée des invites pour différents LLM par le biais de trois modules principaux : la génération d'invites guidée par la diversité, l'induction de règles pilotée par les défaillances et l'extraction de connaissances contextuelles du domaine.
La génération de cas de test est une tâche clé en génie logiciel. Les méthodes traditionnelles telles qu'Evosuite et Randoop reposent sur des techniques de recherche et de contrainte, tandis que les méthodes basées sur les LLM, bien qu'elles montrent du potentiel, présentent les problèmes suivants :
Dépendance envers des invites simples rédigées manuellement, entraînant une performance sous-optimale
Utilisation de la même invite pour tous les LLM, ignorant les différences entre les LLM
Absence d'optimisation spécialisée pour la tâche de génération de cas de test
Par le biais d'expériences préliminaires, les auteurs ont identifié trois problèmes majeurs des méthodes d'optimisation automatisée des invites (APO) existantes sur la tâche de génération de cas de test :
Faible diversité: Les invites générées manquent de diversité et sont facilement piégées dans des optima locaux
Erreurs répétées: Les invites optimisées produisent toujours les mêmes erreurs que les invites originales
Absence de connaissances du domaine: Manque d'informations contextuelles au niveau du projet, telles que les relations d'héritage et les informations d'appel de classe
Première étude: À la connaissance des auteurs, c'est la première étude spécialisée sur l'optimisation des invites adaptées aux LLM pour la tâche de génération de cas de test
Méthode innovante: Proposition de la méthode MAPS, intégrant la génération d'invites guidée par la diversité, l'induction de règles pilotée par les défaillances et l'extraction de connaissances contextuelles du domaine
Améliorations significatives: Les expériences sur trois LLM populaires montrent que MAPS améliore en moyenne la couverture des lignes de 6,19% et la couverture des branches de 5,03% par rapport à la méthode de base la plus forte
Adaptation aux LLM: Démonstration de l'efficacité de la génération d'invites personnalisées pour différents LLM
Étant donné un modèle de boîte noire M, un petit ensemble de développement D_dev, un ensemble de test D_test et une fonction de notation s(·), l'APO vise à découvrir une invite optimisée p à partir de l'espace du langage naturel basée sur D_dev, de sorte que la performance de M sur l'ensemble de test D_test soit maximisée.
Ce module fournit au LLM des informations contextuelles pertinentes au niveau du projet :
Connaissances contextuelles intra-fichier:
Signature de classe : type et nom de la classe contenant la méthode focale
Méthode focale : la méthode spécifique pour laquelle générer des cas de test
Signatures de méthodes membres : signatures de fonction d'autres méthodes dans la classe
Connaissances contextuelles inter-fichiers:
Informations d'héritage de classe : pour les classes abstraites ou privées, analyse du projet entier pour localiser ses sous-classes
Informations d'appel de classe : identification des types de paramètres de la méthode focale, suivi de la définition et des constructeurs des types définis par l'utilisateur
Ce module crée des invites diversifiées en explorant différents chemins de modification :
Algorithme 2 : PROMPTIMPROVEMENT
1. Sélectionner les K invites avec les meilleures performances
2. Générer N méthodes de modification différentes
3. Générer de nouvelles invites basées sur chaque méthode de modification
4. Fusionner les invites sélectionnées et les invites nouvellement générées
Garantie de diversité: Assurance de la diversité des invites en forçant l'utilisation de différentes méthodes de modification, évitant les optima locaux
Apprentissage à partir des défaillances: Apprentissage à partir des cas de défaillance, guidage du processus d'optimisation par l'induction de règles
Amélioration contextuelle: Fourniture d'informations contextuelles au niveau du projet, aidant le LLM à générer des cas de test précis
Intégration souple: Conversion des résultats de réflexion en règles concises, évitant la dégradation de performance causée par les invites trop longues
Analyse de la contribution de chaque module (avec ChatGPT comme exemple) :
Suppression de l'extraction de connaissances contextuelles du domaine : couverture des lignes diminue de 9,64%, couverture des branches diminue de 8,53%
Suppression de la génération d'invites guidée par la diversité : couverture des lignes diminue de 8,21%, couverture des branches diminue de 7,80%
Suppression de l'induction de règles pilotée par les défaillances : couverture des lignes diminue de 6,94%, couverture des branches diminue de 4,76%
Cas 1 - Llama-3.1: Grâce à la deuxième règle induite, le modèle génère correctement des cas de test incluant la gestion des exceptions
Cas 2 - ChatGPT: Grâce aux connaissances contextuelles inter-fichiers, le modèle peut correctement initialiser les classes abstraites
MAPS surpasse significativement les méthodes d'optimisation d'invites existantes sur tous les LLM
Différents LLM nécessitent effectivement des invites personnalisées
Les trois modules principaux contribuent tous de manière importante à l'amélioration de performance, l'extraction de connaissances contextuelles du domaine contribuant le plus
Coût de calcul: Le processus d'optimisation itérative peut nécessiter de nombreux appels API, avec un coût élevé
Qualité des règles: L'induction de règles pilotée par les défaillances dépend de la capacité de réflexion du LLM, la qualité des règles peut être instable
Extraction contextuelle: L'exhaustivité et la précision de l'extraction de contexte inter-fichiers nécessitent une vérification supplémentaire
L'article cite 47 références connexes, couvrant plusieurs domaines importants tels que les tests logiciels, l'ingénierie des invites et les grands modèles de langage, fournissant une base théorique solide pour la recherche.
Évaluation Globale: Cet article est un travail de recherche en génie logiciel de haute qualité, possédant une valeur théorique et pratique importante dans le domaine de la génération de cas de test LLM. La conception de la méthode est raisonnable, l'évaluation expérimentale est complète et les résultats sont convaincants. Bien qu'il existe certaines limitations, la contribution globale est significative et fournit une impulsion importante pour le développement de ce domaine.