kkokkio - 프로젝트/트러블슈팅

테스트의 코드 커버리지 리포트(with JaCoCo)

파란배개 2025. 6. 2. 10:11

문제 개요

오류 상황과 영향 범위 (예: 특정 코드 실행 시 발생, 특정 라이브러리 버전 호환 문제 등) 발생 배경 (예: 코드 테스트 중, 배포 중 문제 발견 등)

TDD 방식으로 개발을 진행하였으나 테스트가 코드를 전체적으로 커버하는지 확인할 수 있는 근거로써 구체적인 지표의 필요성을 느꼈다. 멘토님의 피드백에서도 테스트 범위를 시각적으로 파악할 수 있는 리포트의 중요성이 언급되었고 이에 따라 커버리지 툴 도입을 결정했다.

해결 및 고민 과정

처음 문제를 접했을 때 고려했던 대안들과 선택하지 않은 이유 실험적으로 적용한 방법이 실패한 사례와 그 이유 여러 해결책 중 최적의 방안을 선택한 과정

테스트 커버리지 툴 선정을 위해 검색한 결과, 테스트 커버리지를 확인하는 방법은 여럿이 존재했다. 그 중 다음과 같은 툴이 후보에 올랐다.

  • IntelliJ 내장 커버리지 기능
  • Cobertura
  • Clover
  • JaCoCo

이 중에서 JaCoCo를 선택했는데, 이유는 다음과 같다.

  • 활발한 업데이트
  • 문서화 및 참고할만한 커뮤니티 레퍼런스의 수
  • 자바 생태계에서 많이 쓰이며 Gradle 연동이 쉬운지 여부
  • 추후 CI 환경에 추가를 고려한 확장성

최종 해결책 및 구현

문제 해결을 위한 단계별 조치 방법과 코드 예시 (예: 특정 애노테이션 추가, 라이브러리 버전 조정, 설정 변경 등) 참고 자료 (관련 공식 문서, 개발자 커뮤니티 게시물 등)

JaCoCo를 적용할 때 큰 문제는 없었다.

plugins {
    id 'jacoco'
}

jacocoTestReport {
    // 테스트 후 리포트가 생성되도록 설정
    dependsOn test
    reports {
		    //CI 등 분석 도구용 xml 리포트 생성
        xml.required = true
        csv.required = false
        //시각적 확인용 html 리포트 생성
        html.required = true
        html.outputLocation = layout.buildDirectory.dir('jacocoHtml')
    }
}

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

build.gradle에 테스트 후 xml, html 리포트가 작성되도록 설정을 추가하고 cli 명령어를 입력했다. xml은 추후 CI 도구나 분석 툴에 사용하기 위해서 만들도록 설정하였고, html은 시각적으로 확인하게 추가하였다.

이후 다음 명령어로 리포트를 생성하고, build/jacocoHtml/index.html 에서 확인할 수 있었다.

./gradlew jacocoTestReport

결과 및 성능 분석

개선 후 응답 속도, DB 부하 감소 수치 등 구체적인 데이터 포함 문제 해결 전/후 성능 비교 그래프나 로그 분석 내용 포함 이슈 트래킹 및 자동화 방안 추가 (내부 개발자가 반복적인 문제 해결을 효율적으로 관리할 수 있도록 가이드 제공)

5월 19일 11시 기준 테스트 커버리지는 다음과 같다.

 

구분 수치 커버리지

라인 커버리지 (Instructions) 9,527 중 2,663 미커버 72%
분기 커버리지 (Branches) 488 중 250 미커버 ⚠️ 48%
메서드 총 416개 중 15개 미커버 ✅ 대부분 커버됨

추가 개선점

유사한 문제를 방지하기 위한 주의할 점 (예: 애노테이션 명시 여부, 프레임워크 업데이트 주기 확인 등) 문제 해결 과정에서 배운 점 및 중요한 교훈 공유 보안 고려 사항 추가 (해결 과정에서 발생할 수 있는 보안 리스크 및 예방 조치 포함)

  • 라인 커버리지는 72%로 70%를 넘기는 비교적 양호한 커버리지를 보였지만, 분기 커버리지는 48%로 조건 분기문과 예외 처리 로직에 대한 테스트의 개선 여지가 보였다.
  • 테스트가 부족한 모듈들은 추후 테스트를 추가해 코드 커버리지를 늘리는 방향으로 개선이 필요해 보인다.
  • 추후 CI 파이프라인에 커버리지를 확인하고 일정 기준 미달 시 경고하거나 실패하도록 설정해 코드의 품질을 높일 예정이다.