이클립스에서 PMD 사용하기(전자정부 룰셋 적용) 씨큐어코딩
PMD란? 정적코드분석, JAVA 소스코드를 분석해 문제를 알려주는 오픈소스. 애플리케이션 코드 내에서 발견된 문제에 대해 보고하는 오픈소스 정적소스코드 분석기. PMD에는 기본제공 룰셋이 포함되어있으며 사용자 지정규칙을 작성하는 기능을 지원
1. 먼저 이클립스에서 PMD 설치
- 이클립스 상단 Help -> Eclipse Marketplace... 클릭
- find에 pmd 검색후 pmd-eclipse-plugin 4.42.0 인스톨 버튼클릭 후 라이센스 동의후 설치완료
2. 전자정부프레임워크 룰셋 적용
- 전자정부프레임워크 룰셋 다운로드 (전자정부프레임워크 사이트 다운로드 링크)
-
표준 Inspection 룰셋 한글/영문판의 압축파일 : 개발환경 2.5 이하 버전 사용
-
표준 Inspection 룰셋 한글/영문판의 압축파일 : 개발환경 2.7 이상 버전 사용
-
표준 Inspection 룰셋 한글/영문판의 압축파일 : 개발환경 3.5 이상 버전 사용
-
표준 Inspection 룰셋 한글/영문판의 압축파일 : 개발환경 3.8 이상 버전 사용
- Eclipse IDE의 메뉴에서, Window > Preferences 선택
- Preferences 창의 왼쪽 메뉴 구조에서, PMD > Rules Configuration 선택
- Preferences 창에서, use global rule management 체크, ruleset 목록 전체선택후 우측의 Remove rules 아이콘 클릭
- import ruleset 아이콘 클릭
- Browse버튼을 선택하여 미리 다운받는 개발환경에 맞는 룰셋 선택 후 OK버튼 선택
3. 점검
- Package Explorer 오른쪽 클릭 > PMD > Check Code
- Package Explorer 오른쪽 클릭 > PMD > Genrate Reports 선택시 점검결과 보고서 저장
하단 Vio
- 왼쪽 Violations Outline에서 오른쪽 클릭 후 show details 선택 시 오류 상세 확인
- Mark as reviewed 선택 시 소스코드내 주석 추가
4. 점검결과 보고서 출력 양식변경
- 점검후 보고서 출력시 결과 창(오류파일 경로, 파일명, 라인, 문제점)
5. 전자정부프레임워크 룰셋 점검항목
번호 | 룰이름 | 설명 |
01 | EmptyCatchBlock | 내용이 없는 Catch Block이 존재 |
02 | EmptyIfStmt | 빈 if 구문의 사용을 피하도록 함 |
03 | EmptyWhileStmt | 빈 while 구문이 사용되었음 |
04 | EmptyTryBlock | 내용이 없는 try 블록이 존재함 |
05 | EmptyFinallyBlock | 내용이 없는 finally 블록이 존재함 |
06 | UnnecessaryConversionTemporary | 기본 데이터 타입을 String으로 변환할 때 불필요한 임시 변환 작업을 피하도록 함 |
07 | EmptyStatementNotInLoop | 필요없는 문장 (;)이 있음 |
08 | WhileLoopsMustUseBraces | 중괄호없이 사용된 while문의 사용은 바람직하지 못한 코딩 습관임 |
09 | AssignmentInOperand | 피연산자내에 할당문이 사용됨. 해당 코드를 복잡하고 가독성이 떨어지게 만듬 |
10 | UnnecessaryParentheses | 괄호가 없어도 되는 상황에서 불필요한 괄호를 사용할 경우 마치 메소드 호출처럼 보여서 소스 코드의 가독성을 떨어뜨릴 수 있음 |
11 | SimplifyBooleanExpressions | boolean 사용 시 불필요한 비교 연산을 피하도록 함 |
12 | SwitchStmtsShouldHaveDefault | Switch구문에는 반드시 default label이 있어야 함 |
13 | AvoidReassigningParameters | 넘겨받는 메소드 parameter 값을 직접 변경하는 코드 탐지. |
14 | FinalFieldCouldBeStatic | final field를 static으로 변경하면 overhead를 줄일 수 있음 |
15 | EqualsNull | null 값과 비교하기 위해 equals 메소드를 사용하였음 |
16 | SimpleDateFormatNeedsLocale | SimpleDateFormat 인스턴스를 생성할때 Locale 을 지정하는 것이 바람직함 |
17 | ImmutableField | 생성자를 통해 할당된 변수를 Final로 선언하지 않았음 |
18 | AssignmentToNonFinalStatic | static 필드의 안전하지않은 사용 가능성이 존재 |
19 | AvoidSynchronizedAtMethodLevel | mothod 레벨의 synchronization 보다 block 레벨 synchronization 을 사용하는 것이 바람직함 |
20 | AbstractClassWithoutAbstractMethod | Abstract Class내에 Abstract Method가 존재하지 않음 |
21 | UncommentedEmptyMethod | 빈 메소드에 빈메소드임을 나타내는 주석을 추가할 것 |
22 | AvoidConstantsInterface | Interface는 클래스의 behavior 을 구현하는 데에만 사용해야 함 |
23 | DuplicateImports | import문이 중복 선언 되었음 |
24 | ImportFromSamePackage | 동일 패키지에 있을 때는 import문을 사용할 필요가 없음 |
25 | SystemPrintln | System.out.print 가 사용됨. 전용 로거를 사용할 것을 권장 |
26 | VariableNamingConventions | final이 아닌 변수는 밑줄을 포함할 수 없음 |
27 | MisleadingVariableName | non-field 이름이 m_ 으로 시작함' |
28 | AvoidArrayLoops | 배열의 값을 루프문을 이용하여 복사하는 것 보다, System.arraycopy() 메소드를 이용하여 복사하는 것이 효율적이며 수행 속도가 빠름 |
29 | UnnecessaryWrapperObjectCreation | 불필요한 Wrapper Object가 생성되었음. 탐지된 코드는 삭제하고, 별도의 parse관련 전용 메소드 사용을 권장 |
30 | AvoidThrowingRawExceptionTypes | 가공되지 않은 Exception을 throw하는 것은 비추천 |
31 | AvoidThrowingNullPointerException | NullPointerException을 throw하는 것은 비추천 |
32 | StringInstantiation | 불필요한 String Instance를 생성하는 코드를 탐지. 간단한 형태의 코드로 변경 필요 |
33 | StringToString | String 객체에서 toString()함수를 사용하는 것은 불필요함. 해당 코드 제거 필요 |
34 | InefficientStringBuffering | StringBuffer 함수내에서 비문자열 연산 이용하여 직접 결합하는 코드 사용을 탐지. append 메소드 사용을 권장 |
35 | InefficientEmptyStringCheck | 빈 문자열 확인을 위해 String.trim().length() 을 사용하는 것은 피하도록 함. whitespace/Non-whitespace 확인을 위한 별도의 로직 구현을 권장 |
36 | UselessStringValueOf | String 을 append 할 경우, String.valueOf 함수를 사용할 필요 없음 |
37 | UnusedPrivateField | 사용되지 않는 Private field의 탐지 |
38 | UnusedPrivateMethod | 사용되지 않는 Private Method 선언을 탐지 |
39 | UnusedFormalParameter | 메소드 선언 내에사용되지 않는 파라미터를 탐지 |
'개발 > WEB' 카테고리의 다른 글
[저장용]chartjs 가로 누적 차트 그리기 (0) | 2023.11.13 |
---|---|
[저장용] 스크롤 최하단 감지 이벤트 (0) | 2022.12.19 |
[저장용] a 태그 마우스 오버시 URL 안보이도록 변경 (0) | 2022.11.29 |
Syntax Error / 구문 오류 (unrecognized expression: #;) (0) | 2021.06.22 |
댓글