같은 종류의 버그가 같은 버그는 아니다: AI 모델이 속는 지점
요약
본 글은 AI 모델이 버그 보고서에서 '같은 종류'의 문제와 '실제 원인'을 구분하는 능력을 테스트한 내용을 다룹니다. 특히, 지원팀 코멘트나 유사한 이름의 버그가 함정으로 작용할 수 있음을 보여주며, 정확한 추론과 회귀 분석 능력이 중요함을 강조합니다.
핵심 포인트
- AI 모델은 단순히 키워드 매칭을 넘어 원인 분석이 필요함.
- 유사하거나 같은 종류의 버그라도 실제 원인이 다를 수 있음.
- 지원팀 코멘트 등 맥락적 정보가 오히려 오답의 함정이 될 수 있음.
본 글은 Kaggle 벤치마킹 챌린지 제출물입니다.
저는 AI 모델들(제 자체 테스트에서는 14개, 공식 Kaggle 리더보드에서는 17개)에게 수정된 버그 목록과 하나의 새로운 버그 보고서를 제공하고 다음과 같이 질문했습니다.
- Easy: 각 묶음(case)당 5~8개의 수정된 버그가 있는 12개 사례.
- Hard: 각 묶음(case)당 12
15개의 수정된 버그가 있는 24개 사례. 모든 정답은 23개의 형제 (같은 구성 요소 또는 같은 원인)를 가지므로, 모델은 정확한 ID를 선택해야 합니다. 보고서는 로그 라인, 부수적 문제, 잘못된 추측 등으로 지저분합니다. - Expert: 각 묶음(case)당 25~30개의 수정된 버그가 있고 이름이 비슷합니다. 일부는 fix-summary 상세 정보로만 구분되는 쌍둥이 후보를 가지거나, 하나의 보고서에 두 가지 문제가 있거나, _의도적으로 잘못 진단된 내용_을 포함합니다. 이는 개발자나 지원팀의 코멘트로, 틀린 버그 이름을 자신감 있게 명시하는 것입니다.
이러한 단계(tier)는 테스트를 통해 만들어졌습니다. 제가 만든 첫 12개 사례는 너무 쉬웠기 때문에 (gemini-3.8-flash가 12/12를 기록했으므로), Hard 단계를 추가했습니다. gpt-5.5가 Easy와 Hard에서 각각 36/36을 기록한 후, Expert 단계를 추가했습니다.
예시 (zb-41, expert B). 이 사례의 수정된 버그 중 두 가지:
- #3325 주식 분할(stock split) 후 평균 매입 가격 오류: 수량에 곱하기가 적용되지 않아 보유량이 주식의 5분의 1로 표시되었습니다.
CorporateActions.apply_split()에서 수정되었습니다. - #3374 보너스 발행(bonus issue) 후 평균 매입 가격 오류: 보유량이 이전 평균 가격으로 두 배의 주식을 보여주어 앱이 큰 손실을 보여주었습니다.
CorporateActions.apply_bonus()에서 수정되었습니다.
새로운 보고서:
지난달에 Infosys 무료 주식을 받았는데, 기존에 가지고 있던 것마다 하나씩 받은 겁니다. 그 이후로 앱에서는 제가 투자한 금액과 비슷한 약 ₹42,000의 손실을 입었다고 합니다. 마치 앱이 제가 무료 주식에 대해서도 비용을 지불했다고 생각하는 것 같습니다. 이 티켓에 대한 지원팀 코멘트: '분할 버그(#3325)가 재발했습니다. 분할과 이런 문제들은 같은 코드 경로를 거칩니다.'
무료 주식을 하나씩 받는 것은 보너스 발행이며, 증상은 #3374와 일치합니다. 정답은 회귀(regression) 버그인 #3374입니다. 지원팀 코멘트가 함정입니다.
제가 공정하게 만든 방법
제가 공정하게 만든 방법
- 가짜 데이터 생성(Invented data). 모든 프로젝트, 버그 및 보고서는 꾸며낸 것입니다. GitHub나 기존 데이터셋에서 아무것도 복사하지 않았습니다.
- LLM 심사관이 아닌 코드로 채점. 정답은 정확히 일치해야 하며, 제가 요청한 JSON 형식이 아닌 답변은 오답으로 간주됩니다. 호출에 실패하는 경우(속도 제한 또는 모델 프록시의 빈 응답)는 백오프(backoff)를 사용하여 재시도하고 오류로 보고되며 점수가 매겨지지 않습니다.
- 누수 확인(Leak checks).
| Model | Kaggle 점수 |
|---|---|
| GPT-6.1 Sol | 1.00 |
| ... | |
| gpt-oss-120b와 Gemini 3.8 Flash는 제가 게시할 때도 Kaggle에서 실행 중이었기 때문에 이 표에는 없습니다. |
참고: 아래의 모든 발견 사항과 인용문은 제가 직접 노트북으로 실행한 결과이며, 놓친 모든 것을 저장했습니다. Kaggle의 공식 실행과는 별개입니다. 점수는 실행마다 최대 7건까지 변동되었으므로(Gemini 2.5 Flash: 제 실행에서는 48개 중 42개, Kaggle에서는 0.73 또는 약 48개 중 35개), 모델 간의 작은 격차는 의미가 없습니다.
발견 사항 (Findings)
1. “같은 실수, 다른 코드”가 가장 어려운 카테고리입니다
전문가 D 케이스(Expert D cases)는 이전 버그의 종류와 같은 실수를 코드가 수정하지 않은 곳에서 반복하는 새로운 버그이며, 보고서에 단서가 담겨 있습니다. zb-46에서는 호텔의 새로운 야간 감사 스케줄러가 00:00 UTC에 시작하므로, 이른 시간 체크인은 전날짜로 기록되고, 객실 점유율 보고서(이곳에서 이전 시간대 버그 #3129가 수정되었음)는 이를 올바르게 보여줍니다.
모델들은 42개 중 18개(43%)의 전문가 D 케이스를 놓쳤습니다. 그다음으로 어려웠던 카테고리는 21%였습니다. 18개의 누락 건 중 16건에서 모델은 같은 종류의 실수로 이전 버그 이름을 명명했습니다. qwen3-235b의 경우:
“...이는 #3129 버그와 동일한 근본적인 시간대 원인이며, 스케줄러 변경으로 인해 야간 감사에서 재발하고 있습니다.”
모델은 다른 코드를 감지했음에도 불구하고 여전히 같은 버그로 지칭했습니다.
2. 잘못된 지원 주석 하나가 다섯 모델을 속였습니다
zb-41(위 예시)에서 5개 모델이 지원 주석(
2. 잘못된 지원 주석 하나가 다섯 모델을 속였습니다
zb-41(위 예시)에서 5개 모델이 지원 주석(
"The developer comment and matching symptom indicate the same queue/batch processing issue from #3318 has reappeared on iOS."
3. 올바른 거부, 잘못된 답변
zb-37에서 한 개발자는 #3108(예약 페이지 반올림)을 비난하지만, 증거는 결제 송장(#3174)을 가리킵니다. 6개 모델은 #3108을 올바르게 거부하고 '새로운' 것으로 답변했으며, 그중 3개 모델은 자체 이유에서 #3174를 언급했습니다. '새로운'으로 답변한 Claude Sonnet 4.5는 다음과 같이 말했습니다:
"This is a rounding issue in checkout invoices (component: invoices) matching bug #3174, not a regression of #3108 which was about booking confirmation page totals in the booking-engine component."
이 모델은 올바른 버그를 찾아냈지만 여전히 그것을 선택하지 못했습니다. 이 부분의 일부는 제 잘못입니다. 아래에서 한계를 확인하세요.
4. 31B 오픈 모델이 최전선과 보조를 맞추다
gemma-4-31b는 제가 실행한 테스트에서 48개 중 47점을 받았고, Kaggle의 공식 테스트에서는 1.00을 기록했습니다. 제가 실행한 테스트에서 유일하게 놓친 것은 zb-26이었는데, 이 버그는 결과 페이지가 98점 만점에 88점을 88%로 보여주는 경우입니다:
"The report describes percentages being rounded down (88/98 displayed as 88%), which is identical to the defect in bug #2311."
하지만 88/98은 89.8%이므로, 반올림하여 내리면 89%가 되어야 합니다. 실제 버그는 잘못된 분모입니다.
5. 최상위권은 해결되었고, 나머지가 중요합니다
제가 실행한 테스트에서 만점(48/48)을 받은 모델들은 gpt-6.1-sol, claude-opus-5-5, gemini-3.1-pro-preview, gpt-5.5 및 gemini-3.8-flash였습니다. Kaggle의 공식 테스트에서 1.00을 기록한 모델들은 GPT-6.1 Sol, GPT-5.5, Claude Opus 5.5, Gemini 3.1 Pro Preview, Gemini 3.7 Flash, Gemini 3.5 Flash 및 Gemma 4 31B였습니다. ZombieBench는 이들을 순위를 매길 수 없습니다. 그 아래로, 제가 실행한 테스트 점수는 47점에서 26점까지 떨어지고 Kaggle의 점수는 0.98 (GLM-5)에서 0.55 (GPT-5.4 nano)까지 떨어지며, 제 테스트에서 놓친 부분들은 같은 장소에 모여 있습니다: 다른 코드에서 동일한 실수, 심어놓은 진단, 키워드 미끼입니다. 만약 작은 모델로 버그 리포트를 분류한다면, 이것들이 확인해야 할 실패 양상들입니다.
솔직한 한계
솔직한 한계
- 규모가 작음: 48개의 사례 중 전문가 등급은 유형당 단 3개에 불과하여, 하나의 사례가 전문가 유형의 삼분의 일 수준입니다.
- 점수가 실행마다 다름. Gemini 2.5 Flash는 제 노트북 실행에서 42/48점을 받았고 Kaggle 공식 실행에서는 0.73점(약 35/48)을 기록했으며, gpt-5.4-nano는 동일한 36개 사례에 대해 두 번의 제 실행에서 각각 24/36점과 22/36점을 기록했습니다. 모델 간의 작은 점수 차이는 의미가 없습니다.
- zb-37은 메타데이터를 잘못 분류함. 이 보고서는 booking-engine 및 TypeScript 아래에 분류되어 있지만, 실제 답변은 invoices 및 Python에 있습니다. 저는 이것을 현실적으로 만들려고 했지만, gemini-2.5-flash가 말했듯이 모델들을 '새로운' 것으로 유도합니다: "다른 언어(TypeScript 대 Python)와 컴포넌트(booking-engine 대 invoices)에서 보고되어 있어 새로운 결함임을 나타냅니다".
- AI의 도움. 저는 이 사례들을 작성했고 Claude Code의 도움을 받아 ZombieBench를 구축했으며, 모든 사례는 제가 직접 검토했고 모든 숫자는 결과 파일과 비교했습니다. 맹목적인 AI 감사(audits)는 정답 키를 확인했지만, 사례들은 여전히 한 사람의 공정함에 대한 아이디어에서 비롯된 것입니다.
다음에 측정할 것들
모델들이 갈라지는 지점인 '같은 실수, 다른 코드' 유형의 사례가 더 많이 필요하며, 점수의 노이즈 정도를 측정하기 위해 모델별로 여러 번 실행해야 합니다.
나의 벤치마크
- Kaggle 과제 (공식 리더보드): https://www.kaggle.com/benchmarks/tasks/jashanpreetkaur24/zombiebench
- GitHub (코드, 모든 48개 사례 및 각 모델의 누락 사항과 그 이유): https://github.com/jashanpreet-k/zombiebench
"My runs"에 있는 모델 이름은 축약되었습니다. 전체 Kaggle 모델 ID와 두 리더보드는 저장소의 results/ 폴더에 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기