기묘한 소프트웨어 버그 분류 (Unusual Software Bugs)
Source
Evernote/Article Scraps/not public 기묘한 소프트웨어 버그들.md
Summary
이 문서는 위키피디아의 ‘Unusual software bug’ 항목을 번역한 것으로, 물리학 개념에서 유래한 비공식적인 소프트웨어 버그 분류법을 소개합니다. 주요 유형으로는 디버깅 시 사라지는 ‘하이젠버그’, 원인이 복잡하고 카오스적인 ‘만델버그’, 조건이 명확한 ‘보어버그’, 코드를 읽는 순간 오류가 드러나는 ‘슈뢰딩버그’, 달의 주기와 같은 외부 요인에 영향을 받는 ‘달 주기 버그’, 통계적 분석이 필요한 ‘통계학적 버그’, 그리고 초보자의 단순 실수인 ‘늅버그’ 등이 포함됩니다. 각 버그의 정의, 발생 원인, 그리고 디버깅의 어려움을 설명하고 있습니다.
Key Points
- 하이젠버그(Heisenbug): 디버거 사용이나 관측 행위가 프로그램 실행 환경(메모리, 타이밍 등)을 변경하여 버그가 사라지거나 변형되는 현상. 레이스 컨디션이나 최적화 차이에서 자주 발생.
- 만델버그(Mandelbug): 원인과 결과가 매우 복잡하여 카오스적이거나 비결정론적으로 보이는 버그. 시스템 설계 결함이나 구성 요소 간 상호작용에서 기인하며, 보어버그와 대비되는 개념으로 사용되기도 함.
- 보어버그(Bohrbug): 발생 조건이 명확하게 정의되어 디버깅 중에도 사라지지 않는 버그. 특정 데이터 집합이나 상황에서만 발생하며, 발견하기 어려울 수 있음.
- 슈뢰딩버그(Schrödinbug): 소스 코드를 읽거나 비정상적인 방법으로 접근할 때만 오류가 드러나는 버그. 코드의 논리적 모순이 실행 시에는 우연히 작동하다가 관측 시 붕괴되는 양자역학적 비유.
- 달 주기 버그(Phase of the Moon bug): 달의 위상과 같은 외부 환경 요인에 영향을 받는 것으로 보이는 희귀한 버그. 실제로는 시간 종속적 오류(Y2K 등)와 혼동될 수 있음.
- 통계학적 버그(Statistical bug): 단일 실행으로는 발견되지 않으며, 다수의 실행 결과를 통계적으로 분석해야만 드러나는 버그. 랜덤 알고리즘의 편향이나 누적 오차에서 발생.
- 늅버그(Noob bug): 처음에는 복잡해 보이지만, 분석 결과 초보자의 단순 실수(중복 include, 변수명 충돌 등)로 밝혀지는 버그.