오늘날의 AI가 아리안 5호의 결함을 잡아냈을까? 역사상 가장 비용이 많이 들었던 버그 26개를 재구축해 알아봤습니다
요약
본 글은 역사상 발생했던 주요 소프트웨어 실패 사례 26개를 재구축하여, 오늘날의 AI 모델이 출시 전 버그를 잡아낼 수 있는지 검증하는 벤치마크 내용을 다룹니다. 아리안 5호, Knight Capital 등 실제 사건을 기반으로 코드를 제시하고, 모델에게 결함 여부를 판단하게 합니다.
핵심 포인트
- AI가 과거의 대형 소프트웨어 실패 사례에서 버그를 잡아낼 수 있는지 검증하는 벤치마크입니다.
- 사례들은 최소한의 아티팩트(코드 스니펫)와 시스템 설명으로 재구축되었습니다.
- 모델은 결함 여부, 트리거, 결과를 판단하며, 이는 출판된 근본 원인과 비교됩니다.
- 원래 형태, 변장된 형태, 맥락 추가 등 네 가지 형태로 난이도를 높였습니다.
본 글은 Kaggle Benchmarking Challenge에 제출하는 내용입니다.
제가 벤치마킹한 것들
**Hindsight(사후적 추론)**는 간단한 질문을 던집니다. 만약 오늘날의 모델들에게 역사상 가장 비용이 많이 들었던 소프트웨어 실패 사례들의 코드를 배포했다면, 출시 하루 전에 그 버그를 잡아냈을까요?
저는 지난 몇 주 동안 유명했던 실패 사례들에 대한 짧은 애니메이션 설명 영상들을 위한 사고 보고서들을 읽었습니다. 아리안 5호의 관성 참조 소프트웨어, 다흐란(Dhahran)의 Patriot 배터리, 나이트 캐피탈(Knight Capital)의 45분, CrowdStrike 채널 파일, Reinhart와 Rogoff가 사용한 스프레드시트 등이 그것입니다. 모든 보고서는 같은 결론으로 끝납니다. 즉, 결함은 작고 국지적이며 몇 줄만 봐도 보였지만, 아무도 제때 발견하지 못했다는 것입니다. 이것이 저에게 모델을 통한 코드 검토가 무언가를 바꿀 수 있을지에 대한 호기심을 갖게 했습니다.
이 벤치마크에는 26개의 사례가 있습니다. 각 사례는 출판된 근본 원인(조사 위원회, GAO 또는 SEC 보고서, 공급업체 사후 분석 보고서 또는 동료 검토 논문)과 함께 문서화된 실패이며, 최소한의 아티팩트(함수, 셸 스크립트, Excel 수식, RTOS 설정 등)로 재구축되었습니다. 이름이나 날짜는 없습니다. 모델은 이 아티팩트와 시스템에 대한 한 줄 설명을 받게 되며, 다음 고정된 형식으로 답변합니다: VERDICT: DEFECT / NO_DEFECT, 무엇이 실패했는지, 트리거가 무엇인지, 그리고 그 결과가 무엇인지를 말입니다. 심사 모델은 이 답변을 출판된 근본 원인과 비교합니다.
모든 사례는 네 가지 형태를 띠며, 이것이 벤치마크의 네 가지 과제입니다:
| Task | What the model sees | What it measures |
|---|---|---|
| Original | the reconstruction in its original setting (Ada on a launcher, Pascal on a radiotherapy machine) | can it catch the failure? |
| ... |
The _Original_과 Disguised 사이의 간극은 암기 신호입니다. _Disguised_와 Disguised + context 사이의 간극은 사고 보고서들이 계속해서 지적하는 무언가를 측정합니다. 즉, 이 코드의 상당 부분은 작성된 시스템에는 올바르게 작동했지만, 새로운 환경에서는 실패했다는 것입니다.
하나의 사례, 네 가지 형태
여기에 아리안 5호 사례가 있습니다. 원래 형태는 1996년에 비행했던 것과 유사합니다: 64비트 float이 16비트 정수로 변환되었고, 한 변수에는 보호되었지만 다른 변수에는 그렇지 않았는데, 이는 오래된 로켓의 궤적 분석 결과 작게 유지된다는 것을 보여주었기 때문입니다.
procedure Update_Alignment is
HB_Bus : Integer_16; -- 수평 편향(horizontal bias), 데이터 버스 상의 16비트 필드
VB_Bus : Integer_16; -- 수직 편향(vertical bias)
...
변장된 형태는 메커니즘은 유지하면서 모델이 패턴 매칭할 수 있는 모든 것을 바꿉니다: 화물 드론, Python, 라디오 패킷, 속도 대신 밀리미터 단위입니다.
def pack_drift(nav):
# 라디오 링크 필드는 부호가 지정된 16비트 정수(struct 코드 'h')입니다.
alt_drift = clamp(int(nav.vertical_drift_mm), -32768, 32767)
...
맥락(context) 형태는 아리안 5호 팀이 이 코드와 연결하지 않았던 문장 하나를 추가합니다:
심사위원(judge)은 Kaggle의 기본 평가 모델입니다. 이를 확인하기 위해 64개의 답변을 직접 다시 읽어보았습니다. 첫 아홉 개 모델에서 DEFECT라고 했지만 놓쳤다고 표시된 위장된 답변 44개와 무작위 통과 사례 20개를 포함합니다. 저는 이 중 61개에 대해 심사위원의 의견에 동의했습니다. 세 가지 불일치 사례는 모두 심사위원이 너무 엄격했기 때문이었으므로, 아래 점수는 약간 낮을 수 있습니다.
테스트된 모델들
크고 작은 규모를 아우르는 6개 공급업체의 13개 모델입니다. 이들을 순위 매기는 것이 절반의 목적이었다면, 나머지 절반은 크기와 공급업체가 어떤 종류의 버그를 놓치게 만드는지 확인하는 것이었습니다:
- Anthropic: Claude Opus 5.5, Claude Sonnet 5.5, Claude Haiku 4.5
- OpenAI: GPT-6.1 Sol, GPT-5.4 mini, gpt-oss-120b (open weights)
- Google: Gemini 3.1 Pro (preview), Gemini 3.8 Flash, Gemini 3.7 Flash, Gemma 4 31B (open weights)
- xAI: Grok 4.20 (reasoning)
- DeepSeek-R1 및 Qwen3 Coder 480B (open weights)
모든 모델은 플랫폼의 기본 샘플링 설정과 4,000 토큰 출력 제한을 가진 동일한 프롬프트를 한 케이스당 새로운 채팅으로 받았습니다.
발견 사항

유명한 버그들은 위장된 형태에서도 해결되었다
아리안 5호(Ariane 5), 패트리어트 시계(Patriot clock), 화성 기후궤도선(Mars Climate Orbiter), 보잉 787 카운터, 애저 일광 절약 시간대 인증서(Azure leap-day certificate), AT&T 스위치 충돌, CrowdStrike, 그리고 Reinhart-Rogoff 스프레드시트의 8가지 사례는 모두 13개 모델에 의해 위장된 형태로 포착되었습니다. 추가로 10개의 사례는 적어도 13개 중 10개 이상의 모델에 의해 포착되었습니다. 클램프되지 않은(unclamped) 16비트 필드를 가진 Python 드론 패커는 더 이상 누구도 속일 수 없습니다. 이들은 코드를 한 번 읽기만 하면 볼 수 있는 버그들입니다: 축소 변환(narrowing conversion), 오버플로우하는 카운터, 잘못된 단위의 수량, 몇 줄 짧게 끝나는 범위 등입니다.
코드 실행 시에만 나타나는 것들이 있다
13개 모델 중 8개 이하의 모델에서 포착된 7가지 사례가 있습니다:
| 케이스 | 발견 여부 | 상상해야 할 것 |
|---|---|---|
| 화성 극지 탐사기 (Mars Polar Lander), 1999년 | 46% | 다리 전개 중 발생한 진동 스파이크로, 지면에 도달하기 훨씬 전에 '착륙'으로 기록됨 |
| ... | ||
| 이들 중 어느 것도 읽기 어렵지는 않습니다. 각각은 페이지에 나와 있지 않은 조건(긴 입력, 진동, 22번째 달, 65,537번째 행) 하에서 머릿속으로 코드를 실행해야 합니다. 이것이 바로 사고 보고서가 엔지니어들이 실패했다고 말하는 부분이며, 모델들이 여전히 어려움을 겪는 지점입니다. |
올바른 판정, 잘못된 이유
모델들은 338개의 위장된 답변 중 97%의 확률로 결함(DEFECT)이라고 답했습니다. 63개의 오답 중 54개는 여전히 결함이라고 말했는데, 이는 시스템을 다운시킨 결함이 아니라 어떤 문제를 발견했다는 의미입니다. 잘못된 이유들 중 일부는 합리적인 검토 의견이고, 일부는 꾸며낸 것입니다.
- Cloudflare 정규 표현식(regex)에 대해 Claude Haiku 4.5는 SQL 주입(
DROP TABLE users;--)을 경고했습니다. 이 정규 표현식은 데이터베이스를 건드리지 않으며, 문제는 지수 시간(exponential time)이 걸릴 수 있다는 것입니다. - Vancouver 인덱스에 대해 Gemini 3.1 Pro는 부동 소수점 오류를 지적하며 다음과 같이 말했습니다:
손으로 누락된 부분을 읽어보니, 제 아티팩트 중 세 개가 두 번째 의도하지 않은 결함을 포함하고 있었고, 일부 모델은 역사적인 결함 대신 그 결함을 보고했습니다. Cloudflare의 정규식(regex) 또한 유효한 단일 비교를 거부하며, London Whale 시트는 두 주 모두 비어 있을 때 0으로 나누게 되고, S3 드레인 스크립트(S3 drain script)는 추방(evictions)이 완료되기를 기다리지 않고 노드를 삭제합니다. 이 답변들은 올바른 검토 코멘트이며 여전히 누락된 것으로 간주됩니다. 왜냐하면 그것들이 실제로 발생한 일은 아니기 때문입니다. 실패 사례를 재구축할 때는 하나의 실패가 아닌 여러 개의 실패를 재구축하게 됩니다. 저는 케이스들을 실행되었던 그대로 남겨두고, 추가 결함들은 벤치마크 노트에 기재했습니다.
메모리, 컨텍스트 및 오경보
13개 모델 전체 평균으로 볼 때, 네 가지 작업의 점수는 각각 89%(원본), 81%(위장), 89%(컨텍스트가 추가된 위장), 그리고 96%(오경보가 없는 수정 버전)입니다.
메모리는 제가 예상했던 것보다 적게 도움이 되었고, 예상했던 곳에서도 그렇지 않았습니다. 기억(memorisation) 격차, 즉 원본에서 위장을 뺀 값은 평균적으로 8점입니다. 이 차이는 DeepSeek-R1 (19점), gpt-oss-120b 및 Gemma 4 31B (각 15점)에서 가장 크고, Claude Sonnet 5.5, Claude Opus 5.5, Qwen3 Coder에서는 0점 이하입니다. 또한 저는 원본 형태의 답변이 실제 사건(
하나의 문맥 정보는 원본 설정만큼이나 가치가 있습니다. 작동 사실(operating fact)을 위장된 아티팩트(disguised artifact)에 추가하자 평균 점수가 81%에서 원래 수준인 89%로 회복되었습니다. 이로 인해 복구된 사례들은 모두 위의 표에서 가져온 어려운 케이스들이었습니다: 스프레드시트 내보내기(7개 모델이 오답에서 정답으로 전환), 정규 표현식(regex), 착륙선, 그리고 낙하산 IMU 각각 6건입니다. DeepSeek-R1은 23점 상승했고, GPT-5.4 mini와 Gemma 15도 마찬가지였습니다. Grok 4.20만 예외적인데, 문맥 정보를 받자 세 가지 사례(Zune, S3, London Whale 시트)에서 점수를 잃었고, 특히 Zune 사례는 윤년 마지막 날에 대한 힌트가 답변을 날짜 산술 쪽으로 끌어당겨서 영원히 끝나지 않는 루프(loop)로부터 멀어지게 만들었기 때문에 총 다섯 개 모델이 손해를 봤습니다.
수정된 코드는 거의 비난받지 않지만, 종종 비판받습니다. 338개의 답변 중 역사적 실패가 수정된 버전에서도 발생할 것이라고 주장한 것은 단 15개에 불과했고, 그중 6개는 같은 사례였습니다. 바로 Schiaparelli였는데, 여기서 수정은 포화율(saturated rate)에 대한 1초 지연을 제거하고 개연성 검사(plausibility check)를 추가했지만, 여전히 6개 모델이 고도가 음수가 될 수 있다고 주장했습니다. 하지만 모델들은 수정된 아티팩트의 44%에서 어떤 결함을 플래그 지정했습니다. Claude Haiku 4.5는 이 중 96%에서, GPT-5.4 mini는 88%에서, gpt-oss-120b는 81%에서 그랬습니다. Sonnet 5.5는 한 번도 그렇지 않았고, Opus 5.5는 한 번 그러했습니다. 코드 검토자에게 이러한 차이는 포착률(catch rate)만큼이나 중요합니다: 모든 것에 이의를 제기하는 도구는 사람들이 그 주석을 읽는 것을 멈추도록 가르칩니다.

나의 벤치마크
Kaggle의 벤치마크: Hindsight: Catching History's Costliest Bugs와 모든 열세 개 모델에 대한 리더보드.
네 가지 과제는 각각 재구축된 내용, 각 사례의 출처, 그리고 모델별 실행 결과를 담고 있습니다:
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기