옛날에야 한 코드가 어떤 경로를 통해 실행되는지 추적하기가 매우 까다로왔다. 그래서 잘 돌아가는지 확인하기 위하여 일일이 변수를 출력해보곤 했다. 그 이후로 많이 발전해서 디버깅 정보를 담아 브레이크 포인트를 지정하거나 런타임 콜 스택을 출력해보는 등의 방법으로 문제를 해결하기 시작했다.
한 마디로, 이러한 방법들은 "원시적이다." 아주 많은 시간을 소요하는데 비해, 매우 좁은 영역만을 커버한다. 도무지 커다란 그림을 볼 수가 없어서 디버깅에 많은 시간을 낭비하는 주 원인이 된다. 다른 사람들의 코드가 섞인 수 만줄의 코드에서는 이런 방법으론 디버깅이 거의 불가능하다.
요즈음 들어서 많이 배포되는 프로파일러를 보자. 프로파일러는 한 코드가 어떤 경로를 거쳐서 몇번 호출되었고, 얼만큼의 시간과 메모리를 썼는지 실시간으로 그래프로 보여주는 등, 실행 중 프로그램의 동작 통계를 수집한다. 이런 유용한 정보가 IDE에서 프로파일링 버튼만 누르면 알아서 뚝딱 만들어진다.
이런 프로파일러를 손에 쥐는 순간, 프로그램의 흐름이 눈에 정확히 들어온다. 80년대부터 소프트웨어 엔지니어링을 해온 마틴 파울러가 '리팩토링'에서 썼듯이, 시스템의 문제에 대한 프로그래머의 대부분의 예측은 잘못됐다. 모든 예측은 통계적인 근거를 통해서 정립할 수록 잘 들어맞는다.
이러한 현대적인 도구들-프로파일러, 디버거, 유닛테스트 등-을 쓰면 프로그래밍 효율은 놀랍도록 높아진다. 전산과 학생들은 이런 고급 도구를 배울 필요가 있다고 본다.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- 디버거 없이 디버깅 메시지 보기.. DebugView.. by 미친병아리
- 코딩도 글쓰기... by 시즈하
- [A] 클래스 멤버 변수와 지역 변수의 차이는? - 1 by 써니
- 디버깅은 겸손하게 by 시즈하
- 절대음감 디버깅 by 시즈하



