
AI 생성 코드가 테스트 통과(Green) 후에도 오류를 일으키는 이유: 상관 오차와 실무 검증 방법
요약
AI가 생성한 코드와 테스트 코드가 동일한 문맥에서 작성될 때 발생하는 '상관 오차'의 위험성을 경고합니다. 테스트가 통과되더라도 오류가 잠복할 수 있는 5가지 유형과 이를 방지하기 위한 실무 검증 전략을 제시합니다.
핵심 포인트
- 상관 오차: 동일한 AI가 코드와 테스트를 생성할 경우 오차가 일치하여 오류를 놓칠 수 있음
- 오류 유형: 예외 무시, 경계값 오류, 타입 드리프트, 멱등성 결여 등 5가지 모드 주의
- 검증 전략: 테스트 실행 건수 확인, 독립된 오라클(제3의 기준) 활용, 경계 및 이상치 테스트 강화
「테스트가 통과(Green)되어도 틀렸다」는 점을 엔지니어를 위해 설명합니다. 왜 통과된 코드가 오류를 품고 있는지, 어떤 형태로 잠복하는지, 어떻게 검증을 통해 잡아낼 것인지——실무 관점에서 다룹니다.
왜 통과(Green)를 뚫고 지나가는가: 오차가 상관(Correlation)하기 때문
테스트는 「구현이 사양대로인가」를 검증하지만, 그 오라클(Oracle, 기대값) 또한 사람이나 AI가 작성합니다. 구현 측의 오차와 오라클 측의 오차가 독립적이라면, 두 값을 대조했을 때 불일치를 발견할 수 있습니다. 문제는 코드와 테스트를 동일한 AI와 동일한 문맥에서 생성했을 때 발생합니다. 사양 오독, 명명(Naming), 암묵적인 전제 조건이 그대로 공유되어, 양측의 오차가 같은 방향으로 상관하게 됩니다. 상관된 오차는 대조하더라도 서로 상쇄되지 않고, 일치하여 「올바르게 보이는」 현상이 나타납니다.
여기서는 편의상 이를 「상관 오차(Correlated Error)」라고 부릅니다 (확립된 용어는 아니며 설명을 위한 명칭입니다). 요컨대, 답안자와 채점자가 동일 인물이라면 그 사람의 착각은 구조적으로 검출할 수 없다는 이야기입니다.
통과(Green)를 뚫고 지나가는 전형적인 5가지 모드
try:
rate = fetch_tax_rate()
except Exception:
...
무시(Swallowing): catch → 기본값 return
異常계(Exception path)가 정상계(Normal path)로 변질되어, 정상계 테스트에서는 걸러지지 않습니다. -
단수·반올림의 불일치: floor / round의 혼재. 경계값 금액에서만 표면화됩니다. -
경계(Boundary): off-by-one, 월/년도 변경점, <와 <=의 혼동. 일반적인 값에서는 통과(Green)됩니다. -
타입 드리프트(Type Drift): 프론트엔드 ⇄ 백엔드 간의 스키마 불일치. 한쪽만 변경하면 실행 시점에 깨집니다. -
멱등성(Idempotency) 결여: 연타 또는 재전송 시 이중 실행. 테스트는 예의 바르게 한 번씩만 호출합니다.
공통점은, 정상계·단발성·대표값만 사용하는 테스트로는 절대로 잡아낼 수 없다는 것입니다. 따라서 「테스트 수」를 늘리더라도 관점이 같다면 통과(Green)된 채로 그대로 지나가게 됩니다.
검증 실무: 통과(Green)를 신뢰하지 않는 3가지 전략
건수로 판정하기: 합격 여부를 종료 코드(Exit code)가 아닌 passed / failed / skipped의 실제 수치로 확인합니다. 0건 실행을 통과(Green)로 처리하지 마십시오 (설정 실수나 필터 누락으로 미실행 상태에서 exit 0이 발생하는 일은 빈번합니다 → 별도 기사 「exit 0을 신뢰하지 마라」).
- 독립된 오라클 보유하기: 구현을 작성하지 않은 제3자의 눈으로 테스트의 전제 조건 자체를 의심합니다. 다른 모델 / 다른 세션 / 수기 계산 등, 코드와 상관하지 않는 기준으로 대조합니다. 리뷰 과정을 한 단계 거치는 것만으로도 상관성을 끊을 수 있습니다. -
경계·이상·재실행 남기기: 경계값, 실패 경로, 연타를 의도적으로 호출하는 테스트를 작성하여, 동일한 착각이 다시는 통과(Green)되지 않도록 합니다. 입력 공간이 넓은 곳은 프로퍼티 기반 테스트(Property-based testing)도 유효합니다.
요약
AI를 멈추자는 이야기가 아닙니다. AI에게 검증을 시키고, AI의 오류가 드러나는 환경을 만들며, 마지막에는 사람이 올바르게 판단한다——즉, AI의 거짓말을 전제로 운용한다는 이야기입니다. 통과(Green)를 「합격」이 아니라 「아직 반증되지 않았을 뿐」이라고 읽는 습관을 들이는 것만으로도, 배포 전에 잡아낼 수 있는 결함은 크게 늘어납니다. 「테스트가 있다」는 출발점에 불과하며, 「몇 건을, 어떤 관점으로, 실제로 검증했는가」가 품질입니다.
이러한 AI 생성 코드의 감사 및 수정, 수탁도 진행하고 있습니다
AI를 사용하여 Windows 앱(Rust/Tauri · 약 11.7만 행 · 테스트 약 3,200건 / 클로즈드 베타 · 솔로 개발)을 만드는 과정에서, AI 스스로가 만들어내는 「통과(Green)되었으나 오류인 상태」를 검출하고 수정해 왔습니다. 동일한 눈으로 당신의 코드도 살펴보겠습니다.
▶ 실물·실적: https://getaxiom.dev/ / ▶ AI 생성 코드 베타 전 감사 (Coconala): https://coconala.com/services/4282365
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기