코딩 에이전트가 과도하게 목킹한 테스트를 만들고 있나요
초록
본 연구는 2025년에 2,168개의 TypeScript·JavaScript·Python 저장소에서 1.2백만 개 이상의 커밋을 분석해 코딩 에이전트가 작성한 테스트와 목(mock) 사용 빈도를 조사한다. 결과는 에이전트가 비에이전트보다 테스트 수정·추가와 목 삽입을 더 많이 수행하며, 특히 최근 생성된 저장소에서 그 비중이 높아짐을 보여준다.
상세 분석
본 논문은 코딩 에이전트가 자동으로 생성하거나 수정한 테스트 코드에서 목(test double) 사용이 과도하게 이루어지는지를 실증적으로 조사한 최초의 연구이다. 연구자는 2025년 한 해 동안 GitHub에 공개된 2,168개의 TypeScript, JavaScript, Python 프로젝트를 대상으로 SEART GitHub Search Engine을 이용해 최소 100개의 커밋·5,000줄 이상의 비공백 코드·최근 2개월 이내 커밋이 있는 저장소를 추출하였다. 이후 Claude, GitHub Copilot, Cursor 등 세 가지 주요 코딩 에이전트의 설정 파일(.claudemd, .copilot‑*.md 등) 존재 여부와 커밋 메타데이터(Author, Co‑authored‑by)에서 “claude”, “copilot”, “cursor” 문자열을 탐색해 실제 에이전트가 만든 커밋을 48,563건(1,219개 저장소) 식별하였다.
테스트 커밋은 파일명 패턴(test_*.py, *_test.py, *.test.ts 등)과 디렉터리 경로에 “test”, “spec” 등이 포함된 경우로 정의했으며, 총 169,361건(1,779개 저장소)의 테스트 수정·추가 커밋을 발견했다. 목 커밋은 코드 파싱 후 식별자에 “mock”, “stub”, “fake”, “spy”, “dummy” 등이 포함된 경우로 판단했으며, 44,900건(1,032개 저장소)의 목 삽입 커밋을 추출하였다.
주요 결과는 다음과 같다. 첫째, 에이전트가 활동하는 저장소의 60%에서 테스트 파일이 추가·수정되었으며, 에이전트 커밋 중 23%가 테스트 파일을 다루었다(비에이전트는 13%). 둘째, 에이전트가 관여한 테스트 커밋 중 36%가 목을 삽입했는데, 비에이전트는 26%에 불과했다. 셋째, 에이전트가 만든 목 커밋은 전체 목 커밋의 9%를 차지했으며, 2025년 새로 생성된 저장소에서는 이 비중이 19%로 급증했다. 넷째, 목 유형을 분석한 결과 에이전트는 “mock” 유형을 95% 이상 사용해 다양성이 현저히 낮았으며, 비에이전트는 mock(91%), fake(57%), spy(51%) 등 여러 유형을 혼합해 사용했다.
이러한 정량적 증거는 코딩 에이전트가 테스트 자동화에 적극 활용되고 있지만, 목에 과도 의존함으로써 테스트의 가독성·유지보수성이 저하될 위험이 있음을 시사한다. 특히, 목은 실제 의존성을 대체하지만 구현 변화에 따라 동기화가 깨질 경우 테스트 신뢰도가 급격히 떨어진다. 에이전트가 “mock”만을 주로 선택하는 경향은 자동 생성이 용이하지만, 실제 동작 검증 능력은 제한적이라는 기존 연구와 일맥상통한다.
연구자는 이러한 현상이 에이전트 설정 파일(예: CLAUDE.md, copilot_instructions.md 등)에 목 사용 가이드라인을 명시함으로써 완화될 수 있다고 제안한다. 또한, 에이전트가 높은 자동화 수준을 유지하면서도 테스트 품질을 보장하려면 목 사용을 제한하고, 실제 구현과 연계된 통합 테스트를 병행하도록 설계해야 한다는 실무적·학술적 함의를 도출한다.
댓글 및 학술 토론
Loading comments...
의견 남기기