Content area
A introdução de técnicas avançadas de localização de falhas, como as Spectrum-based, prometem ajudar os programadores em localizar código defeituoso de forma automática. Essas técnicas assumem como input a abrangência dos testes, calculam a probabilidade de cada linha de código ser responsável pelo comportamento defeituoso e, finalmente, classificam-nas de acordo com a sua probabilidade. Em estudos empíricos realizados em localização de falhas (o contexto desta dissertação), onde a(s) linha(s) defeituosa(s) são conhecidas à partida, tem-se usado métricas para comparar a eficácia de diferentes técnicas, por exemplo, Exam-score. A técnica que atingir o valor Exam-score mais baixo é considerada a melhor.
Contudo, na presença de falhas de omissão, por exemplo, falta de código para lidar com requisitos específicos, o ranking produzido pela técnica de localização de falhas não incluí a linha defeituosa, uma vez não existe nenhuma. Logo, em tal cenário, como é que o Exam-score de uma certa classificação pode ser calculado se não existe uma explícita linha defeituosa?
Para resolver isto, estudos anteriores propuseram o uso de candidatos, por exemplo, o local onde se pode inserir código para corrigir um programa defeituoso, como um substituto para linhas defeituosas. Pressupõe-se que, se uma técnica de localização de falhas é capaz de identificar as linhas em redor a esse local como as mais suscetíveis de explicar o comportamento defeituoso, o programador inspecioná-las-ia primeiro e provavelmente descobriria que há falta de código. Enquanto a atual abordagem tem sido identificar manualmente as linhas candidatas, é uma tarefa com tendência a erros e demorada. Por exemplo, no Defects4J, um dos benchmarks mais conhecidos, 64% dos bugs contêm pelo menos uma falha de omissão, e investigadores investiram demasiado tempo a determinar as linhas candidatas manualmente.
Por isso, este trabalho apresenta uma ferramenta chamada Automatic identification of Buggy lineS of codE in bug-fixiNg paTches (ABSENT) que calcula as linhas candidatas para as falhas de omissão e com fácil integração de novas regras para diferentes tipos de bugs, explorando técnicas diff baseadas em texto e AST (Abstract Syntax Tree). Com isto, não apenas foi introduzido um método mais eficiente de calcular os candidatos para diferentes bugs, como também demonstrámos um Exam-score mais cientificamente correto para técnicas SBFL de modo a eliminar a subjetividade dos candidatos manualmente identificados. Para além disso, também propomos uma nova regra para determinar linhas candidatas em situações com switch-cases cuja a nossa experiência demonstrou ser efetiva.