코드의 여백

SonarQube와 JaCoCo로 테스트 커버리지 측정하기

by rowing0328

Intro

소프트웨어 품질 관리는 개발 과정에서 중요한 요소 중 하나다.

코드 커버리지를 측정하고 코드 품질을 분석하는 도구로 SonarQube와 Jacoco를 많이 사용한다.

이번 포스팅에서는 SonarQube와 JaCoCo를 연동하여 코드 커버리지를 측정하고 분석하는 방법을 알아보자.

 

 

SonarQube와 JaCoCo란

SonarQube란

정적 코드 분석 도구로, 버그, 코드 스멜(Code Smell), 보안 취약점을 검출하는 기능을 제공한다.

CI/CD 파이프라인과 통합하여 코드의 품질을 지속적으로 개선할 수 있다.

 

JaCoCo란

JaCoCo(Java Code Coverage)는 Java 애플리케이션의 코드 커버리지를 측정하는 도구다.

단위 테스트 실행 시 얼마나 많은 코드가 실행되었는지를 분석하여 테스트의 효과성을 평가하는 데 활용된다.

 

SonarQube는 기본적으로 코드 커버리지 분석을 지원하지 않기 때문에,

JaCoCo와 같은 외부 코드 커버리지 도구를 연동하여 커버리지를 분석할 수 있다.

 

 

SonarQube와 JaCoCo 연동하기

1. SonarQube 설치 및 실행은 아래 링크를 참고하자 :)

 

SonarQube와 GitHub Actions로 정적 코드 품질 관리하기

Intro이번 글에서는 SonarQube를 Docker Compose를 이용해 실행하는 방법과 GitHub App과의 연동을 통해 코드 분석 환경을 자동화하는 과정을 다룬다. 이를 통해 안정적이고 효율적인 코드 분석 환경을 구

dev-rowing.tistory.com

 

2. JaCoCo 플러그인 설정

plugins {
    id 'jacoco'
}

// JaCoCo 버전 지정
jacoco {
    toolVersion = "0.8.11"
    layout.buildDirectory.dir("reports/jacoco") // JaCoCo 리포트 디렉토리 지정
}

jacocoTestReport {
    dependsOn test // test 종속성 추가

    reports {
        xml.required = true
        csv.required = false
        html.required = false
    }

    def QDomainList = [] // QClass 파일 커버리지 측정 대상 제외
    for (qPattern in '**/QA'..'**/QZ') { // QClass 대응
        QDomainList.add(qPattern + '*')
    }

    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.collect {
            fileTree(dir: it, exclude: [
                    '**/dto/**',
                    '**/event/**',
                    '**/*InitData*',
                    '**/*Application*',
                    '**/exception/**',
                    '**/service/alarm/**',
                    '**/aop/**',
                    '**/config/**',
                    '**/MemberRole*'
            ] + QDomainList)
        }))
    }

}

 

3. SonarQube와 JaCoCo 연동 설정

plugins {
    id "org.sonarqube" version "6.0.1.5171"
}

sonar {
    properties {
        property "sonar.projectKey", "your-project-key"
        property "sonar.projectName", "your-project-name"
        property "sonar.sourceEncoding", "UTF-8"
        property "sonar.sources", "src/main"
        property "sonar.tests", "src/test"
        property "sonar.java.binaries", "build/classes/java/main"
        property "sonar.test.inclusions", "**/*Test.java"
        property 'sonar.coverage.jacoco.xmlReportPaths', "build/reports/jacoco/test/jacocoTestReport.xml"
    }
}

 

4. Junit와 JoCoCo 테스트 지정하기

tasks.named('test') {
    useJUnitPlatform()
    finalizedBy jacocoTestReport
}

 

5. SonarQube 분석 실행하기

  • ./gradlew build sonar

 

6. SonarQube 대시보드에서 코드 커버리지 확인하기

 

 

마무리

JaCoCo를 활용한 코드 커버리지 측정뿐만 아니라,

SonarQube를 도입함으로써 보안적인 측면과 코드 품질까지 종합적으로 개선할 수 있었다는 점을 경험할 수 있었다.

블로그의 정보

코드의 여백

rowing0328

활동하기