Defesa de exame de qualificação de Gustavo Soares 27/11, 8h00

postado em 9 de nov de 2012 07:19 por Nazareno Ferreira de Andrade   [ 22 de nov de 2012 13:35 atualizado‎(s)‎ ]
Candidato: Gustavo Araújo Soares
Título do trabalho: Uma Técnica para Testar Ferramentas de Refactoring
Orientador(es): Rohit Gheyi

Data: 27/11/2012
Horário: 08h00
Local: auditório do CEEI

Banca examinadora: Alessandro Garcia (PUC Rio), Paulo Borba (UFPE), Tiago Massoni (UFCG), Patrícia Machado (UFCG). 

Resumo: Refatoramentos são transformações aplicadas 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 envolve riscos, como a introdução de faltas no programa. Para ajudar o desenvolvedor nesse processo, surgiram as ferramentas de refatoramento. Elas checam pré-condições necessárias para garantir a preservação do comportamento, e quando essas pré-condições são satisfeitas, aplicam a transformação desejada. É importante testar bem essas ferramentas para evitar pré-condições muito fracas -- que permitem a aplicação de transformações que introduzem erros de compilação ou mudanças comportamentais -- e pré-condições muito fortes -- que impedem a aplicação de transformações corretas. No entanto, testar essas ferramentas não é uma tarefa simples. Para criar um teste, o desenvolvedor precisa escrever um programa para ser refatoramento, como entrada para o teste. Além disso, é preciso raciocinar se a transformação desejada preserva ou não o comportamento, para especificar a saída desejada da ferramenta: um programa refatorado, ou uma mensagem de aviso se uma pré-condição não é satisfeita. Devido aos custos, escrever manualmente uma coleção desses testes pode resultar em uma coleção com baixa cobertura de entradas possíveis, o que pode deixar muitas faltas encobertas. Nesse trabalho, é proposto uma técnica para automatizar o teste de ferramentas de refatoramento para Java. Ela possui dois componentes principais: JDolly, um gerador de programas Java capaz de gerar exaustivamente programas para um determinado escopo de elementos Java; SafeRefactor, uma ferramenta para identificar mudanças comportamentais em transformações. Para testar uma implementação de refatoramento, o desenvolvedor especifica a geração de programas no JDolly. Para cada programa gerado, o refatoramento em teste é aplicado. Então a técnica utiliza oráculos baseados no SafeRefactor para detectar pré-condições muito fracas ou fortes. Por fim, as falhas detectadas são classificadas em tipos distintos de faltas. Adicionalmente, propomos uma técnica para priorizar os casos de testes para otimizar a detecção dessas faltas. Nós avaliamos a eficiência da nossa técnica testando 3 ferramentas: Eclipse 3.7, NetBeans 7.0.1, e duas versões do JastAdd Refactoring Tools (JRRTv1 e JRRTv2). Foram testados até 10 refatoramentos em cada ferramenta. No total, nossa técnica identificou 34 faltas relacionadas a pré-condições fracas no Eclipse, 51 faltas no NetBeans, 24 faltas no JRRTv1, e 11 faltas no JRRTv2. Além disso, foram encontradas 17 e 7 faltas relacionadas a pré-condições muito fortes no Eclipse e JRRTv1, respectivamente. Nossa avaliação, não só fornece evidências da eficiência da nossa técnica, como também ilustra desafios para implementar ferramentas de refatoramento, através de um conjunto de faltas submetido aos seus desenvolvedores. 
Comments