Skip to content

커버리지 기준

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/**',
      ],
    },
  },
})
프로바이더특징
v8V8 엔진 내장 커버리지, 빠른 속도, Vitest 기본값
istanbul정밀한 계측, 넓은 생태계 호환성
리포트 형식용도
text터미널에서 즉시 확인
html브라우저에서 파일별 상세 커버리지 확인
lcovCI 도구 및 외부 서비스(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.tscoverage.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 등)와 연동하여 커버리지 추이를 시각화하는 것을 권장합니다.

TIENIPIA QUALIFIED STANDARD