LLMs are All You Need? Improving Fuzz Testing for MOJO with Large Language Models
Huang, Zhao, Chen
The rapid development of large language models (LLMs) has revolutionized software testing, particularly fuzz testing, by automating the generation of diverse and effective test inputs. This advancement holds great promise for improving software reliability. Meanwhile, the introduction of MOJO, a high-performance AI programming language blending Python's usability with the efficiency of C and C++, presents new opportunities to enhance AI model scalability and programmability. However, as a new language, MOJO lacks comprehensive testing frameworks and a sufficient corpus for LLM-based testing, which exacerbates model hallucination. In this case, LLMs will generate syntactically valid but semantically incorrect code, significantly reducing the effectiveness of fuzz testing. To address this challenge, we propose MOJOFuzzer, the first adaptive LLM-based fuzzing framework designed for zero-shot learning environments of emerging programming languages. MOJOFuzzer integrates a mutil-phase framework that systematically eliminates low-quality generated inputs before execution, significantly improving test case validity. Furthermore, MOJOFuzzer dynamically adapts LLM prompts based on runtime feedback for test case mutation, enabling an iterative learning process that continuously enhances fuzzing efficiency and bug detection performance. Our experimental results demonstrate that MOJOFuzzer significantly enhances test validity, API coverage, and bug detection performance, outperforming traditional fuzz testing and state-of-the-art LLM-based fuzzing approaches. Using MOJOFuzzer, we have conducted a first large-scale fuzz testing evaluation of MOJO, uncorvering 13 previous unknown bugs. This study not only advances the field of LLM-driven software testing but also establishes a foundational methodology for leveraging LLMs in the testing of emerging programming languages.
academic
Les LLM sont-ils tout ce dont vous avez besoin ? Amélioration des tests de fuzzing pour MOJO avec les grands modèles de langage
Le développement rapide des grands modèles de langage (LLM) a révolutionné les tests logiciels, en particulier les tests de fuzzing, en générant automatiquement des entrées de test diversifiées et efficaces. Parallèlement, l'introduction de MOJO, un langage de programmation haute performance pour l'IA qui fusionne la facilité d'utilisation de Python avec l'efficacité du C/C++, offre de nouvelles opportunités pour améliorer l'extensibilité et la programmabilité des modèles d'IA. Cependant, en tant que langage émergent, MOJO manque d'un cadre de test complet et de corpus d'entraînement LLM suffisant, ce qui aggrave le problème des hallucinations du modèle. Pour relever ce défi, cet article propose MOJOFuzzer, le premier cadre de fuzzing LLM adaptatif conçu pour l'apprentissage sans exemple dans les langages de programmation émergents. Les résultats expérimentaux montrent que MOJOFuzzer surpasse considérablement les tests de fuzzing traditionnels et les méthodes de fuzzing basées sur les LLM de pointe en termes d'efficacité des tests, de couverture des API et de performance de détection des erreurs, découvrant avec succès 13 erreurs inconnues dans MOJO.
Le problème fondamental que cette recherche vise à résoudre est le défi des tests de fuzzing pour les langages de programmation émergents, en particulier comment effectuer des tests efficaces dans un environnement d'apprentissage sans exemple où les données d'entraînement sont insuffisantes.
Besoins du développement de l'IA : Avec l'application généralisée de l'IA dans les domaines critiques tels que la conduite autonome, le diagnostic médical et les services financiers, des langages de programmation efficaces sont nécessaires
Potentiel du langage MOJO : MOJO peut réaliser une amélioration de performance 68 000 fois plus rapide que Python, ce qui en fait un outil important pour le développement de l'IA
Absence de cadre de test : En tant que langage émergent, MOJO manque d'un cadre de test mature, avec des erreurs logicielles et des vulnérabilités de sécurité non découvertes
Les testeurs de fuzzing LLM traditionnels dépendent de grandes quantités de données d'entraînement spécifiques au domaine, ce qui limite leur application aux langages émergents
Problème des hallucinations du modèle : Dans un environnement sans exemple, les LLM génèrent facilement du code syntaxiquement correct mais sémantiquement erroné
Manque de spécificité : Les outils existants n'ont pas été optimisés spécifiquement pour les caractéristiques du langage MOJO
Développer le premier cadre de fuzzing LLM spécialement conçu pour le langage MOJO, en utilisant des techniques innovantes d'ingénierie des invites et d'ajustement fin, pour réaliser une détection d'erreurs efficace dans un environnement d'apprentissage sans exemple.
Premier cadre de fuzzing LLM sans exemple : MOJOFuzzer est le premier cadre de fuzzing basé sur LLM conçu pour un environnement d'apprentissage sans exemple, atténuant efficacement le problème des hallucinations des LLM
Mécanisme de contrôle de qualité multi-étapes : Intègre un mécanisme systématique de filtrage des entrées de faible qualité, améliorant considérablement la validité des cas de test
Stratégie de mutation adaptative : Ajuste dynamiquement les invites LLM en fonction des retours d'exécution, réalisant un processus d'apprentissage itératif
Découverte d'erreurs pratiques : Découverte avec succès de 13 erreurs inconnues dans MOJO, dont 9 ont été confirmées et corrigées par l'équipe officielle
Amélioration significative des performances : Surpasse considérablement les méthodes existantes en termes de validité des tests (98%), de couverture des API (77,3%) et de capacité de détection des erreurs
Entrée : Environnement du langage de programmation MOJO et règles syntaxiques limitées, rapports d'erreurs historiques
Sortie : Cas de test valides capables de déclencher des erreurs dans MOJO
Contraintes : Environnement d'apprentissage sans exemple, sans données d'entraînement spécifiques à MOJO en grande quantité
C_complexity : Score de complexité du code (basé sur la complexité temporelle O(1) à O(n³) avec des scores différents attribués)
Stratégie d'ingénierie des invites :
Utilise les techniques de chaîne de pensée (CoT) et d'invite basée sur les rôles, comprenant 5 composants principaux :
Rôle critique de l'ajustement fin : L'ajustement fin est le facteur unique le plus efficace pour réduire les problèmes d'hallucination
Effet synergique des composants : Les trois composants combinés produisent les meilleurs résultats
Faisabilité de l'apprentissage sans exemple : Démontre la possibilité d'effectuer des tests efficaces en l'absence de grandes quantités de données d'entraînement
L'article cite 58 références connexes, couvrant des travaux importants dans plusieurs domaines tels que les LLM, le fuzzing et l'ingénierie logicielle, fournissant une base théorique solide pour la recherche.
Évaluation globale : Cet article est une recherche de haute qualité en génie logiciel qui propose une solution innovante à un problème pratique, avec une conception expérimentale rigoureuse et des résultats convaincants. Ce travail non seulement fait une percée technologique, mais plus important encore, fournit une méthodologie viable pour les tests de technologies émergentes, ayant une valeur académique et pratique importante.