Study- MSC/Computer2007. 8. 31. 15:47
디버깅과 탐정놀이

SW 엔지니어로서, 디버깅은 사실 탐정놀음과 비슷합니다.
어디가 원인인지 찾아내는 게임...

디버깅 기법을 탐정들의 스타일에 따라 분류해 봤습니다.

- 하드보일드형

모든 문장과 문장 사이에 printf를 추가한다.
어떤 문장이 문제를 일으키는지 끈기 있게 추적한다.
한줄씩 따라가다보면 문제가 되는 문장을 찾을 수 있기 마련이다.

가끔 담배를 피우러 나가는 것을 잊지 않는다.
잠은 사무실에서 아무렇게나 자는 편이 좋다.

- 안락의자형

가만히 앉아서 모니터를 뚫어져라 응시한다.
전혀 움직이지 않고 몇시간이고 코드를 쳐다본다.
가끔 혼자서 뭐라고 중얼중얼 거리기도 하는데 옆사람은 못알아 듣는다.
그러나 갑자기 마구 타이핑을 하더니 버그를 잡아낸다.

다 좋은데 옆에서 보기엔 미친것 같다.

- 완전범죄형

프로그램을 짤 때 부터 애시당초 머리속으로 무척 많은 생각을 한다.
코드 한줄 한줄 마다 모든 부가효과(side effect), 예외상황(exception), 잘못된
입력을 염두에 둔다.
심지어 멀티 슬레드 코드로 사용되는 경우도 생각하고, 에러 리턴 코드도
구조적으로 만든다.

버그없는 코드는 완전범죄만큼이나 불가능 하다.
결국엔 항상 사소한 것에서 문제가 발생한다.

- CSI 과학수사대형

소스 디버거의 브레이크 포인트는 기본이다. 조건부 브레이크-포인트는
물론이요
스택 트레이스를 한다.
퓨리파이어 같은 소프트웨어로 메모리 leakage도 검사한다.
gprof나 VC-profiler로 프로그램의 병목도 찾아낸다. spi++같은 것도 능숙하게
사용한다.

다른 사람보다 항상 제일 늦게 디버깅을 마친다.

- 미스 마플형

엔지니어들이 디버깅하다 안되서 휴게실에 나가 담배를 태운다.
이런저런 문제점들에 대해 논의를 하고 있는데 옆에서 쓰레기통 비우던
아줌마가
말한다.

"그럴땐 대게 클래스 destructor에서 널 포인트를 지우는 바람에 그렇게
되는데..."

- 명탐정 코난형

디버깅을 시작한다.
어려운 코드를 들여다 보니 잠만온다.
일어나면 코드가 디버깅 되어 있다.

옆에서 네이버 지식인을 습격하고 있는 초딩이 의심스럽다.

- 소년탐정 김전일형

버그의 원인이 될만한 모듈을 고립시킨다.
코드를 고치려다 버그가 하나 더 발생한다.
버그가 하나 더 발생한다.
버그가 하나 더 발생한다.
이건 연쇄 버그다.
시스템이 크래쉬 한다.

....어쨌거나 버그는 이 안에 있다.

- 에큘 포아로형

주위의 프로그래머를 전부 모아놓고 자기가 버그를 잡기까지의

추론 과정을 발표한다. 각 함수 별로 버그가 될 수 없는 이유를

증명하는 식으로 하나씩 소거한다. 결국 마지막에 남는 놈이 버그이다.

자신의 회색 키보드에 대한 자랑을 빼놓지 않는다.

- 브라운 신부형

멍청한 눈으로 editor 프로그램을 띄웠다가 닫았다가를 반복한다. 가끔은
웹브라우저를 띄워 웹서핑을 하다가도 뭔가 깜빡 잊고 있었다는 것처럼 다시
키보드를 두드린다. 디버거를 실행하지만 명령어를 기억하지 못해서
다시 종료하려고 하나 종료하는 것도 잘 몰라서 아예 터미널 창을
날려버리는 등의 삽질을 계속 해댄다. 모르는 사람이 보기엔 개발 경력이
전혀 없는 초짜 개발자로 보인다.

그러다가 갑자기 프로그래머의 본성 및 심지어는 프로그래밍 철학에
대해서 중얼거리면서 프로그래머가 버그를 만드는 심리를 꿰뚫는 날카로운
통찰력으로 단번에 버그를 잡아낸다. 그러나 결코 요행수로 찾아내는
게 아니라 왜 그 버그가 발생하는지를 합리적으로 설명해낸다.

- 파일로 반스 형:

남들이 원인이라고 하는 부분은 절대 원인이 될 수 없다고 한다.
이유를 물으면 "탭 사이즈를 4로 쓰는 사람은 그런 버그는 만들지
않아" 따위의 말을 하며 디버깅도 프로그래머의 심리를 분석해야
한다고 주장한다. 처음부터 원인을 다 알고 있는듯이 굴지만 절대
말해주지는 않는다.


- 엘러리 퀸 형:

소스 코드를 찍어서 뿌려 놓고는 "독자에게 도전한다. 단서는
공평하다!"고 외친다. -_-


- 셜록 홈즈형 :

잡으라는 버그는 잡지 않고 파일 이름과 헤더만 보고 뭐 하는 프로그램인지
맞추기 놀이 따위나 하고 있다. 디버깅할 때는 꼭 옆에 의대 친구를 앉혀
놓고 작업한다. (코멘트와 문서 작성은 모두 의대 친구에게 시킨다.) 버그가
잡히지 않으면 갑자기 바이올린을 꺼내 연주한다.
...
의대 친구가 개업한 이후엔 디버깅하다 때때로 "수능 봐서 의치한..."이라
중얼거린다.

출처 : 우균 교수님 홈페이지 : http://pl.cse.pusan.ac.kr

Posted by 머리