I Let an AI Write My Tests for 30 Days: Coverage Went 38% to 71%
개요
the-agent라는 오픈소스 AI 에이전트를 30일간 사용하여 테스트 코드를 자동 생성, 실행, 유지보수한 결과, 코드 커버리지가 38%에서 71%로 향상되었습니다.
주요 내용
* 실험 배경: 기존 테스트 코드 유지보수의 어려움(시간 소요, 누락된 경로의 허위 안심)으로 인해 AI 기반 테스트 자동화 도구를 실험하게 되었습니다.
* 설정: the-agent를 설치하고 프로젝트 설정 시 typescript 언어, vitest 테스트 프레임워크, 70%의 coverageTarget, asyncDetection 활성화, 레거시 제약 조건 명시를 위한 compatibilityNotes 등의 옵션을 설정했습니다.
* 첫 테스트: "calculateTotal" 모듈에 대해 제품 배열을 받아 총액을 계산하고 쿠폰 할인을 지원하며, 100 할인 20 등의 조건을 포함하는 테스트를 요청했습니다. AI는 일반적인 총액, 빈 배열, 할인 임계값, 쿠폰 중첩, 음수 가격 예외 등 다양한 경우를 생성했습니다.
* CI 연동: 전체 테스트 스위트 생성이 아닌, 변경된 파일에 대한 패치 스타일의 테스트 생성을 통해 CI/CD 파이프라인에 통합했습니다. pull_request 시점에 the-agent test --diff origin/main...HEAD 명령어를 실행하여 약 5~8분 내에 AI 생성 커버리지 패치와 커버리지 게이트를 적용했습니다.
* 30일간의 결과:
* 코드 커버리지: 38%에서 71%로 증가
* 신규 기능 테스트 시간: 반나절에서 약 40분으로 단축 (리뷰 시간 포함)
* CI에서 발견된 회귀(Regression): 3건 (출시될 뻔했던 문제)
* 중복 테스트 케이스 삭제: 약 40%
* 주의점 및 개선 방안:
* 부정확한 설명: 비동기 단계를 명시하지 않아 잘못된 테스트가 생성될 수 있으며, 설명에 비동기 단계를 명확히 명시해야 합니다.
* 레거시 호환성: AI가 최신 모범 사례에 따라 테스트를 생성하여 기존 형식과 충돌할 수 있으며, compatibilityNotes에 제약 조건을 명시해야 합니다.
* 비동기 누락: 타이머, 콜백, 외부 호출 등의 타이밍이 간혹 누락될 수 있으며, asyncDetection: true가 도움이 되지만 수동 검토가 필요합니다.
* AI의 한계: AI는 테스트 실행을 보장하지만 비즈니스 로직의 정확성을 보장하지 않으며, 잘못된 설명은 자신감 있게 잘못된 테스트를 생성할 수 있습니다. AI가 생성하고 개발자가 의미론적 검토를 수행해야 합니다.
* 사용 대상: 테스트 유지보수에 어려움을 겪는 개발자, 탐색적 커버리지를 위한 테스트 엔지니어, "설치 후 즉시 사용"을 기대하는 사용자는 부적합합니다.
* 향후 계획: 60% 미만 커버리지 시 병합 차단, Python/Go 지원, 자체 수집한 프롬프트 템플릿 문서화 등을 계획 중입니다.
시사점
AI 기반 테스트 자동화는 개발자 생산성을 크게 향상시키고 코드 품질을 높일 수 있는 잠재력을 가지며, 도구 성숙도에 맞춰 워크플로우를 미리 준비하는 것이 중요합니다.
댓글
GitHub Discussions