불 태워버렸어... 하얗게
| 고양이, 사진, 프로그래밍 | 2009.05.27 |

개발 중인 게임에 빌어먹을 악질 버그 하나 잡는다고
또 새벽 4시까지 달리다가 잤다.
난 프로그래밍을 시작한 이래로 무수히 많은 버그들을 처리해 왔다.
프로그램은 1%의 새 코드와 99%의 디버깅으로 이루어진다는 말이 진리로 느껴진다.
대부분의 버그는 쉽게 발견, 해결할 수 있는 것이지만 일부 그렇지 않은 버그도 있다.
이런 놈들은 몇 가지 속성이 있다.
짜증나는 케이스.
버그가 항상 발생하지 않을 때.
항상 발생하는 버그가 아니라 가끔씩 나는 버그면 오히려 곤란하다-_-;
버그를 치워버리려면 크게 두 과정을 거쳐야한다.
일단 어떨 때 생기는 버그인지 버그 코드의 위치를 파악하는 것이 우선,
버그를 일으키는 부분을 어떻게 고칠지 해결책을 강구하는 것은 나중이다.
근데 버그가 항상 발생하는 게 아니면 어떨 때 생기는 놈인지 감 잡기가 훨씬 어려워진다.
결국 버그는 "특정 상황"에서 발생하는 놈이라 그 특정 상황이 뭔지만 알아내면
그 상황 때마다 수행되는 코드를 알아냄으로써 버그 코드의 위치를 파악할 수 있다.
근데 분명 똑같은 상황으로 보이는데 가끔씩만 버그가 나고
대부분은 정상적으로 잘 수행된다면 이게 환장하는 거다-_-
계속 속을 파고 들어가면 결국 특정 상황으로 문제가 좁혀지긴 하지만
일단 "가끔씩 생기는 버그"로 보인다면 그렇게 문제를 좁히는데 드는 시간이
다른 버그를 해결할 때보다 훨씬 오래걸릴 것이란 전조이다.
또 한 가지 속성은 불확정성의 버그.
버그를 알아내려고 시도하는 순간 버그가 바뀐다.
하이젠버그의 불확정성 원리는
상태를 측정하려는 시도가 상태를 변하게 만들기 때문에 어떤 상태를 결정할 수 없다는 것이다.
이것도 참 프로그래머를 미치게 하는 케이스다.
뭔가 버그가 있다는 걸 느낄 수는 있다.
하지만 그 버그가 뭔지 알아내려고 하는 순간!
버그가 바뀌거나 심지어 사라지기까지-_- 한다!
... 그렇다고 그 버그를 알아내려는 시도를 접으면
그 순간 예전처럼 멀쩡히 버그가 되살아나서 또 그냥 둘 수는 없다.
이건 결국 버그를 추격하기 위한 각종 함수(로그 아웃풋, 셋팅 등)의
사이드 이펙트 때문에 생기는 문제다.
그냥 상태를 찍어보려고 100% 믿을 수 있는 함수를 콜한 것이라고 생각하기 때문에
그 행위에서 사이드 이펙트가 생길 것이라는 의심을 쉽게 하지 못한다.
이 경우엔 결국 믿는 그 함수 빼고 건들 곳 다 건들여보다가
"설마 이 자식이 문젠가!?"하면서 마지막에 발견하게 된다-_- 시발.
심지어 그냥 돌리면 멀쩡히 잘 생기던 버그(?)가 브레이크 포인트만 걸면
사라지는 경우도 있는데 이런 경우는 보통 멀티 쓰레드 코드에서 생기는 타이밍 문제이다.
쓰레드 쪽을 먼저 의심해볼만 함.
날 괴롭힌 지난 밤의 그 버그는 이 두 속성을 다 갖춘 놈이었다.
웬만큼 악랄한 버그에도 익숙해진 수퍼 프로그래머를 이렇게까지 괴롭히다니.
다 합치면 한 10시간은 쓰지 않았나 싶다-_-
범인은 훈련소에 간 친구 놈이 짠 내부처리 부분이었는데
겉으로 보이는 문제는 훨씬 멀리 있었기 때문에 비이이이잉 둘러서 겨우 찾아냈다.
휴.
누가 프로그래머가 뭐냐고 묻거든 이렇게 답해주시라.
손으로 해서 3시간이면 끝날 일을
10시간 동안 벌레 잡아가며 프로그램 만들어서
1초만에 하려는 사람이라고.
-
따..딱히 잡혀주려고 나타난건 아냐...
츤데레 버그같으니훗 츤데레든 뭐든 버그에게 자비는 없다 - 3-
안경 포니테일 쿨데레 버그라면 한 번 생각해보겠군 (?) ... -
하이젠버그 ㅋㅋㅋㅋㅋㅋㅋㅋ 나 말고도 쓰레드 만지는 프로그래머라면 한 번쯤 생각해보는 말인 듯.
하이젠버그로 검색해보면 블로그에 프로그램 버그에 대한 글이 꽤 ㅋㅋ
조엘 온 소프트웨어에서도 하이젠버그란 용어로 똑같은 걸 설명하고 있다는군. -
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
마지막 세줄 요약 캐공감 !!
그리고 비슷한 일을 금방 만드려고 하지만
오히려 그 때 다른 시도를 하기 때문에
여전히 10시간이 걸리겠죠. ㅋㅋㅋㅋㅋ읭읭
그래도 다른 사람이 똑같은 일을 하려고 할 때 1초만에 간지나게 끝내줄 수 있음! -
흠좀무, 프로그래머란 직업은 평생 저런걸 해야하는 건가 [..] 버그는 프로그래머에겐 숙명의 적이지.
사실 알고보면 그 적도 프로그래머 스스로가 만들어낸 거지만 - 3- -
근데 버그는 왜 생겨........... 세상엔 좋은 프로그램도 있고 나쁜 프로그램도 있어.
일반적으로 나쁜 프로그램은 좋은 프로그램보다 버그가 많지.
하지만 좋은 프로그램이라고 버그가 없는 건 아냐.
왜, 세상엔 나처럼 좋은 사람도 있지만 나쁜 사람도 있잖아?
보통 나쁜 사람이라면 좋은 사람보다 이래저래 흠이 많겠지.
하지만 좋은 사람이라고 완벽하진 않잖아?
좋은 사람이라도 반드시 결점은 있기 마련이지.
이거랑 마찬가지로 버그는 필연적으로 존재하는 그런 면이 있어 ㅋㅋ -
손으로 해서 3시간이면 끝날 일을
10시간 동안 벌레 잡아가며 프로그램 만들어서
1초만에 하려는 사람이라고.
=> 하지만 우린 그걸 한 번만 돌리는게 아니라, 3번 이상 돌리려고 하는 거잖아?
회사 다니면서 좀 늘은 건, 코딩 시작하기 전에 "과연 프로그램으로 처리해야하는 일인가?" 를 생각해보는 것.효율을 중요시한다면 좋은 생각이군요.
가끔 프로그램을 짜는 게 더 비효율적이더라도 프로그래머로서 병적인 집착을 하기도 하는 ㅋㅋ
그러고보니 컴퓨터 게임을 프로그램으로 처리 안 하면 보드 게임이네요. -
저작권침해! 헐 그런 것보다 먼저 하이젠버그가 남의 이름 갖고 장난치지 말라고 할 듯 -
뭔 말인지는 모르겠고 . . . 올챙이 열심히 잡는 모습과 오버랩된다구. 뭘 해도 남달리 끈질기긴 한 듯 -_-; -
나중에는... 하드웨어 문제 아닌가 하는 의심까지 들기도... 디버깅할 때 맞서게 되는 마음의 (헛)소리.
"그럴리가 없을 텐데."
"이상해, 난 아무 짓도 안했는데."
"뭐야 그거, 무서워."
"OS가 병신인가?"
"컴파일러가 이상한가?"
시험볼 때 맞서게 되는 마음의 (헛)소리.
"시험범위가 아닐텐데."
"이상해, 난 이런거 배운 적이 없는데."
"뭐야 그거, 무서워."
"교수가 병신인가?"
"문제가 이상한가?"
