An approach to rank program transformations based on machine learning.
Ano de defesa: | 2019 |
---|---|
Autor(a) principal: | |
Orientador(a): | |
Banca de defesa: | |
Tipo de documento: | Dissertação |
Tipo de acesso: | Acesso aberto |
Idioma: | eng |
Instituição de defesa: |
Universidade Federal de Campina Grande
Brasil Centro de Engenharia Elétrica e Informática - CEEI PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO UFCG |
Programa de Pós-Graduação: |
Não Informado pela instituição
|
Departamento: |
Não Informado pela instituição
|
País: |
Não Informado pela instituição
|
Palavras-chave em Português: | |
Link de acesso: | http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/10631 |
Resumo: | À medida que o software evolui, desenvolvedores realizam edições repetitivas ao adicionarem features e corrigirem bugs. Técnicas de Programação-por-Exemplo (PbE) automatizam edições repetitivas inferindo transformações a partir dos exemplos. No entanto, exemplos são ambíguos e limitados, uma vez que os usuários desejam fornecer um número mínimo deles (de preferência 1). Assim, técnicas de PbE precisam ranquear as transformações inferidas selecionando aquelas que melhor se ajustam ao interesse do usuário. Abordagens comuns de ranqueamento favorecem transformações mais simples ou menores, ou atribuem pesos às suas características específicas, ou features. No entanto, o peso ideal de cada feature varia de acordo com o domínio do problema e encontrar esses pesos requer esforço manual e conhecimento específico. Propomos uma abordagem baseada em Aprendizado de Máquina (ML) para reduzir o esforço manual em encontrar pesos para funções de ranqueamento eficientes, que ranqueiam a transformação desejada usando o mínimo de exemplos. Nossa abordagem compreende a) banco de dados de treinamento/teste, b) extração de características, c) treino e teste de modelo, e d) instanciação das funções. Também investigamos o efeito de exemplos negativos na eficiência das abordagens de ranqueamento, bem como a acurácia das transformações nas primeiras 10 posições. Comparamos cinco abordagens: a) Máquina de vetores de suporte (SVM), b) Regressão logística (LR), c) Redes neurais (NN), d) Especialista-Humano (HE) e e) Pesos aleatórios (RW). Nós as avaliamos em 28 cenários de cinco projetos em C# do GitHub usando a técnica REFAZER que aprende múltiplas transformações a partir de exemplos. Medimos a eficiência das abordagens contando os exemplos necessários para colocar a transformação correta na primeira posição, usando exemplos negativos para evitar transformações que editam locais desnecessários. Como resultado, o LR apresentou um desempenho similar em relação ao HE, com médias de 1,67 e 1,64, respectivamente. Comparado a RW, LR provê uma diferença estatística, com p-valor < 0.05. Quanto à efetividade, LR é similar a HE com Precisão e NDCG de 0,5 e superior a RW com 0,2. Portanto, a abordagem baseada em ML pode ser tão eficiente quanto HE, enquanto reduz o esforço manual em encontrar pesos para criar funções de ranqueamento dos projetistas de ferramentas PbE. |