0. 시작하며
https://nooroongzi.tistory.com/19
[SonarQube] 소나큐브 연동하기
0. 시작하며 개인적으로 프로젝트 리팩토링을할때 "기존 대비 ~~의 향상!" 이라는 부분이 필요하다고 느꼈습니다. 따라서 프로젝트 코드의 기존 상태를 파악하기위해 사용한 소나큐브에대한 기
nooroongzi.tistory.com
저번글에 이어서 Jacoco도 같이 사용하는 방법을 가져왔습니다. Gradle 프로젝트 기반으로 진행하겠습니다! 또한 제가 사용한 소나큐브와 자코코의 버전은 java17과 호환합니다.
1. Jacoco란?
Jacoco란 Java코드의 테스트 커버리지를 체크하는 라이브러리입니다. 테스트로 얼마나 커버가 되는지 수치와 html, xml등의 리포트로 확인할 수 있어서 직관적으로 바로바로 확인할 수 있는 장점이 있습니다. 또한 테스트 커버리지가 목표치보다 낮으면 빌드가 되지 않도록 할 수 도 있어 엄격한 관리에도 효과적입니다. 또한 소나 큐브와 연동할 수 있어서 자신의 코드에대한 객관적인 지표를 확인할 수 있어 좋다고 생각합니다.
2. SonarQube와 함께 Jacoco 연동하기
먼저, 전 글에서 소나큐브를 프로젝트에 연동하는 방법을 보고 진행해주세요. 이전 글은 Maven을 기준으로 작성되어 있지만 크게 다르지 않은거 같습니다. 이후 , build.gradle에 설정을 진행하면 되는데요, Jacoco는 쉽게 추가할 수 있었고 하나 하나 살펴보겠습니다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
id 'jacoco'
id "org.sonarqube" version "5.0.0.4638"
}
플러그인을 통해 jacoco와 sonarqube를 추가해줍니다.
test {
finalizedBy jacocoTestReport
}
jacoco 리포트를 테스트 실행 후 생성되도록 설정합니다.
jacocoTestReport {
reports {
xml.required = true
csv.required = false
html.required = true
xml.destination(new File("your_path"))
}
}
리포트를 어떤 파일로, 어디에 생성할지 설정합니다. (파일 별로 설정합니다.)
jacoco {
toolVersion = "0.8.8"
reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir')
}
Jacoco의 버전과, 테스트 결과 리포트를 저장할 경로를 지정합니다.
jacocoTestCoverageVerification {
violationRules {
rule {
limit {
// 'counter'를 지정하지 않으면 default는 'INSTRUCTION'
// 'value'를 지정하지 않으면 default는 'COVEREDRATIO'
minimum = 0.50
}
}
rule {
enabled = true
element = 'CLASS'
includes = ['org.gradle.*']
// 브랜치 커버리지를 최소한 50% 만족시켜야 합니다.
limit {
counter = 'BRANCH'
value = 'COVEREDRATIO'
maximum = 0.50
}
// 라인 커버리지를 최소한 80% 만족시켜야 합니다.
limit {
counter = 'LINE'
value = 'COVEREDRATIO'
minimum = 0.80
}
// 빈 줄을 제외한 코드의 라인수를 최대 200라인으로 제한합니다.
limit {
counter = 'LINE'
value = 'TOTALCOUNT'
maximum = 200
}
// 커버리지 체크를 제외할클래스를 지정합니다.
// excludes = [
// '*.test.*',
// ]
}
}
}
element: 커버리지 체크의 기준이되는 단위를 설정합니다 다음과 같은 옵션을 사용할 수 있습니다.
- BUNDLE(Default): 패키지 번들
- PACKAGE: 패키지
- CLASS: 클래스
- SOURCEFILE: 소스 파일
- METHOD: 메소드
counter: 라인 커버리지, 클래스 커버리지 등을 측정할 수 있고 다음과 같은 옵션을 사용할 수 있습니다.
- LINE: 빈 줄을 제외한 실제 코드의 라인 수
- BRANCH: 조건문 등의 분기 수
- CLASS: 클래스 수
- METHOD: 메소드 수
- INSTRUCTION (default): Java 바이트코드 명령 수
- COMPLEXITY: 복잡도.
value: 값을 지정합니다.
- TOTALCOUNT: 전체 개수
- MISSEDCOUNT: 커버되지 않은 개수
- COVEREDCOUNT: 커버된 개수
- MISSEDRATIO: 커버되지 않은 비율. 0부터 1 사이의 숫자로, 1이 100%입니다.
- COVEREDRATIO (default): 커버된 비율. 0부터 1 사이의 숫자로, 1이 100%입니다.
exludes: 커버리지 체크를 하지 않는 클래스를 지정할 수 있습니다. 주의점은 경로명이 아닌 패키지 + 클래스명으로 적어야한다고 합니다.
sonarqube {
properties {
property "sonar.projectKey", "your_pjt"
property "sonar.projectName", "your_pjt"
property "sonar.host.url", "your_url"
property "sonar.login", "your_token"
// jacoco 에서 생성된 xml 을 report 로 올리기 위한 설정
//property "sonar.coverage.jacoco.xmlReportPaths", "your_path"
}
}
참고로 sonarqube 설정입니다. 이를 모두 마치고 나면, 소나큐브에서 테스트 커버리지와 코드 상태를 조회할 수 있습니다.
참고로 build/reports/jacoco 경로에 jacoco.xml을 저장하도록 하는게 좋습니다. 이렇게하면 sonarQube는 다른 설정 없이도 xml을 읽을 수 있습니다. 밑에 제가 읽어본 sonarqube community의 글을 링크해놓겠습니다.
생각보다 커버리지를 높게 유지하는것이 힘든 작업임을 여실히 깨닫고있습니다...
참고
https://docs.gradle.org/current/userguide/jacoco_plugin.html
The JaCoCo Plugin
The JaCoCo plugin adds the following dependency configurations: Table 2. JaCoCo plugin - dependency configurations Name Meaning jacocoAnt The JaCoCo Ant library used for running the JacocoReport and JacocoCoverageVerification tasks. jacocoAgent The JaCoCo
docs.gradle.org
https://techblog.woowahan.com/2661/
Gradle 프로젝트에 JaCoCo 설정하기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요. 상품시스템팀에서 서버 개발(..새발)을 하고 있는 연철입니다. 프로젝트 세팅 중에 찾아보고 삽질했던 내용들이 도움이 될까 하여 남깁니다. JaCoCo는 Java 코드의 커버리지
techblog.woowahan.com
https://www.baeldung.com/sonarqube-jacoco-code-coverage
https://community.sonarsource.com/t/sonarqube-code-coverage-always-shows-0/98550
SonarQube Code Coverage always shows 0%
Hello Team, We have integrated Azure Devops with SonarQube which are Java Applications building from Azure pipelines. We are using Jfrog Maven task to build shared libraries, publising artifacts to Jfrog Artifactory & scanning code from SonarQube by using
community.sonarsource.com
'OpenSource' 카테고리의 다른 글
[Selenium] 셀레니움 개발과 배포 (0) | 2025.01.19 |
---|---|
[OpenSource] Testcontainers로 테스트 환경 구축하기 (1) | 2024.11.19 |
[OpenSource] 소나큐브 연동하기 (0) | 2024.03.05 |