2025-11-21T20:16:16.286197

The Potential of LLMs in Automating Software Testing: From Generation to Reporting

Sherifi, Slhoub, Nembhard
Having a high quality software is essential in software engineering, which requires robust validation and verification processes during testing activities. Manual testing, while effective, can be time consuming and costly, leading to an increased demand for automated methods. Recent advancements in Large Language Models (LLMs) have significantly influenced software engineering, particularly in areas like requirements analysis, test automation, and debugging. This paper explores an agent-oriented approach to automated software testing, using LLMs to reduce human intervention and enhance testing efficiency. The proposed framework integrates LLMs to generate unit tests, visualize call graphs, and automate test execution and reporting. Evaluations across multiple applications in Python and Java demonstrate the system's high test coverage and efficient operation. This research underscores the potential of LLM-powered agents to streamline software testing workflows while addressing challenges in scalability and accuracy.
academic

Потенциал больших языковых моделей в автоматизации тестирования программного обеспечения: от генерации к отчётности

Основная информация

  • ID статьи: 2501.00217
  • Название: The Potential of LLMs in Automating Software Testing: From Generation to Reporting
  • Авторы: Betim Sherifi, Khaled Slhoub, Fitzroy Nembhard (Флоридский технологический институт)
  • Классификация: cs.SE (инженерия программного обеспечения), cs.AI (искусственный интеллект)
  • Дата публикации: 31 декабря 2024 г.
  • Ссылка на статью: https://arxiv.org/abs/2501.00217

Аннотация

Разработка высококачественного программного обеспечения в инженерии программного обеспечения требует надёжных процессов верификации и валидации. Хотя ручное тестирование эффективно, оно отнимает много времени и дорогостоящее, поэтому растёт спрос на методы автоматизации. Последние достижения в области больших языковых моделей (LLM) существенно повлияли на инженерию программного обеспечения, особенно в областях анализа требований, автоматизации тестирования и отладки. В данной статье исследуется подход к автоматизированному тестированию программного обеспечения, ориентированный на агентов, с использованием LLM для снижения ручного вмешательства и повышения эффективности тестирования. Предложенная структура интегрирует LLM для генерации модульных тестов, визуализации графиков вызовов и автоматизации выполнения тестов и создания отчётов. Оценка на нескольких приложениях на Python и Java показывает, что система обеспечивает высокое покрытие тестами и эффективное выполнение.

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

Определение проблемы

  1. Основная проблема: Традиционные методы тестирования программного обеспечения характеризуются низкой эффективностью, высокими затратами и чрезмерным ручным вмешательством
  2. Практическая потребность: Обеспечение качества программного обеспечения требует комплексных процессов верификации и валидации, но ручное тестирование не может удовлетворить требования эффективности современной разработки программного обеспечения

Анализ значимости

  • Тестирование программного обеспечения считается одной из наиболее важных областей в образовании по инженерии программного обеспечения
  • Методы ручного тестирования, такие как регрессионное тестирование, особенно отнимают время и дорогостоящие
  • Обеспечение того, чтобы программные продукты выполнялись как ожидается и соответствовали стандартам качества, критически важно для инженерии программного обеспечения

Ограничения существующих подходов

  • Ручное тестирование: Хотя эффективно, но отнимает много времени и дорогостоящее
  • Традиционная автоматизированная проверка: Не может полностью заменить ручные методы, в сценариях тестирования графического интерфейса по-прежнему требуется участие человека
  • Традиционное тестирование программного обеспечения на основе агентов (ABST): Отсутствует интеллектуальная способность генерации тестовых случаев

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

Использование мощных возможностей LLM в сочетании с многоагентными системами для построения интеллектуальной структуры тестирования, которая может динамически генерировать тестовые случаи, значительно снизить ручной ввод и минимизировать время создания и выполнения тестовых случаев.

Основной вклад

  1. Предложена многоагентная структура тестирования программного обеспечения на основе LLM, обеспечивающая сквозную автоматизацию от генерации тестов к отчётности
  2. Разработана четырёхуровневая архитектура системы, включающая веб-клиент с аудиовходом, агента тестирования программного обеспечения, LLM и среду разработки
  3. Реализована динамическая генерация тестовых случаев, использующая LLM для автоматической генерации настраиваемых модульных тестов и обоснований тестов
  4. Интегрирована функция визуализации, автоматически генерирующая графики вызовов в формате DOT для демонстрации взаимодействия приложений
  5. Подтверждена эффективность системы, достигнута высокое покрытие тестами (в среднем 93,45%-97,71%) на проектах Python и Java

Подробное описание методологии

Определение задачи

Входные данные: Запросы на тестирование, предоставляемые пользователем посредством голоса или текста (содержащие информацию о названии проекта, подпапке, языке программирования и т.д.) Выходные данные: Комплексный PDF-отчёт, содержащий результаты тестирования, анализ покрытия, обоснования тестов и графики вызовов Ограничения: Поддержка проектов Python и Java, сосредоточение внимания на уровне модульного тестирования

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

Высокоуровневая архитектура

Система содержит четыре основных компонента:

  1. Веб-клиент с аудиовходом: Захватывает пользовательский ввод (голосовые команды или текст), инициирует рабочий процесс тестирования через HTTP GET-запрос
  2. Агент тестирования программного обеспечения: Основной компонент системы, координирующий взаимодействие между компонентами, служащий абстрактным слоем для генерации тестовых скриптов, выполнения и создания отчётов
  3. Большие языковые модели (LLM): Выполняют задачи извлечения сущностей, генерации тестов и создания графиков DOT
  4. Среда разработки: Обеспечивает доступ к коду проекта, выполняет созданные тестовые случаи и отображает результаты

Низкоуровневый рабочий процесс архитектуры

  1. Инициализация: Клиент отправляет голосовую команду в API генератора тестов
  2. Извлечение сущностей: LLM извлекает из пользовательского запроса название проекта, подпапку и язык программирования
  3. Определение местоположения файлов: Модуль FileLocator определяет местоположение указанной папки проекта и извлекает содержимое файлов
  4. Генерация тестов: LLM (использующий Gemini) генерирует модульные тесты и соответствующие обоснования
  5. Генерация графиков: LLM генерирует строку формата DOT для визуализации графиков вызовов
  6. Выполнение и отчётность: Исполнитель тестов запускает тесты, генератор PDF-отчётов создаёт комплексный отчёт, содержащий результаты, покрытие и графики вызовов

Технические инновации

  1. Интеллектуальное извлечение сущностей: Использование LLM для автоматического извлечения ключевых параметров тестирования из инструкций на естественном языке
  2. Динамическая генерация тестов: Автоматическая генерация тестовых скриптов, содержащих базовые случаи и граничные случаи, на основе анализа кода
  3. Генерация обоснований: Предоставление подробных обоснований тестов и описания охватываемых сценариев для каждого тестового случая
  4. Интегрированная визуализация: Автоматическая генерация графиков вызовов для помощи в понимании отношений взаимодействия в кодовой базе
  5. Сквозная автоматизация: Полностью автоматизированный процесс от пользовательского ввода к окончательному отчёту

Экспериментальная установка

Набор данных

Использованы четыре приложения различной сложности:

Проекты на Python:

  • Experiment: Базовая функциональность калькулятора (47 строк кода)
  • Cinema: Система управления кинотеатром (183 строки кода)

Проекты на Java:

  • StudentAverage: Расчёт средней оценки студента (114 строк кода)
  • LibrarySystem: Система управления библиотекой (269 строк кода)

Метрики оценки

  1. Коэффициент успешного выполнения: Доля запусков, завершивших все этапы (генерация тестов, выполнение, создание PDF-отчёта)
  2. Покрытие тестами: Процент кода, охватываемый созданными тестовыми случаями
  3. Время выполнения: Анализ затрат времени на различные этапы операций
  4. Сравнение языков: Различия в производительности между проектами Python и Java

Детали реализации

  • Модель LLM: Основное использование Google Gemini, сравнительные эксперименты с ChatGPT
  • Количество тестов: 20 выполнений для проектов Python, 24 выполнения для проектов Java
  • Формат входных данных: Тестирование различных форматов запросов на естественном языке

Результаты экспериментов

Основные результаты

Производительность коэффициента успеха

  • Проекты на Python: Все 20 выполнений успешны (100% коэффициент успеха)
  • Проекты на Java: 3 сбоя из 24 выполнений (87,5% коэффициент успеха)
  • Причины сбоев: Главным образом вызваны неоднозначными запросами и ошибками компиляции в созданных тестовых скриптах

Анализ времени выполнения

  • Среднее общее время выполнения: 83,5 секунды
  • Время генерации тестов: 62,8 секунды (занимает наибольшую долю)
  • Определение местоположения папки: 9,7 секунды
  • Генерация графика DOT: 5,4 секунды
  • Выполнение тестов: 3,2 секунды

Результаты сравнения языков

МетрикаJavaPython
Среднее общее время выполнения86,7 сек80 сек
Время генерации тестов62,4 сек63,3 сек
Время выполнения тестов5,44 сек0,87 сек
Среднее покрытие тестами97,71%93,45%

Подробный анализ проектов

ПроектЯзыкСтрок кодаОбщее времяГенерация тестовВыполнение тестовПокрытие
LibrarySystemJava269119,06 сек92,54 сек5,39 сек94,67%
StudentManagerJava11462,55 сек39,79 сек5,48 сек100,00%
CinemaPython183110,13 сек92,43 сек0,79 сек88,30%
ExperimentPython4749,78 сек34,17 сек0,96 сек98,60%

Сравнительный эксперимент LLM

ChatGPT vs Gemini (проект LibrarySystem):

  • Время генерации ChatGPT: ~180 секунд (примерно в 2 раза больше, чем Gemini)
  • Покрытие тестами ChatGPT: 98%
  • Примечание: Использование веб-приложения ChatGPT вместо API может повлиять на время генерации

Анализ примеров

Примеры обоснований тестов

Проект Cinema - функция rent_movie:

  • Базовый случай: "Тестирование аренды доступного фильма существующему члену"
  • Граничные случаи: "Тестирование аренды несуществующего фильма, аренды фильма несуществующему члену, аренды уже арендованного фильма"

Проект Library - функция getTitle:

  • Базовый случай: "Тестирование извлечения названия книги после создания объекта"
  • Граничные случаи: Не применимо

Связанные работы

Традиционное тестирование программного обеспечения на основе агентов (ABST)

  • История развития: Привлекает внимание с 1999 года, достигло значительного пика за последнее десятилетие
  • Акцент применения: Главным образом сосредоточено на системном тестировании, Java является основным целевым языком
  • Представительные работы:
    • Структура автоматизированного тестирования веб-систем (многоагентное сотрудничество)
    • Тестирование промышленных кофемашин (приоритизация с использованием нечёткой логики)

Тестирование программного обеспечения, улучшенное LLM

  • Исследование применения в промышленности: 48% практиков уже интегрировали LLM в тестовую деятельность
  • Области применения: Анализ требований, разработка плана тестирования, автоматизация тестирования
  • Часто используемые инструменты: ChatGPT, GitHub Copilot
  • Тренды исследований: Анализ 102 соответствующих статей показывает значительную ценность LLM в генерации тестовых случаев, создании утверждений и других областях

Заключение и обсуждение

Основные выводы

  1. Высокий коэффициент успеха: Агенты, управляемые LLM, показывают отличные результаты в автоматизации тестирования программного обеспечения, с 100% коэффициентом успеха для проектов Python
  2. Высокое покрытие: Среднее покрытие тестами превышает 93%, что доказывает эффективность созданных тестовых случаев
  3. Повышение эффективности: Значительное снижение ручного вмешательства, достижение сквозной автоматизации от генерации тестов к отчётности
  4. Адаптивность языков: Структура успешно поддерживает два основных языка программирования: Python и Java

Ограничения

  1. Стабильность проектов Java: Относительно высокий коэффициент сбоев при выполнении Java, требуется улучшение обработки естественного языка и синтаксической точности
  2. Ограничение области тестирования: В настоящее время сосредоточено только на модульном тестировании, отсутствует поддержка интеграционного и системного тестирования
  3. Функция визуализации: Хотя графики вызовов полезны, отсутствуют расширенные функции, такие как тепловые карты покрытия
  4. Зависимость от входных данных: Чувствительность к качеству запроса, неоднозначные запросы могут привести к сбоям

Направления будущих исследований

  1. Расширение типов тестирования: Введение поддержки интеграционного и системного тестирования
  2. Расширение поддержки языков: Расширение на дополнительные языки программирования
  3. Улучшение визуализации: Добавление тепловых карт покрытия дефектов
  4. Интеграция требований: Использование документов спецификации требований в качестве входных данных запроса для повышения точности
  5. Обработка ошибок: Улучшение обработки неоднозначных запросов и механизмов восстановления после ошибок

Глубокая оценка

Преимущества

  1. Высокая инновационность: Впервые систематически объединяет LLM с многоагентной архитектурой для сквозной автоматизации тестирования программного обеспечения
  2. Высокая практическая ценность: Решает практические проблемы в области тестирования программного обеспечения с сильной инженерной применимостью
  3. Полные эксперименты: Комплексная оценка на нескольких языках и проектах с убедительными результатами
  4. Чёткая архитектура: Разумный дизайн высокоуровневой и низкоуровневой архитектуры, высокая степень модульности, удобство расширения и обслуживания

Недостатки

  1. Ограниченная область тестирования: Поддержка только модульного тестирования, неспособность удовлетворить полные требования тестирования программного обеспечения
  2. Недостаточный анализ ошибок: Ограниченный углубленный анализ причин сбоев проектов Java
  3. Отсутствие сравнения с эталонами: Отсутствие подробного сравнения с существующими инструментами автоматизированного тестирования
  4. Неподтверждённая масштабируемость: Система не проверена на крупных сложных проектах

Влияние

  1. Академический вклад: Предоставляет новое направление исследований для применения LLM в инженерии программного обеспечения
  2. Практическая ценность: Может быть непосредственно применено в процессе разработки программного обеспечения для повышения эффективности тестирования
  3. Продвижение технологии: Демонстрирует огромный потенциал LLM в области автоматизированного тестирования
  4. Воспроизводимость: Подробное описание архитектуры облегчает воспроизведение и улучшение другими исследователями

Применимые сценарии

  1. Среднего и малого размера проекты: Особенно подходит для проектов с размером кода в несколько сотен строк
  2. Автоматизация модульного тестирования: Может значительно снизить ручную работу по написанию модульных тестов
  3. Быстрая верификация прототипов: Подходит для сценариев, требующих быстрой генерации тестовых случаев
  4. Образование и обучение: Может использоваться в преподавании и обучении тестированию программного обеспечения

Библиография

Статья ссылается на 13 важных источников, охватывающих традиционные методы ABST, применение LLM в тестировании программного обеспечения и фундаментальную теорию тестирования программного обеспечения, обеспечивая прочную теоретическую основу для исследования.


Общая оценка: Это исследовательская статья с важной ценностью в области пересечения инженерии программного обеспечения и искусственного интеллекта. Хотя существуют некоторые ограничения, её инновационный подход и практические результаты открывают новое направление для применения LLM в области автоматизации тестирования программного обеспечения, обладая хорошей академической ценностью и практическими перспективами.