Scaling testing of refactoring engines.

Submitted by Maria Medeiros (maria.dilva1@ufcg.edu.br) on 2018-06-05T13:58:29Z No. of bitstreams: 1 MELINA MONGIOVI CUNHA LIMA SABINO - TESE (PPGCC) 2016.pdf: 4752189 bytes, checksum: e1034c42632a733df07a498a7eea6d0b (MD5) === Made available in DSpace on 2018-06-05T13:58:29Z (GMT). No. of bitstreams...

Full description

Bibliographic Details
Main Author: SABINO, Melina Mongiovi Cunha Lima.
Other Authors: GHEYI, Rohit.
Language:English
Published: Universidade Federal de Campina Grande 2016
Subjects:
Online Access:http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/883
id ndltd-IBICT-oai-localhost-riufcg-883
record_format oai_dc
collection NDLTD
language English
sources NDLTD
topic Ciências
Ciência da Computação
Engenharia de Software
Refatoramentos
Testes de Software
Geração de Programas
spellingShingle Ciências
Ciência da Computação
Engenharia de Software
Refatoramentos
Testes de Software
Geração de Programas
SABINO, Melina Mongiovi Cunha Lima.
Scaling testing of refactoring engines.
description Submitted by Maria Medeiros (maria.dilva1@ufcg.edu.br) on 2018-06-05T13:58:29Z No. of bitstreams: 1 MELINA MONGIOVI CUNHA LIMA SABINO - TESE (PPGCC) 2016.pdf: 4752189 bytes, checksum: e1034c42632a733df07a498a7eea6d0b (MD5) === Made available in DSpace on 2018-06-05T13:58:29Z (GMT). No. of bitstreams: 1 MELINA MONGIOVI CUNHA LIMA SABINO - TESE (PPGCC) 2016.pdf: 4752189 bytes, checksum: e1034c42632a733df07a498a7eea6d0b (MD5) Previous issue date: 2016 === Capes === Definir e implementar refatoramentos não é uma tarefa trivial, pois é difícil definir todas as pré-condições necessárias para garantir que a transformação preserve o comportamento observável do programa. Com isso, ferramentas de refatoramentos podem ter condições muito fracas, condições muito fortes e podem aplicar transformações que não seguem a definição do refatoramento. Na prática, desenvolvedores escrevem casos de testes para checar suas implementações de refatoramentos e se preocupam em evitar esses tipos de bugs, pois 84% das asserções de testes do Eclipse e JRRT testam as ferramentas com relação aos bugs citados anteriormente. No entanto, as ferramentas ainda possuem esses bugs. Existem algumas técnicas automáticas para testar ferramentas de refatoramentos, mas elas podem ter limitações relacionadas com tipos de bugs que podem ser detectados, geração de entradas de testes, automação e performance. Este trabalho propõe uma técnica para escalar testes de ferramentas de refatoramentos. A técnica contém DOLLY um gerador automático de programas Java e C, no qual foram adicionadas mais construções de Java (classes e métodos abstratos e interface) e uma estratégia de pular algumas entradas de testes com o propósito de reduzir o tempo de testar as implementações de refatoramentos. Foi proposto um conjunto de oráculos para avaliar a corretude das transformações, dentre eles SAFEREFACTORIMPACT que identifica falhas relacionadas com mudanças comportamentais. SAFEREFACTORIMPACT gera testes apenas para os métodos impactados pela transformação. Além disso, foi proposto um novo oráculo para identificar transformações que não seguem a definição do refatoramento e uma nova técnica para identificar condições muito fortes. A técnica proposta foi avaliada em 28 implementações de refatoramentos de Java (Eclipse e JRRT) e C (Eclipse) e detectou 119 bugs relacionados com erros de compilação, mudanças comportamentais, condições muito fortes, e transformações que não seguem a definição do refatoramento. Usando pulos de 10 e 25 no gerador de programas, a técnica reduziu em 90% e 96% o tempo para testar as implementações de refatoramentos, enquanto deixou de detectar apenas 3% e 6% dos bugs, respectivamente. Além disso, detectou a primeira falha geralmente em alguns segundos. Por fim, com o objetivo de avaliar a técnica proposta com outras entradas de testes, foram avaliadas implementações do Eclipse e JRRT usando os programas de entrada das suas coleções de testes. Neste estudo, nossa técnica detectou mais 31 bugs não detectados pelos desenvolvedores das ferramentas. === Defining and implementing refactorings is a nontrivial task since it is difficult to define preconditions to guarantee that the transformation preserves the program behavior. There fore, refactoring engines may have overly weak preconditions, overly strong preconditions, and transformation issues related to the refactoring definition. In practice, developers manually write test cases to check their refactoring implementations. We find that 84% of the test suites of Eclipse and JRRT are concerned with identifying these kinds of bugs. However, bugs are still present. Researchers have proposed a number of techniques for testing refactoring engines. Nevertheless, they may have limitations related to the bug type, program generation, time consumption, and number of refactoring engines necessary to evaluate the implementations. In this work, we propose a technique to scale testing of refactoring engines by extending a previous technique. It automatically generates programs as test inputs using Dolly, a Java and C program generator. We add more Java constructs in DOLLY, such abstract classes and methods and interface, and a skip parameter to reduce the time to test the refactoring implementations by skipping some consecutive test inputs. Our technique uses SAFEREFACTORIMPACT to identify failures related to behavioral changes. It generates test cases only for the methods impacted by a transformation. Also, we propose a new oracle to evaluate whether refactoring preconditions are overly strong by disabling a subset of them. Finally, we present a technique to identify transformation issues related to the refactoring definition. We evaluate our technique in 28 refactoring implementations of Java (Eclipse and JRRT) and C (Eclipse) and find 119 bugs related to compilation errors, behavioral changes, overly strong preconditions, and transformation issues. The technique reduces the time in 90% and 96% using skips of 10 and 25 in Dolly while missing only 3% and 6% of the bugs, respectively. Additionally, it finds the first failure in general in a few seconds using skips. Finally, we evaluate our proposed technique by using other test inputs, such as the input programs of Eclipse and JRRT refactoring test suites. We find 31 bugs not detected by the developers.
author2 GHEYI, Rohit.
author_facet GHEYI, Rohit.
SABINO, Melina Mongiovi Cunha Lima.
author SABINO, Melina Mongiovi Cunha Lima.
author_sort SABINO, Melina Mongiovi Cunha Lima.
title Scaling testing of refactoring engines.
title_short Scaling testing of refactoring engines.
title_full Scaling testing of refactoring engines.
title_fullStr Scaling testing of refactoring engines.
title_full_unstemmed Scaling testing of refactoring engines.
title_sort scaling testing of refactoring engines.
publisher Universidade Federal de Campina Grande
publishDate 2016
url http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/883
work_keys_str_mv AT sabinomelinamongiovicunhalima scalingtestingofrefactoringengines
_version_ 1718693451702206464
spelling ndltd-IBICT-oai-localhost-riufcg-8832018-06-10T17:08:07Z Scaling testing of refactoring engines. SABINO, Melina Mongiovi Cunha Lima. GHEYI, Rohit. Ciências Ciência da Computação Engenharia de Software Refatoramentos Testes de Software Geração de Programas Submitted by Maria Medeiros (maria.dilva1@ufcg.edu.br) on 2018-06-05T13:58:29Z No. of bitstreams: 1 MELINA MONGIOVI CUNHA LIMA SABINO - TESE (PPGCC) 2016.pdf: 4752189 bytes, checksum: e1034c42632a733df07a498a7eea6d0b (MD5) Made available in DSpace on 2018-06-05T13:58:29Z (GMT). No. of bitstreams: 1 MELINA MONGIOVI CUNHA LIMA SABINO - TESE (PPGCC) 2016.pdf: 4752189 bytes, checksum: e1034c42632a733df07a498a7eea6d0b (MD5) Previous issue date: 2016 Capes Definir e implementar refatoramentos não é uma tarefa trivial, pois é difícil definir todas as pré-condições necessárias para garantir que a transformação preserve o comportamento observável do programa. Com isso, ferramentas de refatoramentos podem ter condições muito fracas, condições muito fortes e podem aplicar transformações que não seguem a definição do refatoramento. Na prática, desenvolvedores escrevem casos de testes para checar suas implementações de refatoramentos e se preocupam em evitar esses tipos de bugs, pois 84% das asserções de testes do Eclipse e JRRT testam as ferramentas com relação aos bugs citados anteriormente. No entanto, as ferramentas ainda possuem esses bugs. Existem algumas técnicas automáticas para testar ferramentas de refatoramentos, mas elas podem ter limitações relacionadas com tipos de bugs que podem ser detectados, geração de entradas de testes, automação e performance. Este trabalho propõe uma técnica para escalar testes de ferramentas de refatoramentos. A técnica contém DOLLY um gerador automático de programas Java e C, no qual foram adicionadas mais construções de Java (classes e métodos abstratos e interface) e uma estratégia de pular algumas entradas de testes com o propósito de reduzir o tempo de testar as implementações de refatoramentos. Foi proposto um conjunto de oráculos para avaliar a corretude das transformações, dentre eles SAFEREFACTORIMPACT que identifica falhas relacionadas com mudanças comportamentais. SAFEREFACTORIMPACT gera testes apenas para os métodos impactados pela transformação. Além disso, foi proposto um novo oráculo para identificar transformações que não seguem a definição do refatoramento e uma nova técnica para identificar condições muito fortes. A técnica proposta foi avaliada em 28 implementações de refatoramentos de Java (Eclipse e JRRT) e C (Eclipse) e detectou 119 bugs relacionados com erros de compilação, mudanças comportamentais, condições muito fortes, e transformações que não seguem a definição do refatoramento. Usando pulos de 10 e 25 no gerador de programas, a técnica reduziu em 90% e 96% o tempo para testar as implementações de refatoramentos, enquanto deixou de detectar apenas 3% e 6% dos bugs, respectivamente. Além disso, detectou a primeira falha geralmente em alguns segundos. Por fim, com o objetivo de avaliar a técnica proposta com outras entradas de testes, foram avaliadas implementações do Eclipse e JRRT usando os programas de entrada das suas coleções de testes. Neste estudo, nossa técnica detectou mais 31 bugs não detectados pelos desenvolvedores das ferramentas. Defining and implementing refactorings is a nontrivial task since it is difficult to define preconditions to guarantee that the transformation preserves the program behavior. There fore, refactoring engines may have overly weak preconditions, overly strong preconditions, and transformation issues related to the refactoring definition. In practice, developers manually write test cases to check their refactoring implementations. We find that 84% of the test suites of Eclipse and JRRT are concerned with identifying these kinds of bugs. However, bugs are still present. Researchers have proposed a number of techniques for testing refactoring engines. Nevertheless, they may have limitations related to the bug type, program generation, time consumption, and number of refactoring engines necessary to evaluate the implementations. In this work, we propose a technique to scale testing of refactoring engines by extending a previous technique. It automatically generates programs as test inputs using Dolly, a Java and C program generator. We add more Java constructs in DOLLY, such abstract classes and methods and interface, and a skip parameter to reduce the time to test the refactoring implementations by skipping some consecutive test inputs. Our technique uses SAFEREFACTORIMPACT to identify failures related to behavioral changes. It generates test cases only for the methods impacted by a transformation. Also, we propose a new oracle to evaluate whether refactoring preconditions are overly strong by disabling a subset of them. Finally, we present a technique to identify transformation issues related to the refactoring definition. We evaluate our technique in 28 refactoring implementations of Java (Eclipse and JRRT) and C (Eclipse) and find 119 bugs related to compilation errors, behavioral changes, overly strong preconditions, and transformation issues. The technique reduces the time in 90% and 96% using skips of 10 and 25 in Dolly while missing only 3% and 6% of the bugs, respectively. Additionally, it finds the first failure in general in a few seconds using skips. Finally, we evaluate our proposed technique by using other test inputs, such as the input programs of Eclipse and JRRT refactoring test suites. We find 31 bugs not detected by the developers. 2016 2018-06-05T13:58:29Z 2018-06-05 2018-06-05T13:58:29Z info:eu-repo/semantics/publishedVersion info:eu-repo/semantics/doctoralThesis http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/883 SABINO, M. M. C. L. Scaling testing of refactoring engines. 2016. 154 f. Tese (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, 2016. eng info:eu-repo/semantics/openAccess Universidade Federal de Campina Grande PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO UFCG Brasil Centro de Engenharia Elétrica e Informática - CEEI reponame:Biblioteca de Teses e Dissertações da UFCG instname:Universidade Federal de Campina Grande instacron:UFCG