2025-11-21T20:19:23.757806

The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation

Gao, Wang, Gao et al.
Test cases are essential for validating the reliability and quality of software applications. Recent studies have demonstrated the capability of Large Language Models (LLMs) to generate useful test cases for given source code. However, the existing work primarily relies on human-written plain prompts, which often leads to suboptimal results since the performance of LLMs can be highly influenced by the prompts. Moreover, these approaches use the same prompt for all LLMs, overlooking the fact that different LLMs might be best suited to different prompts. Given the wide variety of possible prompt formulations, automatically discovering the optimal prompt for each LLM presents a significant challenge. Although there are methods on automated prompt optimization in the natural language processing field, they are hard to produce effective prompts for the test case generation task. First, the methods iteratively optimize prompts by simply combining and mutating existing ones without proper guidance, resulting in prompts that lack diversity and tend to repeat the same errors in the generated test cases. Second, the prompts are generally lack of domain contextual knowledge, limiting LLMs' performance in the task.
academic

프롬프트 연금술사: 테스트 케이스 생성을 위한 자동화된 LLM 맞춤형 프롬프트 최적화

기본 정보

  • 논문 ID: 2501.01329
  • 제목: The Prompt Alchemist: Automated LLM-Tailored Prompt Optimization for Test Case Generation
  • 저자: Shuzheng Gao, Chaozheng Wang, Cuiyun Gao, Xiaoqian Jiao, Chun Yong Chong, Shan Gao, Michael R. Lyu
  • 분류: cs.SE cs.AI cs.CL
  • 발표 시간/학회: JOURNAL OF LATEX CLASS FILES, VOL. 18, NO. 9, SEPTEMBER 2020
  • 논문 링크: https://arxiv.org/abs/2501.01329

초록

테스트 케이스는 소프트웨어 애플리케이션의 신뢰성과 품질을 검증하는 데 필수적입니다. 최근 연구에 따르면 대규모 언어 모델(LLM)은 주어진 소스 코드에 대해 유용한 테스트 케이스를 생성할 수 있는 능력을 갖추고 있습니다. 그러나 기존 연구는 주로 수동으로 작성된 단순한 프롬프트에 의존하고 있으며, 이는 LLM의 성능이 프롬프트 품질에 크게 의존하기 때문에 차선의 결과를 초래합니다. 더욱이, 이러한 방법들은 모든 LLM에 동일한 프롬프트를 사용하여 서로 다른 LLM이 다른 프롬프트에 최적으로 반응할 수 있다는 사실을 간과합니다. 본 논문은 다양성 유도 프롬프트 생성, 실패 기반 규칙 귀납, 도메인 컨텍스트 지식 추출이라는 세 가지 핵심 모듈을 통해 서로 다른 LLM에 대한 자동화된 프롬프트 최적화를 실현하는 MAPS 방법을 제안합니다.

연구 배경 및 동기

1. 핵심 문제

테스트 케이스 생성은 소프트웨어 공학의 핵심 작업이며, Evosuite 및 Randoop과 같은 전통적 방법은 검색 및 제약 기술에 의존하는 반면, LLM 기반 방법은 잠재력을 보여주지만 다음과 같은 문제가 있습니다:

  • 수동으로 작성된 단순 프롬프트에 의존하여 성능이 차선적
  • 모든 LLM에 동일한 프롬프트를 사용하여 LLM 간의 차이를 무시
  • 테스트 케이스 생성 작업에 대한 전문화된 최적화 부재

2. 문제의 중요성

  • 수동으로 테스트 케이스를 작성하는 것은 시간이 많이 걸리고 어려움
  • 고품질 테스트 케이스는 소프트웨어 품질 보증에 매우 중요
  • 코드 이해 및 생성 분야에서 LLM의 강력한 능력은 프롬프트 최적화를 통해 충분히 발휘되어야 함

3. 기존 방법의 한계

저자들은 예비 실험을 통해 기존 자동 프롬프트 최적화(APO) 방법이 테스트 케이스 생성 작업에서 세 가지 주요 문제를 가지고 있음을 발견했습니다:

  • 낮은 다양성: 생성된 프롬프트가 다양성이 부족하여 국소 최적값에 빠지기 쉬움
  • 반복되는 오류: 최적화된 프롬프트가 여전히 원본 프롬프트와 동일한 오류를 생성
  • 도메인 지식 부족: 상속 관계 및 클래스 호출 정보와 같은 필요한 프로젝트 수준 컨텍스트 정보 부재

핵심 기여

  1. 첫 번째 연구: 저자들의 지식으로는 테스트 케이스 생성 작업을 위한 LLM 맞춤형 프롬프트 최적화를 전문적으로 다루는 첫 번째 연구
  2. 혁신적 방법: 다양성 유도 프롬프트 생성, 실패 기반 규칙 귀납, 도메인 컨텍스트 지식 추출을 통합한 MAPS 방법 제안
  3. 현저한 개선: 세 가지 인기 있는 LLM에 대한 실험에서 MAPS는 최강 기준선 방법 대비 평균 6.19%의 라인 커버리지 및 5.03%의 분기 커버리지 개선
  4. LLM 맞춤화: 서로 다른 LLM에 대해 맞춤형 프롬프트를 생성하는 효과성 입증

방법 상세 설명

작업 정의

블랙박스 모델 M, 소규모 개발 집합 Ddev, 테스트 집합 Dtest 및 점수 함수 s(·)가 주어졌을 때, APO는 Ddev를 기반으로 자연어 공간에서 최적화된 프롬프트 p를 발견하여 M이 테스트 집합 Dtest에서의 성능을 최대화하는 것을 목표로 합니다.

모델 아키텍처

MAPS는 세 가지 핵심 모듈을 포함합니다:

1. 도메인 컨텍스트 지식 추출(Domain Contextual Knowledge Extraction)

이 모듈은 LLM에 관련 프로젝트 수준 컨텍스트 정보를 제공합니다:

파일 내 컨텍스트 지식:

  • 클래스 서명: 초점 메서드를 포함하는 클래스의 유형 및 이름
  • 초점 메서드: 테스트 케이스를 생성해야 하는 구체적 메서드
  • 멤버 메서드 서명: 클래스 내 다른 메서드의 함수 서명

파일 간 컨텍스트 지식:

  • 클래스 상속 정보: 추상 또는 비공개 클래스의 경우 전체 프로젝트를 스캔하여 해당 서브클래스 위치 파악
  • 클래스 호출 정보: 초점 메서드 매개변수 유형 식별, 사용자 정의 유형의 정의 및 생성자 추적

2. 다양성 유도 프롬프트 생성(Diversity-guided Prompt Generation)

이 모듈은 다양한 수정 경로를 탐색하여 다양화된 프롬프트를 생성합니다:

알고리즘 2: PROMPTIMPROVEMENT
1. 성능이 최고인 K개의 프롬프트 선택
2. N개의 서로 다른 수정 방법 생성
3. 각 수정 방법을 기반으로 새로운 프롬프트 생성
4. 선택된 프롬프트와 새로 생성된 프롬프트 병합

3. 실패 기반 규칙 귀납(Failure-driven Rule Induction)

이 모듈은 실패한 테스트 케이스를 분석하여 규칙을 귀납함으로써 반복되는 오류를 방지합니다:

실패 정보 선택:

  • 실패한 테스트 케이스 및 오류 정보 수집
  • DBSCAN 클러스터링 알고리즘을 사용하여 실패 정보 집계
  • 클러스터 크기 및 과거 실패와의 유사성을 기반으로 가중치 샘플링 수행

오류 반성:

  • 대표적 실패 사례를 선택하여 반성 프롬프트 구성
  • LLM에 상세한 설명 및 해결책 제공 요청
  • 설명 및 해결책을 간결한 규칙으로 변환

규칙 검증:

  • 각 새로 생성된 규칙의 유효성 검증
  • 성능이 최고인 규칙 보존

기술 혁신 포인트

  1. 다양성 보장: 서로 다른 수정 방법의 강제 사용을 통해 프롬프트 다양성 보장, 국소 최적값 회피
  2. 실패 학습: 실패 사례에서 학습하여 규칙 귀납을 통해 최적화 프로세스 지도
  3. 컨텍스트 강화: 프로젝트 수준 컨텍스트 정보 제공으로 LLM이 정확한 테스트 케이스 생성 지원
  4. 소프트 통합: 반성 출력을 간결한 규칙으로 변환하여 긴 프롬프트로 인한 성능 저하 회피

실험 설정

데이터 집합

광범위하게 채택된 Defects4J 벤치마크 사용, 5개의 Java 프로젝트 포함:

  • Apache Commons CLI (29개 버그)
  • Apache Commons CSV (15개 버그)
  • Google Gson (17개 버그)
  • JFreeChart (26개 버그)
  • Apache Commons Lang (60개 버그)
  • 총계: 147개 버그, 85개 초점 클래스, 5,278개 초점 메서드

평가 지표

  • 라인 커버리지(%): 테스트 중 실행된 코드 라인의 백분율
  • 분기 커버리지(%): 테스트 중 실행된 분기의 백분율

비교 방법

LLM 모델:

  • ChatGPT (gpt-3.5-turbo-0125)
  • Llama-3.1-70B-Instruct
  • Qwen2-72B-Instruct

기준선 방법:

  • Basic: 최고 성능의 시드 프롬프트
  • APE: LLM에 의미 보존 프롬프트 변형 직접 요청
  • OPRO: 성능 정보를 결합하여 새로운 프롬프트 생성
  • EVOPROMPT (GA/DE): 진화 알고리즘 기반의 최신 프롬프트 최적화 방법

구현 세부사항

  • 시드 프롬프트 수: 5
  • 각 라운드 생성 프롬프트 수: 2
  • 최대 반복 횟수: 5
  • 개발 집합: 무작위 샘플링 10개 버그
  • 3회 반복 실험 후 평균 결과 보고

실험 결과

주요 결과

ChatGPT의 성능:

  • 라인 커버리지: MAPS는 53.80% 달성, 최강 기준선 EVOPROMPT(GA)는 46.63%, 7.17% 개선
  • 분기 커버리지: MAPS는 41.84% 달성, 최강 기준선은 35.88%, 5.96% 개선

Llama-3.1의 성능:

  • 라인 커버리지: MAPS는 50.59% 달성, 최강 기준선은 46.52%, 4.07% 개선
  • 분기 커버리지: MAPS는 39.50% 달성, 최강 기준선은 35.07%, 4.43% 개선

Qwen2의 성능:

  • 라인 커버리지: MAPS는 45.51% 달성, 최강 기준선은 39.41%, 6.10% 개선
  • 분기 커버리지: MAPS는 32.71% 달성, 최강 기준선은 28.92%, 3.79% 개선

제거 실험

각 모듈 기여도 분석(ChatGPT 예시):

  • 도메인 컨텍스트 지식 추출 제거: 라인 커버리지 9.64% 감소, 분기 커버리지 8.53% 감소
  • 다양성 유도 프롬프트 생성 제거: 라인 커버리지 8.21% 감소, 분기 커버리지 7.80% 감소
  • 실패 기반 규칙 귀납 제거: 라인 커버리지 6.94% 감소, 분기 커버리지 4.76% 감소

LLM 맞춤화 효과

실험에서 MAPS가 서로 다른 LLM에 대해 맞춤형 프롬프트를 생성할 수 있음을 검증했습니다:

  • 각 LLM은 자신의 전용 최적화 프롬프트에서 최고 성능 달성
  • ChatGPT의 최종 프롬프트는 다른 LLM의 프롬프트보다 ChatGPT에서 각각 2.45% 및 2.66%의 라인 커버리지 향상
  • MAPS 최적화 프롬프트는 모두 수동으로 설계된 프롬프트보다 우수

사례 분석

사례 1 - Llama-3.1: 두 번째 귀납 규칙을 통해 모델이 예외 처리를 포함한 테스트 케이스를 올바르게 생성 사례 2 - ChatGPT: 파일 간 컨텍스트 지식을 통해 모델이 추상 클래스를 올바르게 초기화

관련 연구

자동 프롬프트 최적화

  • APE: LLM에 의미 보존 프롬프트 변형 직접 요청
  • OPRO: 성능 정보를 결합하여 프롬프트 생성 지도
  • EVOPROMPT: 진화 알고리즘 기반의 최신 방법

테스트 케이스 생성

  • 전통적 방법: Randoop(무작위 퍼징), Evosuite(검색 알고리즘)
  • 심층 학습 방법: AthenaTest(미세 조정 BART), A3Test(단언 지식 강화)
  • LLM 방법: ChatUniTest, ChatTESTER 등

결론 및 논의

주요 결론

  1. MAPS는 모든 LLM에서 기존 프롬프트 최적화 방법을 현저히 능가
  2. 서로 다른 LLM은 실제로 맞춤형 프롬프트 필요
  3. 세 가지 핵심 모듈 모두 성능 향상에 중요한 기여를 하며, 그 중 도메인 컨텍스트 지식 추출이 가장 큰 기여

한계

  1. LLM 한계: 세 가지 대표적 LLM에서만 평가 수행
  2. 언어 한계: 실험은 Java 프로젝트에만 제한되어 다른 프로그래밍 언어 미포함
  3. 데이터 집합 범위: Defects4J 벤치마크만 사용

향후 방향

  1. 더 많은 LLM 및 프로그래밍 언어로 확장
  2. 기존 LLM 테스트 생성 방법과 결합
  3. 더 복잡한 프로젝트 수준 컨텍스트 정보 탐색

심층 평가

장점

  1. 명확한 문제 정의: LLM 테스트 케이스 생성의 프롬프트 최적화 문제를 처음으로 체계적으로 연구
  2. 강한 방법 혁신성: 세 가지 모듈 설계가 합리적이며 기존 방법의 핵심 문제 해결
  3. 충분한 실험: 여러 LLM, 여러 프로젝트에서 포괄적 평가 수행
  4. 높은 실용 가치: 방법이 범용적이며 서로 다른 LLM 및 프로젝트에 적용 가능

부족한 점

  1. 계산 비용: 반복 최적화 프로세스가 많은 API 호출을 필요로 할 수 있어 비용이 높음
  2. 규칙 품질: 실패 기반 규칙 귀납이 LLM의 반성 능력에 의존하여 규칙 품질이 불안정할 수 있음
  3. 컨텍스트 추출: 파일 간 컨텍스트 추출의 완전성 및 정확성 추가 검증 필요

영향력

  1. 학술 기여: LLM 테스트 케이스 생성의 프롬프트 최적화 연구 방향 개척
  2. 실용 가치: 실제 소프트웨어 개발의 테스트 케이스 생성에 직접 적용 가능
  3. 재현성: 완전한 재현 패키지 제공으로 후속 연구 용이

적용 시나리오

  1. 고품질 테스트 케이스 자동 생성이 필요한 소프트웨어 프로젝트
  2. 서로 다른 LLM을 사용하여 코드 생성을 수행하는 팀
  3. LLM 성능 최적화가 필요한 소프트웨어 공학 작업

참고 문헌

논문은 소프트웨어 테스트, 프롬프트 공학, 대규모 언어 모델 등 여러 분야의 중요한 연구를 포함하는 48개의 관련 문헌을 인용하여 연구에 견고한 이론적 기초를 제공합니다.


전체 평가: 이는 LLM 테스트 케이스 생성 분야에서 중요한 이론적 및 실용적 가치를 가진 고품질의 소프트웨어 공학 연구 논문입니다. 방법 설계가 합리적이고 실험 평가가 충분하며 결과가 설득력 있습니다. 일부 한계가 있지만 전체적으로 기여도가 현저하며 해당 분야의 발전에 중요한 추진력을 제공합니다.