본문 바로가기
C++ 200제/코딩 IT 정보

버그뜻 프로그래머 머릿속 최악의 버그 사례

by vicddory 2019. 6. 6.

버그뜻


버그(Bug)는 "움직이는 벌레"란 의미입니다.


원래는 소프트웨어의 버그(오류)를 가리키는 용어였지만, 현재는 오류뿐만 아니라 프로그램이 작성자의 의도완 다르게 작동하는 원인을 총칭하여 bug라고 합니다. 버그뜻은 의외로 광범위합니다.



 잠재적 버그

 문제가 드러나지 않고 프로그램 안에 숨어있는 것

 명세서 버그

 프로그램 사양서 내용과 모순 또는 오류가 있는 것



버그는 프로그래머가 "내 잘못이 아니다"는 식의 책임 회피의 뉘앙스가 있으므로 "구조적 프로그래밍"의 저자인 컴퓨터 과학자 데이크스트라는 프로그래머의 자각을 위해, "버그가 아니라 오류로 부르자"라고 주장하였습니다.


프로그램 및 시방서의 버그를 제거하기 위해 단위 테스트 "디버그 (debug)"(해충 정리 = 소스 수정) 과정이 필수입니다. 단, 하나의 bug로 인해 기업의 기반 시스템이 정지하는 사태도 초래할 수도 있으므로 디버깅의 역할은 큽니다.

최악의 버그 - 매리너 1호


최악의 버그는 "나는 잘못 없어"라고 했다가 내 잘못으로 밝혀진 경우입니다.


그러나, 사람의 목숨을 빼앗은 bug도 있었습니다.


1962년 7월 22일 화성 탐사기 마리너 1호 사건입니다.

마리너 1호는 발사 후 예정된 코스를 벗어나 추락했는데, 이는 비행 소프트웨어 버그가 원인이었습니다. 지상관제 센터는 대서양에서 매리너 1호를 폭파했습니다. (원격 폭파 시스템이 존재했음)


사후 조사한 결과, 연필로 종이에 쓰인 수식을 컴퓨터 소스 코드로 옮길 때 오타가 있었음이 밝혀졌습니다. 이로 인해 컴퓨터가 비행 과정의 계산을 잘못한 것이었죠.




프로그래머 머릿속의 버그

"버그뜻은 무엇입니까?"


컴퓨터를 조금이라도 다뤄보지 않았다면 쉽게 대답할 수 없을 것입니다. 컴퓨터 프로그래밍 입문서에는 무조건 버그에 대한 설명이 적혀 있습니다. 다들 아시는 바와 같이, bug는 프로그램 오류를 말합니다.


컴퓨터 개발자들은 프로그램 오류뿐만 아니라 기계와 계획의 결함 등도 버그라고 표현하는 편입니다.


  • 버그 = 벌레 .. 으 ... 징그러
  • 디버그 = 해충 구제 (소스 수정)


디버깅은 프로그램 오류를 수정하는 과정을 말합니다. 디버깅하기 위한 프로그램을 디버거 debugger 라고 합니다.

bug를 부르는 표현은 많습니다.


  • 빌어먹을 버그
  • 버그 찾자
  • 버그 나왔다
  • 버그의 집이네
  • 버그가 있는 곳
  • 버그를 쫓아가 봐
  • 버그 잡고 ...


어떤 표현도 프로그래머에겐 자연스러운 표현입니다. 모두 벌레에 비유를 두고 있죠.



마리너 1호 폭파 사건


데이크스트라가 말하는 버그뜻


에스허르 데이크스트라(에츠허르 데익스트라, 다익스트라로 유명함).


1930년에 네덜란드에서 태어난 컴퓨터 과학자로 텍사스 대학에 있었습니다. 데이크스트라는 "구조적 프로그래밍"을 주장하여, 현대 프로그래머들에겐 데니스 리치만큼 중요한 사람입니다.


이 위대한 데이크스타라가 이런 말을 했었습니다.


"버그라고 부르지 마라. 오류라고 불러라"


개발자에게 익숙한 버그 대신, 오류라는 말을 사용하자고 강력히 제안했습니다.


이유는 이렇습니다.


"버그 bug"라는 말은 마치 프로그램의 오류가 프로그래머가 보이지 않는 사이 프로그램에 자연스럽게 스며든듯한 착각을 일으키게 한다. 프로그램 오류는 자연적으로 발생하지 않고, 프로그래머가 한눈을 파는 사이, 느릿느릿 침투하는 것도 아니다.


프로그램 오류는 프로그래머 자신이 만들어 넣는 것이다.


버그라는 말은 이 어려운 사실을 덮어 감추려는 표현이다.


이렇게 위대한 공돌이께선 주장하셨습니다.


구체적으로 설명하겠습니다.

프로그램 사용자는 프로그램 개발자를 비난합니다.


"이 기능 왜 이래? 도대체 어떻게 된 거야?"


프로그래머는 이렇게 대답한다.


"아, 그건 새로 발생한 버그네요. 버그 나올 곳은 대충 알 수 있으니 금방 고칠 수 있습니다."


이 프로그래머는 버그라는 단어를 사용하여 책임 소재를 모호하게 하는 것이다. "새로 발생한 버그"는 존재하지 않습니다. 프로그램은 처음부터 잘못된 것이었습니다. 그리고 그 실수는 프로그래머가 치우지 않은 것이죠.


훌륭한 프로그램을 만든 프로그래머는 그만한 칭찬을 받을 가치가 있습니다. 그렇다면 버그가 있는 프로그램, 오류가 있는 프로그램을 만든 프로그래머도 그만한 책임을 져야 합니다. 버그뜻도 중요하지만, 버그를 대하는 개발자의 자세 또한 중요합니다.



고객사에서 전화오면 ....


가장 위험한 버그


가장 위험한 bug는 사실 프로그램상의 오류가 아닙니다. 가장 위험한 실수는 개발자의 사고방식에 의한 잘못된 코딩입니다. 프로그램 오류가 우연히, 타의적으로 발생했다는 인식이야말로 가장 위험한 것입니다.


버그는 프로그램이 아니라 프로그래머의 머릿속에 있던 것입니다.



공돌이들의 우상. 네덜란드 공대남


관련 글


MFC 디버그 - 메모리 누수 해결

https://codingcoding.tistory.com/606


프로그램 버그 찾는 방법

https://codingcoding.tistory.com/663


대한민국 IT 분야 넋두리

https://codingcoding.tistory.com/1105


입사 첫 달 월급 96만 원 받았습니다

https://codingcoding.tistory.com/1065

댓글