Uma técnica para compilar sistemas configuráveis com #ifdefs baseada no impacto da mudança.

Detalhes bibliográficos
Ano de defesa: 2016
Autor(a) principal: BRASILEIRO, Larissa Nadja Braz.
Orientador(a): Não Informado pela instituição
Banca de defesa: Não Informado pela instituição
Tipo de documento: Dissertação
Tipo de acesso: Acesso aberto
Idioma: por
Instituição de defesa: 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
Programa de Pós-Graduação: Não Informado pela instituição
Departamento: Não Informado pela instituição
País: Não Informado pela instituição
Palavras-chave em Português:
Link de acesso: http://dspace.sti.ufcg.edu.br:8080/jspui/handle/riufcg/735
Resumo: Sistemas configuráveis tipicamente usam #ifdefs para denotar variabilidade. Gerar e compilar todas as configurações de um sistema pode consumir tempo. Uma alternativa consiste em usar analisadores sintáticos conscientes de variabilidade, como TypeChef. Porém, eles podem não escalar. Na prática, desenvolvedores podem utilizar estratégias de amostragem (sampling) para compilar apenas um subconjunto das configurações. Este trabalho propõe uma técnica para compilar sistemas configuráveis com #ifdefs baseada no impacto da mudança através da análise apenas das configurações impactadas por uma mudança de código. A técnica foi implementada em uma ferramenta chamada CHECKCONFIGMX, que reporta os novos erros de compilação introduzidos pela transformação. Um estudo empírico foi realizado para avaliar 3,913 transformações aplicadas aos 14 maiores arquivos dos sistemas configuráveis BusyBox, Apache HTTPD, e Expat. CHECKCONFIGMX encontrou 595 erros de compilação de 20 tipos introduzidos por 41 desenvolvedores em 214 commits (5.46% das transformações analisadas). No estudo realizado, a ferramenta reduziu ao menos 50% (uma média de 99%) o número de configurações compiladas em comparação à abordagem exaustiva, sem considerar feature models. CHECKCONFIGMX pode ajudar os desenvolvedores a reduzir o esforço de avaliar transformações de granularidade fina aplicadas a sistemas configuráveis com #ifdefs.