[checkmate] jacoco와 sonarqube 적용하기

Jifrozen·2022년 11월 22일
0

checkmate

목록 보기
4/4

테스트 코드가 중요하다는건 어느 서버 개발자나 알고있을것이다.
TDD 테스트코드 테스트커버리지 등등 많은 말을 주워 들었기때문에
프로젝트를 진행하면 최대한 테스트 코드를 짜려고 노력했다.
테스트 커버리지를 객관적으로 어떻게 구하는지 몰랐기 때문에
항상 내 기준으로 오 이정도면 테스트 커버리지 70% 아니여~ 라고 안일하게 생각했다...
그래서 테스트 커버리지를 수치로 보여주는 라이브러리가 있다는 말을 들었고 바로 적용해보았다!!

jacoco

jacoco는 java코드의 커버리지를 체크하는 라이브러리이다. 테스코드를 돌리고 그 커버리지 결과를 눈으로 보기 좋도록 리포트를 생성한다. 그리고 커버리지 기준을 설정하면 그 기준에 만족하는지 아닌지 확인하는 기능도 있고 만약 기준을 못넘으면 task가 실패한다🤢

jacoco를 적용하기 위해 build.gradle부터 수정보겠다!
plugins {
id 'jacoco'
}
test {
jacoco {
destinationFile = file("$buildDir/jacoco/jacoco.exec")
}

useJUnitPlatform()

finalizedBy 'jacocoTestReport'

}

jacoco {
// JaCoCo 버전
toolVersion = '0.8.5'
}

jacocoTestReport {
reports {
// 원하는 리포트를 켜고 끌 수 있다.
xml.enabled(true)
html.enabled(true)
xml.destination(new File("build/reports/jacoco.xml"))
}

finalizedBy 'jacocoTestCoverageVerification'

}
jacocoTestCoverageVerification {
violationRules {
rule {
// 'element'가 없으면 프로젝트의 전체 파일을 합친 값을 기준으로 한다.
limit {
// 'counter'를 지정하지 않으면 default는 'INSTRUCTION'
// 'value'를 지정하지 않으면 default는 'COVEREDRATIO'
minimum = 0.30
}
}

    rule {
        // 룰을 간단히 켜고 끌 수 있다.
        enabled = true

        // 룰을 체크할 단위는 클래스 단위
        element = 'CLASS'

    }
}

}
보면 jacocoTestReport와 jacocoTestCoverageVerification task가 있다.

  • jacocoTestReport: 바이너리 커버리지 결과를 사람이 읽기 좋은 형태의 리포트로 저장한다. 후에 SonarQube으로 연동하기 위해 xml형태의 리포트를 생성해준다.
  • jacocoTestCoverageVerification: 내가 원하는 커버리지 기준을 만족하는지 확인해 주는 task이다.

./gradlew --console verbose test jacocoTestReport jacocoTestCoverageVerification
를 하면 build/reports/jacoco/test/html에 index.html이 생성된다.


여길 들어가면 이렇게 테스트 코드에 대한

아직 테스트 코드를 작성하고 있어 missed instructions이 많이보인다^^

jacoco를 사용하면 가장 좋은게

이렇게 테스트 완료된 코드와 아닌 코드를 보여줘 테스트 코드를 보완하기 좋다!

SonarQube

SonarQube는 정적 코드 분석 도구이다.

정적 프로그램 분석(static program analysis)은 실제 실행 없이 컴퓨터 소프트웨어를 분석하는 것을 말한다.

정적 프로그램 분석은 프로그램을 실행하지 않은 상태에서 소스코드나 컴파일된 코드를 이용해 프로그램을 분석하는 방법이고, 동적 분석은 프로그램을 실제 환경이나 가상 환경에서 싱행해 보며 분석하는 방법이다.
소나큐브는 이런 정적분석을 도와주는 분석 도구이고 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공한다. 우선 이 글에서는 sonarqube를 intellij와 연동하여 로컬로 사용하고 후에 ci/cd서버와 연동하여 구현해보겠다.

https://shinsunyoung.tistory.com/64 설치와 연동은 이 블로그를 참조하였다.
우선 https://www.sonarqube.org/downloads/ 소나큐브를 다운받는다.

필자는 이 버전으로 다운받았다. 맥 환경을 기준으로 설명 드리면 압축을 풀고 터미널로 들어간다.
cd sonarqube-8.9.10.61524/bin/macosx-universal-64

./sonar.sh start

localhost:9000에 들어가면 끝이다.

admin / admin으로 로그인하고 프로젝트 생성한다.

원하는걸로 입력하시면 된다.(gradle기준)
gradle에 추가한다

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

sonarqube {
    properties {
        // jacoco 에서 생성된 xml 을 report 로 올리기 위한 설정
        property "sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco.xml"
    }
}

sonarqube { 이 부분은 테스크 커버리지를 위해 jacoco를 이용해 xml을 추출해서 sonarqube에 적용하는 부분이다.
나머지는 블로그를 통해 따라하면 됩니다^^
두구두구두구 내 코드는 얼마나 더러울까

와,,,,,,와,,,,내 코드에서 ㄷ지독한 냄새나 나는듯 하다.
테스트 커버리지도 열심히 했는데 40%이라니
빨리빨리 리팩토링 해서 열심히 개선해봐야겠다!!

https://hyeon9mak.github.io/install-sonarqube/
https://velog.io/@lxxjn0/코드-분석-도구-적용기-3편-SonarQube-적용하기
https://bottom-to-top.tistory.com/36
https://techblog.woowahan.com/2661/
https://shinsunyoung.tistory.com/64
https://bj-lee.tistory.com/7

0개의 댓글