처음부터 차근차근

JaCoCo를 사용한 code coverage 본문

Framework/Spring

JaCoCo를 사용한 code coverage

_soyoung 2022. 8. 23. 20:51
반응형

코드 커버리지(code coverage)란

소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표이다.

코드 커버리지를 하면 테스트 코드가 실행될 때 어디에 얼마나 많은 코드가 실행되었나 수치를 통해 알 수 있다.

코드 커버리지를 하는 이유는 수치를 통해 테스트를 안한(적게한) 부분을 찾아서 테스트를 더 하게 하여 추후에 생길 수 있는 에러 상황들을 막기 위함이다.

코드 커버리지는 * 화이트 박스 테스트를 통해 측정한다.

* 화이트 박스 테스트 : 응용 프로그램의 내부 구조와 동작을 검사하는 테스트 방식

대표적인 코드 커버리지 도구로는 JaCoCo가 있다.

JaCoCo는 Java Code Coverage의 약자로, Junit 테스트를 통해 애플리케이션의 코드가 얼마나 테스트 되었는지 확인한다.

 

 

JaCoCo를 이용해서 테스트 커버리지해보기

** gradle 기준 **

1. 플러그인을 추가한다.

plugins {
   ...
   id 'jacoco'
}

jacoco {
   toolVersion = "0.8.7"
}

 

2. 관련 설정을 추가한다.

test { // test가 끝난 뒤 마지막에 jacocoTestReport를 실행한다.
   finalizedBy jacocoTestReport
}

jacocoTestReport {
   reports {
      html.enabled true
      csv.enabled false
      xml.enabled false
   }

   finalizedBy jacocoTestCoverageVerification // 마지막에 jacocoTestCoverageVerification 실행
}

 

jacocoTestReport report는 어떤 방식으로 결과물을 볼 건지에 대한 설정이다.

결과물은 html, csv, xml 이렇게 3가지 종류로 볼 수 있는데, 필자는 html로 보고 싶어서 html만 설정값을 true로 했다.

 

jacocoTestCoverageVerification {
	violationRules {
		rule {
			element = 'BUNDLE'
			limit {
				counter = 'INSTRUCTION'
				value = 'COVEREDRATIO'
//				minimum = 0.80
			}

			element = 'METHOD'
			limit {
				counter = 'LINE'
				value = 'TOTALCOUNT'
//				maximum = 50
			}
		}
	}
}

rule은 추가 설정에 관한 내용이다. 필요한 경우에만 작성한다.

 

element는 코드 커버리지를 체크하는 범위 이다.

<element에 넣을 수 있는 값들>

bundle : 기본값. 패키지 번들(프로젝트 내 모든 파일)

package : 패키지

class : 클래스

group : 논리적 번들 그룹

sourcefile : 소스파일

method : 메소드

 

counter은 커버리지를 측정하는 지표이다.

<counter에 넣을 수 있는 값들>

line : 빈 줄을 제외한 실제 코드 라인 수 

branch : 조건문 등의 분기 수

class : 클래스 수

method : 메소드 수

instruction : 기본값. 자바의 바이트코드 명령 수

complecity : 복잡도

 

value는 측정한 커버리지를 어떤 방식으로 보여주는지 설정하는 것이다.

<value에 넣을 수 있는 값들>

totalcount : 전체 개수

missedcount : 커버되지 않은 개수

coveredcount : 기본값. 커버된 개수

missedratio : 커버되지 않은 비율

coveredratio : 커버된 비율

 

3. gradle 빌드 후 grdle tap에 Tasks / verification / jacocoTestReport클릭 / jacocoTestConverageVerification클릭

 

4. 프로젝트 탭에 build / jacoco / index.html 브라우저에서 실행

intellij에선 위의 방법을 사용하면 크롬에서 띄울 수 있다.

 

5. 결과

Element : 테스트 커버리지를 측정한 단위. 이미지에선 패키지 단위별로 측정한 것을 볼 수 있다.

Missed Instructions   Cov.(=coverage) : 테스트를 수행 후 바이트코드의 커버리지를 퍼센테이지 바로 표시함

Missed Branches   Cov. : 분기에 대한 테스트 커버리지를 퍼센테이지 바로 표시

Missed   Cxty(complexity) : 복잡도에 대해서 커버리지되지 않은 수, 커버리지 대상 라인 수

Missed   Method : 커버되지 않은 메서드 수 ,테스트 대상 메서드 수

Missed   Classes : 커버되지 않은 클래스 수, 테스트 대상 클래스 수 

 

element를 클릭해서 클래스 클릭하고 메서드를 클릭하면 어떤 메서드가 커버리지 되었고 또, 안되었는지 알 수 있다.

예시

이런식으로 getBoardList()의 findAll() 메서드가 커버리지 되지 않은 것을 알 수 있다.

 

 

 

반응형

'Framework > Spring' 카테고리의 다른 글

controller advice로 404 error 처리하는 법(gradle 사용)  (0) 2022.09.08
JPA(수정 중)  (0) 2022.08.25
테스트 주도개발(TDD)  (0) 2022.08.14
db 설정정보 외부 파일로 옮기기  (0) 2022.08.10
Builder pattern과 @Builder  (0) 2022.07.29
Comments