커버리지 기준
20.4.1. 최소 커버리지
TQS 인증을 위해 프로젝트는 아래 최소 커버리지 기준을 충족해야 합니다.
| 항목 | 최소 기준 | 설명 |
|---|---|---|
| 라인(Lines) | 80% | 실행된 코드 라인 비율 |
| 브랜치(Branches) | 70% | 조건 분기(if/else, switch) 커버 비율 |
| 함수(Functions) | 80% | 호출된 함수 비율 |
| 문장(Statements) | 80% | 실행된 문장 비율 |
- 신규 프로젝트는 초기부터 기준을 충족하도록 테스트를 작성합니다.
- 기존 프로젝트는 커버리지를 점진적으로 향상시키되, 신규 코드에 대해서는 기준을 반드시 충족해야 합니다.
- 커버리지 수치가 높더라도 의미 없는 테스트(단순 호출만 하는 테스트)는 인정하지 않습니다.
20.4.2. 커버리지 리포트
vitest.config.ts에 커버리지 프로바이더와 리포트 형식을 설정합니다.
typescript
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
coverage: {
provider: 'v8',
reporter: ['text', 'html', 'lcov'],
reportsDirectory: './coverage',
include: ['src/**/*.{ts,vue}'],
exclude: [
'src/**/*.d.ts',
'src/**/*.test.ts',
'src/**/*.spec.ts',
'src/**/index.ts',
'src/types/**',
'src/constants/**',
'src/auto-generated/**',
],
},
},
})| 프로바이더 | 특징 |
|---|---|
v8 | V8 엔진 내장 커버리지, 빠른 속도, Vitest 기본값 |
istanbul | 정밀한 계측, 넓은 생태계 호환성 |
| 리포트 형식 | 용도 |
|---|---|
text | 터미널에서 즉시 확인 |
html | 브라우저에서 파일별 상세 커버리지 확인 |
lcov | CI 도구 및 외부 서비스(SonarQube, Codecov 등) 연동 |
- TQS 기준 프로바이더는
v8을 기본으로 사용합니다. text,html,lcov세 가지 리포트를 모두 생성하는 것을 권장합니다.
20.4.3. 제외 대상
커버리지 측정에서 다음 파일은 제외합니다.
| 제외 대상 | 사유 |
|---|---|
타입 정의 파일 (*.d.ts) | 런타임 코드가 아님 |
상수 파일 (constants/) | 로직이 포함되지 않은 값 정의 |
자동 생성 코드 (auto-generated/) | 수동 관리 대상이 아님 |
설정 파일 (vite.config.ts, vitest.config.ts 등) | 빌드/테스트 설정 전용 |
Re-export 파일 (index.ts) | 단순 재수출만 수행 |
테스트 파일 (*.test.ts, *.spec.ts) | 테스트 코드 자체는 커버리지 대상이 아님 |
- 제외 대상은
vitest.config.ts의coverage.exclude배열에 명시합니다. - 제외 대상이 추가될 경우 팀 내 합의를 거쳐 설정 파일을 갱신합니다.
20.4.4. CI 통합
CI 파이프라인에서 커버리지 임계값 미달 시 빌드를 실패 처리합니다.
typescript
// vitest.config.ts
export default defineConfig({
test: {
coverage: {
provider: 'v8',
thresholds: {
lines: 80,
branches: 70,
functions: 80,
statements: 80,
},
},
},
})thresholds를 설정하면 커버리지가 기준 미만일 때 Vitest가 비정상 종료 코드를 반환합니다. CI 파이프라인에서 이를 감지하여 빌드를 실패 처리합니다.
yaml
# CI 파이프라인 예시 (GitHub Actions)
- name: Run tests with coverage
run: yarn test:coverage
- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/thresholds값은 20.4.1절의 최소 커버리지 기준과 동일하게 설정합니다.- 커버리지 리포트는 CI 아티팩트로 보관하여 이력을 추적합니다.
- 외부 서비스(Codecov, SonarQube 등)와 연동하여 커버리지 추이를 시각화하는 것을 권장합니다.