메뉴 건너뛰기

이번 포스트는 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 관리 > 설치 가능 탭에서 설치할 수 있습니다. 

다음 플러그 인들을 함께 설치하시기 바랍니다. 



다음 그림은 PMD 플러그인이 설치된 예제를 보여 줍니다. 

static01.PNG


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 단계의 골의 예제를 보여 줍니다. 

static02.PNG


3.2.2 Build Settings

다음은 Build Settings에서 아래 항목들을 Check 해줍니다. 이 역시 체크만 해주면 알아서 리포트들이 생성됩니다. 

  • Publish Checkstyle analysis results
  • Publish FindBugs analysis results
  • Publish PMD analysis results

static03.PNG


3.3 실행

모든 설정이 완료되었으면, Build Now를 클릭하여 빌드를 수행합니다. 



4. 수행 결과

4.1 Trend Graph

아래는 FindBugs와 Checkstyle Trend를 보여줍니다. Trend Graph를 통해 Warning 수를 확인하고 개발자들이 Warning을 얼마나 수정하고 있는지를 빌드마다 확인할 수 있습니다. 


static04.PNG


static05.PNG


4.2 세부 내용

4.2.1 FindBugs Result

다음은 FindBugs의 Warning의 내용을 보여줍니다. 


static06.PNG


4.2.2 CheckStyle Result

다음은 CheckStyle의 Warnning의 세부 내용을 보여줍니다. 


static07.PNG


이상으로 Jenkins에서 Static Analysis 대표 플러그인인 CheckStyle, FindBugs, PMD의 설치 방법에 대해서 알아보았습니다. 



Who's Tom

profile

저는 2009년 ALM의 세계에 뛰어 들었습니다. 

지금은 ALM, DevOps, 공학 프로세스, 요구공학, 테스트 엔지니어링 등 다양한 영역에 관심이 많습니다.

http://www.curvc.com 

?
  • profile
    Tom 2015.08.29 19:48
    현재 PMD 또한 실행 되지만, mavne 서버에서 가져오는 pmd.xml, cpd.xml가 비어 있어서, 항상 결과가 0으로 출력되네요. 해결 방법을 찾으면 업데이트 해놓겠습니다.

 


  1. SonarQube Windows 서비스 등록

    SonarQube Windows 서비스 등록 해당 가이드는 Windows 32bit, 64bit 모두 동일하니 아래 가이드를 참고하셔서 사용하면 됩니다. 먼저 Sonarqube를 설치한 디렉토리로 이동합니다. bin 디렉토리 아래 실행을 위한 해당 버전의 폴더로 이동합니다. 저...
    Date2015.09.07 ByTom Reply1 Views4989
    Read More
  2. 프로젝트 코드 가시화를 위한 Jenkins와 SonarQube 연동

    이번 포스트는 프로젝트의 코드를 가시화할 수 있는 Dashboard인 SonarQube와 Jenkins의 연동 방법에 대해서 작성합니다. Jenkins와 SonarQube의 연동을 통해 Build 서버에서 Build가 수행될때마다 현재 코드의 품질 지표를 SonarCode에서 실시간으로 확인할 ...
    Date2015.08.31 ByTom Reply1 Views11831
    Read More
  3. Jenkins 정적분석(PMD, FindBug, CheckStyle) 구축과 실행 결과

    이번 포스트는 Java 프로젝트에서 많이 사용하고 있는 정적분석 도구인 PMD, FindBugs, CheckStyle을 연동하는 방법에 대해서 다룹니다. 1. 정적분석정적분석은 소프트웨어를 분석하는 방법의 하나로 소프트웨어를 실행하지 않고 코드 레벨에서 분석하는 ...
    Date2015.08.28 ByTom Reply1 Views26837
    Read More
  4. Bitnami Redmine 3.1 SVN Server 저장소 설정 방법

    Bitnami Redmine 3.1 SVN Server 설정 방법 Bitnami Redmine을 설치하면서 SVN Server를 함께 설치할 수 있습니다. 자신이 원하는 경로를 저장소로 설정하기 위해서는 간단하게 설정하고 Service를 새로 등록해주어야 합니다. 이 문서는 이를 진행하는 ...
    Date2015.08.24 ByTom Reply2 Views9127
    Read More
  5. Git 태그 기초

    기본적인 Git 태그 사용법에 대해 알아보겠습니다. Tagging 의 용도? 변경 이력의 주요한 지점에 표식을 남겨서 나중에 그 시점의 소스코드를 얻기 위해 사용됩니다. 태그 목록 보기 $ git tag v0.1 v1.0 v1.1 특정 문자열을 포함하는...
    Date2015.01.31 ByPSEG Reply1 Views5562
    Read More
  6. Git 기본 명령어 모음

    <용어 정리> Repository : 작업 저장소 Remote : 원격 저장소 Branch : 강의 지류에 비유할 수 있는 소스코드 Origin : 기본 업스트림 저장소 Master : 강의 본류에 비유할 수 있는 소스코드 HEAD : 현재 작업중인 브랜치의 최근 갱신 내용을 가...
    Date2015.01.13 ByTerry Reply0 Views7675
    Read More
  7. Jenkins를 이용한 HTML 문법검사 자동화

    Extending unicorn validator for JenkinsPosted by Arjan Lamers on May 6, 2014 in Blog | 0 comments For a project I wanted to add strict HTML 5 syntax checking. It is not something that is easy to do in the build since in general it requires...
    Date2014.09.16 ByTerry Reply0 Views6248
    Read More
  8. 레드마인(Redmine)과 이클립스(Eclipse) Mylyn 연동

    이 문서는 레드마인(Redmine)과 이클립스(Eclipse) 마이린(Mylyn) 연동에 대해서 가이드를 제공합니다. 1. 다운로드 및 Redmine Mylyn Connector 설치먼저 command를 실행하고 redmine_mylyn_connector 플러그인을 다운로드 받기 위해 레드마인(Redmine)...
    Date2014.07.21 ByPSEG Reply1 Views17620
    Read More
  9. 레드마인(Redmine)과 서브버전(Subversion)연동

    이 문서는 레드마인(Redmine)과 서브버전(Subversion) 연동에 관하여 간단한 가이드를 제공합니다. 서브버전(Subversion)의 연동은 프로젝트 별로 이뤄질 수 있으며, 이 가이드의 예제는 3DXMALL이라는 가상의 프로젝트와 subversion 저장소 3dxmall을 연동하...
    Date2014.07.15 ByPSEG Reply3 Views16097
    Read More
  10. 레드마인(Redmnine) PSEG Black 테마 다운로드

    이 문서는 레드마인 PSEG Black 테마를 공유하기 위해 작성되었습니다. 테마라고 하기엔 너무 거창한 것 같고, Default 레드마인 테마에서 색상을 검정색 류와 한글 폰트를 추가하여 변경하였습니다. 한번 보시고, 마음에 드시면 다운로드 받아서 쓰시기를 권...
    Date2014.07.14 ByPSEG Reply1 Views5206
    Read More
Board Pagination Prev 1 2 3 4 5 Next
/ 5