Improving bug localization by mining crash reports: an empirical study - Medeiros, Marcos Alexandre de Melo (2020)
As informações disponíveis nos relatórios de falhas estão sendo usadas para entender a causa raiz dos erros e melhorar a qualidade geral dos sistemas. No entanto, esses relatórios geralmente levam a uma enorme quantidade de informações, sendo necessário aplicar técnicas que visam consolidar os dados em grupos de acordo com um conjunto de critérios bem definidos. Nesta dissertação, contribuímos com uma personalização de regras que automaticamente localizam e agrupam relatórios de falhas correlacionados (de acordo com seus stack traces) no contexto de sistemas Web de larga escala. Para isso, selecionamos e adaptamos algumas abordagens descritas na literatura sobre o agrupamento de relatórios de falhas e a classificação de arquivos suspeitos por travar o sistema. Em seguida, projetamos e implementamos uma ferramenta de software para identificar e classificar arquivos com erro usando stack traces presentes nos relatórios de falhas. Usamos nossa ferramenta e nossa abordagem para identificar e classificar arquivos com erros, ou seja, arquivos com maior probabilidade de causarem uma falha e que, portanto, necessitam de uma correção. Avaliamos nossa abordagem comparando dois conjuntos de classes e métodos: as classes (métodos) que os desenvolvedores alteraram para corrigir um bug e as classes (métodos) suspeitas de conterem um bugs dentre as que estão presentes nos stack traces dos relatórios de falhas correlacionados. Nosso estudo fornece novas evidências acerca do potencial do uso de grupos de relatórios de falhas para indicar corretamente classes e métodos com erro, dentre as que estão presentes nos stack traces. Por exemplo, identificamos com êxito uma classe com erro, com recall variando de 61,4% a 77,3% e precisão variando de 41,4% a 55,5%, considerando o 1, 3, 5 e 10 arquivos suspeitos identificados e classificados por nossa abordagem. A principal implicação de nossa abordagem é que os desenvolvedores podem localizar e corrigir a causa raiz de um relatório de falha considerando algumas classes ou métodos, em vez de revisar milhares de ativos.