2025-11-12T23:04:10.380766

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

¿Son los LLMs Todo lo que Necesitas? Mejorando las Pruebas de Fuzzing para MOJO con Modelos de Lenguaje Grande

Información Básica

  • ID del Artículo: 2510.10179
  • Título: LLMs are All You Need? Improving Fuzz Testing for MOJO with Large Language Models
  • Autores: Linghan Huang, Peizhou Zhao, Huaming Chen (Universidad de Sydney)
  • Clasificación: cs.SE (Ingeniería de Software), cs.AI (Inteligencia Artificial)
  • Fecha de Publicación: 11 de octubre de 2025 (preimpresión en arXiv)
  • Enlace del Artículo: https://arxiv.org/abs/2510.10179

Resumen

El rápido desarrollo de los modelos de lenguaje grande (LLMs) ha revolucionado las pruebas de software, particularmente las pruebas de fuzzing, mediante la generación automática de entradas de prueba diversas y efectivas. Simultáneamente, la introducción de MOJO como un lenguaje de programación de alto rendimiento para IA que fusiona la facilidad de uso de Python con la eficiencia de C/C++ ofrece nuevas oportunidades para mejorar la escalabilidad y programabilidad de los modelos de IA. Sin embargo, como lenguaje emergente, MOJO carece de un marco de pruebas integral y de corpus de entrenamiento suficiente para LLMs, lo que exacerba el problema de alucinaciones del modelo. Para abordar este desafío, este artículo propone MOJOFuzzer, el primer marco adaptativo de fuzzing impulsado por LLM diseñado específicamente para entornos de aprendizaje de cero ejemplos en lenguajes de programación emergentes. Los resultados experimentales demuestran que MOJOFuzzer supera significativamente las pruebas de fuzzing tradicionales y los métodos de fuzzing basados en LLM de última generación en términos de efectividad de pruebas, cobertura de API y rendimiento de detección de errores, descubriendo exitosamente 13 errores desconocidos en MOJO.

Contexto de Investigación y Motivación

Problema Central

El problema central que aborda esta investigación es el desafío de las pruebas de fuzzing para lenguajes de programación emergentes, particularmente cómo realizar pruebas efectivas en entornos de aprendizaje de cero ejemplos donde hay datos de entrenamiento insuficientes.

Importancia del Problema

  1. Necesidades del Desarrollo de IA: Con la aplicación generalizada de la IA en campos críticos como conducción autónoma, diagnóstico médico y servicios financieros, se requieren lenguajes de programación eficientes
  2. Potencial del Lenguaje MOJO: MOJO puede lograr mejoras de rendimiento 68,000 veces más rápido que Python, siendo una herramienta importante para el desarrollo de IA
  3. Ausencia de Marco de Pruebas: Como lenguaje emergente, MOJO carece de un marco de pruebas maduro, con errores de software y vulnerabilidades de seguridad sin descubrir

Limitaciones de Métodos Existentes

  1. Probadores de Fuzzing LLM Tradicionales: dependen de grandes cantidades de datos de entrenamiento específicos del dominio, limitando su aplicación en lenguajes emergentes
  2. Problema de Alucinaciones del Modelo: en entornos de cero ejemplos, los LLMs tienden a generar código sintácticamente correcto pero semánticamente erróneo
  3. Falta de Especificidad: las herramientas existentes no están optimizadas específicamente para las características del lenguaje MOJO

Motivación de la Investigación

Desarrollar el primer marco de fuzzing impulsado por LLM diseñado específicamente para el lenguaje MOJO, implementando técnicas innovadoras de ingeniería de prompts y ajuste fino para lograr una detección de errores efectiva en entornos de aprendizaje de cero ejemplos.

Contribuciones Principales

  1. Marco de Fuzzing LLM de Cero Ejemplos Pionero: MOJOFuzzer es el primer marco de fuzzing impulsado por LLM diseñado para entornos de aprendizaje de cero ejemplos, mitigando efectivamente el problema de alucinaciones de LLM
  2. Mecanismo de Control de Calidad Multietapa: integra un mecanismo sistemático de filtrado de entradas de baja calidad, mejorando significativamente la validez de los casos de prueba
  3. Estrategia de Mutación Adaptativa: ajusta dinámicamente los prompts de LLM basándose en retroalimentación en tiempo de ejecución, implementando un proceso de aprendizaje iterativo
  4. Descubrimiento de Errores Prácticos: descubre exitosamente 13 errores desconocidos en MOJO, de los cuales 9 han sido confirmados y corregidos por el equipo oficial
  5. Mejora de Rendimiento Significativa: supera significativamente los métodos existentes en validez de pruebas (98%), cobertura de API (77.3%) y capacidad de detección de errores

Explicación Detallada del Método

Definición de la Tarea

Entrada: Entorno del lenguaje de programación MOJO y reglas sintácticas limitadas, reportes de errores históricos Salida: Casos de prueba válidos capaces de desencadenar errores en MOJO Restricciones: Entorno de aprendizaje de cero ejemplos, sin datos de entrenamiento específicos de MOJO en abundancia

Arquitectura del Modelo

Marco General

MOJOFuzzer adopta una arquitectura multietapa que incluye los siguientes componentes principales:

  1. Fase de Preparación de Datos
    • Recopilación de aproximadamente 300 reportes de errores y 1,500 muestras sintácticas de GitHub y documentación oficial
    • Limpieza de datos y procesamiento de estandarización
  2. Fase de Inicialización
    • Banco de Prompts: almacena plantillas de prompts estructurados
    • Banco de Semillas: gestiona la generación y almacenamiento de semillas de prueba
  3. Estrategias de Mutación
    • Mecanismo de Puntuación de Mutación: calcula puntuaciones basadas en la cantidad de llamadas a API y complejidad del código
    • Mutación Parcial: mutación a nivel de código dirigida a semillas de puntuación alta
    • Mutación Completa: mutación a nivel de prompt dirigida a semillas de puntuación baja

Detalles Técnicos Clave

Fórmula de Puntuación de Mutación:

S_mutation = N_API + C_complexity

Donde:

  • N_API: número de llamadas a API
  • C_complexity: puntuación de complejidad del código (asignando diferentes puntuaciones basadas en complejidad temporal O(1) a O(n³))

Estrategia de Ingeniería de Prompts: Utiliza técnicas de Cadena de Pensamiento (CoT) y prompts basados en roles, incluyendo 5 componentes principales:

  1. Instrucciones de análisis sintáctico
  2. Marco basado en roles
  3. Filtrado automático de datos
  4. Resumen de contenido
  5. Generación de semillas de prompts

Estrategia de Ajuste Fino

Utiliza el modelo LLAMA2 13B para ajuste fino en dos etapas:

  1. Primera Etapa: aprender la estructura del lenguaje basándose en el conjunto de datos de sintaxis MOJO
  2. Segunda Etapa: aprender patrones de defectos basándose en registros de errores históricos

Puntos de Innovación Técnica

  1. Adaptabilidad de Cero Ejemplos: primera implementación exitosa de fuzzing LLM efectivo sin grandes cantidades de datos de entrenamiento
  2. Mecanismo de Mutación Dual: combina mutación a nivel de código y a nivel de prompt, mejorando la diversidad de pruebas
  3. Sistema de Puntuación Adaptativa: evalúa dinámicamente la calidad de las semillas, optimizando la asignación de recursos
  4. Control de Calidad Multietapa: filtra sistemáticamente entradas de baja calidad, reduciendo problemas de alucinaciones

Configuración Experimental

Conjunto de Datos

  • Datos Sintácticos de MOJO: aproximadamente 1,500 reglas sintácticas y ejemplos de código
  • Reportes de Errores Históricos: aproximadamente 300 registros de errores de GitHub
  • Entorno de Prueba: compilador y entorno de ejecución de MOJO

Métricas de Evaluación

  1. Número de Programas Válidos Únicos: proporción de programas de prueba sintáctica y semánticamente correctos
  2. Eficiencia de Mutación: mejoras en diversidad de pruebas, validez y capacidad de detección de errores
  3. Cobertura de API: número de funciones API únicas de MOJO invocadas durante las pruebas
  4. Número de Errores Detectados: cantidad de defectos de software distintos descubiertos

Métodos de Comparación

  • Método Tradicional: MojoCoder
  • Probadores de Fuzzing LLM: Fuzz4All, TitanFuzz
  • LLMs Generales: GPT-4o, LLAMA3-8B, LLAMA2-7B

Detalles de Implementación

  • Plataforma de Hardware: NVIDIA A6000 Ada
  • Técnica de Ajuste Fino: LoRA (Adaptación de Bajo Rango)
  • Número Máximo de Iteraciones: 10 rondas
  • Umbral de Mutación: puntuación 50 como punto de división entre mutación parcial/completa

Resultados Experimentales

Resultados Principales

Comparación de Cobertura de API

ModeloCobertura de API
MOJOFuzzer77.3%
MojoCoder Ajustado Finamente68.2%
Fuzz4All37.8%
TitanFuzz17.2%
GPT-4o25.6%

Tasa de Generación de Programas Válidos

ModeloTasa de Programas Válidos
MOJOFuzzer98%
Mojo-Coder-it 7B66.4%
GPT-4o~25%
LLaMA3-8B~10%
LLaMA2-7B~10%

Capacidad de Detección de Errores

  • Errores Totales Descubiertos: 13 errores desconocidos
  • Errores Confirmados y Corregidos: 9 errores confirmados y corregidos por el equipo de MOJO
  • Tipos de Errores: incluyen defectos en generadores de números aleatorios, problemas de integración de bibliotecas de Python, etc.

Estudios de Ablación

La investigación de ablación evaluó la contribución de tres componentes clave:

Configuración de ComponentesTasa de AlucinaciónTasa de Código VálidoCorrección Semántica
Línea Base40%60%50%
Solo Ingeniería de Prompts (PE)28%75%65%
Solo Ajuste Fino (FT)15%88%78%
Solo Mutación Parcial (HM)35%68%55%
PE + FT8%95%88%
PE + FT + HM (Completo)5%98%90%

Análisis de Casos

Ejemplos de Errores Clave Descubiertos:

  1. Error en Generador de Números Aleatorios:
    • Las funciones random_si64, random_float64, random_ui64 siempre devuelven valores fijos
    • Afecta la corrección de la generación de números aleatorios
  2. Error en Integración de Biblioteca de Python:
    • Falla en la obtención de módulos al llamar funciones de numpy
    • Indica errores lógicos subyacentes en la integración de MOJO con bibliotecas de Python

Hallazgos Experimentales

  1. Papel Crítico del Ajuste Fino: el ajuste fino es el factor único más efectivo para reducir problemas de alucinaciones
  2. Efecto Sinérgico de Componentes: los tres componentes combinados producen los mejores resultados
  3. Viabilidad del Aprendizaje de Cero Ejemplos: demuestra la posibilidad de realizar pruebas efectivas sin grandes cantidades de datos de entrenamiento

Trabajo Relacionado

Desarrollo del Fuzzing Basado en LLM

  1. Probadores de Fuzzing Basados en LLM: TitanFuzz, ChatAFL, Fuzz4All, etc., utilizan LLMs para mejorar la generación de semillas y mutación
  2. Probadores de Fuzzing Ajustados Finamente: FuzzGPT y otros mejoran la efectividad mediante ajuste fino con datos específicos del dominio
  3. Fuzzing Tradicional: herramientas como OSS-Fuzz y sus limitaciones en lenguajes emergentes

Ventajas de Este Artículo

En comparación con trabajos existentes, las principales ventajas de MOJOFuzzer son:

  1. Capacidad de Cero Ejemplos: sin necesidad de grandes cantidades de datos preentrenados
  2. Mutación Dual: mutación simultánea en niveles de código y prompts
  3. Mecanismo Adaptativo: ajuste dinámico de estrategias basado en retroalimentación en tiempo de ejecución

Conclusiones y Discusión

Conclusiones Principales

  1. MOJOFuzzer aborda exitosamente los desafíos de las pruebas de fuzzing para lenguajes de programación emergentes
  2. El fuzzing LLM de cero ejemplos es viable en aplicaciones prácticas
  3. El método que combina ajuste fino, ingeniería de prompts y mutación adaptativa supera significativamente las técnicas individuales

Limitaciones

  1. Amenaza de Validez Temporal: a medida que los LLMs avanzados integren gradualmente conocimiento de MOJO, la ventaja de cero ejemplos puede disminuir
  2. Dependencia de Datos: aún requiere una cantidad mínima de reglas sintácticas y reportes de errores
  3. Requisitos de Recursos Computacionales: el ajuste fino y los procesos de inferencia requieren recursos computacionales significativos

Direcciones Futuras

  1. Pruebas Completamente Automatizadas: avanzar hacia fuzzing completamente automatizado
  2. Más Lenguajes Emergentes: extender el método a otros lenguajes de programación emergentes
  3. Optimización de Conjuntos de Datos Preentrenados: investigar cómo utilizar mejor datos de entrenamiento limitados

Evaluación Profunda

Fortalezas

  1. Innovación Fuerte: primer marco de fuzzing LLM de cero ejemplos para lenguajes emergentes
  2. Alto Valor Práctico: descubre exitosamente 13 errores reales, demostrando la efectividad del método
  3. Solución Técnica Completa: pipeline completo desde recopilación de datos hasta detección de errores
  4. Experimentación Exhaustiva: incluye experimentos comparativos completos e investigación de ablación
  5. Escritura Clara: descripción precisa de detalles técnicos y diseño experimental razonable

Insuficiencias

  1. Alcance de Evaluación Limitado: enfocado principalmente en el lenguaje MOJO, con capacidad de generalización por verificar
  2. Comparación de Líneas Base: algunos métodos de comparación pueden no ser opciones óptimas
  3. Validez a Largo Plazo: la ventaja del método puede disminuir a medida que el ecosistema de MOJO madure
  4. Análisis de Costo Computacional: falta análisis detallado del consumo de recursos computacionales

Impacto

  1. Contribución Académica: proporciona una base metodológica importante para pruebas de lenguajes emergentes
  2. Valor Práctico: ayuda directamente a mejorar el lenguaje MOJO, con impacto inmediato
  3. Reproducibilidad: los autores se comprometen a liberar código y datos, facilitando investigaciones posteriores
  4. Impulso del Campo: puede catalizar más métodos de prueba de IA para tecnologías emergentes

Escenarios Aplicables

  1. Lenguajes de Programación Emergentes: lenguajes que carecen de marcos de pruebas maduros
  2. Entornos de Pruebas de Cero Ejemplos: escenarios donde los datos de entrenamiento son escasos
  3. Pruebas de Sistemas de IA: entornos de desarrollo de IA que requieren herramientas de prueba eficientes
  4. Sistemas Críticos para la Seguridad: aplicaciones críticas que requieren descubrir errores potenciales

Referencias

El artículo cita 58 referencias relacionadas, abarcando trabajos importantes en múltiples campos incluyendo LLMs, fuzzing y ingeniería de software, 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 que propone una solución innovadora a un problema práctico, con diseño experimental riguroso y resultados convincentes. Este trabajo no solo representa un avance técnico, sino que es más importante aún que proporciona una metodología viable para pruebas de tecnologías emergentes, con valor académico y práctico significativo.