Files
project-auth-server/docs/testing-history/README.md
T

125 lines
4.5 KiB
Markdown

# Testing History
이 폴더는 테스트 인프라 변경의 사건 단위 비교 기록이다. 정책(임계치, Tier 분류)은 [`../testing-coverage-policy.md`](../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 스냅샷 측정**
```bash
git checkout {pre-change-commit}
./gradlew clean test jacocoTestReport :application:pitest :presentation:pitest
./gradlew archiveCoverageReport -Plabel=YYYY-MM-DD-사건명-before
```
2. **변경 적용 후 AFTER 스냅샷 측정**
```bash
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 템플릿
```markdown
# 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 리포트가 원본이다. 외부 제출용은 그때 생성 후 폐기.
## 명령어 치트시트
```bash
# 일반 측정 (게이트 없음, 리포트만)
./gradlew clean test jacocoTestReport
# PIT까지 측정 (도구 도입 사건일 때)
./gradlew :application:pitest :presentation:pitest
# 스냅샷 archive (버전·라벨 필수)
./gradlew archiveCoverageReport -Plabel=2026-05-04-jqwik-after
# 게이트 검증 (CI에서 PR 단위)
./gradlew coverageGate
```