Agentic Code Reasoning

이 논문은 LLM 에이전트가 코드 실행 없이도 명시적 전제와 추론 경로를 구성하는 '반형식적 추론 (semi-formal reasoning)' 기법을 통해 패치 동등성 검증, 결함 국소화, 코드 질문 답변 등 다양한 작업에서 정확도를 획기적으로 향상시킬 수 있음을 입증합니다.

Shubham Ugare, Satish Chandra

게시일 2026-03-05
📖 4 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

이 논문은 **"코드를 실행하지 않고도, AI 가 코드의 의미를 얼마나 잘 이해할 수 있을까?"**라는 질문에 답하는 연구입니다.

여기서 핵심은 '실행 (Testing)' 없이 '이해 (Reasoning)'만으로 코드가 제대로 작동하는지, 혹은 버그가 어디에 있는지 찾아내는 능력입니다. 이를 위해 연구진은 **'반-형식적 추론 (Semi-formal Reasoning)'**이라는 새로운 방법을 제안했습니다.

이 복잡한 내용을 일상적인 비유로 쉽게 설명해 드릴게요.


🕵️‍♂️ 비유: "수사관 vs 추리 소설 작가"

코드를 분석하는 AI 를 두 가지 타입의 인물로 상상해 보세요.

  1. 기존 방식 (표준 추론) = "추리 소설 작가"

    • 이 작가는 코드를 읽으면서 "아, 이 함수는 분명히 저런 역할을 하겠지!"라고 직관과 감으로 결론을 내립니다.
    • 문제점: 감이 맞을 때도 있지만, 중요한 디테일을 놓치거나 "아마 그럴 거야"라고 말하며 가정을 합니다. 마치 범인을 잡을 때 "저 사람이 범인일 거야"라고 말하고 끝내는 것과 같습니다.
    • 결과: 가끔은 틀린 결론을 내더라도 "정답"이라고 착각할 수 있습니다.
  2. 새로운 방식 (반-형식적 추론) = "엄격한 형사 (수사관)"

    • 이 형사는 결론을 내리기 전에 반드시 증거를 수집해야 합니다.
    • "범인은 A 입니다"라고 말하기 전에, "A 가 현장에 있었음 (증거 1), A 가 도구를 소지했음 (증거 2), A 가 범행 동기가 있음 (증거 3)"을 단계별로 기록해야 합니다.
    • 핵심: "감"이 아니라 논리적 증거를 바탕으로 결론을 내립니다. 만약 증거가 부족하면 "모르겠다"고 인정하거나, 더 깊이 파고듭니다.

🧩 이 연구가 해결한 세 가지 주요 사건

연구진은 이 '엄격한 형사' 방식을 세 가지 다른 사건에 적용해 보았습니다.

1. 두 개의 패치 (수정안) 가 같은가? (Patch Equivalence)

  • 상황: 개발자가 버그를 고치기 위해 두 가지 다른 수정안 (패치) 을 냈습니다. 둘 다 같은 문제를 해결한 걸까요?
  • 기존 방식의 실수: "둘 다 숫자를 2 자리로 만드는 거니까 똑같겠지!"라고 생각했습니다.
  • 형사의 발견: "잠깐! 첫 번째 수정안은 format 함수를 썼는데, 이 프로젝트에서는 format 이라는 이름의 다른 함수가 이미 존재해서 원래 함수를 가리고 (Shadowing) 있었습니다. 그래서 첫 번째 수정안은 실패할 겁니다!"
  • 결과: 코드를 실제로 실행해 보지 않아도, 함수 이름이 겹치는지 확인하는 논리적 추적을 통해 정답을 맞혔습니다. 정확도가 78% 에서 88% 로 크게 올랐습니다.

2. 버그는 어디에 숨어 있을까? (Fault Localization)

  • 상황: 프로그램이 멈췄습니다. 수천 줄의 코드 중에서 버그가 있는 줄을 찾아야 합니다.
  • 기존 방식: "여기서 에러가 났으니, 에러가 난 줄이 문제겠지!"라고 바로 결론 내렸습니다. (증상은 맞지만 원인은 아님)
  • 형사의 발견: "에러가 난 줄은 결과일 뿐이야. 그 에러를 일으킨 진짜 원인은 100 줄 전의 다른 파일에 있는 설정 값을 잘못 덮어쓴 데서 왔어."
  • 결과: 에러가 발생한 '증상'이 아닌, 원인을 파고드는 논리적 추적을 통해 버그 위치를 훨씬 정확하게 찾아냈습니다.

3. 코드에 대한 질문에 답하기 (Code Question Answering)

  • 상황: "이 함수는 어떤 데이터를 처리할까?" 같은 질문에 답해야 합니다.
  • 기존 방식: 함수 이름을 보고 "이건 리스트를 처리하는 거겠지"라고 추측했습니다.
  • 형사의 발견: "함수 이름만 보고 말하지 마. 코드를 따라가 보니, 이 함수는 리스트가 아니라 '날짜'만 처리하도록 설계되어 있어. 그리고 이 변수는 절대 수정되지 않아."
  • 결과: **데이터가 어떻게 흐르는지 (Data Flow)**를 직접 추적하며 답을 냈습니다.

💡 왜 이 방법이 중요한가요? (실제 효과)

이 연구의 가장 큰 장점은 **"코드를 실행 (Test) 하지 않아도 된다"**는 점입니다.

  • 기존 방식: 코드가 제대로 작동하는지 확인하려면, 개발 환경을 세팅하고 코드를 실행시켜야 합니다. 이는 시간도 많이 들고 비용도 많이 듭니다. (마치 새 차를 사기 전에 매일 타고 다니며 고장 나는지 확인하는 것과 같음)
  • 새로운 방식: AI 가 코드를 읽으며 논리적으로 증명하면, 실행 없이도 "이 코드는 안전하다"고 판단할 수 있습니다.
    • 효과: AI 가 코드를 스스로 수정하고 학습하는 과정 (RL) 에서, 매번 실행해 볼 필요 없이 빠르고 저렴하게 피드백을 줄 수 있게 됩니다.

📝 한 줄 요약

"AI 에게 코드를 분석할 때 '감'으로 결론 내리지 말고, '증거'를 바탕으로 단계별로 논리를 펼쳐보라고 시켰더니, 코드를 실행해 보지 않아도 훨씬 더 똑똑하고 정확한 판단을 내리게 되었다."

이 방법은 앞으로 AI 가 코드를 작성하고 검토하는 과정에서, 실행 비용 없이도 신뢰할 수 있는 '디지털 검사관' 역할을 할 수 있는 가능성을 열었습니다.