Постановка проблемы заключается в сложности выбора эффективного метода подготовки тестовых данных в тестировании программного обеспечения.
Анализ последних исследований показывает, что метаэвристические методы (такие, как симулированный отжиг и т.д.) всё ещё остаются актуальными. Они помогают обходить различные проблемы с помощью традиционных методов, например, генетические алгоритмы (алгоритмы, позаимствованные из природы). В работе McMinn подтверждается, что эти алгоритмы полезны особенно для преодоления плато в поисковом пространстве (это те места, где обычные алгоритмы застревают и не могут справиться дальше), хотя и требуют доработки оценочных функций (функций фитнеса) и интеграции со статистическим анализом [1].
В обзоре Anand и соавторов говорится, что среди автоматизированных тестов для программ существуют: символическое, модельное, комбинаторное, адаптивно случайное и поисковое тестирование. Каждый из этих методов хорош по-своему, но в сложных программах ни один метод не универсален. Поэтому было решено использовать гибриды, которые дают наиболее лучший результат в рамках тестирования [2].
Обзор Ali и его коллег показывает, что генетические алгоритмы доминируют и превосходят случайный поиск по покрытию. Но исследование часто страдают от недостатка строгих сравнений – поэтому нужно уделить больше внимания стандартизации и масштабируемости. Это доказывает, что доказательства SBST пока ограничены, но имеют большой потенциал при правильной методологии [3].
В работе Joffe и Clark описывается Фреймворк GNAST который использует генеративные нейросети. Эти нейросети обучаются в процессе и готовы генерировать разнообразные тесты, но им сложно выполнять конкретные, точечные задачи, а также чувствительны к гиперпараметрам. Это показывает, что генеративные нейросети — это отличный инструмент, но нуждается в доработках [4].
Wang и соавторы в своём обзоре о больших языковых моделях в тестировании отметили успех в юнит тестах и починке кода, хотя то что покрытие (глубина и полнота сценария) остаются низкими и присутствует проблема с оракулами требует более качественных промптов и гибридных подходов. Интерес к LLM растёт, но всё ещё есть что развивать в этом направлении [5].
Shah и коллеги в своей статье показали что ML и data-mining инструменты, которые превосходят старые модели, однако есть этические риски и проблемы в работе новых моделей. То есть ML открывает возможности для scalable анализа безопасности [6].
Несмотря на развитие технологий тестирования, разработчики часто сталкиваются с проблемой качественного тестирования ПО, исходя из этого получаем вопрос: как эффективно тестировать сложное ПО в условиях нехватки времени и ресурсов? Какие методы и инструменты помогут находить критические ошибки до того, как они повлияют на пользователей? [12].
В данный момент уже есть проверенные инструменты, которые работают по принципу «Эволюции» [9]. Чтобы эти инструменты было удобнее сравнивать и улучшать учёные придумали библиотеку Defects4J в которой собрали все известные баги из известных программ [8]. Вместе с созданием тестов также развивалось и способы проверки. Один из лучших это мутационное тестирование, когда в код помещают небольшие изменения и смотрят, заметит ли это тест. Этот метод помогает точнее определить место ошибки в коде [7]. В данный момент набирает популярность объединения старых и надёжных методов с современными технологиями [10,11].
Цель исследования заключается в сравнении эффективности различных методов подготовки тестовых данных в тестировании программного обеспечения.
Основная часть. Тестирование программного обеспечения (ПО) представляет из себя проверку и оценку работоспособности программы или системы с целью выявления ошибок, дефектов и несоответствий. Основная задача тестировщиков – убедится в корректной работе ПО и соответствию требованиям пользователей. В основные этапы тестирования программного обеспечения входят:
планирование тестирования (определение цели и задачи, выбор методик и составление плана тестирования);
анализ требований (проверка соответствий требований программы, составления списка функций и компонентов для тестирования);
написание тест-кейсов (создание инструкции по проведению тестов с ожидаемыми результатами);
проведение тестирования (проводятся тесты с использованием тест-кейсов и других методик);
анализ результатов тестирования (оценка результатов тестов и составление отчёта).
Одним из важных этапов является составление тестовых данных (тест-кейсов), потому что качественные входные данные позволяют моделировать реальные сценарии использования программы, выявлять скрытые ошибки и проверять поведение системы в тех или иных случаях. Без хороших входных данных тестирование может быть не полным, пропускать дефекты и ошибки.
Последнее время программы становятся всё сложнее, и их тестирование также становится всё более затруднительной и трудоёмкой задачей. Поскольку составление тестовых данных является одним из важных этапов в тестировании, стоит разобрать различные методы подготовки тест-кейсов, для дальнейшего проведения сравнительного анализа эффективности рассмотрим традиционные методы такие как случайная и адаптивная генерация.
Случайная генерация тестовых данных (random testing) – самый простой и ранний подход. Он лёгок в реализации и не требует глубокого анализа кода. Однако эти методы часто пропускают ошибки в кластеризованных пространствах дефектов (fault clusters) [2,3].
Адаптивная случайная генерация (adaptive random testing). В этом методе улучшается распределение входов путём избегания близких значений, благодаря чему повышает вероятность выявления дефектов на 20 – 30% в отличии от чисто случайных. В контексте таких генераторов случайных чисел как MT19937 (Marsenne Twister), обеспечивают равномерное распределение по сравнению с простыми функциями вроде rand(). Эксперименты показали, что переход от простых функций rand() к более сложным MT19937 улучшает равномерность, но проблема семантической релевантности остаётся нерешённой – данные не учитывают структуру программы, не учитывают логику и зависимости в коде! [2].
Но имеются и недостатки этих методов:
низкое покрытие сложных сценариев;
пропуски граничных случаев;
неэффективности для программ с нелинейными зависимостями.
поисковые и эволюционные методы [1,3].
Search-based software testing (SBST) – это подход, который используют в метаэвристики, то есть алгоритмы оптимизации для генерации тестовых данных, вдохновлённые природными процессами. Генетические алгоритмы и эволюционные алгоритмы дают возможность имитировать естественный отбор (начальные данные прогрессируют через мутации, ориентированные на покрытие путей и ветвей решений). Particle swarm optimization (PSO) – другой пример метаэвристики, где происходит перемещение в пространстве поиска для оптимизации [1, 3].
Эти методы куда эффективнее чем random testing: mutation score в SBST достигает 80 – 90%, тем временем как у random 55 – 65%. Данные методы сложны в вычислениях и зависят от качества функций пригодности. [1,3,7].
Теперь рассмотрим такие методы как модельные: Model-based testing (MBT) – подход при котором тесты генерируются на основе формальных моделей программы (например – таких как графы). Symbolic execution (символьное выполнение) записывает переменные как символы и решает ограничение с помощью солверов (оптимизаторов). Это позволяет генерировать тесты для конкретных путей. Constraint solving (решение ограничений) интегрируется для обработки условий в коде [2].
Плюсы модельного метода: высокая точность в покрытии путей, превосходит random в fault detection на 40 – 50%. Такие инструменты как DART и KLEE демонстрируют это на практике. Стоит отметить, что методы малоэффективны для не линейных ограничений или внешних зависимостей, где эффективность падает [2].
Методы на основе ИИ и нейронных сетей. Для генеративных моделей, тестовые данные начали развиваться ещё с 2020-х годов. Generative Adversarial Networks (GAN) состоят из генератора и дискриминатора, создающие реалистичные данные через состязания. Рекуррентные нейронные сети (RNN/LSTM) обрабатывают последовательности и генерируют данные, имитирующие реальные распределения. Это помогает в тестировании, повышая разнообразие входов [4,10].
Large Language Models (LLM) – большие языковые модели, такие как ChatGPT. Создают тесты на основе отчётов об ошибках и требований. AI-based методы превосходят традиционные в mutation score до 95%, а diversity до 80%. [5]
Теперь, когда мы разобрали методы подбора тест-кейсов, перейдём к сравнительному анализу эффективности. Для начала разберём эффективность оценивания по метрикам:
Code coverage (branch/path coverage – доляисполненныхветвей, путей); [1, 2, 3]
Mutation score (процент устранённых дефектов. Важно не только исполнение, но и проверки assertions); [7, 11]
Fault detection rate (Дефекты на реальных бенчмарках, вроде Defects4J). [8]
В таблице ниже собраны данные из разных источников, тем самым обобщая метрики на бенчмарке Defects4J. Значения являются приблизительными, усреднёнными диапазонами. Random методы дают низкие показатели, search-based и model-based – выше, AI-based – чаще всего показывают наивысшие показатели в новых работах.
Таблица 1. Пример сравнения на Defect4J [8]
|
Метод |
Branch coverage (%) |
Mutation Score (%) |
Fault Detection (%) |
Время генерации (отн.) |
Источники |
|
Random (mt19937) |
65 – 75 |
55 – 65 |
40 – 50 |
1 |
[2] |
|
Search-based (EvoSuite) |
85 – 95 |
80 – 90 |
70 – 80 |
10 – 20 |
[1], [3], [9] |
|
Model-based (symbolic) |
80 – 90 |
75 – 85 |
65 – 75 |
15 – 30 |
[2] |
|
AI-based (GAN/LLM) |
90 – 98 |
90 – 97 |
85 – 95 |
5 – 15 |
[4], [5], [10] |
Благодаря данной таблице мы можем убедится, что AI-based методы лидируют по всем метрикам благодаря способности генерировать реалистичные данные. В реальных экспериментах Search-based (EvoSuite) достигает 95% в Branch coverage и 90% в Mutation Score на Defects4J, в то время как AI-based (GAN, LLM) достигают 98% в Branch coverage и 97% в Mutation Score [8, 9]. Это показывает эффективность перехода от простых методов подбора тест-кейсов к продвинутым.
Так же стоит отметить, что гибридные подходы (SBST + GAN) повышают время генерации на 20 – 30%, но требует human-in-the-loop, участие человека в цикле, для валидации [5].
Выводы. В работе проанализированы подходы к созданию тестовых примеров при проверке программного обеспечения, начиная от классических и заканчивая методами, основанными на искусственном интеллекте. Повышение сложности современных программных продуктов и необходимость получения качественных, защищенных данных обуславливают значимость данного исследования. Сравнительный анализ различных техник показал превосходство решений с применением ИИ над остальными (показатель мутационного покрытия может достигать 97% против 65% у случайных тестов), однако это сопряжено с трудностями в понимании логики работы алгоритмов. В будущем предполагается комбинирование различных методик и внедрение этических аспектов для дальнейшего совершенствования процесса тестирования.
Литература:
McMinn P. Search-based software test data generation: a survey // Software Testing, Verification and Reliability. – 2004. – Vol. 14, № 2. – S. 105–156.
Anand S. et al. An orchestrated survey of methodologies for automated software test case generation // Journal of Systems and Software. – 2013. – Vol. 86, № 8. – S. 1978–2001.
Ali S. et al. A systematic review of the application and empirical investigation of search-based test case generation // IEEE Transactions on Software Engineering. – 2010. – Vol. 36, № 6. – S. 742–762.
Joffe L., Clark D. J. A Generative Neural Network Framework for Automated Software Testing // arXiv: 2006.16335. – 2020. – 20 s.
Wang J. et al. Software Testing with Large Language Models: Survey, Landscape, and Vision // arXiv: 2307.07221. – 2023 (v3 – 2024). – 35 s.
Shah I. A. et al. Using ML and data-mining techniques in automatic vulnerability software discovery // International Journal of Advanced Trends in Computer Science and Engineering. – 2023. – Vol. 12, № 3. – S. 1–30.
Papadakis M. et al. Mutation testing advances: an analysis and survey // Advances in Computers. – 2019. – Vol. 112. – P. 275–378.
Just R., Jalali D., Ernst M. D. Defects4J: A database of existing faults to enable controlled testing studies for Java programs // Proceedings of the 2014 International Symposium on Software Testing and Analysis (ISSTA). – 2014. – S. 437–440.
Fraser G., Arcuri A. EvoSuite: Automatic test suite generation for object-oriented software // Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering. – 2011. – S. 416–419.
Behjati R. et al. Synthetic test data generation using recurrent neural networks: a position paper // 2019 IEEE/ACM 7th International Workshop on Realizing Artificial Intelligence Synergies in Software Engineering (RAISE). – 2019. – S. 22–27.
Jalbert K., Bradbury J. S. Predicting Mutation Score Using Source Code and Test Suite Metrics // Proceedings of the 1st International Workshop on Realizing AI Synergies in Software Engineering (RAISE). – 2012. – S. 42–46.
Максименко М. А, Олейник Н. П.Современные проблемы тестирования программных обеспечений // Максименко М. А, Олейник Н. П. // ІII Межрегиональная научно-практическая конференция преподавателей и студентов «Современные проблемы геометрического моделирования и информационные технологии». 2025 г., Мелитополь
ANALIZ EFFEKTIVNOSTI RAZLICHNYX METODOV PODGOTOVKI TESTOVYX DANNYX V TESTIROVANII PROGRAMMNOGO OBESPECHENIYA
Pinchuk D.P., bakalavr,
dimapincuk26@gmail.com
Pinchuk P.P., bakalavr,
pinchuk1908pasha@gmail.com
nauchnyj rukovoditel: Olejnik N.P., prepodavatel,
nata.oleynik.2014@mail.ru, ORCID: 0009-0005-1172-7680.
Federalnoe gosudarstvennoe byudzhetnoe obrazovatelnoe uchrezhdenie vysshego obrazovaniya «Melitopolskij Gosudarstvennyj Universitet», (g.Melitopol, Rossiya).
Annotaciya
V sovremennom testirovanii programmnogo obespecheniya voznikayut slozhnosti vybora effektivnogo metoda podgotovki testovyx dannyx. Dlya resheniya etoj problemy trebuetsya analiz i sravneniya effektivnosti razlichnyx metodov podgotovki testovyx dannyx v testirovanii programmnogo obespecheniya, chtoby ponimat, kakie metodiki luchshe ispolzovat dlya testirovaniya programmnogo obespecheniya.
Dlya etogo my rassmotrim razlichnye metody testirovaniya PO. Takie, kak:
− Tradicionnye metody (sluchajnaya i adaptivnaya generaciya),
− Poiskovye i evolyucionnye metody (SBST, PSO),
− Modelnye metody (MBT),
− Metody na osnove II i nejronnyx setej (GAN, LLM).
Zatem my perejdyom k sravnitelnomu analizu effektivnosti: razberyom effektivnost ocenivaniya po metrikam, sravnim razlichnye pokazateli raznyx metodik testirovaniya na primere benchmarka Defect4J i opredelim, kakie metodiki naibolee effektivnye! Dlya etogo my soberyom dannye iz raznyx istochnikov, tem samym obobshhaya metriki na benchmarke Defects4J.
Na osnove issledovanij i sravnitelnogo analiza po klyuchevym metrikam na benchmarke Defect4J opredelim, chto AI-based yavlyayutsya naibolee effektivnym metodom podbora test-kejsov i sdelaem na osnove etogo vyvody.
Vyyasnim chto v perspektive: ispolzovat gibrid raznyx metodov, a takzhe eticheskie metody.
Klyuchevye slova: testirovanie PO, effektivnoe testirovanie, mutacionnoe testirovanie, testovye dannye, gibridnye podxody, poiskovoe testirovanie, generativnye modeli, Defects4J.
References
McMinn P. Search-based software test data generation: a survey // Software Testing, Verification and Reliability. – 2004. – Vol. 14, № 2. – S. 105–156.
Anand S. et al. An orchestrated survey of methodologies for automated software test case generation // Journal of Systems and Software. – 2013. – Vol. 86, № 8. – S. 1978–2001.
Ali S. et al. A systematic review of the application and empirical investigation of search-based test case generation // IEEE Transactions on Software Engineering. – 2010. – Vol. 36, № 6. – S. 742–762.
Joffe L., Clark D. J. A Generative Neural Network Framework for Automated Software Testing // arXiv: 2006.16335. – 2020. – 20 s.
Wang J. et al. Software Testing with Large Language Models: Survey, Landscape, and Vision // arXiv: 2307.07221. – 2023 (v3 – 2024). – 35 s.
Shah I. A. et al. Using ML and data-mining techniques in automatic vulnerability software discovery // International Journal of Advanced Trends in Computer Science and Engineering. – 2023. – Vol. 12, № 3. – S. 1–30.
Papadakis M. et al. Mutation testing advances: an analysis and survey // Advances in Computers. – 2019. – Vol. 112. – P. 275–378.
Just R., Jalali D., Ernst M. D. Defects4J: A database of existing faults to enable controlled testing studies for Java programs // Proceedings of the 2014 International Symposium on Software Testing and Analysis (ISSTA). – 2014. – S. 437–440.
Fraser G., Arcuri A. EvoSuite: Automatic test suite generation for object-oriented software // Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of software engineering. – 2011. – S. 416–419.
Behjati R. et al. Synthetic test data generation using recurrent neural networks: a position paper // 2019 IEEE/ACM 7th International Workshop on Realizing Artificial Intelligence Synergies in Software Engineering (RAISE). – 2019. – S. 22–27.
Jalbert K., Bradbury J. S. Predicting Mutation Score Using Source Code and Test Suite Metrics // Proceedings of the 1st International Workshop on Realizing AI Synergies in Software Engineering (RAISE). – 2012. – S. 42–46.
Maksimenko M. A, Olejnik N. P. Sovremennye problemy testirovaniya programmnyh obespechenij // Maksimenko M. A, Olejnik N. P. // ІII Mezhregional'naya nauchno-prakticheskaya konferenciya prepodavatelej i studentov «Sovremennye problemy geometricheskogo modelirovaniya i informacionnye tekhnologii». 2025 g., Melitopol'