본문으로 건너뛰기

© 2026 Molayo

arXiv논문2026. 05. 27. 11:33

Java를 위한 LLM 기반의 Mockless 단위 테스트 생성

요약

Java 단위 테스트 생성 시 발생하는 LLM의 환각 문제를 해결하기 위해 MocklessTester를 제안합니다. 문맥 강화 생성과 제약 조건 강제 수정 전략을 통해 모킹 프레임워크 없이도 실제 의존성을 실행하는 고품질 테스트 생성이 가능함을 입증했습니다.

핵심 포인트

  • LLM의 환각 원인을 '모름'과 '따르지 않음'으로 정의
  • 문맥 강화 생성 및 제약 조건 강제 수정 전략 도입
  • Defects4J 및 Deps4J 벤치마크에서 커버리지 및 뮤테이션 스코어 대폭 개선
  • 실제 의존성 코드를 더 많이 실행하여 테스트의 실효성 증대

대규모 언어 모델 (LLMs)은 자동화된 테스트 생성 분야에서 강력한 잠재력을 보여주었으나, Java 단위 테스트를 생성하는 대부분의 접근 방식은 여전히 의존성 (dependencies)을 처리하기 위해 모킹 프레임워크 (mocking frameworks)에 의존하고 있습니다. Mockless 테스트 생성은 더 실제적인 저수준 코드 (low-level code)를 실행할 수 있지만, 환각 (hallucination)으로 인한 유효하지 않은 테스트 코드 생성, 엄격한 언어 제약 조건, 그리고 불충분한 의존성 인식과 같은 문제에 직면해 있습니다. 우리는 이러한 환각의 두 가지 원인을 식별했습니다: LLM에 충분한 문맥 (context)이 부족한 '모름 (not knowing)', 그리고 제약 조건이 제공되었음에도 불구하고 이를 준수하지 못하는 '따르지 않음 (not following)'입니다. 우리는 문맥 강화 생성 (context-enriched generation)과 제약 조건 강제 수정 (constraint-enforced fixing)이라는 두 가지 전략을 중심으로 구축된 MocklessTester라는 Mockless 단위 테스트 생성 접근 방식을 제안합니다. '모름' 문제를 완화하기 위해, 문맥 강화 생성은 기존 코드에서 실제 사용 패턴을 채굴하여 테스트를 생성합니다. '따르지 않음' 문제를 완화하기 위해, 제약 조건 강제 수정은 ClassIndex, 마르코프 타입스테이트 모델 (Markov typestate model), 그리고 경험 메모리 (experience memory)를 사용하여 심볼 (symbol), 프로토콜 (protocol), 반복 (iteration) 수준의 제약 조건 하에서 2단계 수정을 수행합니다. 우리는 Defects4J와 Deps4J 벤치마크에서 최신 기술 (state-of-the-art) 베이스라인과 MocklessTester를 비교 평가했습니다. 결과에 따르면 MocklessTester는 두 벤치마크에서 라인 커버리지 (line coverage)를 각각 19.99%와 22.69% 개선하였고, 분기 커버리지 (branch coverage)를 각각 24.90%와 15.78% 개선하였으며, 뮤테이션 스코어 (mutation score)를 13.67%와 0.17% 향상시켰습니다. 테스트 대상 클래스를 넘어, MocklessTester는 의존성 클래스에서 각각 378행과 55행의 추가적인 코드를 실행함으로써 더 많은 실제 의존성 코드를 실행했습니다. 테스트 품질의 향상은 베이스라인보다 더 높은 총 토큰 및 시간 비용을 수반합니다. 그럼에도 불구하고, 메서드당 비용은 실용적인 수준을 유지하며, Defects4J에서는 평균 108.97초와 26.59k 토큰, Deps4J에서는 69.85초와 25.46k 토큰이 소요되었습니다. 절제 연구 (Ablation results) 결과는 모든 주요 구성 요소가 최종 성능에 긍정적으로 기여함을 확인시켜 줍니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 arXiv Codex (cs.SE)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0