Mistral AI Rails Testing Agent

Mistral AI는 RSpec 테스트를 자동으로 생성하고 개선함으로써 대규모 Ruby on Rails 모놀리스의 테스트 격차를 해소하기 위해 설계된 자율 에이전트를 개발했습니다. 이 에이전트는 인간의 개입 없이 CI/CD 파이프라인 내에서 작동하며, 대규모 코드베이스를 처리하기 위해 병렬 실행을 활용합니다.

자율 테스트 생성 워크플로우

에이전트는 포괄적인 테스트 커버리지와 스타일 가이드 준수를 보장하기 위해 구조화된 실행 계획을 채택합니다. 이 프로세스는 에이전트에게 다음 단계를 지시하는 리포지토리 수준의 AGENTS.md 파일을 통해 관리됩니다:

  1. Source Analysis: 소스 파일과 사용 가능한 모든 문서를 읽습니다.
  2. Existing Test Check: 이미 spec이 존재하는지 확인합니다.
  3. Skill Selection: 소스 파일 위치에 따라 특화된 skill을 선택합니다.
  4. Pattern Identification: 기존 패턴, factories 및 helpers를 식별합니다.
  5. Execution: 로직을 추출하고, factories를 관리하며, 테스트를 생성합니다.
  6. Validation: RuboCop 및 SimpleCov 도구를 사용하여 코드를 검증합니다.

에이전트가 public 메서드를 건너뛰는 것을 방지하기 위해, 워크플로우에는 에이전트가 소스 파일의 모든 public 메서드가 테스트되었는지 개수를 세고 확인해야 하는 필수적인 self-review 단계가 포함되어 있습니다.

Vibe를 통한 기술적 구현

이 에이전트는 Mistral의 오픈 소스 코딩 어시스턴트인 Vibe를 기반으로 구축되었습니다. 구현은 컨텍스트 엔지니어링(context engineering), 특화된 skills, 그리고 커스텀 tools라는 세 가지 주요 축에 의존합니다.

Context Engineering 및 Specialized Skills

서로 다른 Rails 컴포넌트는 서로 다른 테스트 전략을 필요로 하기 때문에, 에이전트는 각 카테고리(예: models, controllers, serializers, mailers, helpers 및 일반 Ruby 파일)에 대해 별도의 "skills" 파일을 사용합니다. 예를 들어, controller skill은 단순히 HTTP 상태 코드를 확인하는 것이 아니라 JSON 콘텐츠를 단언(asserting)하고 모든 액션에 대해 인증을 확인하는 것과 같은 특정 규칙을 강제합니다.

Custom Validation Tools

생성된 테스트가 기능적이고 규정을 준수하는지 확인하기 위해, 에이전트는 Vibe 프레임워크에 통합된 커스텀 tools를 활용합니다:

  • RuboCop Tool: 스타일 위반을 감지하는 린팅 도구로, 에이전트가 규정을 준수할 때까지 코드를 다시 작성하도록 트리거합니다.
  • SimpleCov Tool: 이 도구는 RSpec을 통해 spec 파일을 실행하고 통과/실패 결과와 라인 커버리지 백분율을 모두 보고합니다. 이 단계는 LLM에게는 품질이 높아 보이지만 구문 오류로 인해 실행에 실패하는 "missing parenthesis problem"를 방지하기 때문에 매우 중요합니다.

테스트 품질 측정

Mistral AI는 정량적인 도구 기반 메트릭과 정성적인 LLM 기반 점수를 결합하여 생성된 테스트의 품질을 평가하는 하이브리드 접근 방식을 사용합니다.

Quantitative Metrics

에이전트는 표준 Ruby 도구를 사용하여 다음 메트릭을 추적합니다:

  • RSpec: 테스트의 통과/실패 상태.
  • RuboCop: 파일당 스타일 위반 횟수.
  • SimpleCov: 코드 커버리지 백분율.

LLM-as-a-Judge

에러 조건이 테스트되었는지 또는 단언(assertion)이 정밀한지와 같은 정성적인 측면을 평가하기 위해, Mistral은 "LLM-as-a-judge" 모델을 사용합니다. 이 심사관은 정밀한 값의 존재 여부(예: be_present 대신 eq(100))와 happy, error, boundary 경로의 커버리지에 기반한 엄격한 채점 루브릭(0.0 ~ 1.0)을 사용합니다.

실험 결과

275개의 소스 파일이 있는 리포지토리를 대상으로 한 실험에서, 에이전트에게 커버되지 않은 파일에 대한 테스트를 생성하고 기존 테스트를 개선하는 작업이 부여되었습니다. 결과는 테스트 품질과 커버리지의 상당한 증가를 보여주었습니다:

Metric Result
Files processed 275
Tests passing 100%
Average line coverage (SimpleCov) 100%
RuboCop violations after self-correction 0
LLM-as-a-judge score 0.74

파일 유형별 성능

에이전트의 효과는 테스트되는 로직의 유형에 따라 달랐으며, 독립적인 비즈니스 로직이 자동화하기 가장 쉬웠습니다:

  • Models: 0.81 점
  • Serializers: 0.80 점
  • Controllers: 0.67 점

Mistral AI는 첫 번째 실행에서 테스트의 3분의 1만이 통과했다는 점을 언급하며, SimpleCov와 RSpec에 의해 구동되는 반복적인 self-correction 루프가 시스템 설계에서 가장 영향력 있는 부분이었음을 강조했습니다.

Sources

관련

  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch
  • Dispatch