아래에 Java에서 PIT (Pitest) Mutation Testing을 사용하는 방법을 단계별로 정리해 드립니다. PIT는 자바 코드의 테스트 커버리지를 실제로 검증하는 강력한 도구로, 잘못된(변이된) 코드를 테스트가 얼마나 잘 잡아내는지를 측정합니다.
📌 1. PIT(Pitest) 소개
-
Mutation Testing이란?
- 기존 코드를 일부러 “변이(mutant)” 시켜서 테스트를 돌려보는 기법입니다.
- 테스트가 이 변이를 검출하지 못하면, 테스트에 허점이 있다는 뜻입니다.
- 단순한 라인 커버리지보다 더 신뢰성 있는 테스트 품질 지표를 제공합니다.
-
PIT의 특징
- JUnit 기반 테스트와 잘 통합됩니다.
- Maven, Gradle, Ant에서 쉽게 사용 가능합니다.
- HTML 및 XML 리포트를 생성합니다.
⚙️ 2. Maven 프로젝트에 PIT 적용
2.1 Maven 플러그인 추가
pom.xml에 다음 플러그인을 설정합니다:
<build>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.15.2</version> <!-- 최신 버전 확인 권장 -->
<configuration>
<!-- 변이 테스트에 포함할 클래스 패턴 -->
<targetClasses>
<param>com.yourcompany.*</param>
</targetClasses>
<!-- 변이 테스트에 포함할 테스트 클래스 패턴 -->
<targetTests>
<param>com.yourcompany.*Test</param>
</targetTests>
<!-- 빠르게 하려면 스레드 수 조절 -->
<threads>4</threads>
<!-- HTML 리포트 생성 디렉토리 -->
<outputFormats>
<param>HTML</param>
</outputFormats>
</configuration>
</plugin>
</plugins>
</build>
targetClasses에는 실제 비즈니스 로직 클래스,targetTests에는 테스트 클래스의 패키지/패턴을 지정하세요.
2.2 실행
터미널에서 아래 명령어를 실행:
mvn org.pitest:pitest-maven:mutationCoverage
실행이 끝나면 target/pit-reports/YYYYMMDDHHMI 폴더에 HTML 리포트가 생성됩니다.
🛠️ 3. Gradle 프로젝트에 PIT 적용
Gradle을 쓰시는 경우 build.gradle에 다음을 추가합니다:
3.1 플러그인 추가
Gradle 7 이상 기준:
plugins {
id 'info.solidsoft.pitest' version '1.15.0'
}
3.2 설정 예시
pitest {
targetClasses = ['com.yourcompany.*']
targetTests = ['com.yourcompany.*Test']
threads = 4
outputFormats = ['HTML']
}
3.3 실행
./gradlew pitest
리포트는 build/reports/pitest 폴더에 생성됩니다.
🔍 4. 주요 Mutation Operator 예시
PIT가 사용하는 변이 예시는 다음과 같습니다:
| 변이 종류 | 예시 |
|---|---|
| 조건 반전 | == ➡️ != |
| 수학 연산 변경 | + ➡️ - |
| 리턴 값 변경 | return true; ➡️ return false; |
| void method 삭제 | 메서드 내용 제거 |
이러한 변이들을 테스트가 잡아내지 못하면 Survived로 표시되며, 잡아내면 Killed로 표시됩니다.
📈 5. 리포트 해석
리포트에는 다음 정보가 포함됩니다:
- Mutation Coverage 퍼센트
- 어떤 변이가
Survived(살아남음)인지 - 어떤 테스트가 어떤 변이를 탐지했는지
일반적으로 80% 이상의 mutation coverage를 목표로 하면 좋습니다.
🚩 6. 팁 및 참고 사항
✅ 테스트 속도 최적화
threads설정으로 멀티스레드 사용.- 패키지 범위를 좁혀서 점진적으로 분석.
✅ 테스트 명확화
Survived인 변이는 보완 테스트 케이스 작성 필요.
✅ IDE 통합
- 일부 IDE 플러그인(e.g., IntelliJ용 PIT 플러그인)을 통해 바로 실행 가능.
✅ CI 연동
- Jenkins, GitLab CI에서 PIT를 자동으로 실행하도록 설정 가능.