#Frontend

테스트를 더 쓰기 전에, 어디에 쓸지부터: 동적 필터 ATDD 실험기

테스트를 더 쓰기 전에, 어디에 쓸지부터: 동적 필터 ATDD 실험기
01

Summary

버그 제로의 비결! QA 테스트 케이스를 '시험지'로 삼는 ATDD 도전기

여기어때가 다중 카테고리와 동적 필터 개발 과정에서 TDD와 ATDD 이중 루프로 QA 첫 패스율 95%를 달성한 생생한 여정

개발이 끝난 뒤에야 버그를 잡는 사후 약방문식 개발에서 벗어나기 위해, QA의 테스트 케이스를 개발 전 명세서로 활용하는 ATDD 실험을 진행했습니다. TDD의 안쪽 루프와 ATDD의 바깥 루프를 조화롭게 구동하고 AI 에이전트를 검증 파트너로 활용하여 단순한 테스트 코드 작성을 넘어 품질 향상을 위한 실질적인 오답 노트를 확보했습니다. 본 아티클은 전면 도입 대신 스마트하게 선택하고 집중하는 실무 중심의 테스트 전략을 제시합니다.

  • 01QA 시작 전에 기획 충돌 및 스펙 오류 등 17건의 결함을 선제적으로 차단
  • 02첫 QA 검증에서 테스트 케이스 통과율 95% 및 프로덕션 배포 후 결함 0건 달성
  • 03AI 에이전트와의 스마트한 협업으로 197건의 대규모 테스트 코드 변환 리소스 최적화
  • 04결함 영역 분석을 통해 고정 영역과 변동 영역을 구분하는 하이브리드 적용 전략 도출
  • 05API 정합성 상시 감시 및 릴리스 체크리스트 등 실무적인 액션 플랜 제시

RECOMMENDATION

잦은 요구사항 변경으로 테스트 유지보수 비용에 지친 개발자나, QA 기간에 쏟아지는 결함 티켓의 병목을 줄이고 품질을 데이터 기반으로 예측하고 싶은 개발 팀에게 적극 추천합니다.

The Problem

복잡한 다중 카테고리 및 동적 검색 필터 기능을 개발하는 과정에서 기획의 모호함과 개발 후반부 QA 기간에 결함이 집중되는 병목 현상이 발생하여 일정 지연과 품질 저하의 우려가 있었습니다.

The Solution

개발 시작 전 QA 조직으로부터 테스트 케이스를 미리 받아 수용 기준으로 삼고, AI 에이전트와 협업하여 이를 자동화 테스트 코드로 변환 및 실행하는 이중 루프 프로세스를 도입했습니다.

The Result

QA 시작 전에 17건의 잠재 결함을 선제적으로 해결하였으며, 본 QA 첫 실행 시 95%의 성공률을 기록하고 출시 후 결함 발생 건수 0건을 달성했습니다.

Trade-off

기획이 계속 변하는 영역에서는 테스트 코드 재작업 비용이 급격히 증가하며, 프론트엔드 단독 테스트 환경 특성상 실제 백엔드 API 간의 데이터 정합성 오류를 완벽하게 잡아내기는 어렵습니다.

03

Key Concepts

Concept · 01

ATDD (Acceptance Test-Driven Development)

기획자, 개발자, QA가 협업하여 사용자 관점의 요구사항을 구체적인 수용 기준으로 정의하고 이를 검증하는 테스트를 먼저 작성하는 방법론입니다. 요구사항의 모호함을 조기에 제거하고 비즈니스 가치에 집중할 수 있도록 돕습니다.

  • QA 담당자가 작성한 197건의 테스트 케이스를 바깥 루프의 수용 기준으로 정의했습니다.
  • 기획 문서와 API 스펙 간의 충돌을 코드 구현 전에 발견하는 이정표 역할을 수행했습니다.
Concept · 02

TDD (Test-Driven Development)

실제 코드를 작성하기 전에 실패하는 테스트를 먼저 작성하고, 이를 통과시킨 후 코드를 개선하는 극소 단위 개발 주기입니다. 설계를 선제적으로 유도하고 코드의 인터페이스를 명확하게 다듬는 도구로 활용됩니다.

  • 요구사항 단위의 수용 기준을 만족시키기 위해 개별 로직 단위에서 red-green-refactor 주기를 실행했습니다.
  • 예상치 못한 사이드 이펙트를 차단하고 구현의 견고함을 더해주는 안쪽 루프로 기능했습니다.
Concept · 03

AI 에이전트 (Claude Code)

대규모 코드베이스를 자율적으로 분석하고 테스트 초안 생성, API 명세 대조 등 엔지니어링 작업을 지원하는 인공지능 기반 개발 파트너입니다. 개발자의 단순 반복 리소스를 획기적으로 절감해 줍니다.

  • 197건의 테스트 케이스를 Jest와 RTL 기반의 자동화 테스트 코드로 변환하는 역할을 수행했습니다.
  • 구현체의 허점을 노리는 '반박 전담 검증'으로 101개의 공격적인 테스트 요청을 실행했습니다.