버그

내위키

Bug.

Bug는 '벌레'라는 뜻을 가지고 있는데 한국에서는 벌레는 그냥 벌레라고 하고 소프트웨어의 오류는 '버그'라고 구별하지만 영어권에서는 둘을 구분해야 할 때에는 software bug(소프트웨어 버그)라고 한다.

컴퓨터 소프트웨어의 오류를 뜻한다. 다만 프로그램을 아예 실행시킬 수 없는 오류(error)와는 다른 것으로[1], 프로그램이 실행은 되지만 원래 생각했던 대로 작동하지 않고 잘못된 결과를 낸다면 프로그램에 버그가 숨어있는 것이다. 이 '잘못된 결과'라는 것은 무척 광범위해서 뭔가 결과값이 잘못 나오는 정도에서부터 프로그램이 멎어버리거나, 어예 컴퓨터가 멎어버려서 전원을 껐다 켜아 할 수도 있고, 그 소프트웨어로 작업했던 내용을 날려먹을 수도 있고 아예 그 컴퓨터에 있던 데이터를 날려먹을 수도 있다. 개인용 컴퓨터면 자신의 데이터를 잃는 수준이지만 여러 사용자가 공용으로 쓰는 서버라면 그 사용자들이 전부 접속을 못하거나, 웹 서버라면 웹사이트가 마비되거나, 이들의 데이터를 모조리 날려먹는 최악의 상황도 있을 수 있다.

가장 흔한 버그는 오타. 변수나 함수를 참조할 때 이름을 잘못 썼다든지 해서 컴파일 단계에서 오류가 일어나서 컴파일이 안 되거나, 인터프리트 언어라면 실행 중에 오류를 낸다. 요즘은 개발도구들이 똑똑해서 잘못된 이름으로 변수나 함수를 참조하려고 하면 코드 편집기가 '어? 그런 이름을 가진 변수나 함수는 없는데?' 하고 경고를 낸다. 이런 종류의 버그는 대체로 금방 찾을수 있지만 코드의 크기가 커지면 비슷비슷한 이름을 가진 클래스나 함수가 생기기 때문에 은근 잡아내기가 만만치 않은 오타 버그도 있다. 변수의 값을 잘못 입력한 경우에는 논리적 버그이기도 하므로 더욱 잡아내기가 까다로워진다.

모든 소프트웨어는 버그를 가지고 있다고 보면 된다. 소프트웨어의 라이선스 조건 중에는 항상 버그에 관한 면책조항이 있다. 예를 들어서 어떤 소프트웨어로 열심히 작업을 했는데 버그 때문에 소프트웨어가 다운되어서 작업한 내용을 날려먹었다고 헤서 소프트웨어를 만든 회사에 손해배상을 청구해 봐야 이길 수 잆다. 소프트웨어 라이선스에 버그에 대한 면책조항이 있기 때문. 따라서 자주자주 데이터를 저장하고 백업도 해 둬야 안전하다. 일부 소프트웨어는 아예 자동 저장 기능을 제공한다. 소프트웨어가 버그로 죽어버리면 다시 실행했을 때 이전에 작업했던 내용을 자동으로 띄워준다.[2]

버그를 찾아내서 고치는 것을 디버그(debug)라고 한다. 개발자들 사이에서는 코딩이 3이면 디버그가 7이라고 할 정도다. 따라서 개발 도구에는 거의 필수로 디버깅 기능이 들어간다. 코드만 봐서는 버그가 있는지 여부나 버그의 원인이 뭔지 알아내기가 쉽지 않기 때문에 코드를 한 줄씩 실행시키거나 특정 코드까지 실행이 오면 중지하도록 하는 기능(브레이크포인트), 변수의 값을 추적하는 기능과 같은 다양한 기능을 포함한다. 대부분 컴파일러도 소스 코드를 디버그 모드로 컴파일할 수 있다. 디버그 모드로 컴파일 하면 실행파일 안에 디버깅 정보를 포함하므로 디버거로 한 줄씩 실행하거나 특정 지점까지만 실행하기, 변수 추적, 오류가 발생했을 때 함수 스택 추적 기능과 같은 다양한 디버깅 기능을 제공한다. 대신 실행파일의 크기가 커지고 속도가 느려지며, 무엇보다도 해킹에 취약하다. 실행파일을 외부에 공개할 때에는 반드시 릴리즈 모드로 컴파일한 것으로 공개해야 한다.

각주

  1. 예를 들어 컴파일 언어라면 컴파일을 하다가 문법 오류와 같은 이유로 컴파일에 실패하는 경우.
  2. 이런 기능을 제공하는 소프트웨어라면 버그가 많아서 심심하면 죽는다는 뜻으로도 해석할 수 있다. MS 오피스라든가, 어도비 소프트웨어들이라든지...