Uma abordagem automatizada para testar refatoramento de programas.
Por Eder Andrade
(eder.rodrigues@ccc.ufcg.edu.br)
Com o objetivo de "limpar" o sistema melhorando a legibilidade, estrutura e clareza do código, as ferramentas de refatoramento são constantemente utilizadas por desenvolvedores de software. Nesta edição, falaremos sobre uma pesquisa desenvolvida no Laboratório SPG, onde, alguns pesquisadores do departamento de computação da UFCG, propuseram uma técnica para testar essas ferramentas de refatoramento para Java®.




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 do programa, aplicar refatoramentos também pode 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 essas condições são satisfeitas, aplicam a transformação desejada. Atualmente, os principais ambiente de desenvolvimento (IDEs), como o Eclipse e Visual Studio, automatizam um conjunto de refatoramentos. No entanto, é difícil identificar o conjunto minimo de condições necessárias para cada refatoramento. Consequentemente, desenvolvedores dessas ferramentas podem não estar cientes de todas as condições, resultando em ferramentas que aplicam transformações incorretas, introduzindo erros de compilação ou mudanças comportamentais no código do usuário, como também podem implementar condições muito fortes, impedindo que a ferramenta aplique transformações corretas.

Tem sido desenvolvido no Laboratório SPG um trabalho que propõe uma técnica para testar ferramentas de refatoramento para Java com o objetivo de identificar problemas relacionados a condições não implementadas, ou condições muito fortes implementadas pelos desenvolvedores dessas ferramentas. Primeiramente, são gerados automaticamente um conjunto de programas para serem refatorados. Para isso, propõe-se um gerador de programas Java, JDolly, que gera exaustivamente programas para um determinado escopo de elementos Java. Em seguida, para cada programa gerado, aplica-se o refatoramento desejado utilizando a ferramenta em teste. Para detectar falhas nas transformações aplicadas, foi proposto o SafeRefactor, uma ferramenta para detectar mudanças comportamentais. Por outro lado, quando as transformações são rejeitadas pela ferramenta, propõe-se uma abordagem de teste de diferencial para detectar condições fortes. Ela compara o resultado da ferramenta em teste com os resultados de outras ferramentas. Por fim, as falhas detectadas são classificadas em tipos distintos de faltas. A eficiência da técnica proposta foi testada em 3 ferramentas: Eclipse 3.7, NetBeans 7.0.1, e duas versões do JastAdd Refactoring Tools (JRRTv1 e JRRTv2). Foram testados até 10 implementações de refatoramento em cada ferramenta. No total, a técnica identificou 34 bugs relacionadas a condições não implementadas no Eclipse, 51 bugs no NetBeans, 24 bugs no JRRTv1, e 11 bugs no JRRTv2. Além disso, foram encontradas 17 e 7 condições muito fortes no Eclipse e JRRTv1, respectivamente.

O projeto é integrado pelos professores Rohit Gheyi e Thiago Massoni e os alunos Gustavo Soares, Melina Mongiovi, Larissa Braz, Alan Moraes. Desenvolvido no Laboratório SPG: Software Productivity Group.

O projeto obteve diversas premiações como:

O trabalho de doutorado de Gustavo Soares ('Automated Behavioral Testing of Refactoring Engines'') recebeu o prêmio de melhor trabalho de doutorado no Student Research Competition - SPLASH 2012. Gustavo Soares tambem recebeu o prêmio John Vlissides. Seu trabalho ('Automated Behavioral Testing of Refactoring Engines'') foi escolhido como o trabalho mais promissor no simpósio de doutorado do SPLASH 2012 e sua dissertação de mestrado(Making program refactoring safer) foi eleita a melhor dissertação de mestrado da América Latina no CLEI 2010.

O trabalho de graduação Melina Mongiovi (Safira: A tool for evaluating behavior preservation) recebeu o prêmio de segundo melhor trabalho no Student Research Competition - SPLASH 2011.

O artigo "Analyzing Refactorings on Software Repositories" recebeu o prêmio de melhor artigo no Simpósio Brasileiro de Engenharia de Software (SBES 2011).

O pôster “Making program refactoring safer” recebeu o prêmio de segundo melhor pôster no ECOOP 2011.

A ferramenta SafeRefactor foi eleita a melhor ferramenta no Simpósio Brasileiro de Engenharia de

Software (SBES tools - 2009).

Alguns de seus artigos publicados são:

Automated Behavioral Testing of Refactoring Engines. Gustavo Soares, Rohit Gheyi and Tiago

Massoni. IEEE Transactions on Software Engineering, 2013

Comparing Approaches to Analyze Refactoring Activity on Software Repositories. Gustavo Soares, Rohit Gheyi, Emerson Murphy-Hill and Brittany Johnson. Journal of Systems and Software, 2013.

Live Feedback on Behavioral Changes. Gustavo Soares, Emerson Murphy-Hill and Rohit Gheyi. In LIVE: First International Workshop on Live Programming, 2013.

Identifying overly strong conditions in refactoring implementations. Gustavo Soares, Melina Mongiovi and Rohit Gheyi. In ICSM '11: 27th IEEE International Conference on Software Maintenance, pages 173-182, 2011.

Analyzing Refactoring on Software Repositories. Gustavo Soares, Bruno Catão, Catuxe Varjão,Solon Aguiar, Rohit Gheyi and Tiago Massoni. In SBES ' 11: XXV Brazilian Symposium on Software Engineering, 2011.

Making aspect-oriented refactoring safer. Gustavo Soares, Diego Cavalcanti and Rohit Gheyi. InSBLP '11: XV Brazilian Symposium on Programming Languages, 2011.

Making Program Refactoring Safer. Gustavo Soares, Rohit Gheyi, Dalton Serey and Tiago Massoni. IEEE Software, 27:52-57, 2010.

Generating Unit Tests for Checking Refactoring Safety. Gustavo Soares, Rohit Gheyi, Tiago Massoni and Marcio Cornelio and Diego Cavalcanti. In Brazilian Symposium on Programming Languages (SBLP), pages 159-172, Gramado, Brazil, 2009.

Para mais informações, acesse: http://www.dsc.ufcg.edu.br/~spg/wiki/index.php

Jornal PETNews - Edição: Rafael Rêgo - Revisão: Lívia Sampaio
Grupo PET Computação UFCG, 2013. All rights reserved.