Code Coverage
- 소프트웨어의 테스트 수준이 충분한지를 측정하는 지표
- 테스트 코드 작성 후 해당 코드가 실행되었는지 테스트하는 지표를 의미한다.
- 여러가지 도구 존재. ex) Jacoco
Jacoco
- JAVA 코드의 커버리지를 체크하는 라이브러리
- 테스트 커버리지를 측정해준다.
- Runtime에서 측정
- 결과를 Html, xml, csv 형태로 저장해서 전달
테스트의 종류
- 블랙 박스 테스트 : 사용자 관점에서 입력에 대해 올바른 출력이 나오는지를 테스트
- 화이트 박스 테스트 : 개발자 관점에서 소스 내부 구조와 동작을 테스트 (Unit Test 등)
Maven의 라이프 사이클은 다음과 같다.
compile -> test -> package -> install -> deploy
Test Coverage는 이 중 test 단계에서 플러그인으로 사용되는 라이브러리 정도로 생각하면되고
특정 애플리케이션을 개발한다고 가정했을 때, test coverage를 통해 테스트가 얼마나 잘 되었는지 판단 후 애플리케이션의 배포를 한다고 생각하면 좋다.
설정
Execution 내부에 설정
- prepare-agent : 테스트 중인 어플리케이션에서 인수를 전달하는 Jacoco Runtime Agent에 대한 property를 준비
- merge : 여러 실행 데이터 파일들을 하나로 통합하는 명령어
- report : 하나의 프로젝트 테스트에 대한 Code Coverage Report를 생성하는 명령어
- 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(커버되지 않은 개수), CoverdCount(커버된 개수), MissedRatio(커버되지 않은 비율), CoveredRatio(커버된 비율)
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/테스트하지않을클래스명.class</exclude>
<exclude>**/테스트하지않을패키지명/*</exclude>
</excludes>
<rules>
// 예시 : 패키지 번들 단위로 메서드 수에 40%미만일 경우 에러 발생
<rule>
<element>BUNDLE</element>
<limits>
<limit>
<counter>METHOD</counter>
<value>COVEREDRATIO</value>
<minimum>0.40</minimum>
</limit>
</limits>
</rule>
// 예시 : 패키지에 라인수가 30초과시 에러 발생
<rule>
<element>PACKAGE</element>
<limits>
<limit>
<counter>LINE</counter>
<value>TOTALCOUNT</value>
<maximum>30</maximum>
</limit>
</limits>
</rule>
</rules>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
- 이렇게 설정을 끝내고 build 단계중, test보다 더 나중 단계를 실행하면 알아서 jacoco가 실행된다. 다른 플러그인 사용도 가능하니 여러가지 알아보고 다양하게 사용하면 좋을 것 같다.
- 안된다면 터미널을 이용해 해당 패키지에 들어가 mvn 명령어를 통해 validate → compile →test → package → install → deploy 순으로 처리시 동작한다. package까지 해줘도 동작
(+) SonarQube
-> 여러 프로젝트의 테스트 커버리지 등을 한번에 관리하는 도구
결과 분석
결과는 다양한 형태로 반환되는데, index.html이 가장 쉽게 확인가능하다.
초록색 줄 : 테스트가 잘 이루어짐
노란색 줄 : 조건문은 실행되었지만 반례에 대한 테스트 코드를 작성하지 않음
빨간색 줄 : 테스트가 이루어지지 않음
'Server Development > Testing' 카테고리의 다른 글
UNIT TEST - JUNIT5, Mockito (0) | 2023.07.16 |
---|---|
Apache Jmeter (0) | 2023.05.15 |
Unit Test with MVC (0) | 2023.04.02 |
Swagger (0) | 2023.04.01 |
TDD (0) | 2023.03.27 |