코드의 품질을 높이기 위해서 많이 사용되는 것이 코드에 대한 정적분석을 통해서 코드의 품질을 평가하는 것이다.

코드정적분석에 사용되는 도구로는 checkstyle, findbugs, PMD 등 이 있다. 그레들gradle에 checkstyle, PM 를 추가하는 방법을 설명한다.

1. checkstyle

1.1. 사용방법

1.1.1. gradle's checkstyle 플러그인 추가

apply plugind: 'checkstyle'

build.gradle 파일에 플러그인을 추가한다.

1.1.2. checkstyle.xml 작성

1.1.3. build.gradle 파일에 checkstyle 태스크를 정의한다.

checkstyle {
  ignoreFailures = true // 분석결과 예외가 발생하면 빌드실패 발생시키는 것을 제외
    configFile = file("checkstyle.xml") // 1.1.2 에서 작성한 checkstyle 파일 지정
    reportsDir = file("${buildDir}/checkstyle-output") // 리포트 파일이 위치할 디렉토리 지정
}
 
checkstyleMain {
    reports {
        xml.destination = file("${checkstyle.reportsDir}/checkstyle-report.xml") // 리포트 파일의 위치 및 파일명 지정
    }
}

1.1.4. checkstyle 실행

$ gradle check

checkstyle 플러그인을 추가하면 그레들의 check 태스크를 수정하여 checkstyle 의 checkstyleMain, checkstyleTest 들을 실행시킨다.

1.2. 태스크Tasks

Task nameDepends onTypeDescription
checkstyleMainclassesCheckstyleRuns Checkstyle against the production Java source files.
checkstyleTesttestClassesCheckstyleRuns Checkstyle against the test Java source files.
checkstyleSourceSetsourceSetClassesCheckstyleRuns Checkstyle against the given source set's Java source files.

1.3. checkstyle.xml 기본구조

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
          "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
          "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
 
<module name="Checker">
    <property name="charset" value="UTF-8" />
    <property name="severity" value="warning" />
    <property name="fileExtensions" value="java, properties, xml" />
 
    <module name="TreeWalker">
        <!-- 사용되는 모듈과 모듈속성을 정의-->
    </module>
</module>

2. PMD

2.1. 사용방법

2.1.1. gradle's pmd 플러그인 추가

apply plugind: 'pmd'

build.gradle 파일에 플러그인을 추가한다.

2.1.2. pmd 태스크의 속성을 정의한다.

pmd {
  ignoreFailures = true // 분석결과 예외가 발생하면 빌드실패 발생시키는 것을 제외
    reportsDir = file("${buildDir}/pmd-output")
}
 
pmdMain {
    reports {
        xml.destination = file("${pmd.reportsDir}/pmd-report.xml")
        xml.enabled = true
    }
}

2.1.3. 실행

$ gradle check

PMD 플러그인이 check 태스크에 의존성을 추가한다.

2.2. 태스크Tasks

태스크명의존유형설명
pmdMain-Pmd출시 소스파일을 대상으로 PMD 실행
pmdTest-Pmd테스트 소스파일을 대상으로 PMD 실행
pmdSourceSet-Pmd지정된 소스셋SourceSet을 대상으로 PMD 실행

3. 정리

checkstyle과 pmd 에서 생성한 XML 보고서는 JENKINS에서 사용하기 위한 분석데이터로 사용된다.

JENKINS에서 checkstyle, pmd 플러그인을 설치한 후 report.xml 경로를 지정한 후



빌드가 정상적으로 진행되면서 분석문서가 생기면 다음과 같은 항목들이 왼쪽 메뉴에 추가가 되고,



각각의 결과를 확인할 수 있다.




○ 참고문헌


출처 : http://pmd.sourceforge.net/meaning.html

 What does it mean?

We've been trying to find the meaning of the letters PMD - because frankly, we don't really know. We just think the letters sound good together.

However, in the spirit of the Computing Industry, we have come up with several "backronyms" to explain it.

PMD
Pretty Much Done
Project Mess Detector
Project Monitoring Directives
Project Meets Deadline
Programming Mistake Detector
Pounds Mistakes Dead
PMD Meaning Discovery (recursion, hooray!)
Programs of Mass Destruction
Programming Meticulous coDe
A 'Chaotic Metal' rock band name



PMD에 대해서 찾아보다가 그 의미에 대한 다양한 나열을 보고서는 '풋'하고 웃고 말았다. ㅡ_-);;
나도 어느새 개발자가 되어가는 가보다.

'Programming' 카테고리의 다른 글

OpenSource Project 를 할만한 게 뭐가 있을까?  (0) 2011.01.28
Types of software architects  (0) 2011.01.01
What dows 'PMD' mean?  (0) 2010.12.31
[Velocity] velocity.properties  (0) 2010.03.13
Velocity 설정법  (0) 2010.02.21
100207_발표내용정리  (0) 2010.02.07

+ Recent posts