TL;DR

  • AI 코딩 에이전트가 테스트를 거의 공짜로 추가하는 환경에서는, Laravel 코드베이스의 테스트를 약 6,000개에서 63개로 줄이고 실행 시간을 5시간 이상에서 약 30초로 단축함.
  • 기존 고객 프로젝트 대부분은 테스트가 없거나 불완전한 CI(지속적 통합) 환경을 갖췄으며, 테스트가 개발을 늦추거나 컴퓨터마다 다르게 실패함.
  • AI가 쉽게 작성하는 코드 줄 확인, 번역 파일 비교, 데이터베이스 마이그레이션 왕복 테스트는 대체로 검증 가치가 낮음.
  • 외부 API 호출이나 웹 스크래핑처럼 실제로 문제가 발생하기 쉬운 부분은 테스트하기 어려워, 테스트가 쉬운 코드에 몰리는 경향이 있음.
  • 자동화된 테스트 대신 AI 에이전트가 실제 앱을 열고 로그인한 뒤 사용자처럼 기능을 살펴보게 하며, 전체 테스트 실행 시간을 1분 미만으로 제한함.

테스트가 드물었던 시절

  • 오랫동안 테스트가 소프트웨어를 개선한다는 데 동의하면서도 테스트를 작성하는 사람은 거의 없었으며, 경력 첫 10년 동안 테스트를 한 건도 작성하지 않았을 가능성이 큼.
  • 프리랜서로 여러 고객 프로젝트를 진행한 최근 몇 년 동안에도 제대로 된 테스트 스위트를 갖춘 고객은 거의 없었고, 대부분 테스트가 전혀 없었음.
  • 테스트가 있는 프로젝트도 대개 GitHub Actions 기반의 CI 설정이 불완전했음. 개발자는 작업을 진행하려고 테스트를 건너뛰었고, 한 사람의 컴퓨터에서 실행되는 테스트가 다른 사람의 컴퓨터에서는 실패하기도 했음.
  • 한 프로젝트의 테스트 스위트는 고객의 MacBook에서 몇 분 만에 실행됐지만, 새로 산 고가의 ThinkPad에서는 약 2시간이 걸림.

AI가 늘리는 테스트와 그 비용

  • 요즘 AI는 깨진 테스트 설정을 고치고, 요청하지 않아도 거의 모든 코드에 테스트를 추가함. 최신 GPT 모델을 쓰는 Codex는 특히 적극적이며, 기능마다 테스트 파일을 다수 생성함.
  • Laravel 코드베이스 하나에는 테스트가 약 6,000개, 파일이 거의 1,300개까지 쌓였고, 전체 실행에는 5시간 이상이 걸림.
  • AI 에이전트가 작성하는 테스트에는 Vue 파일을 열어 특정 코드 줄이 있는지 확인하거나, 번역 파일의 키를 하나씩 비교하거나, 데이터베이스 마이그레이션을 앞뒤로 실행하는 방식이 포함됨. 이런 검사는 거의 테스트할 가치가 없음.
  • 실제로 문제가 발생하는 부분은 테스트하기 어려운 경우가 많음. 외부 API 호출은 통제할 수 없는 서비스에 의존하고, 웹 스크래퍼는 아직 보지 못한 웹사이트에 의존함.
  • 그 결과 테스트는 쉬운 코드 주변에 쌓이는 반면, 위험한 코드는 이전과 마찬가지로 불확실한 상태에 놓임.

테스트 유지보수와 신뢰의 한계

  • 테스트도 누군가 유지해야 하는 코드임. 기능을 바꾸고 관련 테스트를 잊으면 테스트 스위트가 실패하고, 다시 테스트를 수정해야 하는 번거로움이 생김.
  • 이런 유지보수는 실제로 테스트할 만한 대상에만 감수할 가치가 있음.
  • 테스트 스위트가 모두 통과해도 앱이 제대로 작동한다는 뜻은 아님. 코딩 에이전트가 작업을 마치고 모든 테스트가 통과했다고 보고해도, 앱을 직접 열면 즉시 문제를 발견하는 경우가 있음.

실제 앱을 사용하는 AI 에이전트

  • 더 효과적인 방식은 AI가 앱을 직접 사용하게 하는 것임. 앱을 열고 로그인한 뒤 사용자가 하듯 기능을 따라가도록 도구를 제공함.
  • AI는 진행하면서 작은 스크립트를 작성하고, 문제가 있어 보이는 부분이 있으면 스크립트를 수정함.
  • 이 스크립트는 자동으로 실행되지 않으며 코드베이스 바깥에 둠. 반복 실행하는 테스트 스위트가 아니라 AI 에이전트가 작업에 맞춰 조정할 수 있는 도구 모음임.

테스트 63개로 줄인 Laravel 코드베이스

  • Laravel 코드베이스에서 거의 모든 테스트를 삭제해 수천 개에서 63개로 줄임.
  • 남은 테스트는 팀별 데이터 접근 권한, 크레딧과 결제, 이메일 발송, 데이터 삭제처럼 실패할 경우 실제 피해가 큰 항목을 다룸.
  • 전체 테스트 스위트 실행 시간은 약 30초임. 모든 에이전트에는 전체 테스트 스위트가 1분 이내에 끝나야 하며, 새 테스트는 타당한 이유가 있을 때만 추가할 수 있다는 규칙을 적용함.
  • 이전에는 에이전트가 수천 개의 테스트를 기다리느라 몇 시간을 보냈지만, 이제는 그 시간을 앱을 직접 살펴보는 데 사용하며 실제 버그를 발견함.