Tech

PMD 와 Xpath

glqdlt 2016. 12. 2. 16:02

#들어가는 말

대학원에서 PMD를 이용한 시큐어코딩 진단 이라는 주제로 

PMD의 핵심기능인 트리노드 조회 (Xpath 검색)를 이용한 방법론에 대한 리포트를 작성하다가

꽤나 잘 정리가 되어서 포스팅.

PMD는 자바 기반의 소스코드 시큐어코딩 여부를 정적 검사하는 오픈소스다.

이클립스나 인텔리J 의 플러그인 기반으로 배포 되고 있고, 꽤나 많이들 쓴다고 하는 데,

이 툴의 장점은 각 클래스와의 연관 관계를 Tree-node 형태로 그래픽 전개해주고 이를 Xpath 문법의 Rule을 작성해 특정 위치에 대해 검사를 할 수 있다는 게 장점이다.



# PMD 란?

PMD는 자바의 잘못된 코드를 검사해주는 자바 기반의 도구이다. 프로그래머가 실수 혹은 무지각으로 인한 잠재되어 있는 에러 혹은 위험요소를 사전에 탐지하여 사후 생길 위험을 제거해주는 강력한 소스 코드 분석기라고 할 수 있다.  위키피디아에서는 PMD를 ' Programming Mistake Detector.(프로그래밍 실수 검출기)' 라고 언급하고 있다.
단독 형태로도 사용 할 수 있으며, 이클립스나 인텔리J와 같은 유명 자바 IDE(통합개발도구)에 플러그인 형태로 배포 되어 사용 할 수도 있다.
PMD is a source code analyzer. It finds common programming flaws like unused variables, empty catch blocks, unnecessary object creation, and so forth. It supports Java, JavaScript, Salesforce.com Apex, PLSQL, Apache Velocity, XML, XSL.
Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code in Java, C, C++, C#, Groovy, PHP, Ruby, Fortran, JavaScript, PLSQL, Apache Velocity, Ruby, Scala, Objective C, Matlab, Python, Go, Swift and Salesforce.com Apex.
( Wiki 직역: PMD는 소스 코드 분석기입니다. 사용되지 않는 변수, 빈 catch 블록, 불필요한 개체 생성 등과 같은 일반적인 프로그래밍 결함을 찾습니다. )

# AST 란?

AST 는  프로그래밍 언어로 작성된 소스 코드의 추상 구문 구조를 나타내는 트리이다. 트리의노드는 소스 코드에서 발생하는 구조를 나타낸다.
PMD Java 소스 코드를 AST 트리 형식으로 매핑한다. 트리는 텍스트 기반 소스보다 프로그래밍 방식으로 분석하고 수정할 수있는보다 편리하고 신뢰할 수 있다고 한다. ASTXML 파일의 DOM 트리 모델과 유사하며, DOM과 마찬가지로 AST를 사용하면 트리 모델을 수정하고 Java 소스 코드에서 이러한 수정 사항을 반영 할 수 있다. 아래 그림을 참조하자.





# XML 그리고 XPath 

XPath(XML Path Language)는 W3C의 표준으로 확장 생성 언어 문서의 구조를 통해 경로 위에 지정한 구문을 사용하여 항목을 배치하고 처리하는 방법을 기술하는 문법이다. XML(XML Path Language) 약칭을 그대로 해석해보면 XML의 구조를 위한 언어라 볼 수 있는 데, AST기반의 PMD는 XML의 트리 모델과 흡사하다 보니 익히 사용되고 있는 XPath 문법을 PMD에서도 쓸 수 있도록 차용되었다 볼 수가 있다.

XML(Extensible Markup Language)은 W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다. XML은 SGML의 단순화된 부분집합으로, 다른 많은 종류의 데이터를 기술하는 데 사용할 수 있다. XML은 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다.


'Tech' 카테고리의 다른 글

Apt-get 먹통 일 때 ( /var/lib/dpkg/lock )  (0) 2016.12.19
Tomcat과 ServletContextListener  (0) 2016.12.05
Javadoc 문법  (0) 2016.11.22
형상관리에 대한 이야기 CVS vs GIT  (0) 2016.11.15
블로그에 소스코드 올리기 color scripter  (0) 2016.11.10