반응형
JaCoCo를 적용하는 방법은 다음 글에서 소개하고, 이 글에서는 JaCoCo에 대한 간단한 설명만 다룹니다.
JaCoCo 적용 방법 링크: 프로젝트에 JaCoCo 적용하기
1. JaCoCo 소개
JaCoCo란 무엇인가?
- Java Code Coverage를 의미
- 자바 어플리케이션의 코드 커버리지를 측정하는 도구
- 주로 단위 테스트, 통합 테스트와 함께 사용되며, Java 5 이상에서 사용 가능
코드 커버리지란?
- 테스트 코드가 애플리케이션의 실제 코드를 얼마나 실행했는지를 나타내는 지표
- 테스트 코드가 애플리케이션의 주요 로직을 모두 실행하지 않았다면, 그 로직은 문제가 있을 수 있다. (테스트하지 않은 로직이므로)
커버리지 측정 지표
각 지표는 테스트 코드가 코드의 특정 부분을 얼마나 잘 실행하고 있는지를 나타니며,
이 지표들을 종합적으로 분석하면 테스트 코드가 어느 부분을 얼마나 커버했는지, 더 테스트해야 할 부분이 어디인지를 파악할 수 있다.
- Line Coverage
- 코드 라인 단위로 커버리지를 측정한다.
- 라인이 실행되었는지 여부를 판단하여, 실행된 라인의 백분율을 보여준다.
- Branch Coverage
- 조건문에서 각 분기(예: if-else 구문의 true와 false)가 테스트되었는지를 측정한다.
- 코드의 논리적인 흐름을 모두 테스트했는지를 확인할 수 있다.
- Method Coverage
- 각 메서드가 테스트에서 호출되었는지를 측정한다.
- Class Coverage
- 클래스 내 모든 메서드가 호출되었는지 확인하여 클래스 전체의 커버리지를 보여준다.
- Instruction Coverage
- 가장 낮은 수준에서 개별 명령어 단위로 커버리지를 측정합니다.
JaCoCo의 필요성 및 장점
- JaCoCo는 프로젝트 내에서 작성한 테스트 코드의 효율성을 측정하고, 테스트 커버리지를 분석할 수 있게 도와준다.
- 이를 통해 미처 테스트되지 않은 코드를 확인하고, 버그 가능성을 줄일 수 있다.
- 경량화: Binary Instrumentation 방식을 사용하여 빠르게 실행되며 복잡한 설정 없이도 쉽게 사용 가능하다.
- runtime에 실행: 사용하는데에 코드가 필요한 Clover와 Cobertura와는 다르게 JaCoCo는 runtime에 실행이 가능하다.
- 다양한 리포트 제공: HTML, XML, CSV 형식으로 상세한 커버리지 리포트를 생성해준다.
- CI 도구와의 호환성: Jenkins, Github Actions 등 다양한 CI 도구와 쉽게 연동이 가능하다.
- 최신 자바 버전 지원: 다른 코드 커버리지 도구인 Cobertura나 Emma 등과 비교했을 때 JaCoCo는 최신 자바 버전을 지원하며 유지보수도 잘 이루어지고 있다.
2. JaCoCo를 잘 이용하려면?
코드 커버리지 100%의 함정과 오해
- 특정 라인에 도달하기만 하면 코드 커버리지기 인정되기 때문에 그 라인의 실제 논리가 제대로 테스트되었는지 보장할 수 없다.
- 커버리지가 높다고 해서 버그가 없다는 의미가 아니다.
- 커버리지 100%는 하나의 지표일 뿐, 코드 품질을 완전히 보장하지는 않는다.
효율적인 컵버리지 향상을 위한 팁
- 예상 가능한 모든 예외 케이스를 테스트한다.
- 단순한 결과만 확인하는 것이 아니라, 코드의 내부 로직을 더 깊게 테스트한다.
- Github Actions 등과 같은 CI 도구와 JaCoCo를 연동하여 지속적으로 커버리지를 모니터링한다.
- 무조건 100%를 목표로 하기보다, 프로젝트 성격에 맞는 적절한 커버리지 목표를 설정한다.
반응형
'Back-End > JAVA' 카테고리의 다른 글
프로젝트에 Jacoco 적용하기 (2) | 2024.09.14 |
---|---|
try-with-resources란? (0) | 2023.04.05 |