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 могут лучше всего работать с разными подсказками. В данной статье предлагается метод MAPS, который реализует автоматизированную оптимизацию подсказок для различных LLM посредством трех основных модулей: генерация подсказок, ориентированная на разнообразие, индукция правил, управляемая ошибками, и извлечение знаний контекста предметной области.

Исследовательский контекст и мотивация

1. Основная проблема

Генерация тестовых случаев является ключевой задачей в инженерии программного обеспечения. Традиционные методы, такие как Evosuite и Randoop, полагаются на поисковые и ограничивающие технологии, тогда как методы на основе 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 направлена на обнаружение оптимизированной подсказки p из пространства естественного языка на основе Ddev, которая максимизирует производительность M на наборе тестов Dtest.

Архитектура модели

MAPS состоит из трех основных модулей:

1. Извлечение знаний контекста предметной области (Domain Contextual Knowledge Extraction)

Этот модуль предоставляет LLM соответствующую информацию контекста уровня проекта:

Знания контекста внутри файла:

  • Сигнатура класса: тип и имя класса, содержащего целевой метод
  • Целевой метод: конкретный метод, для которого необходимо генерировать тестовые случаи
  • Сигнатуры методов-членов: сигнатуры функций других методов в классе

Знания контекста между файлами:

  • Информация о наследовании классов: для абстрактных или приватных классов сканируется весь проект для поиска их подклассов
  • Информация о вызовах классов: определяются типы параметров целевого метода, отслеживаются определения и конструкторы пользовательских типов

2. Генерация подсказок, ориентированная на разнообразие (Diversity-guided Prompt Generation)

Этот модуль создает разнообразные подсказки путем изучения различных путей модификации:

Алгоритм 2: УЛУЧШЕНИЕ_ПОДСКАЗКИ
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 на 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. Метод хорошо спроектирован, экспериментальная оценка полна, результаты убедительны. Хотя существуют некоторые ограничения, общий вклад значителен и обеспечивает важный импульс для развития этой области.