PMD와 FindBugs의 차이점은 무엇입니까?


107

PMD와 CheckStyle을 비교 하는 질문 이있었습니다 . 그러나 PMD와 FindBugs의 차이점 / 유사성에 대한 좋은 분석을 찾을 수 없습니다. 중요한 차이점은 PMD는 소스 코드에서 작동하는 반면 FindBugs는 컴파일 된 바이트 코드 파일에서 작동한다는 것입니다. 그러나 기능 측면에서 둘 중 하나를 선택해야합니까, 아니면 서로 보완해야합니까?

답변:


151

둘 다 사용하고 있습니다. 나는 그들이 서로를 보완한다고 생각합니다.

말했듯이 PMD 는 소스 코드에서 작동하므로 명명 규칙 위반, 중괄호 부족, 잘못된 null 검사, 긴 매개 변수 목록, 불필요한 생성자, 스위치 중단 누락 등과 같은 문제를 찾습니다. PMD는 또한 Cyclomatic에 대해 알려줍니다. 매우 도움이되는 코드의 복잡성 (FindBugs는 Cyclomatic 복잡성에 대해 알려주지 않음).

FindBugs 는 바이트 코드에서 작동합니다. 다음은 FindBugs가 발견하는 몇 가지 문제입니다. 하위 유형에서 equals () 메서드가 실패하고, 복제 메서드가 null을 반환 할 수 있음, 부울 값의 참조 비교, 불가능한 캐스트, 0-31 범위에 있지 않은 양만큼 이동 된 32 비트 정수, 자신을 포함하는 컬렉션, equals 메소드는 항상 true, 무한 루프 등을 반환합니다.

일반적으로 그들 각각은 다른 문제 세트를 찾습니다. 둘 다 사용하십시오. 이 도구는 좋은 Java 코드를 작성하는 방법에 대해 많은 것을 가르쳐주었습니다.


컬렉션에 자체가 포함되어있을 때 보았던 특정 오류 코드는 무엇이며 FindBugs에 의해 가능한 버그로 표시된 이유는 무엇입니까?
Geek

Sonarqube 6.3은 더 이상 ... Sonarqube 이제 자바 팔 필요가 없으며 Findbugs은 아직 자바 7을 지원하고있다 아니라 이후
마르쿠스

22

PMD의 가장 좋은 기능은 규칙 디자이너와 함께 번들로 제공되는 XPath 규칙으로 코드 샘플에서 새 규칙을 쉽게 구성 할 수 있습니다 (RegEx 및 XPath GUI 빌더와 유사 함). FindBugs는 기본적으로 더 강력하지만 프로젝트 별 규칙과 패턴을 구성하는 것은 매우 중요합니다.

예를 들어, 2 개의 중첩 된 for 루프와 관련된 성능 문제가 발생하여 O (n ^ 2) 실행 시간이 발생하여 쉽게 피할 수 있습니다. PMD를 사용하여 임시 쿼리 를 생성하고 중첩 된 for 루프의 다른 인스턴스를 검토했습니다-// ForStatement / Statement // ForStatement. 이것은 문제의 두 가지 더 많은 사례를 지적했습니다. 이것은 일반적인 규칙이 아닙니다.


2

PMD는

  • 유명한
  • 업계에서 널리 사용
  • xml에 규칙을 추가 할 수 있습니다.
  • 오류 수준 및 경고 수준에 대한 자세한 분석을 제공합니다.
  • "줄 복사 및 붙여 넣기"를 위해 코드를 스캔 할 수도 있습니다. 중복 코드입니다. 이것은 Java oops 구현에 대한 좋은 아이디어를 제공합니다.

FindBugs와 대화하지 않습니다. 문제 세트가 동일하지 않기 때문에 상호 보완 적입니다.
Stevers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.