#비교 (1)

안녕하세요 케이치입니다.

 

오늘은 수많은 소스 정적 분석 툴 중에서 세가지 툴에 대한 비교를 해볼까 합니다.

 

이미 어떤 분이 분석을 해놓은 영문 자료가 있어서 번역을 해보았습니다.

 


   
 Findbugs

 
 PMD
 
 Checkstyle
  버전  3.0.0  5.2.2  6.1.1

  라이센스

 Lesser GNU Public License  BSD-style license  Lesser General Public License
  목적   잠재적 버그 찾기
( 자바 소스파일이 아닌  바이트 코드를 이용 )
   잠재적인 문제들, 버그 가능성이 있는 부분들,
  사용되지 않았거나 최적화되지 않은 코드들 검색
  자바 소스 파일을 읽어서 소스 코드 표준에 위반되는 것들을 검색,
 e.g.  Sun Code Conventions, JavaDoc
 장점 - 실제 결함을 잘 찾아줌
- 찾은 결함이 엉뚱한 결함일 확률이 낮음 ( 정확성이 높음 )
- 바이트 코드를 읽음으로 속도가 빠름
- 종종 실제 결함을 찾아줌
- finds bad practices
 - 정해준 코딩 규약에 위반되는 것들을 검사해줌. 직접 코딩 규약을 만들어 사용가능.
 약점 - 컴파일된 클래스 파일에서 바이트 코드를 읽어서 사용해야하므로 빌드과정이 필수  - 복제된 코드를 찾는 속도가 느림  - 실제 버그를 찾을 수 없음
 규칙 수  408  234  132
규칙 카테고리
 Correctness
 Bad practice
 Dodgy code
 Multithreaded Correctness 
 Performance Malicious 
 Code Vulnerability
 Security Experimental
 Internationalization


 JSP 
 - Basic JSF 
 - Basic JSP
 XSL 
 - XPath in XSL
 Java 

 - Design 
 - Coupling 
 - Jakarta Commons Logging 
 - Basic 
 - Strict Exceptions 
 - Security Code Guidelines 
 - Java Logging 
 - Android -Controversial 
 - Comments 
 - Type Resolution 
 - Empty Code 
 - String and StringBuffer 
 - Code Size 
 - Braces 
 - Unused Code 
 - Unnecessary 
 - J2EE 
 - JavaBeans 
 - Migration 
 - Import Statements 
 - JUnit 
 - Naming 
 - Finalizer 
 - Optimization 
 - Clone Implementation
 Ecmascript
 
 - Basic Ecmascript 
 - Unnecessary 
 - Braces 
 XML
 
 - Basic XML
 Annotations
 Block Checks
 Class Design
 Coding
 Duplicate Code
 Headers
 Imports
 Javadoc Comments
 Metrics
 Miscellaneous
 Modifiers
 Naming Conventions
 Regexp
 Size Violations
 Whitespace

출처 : http://www.sw-engineering-candies.com/blog-1/comparison-of-findbugs-pmd-and-checkstyle

 

2020년 5월 업데이트

실제로 세 가지를 모두 다운로드 받아서 테스트도 해보았고 FindBugs는 실제 서비스에 기능으로 적용도 해보았습니다.

우선 잠재적인 버그 분석을 위해서는 FindBugs가 단연 최고였습니다.

그리고 코딩컨벤션을 정해놓고 확인하기에는 CheckStyle이 좋습니다. 

FindBugs와 CheckStyle은 사용하는 목적 자체가 다른 툴이었습니다.

PMD는 이도저도 아닌 그저그런 툴로 기억합니다.

 

 

--- 이하 최초 발행글 ---

추천 사항

필요에 따라 하나씩만 사용하셔도 되지만 세가지를 모두 사용하시면 좀 더 확실한 정적 툴 분석을 하실 수 있을 것 같습니다.

세 툴을 모두 처음 사용하신다면 제일먼저 FindBugs를 사용하시고 그 다음 PMD 그리고나서 마지막에 CheckStyle을 사용하실 것을 권장드립니다. 이건 다른 분이 하신 말씀이고요....전 CheckStyle만 잠깐 써봤는데요, CheckStyle은 뭐랄까 회사 내부의 코딩 정책을 정의해서 사용하면 좋을만한 그런 툴이더군요. 대신 룰을 너무 과하게 주면 개발자들이 좀 싫어할 수 있을 것 같다는 생각이 드네요.

 

아래 링크는 FindBugs 프로젝트에 참여한 메릴랜드 주립대 교수님의 1시간 분량짜리 세미나입니다.

관심있으신 분들은 보시면 좋을것 같네요. 참고로 언어는 영어입니다.

https://www.youtube.com/watch?v=8eZ8YWVl-2s

 

이상 케이치였습니다.

오늘도 즐프하세요~~ ^-^