Nova ferramenta melhora a seleção de tarefas para desenvolvedores de OSS
GiveMeLabeledIssues ajuda os desenvolvedores a encontrar tarefas legais com base nas habilidades deles.
― 7 min ler
Índice
Muitos desenvolvedores que trabalham em projetos de Software de Código Aberto (OSS) acham difícil escolher tarefas nos sistemas de rastreamento de Problemas. Esses sistemas geralmente têm muitas tarefas, e descobrir qual combina com as Habilidades deles pode ser desafiador. Rotular as tarefas corretamente pode ajudar os desenvolvedores a escolher um trabalho adequado, mas as ferramentas disponíveis hoje em dia só classificam as tarefas com base no tipo, como bug, pergunta ou recurso.
Esse artigo fala sobre uma nova ferramenta chamada GiveMeLabeledIssues. Essa ferramenta ajuda a rotular problemas de forma mais eficaz, analisando as habilidades necessárias para resolvê-los. Ela considera os tipos de APIs envolvidas na solução como uma maneira de determinar as habilidades exigidas. Essa ferramenta ajuda os desenvolvedores a combinar suas habilidades com as tarefas e facilita para os mantenedores do projeto gerenciarem os problemas.
Desafios dos Desenvolvedores em Projetos de Código Aberto
Os desenvolvedores muitas vezes têm dificuldades para encontrar problemas que possam resolver em projetos OSS. Um dos principais motivos para isso é a dificuldade em descobrir as habilidades necessárias para resolver um problema específico. Embora a rotulagem manual possa ajudar nesse processo, isso adiciona trabalho extra para os mantenedores do projeto. Muitos projetos não rotulam suas tarefas por causa desse esforço extra.
Alguns estudos anteriores sugeriram que minerar repositórios de software pode ajudar a etiquetar problemas com rótulos básicos, como bug ou boa-primeira-tarefa. No entanto, esses métodos não atendem aos diferentes níveis de habilidade dos novatos em um projeto.
APIs (Interfaces de Programação de Aplicativos) representam módulos com funções específicas. Se conseguirmos prever quais APIs são usadas para resolver um problema, podemos guiar melhor os novos desenvolvedores para tarefas relevantes. No entanto, como existem inúmeras APIs em projetos, rotular cada uma não é prático. Para resolver isso, agrupamos as APIs em categorias ou domínios mais amplos, facilitando o gerenciamento dos rótulos.
O Conceito de Domínios de API
Os domínios de API fornecem uma maneira de categorizar APIs em grupos como Interface do Usuário (UI), Bancos de Dados (DB) e Testes (Test). O trabalho anterior usou 31 domínios de API distintos. Diferentes projetos podem exigir várias habilidades, e esses rótulos podem mudar de acordo.
Pesquisas mostram que usar rótulos de domínios de API ajuda os desenvolvedores a encontrar tarefas OSS que se encaixam melhor nas suas habilidades.
Apresentando o GiveMeLabeledIssues
GiveMeLabeledIssues é uma ferramenta web projetada para classificar problemas com base nas habilidades necessárias para resolvê-los. No momento, ela funciona com três projetos de código aberto: JabRef, PowerToys e Audacity. Os usuários podem escolher um projeto, inserir suas habilidades com base nas categorias definidas e receber uma lista de problemas abertos que combinam com essas habilidades.
A ferramenta foi treinada usando dados de problemas fechados e as APIs usadas no código-fonte que resolveram esses problemas. Ela mostrou uma taxa de precisão de cerca de 83,9% na previsão dos domínios de API relevantes relacionados aos problemas.
Como a Ferramenta Funciona
GiveMeLabeledIssues opera em duas camadas principais: uma interface web frontend e uma API REST backend. A interface frontend é projetada para os usuários interagirem com a ferramenta, enquanto a API backend abriga os modelos treinados e lida com o processamento de dados.
Treinamento de Modelos
Para criar um modelo para cada projeto, são coletados dados de problemas e pull requests mescladas. A ferramenta mapeia o texto dos problemas para as APIs usadas no código que resolveu esses problemas.
Um total de 18.482 problemas e 3.129 pull requests foram coletados dos projetos selecionados. A API REST do GitHub foi usada para reunir informações essenciais, como títulos, comentários e datas de fechamento.
Analisando APIs
Um parser é usado para analisar os arquivos-fonte e identificar as APIs no código afetado. Nesse dado, foram encontradas 3.686 APIs distintas.
Construindo o Conjunto de Dados
O conjunto de dados inclui apenas informações de problemas vinculados a pull requests mescladas e fechadas. Isso ajuda a conectar os dados dos problemas com as APIs envolvidas na solução.
Categorizing APIs
As 31 categorias de domínio de API foram definidas por especialistas. Essa organização permite que a ferramenta classifique APIs de vários projetos de forma eficiente.
Construindo o Corpus
O título e o corpo dos problemas servem como o corpus para treinar o modelo. A ferramenta usa técnicas para quantificar a importância das palavras dentro desses documentos. Depois de processar o texto, os dados são alimentados em um classificador Random Forest para previsões.
Além disso, os usuários têm a opção de usar um modelo BERT para rotular problemas com base no texto dos problemas e nos domínios fornecidos.
Construindo os Modelos
O modelo BERT é construído usando pacotes Python específicos e é treinado usando uma GPU para melhorar o desempenho. Os modelos treinados são então hospedados no backend para fornecer previsões rápidas quando os usuários fazem solicitações.
Classificando Problemas
GiveMeLabeledIssues classifica problemas abertos para cada projeto registrado. A ferramenta combina o título do problema e o texto do corpo, que é então processado pelo classificador para identificar os rótulos de domínio relevantes.
Os problemas e seus rótulos são armazenados em um banco de dados para acesso rápido. O sistema garante que o banco de dados seja atualizado diariamente, reclassificando os problemas abertos.
Interface do Usuário
A ferramenta fornece resultados para os usuários através de uma interface web construída com o framework Angular. Os usuários podem selecionar um projeto e especificar os rótulos de domínio de API que lhes interessam.
Uma vez que essa informação é enviada para o backend, ele processa o pedido e retorna uma lista de problemas relevantes para o usuário. Cada problema na saída inclui um link para sua página no GitHub, além de seu título e número.
Avaliando a Ferramenta
O desempenho da ferramenta foi avaliado usando um conjunto de dados que compreende milhares de problemas, pull requests e APIs.
As métricas de avaliação, como precisão e recall, mostram que o modelo Random Forest superou o modelo BERT em diferentes conjuntos de dados de projetos.
No geral, o modelo Random Forest apresentou resultados melhores devido à sua capacidade de aproveitar o vocabulário contextual de projetos individuais. Isso está alinhado com pesquisas anteriores que indicam que diferentes modelos se saem melhor com base no tamanho dos dados e no contexto.
Trabalho Relacionado
Muitos estudos tentaram ajudar novatos a encontrar tarefas em projetos OSS. Alguns propuseram portais para encontrar documentação relevante, enquanto outros visavam rotular problemas automaticamente.
A maioria dos esforços de automação se concentrou em distinguir entre relatórios de bugs e não-relatórios de bugs. Outros trabalhos existentes tentam categorizar problemas, mas muitas vezes usam rótulos pré-definidos em vez de personalizá-los com base nas necessidades dos desenvolvedores.
A pesquisa sobre APIs também ganhou força, já que saber quais APIs estão relacionadas a uma solução potencial pode ajudar novatos a selecionar problemas que combinam com suas habilidades. No entanto, ao contrário de muitos estudos relacionados, o GiveMeLabeledIssues foca em rotular problemas por domínios de API.
Conclusão e Trabalho Futuro
GiveMeLabeledIssues serve como uma ferramenta útil para desenvolvedores OSS encontrarem tarefas que se alinham com suas habilidades. Essa ferramenta pode facilitar a integração de novos colaboradores enquanto alivia a carga dos mantenedores do projeto.
No futuro, a ferramenta pode explorar rótulos de domínio adicionais fornecidos por padrões estabelecidos. Há planos para coletar feedback dos usuários para ver como a ferramenta afeta suas escolhas na seleção de tarefas por meio de experimentos controlados.
Melhorias futuras também podem integrar recursos sociais ou vincular a ferramenta com ações do GitHub ou bots para otimizar ainda mais o processo. Este projeto recebeu apoio de organizações nacionais de fomento.
Título: GiveMeLabeledIssues: An Open Source Issue Recommendation System
Resumo: 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 atualização: 2023-03-23 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2303.13418
Fonte PDF: https://arxiv.org/pdf/2303.13418
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.
Ligações de referência
- 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