Un nuevo método para conjuntos de datos de bugs completos
Presentando un método para crear conjuntos de datos de bugs precisos y diversos para mejorar el software.
― 7 minilectura
Tabla de contenidos
- Enfoque de Recolección de Bugs
- Rastreador de Bugs
- Inyectador de Bugs
- Beneficios del Nuevo Dataset
- Desafíos en los Datasets de Bugs Existentes
- Cómo Funciona el Nuevo Método
- Importancia de la Diversidad en Lenguajes de Programación
- Contribución a Tareas de Mantenimiento de Software
- Comparación con Otros Datasets de Bugs
- Conclusión
- Fuente original
- Enlaces de referencia
Los datasets de bugs son esenciales para mejorar el desarrollo de software y solucionar problemas relacionados con bugs. Hay dos problemas principales con los datasets de bugs actuales: o son pequeños y precisos o grandes pero poco precisos. Los datasets pequeños suelen contener bugs cuidadosamente revisados, mientras que los más grandes normalmente dependen de un procesamiento de texto simple, lo que puede llevar a errores. Este artículo presenta un nuevo método para recopilar un dataset de bugs preciso y completo que funcione en diferentes lenguajes de programación.
Enfoque de Recolección de Bugs
El nuevo método combina dos estrategias principales: un rastreador de bugs y un inyectador de bugs. El rastreador de bugs conecta los repositorios de código de software con repositorios de bugs externos. Esto ayuda a encontrar información detallada sobre los bugs. El inyectador de bugs crea bugs específicos al hacer cambios en el código correcto y luego ejecutar pruebas para ver si fallan.
Rastreador de Bugs
La primera parte del método es el rastreador de bugs. Recopila datos reales de bugs de varias fuentes. Para hacerlo, vincula proyectos de software en plataformas como GitHub con repositorios de bugs externos como la Base de Datos Nacional de Vulnerabilidades (NVD) y OSS-Fuzz. La NVD lista vulnerabilidades en muchos productos de software. OSS-Fuzz ayuda a identificar bugs a través de pruebas.
Con el rastreador de bugs, los investigadores pueden descubrir qué tipo de bugs hay y recopilar información sobre cómo se corrigieron. Este proceso proporciona Metadatos valiosos, como el tipo de bug y la gravedad del problema.
Inyectador de Bugs
La segunda parte del método es el inyectador de bugs. Esta herramienta genera bugs específicos para un proyecto. Para empezar, el inyectador utiliza código que ha sido verificado para funcionar correctamente y introduce cambios, o "ruido," en él, haciendo que falle las pruebas.
La ventaja del inyectador de bugs es que crea bugs únicos que son específicos de un proyecto. Esto significa que los bugs reflejan el estilo y las prácticas de codificación particulares de ese proyecto, lo que los hace más relevantes para probar y arreglar en un entorno real.
Beneficios del Nuevo Dataset
El nuevo dataset de bugs creado a partir de este método contiene una gran cantidad de bugs, recolectados de múltiples lenguajes de programación y diversos proyectos de software. Incluye tanto bugs recopilados de fuentes del mundo real como aquellos generados artificialmente.
En total, el dataset tiene más de un millón de bugs, lo que lo convierte en el más grande de su tipo. Esta extensa colección proporciona una rica fuente de información para ayudar con varias tareas de mantenimiento de software, como la detección de bugs, la Localización de fallos y la manera de reparar programas.
Desafíos en los Datasets de Bugs Existentes
Los datasets de bugs actuales enfrentan varios problemas:
- Calidad de Datos y Escalabilidad: Recopilar bugs manualmente asegura calidad pero no es práctico para datasets grandes. Por otro lado, los métodos automatizados pueden reunir grandes cantidades de datos pero a menudo se pierden detalles importantes.
- Diversidad de Lenguajes: La mayoría de los datasets se enfocan en un solo lenguaje de programación, limitando su aplicabilidad en diferentes proyectos.
- Falta de Metadatos: Muchos datasets no proporcionan suficiente información sobre cada bug, lo que dificulta analizarlos efectivamente.
- Falta de Pruebas: Muy pocos datasets vienen con casos de prueba que permiten verificar las correcciones de bugs. Los casos de prueba son cruciales para confirmar que los bugs han sido tratados adecuadamente.
Al abordar estos desafíos, el nuevo dataset ofrece una herramienta más completa para investigadores y desarrolladores que trabajan en mantenimiento de software.
Cómo Funciona el Nuevo Método
Proceso de Recolección de Datos
El proceso de recolección de datos involucra dos componentes principales: el rastreador de bugs y el inyectador de bugs.
El rastreador de bugs conecta el código existente con bugs conocidos de fuentes externas. Primero identifica los informes de bugs relevantes de la NVD y OSS-Fuzz, luego usa estos informes para reunir cambios de código que coincidan de GitHub. Esto ayuda a los investigadores a ver cómo se corrigió cada bug al examinar el código fuente.
El inyectador de bugs comienza con código verificado y introduce deliberadamente fallos basados en ciertas reglas. Este proceso permite al inyectador crear diferentes tipos de bugs. Después de que se genera el código ruidoso, se prueba contra su suite de pruebas original para verificar problemas. Si alguna prueba falla, esto proporciona la información necesaria para caracterizar el nuevo bug introducido.
Recolección de Metadatos
Al combinar datos tanto del rastreador de bugs como del inyectador de bugs, el nuevo método captura no solo el bug en sí, sino también metadatos importantes. Esto incluye el código original antes de que se introdujera el bug, el código corregido después de que se trató el bug, detalles sobre el tipo de bug y información sobre los casos de prueba que pueden reproducir los problemas.
Estos datos completos permiten un mejor análisis y comprensión de los bugs, contribuyendo a soluciones más efectivas en el mantenimiento de software.
Importancia de la Diversidad en Lenguajes de Programación
La mayoría de los datasets de bugs existentes se enfocan en un solo lenguaje de programación, lo que limita su usabilidad. Sin embargo, el nuevo dataset incluye bugs de múltiples lenguajes de programación, permitiendo aplicaciones más amplias en diferentes entornos de codificación. Esto es crucial ya que diferentes lenguajes tienen diferentes características y bugs típicos.
Contribución a Tareas de Mantenimiento de Software
El dataset proporciona beneficios significativos para tareas de mantenimiento de software como:
- Detección de Bugs: Con un conjunto de bugs más extenso y diverso, los desarrolladores pueden mejorar sus herramientas de detección, lo que lleva a una mejor identificación de problemas en su código.
- Localización de Fallos: La información detallada ayuda a los desarrolladores a localizar dónde ocurren los problemas en sus programas de manera más efectiva.
- Reparación Automática de Programas: El dataset puede ser utilizado para entrenar algoritmos que automáticamente solucionan bugs, ahorrando tiempo y recursos.
Comparación con Otros Datasets de Bugs
El nuevo dataset se destaca de esfuerzos anteriores en varios aspectos:
- Conexión de Codebases a Repositorios de Bugs: El método de vincular el código directamente con repositorios de bugs permite un seguimiento más preciso de los bugs y las correcciones.
- Bugs Específicos del Proyecto: La capacidad de generar bugs específicos para un proyecto proporciona datos relevantes que los datasets generales típicamente no ofrecen.
Conclusión
El nuevo enfoque para recopilar datasets de bugs representa un avance significativo en el campo del mantenimiento de software. Con más de un millón de bugs recolectados de diversos lenguajes y proyectos de programación, este dataset es invaluable para desarrolladores e investigadores por igual. Al abordar los desafíos comunes que enfrentan los datasets existentes, el nuevo método mejora el potencial para mejorar la calidad y confiabilidad del software en aplicaciones del mundo real.
Título: PreciseBugCollector: Extensible, Executable and Precise Bug-fix Collection
Resumen: Bug datasets are vital for enabling deep learning techniques to address software maintenance tasks related to bugs. However, existing bug datasets suffer from precise and scale limitations: they are either small-scale but precise with manual validation or large-scale but imprecise with simple commit message processing. In this paper, we introduce PreciseBugCollector, a precise, multi-language bug collection approach that overcomes these two limitations. PreciseBugCollector is based on two novel components: a) A bug tracker to map the codebase repositories with external bug repositories to trace bug type information, and b) A bug injector to generate project-specific bugs by injecting noise into the correct codebases and then executing them against their test suites to obtain test failure messages. We implement PreciseBugCollector against three sources: 1) A bug tracker that links to the national vulnerability data set (NVD) to collect general-wise vulnerabilities, 2) A bug tracker that links to OSS-Fuzz to collect general-wise bugs, and 3) A bug injector based on 16 injection rules to generate project-wise bugs. To date, PreciseBugCollector comprises 1057818 bugs extracted from 2968 open-source projects. Of these, 12602 bugs are sourced from bug repositories (NVD and OSS-Fuzz), while the remaining 1045216 project-specific bugs are generated by the bug injector. Considering the challenge objectives, we argue that a bug injection approach is highly valuable for the industrial setting, since project-specific bugs align with domain knowledge, share the same codebase, and adhere to the coding style employed in industrial projects.
Autores: He Ye, Zimin Chen, Claire Le Goues
Última actualización: 2024-03-09 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2309.06229
Fuente PDF: https://arxiv.org/pdf/2309.06229
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.
Enlaces de referencia
- https://nvd.nist.gov/vuln
- https://google.github.io/oss-fuzz
- https://github.com/SophieHYe/PreciseBugs
- https://nvd.nist.gov/vuln/detail/cve-2014-0160
- https://nvd.nist.gov/vuln/detail/CVE-2017-5754
- https://nvd.nist.gov/vuln/detail/cve-2017-5753
- https://nvd.nist.gov/vuln/detail/cve-2017-5715
- https://nvd.nist.gov/vuln/detail/cve-2021-44228
- https://nvd.nist.gov/developers/vulnerabilities
- https://cwe.mitre.org/data/definitions/79.html