Uma abordagem automatizada para testar ferramentas de refatoramento.

Detalhes bibliográficos
Autor(a) principal: SOARES, Gustavo Araújo.
Data de Publicação: 2014
Tipo de documento: Dissertação
Idioma: por
Título da fonte: Repositório Institucional da UCB
Texto Completo: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717
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.
id UCB-2_a868940a9cb0c224d2b57954e2a367d4
oai_identifier_str oai:localhost:riufcg/3717
network_acronym_str UCB-2
network_name_str Repositório Institucional da UCB
repository_id_str
spelling Uma abordagem automatizada para testar ferramentas de refatoramento.An automated approach to testing refactoring tools.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.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.Universidade Federal de Campina GrandeBrasilCentro de Engenharia Elétrica e Informática - CEEIPÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃOUFCGGHEYI, Rohit.GHEYI, R.GARCIA, Alessandro Fabricio.BORBA, Paulo Henrique Monteiro.MACHADO, Patrícia Duarte de Lima.MASSONI, Tiago Lima.SOARES, Gustavo Araújo.2014-032019-05-08T15:35:59Z2019-05-082019-05-08T15:35:59Zinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesishttp://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717SOARES, 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/3717porinfo:eu-repo/semantics/openAccessreponame:Repositório Institucional da UCBinstname:Universidade Católica de Brasília (UCB)instacron:UCB2022-03-14T19:47:21Zoai:localhost:riufcg/3717Repositório InstitucionalPRIhttps://repositorio.ucb.br/oai/requestsara.ribeiro@ucb.bropendoar:2022-03-14T19:47:21Repositório Institucional da UCB - Universidade Católica de Brasília (UCB)false
dc.title.none.fl_str_mv Uma abordagem automatizada para testar ferramentas de refatoramento.
An automated approach to testing refactoring tools.
title Uma abordagem automatizada para testar ferramentas de refatoramento.
spellingShingle Uma abordagem automatizada para testar ferramentas de refatoramento.
SOARES, Gustavo Araújo.
title_short Uma abordagem automatizada para testar ferramentas de refatoramento.
title_full Uma abordagem automatizada para testar ferramentas de refatoramento.
title_fullStr Uma abordagem automatizada para testar ferramentas de refatoramento.
title_full_unstemmed Uma abordagem automatizada para testar ferramentas de refatoramento.
title_sort Uma abordagem automatizada para testar ferramentas de refatoramento.
author SOARES, Gustavo Araújo.
author_facet SOARES, Gustavo Araújo.
author_role author
dc.contributor.none.fl_str_mv GHEYI, Rohit.
GHEYI, R.
GARCIA, Alessandro Fabricio.
BORBA, Paulo Henrique Monteiro.
MACHADO, Patrícia Duarte de Lima.
MASSONI, Tiago Lima.
dc.contributor.author.fl_str_mv SOARES, Gustavo Araújo.
description 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.
publishDate 2014
dc.date.none.fl_str_mv 2014-03
2019-05-08T15:35:59Z
2019-05-08
2019-05-08T15:35:59Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717
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
url http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/3717
identifier_str_mv 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
dc.language.iso.fl_str_mv por
language por
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.publisher.none.fl_str_mv 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
publisher.none.fl_str_mv 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
dc.source.none.fl_str_mv reponame:Repositório Institucional da UCB
instname:Universidade Católica de Brasília (UCB)
instacron:UCB
instname_str Universidade Católica de Brasília (UCB)
instacron_str UCB
institution UCB
reponame_str Repositório Institucional da UCB
collection Repositório Institucional da UCB
repository.name.fl_str_mv Repositório Institucional da UCB - Universidade Católica de Brasília (UCB)
repository.mail.fl_str_mv sara.ribeiro@ucb.br
_version_ 1834012893738172416