Resumo

A Engenharia de Software muito tem a contribuir para o processo de desenvolvimento de grandes projetos de softwares. Desde a condução padronizada desse processo até a orientação correta em casos de falha, todas as atividades envolvidas na evolução de um sistema contemplam a entrega de um produto com a qualidade esperada. A tarefa de priorização de bugs em repositórios de software de código livre e aberto, contudo, torna-se desafiadora, em razão da grande quantidade de novas falhas que são reportadas diariamente. Assim, uma estratégia para atacar esse problema é a automatização de algumas decisões envolvidas nesse processo, como qual a melhor ordenação de bugs para correção. Além disso, é ideal que sejam recomendadas aos desenvolvedores tarefas de implementação compatíveis com sua experiência ao longo dos componentes do software. Nesse sentido, a Search Based Software Engineering surge como uma alternativa, aplicando técnicas de otimização baseada em busca na resolução de problemas deste tipo. Este trabalho propõe uma abordagem sistemática baseada em busca para a priorização de bugs em repositórios de software livre e código aberto, utilizando informações dadas pelos membros da comunidade mantenedora, determinando qual a melhor ordenação para as tarefas de correção dessas falhas, através da aplicação de técnicas de otimização multiobjetivo. Além disso, é proposta uma estratégia de recomendação de bugs, sugerindo ao desenvolvedor qual dentre as soluções encontradas é mais compatível com seu nível de experiência em tarefas de implementação. Os resultados demonstram que a estratégia NSGA-II apresenta-se como a melhor escolha dentre as técnicas testadas, obtendo os melhores resultados na análise das métricas Hypervolume e Generational Distance. Observou-se, também, que a estratégia de recomendação de bugs para correção sugeriu soluções mais compatíveis com o nível de experiência do desenvolvedor do que o processo aleatório de escolha.

Palavras-chave: Priorização de bugs. Otimização Multiobjetivo. Recomendação baseada em compatibilidade. SBSE.

Abordagem

Código-fonte

Resultados

Dissertação

Abordagem Proposta

As etapas que constituem a abordagem proposta encontram-se na imagem a seguir. Clique na etapa desejada para uma descrição sucinta.

Passo 1:
Contribuidor comum, representado por qualquer usuário da comunidade, reporta novo bug ao respositório. Não é exigido nenhum conhecimento técnico prévio sobre o problema avaliado.

Passo 2:
Especialista no domínio define o nível de prioridade que um determinado bug tem para o sistema, e o nível de experiência exigido para resolvê-lo.

Passo 3:
Comunidade mantenedora interage com o repositório de bugs, expressando seu desejo sobre quais bugs devem ser resolvidos com maior urgência.

Passo 4:
É utilizado um processo de otimização multiobjetivo, proposto neste trabalho, onde há a geração de um conjunto de soluções. Cada solução representa uma relação prioizada de bugs.

Passo 5:
Neste passo é utilizada uma estratégia de recomendação, também proposta neste trabalho, da solução mais adequada ao nível de experiência do desenvolvedor.

Código-fonte e Instâncias

Na tabela abaixo encontram-se disponíveis as instâncias utilizadas no estudo empírico. Para a implementação das técnicas de busca, foi utilizado o framework jMetal. O código-fonte do projeto também encontram-se disponíveis para download.

Arquivo Descrição Download
dataset-bugs-kate Contém informações sobre os bugs coletados no repositório do projeto Kate Editor.
dataset-dev-profiles Contém o histórico de resolução de bugs dos desenvolvedores do repositório.
dataset-exp-req Informa o quanto de experiência é exigido na resolução de cada bug.
bugprioritization-mo Código-fonte do projeto Java, utilizando o framework jMetal.

Resultados

QP01: Para responder a esta questão de pesquisa foram coletados os valores de todas as métricas de desempenho resultantes das execuções dos algoritmos implementados. As imagens abaixo apresentam uma comparação entre os valores médios obtidos, a dispersão das soluções no espaço de busca e a convergência em relação à Frente de Pareto tomada como referência.

Para mais resultados, clique na imagem da métrica desejada.

Hypervolume

Generational Distance

Spread


QP02: Para responder a esta questão de pesquisa foram comparadas duas soluções de uma mesma Frente de Pareto, sendo uma delas escolhida através da função compatibility(P) e outra selecionada aleatoriamente. Foi realizado o cálculo da Distância Euclidiana (D.E.) entre o nível de experiência exigido para resolver cada bug e o nível de experiência possuído pelo desenvolvedor. A tabela a seguir exibe esse resultado para os cinco primeiros bugs de uma solução, e observa-se que bug da solução recomendada, em destaque, é mais próximo do perfil do desenvolvedor.

Solução recomendada Solução escolhida aleatoriamente
Bug id D.E. Bug id D.E.
136 12,23029027 136 12,23029027
23 20,29171259 23 20,29171259
28 21,3241647 148 22,84017513
19 24,89277003 19 24,89277003
26 25,01410802 26 25,01410802