지식 기반 LLM 테스트 생성기 KTester: 프로젝트와 테스트 도메인 지식 융합
초록
KTester는 정적 분석으로 추출한 프로젝트 구조·사용 지식과 테스트 도메인 원칙을 LLM에 주입해, 테스트 설계와 구현을 단계별로 분리하고 다중 관점 프롬프트를 활용한다. 실험 결과, 기존 LLM 기반 방법 대비 실행 성공률 5.69%, 라인 커버리지 8.83% 향상과 함께 가독성·유지보수성에서도 인간 평가자에게 높은 점수를 받았다.
상세 분석
본 논문은 대규모 언어 모델(LLM)을 활용한 자동 단위 테스트 생성이 실제 프로젝트에 적용될 때 흔히 마주치는 ‘지식 부족’ 문제를 체계적으로 해결한다는 점에서 의미가 크다. 첫 번째 핵심은 오프라인 지식 추출 단계이다. 저자들은 AST 파싱과 코드 그래프 구축을 통해 프로젝트 구조 지식(클래스 계층, 메서드 시그니처, 필드 선언 등)과 사용 지식(메서드 호출 패턴, 인스턴스 생성 흐름, 실제 사용 예시)을 자동으로 수집한다. 특히 Javadoc 주석까지 포함해 의미론적 힌트를 제공함으로써, LLM이 “어떤 객체를 어떻게 초기화해야 하는가”와 같은 구체적 상황을 이해하도록 돕는다.
두 번째 핵심은 테스트 도메인 지식 기반 설계·생성 분리이다. 기존 연구는 focal method만을 입력으로 받아 일괄적으로 테스트 코드를 생성했지만, KTester는 (1) 테스트 클래스 프레임워크 생성, (2) 다중 관점 테스트 시나리오 설계, (3) 테스트 메서드 변환, (4) 클래스 통합, (5) 리팩터링의 5단계 파이프라인으로 작업을 나눈다. 이 과정에서 “무엇을 테스트할지”(테스트 설계)와 “어떻게 테스트할지”(코드 구현)를 명확히 구분한다.
특히 멀티 퍼스펙티브 프롬프트 전략은 경계값, 예외 처리, 제어 흐름 등 다양한 테스트 원칙을 동시에 LLM에게 제시해, 단일 프롬프트에 비해 보다 풍부하고 균형 잡힌 테스트 케이스를 유도한다. 프롬프트에는 앞서 구축한 프로젝트 지식 베이스에서 추출한 구체적 변수 타입, 초기값, 의존 객체 정보가 삽입돼, LLM이 “잘못된 키 사용”이나 “부족한 어설션” 같은 실수를 줄인다.
실험 설계는 두 축으로 나뉜다. 자동화된 메트릭에서는 실행 성공률, 라인 커버리지, 테스트 수, 생성 시간 등을 6가지 핵심 지표로 비교했으며, 가장 강력한 베이스라인 대비 KTester는 실행 성공률 5.03%·라인 커버리지 11.67% 상승을 기록했다. 인간 평가에서는 30명 이상의 개발자가 가독성, 유지보수성, 테스트 의도 명확성을 5점 척도로 평가했으며, KTester가 모든 항목에서 통계적으로 유의미하게 높은 점수를 받았다.
또한 모듈 별 기여도 분석을 통해, 테스트 메서드 변환 모듈(테스트 도메인 지식 가이드) 제거 시 실행 성공률이 11.45%, 라인 커버리지가 13.39% 급감함을 확인, 이 모듈이 전체 성능에 가장 큰 영향을 미침을 입증한다.
한계점으로는 정적 분석이 동적 언어(예: 파이썬)나 복잡한 메타프로그래밍을 완전히 포착하지 못할 수 있다는 점, 그리고 프롬프트 설계가 도메인 전문가의 손을 거쳐야 한다는 점을 들 수 있다. 향후 연구에서는 동적 분석과 결합한 하이브리드 지식 베이스 구축, 그리고 프롬프트 자동 최적화 기법을 탐색할 여지가 있다.
요약하면, KTester는 프로젝트 전반에 걸친 정적 지식과 테스트 도메인 원칙을 LLM에 체계적으로 주입하고, 설계·생성 단계의 명확한 분리를 통해 기존 LLM 기반 테스트 생성기의 주요 약점을 보완한다. 이는 자동화된 테스트 생성이 실제 산업 현장에 적용될 수 있는 실용적 전환점을 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기