소프트웨어 버그(Software Bug)

소프트웨어 버그란?

버그(bug)는 영어로 벌레라는 뜻이다. 그렇다면 소프트웨어 버그란? 컴퓨터 프로그램 코딩 오류가 있다는 의미로 쓰인다.

버그를 구성하는 정확한 정의는 다음과 같다.

  1. 프로그램이 프로그래머의 의도에 따라 움직이지 않는다.
  2. 프로그래머의 의도가 사용자의 평범하고 합리적인 기대를 충족시키지 않는다.

프로그램이 프로그래머가 의도한 작업을 하고 있는 한 프로그램이 제대로 작동한다고 보는 게 일반적이다. 때로 프로그래머가 의도한 작업이 사용자의 기대를 크게 벗어나서 문제를 일으킬 때는 버그라고 본다.

디버깅이란?

버그가 발생하면, 이를 찾아 수정해야 할 것이다. 이렇게 잘못된 프로그램을 수정하는 작업을 ‘디버깅(debugging)‘이라고 한다.
여기서 디(de)는 영어로 ‘없앤다’는 의미를 갖고 있다.

최초의 버그

최초의 버그는 1945년 프로그래밍 언어의 일종인 코볼 발명자 그레이스 호퍼가 발견하였다. 역사상 최초의 컴퓨터 버그는 1945년 9월 9일 “Mark.II” 라는 컴퓨터 회로에 벌레인 나방이 들어가 합선을 일으켜 비정상적으로 동작되었다 한다. 이 때 발생한 버그는 이름 그대로 컴퓨터 안에 벌레가 들어가 발생한 것이다.

최초의 버그

이때부터 소프트웨어에서 발생하는 문제를 버그라고 말하게 되었다.

그레이스 호퍼

그레이스 머레이 호퍼(Grace Brewster Murray Hopper 1906년 12월 9일 ~ 1992년 1월 1일)는 미국의 컴퓨터 과학자이자, 미국 역사상 최초의 여성 해독 제독이다.
상업적으로 엄청난 성공을 거둔 컴퓨터 프로그램밍 언어인 코볼(COBOL)을 탄생시키고 보급시키는데 결정적인 역할을 했으며, 오늘날 컴퓨터의 “버그"라는 단어를 알린 장본인이다.

그레이스 머레이 호퍼

어린 시절

그레이스 호퍼는 1906년 뉴욕에서 세 아이들 중의 장녀로 태어났다. 그레이스 호퍼는 어린 시절 기계를 유난히 좋아하는 아이였다. 그레이스는 어릴 때부터 기계에 무척 관심이 많았는데, 그녀는 일곱 살이었던 어느 날, 자명종이 어떻게 작동하는지 궁금해서 자명종을 해체한 적이 있었다. 그러나 자명종을 제대로 조립하지 못하자 집안에 있던 자명종 7개 모두를 해체했을 정도로 호기심이 많은 아이였다고 한다.

1900년 초반에는 여성이 대학에 진학하는 것이 흔하지 않았지만, 진취적인 사고를 가진 부모님의 후원으로 2024년, 18살이라는 어린 나이에 뉴욕 바사르 대학교(Vassar College)에 입학하여 수학, 물리학, 공학을 공부하였다. 졸업 후에는 예일 대학원에 진학해 수학 박사 학위까지 취득하였다.

프로그램과의 첫 만남

그레이스 호퍼가 졸업을 하고, 바사르 대학(Vassar College)에 근무하며 부교수를 임명되었을 때, 1939년 9월 1일, 제2차 세계 대전이 발발하고, 미국은 전쟁에 참점하게 된다.

그레이스 호퍼는 일본의 진주만 폭격 후 애국심과 사명감으로 해군에 자원 입대하여 미 해군 산하의 크러프트 연구소에 배치를 받게 된다. 연구소가 바로 호퍼가 컴퓨터를 처음 접하고 프로그래밍에 눈뜨게 되는 장소이다.

미 해군의 전폭적인 지원 아래 연구소 직원들은 하버드 마크 I이라는 컴퓨터 연구를 하게 되었는데, 호퍼는 연구소에서 궤적 계산을 맡게 되면서 프로그래밍 세계에 첫 발을 내딛게 된다.

호퍼의 프로그래밍 재능을 알아본 하워드 H. 에이킨은 함께 마크 I의 컴퓨터 매뉴얼을 작성한다. 그리고 전쟁이 끝난 후, Mark. I의 후속 모델인 Mark. II 개발에 참여하였다.

어느 날, 호퍼와 기술자들은 마크 II에 문제가 생긴 것을 알게 된다. 호퍼는 마크 II를 살펴보던 중에 컴퓨터 사이에 나방이 끼어있던 것을 발견하게 된다.

나방을 잡아서 일지에 테이프로 붙인 후 “버그가 발견된 첫 번째 사례"라고 적은 것이 바로 컴퓨터 프로그램에서 시스템의 착오, 오류 등을 가리키는 말인 “버그"를 대중화시키는 첫 발걸음이 되었다.

코볼을 개발한 엔지니어

​전쟁이 끝나고 제대 후 호퍼는 1949년 시스템 엔지니어로 취업을 한다. 시스템 엔지니어로 일하면서 실수가 잦을 수 밖에 없는 코딩 작업으로 인해 고생을 많이 하였다고 한다. 그래서 이러한 실수를 줄일 수 있는 프로그램을 개발하고 노력하였고, 그래서 만든 진 것이 바로 1952년도에 만들어진 A-0’이라는 세계 최초 컴파일러이다.

여기서 컴파일러란, 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램 이라는 뜻이다.

호퍼는 여기에서 멈추지 않고 바로 다음 년도인 1953년도에 ‘A-2’라는 오픈소스 소프트웨어 패키지를 최초로 만든다. A-2 시스템이란 고객에게 소스 코드를 보내 의견을 수렴하고 의견을 바탕으로 개선한 프로그램이다.

몇 년 뒤인 1957년도에는 이를 바탕으로 한 ‘B-0’이라는 플로-매틱(Flow-Matic) 프로그램을 개발한다. FLOW-MATIC은 최초의 영어로 하는 데이터 처리 언어이며, 단어를 사용하는 최초의 컴퓨터 언어이다.

호퍼가 만든 프로그램들을 정리하자면 다음과 같이 3가지로 정리할 수 있다.

  • A-0 : 특정 프로그램 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 프로그램
  • A-2 : 소스 코드를 보내 의견을 수렴하고 의견을 바탕으로 개선한 오픈 소스 소프트웨어 프로그램
  • B-0 : 영어 명령을 이용한 최초의 데이터 처리 언어

그녀가 만든 이러한 프로그램들은 3세대 프로그래밍 언어인 ‘코볼(COmmon Business-Oriented Language)’ 개발의 근간이 되었다.

1959년에 발표한 코볼은 사무용으로 설계된, 영어와 같은 컴퓨터 프로그래밍 언어이다. 이 언어는 오늘날 금융 업계와 정부, 행정 기업 시스템에서 아직도 일부분 사용되고 있는 언어로 여전히 IT 분야에선 중요하게 다루어지는 언어 중 하나이다.

말년

수많은 최초의 타이틀과 최고의 업적을 가진 호퍼는 이렇게 많은 업적을 쌓은 후, 다시 해군으로 돌아가 미 해군의 IT 개발에 도움을 주었다. 그 공로를 인정받아 그녀는 미 국방부가 수여하는 가장 높은 전투 이외의 훈장인 “국가 기술 훈장"을 받고 해군 제독으로 제대하게 된다. 호퍼가 타계하고 2년 뒤에는 그레이스 호퍼 여성 컴퓨팅 분야 기념 학회가 설립되었고 이후 매년 학회가 개최되고 있다.

버그가 생기는 이유

버그는 개발자의 사소한 오타로 생기기도 하고, 특수한 케이스를 미처 생각 못한 논리적인 버그가 생기기도 한다. 또한, 시스템상의 한계로 오류가 발생할 수도 있으며, 하드웨어 자체의 노후화나 고장으로 오류가 생길 수도 있는 것이다.

버그가 생기면 불편할 뿐만 아니라 재화 손실도 막대하다. 더 심하게는 버그 하나가 사람을 죽일 수도 있다. 의료용 로봇이 잘 못 작동한다던지, 핵무기 통제 시스템이 버그가 발생했다면 지구의 종말이 올 수도 있는 것이다. 컴퓨터 프로그램의 오류를 찾아 수정해야 한다. 프로그램으로 테스트 데이터를 처리함으로써 디버깅을 해야 한다.

버그를 방지하기 위해서

프로그램 정상 동작 완료 여부를 확인하는 유일한 방법은 테스트 데이터를 사용하는 것이며 대규모 프로그램에서는 완전히 디버깅할 수는 없다. 따라서 프로그램을 사용하면 원인을 알 수 없는 악성 처리가 발생하며 프로그램 버그로 인해 발생하는 경우가 종종 있다. 그렇기 때문에 프로그램 개발에서 디버깅은 매우 중요한 문제이다.

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

유명한 애니메이션 공각기동대(GHOST IN THE SHELL)에서는 아래와 같은 대사 나온다.

모든 컴퓨터용 하드웨어나 소프트웨어는 모두 사람이 설계하는 것인 만큼, 버그가 전혀 없는 완벽한 제품은 없다고 봐도 무방하다. 모든 테스트 과정을 거쳐 출시된 제품이라도 버그가 발견되는 경우는 흔한 일이다. 프로그램 개발자들도 “버그가 없다고 알려진 프로그램들도 실은 내부적으로는 상당 수의 버그가 있으며, 단지 발견이 되지 않았을 뿐"이라고 말한다.

버그는 줄일 수는 있어도, 버그 아예 없는 프로그램을 존재하지 않을 뿐인 것이다.

참고



최종 수정 : 2022-12-02