Assessing Coherency and Consistency of Code Execution Reasoning by Large Language Models
이 논문은 LLM 의 코드 실행 시뮬레이션 능력과 추론의 일관성을 평가하기 위해 'CES'라는 새로운 과제를 제안하며, 기존 모델들이 정답을 맞춘 경우에도 논리적 비일관성이나 데이터 유출 등 추론 단축에 의존할 가능성이 높고, 특히 버그 관련 작업에서 실행 추론이 제대로 활용되지 않아 일반화 능력에 위협이 될 수 있음을 보여줍니다.
지금까지 AI 가 코딩 문제를 풀 때, **정답 (Output)**만 맞으면 "잘했다!"라고 칭찬했습니다. 하지만 이 논문은 **"정답을 맞췄다고 해서 그 AI 가 논리적으로 코드를 실행한 건 아닐 수도 있다"**고 경고합니다.
저자들은 이를 검증하기 위해 **CES (코드 실행 시뮬레이션)**라는 새로운 시험을 만들었습니다.
1. 비유: "요리사 시험"
기존 방식 (REval 등): 요리사에게 "이 요리를 만들어줘"라고 하고, 완성된 요리의 맛만 봅니다. 맛이 좋으면 "훌륭한 요리사!"라고 칭찬합니다.
새로운 방식 (CES): 요리사가 재료를 다듬고, 불을 조절하고, 소스를 섞는 과정 전체를 실시간으로 지켜봅니다.
만약 요리사가 "소금 1 스푼 넣으려다가 실수로 설탕을 넣었는데 (과정 오류), 어쩐지 최종 요리는 맛있다 (정답)"라고 하면?
기존 방식은 "맛있다 = 성공"이라고 하지만, **CES 는 "아, 이 요리사는 과정을 엉망으로 해놓고 운 좋게 맛이 나온 거야. 이건 사기 (Hallucination) 나 데이터 베이스 암기일 뿐이야"**라고 간파해냅니다.
🚨 이 논문이 발견한 놀라운 사실들
1. "가짜 천재"가 많다 (Coherency - 일관성)
AI 들 중에는 GPT-4 나 DeepSeek-R1 같은 최상위 모델들도 많습니다. 그런데 이 논문은 이 모델들이 **가장 많은 '가짜 정답'**을 낸다고 지적합니다.
이유: AI 가 코드를 하나하나 계산하기보다, "함수 이름만 보고도 정답을 유추하는 (Natural Language Shortcuts)" 버릇이 생겼기 때문입니다.
비유: 수학 문제를 풀 때, 계산 과정을 생략하고 정답지 뒷장을 보고 답만 외운 학생처럼, AI 는 코드를 실행하는 논리 없이 "이건 덧셈 문제니까 답은 5 일 거야"라고 맞출 뿐입니다.
2. "운 좋은" 성공 (Suspiciously Correct)
AI 가 정답을 맞췄을 때, 그 과정이 엉망인 경우가 매우 많습니다.
비유: 주사위를 던져 6 이 나오길 바라며 계속 던지다가, 우연히 6 이 나온 경우입니다. AI 는 코드를 실행하는 과정에서 변수 값을 틀리게 예측했는데, 마지막에 운 좋게 정답이 나와서 "성공"으로 기록되는 경우가 많았습니다. CES 는 이런 의심스러운 성공을 걸러냅니다.
3. "일관성" 부족 (Consistency)
AI 는 같은 문제를 다른 조건으로 풀 때, 매번 다른 논리를 사용합니다.
비유: 같은 요리 레시피를 3 번 해보라고 했을 때,
1 번: 계량을 정확히 하고 맛있게 만든다.
2 번: 계량을 안 하고 맛있게 만든다.
3 번: 계량을 잘못했는데 운 좋게 맛있게 만든다.
이 AI 는 **진짜 요리 실력 (Strong Consistency)**이 있는 게 아니라, **운에 의존 (Random)**하거나 상황에 따라 논리가 흔들리는 (Weak) 상태입니다. 논문 결과에 따르면 AI 의 48% 는 완전히 무작위 (Random) 로 정답을 맞췄습니다.
🛠️ 이 기술이 왜 중요한가? (버그 찾기와의 관계)
이 논문은 AI 가 버그 (오류) 를 찾고 고치는 능력도 CES 로 검증했습니다.
현실: AI 가 버그를 찾아내서 고쳤을 때, 우리는 "와, AI 가 코드를 분석했구나!"라고 생각합니다.
CES 의 발견: 하지만 CES 로 과정을 살펴보면, AI 는 코드를 실행해본 적이 없습니다. 그냥 "이런 패턴의 코드는 보통 여기서 버그가 나지"라고 패턴 매칭이나 암기로 버그를 찾아낸 것입니다.
위험: 만약 AI 가 운 좋게 버그를 찾았다면, **새로운 상황 (보지 못한 패턴)**에서는 완전히 무용지물이 될 수 있습니다.
💡 결론: "진짜 이해" vs "가짜 이해"
이 논문은 우리에게 중요한 메시지를 줍니다.
"AI 가 정답을 맞춘다고 해서 무조건 믿으면 안 됩니다. **그가 코드를 실행하는 '과정'을 논리적으로 따라갈 수 있는지 (Coherency), 같은 문제를 풀 때 일관된 논리를 쓰는지 (Consistency)**를 확인해야 진짜 지능을 평가할 수 있습니다."
CES는 바로 그 가짜 지능을 걸러내는 '진단 키트' 역할을 합니다. 앞으로 더 똑똑하고 안전한 AI 를 만들기 위해서는, 단순히 정답을 맞추는 것보다 코드를 실행하는 논리를 제대로 이해하는지를 확인하는 것이 필수적이라는 것을 보여줍니다.
1. 문제 정의 (Problem)
최근 대규모 언어 모델 (LLM) 은 코드 생성, 버그 탐지, 프로그램 수정 등 다양한 프로그래밍 작업에서 뛰어난 성능을 보이고 있습니다. 그러나 기존 연구 (CruxEval, CodeMind, REval 등) 는 주로 입력/출력 예측에만 초점을 맞추거나, 개별 문장에 대한 실행 상태를 분리하여 평가하는 한계가 있었습니다.
이로 인해 다음과 같은 핵심 문제들이 발생했습니다:
추론의 비일관성 (Incoherence): LLM 이 최종 출력은 정확히 예측했더라도, 그 과정에서의 중간 변수 값이나 실행 흐름 (제어 흐름, 데이터 흐름) 을 잘못 예측했을 수 있습니다. 이는 데이터 오염 (Training 데이터 유출), 환각 (Hallucination), 또는 자연어 단서 (Natural Language Shortcuts) 에 의한 '운 좋은 성공'일 가능성이 높습니다.
추론의 불일치 (Inconsistency): 동일한 프로그램이라도 다른 테스트 케이스 (다른 실행 경로) 에 대해 LLM 이 일관된 실행 추론을 수행하는지 평가하는 체계적인 방법이 부족했습니다.
버그 관련 작업의 신뢰성: 버그 예측/위치 파악/수정 작업에서 LLM 이 실제로 코드 실행을 추론하는지, 아니면 패턴 매칭이나 단서에만 의존하는지 명확히 구분할 수 없었습니다.
2. 방법론 (Methodology)
저자들은 CES (Code Execution Simulation) 라는 새로운 평가 태스크를 제안했습니다. CES 는 LLM 에게 주어진 입력에 대한 프로그램의 전체 실행 과정을 시뮬레이션하도록 요구하며, 다음과 같은 특징을 가집니다.
2.1 CES 태스크 구조
흐름 민감성 (Flow-Sensitive): 프로그램 전체를 하나의 프롬프트로 처리하여 실행 흐름을 종합적으로 평가합니다.
예측 대상:
루프 (Looping Properties): 루프 변수, 루프 반복 가능한 객체 (iterable).
분기 (Branching Properties): 조건부 예측자 (predicate), 분기 결정 (branch taken).
반환 (Return Properties): 최종 출력 값.
동적 주석 (Dynamic Annotation): 정적 분석을 통해 코드 내의 중요한 결정 지점 (루프, 조건문 등) 에 주석을 추가하고, LLM 에게 해당 지점의 변수 값을 예측하게 합니다.
적응형 컨텍스트 예제 (Adaptive ICL): 프로그램의 구조 (루프, 조건문 조합) 에 맞춰 가장 관련성 높은 인-컨텍스트 예제를 동적으로 선택합니다.
2.2 평가 지표
CES 는 두 가지 핵심 지표를 도입했습니다.
추론 일관성 (Reasoning Coherency):
LLM 의 예측이 상식적인 실행 논리를 따르는지 확인합니다.
규칙 1: 하위 속성 예측값을 조합했을 때 복합 속성 예측값과 일치해야 함.
규칙 2: 조건부 예측값과 분기 결정이 논리적으로 모순되지 않아야 함.
규칙 3 (가장 중요):중간 상태 예측이 틀렸는데도 최종 출력이 맞다면 '비일관적 (Incoherent)'으로 간주하여 성공으로 인정하지 않습니다. 이는 데이터 오염이나 환각을 탐지하기 위함입니다.
추론 일관성 (Reasoning Consistency):
동일한 프로그램에 대해 서로 다른 테스트 케이스 (서로 다른 기본 경로, Prime Path) 를 수행했을 때 LLM 의 추론이 일관되는지 평가합니다.
강한 일관성 (Strong): 서로 다른 실행 경로 모두에서 정확히 시뮬레이션.
약한 일관성 (Weak): 동일한 실행 경로에서는 정확하지만, 다른 경로에서는 실패.
무작위 (Random): 일관된 패턴이 없음.
3. 주요 기여 (Key Contributions)
CES 프레임워크 개발: 출력 예측뿐만 아니라 중간 프로그램 상태 (변수 값, 제어 흐름) 를 통합적으로 평가하여, LLM 의 실행 추론 능력을 진단하는 최초의 체계적인 도구입니다.
의심스러운 성공 (Suspicious Success) 탐지: 최종 결과가 맞더라도 실행 과정이 비일관적일 경우 이를 '의심스러운 성공'으로 분류하고 배제하는 메커니즘을 제시했습니다.
버그 관련 작업과의 연관성 분석: CES 를 통해 LLM 이 버그 예측/위치 파악/수정 작업에서 실제로 실행 추론을 사용하는지, 아니면 다른 요인 (패턴 매칭 등) 에 의존하는지를 규명했습니다.
대규모 실증 평가: 16 개의 다양한 LLM (Code LLM 포함, GPT-4, DeepSeek-R1 등) 을 HumanEval 데이터셋으로 평가하여 구체적인 통찰을 제공했습니다.
4. 실험 결과 (Results)
16 개의 LLM 을 대상으로 한 실험 결과는 다음과 같습니다.
전체 성능: HumanEval 프로그램에 대해 LLM 은 평균 **81.42%**의 비율로 '일관된 실행 시뮬레이션'을 수행했습니다. 그러나 이 중 정확한 출력 예측을 한 경우는 **46.92%**에 불과했고, **53.08%**는 일관된 추론을 했음에도 불구하고 잘못된 출력을 예측했습니다.
비일관적 추론 (Incoherent Reasoning):
GPT-4 와 DeepSeek-R1 과 같은 최상위 모델일수록 비일관적 추론 비율이 높았습니다 (약 25% 수준). 이는 자연어 단서 (Function 이름만 보고 로직 유추) 나 환각에 의존하기 때문입니다.
특히 "중간 상태는 틀렸는데 출력은 맞음"인 의심스러운 성공 사례가 많았습니다.
추론 일관성 (Consistency):
LLM 의 추론은 대부분 **무작위 (48.87%)**이거나 **약한 일관성 (45.37%)**을 보였습니다.
강한 일관성을 보인 프로그램은 전체의 **5.76%**에 불과했습니다. 이는 LLM 이 경로 민감한 (Path-sensitive) 프로그램 분석이 필요한 작업에서 약함을 시사합니다.
버그 관련 작업 (Bug-related Tasks):
LLM 이 버그 예측/수정에서 성공한 경우, CES 분석 결과 **대부분이 '의심스러운 성공'**으로 판명되었습니다.
LLM 은 실행 시뮬레이션 (CES) 에서 오류를 발견하지 못했음에도, 자연어 명세나 패턴 매칭을 통해 버그를 찾아낸 경우가 많았습니다. 이는 실제 환경에서 보지 못한 버그나 컨텍스트에는 일반화되지 못할 위험이 있음을 의미합니다.
기존 방법론 비교: CES 는 REval 및 CodeMind 보다 엄격한 평가 기준을 적용하여 모델의 실제 추론 능력을 더 정확히 드러냈습니다. 기존 방법론은 의심스러운 성공을 포함할 경우 성능이 과대평가되는 경향이 있었습니다.
5. 의의 및 결론 (Significance)
신뢰성 있는 평가: CES 는 LLM 의 코드 추론 능력을 평가할 때, 단순한 정답 여부뿐만 아니라 추론 과정의 논리적 일관성을 필수적으로 검증해야 함을 강조합니다.
일반화 능력의 한계: LLM 이 벤치마크에서 높은 점수를 얻는 것이 실제 프로그래밍 능력 (실행 흐름 이해) 을 반영하지 않을 수 있으며, 이는 데이터 오염이나 단서 의존성 때문일 수 있음을 밝혔습니다.
향후 연구 방향: 다음 세대 Code LLM 을 설계할 때는 실행 추론 (Execution Reasoning) 능력을 강화하고, 자연어 단서에 의존하지 않도록 학습 전략을 재고해야 함을 시사합니다. 또한 CES 는 SWE-Bench 같은 실세계 벤치마크로 확장되어 LLM 의 신뢰성을 검증하는 표준 도구로 활용될 수 있습니다.
이 논문은 LLM 이 코드를 단순히 '완성'하는 것을 넘어, 코드를 '이해'하고 '추론'하는 능력을 평가하는 데 있어 **일관성 (Coherency)**과 **일관성 (Consistency)**이 얼마나 중요한지 체계적으로 증명했습니다.