dc.creator.ID |
SOARES, G. A. |
pt_BR |
dc.creator.Lattes |
http://lattes.cnpq.br/6215732726947926 |
pt_BR |
dc.contributor.advisor1 |
GHEYI, Rohit. |
|
dc.contributor.advisor1ID |
GHEYI, R. |
pt_BR |
dc.contributor.referee1 |
GARCIA, Alessandro Fabricio. |
|
dc.contributor.referee2 |
BORBA, Paulo Henrique Monteiro. |
|
dc.contributor.referee3 |
MACHADO, Patrícia Duarte de Lima. |
|
dc.contributor.referee4 |
MASSONI, Tiago Lima. |
|
dc.description.resumo |
Refatoramento é uma transformação aplicada a um programa para melhorar suas qualidades
internas sem alterar seu comportamento observável. Apesar de trazer benefícios, como facilitar
a manutenção, refatorar também envolver riscos, como introduzir erros de compilação
ou mudanças comportamentais. Para ajudar o desenvolvedor nesse processo, surgiram as ferramentas
de refatoramento. Elas checam condições necessárias para garantir a preservação
do comportamento, e quando estas condições são satisfeitas, aplicam a transformação. No
entanto, c difícil identificar o conjunto mínimo e completo de condições para cada refatoramento.
Se uma condição não é implementada, a ferramenta pode alterar o comportamento
do programa. Por outro lado, desenvolvedores podem implementar condições que não só
previnem mudanças comportamentais, mas também impedem a aplicação de transformações
que preservam comportamento, diminuindo a aplicabilidade da ferramenta. Estas condições
são conhecidas como condições muito fortes. Nesse trabalho, propomos uma técnica para
testar ferramentas de refatoramento para Java com o objetivo de avaliar se o conjunto de
condições implementadas é mínimo e completo. Primeiro, geramos automaticamente um
conjunto de programas para serem refatorados. Para isso, propomos um gerador de programas
Java, JDOLLY, que gera exaustivamente programas para um determinado escopo de
elementos. Para cada programa gerado, aplicamos o refatoramento utilizando a ferramenta
em teste. Para detectar falhas nas transformações, utilizamos o SAFEREFACTOR, uma ferramenta
que propomos para detectar mudanças comportamentais. Por outro lado, quando as
transformações são rejeitadas pela ferramenta, propomos uma abordagem de teste diferencial
para detectar condições fortes. A técnica compara o resultado da ferramenta em teste
com os resultados dc outras ferramentas. Por fim, as falhas detectadas são classificadas em
tipos distintos de faltas. Nós avaliamos a eficiência da nossa técnica testando três ferramentas:
Eclipse 3.7, NetBeans 7 . 0 . 1 , e duas versões do JastAdd Refactoring Tools (JRRTv I
e JRRTv2). Foram testados até 1 0 implementações de refatoramento em cada ferramenta.
No total, nossa técnica identificou 34 faltas relacionadas a condições não implementadas no
Eclipse. 5 1 faltas no NetBeans, 24 faltas no JRRTv 1, e 11 faltas no JRRTv2. Além disso,
foram encontradas 17 e 7 condições muito fortes no Eclipse e JRRTv 1, respectivamente. |
pt_BR |
dc.publisher.country |
Brasil |
pt_BR |
dc.publisher.department |
Centro de Engenharia Elétrica e Informática - CEEI |
pt_BR |
dc.publisher.program |
PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO |
pt_BR |
dc.publisher.initials |
UFCG |
pt_BR |
dc.title |
Uma abordagem automatizada para testar ferramentas de refatoramento. |
pt_BR |
dc.date.issued |
2014-03 |
|
dc.description.abstract |
Refactoring is a transformation applied to the program to improve its internal structure without
changing its external behavior. Although it brings benefits, such as making it easier to
maintain the code, it also involves risks, such as introducing compilation errors or behavioral
changes. To help developers in this process, there are refactoring engines. They check conditions
needed to guarantee behavioral preservation, and when these conditions are satisfied,
they apply the desired transformation. However, identifying and implementing the complete
and minimal set of conditions for each refactoring are non-trivial tasks. In practice, tool developers
may not be aware of all conditions. When some condition is not implemented, the
tool may change the program's behavior. On the other hand, they may also implement conditions
that not only prevent behavioral changes, but also prevent behavior-preserving transformations,
reducing the applicability of these tools. In this case, we say they implemented
an overly strong condition. In this work, we propose a technique for automated testing of
Java refactoring engines to identify problems related to missing conditions and overly strong
ones. First, we automatically generate programs to be refactored, as test inputs. To do so,
we propose a Java program generator, JDOLLY, that exhaustively generates programs for a
given scope of Java elements. Then, for each generated program, the desired refactoring is
applied by using the engine under tests. To detect failures in the applied transformations, we
use SAFEREFACTOR, a tool that we proposed for detecting behavioral changes. On the other
hand, when the transformations are rejected by the engine, we propose an differential testing
technique to identify overly strong conditions. It compares the results of the engine under
tests with results of other engines. The final step of the technique is to classify the detected
failures into distinct faults. We evaluated the effectiveness of the technique by testing up to
10 refactorings implemented by three tools: Eclipse 3.7, NetBeans 7.0.1, and two versions of
JastAdd Refactoring Tools (JRRTvl and JRRTv2). Our technique identified 34 faults related
to missing conditions in Eclipse, 51 ones in NetBeans, 24 ones in JRRTvl, and 1 1 ones in
JRRTv2. In addition, it detected 17 and 7 overly strong conditions in Eclipse and JRRTvl,
respectively. |
pt_BR |
dc.identifier.uri |
http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717 |
|
dc.date.accessioned |
2019-05-08T15:35:59Z |
|
dc.date.available |
2019-05-08 |
|
dc.date.available |
2019-05-08T15:35:59Z |
|
dc.type |
Dissertação |
pt_BR |
dc.rights |
Acesso Aberto |
pt_BR |
dc.creator |
SOARES, Gustavo Araújo. |
|
dc.publisher |
Universidade Federal de Campina Grande |
pt_BR |
dc.language |
por |
pt_BR |
dc.title.alternative |
An automated approach to testing refactoring tools. |
pt_BR |
dc.identifier.citation |
SOARES, Gustavo Araújo. Uma abordagem automatizada para testar ferramentas de refatoramento. 2014. 148f. (Tese de Doutorado em Ciência da Computação) Programa de Pós-graduação em Ciência da Computação, Centro de Engenharia Elétrica e Informática, Universidade Federal de Campina Grande - Paraíba - Brasil, 2014. Disponível em: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717 |
pt_BR |