PMD is a Java source code analyzer. It finds unused variables, empty catch blocks, unnecessary object creation, and so forth.
원문 링크 : http://network.hanbitbook.co.kr/view.php?bi_id=623&pg=8
자바 프로그램 분석기 - PMD | |
[한빛미디어] 2003-04-25 13:55 / 조회수 685 | |
저자: 한빛리포터 김영익 이 기사에서는 자바 프로그램의 소스 코드를 분석하여 프로그램의 불필요한 부분을 찾아내고 성능을 높이도록 도와주는 도구인 PMD에 대해서 소개할 것이다. PMD는 오픈 소스이고 콘솔용과 여러 에디터를 지원하므로 다양한 환경에서 자바 프로그램을 개발하는 사용자들에게 아주 유용한 물건(?)이 될 것이다. 1. PMD? 다음 사이트에 가면 PMD의 소개가 아래와 같이 간단히 있다. http://sourceforge.net/projects/pmd/ PMD is a Java source code analyzer. It finds unused variables, empty catch blocks, unnecessary object creation, and so forth. PMD는 자바 소스 코드 분석기로 사용하지 않는 변수, 아무 처리도 안하는 catch 블록, 불필요한 객체 생성 등등을 찾아낸다. 이 한마디가 PMD에 대한 소개의 전부이다. 그러나 PMD가 가진 기능은 정말 대단하다. 정말 위에서 말했던 기능을 전부 제공한다면 수많은 자바 개발자들이 뜨끔해 할 것이다. 하지만 이와 같은 도구를 사용하여 자신의 소스 코드를 정리하고 최적화시킨다는 것은 정말 가치 있는 일이라고 생각한다. 예전에 오라클에서 만든 JDeveloper라는 IDE에서 "Code Coach" 기능을 지원하는 것을 잠시 본적이 있었는데 PMD의 기능과 거의 유사한 기능을 가지고 있었던 기억이 난다. 그러나 JDeveloper는 상용제품이므로 많은 개발자들이 사용하지는 못할 것이다. 하지만 PMD는 오픈 소스이므로 전혀 비용부담이 없다. 게다가 여러 에디터를 지원하므로 자신의 입맛에 맞도록 선택만하면 된다. 그럼 이제부터 PMD의 설치부터 간단한 사용법에 대해서 살펴보겠다. 2. PMD 설치 및 사용 PMD는 앞에서처럼 http://sourceforge.net/projects/pmd/에 가면 다운로드 받을 수 있다. 다양한 버전이 있으므로 자신의 환경에 맞는 것을 골라서 다운로드 받도록 하자. 이 기사에서는 사용하기 편한 JBuilder용을 다운로드 받고 설명한다. 다운로드 받은 파일로 압축을 풀면 다음과 같은 2개의 파일이 있다. PMDOpenTool.jar pmd-1.02.jar 이 두 파일을 JBuilder 설치 폴더 밑의 \lib\ext에 두고 JBuilder를 실행하면 아래 그림처럼 툴바에 버튼이 3개 추가된다.
PMD를 처음 실행하면 소스 코드를 수정하라고 권고하는 빨간 줄이 아주 많이 나타나게 된다. 내용을 살펴보면 굳이 수정하지 않아도 되는 부분에 대해서도 기분 나쁘게 보이는 경우가 있다. 이럴 때는 주저하지 말고 PMD를 자기 입맛에 맞도록 설정하여 사용하면 된다.
지금까지 간단하게 PMD를 소개하고 사용하는 법에 대해서 살펴보았다. 본인도 모르는 기능이 많아서 죄송스럽게 생각한다. 하지만 위에 소개된 기능만으로도 분명 가치있는 도구라는 점에는 여러분도 동의할 것이다. 마지막으로 자신이 예전에 작성한 프로그램에 직접 PMD를 적용해보길 권한다. 무수히 쏟아지는 빨간 메시지와 함께 자기 자신을 되돌아 볼 수 있는 계기가 될 것이다. |
http://www-128.ibm.com/developerworks/kr/library/j-pmd/
PMD로 버그 잡기손쉬운 정적 분석 툴로 버그 잡기 |
난이도 : 중급 Elliotte Rusty Harold, 조교수, Polytechnic University 2005 년 1 월 07 일 소스, 정적 분석 툴인 PMD는 버그를 잡기위한 툴로 손색이 없다. PMD의 사용법을 설명한다. Tom Copeland의 PMD는 오픈 소스(BSD 라이센스) 툴로서 자바 소스 코드를 분석하여 잠재적인 버그를 찾아낸다. 일반적인 부분에서는 FindBugs와 Lint4j(참고자료)같은 툴과 비슷하다. 하지만 이 모든 툴들은 다른 버그들을 찾아내기 때문에 주어진 코드 기반에서 이들 각자를 실행하는 것이 적합하다. 이 글에서 PMD를 사용하는 방법과 활용법을 설명하겠다. PMD의 명령행 인터페이스도 연구할 예정이다. PMD를 Ant와 통합하여 자동 소스-코드 체크를 수행할 수 있고 주요 IDE와 프로그래머의 에디터를 위한 플러그인도 있다. PMD는 자바로 작성되고 JDK 1.3 또는 이후 버전이 필요하다. 명령행을 사용하는 것이 익숙하다면 PMD의 설치와 실행은 단순하다. zip 파일을 다운로드하고(참고자료), /usr 또는 홈 디렉토리에 저장한다. 이 글에서는 /usr에 저장하는 것으로 간주하겠다. PMD 를 실행하는 가장 쉬운 방법은 pmd.sh 스크립트(Unix/Linux) 또는 pmd.bat 스크립트(Windows)를 호출하는 것이다. 이 스크립트들은 bin 디렉토리 보다는 pmd-2.1/etc에 있다. 스크립트에는 세 개의 명령행 인자들이 있다:
예를 들어, 다음 명령어는 네이밍 규칙 세트를 사용하여 ImageGrabber.java 파일을 검사하여 XML 아웃풋을 만든다:
위 명령어에서 나온 아웃풋은 기본적으로 Listing 1. PMD XML 리포트
Listing 1에서 PMD 가 두 개의 문제들을 발견했음을 알 수 있다: ImageGrabber.java의 32번째 줄에서 짧은 변수 이름과 105번째 줄에서 밑줄을 포함하는 이름이 그것이다. 작은 문제인 것 처럼 보이지만 결과는 엄청날 수 있다. 이 경우, 105번째 줄의 밑줄은 10년 묵은 코드의 그저 픽스하기 쉬운 코드의 단편이였다. 하지만 첫 번째 문제를 검사해보면 PMD 아웃풋을 파일로 리다이렉트 하거나 일반적인 방식으로 에디터로 전달(pipe)할 수 있다. 나는 HTML로 아웃풋을 만들어서 이것을 웹 브라우저에 로딩해 보곤 한다. (그림 1) 그림 1. PMD 아웃풋(HTML) 아웃풋을 파일로 보내는 것은 소스 트리를 검사할 때 특히 유용하다. 디렉토리 이름, zip 파일, JAR 아카이브 파일을 첫 번째 인자로서 전달한다면 PMD 는 그 디렉토리 또는 아카이브에 있는 모든 .java 파일을 반복적으로 검사한다. 소량의 아웃풋이 위협적이다. 특히 PMD가 많은 오류 가능성을 만들어 낼 때 그렇다. 예를 들어 XOM 코드 베이스(참고자료)에서 PMD를 실행할 때, "in과 같은 짧은 이름을 가진 변수를 피하라(Avoid variables with short names like in" 는 보고를 지속적으로 보낸다. "in"은 PMD에서 유일하게 부족한 한 가지 기능은 "lint comment"를 소스 코드에 추가하여 명백히 위험한 연산을 수행한다는 것을 나타내는 기능이다. 이것은 기능이지 버그는 아니다. 이것 외에는 PMD는 대체적으로 괜찮다. 예를 들어, 오랜 시간동안
PMD는 이것을 빈
PMD는 16 가지 규칙 세트가 있고 자바 코드의 다양한 일반 문제들을 다룬다. 이중 어떤 것은 문제가 있는 것도 있다:
명령행에서 이름과 콤마를 분리하여 여러 규칙 세트들을 한번에 검사할 수 있다:
특정 규칙 세트로 종종 검사하고 있다면 이들을 자신만의 규칙 세트 파일로 결합할 수도 있다.(Listing 2) 이 규칙 세트는 기본 규칙, 네이밍 규칙, 디자인 규칙들을 반입한다: Listing 2. 기본 규칙, 네이밍 규칙, 디자인 규칙들을 반입하는 규칙 세트
좀더 세분화 된 것을 원한다면 각 세트에서 원하는 개별 규칙들을 선택할 수 있다. 예를 들어 Listing 3은 세 개의 빌트인 세트에서 11 개의 특정 규칙들을 선택한 커스텀 규칙 세트를 보여주고 있다. 큰 코드 기반을 검사하는 것은 많은 시간이 걸리기 때문에 찾고자 하는 특정 문제를 보다 빨리 찾을 수 있다. Listing 3. 11 가지 특정 규칙을 반입한 규칙 세트
세트 안에 대부분의 규칙들을 포함시킬 수 있지만 동의하지 않는 것이나 또는 오류 가능성들이 있는 것들은 배제할 수 있다. 예를 들어, XOM은 테이블 검색을 수행할 때 종종 Listing 4. switch 문장이 디폴트를 가져야 한다는 디자인 규칙을 배제한 규칙 세트
(PMD가 옳다면 대신 디폴트 블록을 추가해야 한다.) 빌트인 규칙에는 제한이 없다. 자바 코드를 작성하고 PMD를 재컴파일 하거나 XPath 식을 작성하여 새로운 규칙을 추가할 수 있다. (매우 비싼) 빌트인 규칙들을 사용해서 PMD는 코드의 실제 문제들을 반드시 찾아낸다. 이들 중 어떤 것은 미미하지만 어떤 것은 그렇지 않다. 모든 버그를 찾는 것은 아니다. 단위 테스트와 수락 테스트를 수행해야 한다. 또한 PMD는 알려진 버그를 잡을 때 훌륭한 디버거용 대체도 아니다. 하지만 알지 못했던 버그를 찾을 때 빛을 발한다. PMD가 문제를 찾을 수 없었던 코드 베이스를 보지 못했다. PMD는 싸고 쉬우며 재미있는 방식으로 프로그램을 향상시킨다. 전에 PMD를 사용하지 않았다면 시도해보라. |
Improving Code Quality with PMD and Eclipse