이번 포스트는 Java 프로젝트에서 많이 사용하고 있는 정적분석 도구인 PMD, FindBugs, CheckStyle을 연동하는 방법에 대해서 다룹니다.
1. 정적분석
정적분석은 소프트웨어를 분석하는 방법의 하나로 소프트웨어를 실행하지 않고 코드 레벨에서 분석하는 방법입니다. 시중에는 다양한 오픈 소스 정적분석이 있으며, Java에서는 PMD, FindBug, CheckStyle과 같은 정적분석 도구를 많이 사용합니다.
1.1 PMD
PMD는 미사용 변수, 비어있는 코드 블락, 불필요한 오브젝트 생성과 같은 Defect을 유발할 수 있는 코드를 검사합니다. PMD는 Java에서 많이 사용하지만, Javascript, PLSQL, Apache Velocity, XML, XSL과 같은 다양한 영어를 지원합니다.
그리고 PMD의 부수적인 기능으로 CPD가 있는데, 이는 Copy-Paste-Detector의 약자입니다. 이름에서 알 수 있듯이 중복된 코드를 검출해주는 정적분석 도구 입니다. 이는 Java, C/C++, C#, PHP, Ruby, Fortran, Javascript, Object C, Python 등 다양한 언어를 지원하고 있습니다.
다음 웹 사이트에서 좀 더 많은 정보를 얻을 수 있습니다.
- https://pmd.github.io/
1.2 FindBugs
FindBugs 또한 대표적인 Java의 정적분석 도구 입니다. GNU 라이센스로 미국의 Maryland 대학에서 만들었다고 합니다. FindBugs는 Java 프로그램에서 100여개의 잠재적인 에러 타입을 찾아주며, 이 잠재적인 에러는 scariest, scary, troubling, concern으로 구분하여 점수(rank)가 주어집니다.
다음 웹 사이트에서 좀 더 많은 정보를 얻을 수 있습니다.
- http://findbugs.sourceforge.net/
1.3 CheckStyle
CheckStyle은 개발된 코드가 얼마나 코딩 룰을 잘 따르고 있는지 분석해주는 정적 분석 도구 입니다. 기본적으로 내장된 코딩룰은 Google's Style과 Unix Style입니다. 하지만 조직만의 코딩 룰을 정의하고 작성된 코드들이 이를 잘따르고 있는지 점검할 수 있습니다.
다음 웹 사이트에서 좀 더 많은 정보를 얻을 수 있습니다.
- http://checkstyle.sourceforge.net/
2. 구축환경
현재 문서는 다음 버전의 구축 환경에서 테스트 되었습니다. 다른 버전의 도구 환경에서는 다른 결과를 나타낼 수 있습니다.
- Maven Java 프로젝트 - 3.3.3 버전
- Jenkins - 1.624 버전
3. 구축하기
3.1 Jenkins Plugin 설치
Jenkins Plugin은 Jenkins > Jenkins 관리 > 설치 가능 탭에서 설치할 수 있습니다.
다음 플러그 인들을 함께 설치하시기 바랍니다.
- Checkstyle Plug-in
- FindBugs Plug-in
- PMD Plug-in
- Static Analysis Collector Plug-in
- Static Analysis Utilities
3.2 환경 설정
정적분석 적용을 희망하는 프로젝트에서 환경 설정 메뉴로 진입합니다.
아래 환경 설정을 차례로 실행합니다.
3.2.1 Add pre-build step
먼저 Pre-build 단계에서 Goals and options에 다음 Maven Goal들을 추가합니다. pom.xml 수정없이 단지 Goals을 입력하기만 하면 maven 서버에서 필요한 파일을 가져와서 빌드를 해줍니다. Maven을 사랑할 수 밖에 없네요.
pmd:pmd pmd:cpd findbugs:findbugs checkstyle:checkstyle
아래 그림은 현재 저가 사용하고 Pre-build 단계의 골의 예제를 보여 줍니다.
3.2.2 Build Settings
다음은 Build Settings에서 아래 항목들을 Check 해줍니다. 이 역시 체크만 해주면 알아서 리포트들이 생성됩니다.
- Publish Checkstyle analysis results
- Publish FindBugs analysis results
- Publish PMD analysis results
3.3 실행
모든 설정이 완료되었으면, Build Now를 클릭하여 빌드를 수행합니다.
4. 수행 결과
4.1 Trend Graph
아래는 FindBugs와 Checkstyle Trend를 보여줍니다. Trend Graph를 통해 Warning 수를 확인하고 개발자들이 Warning을 얼마나 수정하고 있는지를 빌드마다 확인할 수 있습니다.
4.2 세부 내용
4.2.1 FindBugs Result
다음은 FindBugs의 Warning의 내용을 보여줍니다.
4.2.2 CheckStyle Result
다음은 CheckStyle의 Warnning의 세부 내용을 보여줍니다.