코드 커버리지
- 소프트웨어의 테스트 수준이 충분한지 표현할 수 있는 지표 중 하나. 테스트를 진행했을 때 해당 코드가 실행되었는지를 표현하는 방법. 많은 코드 커버리지 도구가 있으며, 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 |
댓글