본문 바로가기
Spring

Test Coverage 노트

by SuldenLion 2022. 11. 8.
반응형

코드 커버리지

- 소프트웨어의 테스트 수준이 충분한지 표현할 수 있는 지표 중 하나. 테스트를 진행했을 때 해당 코드가 실행되었는지를 표현하는 방법. 많은 코드 커버리지 도구가 있으며, Jacoco는 가장 보편적으로 사용되는 도구

 

Jacoco 란?

- Java 코드의 커버리지를 체크하는 라이브러리. 작성된 코드의 Test Coverage를 측정하는 도구. Runtime으로 Test Case를 실행하여 Coverage를 체크하는 방식으로 사용됨. 테스트 코드를 통해 테스트를 실행하고 그 결과를 html, xml, csv 등의 형식으로 report를 제공함.

 

블랙 박스 테스트 / 화이트 박스 테스트

Black Box Test : 소프트웨어의 내부 구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식. 다양한 값을 입력하여 올바른 출력이 나오는지 테스트함. 사용자 관점의 테스트 방법.

White Box Test : 소프트웨어의 내부 구조와 동작을 검사하는 테스트 방식. 소프트웨어 내부 소스 코드를 테스트하는 방법. 개발자 관점의 테스트 방법.

 

Jacoco pom.xml 파일 설정

- Execution 내부에 사용되는 값 => prepare-agent : 테스트 중인 어플리케이션에서 인수를 전달하는 Jacoco Runtime Agent에 대한 property를 준비. / merge : 여러 실행 데이터 파일들을 하나로 통합하는 명령어. / report : 하나의 프로젝트 테스트에 대한 Code Coverage 리포트를 생성하는 명령어. / check : code coverage metric이 충돌하는지 확인하는 명령어.

 

Jacoco Rule 

Element type - 코드 커버리지 기준

- BUNDLE (default) : 패키지 번들 / PACKAGE : 패키지 / CLASS : 클래스 / SOURCEFILE : 소스 파일 / METHOD : 메소드

Counter - 코드 커버리지를 측정할 때 사용하는 지표

- LINE : 빈 줄을 제외한 실제 코드의 라인 수 / BRANCH : 조건문 등의 분기 수 / CLASS : 클래스 수 / METHOD : 메소드 수 / INSTRUCTION (default) : Java 바이트 코드 명령 수 / COMPLEXITY : 복잡도

Value - 커버리지 정도를 나타내는 지표

- TOTALCOUNT : 전체 개수 / MISSEDCOUNT : 커버되지 않은 개수 / COVEREDCOUNT : 커버된 개수 / MISSEDRATION : 커버되지 않은 비율 (0~1) / COVEREDRATIO (default) : 커버된 비율 (0~1)

 

Jacoco 설정 예시 :

특정 클래스를 테스트 대상에서 제외하기 위해 아래와 같이 설정.

<configuration>
	<excludes>
        <exclude>**/DeleteController.class</exclude>
	</excludes>
</configuration>

측정 기준 예제

<configuration>
	<rules>
    	<rule>
            <element>BUNDLE</element>
            <limits>
            	<limit>
                  <counter>INSTRUCTION</counter>
                  <value>COVEREDRATIO</value>
                  <minimum>0.40</minimum>
                </limit>
            </limits>
        </rule>
        <rule>
        	<element>METHOD</element>
        	<limits>
                <limit>
                  <counter>LINE</counter>
                  <value>TOTALCOUNT</value>
                  <maximum>30</maximum>
                </limit>
            </limits>
        </rule>
    </rules>
</configuration>

- <rule>을 기준으로 총 2개의 측정 기준이 제시된 예제. / 상단의 <rule> = 패키지 번들 단위로 바이트 코드 명령 수에 40% 미만일 경우 에러 발생. / 하단의 <rule> = 메소드의 라인 수가 30을 초과할 경우 에러 발생.

 

Jacoco와 Maven LifeCycle

- Maven의 라이프 사이클 : compile → test → package → install → deploy

- jacoco plugin은 Maven 라이프 사이클에 의해 동작하며, test phase 이후에 측정이 가능함. package phase 이후로 동작 가능.

 

 

반응형

'Spring' 카테고리의 다른 글

Servlet, WAS에 대한 정리 (동적 웹 프로그래밍)  (0) 2023.06.30
단축 URL API 설계 (네이버)  (0) 2022.11.09
RestTemplate, TDD 노트  (0) 2022.11.07
Spring Boot Exception Handling 노트  (0) 2022.11.06
Spring Boot Validation 노트  (0) 2022.11.05

댓글