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.
- 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 показывает, что система обеспечивает высокое покрытие тестами и эффективное выполнение.
- Основная проблема: Традиционные методы тестирования программного обеспечения характеризуются низкой эффективностью, высокими затратами и чрезмерным ручным вмешательством
- Практическая потребность: Обеспечение качества программного обеспечения требует комплексных процессов верификации и валидации, но ручное тестирование не может удовлетворить требования эффективности современной разработки программного обеспечения
- Тестирование программного обеспечения считается одной из наиболее важных областей в образовании по инженерии программного обеспечения
- Методы ручного тестирования, такие как регрессионное тестирование, особенно отнимают время и дорогостоящие
- Обеспечение того, чтобы программные продукты выполнялись как ожидается и соответствовали стандартам качества, критически важно для инженерии программного обеспечения
- Ручное тестирование: Хотя эффективно, но отнимает много времени и дорогостоящее
- Традиционная автоматизированная проверка: Не может полностью заменить ручные методы, в сценариях тестирования графического интерфейса по-прежнему требуется участие человека
- Традиционное тестирование программного обеспечения на основе агентов (ABST): Отсутствует интеллектуальная способность генерации тестовых случаев
Использование мощных возможностей LLM в сочетании с многоагентными системами для построения интеллектуальной структуры тестирования, которая может динамически генерировать тестовые случаи, значительно снизить ручной ввод и минимизировать время создания и выполнения тестовых случаев.
- Предложена многоагентная структура тестирования программного обеспечения на основе LLM, обеспечивающая сквозную автоматизацию от генерации тестов к отчётности
- Разработана четырёхуровневая архитектура системы, включающая веб-клиент с аудиовходом, агента тестирования программного обеспечения, LLM и среду разработки
- Реализована динамическая генерация тестовых случаев, использующая LLM для автоматической генерации настраиваемых модульных тестов и обоснований тестов
- Интегрирована функция визуализации, автоматически генерирующая графики вызовов в формате DOT для демонстрации взаимодействия приложений
- Подтверждена эффективность системы, достигнута высокое покрытие тестами (в среднем 93,45%-97,71%) на проектах Python и Java
Входные данные: Запросы на тестирование, предоставляемые пользователем посредством голоса или текста (содержащие информацию о названии проекта, подпапке, языке программирования и т.д.)
Выходные данные: Комплексный PDF-отчёт, содержащий результаты тестирования, анализ покрытия, обоснования тестов и графики вызовов
Ограничения: Поддержка проектов Python и Java, сосредоточение внимания на уровне модульного тестирования
Система содержит четыре основных компонента:
- Веб-клиент с аудиовходом: Захватывает пользовательский ввод (голосовые команды или текст), инициирует рабочий процесс тестирования через HTTP GET-запрос
- Агент тестирования программного обеспечения: Основной компонент системы, координирующий взаимодействие между компонентами, служащий абстрактным слоем для генерации тестовых скриптов, выполнения и создания отчётов
- Большие языковые модели (LLM): Выполняют задачи извлечения сущностей, генерации тестов и создания графиков DOT
- Среда разработки: Обеспечивает доступ к коду проекта, выполняет созданные тестовые случаи и отображает результаты
- Инициализация: Клиент отправляет голосовую команду в API генератора тестов
- Извлечение сущностей: LLM извлекает из пользовательского запроса название проекта, подпапку и язык программирования
- Определение местоположения файлов: Модуль FileLocator определяет местоположение указанной папки проекта и извлекает содержимое файлов
- Генерация тестов: LLM (использующий Gemini) генерирует модульные тесты и соответствующие обоснования
- Генерация графиков: LLM генерирует строку формата DOT для визуализации графиков вызовов
- Выполнение и отчётность: Исполнитель тестов запускает тесты, генератор PDF-отчётов создаёт комплексный отчёт, содержащий результаты, покрытие и графики вызовов
- Интеллектуальное извлечение сущностей: Использование LLM для автоматического извлечения ключевых параметров тестирования из инструкций на естественном языке
- Динамическая генерация тестов: Автоматическая генерация тестовых скриптов, содержащих базовые случаи и граничные случаи, на основе анализа кода
- Генерация обоснований: Предоставление подробных обоснований тестов и описания охватываемых сценариев для каждого тестового случая
- Интегрированная визуализация: Автоматическая генерация графиков вызовов для помощи в понимании отношений взаимодействия в кодовой базе
- Сквозная автоматизация: Полностью автоматизированный процесс от пользовательского ввода к окончательному отчёту
Использованы четыре приложения различной сложности:
Проекты на Python:
- Experiment: Базовая функциональность калькулятора (47 строк кода)
- Cinema: Система управления кинотеатром (183 строки кода)
Проекты на Java:
- StudentAverage: Расчёт средней оценки студента (114 строк кода)
- LibrarySystem: Система управления библиотекой (269 строк кода)
- Коэффициент успешного выполнения: Доля запусков, завершивших все этапы (генерация тестов, выполнение, создание PDF-отчёта)
- Покрытие тестами: Процент кода, охватываемый созданными тестовыми случаями
- Время выполнения: Анализ затрат времени на различные этапы операций
- Сравнение языков: Различия в производительности между проектами 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 секунды
| Метрика | Java | Python |
|---|
| Среднее общее время выполнения | 86,7 сек | 80 сек |
| Время генерации тестов | 62,4 сек | 63,3 сек |
| Время выполнения тестов | 5,44 сек | 0,87 сек |
| Среднее покрытие тестами | 97,71% | 93,45% |
| Проект | Язык | Строк кода | Общее время | Генерация тестов | Выполнение тестов | Покрытие |
|---|
| LibrarySystem | Java | 269 | 119,06 сек | 92,54 сек | 5,39 сек | 94,67% |
| StudentManager | Java | 114 | 62,55 сек | 39,79 сек | 5,48 сек | 100,00% |
| Cinema | Python | 183 | 110,13 сек | 92,43 сек | 0,79 сек | 88,30% |
| Experiment | Python | 47 | 49,78 сек | 34,17 сек | 0,96 сек | 98,60% |
ChatGPT vs Gemini (проект LibrarySystem):
- Время генерации ChatGPT: ~180 секунд (примерно в 2 раза больше, чем Gemini)
- Покрытие тестами ChatGPT: 98%
- Примечание: Использование веб-приложения ChatGPT вместо API может повлиять на время генерации
Проект Cinema - функция rent_movie:
- Базовый случай: "Тестирование аренды доступного фильма существующему члену"
- Граничные случаи: "Тестирование аренды несуществующего фильма, аренды фильма несуществующему члену, аренды уже арендованного фильма"
Проект Library - функция getTitle:
- Базовый случай: "Тестирование извлечения названия книги после создания объекта"
- Граничные случаи: Не применимо
- История развития: Привлекает внимание с 1999 года, достигло значительного пика за последнее десятилетие
- Акцент применения: Главным образом сосредоточено на системном тестировании, Java является основным целевым языком
- Представительные работы:
- Структура автоматизированного тестирования веб-систем (многоагентное сотрудничество)
- Тестирование промышленных кофемашин (приоритизация с использованием нечёткой логики)
- Исследование применения в промышленности: 48% практиков уже интегрировали LLM в тестовую деятельность
- Области применения: Анализ требований, разработка плана тестирования, автоматизация тестирования
- Часто используемые инструменты: ChatGPT, GitHub Copilot
- Тренды исследований: Анализ 102 соответствующих статей показывает значительную ценность LLM в генерации тестовых случаев, создании утверждений и других областях
- Высокий коэффициент успеха: Агенты, управляемые LLM, показывают отличные результаты в автоматизации тестирования программного обеспечения, с 100% коэффициентом успеха для проектов Python
- Высокое покрытие: Среднее покрытие тестами превышает 93%, что доказывает эффективность созданных тестовых случаев
- Повышение эффективности: Значительное снижение ручного вмешательства, достижение сквозной автоматизации от генерации тестов к отчётности
- Адаптивность языков: Структура успешно поддерживает два основных языка программирования: Python и Java
- Стабильность проектов Java: Относительно высокий коэффициент сбоев при выполнении Java, требуется улучшение обработки естественного языка и синтаксической точности
- Ограничение области тестирования: В настоящее время сосредоточено только на модульном тестировании, отсутствует поддержка интеграционного и системного тестирования
- Функция визуализации: Хотя графики вызовов полезны, отсутствуют расширенные функции, такие как тепловые карты покрытия
- Зависимость от входных данных: Чувствительность к качеству запроса, неоднозначные запросы могут привести к сбоям
- Расширение типов тестирования: Введение поддержки интеграционного и системного тестирования
- Расширение поддержки языков: Расширение на дополнительные языки программирования
- Улучшение визуализации: Добавление тепловых карт покрытия дефектов
- Интеграция требований: Использование документов спецификации требований в качестве входных данных запроса для повышения точности
- Обработка ошибок: Улучшение обработки неоднозначных запросов и механизмов восстановления после ошибок
- Высокая инновационность: Впервые систематически объединяет LLM с многоагентной архитектурой для сквозной автоматизации тестирования программного обеспечения
- Высокая практическая ценность: Решает практические проблемы в области тестирования программного обеспечения с сильной инженерной применимостью
- Полные эксперименты: Комплексная оценка на нескольких языках и проектах с убедительными результатами
- Чёткая архитектура: Разумный дизайн высокоуровневой и низкоуровневой архитектуры, высокая степень модульности, удобство расширения и обслуживания
- Ограниченная область тестирования: Поддержка только модульного тестирования, неспособность удовлетворить полные требования тестирования программного обеспечения
- Недостаточный анализ ошибок: Ограниченный углубленный анализ причин сбоев проектов Java
- Отсутствие сравнения с эталонами: Отсутствие подробного сравнения с существующими инструментами автоматизированного тестирования
- Неподтверждённая масштабируемость: Система не проверена на крупных сложных проектах
- Академический вклад: Предоставляет новое направление исследований для применения LLM в инженерии программного обеспечения
- Практическая ценность: Может быть непосредственно применено в процессе разработки программного обеспечения для повышения эффективности тестирования
- Продвижение технологии: Демонстрирует огромный потенциал LLM в области автоматизированного тестирования
- Воспроизводимость: Подробное описание архитектуры облегчает воспроизведение и улучшение другими исследователями
- Среднего и малого размера проекты: Особенно подходит для проектов с размером кода в несколько сотен строк
- Автоматизация модульного тестирования: Может значительно снизить ручную работу по написанию модульных тестов
- Быстрая верификация прототипов: Подходит для сценариев, требующих быстрой генерации тестовых случаев
- Образование и обучение: Может использоваться в преподавании и обучении тестированию программного обеспечения
Статья ссылается на 13 важных источников, охватывающих традиционные методы ABST, применение LLM в тестировании программного обеспечения и фундаментальную теорию тестирования программного обеспечения, обеспечивая прочную теоретическую основу для исследования.
Общая оценка: Это исследовательская статья с важной ценностью в области пересечения инженерии программного обеспечения и искусственного интеллекта. Хотя существуют некоторые ограничения, её инновационный подход и практические результаты открывают новое направление для применения LLM в области автоматизации тестирования программного обеспечения, обладая хорошей академической ценностью и практическими перспективами.