Files

Testing History

이 폴더는 테스트 인프라 변경의 사건 단위 비교 기록이다. 정책(임계치, Tier 분류)은 ../testing-coverage-policy.md를 참조한다.

폴더 구조

docs/testing-history/
├── README.md                              # 본 문서
└── {YYYY-MM-DD}-{사건명}/                 # 사건 단위 폴더 (영구 보존, git)
    └── SUMMARY.md                         # 한 페이지 결론 (수치 + 의미 + 한계)

원본 JaCoCo/PIT 스냅샷은 다음 위치에 버전·날짜 단위로 누적 보관한다 (git ignore, 로컬 전용):

coverage-history/
└── v{project.version}/                   # 예: v0.0.1-SNAPSHOT
    └── {YYYY-MM-DD}-{사건명}/            # 같은 버전 안에서 누적
        ├── application/{jacoco,pitest}/
        ├── presentation/{jacoco,pitest}/
        ├── infrastructure/jacoco/
        ├── bootstrap/jacoco/
        └── summary.txt

같은 버전 안에서는 사건이 누적된다 (v0.0.1-SNAPSHOT/2026-05-04-jqwik-before, v0.0.1-SNAPSHOT/2026-05-04-jqwik-after, v0.0.1-SNAPSHOT/2026-05-20-aggregate-after ...). 릴리스 버전이 올라가면 자동으로 새 디렉토리에 적재되어 버전 단위 비교도 가능하다.

라벨 명명 규칙 (강제)

  • 형식: {YYYY-MM-DD}-{kebab-case 사건명}
  • 정규식: ^\d{4}-\d{2}-\d{2}-[a-z0-9][a-z0-9-]*$
  • 예: 2026-05-04-jqwik-before, 2026-05-04-jqwik-after, 2026-08-12-aggregate-before
  • archiveCoverageReport 태스크가 형식 검증 + 같은 라벨 중복 차단

새 사건 기록 절차 (체크리스트)

  1. BEFORE 스냅샷 측정
    git checkout {pre-change-commit}
    ./gradlew clean test jacocoTestReport :application:pitest :presentation:pitest
    ./gradlew archiveCoverageReport -Plabel=YYYY-MM-DD-사건명-before
    
  2. 변경 적용 후 AFTER 스냅샷 측정
    git checkout {feature-branch}
    ./gradlew clean test jacocoTestReport :application:pitest :presentation:pitest
    ./gradlew archiveCoverageReport -Plabel=YYYY-MM-DD-사건명-after
    
  3. docs/testing-history/{YYYY-MM-DD}-{사건명}/SUMMARY.md 작성 (아래 템플릿)
  4. 커밋 — coverage-history/는 ignore되므로 SUMMARY.md만 git에 들어간다

중요: 측정 조건은 BEFORE/AFTER가 같아야 한다. 같은 명령어, 같은 도구 버전, 같은 exclusion. 사과-사과 비교가 아니면 수치를 비교할 수 없다.

어떻게 보나

보고 싶은 것 어디로
한 페이지 결론과 변화량 docs/testing-history/{사건명}/SUMMARY.md
모듈별 라인/분기 % coverage-history/v{ver}/{label}/{module}/jacoco/html/index.html
PIT 단언 강도 coverage-history/v{ver}/{label}/{module}/pitest/index.html
정책(임계치/Tier) ../testing-coverage-policy.md

SUMMARY.md 템플릿

# YYYY-MM-DD 사건명

## 한 줄 결론
무엇을 바꿔서 어떤 수치가 어떻게 변했는지 한 문장.

## 변경 범위
- 의존성/도구
- 추가/수정된 테스트
- 영향 모듈

## Before / After 수치 (사과-사과)
| 모듈 | BEFORE | AFTER | 변화 |
| ... |

## 자동 검출 가능해진 회귀 시나리오
1. 구체적 시나리오 1
2. ...

## 측정 조건 (재현용)
- BEFORE 커밋 / AFTER 커밋
- 측정 명령어
- 도구 버전
- 같은 exclusion 여부

## PIT (단언 강도)
| 모듈 | Mutations | Killed | Test Strength |
| ... |

## 한계 / 미해결
- 다음 사건의 입력이 될 항목들

## 첨부 (원본 스냅샷)
- coverage-history/v{ver}/{YYYY-MM-DD}-사건명-before/
- coverage-history/v{ver}/{YYYY-MM-DD}-사건명-after/

보존 정책

  • docs/testing-history/{사건명}/SUMMARY.md영구 보존 (git)
  • coverage-history/v{ver}/{label}/ 원본 스냅샷 — 로컬 전용, 누적 보관, 필요 시 재생성 가능
  • 진급/감사 등 외부 제출이 필요하면 그때 별도 zip으로 export
  • 스크린샷은 보관하지 않는다 — HTML 리포트가 원본이다. 외부 제출용은 그때 생성 후 폐기.

명령어 치트시트

# 일반 측정 (게이트 없음, 리포트만)
./gradlew clean test jacocoTestReport

# PIT까지 측정 (도구 도입 사건일 때)
./gradlew :application:pitest :presentation:pitest

# 스냅샷 archive (버전·라벨 필수)
./gradlew archiveCoverageReport -Plabel=2026-05-04-jqwik-after

# 게이트 검증 (CI에서 PR 단위)
./gradlew coverageGate