본문 바로가기

OS&TOOL/eclipse

PDM 이클립스 플러그인 사용법

개발 중간중간 코드 인스펙션이라는 단계를 거치기도 하는데 코딩이 이뤄지고 난 후에 인스펙션을 하고 일괄 수정하다보니 이중작업이라는 생각이 들었다. 문제가 될만한 것들은 미리 예방하는 편이 좋을 듯 하여 알아보니 PMDCheckStyle등이 눈에 띄었다. 둘 다 써 본 결과 PMD를 선택하게 되었는데 그 이유는 다음과 같다.
 
- 디폴트로 SUN사의 Java Convention을 따르는데 비해 CheckStyle은 자유도가 높은 편이다.
간단한 예를 들면 패키지명에 소문자를 사용하는 것에 대해 PMD는 기본 규칙으로 있지만, CheckStyle에서는 대문자도 사용가능한 것이 디폴트이다. 물론 정규식을 수정해주면 CheckStyle에서도 걸러낼 수 있다.
- 코드 인스펙션에 대한 다양한 파일 형식의 리포트를 생성해준다. (html, xml, txt 형식 등)
Maven에서 이 리포트를 사용한다.
- PMD 퍼스펙티브가 따로 있다.
- Cut and Paste 코드(잘라붙여서 여기저기 똑같이 만들어놓은 코드)를 찾아준다.
 
 
■ 설치

Help > Software updates > Find and install 에서 원격 업데이트 주소(http://pmd.sf.net/eclipse)를 통해 업데이트
 
 
■ 사용법

1) 프로젝트 단위로 사용 여부를 프로젝트 Properties의 PMD 항목에서 Enable PMD를 선택한다. 선택 하고 PMD 기준에 맞춰 전체 빌드 하겠냐고 물어보면 Yes 선택.
2) 프로젝트에서 오른쪽 버튼을 클릭하여 PMD 관련 메뉴에서 인스펙션에 대한 리포트를 생성하거나 Cut And Paste 코드를 찾을 수 있다.
3) PMD 퍼스펙티브를 열거나 PMD의 Violations Overview 뷰를 열면 간단한 통계를 볼 수 있다. 색깔 콩을 눌러서 위반 우선순위별로 확인 가능하고 각 파일의 위반사항 갯수, 라인당 위반 수, 메소드당 위반 수를 볼 수 있다.
4) Violations Outline 뷰에서 marked as reviewd로 선택하면 violation 목록에서 제거되고 Clear violatoin reviews 하면 다시 원복된다. (marked as reviewd는 확인했다고 표시하고 violation에서 빼는 용도인 듯. 메뉴 앞의 아이콘을 보면 violation을 주석처리하는 의미인거 같다. ㅋㅋ)
 
 
 
 
■ 환경설정 (Window 메뉴 > Preferences)

# CPD Preferences : Cut And Paste 검사 시 최소 블럭 사이즈를 설정할 수 있다.
# Rules Configurations : 규칙들을 설정한다.
- 규칙 목록에서 Priority를 Error high / Error / Warning high / Warning / Information 단계로 조정 가능
- 속성값을 조절할 수 있는 규칙의 경우 아래 부분의 Rule Properites 에서 확인 및 수정할 수 있다.
- 규칙들의 목록이 있는데 보통 제목만으로 알 수 있지만 Edit rule 버튼을 누르면 자세한 설명과 함께 예제도 볼 수 있다.
- import rule set 선택 시 직접 작성한 룰셋이나 기본적으로 제공한 룰셋을 선택할 수 있다.
  (주의) import rule set 으로 추가 시 기존 내용에 append 된다.  이미 Basic Rules를 import 한 상태에서 또 import 하면 같은 내용이 계속 추가됨. -_-;
 
 
 
 
■ 커스터마이징

제공하는 룰을 모두 체크하면 거의 코딩이 불가능해보여서 정말 필요하다고 생각되는 몇 가지만 선택했다.
 
1. 모든 룰셋을 지운다. (Clear all)
 
2. 일단 다음 룰셋만 import
  Basic Rules
  Naming Rules
  Code size Rules
  Optimization Rules
 
3. 각 룰별 조정
  # 우선순위를 에러로 변경할 룰
    MethodNamingCoventions
    NoPackage
    PackageCase
    DoubleCheckedLocking
    MethodWithSameNameAsEnclosingClass
 
  # 속성을 변경할 룰
    LongValues : 프라퍼티 창에서 minumum 값을 조정 (기본값인 10글자는 너무 짧아서 30글자로 했다.)
  # 삭제할 룰 (또는 룰 적용여부에서 체크 해제)
    AbstractNaming
    MethodArgumentCouldBeFinal
    LocalVariableCouldBeFinal