2012년 11월 21일 수요일

Doxygen - 소스 분석 툴

다른 사람이 작성한 소스코드를 분석하고자 할 때에 유용할 수도(?) 있는 도구 입니다.

C/C++로 작성된 소스 코드를 분석하여 다양한 포맷의 문서로 출력을 해 준다고 합니다.

최근에 소스를 받아서 빌드한 프로그램이 잘 작동하지 않아, 디버깅을 하기 위해 찾아보던 중에 알게 된 것인데 그 사용 방법 및 결과를 간단히 써 보겠습니다.

사용환경은 우분투(Ubuntu) 10.04
doxygen 1.6.3
graphviz 2.20

프로그램의 목적이나 용도만 보아도 꽤 많은 옵션이 있을 수 있는 프로그램입니다.
그런 프로그램이 GUI가 아닌 커맨드 라인 프로그램이니 익히기 껄끄럽겠죠.
혹시나 하고 찾아보니 프론트엔드(front-end) 프로그램으로 doxywizard라는 것이 있습니다.


프로젝트 이름, 소스 디텍토리, 출력 파일 포맷, 분석 옵션 등을 지정해 주면 지정된 출력 포맷으로 분석 결과를 내 줍니다.

특히 분석 옵션 가운데, graphviz 패키지의 기능을 이용하여 함수의 호출관계를 보여주는 옵션을 선택하는 부분이, 가장 많은 시간과 가장 많은 출력 결과물의 크기를 좌우하게 됩니다.

극단적이긴 하지만 약 1.2M byte의 소스 파일을 풀 옵션으로 분석한 결과 시간도 상당히 걸렸지만(수십분 정도), 출력된 파일들의 크기 또한 250M byte에 달하는 것으로 나타났습니다.


그렇게 분석한 결과들의 예를 보면,

메인페이지
클래스 리스트

클래스 계층도

그림으로 나타낸 클래스 계층도

메쏘드의 호출 그래프1
메쏘드의 호출 그래프2

메쏘드의 호출/피호출 그래프


프로젝트를 마치고 프로젝트에 대한 문서를 작성하는 것이라면 꽤나 유용하게 사용할 수 있지 않나 싶습니다만, 소스를 분석하고자 하는 사람들의 일반적인 목적에서의 유용성은 의심이 듭니다.

왜냐하면,
전체적인 프로그램의 흐름을 파악할 방법이 거의 없습니다.
특정한 일부분을 분석하기 위해서도 메쏘드와 멤버들의 유기적인 연관 관계를 보아야 하는데 그런 측면이 약합니다.

즉, 부분 혹은 하나의 개체들에 대한 분석은 완벽할 지 모르나, 그것들을 유기적으로 연결하여 큰 것으로 묶는 것에 있어서는 취약하다는 것입니다.
애초에 그런 역할은 사람에게 남겨진 몫이긴 하나 그 과정을 도와줄 도구 또한 필요합니다.
doxygen의 결과물은 도구의 역할은 하지 못하지만 좋은 참고자료는 될 것 입니다.

따라서 소스를 분석하고자 하는 사람에게 doxygen이 유용한 도구임에는 틀림 없으나 추가적인 도구가 필요함을 잊지 말아야 할 것입니다.

댓글 없음: