Defesa de Dissertação de Mestrado de Filipe Neves Cavalcante

postado em 14 de fev de 2017 15:09 por Coordenação da Pós-graduação em Computação da UFCG

Candidato(a): Filipe Neves Cavalcante

Título do Trabalho: Listas usadas como conjuntos: um estudo através de ferramenta de reescrita

Orientador(es): 

Adalberto Cajueiro

Tiago Massoni

 

Data: 03/03/2017

Horário: 02:00:00

Local: Auditório do CEEI

 

Resumo: Java Collections Framework (JCF) oferece um conjunto de Tipos Abstratos de Dados na lin- guagem Java, sendo seu principal framework. JCF é composto por várias classes e interfaces que são utilizadas para armazenar e manipular outros elementos, cada uma com característi- cas específicas para serem utilizados em determinadas situações, tornando-o um framework poderoso e bastante aplicável. Entretanto, essas especificidades podem se tornar problemas ao serem desconhecidas pelo programador, utilizando-as inadequadamente. Um problema existente é quando uma lista é usada como conjunto. Diante desta questão faz-se neces- sário um estudo das condições e consequências da substituição entre as interfaces List e Set, quando tal problema ocorre. É o que está sendo proposto nesta pesquisa, onde será desenvolvido, analisado e apresentado um conjunto de transformações implementadas num ambiente de reescrita de programas, a fim facilitar a execução da pesquisa. Estas retornam um código que utilize uma coleção, no caso List ou Set, de uma forma mais adequada de acordo com suas características. Foram utilizados trechos de códigos de projeto reais para identificação do uso inadequado de List e Set e posteriormente aplicação das transforma- ções necessárias nos caso identificados. Sendo estas testadas e analisadas por meio de um estudo de caso, a fim de verificar sua aplicabilidade, como também através de questionário destinados a programadores Java. Esse que analisou a aceitabilidade das transformações em dois trechos de código. Como resultados do estudo de caso, foi identificado a ocorrência sig- nificativa de projetos fazendo uso de listas atuando como conjuntos, 14%, pois este é apenas o número correspondente ao problema de listas usadas como conjuntos, caso fossem con- sideradas mais coleções e mais tipos de problemas envolvidos, provavelmente o número de ocorrências aumentaria. A ArrayList apresentou maior incidência (90%) e List ocorreu nos demais casos (10%). Foram detectados erros de compilação, vendo-se assim a necessi- dade de uma análise complementar para correção de tais erros. Os testes gerados nos códigos originais e a execução em ambos (original e transformado) obtiveram sucesso em todos os casos, revelando assim a existência de equivalência semântica entre eles. Outro dado iden- tificado, que mantém relação com a aceitabilidade do usuário, foi o fato de que o código transformado apresentou poucas modificações em relação ao original e nunca sendo inseri- das linhas adicionais. Em se tratando das avaliações realizadas pelos desenvolvedores Java no questionário, que apresentaram experiência considerável em Java e em JCF com mais da metade possuindo entre 4 e 12 anos de experiência. Eles deram suas sugestões de mu- danças acerca de dois trechos de código e posteriormente compará-las com transformações propostas. Cerca de 45% dos participantes propuseram sugestões consideradas adequadas, de acordo com a API e JCF, ao primeiro trecho de código analisado e 25% deles para o segundo. O primeiro utilizava o método add(E e), já o segundo set(int index, E e) ambos pertencentes a interface List. Também foi evidenciada uma melhoria na fa- cilidade de entendimento dos códigos transformados propostos pelo autor do questionário em relação aos originalmente apresentados. E ainda foi obtido a informação que 58% dos participantes não pesquisaram nem na API de JCF, nem em outras fontes para responder ao questionário, contra 26% que utilizaram API e 16% que pesquisaram sobre JCF em outras fontes. Então, é vista a necessidade de realização de uma técnica complementar a utilizada nas tranformações propostas para que erros de compilação como os que ocorreram no estudo de caso não se repitam. Possivelmente, uma análise dinâmica poderia complementar bem as transformações, que usaram análise estática. Reforçando assim a importância do desenvolvimento de pesquisas a fim de elaborar técnicas que auxiliem o uso adequado de coleções, seja apor meio de formas mais eficientes do programador absorver as informações sobre o uso correto de coleções, seja por meio de ferramentas. Estas, contribuindo para a realização de substituições quando estas já estiverem em uso inadequação, objetivando tornar o código mais legível e eficiente.

 

Banca Examinadora:

(Membros Internos)

Wilkerson Andrade

(Membros Externos)

Alexandre Cabral Mota, Universidade Federal de Pernambuco

Comments