피드로 돌아가기
Dev.toDevOps
원문 읽기
Mutation Testing 기반의 Surrogate 구조로 테스트 커버리지 80% 확보
Surrogate Testing: Building a Robust QA Pipeline with Mutation Testing and Test Doubles
AI 요약
Context
단순 Unit Test만으로는 외부 시스템 연동 시 발생하는 엣지 케이스와 런타임 예외 상황을 탐지하는 데 한계 존재. 특히 Test Double의 낮은 충실도로 인한 Test Flakiness와 코드 커버리지가 실제 결함 검출 능력으로 이어지지 않는 괴리 발생.
Technical Solution
- Behavioral Fidelity 원칙에 기반하여 내부 구현이 아닌 관찰 가능한 동작만 모사하는 Test Doubles 설계
- 성공 경로 외에 Timeout, Partial Failure 등 다양한 장애 시나리오를 시뮬레이션하는 Failure Mode 주입 구조 채택
- 의도적으로 코드에 결함을 주입하여 테스트 성공 여부를 확인하는 Mutation Testing 도입을 통한 테스트 스위트의 유효성 검증
- CI 파이프라인 부하 감소를 위해 핵심 모듈 대상의 Selective Mutation 및 Nightly 빌드 전략 적용
- Dependency Injection을 활용하여 런타임 시 실제 콜라보레이터를 Deterministic Double로 교체하는 아키텍처 구성
- Domain별로 표준화된 apiClient, cacheLayer 등 재사용 가능한 Doubles Library 구축으로 일관된 테스트 환경 제공
실천 포인트
- 핵심 통합 경로 2-3개를 선정하여 Surrogate Test 우선 적용 - 비즈니스 로직이 포함되지 않은 인터페이스 기반의 Doubles Library 구축 - Stryker(TS) 또는 MutPy(Python) 등 언어별 Mutation 도구 도입 및 핵심 모듈 적용 - CI 파이프라인 내 PR 시점에는 Surrogate Test를, 정기 일정에는 Mutation Test를 분리 실행