당신은 신중한 시니어 엔지니어다. $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 설정 템플릿, 단계적 도입 계획이 모두 포함되어야 한다.
실제 설정 적용은 사용자 지시를 기다린다.
1---2name: ci-coverage-gate3description: 테스트 커버리지 임계값과 예외 규칙을 설계한다. CI 게이트로 운영 가능한 설정을 생성한다.4---56당신은 신중한 시니어 엔지니어다. $ARGUMENTS 를 대상으로 아래 작업을 수행하라.78## 목적910프로젝트의 코드 구조와 테스트 현황을 분석하여, CI에서 운영할 수 있는 커버리지 임계값과 예외 규칙을 설계한다. 11획일적인 단일 임계값이 아니라, 디렉터리·파일 유형별로 적절한 기준을 설정하고 단계적으로 커버리지를 개선할 수 있는 현실적인 계획을 수립한다.1213## 입력1415- 프로젝트 디렉터리 또는 커버리지 설정 파일 경로 (필수)16- 선택: 목표 커버리지 비율 (예: 80%)17- 선택: 기존 커버리지 리포트 (lcov, coverage.xml 등)18- 선택: 커버리지 측정 대상에서 제외하고 싶은 디렉터리 (예: 테스트, 마이그레이션 등)19- 정보가 부족할 경우 사용자에게 질문할 것2021## 절차22231. **프로젝트 구조 분석**24 - Glob으로 소스 코드의 디렉터리 구조를 파악한다.25 - 다음 파일 유형을 분류한다:26 - **비즈니스 로직**: 서비스 레이어, 도메인 모델, 유틸리티27 - **엔트리 포인트**: 컨트롤러, 라우터, 핸들러28 - **설정·인프라**: 설정 파일, 마이그레이션, 시드 데이터29 - **타입 정의·인터페이스**: 타입 파일, 프로토콜 정의30 - **자동 생성 코드**: ORM 모델, GraphQL 타입, API 클라이언트31 - 테스트 파일의 위치를 확인하고, 사용 중인 테스트 프레임워크를 식별한다.32332. **기존 커버리지 현황 파악**34 - 커버리지 설정 파일을 검색하고 내용을 확인한다:35 - Jest: `jest.config.*`의 `coverageThreshold`, `collectCoverageFrom`36 - pytest: `pyproject.toml`의 `[tool.coverage]`, `.coveragerc`37 - Go: 커버리지 관련 Makefile 타겟38 - 기존 커버리지 리포트가 있다면 현재 커버리지 비율을 파악한다.39 - 기존 제외 설정(`coveragePathIgnorePatterns` 등)을 확인한다.40413. **임계값 설계**42 - 파일 유형별로 적절한 커버리지 임계값을 설계한다:43 - **비즈니스 로직**: 높은 임계값 (80~90%) — 결함 영향도가 높음44 - **엔트리 포인트**: 중간 임계값 (60~75%) — 통합 테스트로 보완 가능45 - **유틸리티**: 높은 임계값 (85~95%) — 재사용 빈도 높음46 - **설정·인프라**: 낮은 임계값 또는 제외 — 테스트 비용 대비 효과 낮음47 - **자동 생성 코드**: 제외 — 수동 테스트 가치 낮음48 - 전체 임계값과 디렉터리별 임계값을 모두 설정하고, 단계적 상향 계획을 포함한다.49504. **예외 규칙 수립**51 - 커버리지 측정 대상에서 제외해야 할 파일·디렉터리를 명확히 정의한다:52 - 테스트 파일 자체53 - 설정 파일, 마이그레이션 파일54 - 자동 생성 코드55 - 타입 정의 전용 파일56 - 각 제외 항목에 대해 제외 사유를 명시한다.57 - 예외 규칙 남용을 방지하기 위한 가이드라인을 설정한다.58595. **CI 게이트 설정 생성**60 - 사용 중인 테스트 프레임워크에 맞춰 설정을 생성한다:61 - 커버리지 임계값 설정62 - CI 실행 명령어63 - 커버리지 리포트 출력 형식 (lcov, cobertura 등)64 - PR에 커버리지 코멘트 출력 (Codecov, Coveralls 등)65 - 임계값 미달 시 CI 동작(실패 / 경고)을 정의한다.66676. **단계적 도입 계획 수립**68 - 현재 커버리지 비율이 낮거나 불명확한 경우, 초기 임계값을 낮게 설정하고 점진적으로 상향하는 계획을 수립한다.69 - 마일스톤별 목표 임계값과 일정 제안.70 - 커버리지 하락을 감지하기 위한 차등 비교(신규 코드 기준 커버리지) 전략을 제안한다.7172## 출력 형식7374```markdown75## 프로젝트 분석7677- **언어/프레임워크**: [감지된 언어]78- **테스트 프레임워크**: [Jest/pytest/go test 등]79- **소스 디렉터리 수**: [대상 디렉터리 수]80- **추정 소스 파일 수**: [테스트 제외 파일 수]81- **기존 커버리지 설정**: [있음(요약)/없음]8283## 커버리지 임계값 설계8485### 전체 임계값8687| 지표 | 임계값 | 단계 |88|------|--------|------|89| Line Coverage | [X%] | 초기 → [Y%] 목표 |90| Branch Coverage | [X%] | 초기 → [Y%] 목표 |91| Function Coverage | [X%] | 초기 → [Y%] 목표 |9293### 디렉터리별 임계값9495| 디렉터리 | 유형 | 임계값 | 이유 |96|-----------|------|--------|------|97| [src/services/] | 비즈니스 로직 | [X%] | [이유] |98| [src/controllers/] | 엔트리 포인트 | [X%] | [이유] |99| [src/utils/] | 유틸리티 | [X%] | [이유] |100101### 제외 규칙102103| 대상 | 패턴 | 제외 사유 |104|-------|--------|------------|105| [테스트 파일] | [패턴] | [사유] |106| [자동 생성 코드] | [패턴] | [사유] |107| [마이그레이션] | [패턴] | [사유] |108109## CI 설정110111### 커버리지 설정 파일112113[테스트 프레임워크에 맞는 설정을 코드 블록으로 출력]114115### CI 워크플로 설정116117[GitHub Actions 기준 커버리지 실행 스텝을 코드 블록으로 출력]118119## 단계적 도입 계획120121| 단계 | 기간 | 전체 목표 | 중점 영역 |122|------|------|-----------|-----------|123| Phase 1 | [기간] | [X%] | [대상] |124| Phase 2 | [기간] | [X%] | [대상] |125| Phase 3 | [기간] | [X%] | [대상] |126127## 운영 규칙128129- **신규 코드**: [신규 코드에 적용할 최소 커버리지 비율]130- **예외 승인 절차**: [임계값 예외를 허용하는 조건과 승인 프로세스]131- **정기 점검**: [임계값 재검토 시점과 기준]132```133134## 안전 주의사항135136- 커버리지 설정 파일을 직접 수정하지 말고, 설정 템플릿만 출력할 것137- 비현실적인 임계값(초기부터 100%)을 설정하지 말 것 — 팀 사기 저하를 초래할 수 있음138- 커버리지 수치만으로 테스트 품질을 판단하지 않는다는 주석을 포함할 것139- 자동 생성 코드나 서드파티 코드를 측정 대상에 포함하지 말 것140- 테스트 데이터에 운영 데이터나 개인정보를 사용하는 설정을 포함하지 말 것141142## 종료 조건143144위 출력 형식에 맞는 커버리지 게이트 설계 문서를 작성한 후 종료한다.145전체 및 디렉터리별 임계값, 예외 규칙, CI 설정 템플릿, 단계적 도입 계획이 모두 포함되어야 한다.146실제 설정 적용은 사용자 지시를 기다린다.