유용한 정보

STAN - Structure Analysis for JAVA 자바 소스 visual 분석 툴

CyberI 2017. 1. 13. 19:55


개발을 진행하다 보면 많은 종류의 오픈소스를 사용하게 됩니다. 오픈 소스는 잘 정리된 문서나 책등으로 나오기도 하지만 그것만으로는 뭔가 부족한 것을 다들 경험해 보셧을겁니다. 그렇다고 소스를 하나하나 들여다 보게 되면 점점더 머리만 아프고 어느 순간에는 흐름을 놓쳐 어디에 있는지 조차 알기 어렵게 되는 경우가 허다 합니다. 그래서 어떻게 하면 좀더 쉽게 소스를 분석할 수 있을까 하고 고민하던중 STAN이라는 프로그램을 알게 되어 이 프로그램을 소개해보고자 합니다.


STAN 을 이용하면 소스의 전체 적인 구조와 각 클래스, 패키지 간의 dependencies를 편하게 볼 수 있습니다. stan은 standalon 형태의 application과 eclipse plugin 2가지 형태로 사용 할 수 있습니다. 저의 경우는 eclipse plugin으로 설치 하여 사용해보았습니다. 전체 적인 구조는 다음과 같습니다.


좌측의 Structure Explorer 는 제가 선택한 소스의 패키지 구조를 보여줍니다. 저는 테스트로 netty를 한번 올려 보았습니다. 그런데 무료 버전은 class파일 500개의 제한이 있어서 몇몇 패키지는 분석에서 제외가 됐습니다 ㅠㅠ.  그리고 netty의 example은 분석할 용도가 아니라서 exclude로 제외해둔 모습입니다. 


중앙은 소스를 분석할 수 있는 공간으로 Composition, Coupling, Sandbox, Polution, Distance, Report 탭으로 구성되어 있습니다. 이 부분에 대한 설명은 아래서 다시 진행하겠습니다. 


우측은 package나 class의 구성내용을 볼수 있는 Overview와 현재 선택된 package 또는 class 의 통계를 보여줍니다. 이 부분에 대한 자세한 설명은 홈페이지에 가면 영어로 자세히 설명되어 있습니다. --;


하단부는 소스를 볼수 있는 영역으로 메인 프레임에서 class나 method를 클릭후 F3을 통해 해당 class를 보거나 method의 위치로 바로 갈 수 있습니다.


이제 중앙 부분을 조금 자세히 다루어 보도록 하겠습니다.

1. Composition View

Composition View는 선택된 요소와 하위 요소들에 대한 dependencies 정보를 보여 줍니다.

그림과 같이 프로젝트 가장 상단을 선택한후에 각 요소를 double click 으로 확장하면 아래로 점점 파고 드는 형태 입니다. 클래스를 확장하면 클래스가 가지는 메서드들과 어떤 메서드가 어떤 흐름으로 진행되는지를 한눈에 파악할 수 있습니다. 하단부의 탭은 클래스나 패키지를 선택하면 Properties탭에서 Property를 확인할 수 있으며 -------라인을 선택하면 Dependencies탭에서 상세 내용을 볼 수 있습니다. 탭에서는 무슨 일로 dependencies가 생겼는지(extends, calls, access 등)을 확인 할 수 있으며 F3을 통해 해당 소스를 확인해 볼 수 있습니다. ------> 흐름은 Vertical 또는 Horizontal 형태로 원하는대로 선택해서 볼 수 있습니다.



2. Couplings View

couplings view는 선택한 요소를 가운데 두고 incoming과 outgoing 에 대한 dependencies를 확인 할 수 있습니다. 

bootstrap package를 선택하면 중앙에 bold되어 놓이게 되며 channel 쪽에서 23개의 incoming dependencies가 들어오고 channel쪽으로 204개의 outgoing dependencies가 나가는것을 확인 할 수 있습니다. double click 또는 split 메뉴로 확장합니다.

bootstrap을 제외하고 좌,우를 확장한 결과는 다음과 같으며 각 interface, class에서 가지는 dependencies도 개별적으로 확인 할 수 있습니다.



3. Sandbox View

composition과 couplings view는 structure explorer에서 선택한 요소와 그 자식들 전체 구조를 보여 줍니다. 만약 channel 패키지에서 buffer 패키지로 가는 dependencies만 보고 싶다면 바로 이 sandbox view를 사용하면 됩니다. 아래의 이미지는 하나하나 package 또는 class를 structure explorer에서 drag and drop으로 추가 할때의 변화를 보여 줍니다.



이 외에도 여러가지 기능들이 잔뜩 있습니다만 이정도만 소개해도 충분히 사용할 매력을 느낄수 있다고 생각합니다. 무료 버전 500개 class제한이라는 제약이 있지만 유료버전을 구입하거나 또는 필요 한부분만 부분적으로 include하여 사용하여도 충분히 소스를 분석하는데 많은 도움이 될것이라 생각합니다.