Um Estudo Exploratório Sobre Redundância Funcional Em Repositórios Java De Larga Escala

Nenhuma Miniatura disponível
Data
2017-09-29
Autores
Suzuki, Marcelo Rosa [UNIFESP]
Orientadores
Lemos, Otavio Augusto Lazzarini [UNIFESP]
Tipo
Dissertação de mestrado
Título da Revista
ISSN da Revista
Título de Volume
Resumo
In large code repositories, the probability of functions to repeat across projects is high. This type of functional redundancy is desirable for recent code reuse and repair approaches. Yet, functional redundancy is hard to measure because it is closely related to program equivalence, which is an undecidable problem. This is one of the reasons most studies that investigate redundancy focus on syntactic rather than semantic replication (e.g., cloning). In this dissertation is evaluate the extent of functional redundancy in a code repositor y with 68 Java projects taken randomly from SourceForge. The technique approximates function similarity by first searching for methods that possess similar interfaces (return type, name, and parameter types). We then execute these methods to verify which candidate pairs have matching outputs for a given sample of inputs. Some recent studies have also focused on this type of semantic replication, but our detection approach is generally cheaper and more precise, because it focuses on methods and uses interfaces to reduce the search space. The results are conservative, because the scope is restricted to static methods, but indicate for relatively high semantic redundancy in the repository. In particular, it was found 984 pairs of redundant methods, and 28 out of the 68 (41.17%) projects in the repository presented redundancy. The study also indicates that the proposed redundancy detection approach has high precision and is generally inexpensive (only four executions were required per method to attain 100% precision).
Em repositórios de larga escala existe uma alta probabilidade de que funções se repitam entre projetos. Esse tipo de redundância funcional é desejável para abordagens recentes de reuso e reparo de código. Entretanto, de maneira geral é difícil de se medir a redundância funcional, pois esta característica está diretamente relacionada com a equivalência de programas, um problema sabidamente indecidível. Essa é uma das razões pelas quais a maioria dos estudos sobre redundância focam em replicação sintática (por exemplo, clonagem) em vez de semântica. Nesta dissertação é feita uma avaliação da extensão da redundância funcional em um repositório com 68 projetos Java escolhidos aleatoriamente do SourceForge. A técnica proposta para a medição da redundância funcional aproxima similaridade funcional inicialmente a partir da busca por métodos que possuem interfaces similares (mesmo tipo de retorno, nome e tipos de parâmetros). O segundo passo é executar os pares de métodos com interface semelhante com algumas entradas pré-definidas, observando se as saídas são coincidentes para as mesmas entradas. Alguns estudos recentes também focam na replicação semântica, porém a abordagem de detecção proposta aqui é focado em métodos e utiliza interfaces para reduzir o espaço de busca. Os resultados obtidos foram conservadores, pois focou-se apenas em métodos estáticos, mas apontam para uma redundância semântica relativamente alta no repositório. Em particular, encontrou-se 984 pares de métodos redundantes, e 28 dos 68 projetos (41.17%) avaliados no estudo apresentaram redundância semântica. O estudo também indica que a utilização da abordagem de detecção de redundância proposta atinge alta precisão a um custo baixo (apenas quatro execuções por método foram necessárias para atingir uma precisão de 100%).
Descrição
Citação