Nueva herramienta mejora la selección de tareas para desarrolladores de OSS
GiveMeLabeledIssues ayuda a los desarrolladores a encontrar tareas adecuadas según sus habilidades.
― 7 minilectura
Tabla de contenidos
Muchos desarrolladores que trabajan en proyectos de Software de Código Abierto (OSS) tienen Problemas para elegir tareas de los sistemas de seguimiento de problemas. Estos sistemas a menudo tienen un montón de tareas, y averiguar cuál se ajusta a sus Habilidades puede ser complicado. Etiquetar las tareas correctamente puede ayudar a los desarrolladores a elegir trabajos adecuados, pero las herramientas disponibles hoy solo clasifican tareas según su tipo, como error, pregunta o característica.
Este artículo habla de una nueva herramienta llamada GiveMeLabeledIssues. Esta herramienta ayuda a etiquetar problemas de manera más efectiva al observar las habilidades necesarias para resolverlos. Piensa en los tipos de APIs involucradas en la solución como una forma de determinar las habilidades requeridas. Esta herramienta ayuda a los desarrolladores a hacer coincidir sus habilidades con las tareas y facilita a los mantenedores del proyecto gestionar los problemas.
Retos para los desarrolladores en proyectos de código abierto
Los desarrolladores a menudo tienen dificultades para encontrar problemas en los que puedan trabajar en proyectos de OSS. Una de las principales razones para esto es la dificultad de averiguar las habilidades necesarias para abordar un problema específico. Aunque etiquetar manualmente puede ayudar en este proceso, añade trabajo extra para los mantenedores del proyecto. Muchos proyectos no etiquetan sus tareas debido a este esfuerzo adicional.
Algunos estudios anteriores han sugerido que minar repositorios de software puede ayudar a etiquetar problemas con etiquetas básicas como error o buen-primer-problema. Sin embargo, estos métodos no atienden los diferentes niveles de habilidad de los recién llegados a un proyecto.
Las APIs (Interfaces de Programación de Aplicaciones) representan módulos con funciones específicas. Si podemos predecir qué APIs se utilizan para resolver un problema, podemos guiar mejor a los nuevos desarrolladores hacia tareas relevantes. Sin embargo, dado que hay un montón de APIs en los proyectos, etiquetar cada una no es práctico. Para abordar esto, agrupamos las APIs en categorías o dominios más amplios, lo que hace que gestionar las etiquetas sea más fácil.
El concepto de dominios de API
Los dominios de API proporcionan una forma de categorizar las APIs en grupos como Interfaz de Usuario (UI), Bases de Datos (DB) y Pruebas (Test). El trabajo anterior utilizó 31 dominios de API distintos. Diferentes proyectos pueden requerir diversas habilidades, y estas etiquetas pueden cambiar en consecuencia.
Las investigaciones muestran que usar etiquetas de dominio de API ayuda a los desarrolladores a encontrar tareas de OSS que se ajusten mejor a sus habilidades.
Presentando GiveMeLabeledIssues
GiveMeLabeledIssues es una herramienta web diseñada para clasificar problemas según las habilidades requeridas para resolverlos. Actualmente, funciona con tres proyectos de código abierto: JabRef, PowerToys y Audacity. Los usuarios pueden elegir un proyecto, ingresar sus habilidades según las categorías definidas y recibir una lista de problemas abiertos que coinciden con esas habilidades.
La herramienta fue entrenada usando datos de problemas cerrados y las APIs utilizadas en el código fuente que abordó esos problemas. Ha mostrado una tasa de precisión de alrededor del 83.9% en la predicción de los dominios de API relevantes vinculados a los problemas.
Cómo funciona la herramienta
GiveMeLabeledIssues opera en dos capas principales: una interfaz web frontend y una API REST backend. La interfaz frontend está diseñada para que los usuarios interactúen con la herramienta, mientras que la API backend alberga los modelos entrenados y maneja el procesamiento de datos.
Entrenamiento del modelo
Para crear un modelo para cada proyecto, se recopilan datos de problemas y pull requests fusionadas. La herramienta mapea el texto de los problemas a las APIs utilizadas en el código que resolvió esos problemas.
Se recopilaron un total de 18,482 problemas y 3,129 pull requests de proyectos seleccionados. Se utilizó la API REST de GitHub para obtener información esencial como títulos, comentarios y fechas de cierre.
Análisis de APIs
Se utiliza un analizador para analizar los archivos fuente e identificar las APIs en el código afectado. En estos datos, se encontraron 3,686 APIs distintas.
Construcción del conjunto de datos
El conjunto de datos solo incluye datos de problemas vinculados con pull requests fusionadas y cerradas. Esto ayuda a conectar los datos del problema con las APIs involucradas en la solución.
Categorización de APIs
Las 31 categorías de dominio de API fueron definidas por expertos. Esta organización permite a la herramienta clasificar las APIs de varios proyectos de manera eficiente.
Construcción del corpus
El título y el cuerpo de los problemas sirven como el corpus para entrenar el modelo. La herramienta utiliza técnicas para cuantificar la importancia de las palabras dentro de estos documentos. Después de preprocesar el texto, los datos se alimentan a un clasificador Random Forest para hacer predicciones.
Además, los usuarios tienen la opción de usar un modelo BERT para etiquetar problemas basados en el texto de los problemas y los dominios proporcionados.
Construcción de los modelos
El modelo BERT se construye utilizando paquetes específicos de Python y se entrena con una GPU para mejorar el rendimiento. Los modelos entrenados se alojan en el backend para proporcionar predicciones rápidas cuando los usuarios hacen solicitudes.
Clasificación de Problemas
GiveMeLabeledIssues clasifica problemas abiertos para cada proyecto registrado. La herramienta combina el título del problema y el texto del cuerpo, que luego es procesado por el clasificador para identificar etiquetas de dominio relevantes.
Los problemas y sus etiquetas se almacenan en una base de datos para un acceso rápido. El sistema asegura que la base de datos se actualice diariamente reclasificando los problemas abiertos.
Interfaz de Usuario
La herramienta proporciona resultados a los usuarios a través de una interfaz web construida con el framework Angular. Los usuarios pueden seleccionar un proyecto y especificar las etiquetas de dominio de API que les interesan.
Una vez que esta información se envía al backend, procesa la solicitud y devuelve una lista de problemas relevantes para el usuario. Cada problema en la salida incluye un enlace a su página en GitHub, así como su título y número.
Evaluando la herramienta
El rendimiento de la herramienta ha sido evaluado utilizando un conjunto de datos que comprende miles de problemas, pull requests y APIs.
Las métricas de evaluación, como la precisión y la recuperación, muestran que el modelo Random Forest superó al modelo BERT en diferentes conjuntos de datos de proyectos.
En general, el modelo Random Forest dio mejores resultados debido a su capacidad para aprovechar el vocabulario contextual de proyectos individuales. Esto se alinea con investigaciones anteriores que indican que diferentes modelos funcionan mejor según el tamaño y el contexto de los datos.
Trabajo relacionado
Muchos estudios han intentado ayudar a los recién llegados a encontrar tareas en proyectos de OSS. Algunos propusieron portales para encontrar documentación relevante, mientras que otros buscaban etiquetar problemas automáticamente.
La mayoría de los esfuerzos de automatización se han centrado en distinguir entre informes de errores y no informes de errores. Otro trabajo existente intenta categorizar problemas, pero a menudo utiliza etiquetas preestablecidas en lugar de personalizarlas según las necesidades de los desarrolladores.
La investigación sobre APIs también ha ganado terreno, ya que saber qué APIs se relacionan con una solución potencial puede ayudar a los recién llegados a seleccionar problemas que coincidan con sus habilidades. Sin embargo, a diferencia de muchos estudios relacionados, GiveMeLabeledIssues se centra en etiquetar problemas por dominios de API.
Conclusión y trabajo futuro
GiveMeLabeledIssues es una herramienta útil para que los desarrolladores de OSS encuentren tareas que se alineen con sus habilidades. Esta herramienta puede facilitar la incorporación de nuevos contribuyentes mientras alivia la carga para los mantenedores del proyecto.
En el futuro, la herramienta puede explorar etiquetas de dominio adicionales proporcionadas por estándares establecidos. Hay planes para recopilar comentarios de los usuarios para ver cómo la herramienta afecta sus elecciones en la selección de tareas a través de experimentos controlados.
Las mejoras futuras también pueden integrar características sociales o vincular la herramienta con acciones de GitHub o bots para agilizar aún más el proceso. Este proyecto recibió apoyo de organizaciones nacionales de financiamiento.
Título: GiveMeLabeledIssues: An Open Source Issue Recommendation System
Resumen: Developers often struggle to navigate an Open Source Software (OSS) project's issue-tracking system and find a suitable task. Proper issue labeling can aid task selection, but current tools are limited to classifying the issues according to their type (e.g., bug, question, good first issue, feature, etc.). In contrast, this paper presents a tool (GiveMeLabeledIssues) that mines project repositories and labels issues based on the skills required to solve them. We leverage the domain of the APIs involved in the solution (e.g., User Interface (UI), Test, Databases (DB), etc.) as a proxy for the required skills. GiveMeLabeledIssues facilitates matching developers' skills to tasks, reducing the burden on project maintainers. The tool obtained a precision of 83.9% when predicting the API domains involved in the issues. The replication package contains instructions on executing the tool and including new projects. A demo video is available at https://www.youtube.com/watch?v=ic2quUue7i8
Autores: Joseph Vargovich, Fabio Santos, Jacob Penney, Marco A. Gerosa, Igor Steinmacher
Última actualización: 2023-03-23 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2303.13418
Fuente PDF: https://arxiv.org/pdf/2303.13418
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://www.youtube.com/watch?v=ic2quUue7i8
- https://github.com/JoeyV55/GiveMeLabeledIssuesUI
- https://github.com/JoeyV55/GiveMeLabeledIssuesAPI
- https://doi.org/10.5281/zenodo.7575116
- https://spacy.io/api/doc
- https://pypi.org/project/wordninja/
- https://github.com/utterworks/fast-bert
- https://huggingface.co/docs/transformers/index
- https://zenodo.org/record/7726323#.ZA5oy-zMIeY