사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug)

김영우 pengo@itdonga.com

PC(개인용 컴퓨터)나 스마트폰, 비디오게임기와 같은 컴퓨터 기기를 통해 각종 소프트웨어를 이용하는 과정에서 이유 없이 오류 메시지가 출력되거나 기기가 오작동하는 경우를 종종 볼 수 있다. 이런 현상은 단순한 기기 고장 때문에 일어나기도 하지만 이보다는 사용하는 하드웨어나 소프트웨어 자체의 결함에 의한 경우도 많다. 해당 하드웨어와 소프트웨어를 구성하고 있는 프로그램의 내용 중에 잘못된 코드가 들어있다는 의미다. 이렇게 프로그램 상의 결함에 의해 컴퓨터 오류나 오작동이 일어나는 현상을 버그(Bug)라고 한다. 버그는 일반적으로는 소프트웨어의 결함을 지칭하는 경우가 많지만, 본래는 하드웨어의 경우도 포함한다.

나방 한 마리 때문에 일어난 최초의 ‘버그’

본래 ‘벌레’라는 뜻을 가진 버그라는 단어가 컴퓨터 용어로 자리잡게 된 것은 1947년부터라고 알려져 있다. 당시 초창기 컴퓨터의 개발자 중 한명인 그레이스 하퍼(Grace Murray Hopper, 1906 - 1992)가 당시 운용 중이던 ‘하버드 마크 II(Harvard Mark II)’ 컴퓨터의 고장 원인을 조사하던 중, 회로 사이에 나방 한 마리가 끼어있는 것을 발견했다. 이 벌레(Bug) 한 마리 때문에 접촉불량이 일어나 마크 II가 고장 난 것이다. 이는 공식적으로 보고된 최초의 컴퓨터 버그로, 해당 보고서와 나방은 지금도 미국 스미소니언 박물관에 보관, 전시되어있다.

사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug)
(1)
사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug) (1)

다만, 기계의 오류를 버그라고 표현하는 관행은 이보다 훨씬 오래되었다는 주장도 있다. 미국의 발명가인 토머스 에디슨(Thomas Alva Edison, 1847 – 1931)이 1878년에 친구에게 보낸 편지의 내용 중에 기계의 오류를 ‘버그’라고 표현한 바 있어, 버그가 당시 기술자들 사이에서 널리 쓰이던 은어 중 하나가 아니었는가 추측하기도 한다.

단순한 해프닝부터 재앙 수준까지, 다양한 버그

버그가 일어나는 원인은 다양하지만 프로그램의 설계 자체가 잘못되었거나 프로그램 코드를 작성하던 도중의 실수로 인한 경우가 대부분이다. 설계상의 오류라면 프로그램이 작동 중에 무한 루프 상태에 빠져 결과물을 출력하지 못하거나 해당 컴퓨터의 한계 능력을 넘는 연산을 요구해 컴퓨터가 과부하를 일으켜 정지하기도 한다. 이에 비해 코드 작성 중의 실수는 존재하지 않는 프로그램을 참조하도록 하는 구문을 집어넣거나 수치를 잘못 입력하는 사례가 대표적인데, 이 경우에는 오류 메시지가 출력되거나 의도하지 않은 엉뚱한 결과물이 출력되곤 한다.

사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug)
(2)
사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug) (2)

일반 사용자가 가장 흔히 접할 수 있는 버그는 컴퓨터 게임에서 일어나는 오류 현상이다. 예를 들어 1991년에 출시되어 큰 인기를 끈 대전격투게임인 ‘스트리트 파이터 II(Street Fighter II)’의 경우, 등장 캐릭터 중 한 명인 ‘가일’로 플레이 하다가 특정 방향키와 버튼을 누르면 상대의 공격에 전혀 피해를 입지 않게 되거나, 상대방 상태와 상관 없이 무조건 던지기 공격을 가할 수 있게 되는 등의 버그가 발생하곤 해 게이머들 사이에서 논란이 되곤 했다.

사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug)
(3)
사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug) (3)

다만, 이런 오락용 프로그램에서 일어나는 버그는 단순히 웃고 넘어가는 해프닝 수준에 그치는 경우가 많은 반면, 일부 프로그램의 버그는 해당기업, 혹은 사회 전반에 큰 피해를 끼치는 경우도 있다. 대표적인 예가 1993년에 인텔에서 출시한 펜티엄(Pentium) CPU(중앙처리장치)의 버그 문제다. 인텔의 야심작이었던 펜티엄 CPU는 출시와 동시에 폭발적인 인기를 끌었으나 출시 1년 후, 부동소수점연산과정에서 오류를 일으킬 수 있다는 것이 확인되었다. 이 때문에 인텔은 버그가 있는 펜티엄 CPU의 전체를 리콜(recall) 해야 했고, 총 4억 달러의 이상의 손해를 봤다.

이와 함께, 1990년대 말에는 밀레니엄 버그(millenium bug), 이른바 Y2K 문제가 전세계적인 주목을 낳으며 심각한 우려를 자아냈다. 이는 초창기 컴퓨터 프로그램에서 메모리 공간을 아끼기 위해 연도의 표시를 ‘1999’와 같은 4자리가 아닌 ‘99’와 같이 2자리로 입력, 표기하는 것이 관행처럼 자리잡았기 때문이었다. 이러한 상태에서 만약 2000년이 되어 해당 컴퓨터의 연도가 ‘00’으로 표기될 경우, 프로그램에서는 이를 1900년으로 잘못 인식, 해당 컴퓨터로 통제되는 발전소가 정지하거나 의료기기가 오작동하는 등의 심각한 문제가 발생할 수 있다고 지적되곤 했다. 이 때문에 1990년대 말에는 전세계적으로 PC 및 운영체제, 응용 프로그램 등의 교체 및 수정 작업을 하는 붐이 일어나기도 했다. 그럼에도 불구하고 Y2K 문제에 대한 우려는 컸으나, 다행히도 2000년 1월 1일이 된 후에도 예상한 만큼의 큰 문제는 일어나지 않았다.

알파 버전, 베타 버전 거치며 이루어지는 ‘디버깅’ 작업

어떤 프로그램을 막론하고, 이제 막 만들어진 프로그램은 대부분 버그의 소지를 가지고 있다. 때문에 만들어진 프로그램을 테스트하고 버그를 고치는 디버깅(Debugging) 작업이 필수적이다. 실제로 대부분의 개발사들은 프로그램 제작기간과 맞먹는, 혹은 그 이상의 기간을 디버깅 작업에 소요한다.

기능적으로 아직 완성이 될 되었고 디버깅 과정도 거의 이루어지지 않은 프로그램을 ‘프리 알바(Pre-Alpha)’ 버전이라고 한다. 여기에서 기능이 거의 완성되어 개발사 내부에서 기능 테스트 및 디버깅 작업을 거치고 있는 프로그램은 ‘알파(Alpha)’ 버전이라 불리게 된다.

사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug)
(4)
사용자들을 당황하게 만드는 컴퓨터 프로그램의 오류 - 버그(Bug) (4)

그리고 알파 버전이 개발사 내부의 테스트 과정을 마치고 외부 사용자들에게 버그 및 각종 기능에 관한 의견을 받을 목적으로 배포되는 프로그램을 ‘베타(Beta)’ 버전이라고 한다. 베타 버전 중에는 개발사에서 허용한 소수의 인원들에게만 테스트 권한을 주는 ‘클로즈드 베타(Closed Beta)’ 버전과 아무나 테스트에 참여할 수 있는 ‘오픈 베타(Open Beta)’ 버전으로 나뉜다. 클로즈드 베타를 시작해 오픈 베타를 거치는 경우가 많지만, 프로그램의 성격이나 개발사의 사정에 의해 오픈 베타를 하지 않는 경우도 많다. 베타 버전의 경우, 기능적으로는 완성판과 큰 차이가 없어서 베타버전이 외부로 유출되면 완성판의 판매에 영향을 미치기도 하기 때문이다.

그리고 베타 테스트가 끝나면 출시 직전 버전인 ‘RC(Release candidate: 출시 후보)’ 버전이 배포되어 최종 점검을 받게 되며, RC 버전이 별 이상이 없다고 판단되면 첫 번째 정식 출시 제품인 ‘RTM(Release to manufacture)’ 버전이 나오게 된다. RTM 버전은 완성판과 같은 의미를 갖지만, RTM 버전 역시 출시 후에 예상하지 못했던 버그가 발견되곤 한다. 이러한 이유로 상당수 개발사에서는 얼마 후에 RTM 버전에서 디버깅 작업을 더한 ‘GA(General Availability)’ 버전을 추가로 내놓기도 한다. 이 때문에 GA버전을 ‘최종 안정화’ 버전이라 부르기도 한다.

버그가 없는 프로그램은 존재하지 않는다?

모든 컴퓨터용 하드웨어나 소프트웨어는 모두 사람이 설계하는 것인 만큼, 버그가 전혀 없는 완벽한 제품은 없다고 봐도 무방하다. 알파와 베타 테스트 과정을 거쳐 출시된 제품이라도 버그가 발견되는 경우는 대단히 많다. 프로그래머들 사이에서도 “버그가 없다고 알려진 프로그램들도 실은 내부적으로는 상당수의 버그가 있으며, 단지 발견이 되지 않았을 뿐”이라는 이야기가 정설처럼 이야기될 정도다.

몇몇 개발사 중에는 제품의 출시 일을 앞당기기 위해 디버깅을 제대로 마치지 않은 알파 버전이나 베타 버전 수준의 제품을 그대로 출시하는 경우도 있어 소비자들의 지탄을 받기도 한다. 버그로 인해 사용자들이 심각한 피해를 입는 경우도 종종 발생하는 만큼, 개발사 및 프로그래머들은 제품을 출시하기 전에 철저한 디버깅으로 버그 발생을 최소화할 의무가 있다.

글 / IT동아 김영우(pengo@itdonga.com)

IT동아의 모든 콘텐츠(기사)는 Creative commons 저작자표시-비영리-변경금지 라이선스에 따라 이용할 수 있습니다.
의견은 IT동아(게임동아) 페이스북에서 덧글 또는 메신저로 남겨주세요.