Improved Bug Localization with AI Agents Leveraging Hypothesis and Dynamic Cognition
이 논문은 인과 추론, 호출 그래프 기반 루트 원인 분석, 그리고 가설 검증을 통해 개발자의 디버깅 방식을 모방하는 다중 AI 에이전트 'CogniGent'를 제안하여 기존 기법보다 문서 및 메서드 수준에서 위상 평균 순위 (MAP) 와 평균 순위 역수 (MRR) 를 크게 향상시킨 향상된 버그 위치 특정 기술을 소개합니다.
소프트웨어에는 항상 버그 (오류) 가 생깁니다. 개발자들은 이 버그를 고치는 데 시간을 거의 다 보냅니다. 전통적인 방법들은 마치 방대한 도서관에서 책 제목만 보고 "아마 이 책에 답이 있겠지?"라고 추측하는 것과 비슷했습니다.
전통적인 방법 (IR 기반): 버그 보고서를 검색해서 비슷한 단어가 있는 코드를 찾습니다. 하지만 "책 제목"과 "내용"이 다를 수 있어 정확한 답을 찾기 어렵습니다.
최근의 AI 방법 (LLM 기반): 큰 두뇌를 가진 AI 가 코드를 읽게 하지만, AI 는 연결고리를 놓치거나 너무 많은 정보를 한 번에 받아들이려다 혼란에 빠지기도 합니다. 마치 방대한 책장 전체를 한눈에 보려다 눈이 어지러워진 상태와 같습니다.
🧠 2. CogniGent 의 해결책: "현직 탐정처럼 생각하게 만들다"
저자들은 이 문제를 해결하기 위해 **인간 개발자의 사고방식 (Dynamic Cognitive Debugging)**을 AI 에게 심어주었습니다.
🕵️♂️ 비유: "수사팀이 된 AI 에이전트들"
CogniGent 는 혼자 일하는 AI 가 아니라, 각자 역할이 다른 6 명의 AI 수사관 (에이전트) 팀으로 구성되어 있습니다.
수사관 (Hypothesis Agent): "버그 보고서"를 보고 "아마 이 부분에서 문제가 생겼을 거야!"라는 **가설 (추정)**을 여러 개 세웁니다.
현장 조사관 (Investigation Agent): 가설을 검증하기 위해 코드를 직접 찾아갑니다. 여기서 중요한 건 단순히 코드를 읽는 게 아니라, "이 함수가 저 함수를 부르고, 그 함수가 또 다른 함수를 부른다"는 연결고리를 따라가는 것입니다.
비유: 범죄 현장에서 범인이 도망친 경로를 따라가듯, 코드가 서로 어떻게 연결되어 있는지 (Call Graph) 를 깊이 있게 추적합니다.
기록관 (Scratchpad): 조사 과정에서 너무 많은 정보를 기억하지 못하도록, 중요한 단서만 따로 메모장에 정리해 줍니다. (AI 가 기억력을 잃지 않게 도와주는 역할)
검증관 (Observer Agent): 모든 조사가 끝나면, "이 가설이 정말 맞을까?"를 최종적으로 판단하고 가장 유력한 범인 (버그가 있는 코드) 을 순위별로 나열합니다.
🚀 3. 핵심 기술: "클릭 2 코즈 (Click2Cause)"
이 팀이 사용하는 특별한 수사법은 **"Click2Cause"**라는 알고리즘입니다.
기존 방식: 도서관에서 책장을 한 줄씩 훑어보는 방식 (너무 느리고 비효율적).
CogniGent 방식: 개발자가 코드에서 Ctrl+Click을 눌러 함수를 따라가는 것처럼, 가장 의심스러운 경로부터 깊이 있게 파고드는 방식입니다.
만약 한 경로가 "아, 여기는 아니야"라고 판단되면, 바로 그 경로를 끊고 (Backtrack) 다른 유력한 경로로 넘어갑니다. 이렇게 해서 시간과 에너지를 아끼면서 정답을 찾습니다.
📊 4. 결과: "기존 방법보다 훨씬 강력하다"
이 팀은 591 개의 실제 버그 보고서로 실험을 했습니다. 결과는 놀라웠습니다.
성능: 기존 최고의 기술들보다 23%~53% 더 정확하게 버그를 찾아냈습니다.
특이점: 버그가 여러 파일에 걸쳐 퍼져있을 때 (연쇄 사고) CogniGent 가 특히 강력했습니다. 마치 연쇄 살인 사건의 모든 연결고리를 찾아낸 탐정처럼, 고립된 정보가 아니라 전체적인 흐름을 파악했기 때문입니다.
💡 5. 한 줄 요약
CogniGent 는 단순히 코드를 검색하는 AI 가 아니라, 인간 개발자처럼 "가설을 세우고, 증거를 수집하며, 연결고리를 추적하는" 똑똑한 AI 수사팀입니다. 덕분에 개발자들은 버그를 찾는 데 드는 시간을 획기적으로 줄일 수 있게 되었습니다.
이 기술은 앞으로 소프트웨어가 더 안전하고 빠르게 만들어지는 데 큰 역할을 할 것으로 기대됩니다.
1. 연구 배경 및 문제 정의 (Problem)
소프트웨어 버그는 기술 기업에 연간 수십억 달러의 손실을 입히며, 개발자들은 작업 시간의 약 50% 를 버그 해결에 할애하고 있습니다. 기존의 자동화된 버그 로컬라이제이션 (Bug Localization) 기술은 다음과 같은 한계를 가지고 있습니다.
고립된 분석: 전통적인 방법 (스펙트럼 기반, 정보 검색 기반) 은 코드 컴포넌트 (메서드, 문서 등) 를 고립된 상태로 분석하여, 다른 컴포넌트 간의 의존성이나 상호작용을 간과합니다.
인과 관계 추론 부재: 버그 리포트는 주로 증상 (symptoms) 을 기술하지만, 기존 LLM 기반 에이전트들은 증상과 결함 코드 사이의 인과적 연결을 추론하지 못하거나, 리포트에 명시된 코드 엔티티가 없을 경우 탐색을 시작점을 찾기 어려워합니다.
컨텍스트 관리의 비효율성: 코드 탐색 과정에서 LLM 의 컨텍스트 길이가 증가함에 따라 성능이 저하되고, 관련 없는 정보가 포함될 경우 비용과 추론 시간이 급증하는 문제가 있습니다.
2. 제안된 방법론: CogniGent (Methodology)
저자들은 개발자의 디버깅 방식을 모방한 **동적 인지 디버깅 (Dynamic Cognitive Debugging)**을 구현한 새로운 에이전트 기반 기술인 CogniGent를 제안합니다. 이는 다중 AI 에이전트, 가설 검증, 그리고 인과적 추론을 결합합니다.
핵심 구성 요소 및 워크플로우
그래프 기반 소스 코드 인덱싱:
전체 문서를 단위로 하지 않고, 메서드, 생성자 등 기능적 단위로 코드를 분할하여 인덱싱합니다.
Neo4j 를 사용하여 호출 그래프 (Call Graph) 기반의 이종 그래프를 구축하고, JavaParser 를 통해 컴포넌트 간의 호출, 상속 등의 관계를 추출합니다.
다중 에이전트 파이프라인 (6 개 역할별 에이전트):
재구성 에이전트 (Restructuring): 버그 리포트의 노이즈를 제거하고 LLM 이 이해하기 쉬운 형태로 재구성합니다.
검색 에이전트 (Retrieval): 재구성된 리포트를 기반으로 Neo4j 인덱스에서 잠재적 결함 코드를 검색합니다.
필터링 에이전트 (Filtering): LLM 의 추론 능력을 활용해 검색된 후보 중 버그와 관련성이 높은 소수 (예: 상위 10 개) 를 선별합니다.
가설 생성 에이전트 (Hypothesis): 버그 증상과 필터링된 코드를 바탕으로 결함의 근본 원인 (Root Cause) 에 대한 여러 가설을 생성하고 신뢰도를 부여합니다.
조사 에이전트 (Investigation):가장 핵심적인 단계로, 생성된 가설을 검증하기 위해 코드를 탐색합니다.
Click2Cause 알고리즘: 개발자가 Ctrl+Click으로 호출 체인을 따라가는 방식을 모방한 깊이 우선 탐색 (DFS) 알고리즘입니다. 이는 기존 에이전트들의 너비 우선 탐색 (BFS) 과 달리, 특정 경로를 깊이 있게 추적하며 불확실성이 높은 경로는 가지치기 (Pruning) 합니다.
Scratchpad 기반 컨텍스트 관리: 각 에이전트가 독립적인 메모리 (Scratchpad) 를 유지하여 컨텍스트 혼란을 방지하고, 불필요한 정보로 인한 LLM 성능 저하를 막습니다.
관찰자 에이전트 (Observer): 조사된 코드 체인과 증거를 최종적으로 평가하여 가설의 적합성을 판단하고 최종 순위 목록을 생성합니다.
3. 주요 기여 (Key Contributions)
동적 인지 디버깅의 에이전트 구현: 버그 리포트를 바탕으로 가설을 수립하고, 인과 관계를 추론하며 코드를 체계적으로 탐색하는 인간과 유사한 디버깅 프로세스를 AI 에이전트 워크플로우로 구현했습니다.
Click2Cause 알고리즘: 호출 그래프를 따라 깊이 우선 탐색을 수행하며, LLM 의 추론에 기반하여 동적으로 탐색 깊이와 경로를 제어하는 새로운 알고리즘을 제안했습니다.
광범위한 평가: 15 개 소프트웨어 시스템의 591 개 버그 리포트를 사용하여, 문서 (Document) 및 메서드 (Method) 레벨에서 기존 IR 기반 및 LLM 기반 6 가지 베이스라인과 비교 평가했습니다.
재현성 확보: 프로토타입, 정제된 데이터셋, 설정 세부사항을 포함한 재현 패키지를 공개했습니다.
4. 실험 결과 (Results)
CogniGent 는 3 가지 주요 지표 (MAP, MRR, HIT@K) 를 사용하여 평가되었으며, 모든 기존 기법 (전통적 IR 및 최신 LLM 기반) 을 압도적으로 능가했습니다.
성능 향상:
MAP (평균 정밀도): 문서 레벨에서 23.33%~38.57% 향상, 메서드 레벨에서도 동등한 수준의 개선을 보였습니다.
MRR (평균 역순위): 문서 및 메서드 레벨에서 25.14%~53.74% 향상.
HIT@1: 버그가 있는 문서가 1 위에 랭크될 확률이 기존 IR 대비 약 16% 이상 증가했습니다.
베이스라인 비교:
기존 IR 기법 (Lucene, BLUiR 등) 과 비교하여 MAP 에서 최대 23.33% 개선.
최신 LLM 기반 에이전트 (LocAgent, Agentless 등) 와 비교하여 문서 레벨 MAP 에서 8.53%~22.59% 개선, 메서드 레벨에서는 최대 31.39% 개선.
다중 컴포넌트 버그: 여러 파일이나 메서드에 걸친 버그 (Propagated Bugs) 를 로컬라이제이션하는 데 특히 효과적이었으며, 통계적 유의성 검정 (Wilcoxon signed-rank test) 을 통해 성능 우위가 입증되었습니다.
에이전트 모듈 기여도: 가설 생성 (Hypothesis) 과 조사 (Investigation) 모듈이 전체 성능 향상에 가장 큰 기여 (약 19% 감소 시 성능 저하) 를 했으며, 이는 동적 인지 디버깅의 핵심임을 보여줍니다.
5. 의의 및 결론 (Significance)
이 연구는 소프트웨어 버그 로컬라이제이션 분야에서 다음과 같은 중요한 의의를 가집니다:
인과적 추론의 도입: 단순한 텍스트 매칭이나 표면적 유사성을 넘어, 버그 증상과 코드 간의 **인과적 연결 (Causal Reasoning)**을 통해 근본 원인을 파악하는 새로운 패러다임을 제시했습니다.
인간 인지 모방: 개발자가 실제로 수행하는 '가설 수립 - 증거 수집 - 검증' 과정을 AI 에이전트 워크플로우로 성공적으로 구현하여, 복잡한 의존성을 가진 코드베이스에서도 정확한 로컬라이제이션이 가능함을 증명했습니다.
실용성: 컨텍스트 관리 기술 (Scratchpad) 과 효율적인 탐색 알고리즘 (Click2Cause) 을 통해 LLM 기반 접근법의 비용과 정확도 문제를 동시에 해결하여, 실제 산업 환경에 적용 가능한 수준의 성능을 달성했습니다.
결론적으로, CogniGent는 기존 자동화 도구의 한계를 극복하고, 인간과 유사한 인지 능력을 갖춘 AI 에이전트를 통해 소프트웨어 유지보수 효율성을 획기적으로 높일 수 있는 기술적 진전을 이루었습니다.