| name | ci-coverage-gate |
| description | 테스트 커버리지 임계값과 예외 규칙을 설계한다. CI 게이트로 운영 가능한 설정을 생성한다. |
| argument-hint | [project-dir|coverage-config] (선택: 목표 커버리지 비율) |
| user-invocable | true |
| disable-model-invocation | true |
| allowed-tools | Read, Grep, Glob |
당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.
목적
프로젝트의 코드 구조와 테스트 현황을 분석하여, CI에서 운영할 수 있는 커버리지 임계값과 예외 규칙을 설계한다.
획일적인 단일 임계값이 아니라, 디렉터리·파일 유형별로 적절한 기준을 설정하고 단계적으로 커버리지를 개선할 수 있는 현실적인 계획을 수립한다.
입력
- 프로젝트 디렉터리 또는 커버리지 설정 파일 경로 (필수)
- 선택: 목표 커버리지 비율 (예: 80%)
- 선택: 기존 커버리지 리포트 (lcov, coverage.xml 등)
- 선택: 커버리지 측정 대상에서 제외하고 싶은 디렉터리 (예: 테스트, 마이그레이션 등)
- 정보가 부족할 경우 사용자에게 질문할 것
절차
-
프로젝트 구조 분석
- Glob으로 소스 코드의 디렉터리 구조를 파악한다.
- 다음 파일 유형을 분류한다:
- 비즈니스 로직: 서비스 레이어, 도메인 모델, 유틸리티
- 엔트리 포인트: 컨트롤러, 라우터, 핸들러
- 설정·인프라: 설정 파일, 마이그레이션, 시드 데이터
- 타입 정의·인터페이스: 타입 파일, 프로토콜 정의
- 자동 생성 코드: ORM 모델, GraphQL 타입, API 클라이언트
- 테스트 파일의 위치를 확인하고, 사용 중인 테스트 프레임워크를 식별한다.
-
기존 커버리지 현황 파악
- 커버리지 설정 파일을 검색하고 내용을 확인한다:
- Jest:
jest.config.*의 coverageThreshold, collectCoverageFrom
- pytest:
pyproject.toml의 [tool.coverage], .coveragerc
- Go: 커버리지 관련 Makefile 타겟
- 기존 커버리지 리포트가 있다면 현재 커버리지 비율을 파악한다.
- 기존 제외 설정(
coveragePathIgnorePatterns 등)을 확인한다.
-
임계값 설계
- 파일 유형별로 적절한 커버리지 임계값을 설계한다:
- 비즈니스 로직: 높은 임계값 (80~90%) — 결함 영향도가 높음
- 엔트리 포인트: 중간 임계값 (60~75%) — 통합 테스트로 보완 가능
- 유틸리티: 높은 임계값 (85~95%) — 재사용 빈도 높음
- 설정·인프라: 낮은 임계값 또는 제외 — 테스트 비용 대비 효과 낮음
- 자동 생성 코드: 제외 — 수동 테스트 가치 낮음
- 전체 임계값과 디렉터리별 임계값을 모두 설정하고, 단계적 상향 계획을 포함한다.
-
예외 규칙 수립
- 커버리지 측정 대상에서 제외해야 할 파일·디렉터리를 명확히 정의한다:
- 테스트 파일 자체
- 설정 파일, 마이그레이션 파일
- 자동 생성 코드
- 타입 정의 전용 파일
- 각 제외 항목에 대해 제외 사유를 명시한다.
- 예외 규칙 남용을 방지하기 위한 가이드라인을 설정한다.
-
CI 게이트 설정 생성
- 사용 중인 테스트 프레임워크에 맞춰 설정을 생성한다:
- 커버리지 임계값 설정
- CI 실행 명령어
- 커버리지 리포트 출력 형식 (lcov, cobertura 등)
- PR에 커버리지 코멘트 출력 (Codecov, Coveralls 등)
- 임계값 미달 시 CI 동작(실패 / 경고)을 정의한다.
-
단계적 도입 계획 수립
- 현재 커버리지 비율이 낮거나 불명확한 경우, 초기 임계값을 낮게 설정하고 점진적으로 상향하는 계획을 수립한다.
- 마일스톤별 목표 임계값과 일정 제안.
- 커버리지 하락을 감지하기 위한 차등 비교(신규 코드 기준 커버리지) 전략을 제안한다.
출력 형식
## 프로젝트 분석
- **언어/프레임워크**: [감지된 언어]
- **테스트 프레임워크**: [Jest/pytest/go test 등]
- **소스 디렉터리 수**: [대상 디렉터리 수]
- **추정 소스 파일 수**: [테스트 제외 파일 수]
- **기존 커버리지 설정**: [있음(요약)/없음]
## 커버리지 임계값 설계
### 전체 임계값
| 지표 | 임계값 | 단계 |
|------|--------|------|
| Line Coverage | [X%] | 초기 → [Y%] 목표 |
| Branch Coverage | [X%] | 초기 → [Y%] 목표 |
| Function Coverage | [X%] | 초기 → [Y%] 목표 |
### 디렉터리별 임계값
| 디렉터리 | 유형 | 임계값 | 이유 |
|-----------|------|--------|------|
| [src/services/] | 비즈니스 로직 | [X%] | [이유] |
| [src/controllers/] | 엔트리 포인트 | [X%] | [이유] |
| [src/utils/] | 유틸리티 | [X%] | [이유] |
### 제외 규칙
| 대상 | 패턴 | 제외 사유 |
|-------|--------|------------|
| [테스트 파일] | [패턴] | [사유] |
| [자동 생성 코드] | [패턴] | [사유] |
| [마이그레이션] | [패턴] | [사유] |
## CI 설정
### 커버리지 설정 파일
[테스트 프레임워크에 맞는 설정을 코드 블록으로 출력]
### CI 워크플로 설정
[GitHub Actions 기준 커버리지 실행 스텝을 코드 블록으로 출력]
## 단계적 도입 계획
| 단계 | 기간 | 전체 목표 | 중점 영역 |
|------|------|-----------|-----------|
| Phase 1 | [기간] | [X%] | [대상] |
| Phase 2 | [기간] | [X%] | [대상] |
| Phase 3 | [기간] | [X%] | [대상] |
## 운영 규칙
- **신규 코드**: [신규 코드에 적용할 최소 커버리지 비율]
- **예외 승인 절차**: [임계값 예외를 허용하는 조건과 승인 프로세스]
- **정기 점검**: [임계값 재검토 시점과 기준]
안전 주의사항
- 커버리지 설정 파일을 직접 수정하지 말고, 설정 템플릿만 출력할 것
- 비현실적인 임계값(초기부터 100%)을 설정하지 말 것 — 팀 사기 저하를 초래할 수 있음
- 커버리지 수치만으로 테스트 품질을 판단하지 않는다는 주석을 포함할 것
- 자동 생성 코드나 서드파티 코드를 측정 대상에 포함하지 말 것
- 테스트 데이터에 운영 데이터나 개인정보를 사용하는 설정을 포함하지 말 것
종료 조건
위 출력 형식에 맞는 커버리지 게이트 설계 문서를 작성한 후 종료한다.
전체 및 디렉터리별 임계값, 예외 규칙, CI 설정 템플릿, 단계적 도입 계획이 모두 포함되어야 한다.
실제 설정 적용은 사용자 지시를 기다린다.