GraphLocator: Raciocínio Causal Guiado por Grafos para Localização de Problemas
GraphLocator: Graph-guided Causal Reasoning for Issue Localization
December 27, 2025
Autores: Wei Liu, Chao Peng, Pengfei Gao, Aofan Liu, Wei Zhang, Haiyan Zhao, Zhi Jin
cs.AI
Resumo
A tarefa de localização de problemas visa identificar os locais em um repositório de software que requerem modificação, dada uma descrição do problema em linguagem natural. Esta tarefa é fundamental, mas desafiadora na engenharia de software automatizada, devido ao hiato semântico entre a descrição do problema e a implementação do código-fonte. Este hiato manifesta-se como dois descompassos: (1) descompassos sintoma-causa, onde as descrições não revelam explicitamente as causas-raiz subjacentes; (2) descompassos um-para-muitos, onde um único problema corresponde a múltiplas entidades de código interdependentes. Para abordar estes dois descompassos, propomos o GraphLocator, uma abordagem que mitiga os descompassos sintoma-causa através da descoberta de estrutura causal e resolve os descompassos um-para-muitos via desagregação dinâmica de problemas. O artefacto chave é o grafo causal de problemas (CIG), no qual os vértices representam subproblemas descobertos juntamente com as suas entidades de código associadas, e as arestas codificam as dependências causais entre eles. O fluxo de trabalho do GraphLocator consiste em duas fases: localização de vértices-sintoma e descoberta dinâmica do CIG; primeiro identifica locais de sintoma no grafo do repositório, depois expande dinamicamente o CIG raciocinando iterativamente sobre vértices vizinhos. Experiências em três conjuntos de dados do mundo real demonstram a eficácia do GraphLocator: (1) Comparado com linhas de base, o GraphLocator alcança uma localização mais precisa com melhorias médias de +19,49% em *recall* a nível de função e +11,89% em precisão. (2) O GraphLocator supera as linhas de base tanto em cenários de descompasso sintoma-causa como um-para-muitos, alcançando melhorias de *recall* de +16,44% e +19,18%, e melhorias de precisão de +7,78% e +13,23%, respetivamente. (3) O CIG gerado pelo GraphLocator produz a maior melhoria relativa, resultando num aumento de 28,74% no desempenho da tarefa de resolução subsequente.
English
The issue localization task aims to identify the locations in a software repository that requires modification given a natural language issue description. This task is fundamental yet challenging in automated software engineering due to the semantic gap between issue description and source code implementation. This gap manifests as two mismatches:(1) symptom-to-cause mismatches, where descriptions do not explicitly reveal underlying root causes; (2) one-to-many mismatches, where a single issue corresponds to multiple interdependent code entities. To address these two mismatches, we propose GraphLocator, an approach that mitigates symptom-to-cause mismatches through causal structure discovering and resolves one-to-many mismatches via dynamic issue disentangling. The key artifact is the causal issue graph (CIG), in which vertices represent discovered sub-issues along with their associated code entities, and edges encode the causal dependencies between them. The workflow of GraphLocator consists of two phases: symptom vertices locating and dynamic CIG discovering; it first identifies symptom locations on the repository graph, then dynamically expands the CIG by iteratively reasoning over neighboring vertices. Experiments on three real-world datasets demonstrates the effectiveness of GraphLocator: (1) Compared with baselines, GraphLocator achieves more accurate localization with average improvements of +19.49% in function-level recall and +11.89% in precision. (2) GraphLocator outperforms baselines on both symptom-to-cause and one-to-many mismatch scenarios, achieving recall improvement of +16.44% and +19.18%, precision improvement of +7.78% and +13.23%, respectively. (3) The CIG generated by GraphLocator yields the highest relative improvement, resulting in a 28.74% increase in performance on downstream resolving task.