Microsoft code-testing-generator 오픈소스 공개, Copilot 대비 92.1% 완료율의 다국어 유닛 테스트 에이전트

Microsoft .NET 팀이 MIT 라이선스로 code-testing-generator를 오픈소스로 공개했습니다. 코딩 어시스턴트가 잘 못해 내는 일, 즉 "유닛 테스트를 써 줘"라는 모호한 요청을 끝내 해결해 주는 다국어(polyglot) 에이전트입니다. 같은 모델·같은 프롬프트로 비교한 벤치마크에서 작업 완료율이 92.1% vs 78.9%로 무려 13.2%포인트 차이를 보였습니다.

📅 2026-08-06 (최종 수정) 📂 AI 도구 ⏱️ 6분 분량 ✍️ AI Tech Brief

1. code-testing-generator란?

한 문장으로 정리하면, 리포지토리를 먼저 읽고 그에 맞춰 테스트를 짜 주는 AI 에이전트입니다. 기존 코딩 어시스턴트에게 "유닛 테스트 좀 만들어 줘"라고 던지는 순간, 보통 어떤 문제가 생기는지 아시죠? 어떤 테스트 프레임워크를 쓸지, 어느 파일에 둘지, 어떤 단언(assertion)을 넣을지 명확하지 않습니다. 그래서 결과물이 컨벤션을 어기거나, 빌드는 되는데 CI(지속적 통합)에서는 아예 실행이 안 되는 테스트가 만들어지기도 합니다.

code-testing-generator는 이 사각지대를 정면으로 노립니다. 코드를 작성하기 전에 다음을 먼저 확정합니다.

  • 테스트가 필요한 코드 영역
  • 사용 중인 언어와 테스트 프레임워크
  • 기존 테스트의 명명 규칙과 스타일
  • 리포지토리에서 실제로 쓰는 빌드 및 테스트 명령

이 도구는 dotnet/skills라는 MIT 라이선스 공개 리포지토리의 dotnet-test 플러그인으로 제공됩니다. 호스팅 서비스가 아니라 에이전트 정의와 스킬 묶음이라, 기존 코딩 에이전트에 그대로 끼워 넣어 쓸 수 있고 코드는 로컬에 머문다는 점이 강점입니다.

💡 쉽게 말하면? "테스트 좀 만들어 줘"라고 막연히 부탁해도, 사람이 신규 입사자처럼 코드를 먼저 읽어 보고 팀의 코딩 스타일을 익힌 뒤 작업을 시작하는 에이전트입니다.

2. 어떻게 작동하나요? RPI 파이프라인

이 에이전트는 Research-Plan-Implement(RPI) 파이프라인이라는 3단계 작업 흐름을 따릅니다. 한국어로는 조사-계획-구현 정도로 부를 수 있습니다.

2-1. Research (조사)

리포지토리에서 테스트가 필요한 코드를 검색하고, 언어와 프레임워크를 감지하며, 기존 테스트의 컨벤션을 읽습니다. 특히 실제 빌드/테스트 명령을 찾아내는 단계가 핵심입니다. 로컬에서는 빌드되지만 CI에 등록되지 않아 한 번도 실행되지 않는 테스트 프로젝트 문제를 정확히 잡아내기 위함입니다.

2-2. Plan (계획)

세 가지 전략 중 하나를 선택합니다.

전략언제 쓰나특징
Direct단순 모듈즉시 테스트 작성 후 검증
Single pass일반 범위한 사이클만 수행
Iterative대규모/높은 커버리지 목표여러 사이클 반복

2-3. Implement (구현)

실제 테스트를 작성하고 실행합니다. 운영 코드는 절대 수정하지 않으며, 외부 URL 호출, 포트 점유, 타이밍 의존 테스트는 피합니다. 모노레포처럼 다국어가 섞인 환경에서도 동일한 규칙을 강제하기 때문에 컨벤션 표준화 효과가 큽니다.

3. 5단계 검증 게이트의 비밀

"테스트를 작성했다"고 끝이 아닙니다. code-testing-generator는 완료 보고를 하기 전 5가지 점검을 모두 통과해야 합니다. 이 게이트가 일반 Copilot과 결과물을 가르는 결정적 차이입니다.

  1. 돌연변이 테스트(mutation testing 검토) — 테스트가 실패해야 할 작은 코드 변경을 가했을 때, 테스트가 실제로 그것을 잡아 내는지 추론합니다.
  2. 단언 품질 검사 — 약하거나 누락된 단언(assertion)이 있는지 확인합니다.
  3. 시나리오 매핑 — 사용자가 요청한 모든 시나리오가 실제 테스트 케이스에 1:1로 반영되어 있는지 점검합니다.
  4. 전체 워크스페이스 빌드 및 전체 스위트 실행 — 일부가 아니라 전체가 깨끗하게 통과해야 합니다.
  5. 리포지토리 자체 테스트 명령 검증 — 새 테스트가 팀이 평소 쓰는 테스트 명령에서도 발견·실행되는지 확인합니다.
🎯 한 줄 요약 "테스트가 컴파일되는가"가 아니라 "의도한 시나리오를 빠짐없이 검증하며, 팀의 CI에서도 실제로 돌아가는가"를 묻는 5중 안전장치입니다.

4. 벤치마크 결과 한눈에 보기

실제 리포지토리에서 가져온 152개 작업으로 구성된 Microsoft 내부 벤치마크 결과입니다. 두 환경 모두 동일한 모델, 동일한 프롬프트를 사용했다는 점이 공평한 비교를 보장합니다.

92.1%code-testing-generator (140/152)
78.9%기본 GitHub Copilot (120/152)
63% 감소실패 작업 수
5.5% 단축작업당 평균 시간 (359s vs 380s)

4-1. 차이는 어디서 가장 크게 벌어졌나

시나리오기본 Copilotcode-testing-generator
모호한 프롬프트 (89개)66.3% (59)88.8% (79)
상세 프롬프트 (63개)96.8% (61)96.8% (61)
특정 diff 대상 (15개)0% (0)100% (15)
외부 SWE Atlas 벤치마크 (44개)27.3% (12)36.4% (16)

4-2. 모델별 .NET 작업 결과 (45개)

모델기본 환경code-testing-generator
Claude Opus 4.835/4543/45
GPT-5.536/4541/45

4-3. 흥미로운 디테일

놀라운 부분은 테스트 수가 2.3% 더 적다(6,963 vs 7,129)는 점입니다. 그럼에도 라인 커버리지는 사실상 차이 없이 비슷합니다(72.4% vs 72.2%). 즉, 더 적은 테스트로 동일한 안전망을 구축한다는 의미이며, 이는 "분량보다 신뢰성"을 우선시하는 철학을 보여 줍니다. 완료된 작업당 토큰 사용량은 3.2% 늘었지만, 5.5% 빠른 실행 속도와 실패 63% 감소라는 trade-off를 고려하면 충분히 합리적입니다.

5. 누가 도입하면 좋을까요?

이 도구는 에이전트 정의와 스킬들의 묶음이지 호스팅 서비스가 아닙니다. 따라서 기존 코딩 에이전트 안에서 동작하며, 1인 메인테이너 프로젝트부터 대기업 팀까지 폭넓게 활용할 수 있습니다.

  • 스타트업·중견기업 — 작은 팀이 손코딩할 여유가 없는 리포지토리 조사 작업을 자동화.
  • 대기업 — 언어 가이드를 사내 프레임워크에 맞게 포크하여 배포.
  • 금융·의료·보험·공공 부문 — 규제·감사 부담이 큰 소프트웨어 자산의 테스트 보강에 적합.
  • 레거시 테스트 부채를 줄이고 있는 플랫폼 팀 — 기존 테스트가 없는 모듈을 체계적으로 보강.

주요 활용 시나리오는 다음과 같이 정리됩니다.

  1. 테스트가 없는 모듈의 테스트 보강
  2. 풀 리퀘스트 diff 대상 테스트 자동 생성
  3. 릴리스 게이트 전 커버리지 향상
  4. 다국어 모노레포 전반의 컨벤션 표준화

참고: 모노레포(monorepo)란?

여러 프로젝트의 코드를 단일 버전 관리 리포지토리에 함께 보관하는 전략입니다. 프로젝트 간 코드 공유와 의존성 관리가 수월해져, 다국어 모듈이 섞인 대규모 코드베이스에서 자주 채택합니다. code-testing-generator는 이런 모노레포에서 컨벤션 표준화 도구로 특히 강력합니다.

참고: 돌연변이 테스트(mutation testing)란?

소스 코드에 의도적으로 미세한 변이(mutant)를 도입하고, 기존 테스트 스위트가 그것을 "죽이는지"(탐지하는지) 확인하는 백색 상자 테스트 기법입니다. 테스트가 많이 있어도 그 테스트가 진짜 결함을 잡아 내는지 측정할 수 있어 테스트 커버리지의 사각지대를 보완합니다.

참고: 단언(assertion)이란?

유닛 테스트에서 코드의 출력값·상태가 기대한 조건을 만족하는지 검증하는 표현입니다. 예를 들어 assertEquals(3, sum(1,2)) 같은 형태로, 실패하면 테스트는 실패로 기록됩니다. 단언이 약하거나 누락되면 테스트가 "무사 통과"하는 것처럼 보이지만 실제로는 결함을 잡아내지 못합니다.

참고: 릴리스 게이트(release gate)란?

소프트웨어가 실제 배포 단계로 넘어가기 전에 반드시 통과해야 하는 품질·보안·정책 승인 관문입니다. 테스트 커버리지, 보안 스캔, 승인 등 정해진 기준을 만족해야만 배포가 허용됩니다.

6. 자주 묻는 질문(FAQ)

Q. code-testing-generator는 어떤 라이선스인가요?

MIT 라이선스입니다. dotnet/skills 리포지토리의 일부로 제공되므로 상업 프로젝트에서도 자유롭게 사용·수정·배포할 수 있습니다.

Q. 우리 회사처럼 .NET이 아닌 프로젝트에도 쓸 수 있나요?

네. 이 에이전트는 본질적으로 다국어(polyglot)입니다. 8개 이상의 언어에서 컴파일·통과 가능한 유닛 테스트를 생성할 수 있도록 설계되어 있어, Java, Python, TypeScript, Go 등 .NET 외 환경에서도 활용 가능합니다.

Q. 우리 리포지토리 데이터가 외부로 유출되나요?

아니요. 이 도구는 에이전트 정의와 스킬 묶음일 뿐 호스팅 서비스가 아닙니다. 기존 코딩 에이전트 안에서 로컬로 동작하며 코드는 로컬에 머문다는 점이 강조됩니다.

Q. 기본 Copilot과 가장 큰 차이는 무엇인가요?

단순한 코드 생성 단계에서 끝나지 않고, 리포지토리 맥락을 먼저 파악한 뒤 테스트 전략을 세우는 것입니다. 그 결과 모호한 프롬프트에서 66.3% → 88.8%, diff 대상 작업에서 0% → 100%로 큰 폭의 정확도 향상을 보였습니다.

7. 핵심 정리

  • ✅ Microsoft .NET 팀이 내놓은 오픈소스, MIT 라이선스의 다국어 유닛 테스트 에이전트.
  • RPI 파이프라인(Research-Plan-Implement)이 일회성 생성을 리포지토리 인지형 계획으로 대체.
  • ✅ 동일 모델 기준 기본 Copilot 대비 작업 완료율 92.1% vs 78.9%.
  • ✅ 이 이점은 거의 전적으로 모호한 프롬프트와 diff 대상 요청에서 발생.
  • 더 적은 테스트, 동일한 커버리지, 5.5% 더 빠름 — 분량보다 신뢰성.
📌 도입을 고려한다면 먼저 기존 코딩 에이전트(예: GitHub Copilot, Cursor 등)에 dotnet/skills 리포지토리의 dotnet-test 플러그인을 추가해 보세요. 별도 호스팅이 필요 없고 로컬에서 동작하므로 비교적 낮은 리스크로 파일럿을 시작할 수 있습니다.