apiviz – java api visualizer
DESCRIPTION
'APIviz – Java API Visualizer' - presented at ZDNet Korea Advanced Computing Conference 2009 (14 April 2009)TRANSCRIPT
APIvizJava API Visualizer
이희승http://gleamynode.net/
JBoss, a division of Red Hat
목차
● Javadoc 생성 원리● Standard Doclet● Custom Doclet● APIviz 소개● APIviz 확장 태그● 로드 맵
Javadoc 생성 원리
● Javadoc 명령 실행● 소스 코드의 주석 부분을 해석● com.sun.javadoc 객체 모델 생성
– 본문– 태그 이름 및 값
● 객체 모델을 Doclet 이 처리– Standard Doclet
– Custom Doclet
– Custom Doclet derived from Standard Doclet
Standard Doclet
● 가장 대중적인 Doclet– JDK API Documentation
● API 용법 설명에 필요한 대부분의 요구 충족– HTML 본문– 상호 참조
● Types● URLs
– Metadata● Author, Version, …
Custom Doclet
● Javadoc 명령 실행시 '-doclet' 플래그 지정– javadoc -doclet org.jboss.apiviz.APIviz …
● com.sun.javadoc 패키지가 제공하는 객체 모 델을 바탕으로 임의의 행동 수행– XDoclet (pre-annotation era)
● 각종 XML 디스크립터 생성
– Tag enforcer● 특정 태그를 반드시 기입하도록
– @todo finder● @todo 태그를 찾아서 .txt 형태로 출력
Hybrid Custom Doclet
● Standard Doclet 을 감싸는 또다른 Doclet● Standard Doclet 이 생성한 HTML 을 수정
– 텍스트 Search & Replace– 이미지 삽입– 기본 스타일 개선– 기밀 정보 표시
● Standard Doclet 의 기능을 보완하는 확장태그– 확장 태그 값을 바탕으로 HTML 수정
– @confidential, @draft, @assistant John Doe
APIviz 소개
● Hybrid Custom Doclet● 클래스 및 패키지별 상관 관계 분석● Graphviz 의 graph visualization 사용● UML 다이어그램 자동 생성 삽입
– 패키지 다이어그램– 클래스 다이어그램
● 확장 태그– API 이해를 돕는 요소 부각
– API 이해를 방해하는 요소 제거
– Realization, Generalization 이외의 관계 추가
패키지 다이어그램
● JDepend 로 패키지간 의존성 정확히 파악
● Circular dependency● API 를 배우기 좋은
시작점을 Highlight– @apiviz.landmark
클래스 다이어그램
개별 클래스 다이어그램
확장 태그
● @apiviz.*● 기존 Visualizer 와는 달리 의미에 집중● 소스 코드를 읽을때 어떻게 해석되는가 ?
– @apiviz.color
– @apiviz.shape
– @apiviz.landmark
– @apiviz.stereotype
확장 태그
● 다이어그램 노이즈 제거– @apiviz.exclude <regex>
● ^.*(Impl|Util)$
– @apiviz.excludeSubtypes● 클래스 및 패키지 유형 지정
– @apiviz.landmark
– @apiviz.stereotype
– @apiviz.category
고급 확장 태그
● 클래스간 관계 지정● Generalization, Realization 만 자동 인식
– Dependency – @apiviz.uses
– Navagability – @apiviz.has
– Aggregation – @apiviz.owns
– Composition – @apiviz.composedOf
– @see
한계
● 복잡한 모델의 Visualization 자체– 패키지 100 개의 의존성을 예쁘게 표현 ?
● 간결한 자동 관계 추론– 잡음 없는 자동 추론은 가능한가 ?
● Graphviz 에 레이아웃 및 렌더링 의존– 외부 실행 파일 호출 (dot.exe)
– 소프트웨어 다이어그램에 최적화 ?● 클래스 상관 관계 태그 문법의 복잡성
로드 맵 또는 개선안
● 선택적 자동 관계 추론● 레이아웃 엔진 교체● UML, 비 UML 에 무관히 최적의 표현법 발굴● No More Standard Doclet?
– Sexy Style
– DHTML / AJAX
– Full Text Search
– Collaborative Tagging / Comment System