버그(bug)는 영어로 "벌레"를 뜻하는 단어로, 현대에서는 주로 컴퓨터 프로그램이나 시스템 내부에 존재하는 결함, 오류, 또는 예상치 못한 오작동을 일으키는 원인을 지칭하는 정보기술(IT) 용어로 널리 사용된다. 소프트웨어 버그(software bug)는 줄여서 버그라 부르며, 컴퓨터 소프트웨어의 결함을 의미한다.
개념과 의미
소프트웨어 분야에서 버그는 프로그래머의 의도된 동작과 다르게 프로그램이 작동하게 만드는 모든 종류의 결함을 포괄한다. 그 영향의 범위는 사용자 인터페이스상의 사소한 오타나 철자 오류에서부터 프로그램의 빈번한 충돌, 시스템 전체의 오작동, 나아가 인명 피해로 이어질 수 있는 심각한 결함까지 다양하다. 프로그램에 결함이 많이 포함되어 있거나 그 정도가 심각할 때 이를 "버그가 많다"고 표현한다.
어원과 역사
버그라는 용어의 기원은 흥미로운 역사적 배경을 지닌다. 영어 단어 "bug"가 원래 "벌레"를 의미한다는 점에서, 이 용어가 컴퓨터 오류와 연결된 데에는 1947년의 유명한 사건이 큰 역할을 했다. 1947년 9월 9일, 미국 하버드 대학교에서 운용되던 전기기계식 컴퓨터 마크 II(Mark II)의 릴레이 회로에서 실제 나방 한 마리가 발견되었다. 코볼(COBOL)의 창시자로 알려진 그레이스 호퍼(Grace Hopper)가 이끄는 팀은 회로에 낀 나방을 테이프로 떼어내어 작업 일지에 붙이고 "First actual case of bug being found"라고 기록했다. 이 일화는 컴퓨터 역사에서 "최초로 실체가 규명된 버그 사례"로 널리 알려져 있다.
다만, 버그라는 표현 자체는 1947년 이전부터 사용되어 왔다는 점에 유의할 필요가 있다. "bug"라는 단어가 기계나 장치의 결함을 가리키는 표현으로 쓰인 선례는 19세기 후반, 토머스 에디슨(Thomas Edison) 시대까지 거슬러 올라간다는 기록이 있다. 따라서 1947년 나방 사건이 버그라는 용어를 대중화한 계기가 된 것은 사실이지만, 용어 자체의 기원이 해당 사건에서 시작된 것은 아니다.
유형
소프트웨어 버그는 발생 원인과 양상에 따라 여러 유형으로 분류된다. 대표적인 것으로는 설계 단계의 오류로 인한 설계 버그, 수치 연산 과정의 정밀도 손실이나 오버플로 등과 관련된 산술 버그, 잘못된 비교 연산이나 무한 루프를 유발하는 제어 흐름(논리) 버그, 잘못된 API 사용이나 프로토콜 구현 등에서 발생하는 인터페이싱 버그, 다중 작업 간의 교착 상태나 경쟁 상태와 관련된 병행성 버그, 메모리 누수나 버퍼 오버플로 등과 같은 자원 관리 버그, 잘못된 구문이나 토큰 사용으로 인한 구문 버그 등이 있다.
영향과 사례
버그는 때로 재난급 사고의 직접적인 원인이 되기도 했다. 1980년대에는 방사선 치료 장치 테락-25(Therac-25)의 소프트웨어 버그가 환자 사망 사고의 원인이 되었다. 1996년에는 유럽 우주국의 아리안 5호 로켓이 발사 직후 온보드 유도 컴퓨터 프로그램의 버그로 인해 파괴되기도 했다. 1994년에는 영국 왕립공군 치누크 헬리콥터가 소프트웨어 버그로 인해 추락하여 29명이 사망한 사고가 있었다.
경제적 측면에서도 버그의 영향은 상당하다. 2002년 미국 상무부 국립표준기술연구소의 의뢰로 진행된 연구에 따르면, 소프트웨어 버그 또는 오류로 인해 미국 경제에 연간 약 590억 달러, 즉 국내총생산(GDP)의 약 0.6%에 달하는 손실이 발생하는 것으로 추정되었다.
디버깅과 관리
버그를 찾아 수정하는 과정을 디버깅(debugging)이라고 한다. 일반적으로 버그를 해결하기 위한 첫 단계는 문제를 안정적으로 재현하는 것이며, 재현이 불가능한 버그는 원인 규명 자체가 어렵다. 소프트웨어 개발 과정에서는 버그 추적 시스템(bug tracking system)을 활용하여 버그를 문서화, 분류, 할당, 우선순위 설정, 심각도 평가 등의 절차를 통해 체계적으로 관리한다. 버그의 심각도와 우선순위는 일반적으로 별개의 지표로 다루어지며, 제품 출시를 지연시킬 만큼 심각한 버그는 쇼스토퍼(show stopper)라고 부른다.
용어상의 논란
소프트웨어의 오작동을 설명하기 위해 "버그"라는 용어를 사용하는 것에 대해서는 때때로 논란이 있다. 일부 전문가들은 버그라는 표현이 결함이 저절로 발생했다는 인상을 줄 수 있다고 지적하며, 결함이 인간의 행위에 의해 발생했음을 더 명확히 드러내는 "결함(defect)"이라는 용어를 사용할 것을 권장하기도 한다. 또한 기업이 의도적인 설계 결정이나 사용자 추적과 같은 논란의 여지가 있는 행위를 버그로 축소 은폐하려는 사례가 있었다는 비판도 제기되어 왔다.
대중문화에서
버그와 관련된 용어와 개념은 대중문화 속에서도 등장한다. 비디오 게임에서 결함을 가리키는 "글리치(glitch)"라는 표현은 때때로 비공식적으로 버그와 유사한 의미로 사용된다. 또한 1968년 소설 《2001: 스페이스 오디세이》의 온보드 컴퓨터 HAL 9000의 비정상적 행동, 1983년 독일의 밴드 네나(Nena)의 노래 《99 Luftballons》에서 소프트웨어 버그로 인해 핵미사일 발사가 오인되는 설정, 1999년 영화 《오피스 스페이스》에서 연말연시 컴퓨터 버그 문제(Y2K)를 소재로 한 이야기 등이 대표적인 사례이다.