PMD는 16 가지 규칙 세트가 있고 자바 코드의 다양한 일반 문제들을 다룬다.
규칙 |
설명 |
Basic rulesets/basic.xml |
대부분의 개발자들이 동의하는 규칙: catch 블록들은 비어있어서는 안되고, equals()를 오버라이딩 할 때 마다 hashCode()를 오버라이드한다. |
Naming rulesets/naming.xml |
표준 자바 네이밍 규약을 위한 테스트: 변수 이름들은 너무 짧아서는 안된다; 메소드 이름은 너무 길어서는 안된다. 클래스 이름은 대문자로 시작해야 하고, 메소드와 필드 이름들은 소문자로 시작해야 한다. |
Unused code rulesets/unusedcode.xml |
결코 읽히지 않은 프라이빗 필드와 로컬 변수, 접근할 수 없는 문장, 결코 호출되지 않는 프라이빗 메소드 등을 찾기 |
Design rulesets/design.xml |
다양한 좋은 디자인 원리 체크,이를 테면: switch 문장은 default 블록을 갖고 있어야 하고, 심하게 중첩된 if 블록은 피해야 하고, 매개변수들은 재할당되어서는 안되며, 더블(double)이 동일함(equality)과 비교되어서도 안된다 |
Import statements rulesets/imports.xml |
임포트 문장에 대한 작은 문제들 점검. 같은 클래스를 두 번 반입하는 것이나 java.lang에서 클래스를 임포팅하는 것 등 |
JUnit tests rulesets/junit.xml |
테스트 케이스와 테스트 메소드 관련 특정 문제 검색. 메소드 이름의 정확한 스펠링과 suite() 메소드가 정적이고 퍼블릭인지 여부 |
Strings rulesets/string.xml |
스트링 관련 작업을 할 때 발생하는 일반적인 문제들 규명. 스트링 리터럴 중복, String 구조체 호출, String 객체에 toString() 호출하기 등. |
Braces rulesets/braces.xml |
for, if, while, else 문장이 괄호를 사용하는지 여부 검사. |
Code size rulesets/codesize.xml |
과도하게 긴 메소드, 너무 많은 메소드를 가진 클래스, 리팩토링에 대한 유사한 후보들을 위한 테스트. |
Javabeans rulesets/javabeans.xml |
직렬화 될 수 없는 bean 클래스 같이 JavaBeans 코딩 규약을 위배하는 JavaBeans 컴포넌트 검사. |
Finalizers |
finalize() 메소드는 자바에서 일반적인 것은 아니기 때문에 사용법에 대한 규칙이 비교적 익숙하지 않다. 이 그룹의 검사는 finalize() 메소드 관련한 다양한 문제들을 찾는다. 이를 테면, 비어있는 finalizer, 다른 메소드를 호출하는 finalize() 메소드 finalize()로의 호출 등이 그것이다 |
Clone rulesets/clone.xml |
clone() 메소드에 대한 규칙: clone()을 오버라이드하는 클래스는 Cloneable을 구현해야 하고, clone() 메소드는 super.clone()을 호출해야 하며,clone() 메소드는 실제로 던지지 않더라도 CloneNotSupportedException을 던지도록 선언되어야 한다. |
Coupling rulesets/coupling.xml |
클래스들간 과도한 커플링 표시 검색. 지나치게 많은 임포트, supertype 또는 인터페이스가 충분한 곳에서 subclass 유형 사용하기, 너무 적은 필드, 변수, 클래스 내의 리턴 유형 등. |
Strict exceptions rulesets/strictexception.xml |
예외 테스트: 메소드는 java.lang.Exception을 던지도록 선언되어서는 안되고, 예외는 플로우 제어에 사용되어서는 안되며, Throwable은 잡혀서는 안된다. |
Controversial rulesets/controversial.xml |
일부 PMD 규칙들은 유능한 자바 프로그래머가 받아들일 수 있는 것들이다. 하지만 어떤 것은 논쟁의 여지가 충분하다. 이 규칙 세트에는 좀더 의심스러운 검사들이 포함되어 있다. 변수에 null 할당하기, 메소드에서 온 다중의 리턴 포인트 sun 패키지에서 임포팅 등이 포함된다 |
Logging rulesets/logging-java.xml |
java.util.logging.Logger를 위험하게 사용하는 경우 검색: 끝나지 않고 정적이지 않은 logger와 한 클래스에 한 개 이상의 logger 등 |
Inspection 사용자룰 활용하기
'보안 > 시큐어코딩' 카테고리의 다른 글
[금융보안원] 금융전산시스템 개발자를 위한 보안 과정 (0) | 2015.08.09 |
---|---|
진단원 과정 보안약점 진단 보고서 (0) | 2015.06.16 |
입력값 검증 작업 순서 (0) | 2015.05.28 |
금보원 실습환경설정 (0) | 2015.05.27 |
[소프트웨어 개발보안 방법론] MS-SDL (0) | 2015.05.25 |