Comprehensibility of source code with feature dependency in configurable systems. - Santos, Djan Almeida (2023)
A compilação condicional é frequentemente usada para implementar variabilidade em sistemas configuráveis. Essa técnica depende de #ifdefs para delimitar o código de recursos. Estudos anteriores mostraram que #ifdefs podem dificultar a compreensão do código. No entanto, esses estudos não levaram explicitamente em consideração as dependências de recursos. A dependência de recursos ocorre quando diferentes recursos se referem ao mesmo elemento do programa, como uma variável. A compreensibilidade pode ser ainda mais afetada na presença de dependência de recursos, pois o desenvolvedor deve raciocinar sobre diferentes cenários que afetam a mesma variável. Nosso objetivo é entender como a dependência de recursos afeta a compreensibilidade do código-fonte de sistemas configuráveis. Realizamos quatro estudos empíricos complementares. No Estudo 1, quarenta e seis desenvolvedores responderam a um experimento online. Eles realizaram tarefas nas quais precisavam analisar programas contendo #ifdefs com e sem dependência de recursos. No entanto, as dependências de recursos podem ser de tipos diferentes, dependendo do escopo da variável compartilhada. No Estudo 1, não estávamos preocupados com diferentes tipos de dependência. Portanto, no Estudo 2, realizamos um experimento no qual 30 desenvolvedores depuraram programas com diferentes tipos de dependência de recursos. Cada programa incluía um tipo diferente de dependência de recursos: global, intraprocedural ou interprocedural. Usamos um dispositivo de rastreamento ocular para gravar os movimentos do olhar dos desenvolvedores enquanto depuravam programas. No entanto, as dependências de recursos não diferem apenas em termos de tipos. Elas também podem apresentar diferenças em termos de número de variáveis dependentes e grau de variabilidade, entre outros. Para abordar essas características, complementamos os Estudos 1 e 2 por meio dos Estudos 3 e 4. No Estudo 3, realizamos um experimento controlado com 12 participantes que analisaram programas com diferentes números de variáveis dependentes e número de usos de variáveis dependentes. No Estudo 4, conduzimos um experimento no qual 12 desenvolvedores analisaram programas com diferentes graus de variabilidade. Nossos resultados mostram que: (i) analisar programas contendo #ifdefs e dependência de recursos exigiu mais tempo do que programas contendo #ifdefs, mas sem dependência de recursos, (ii) depurar programas com #ifdefs e dependência global ou interprocedural exigiu mais tempo e esforço visual do que programas com dependência intraprocedural, (iii) quanto maior o número de variáveis dependentes, mais difícil foi entender programas com dependência de recursos, e (iv) o grau de variabilidade não afetou a compreensibilidade de programas com dependência de recursos. Em resumo, nossos estudos mostraram que #ifdefs afetaram a compreensibilidade de sistemas configuráveis em diferentes graus, dependendo da presença ou não de dependência de recursos, do tipo de dependência de recursos e do número de variáveis dependentes.