Тип работы:
Предмет:
Язык работы:


Разработка виртуальной машины динамического символьного исполнения для языков программирования Java и Kotlin

Работа №126909

Тип работы

Бакалаврская работа

Предмет

программирование

Объем работы49
Год сдачи2023
Стоимость4850 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
39
Не подходит работа?

Узнай цену на написание


Введение 4
Постановка задачи 6
1. Обзор 7
1.1. Символьное исполнение 7
1.2. SMT-решатели 8
1.3. Динамическое символьное исполнение 9
1.4. Существующие решения 10
1.5. UnitTestBot 12
2. Описание реализации 15
2.1. Архитектура подсистемы 16
2.2. Запуск конкретного движка 18
2.3. Инструментация байт-кода 19
2.4. Межпроцессное общение 22
2.5. Интеграция в UnitTestBot 24
2.6. Процесс исполнения 25
2.7. Поддержка мокирования 28
2.7.1 Мокирование объектов 29
2.7.2 Мокирование статических функций 30
2.7.3 Мокирование создания объектов 31
2.8. Обработка недетерминированного поведения 33
2.9. Поддержка Kotlin 35
3. Тестирование и результаты 36
3.1. Тестирование корректности подсистемы 36
3.2. Оценка эффективности подсистемы 37
3.2.1 Измерения 37
3.2.2 Результаты 38
3.3. Расширения UnitTestBot 39
3.3.1 Минимизация 39
3.3.2 Фаззинг 40
3.4. Результаты обнаружения недетерминированного поведения 41
3.5. SBFT2023 43
3.6. Будущие улучшения 44
Заключение 46
Список литературы 47

Символьное исполнение - это техника автоматизированного тестирова­ния и анализа программного обеспечения, которая набирает популярность в последние годы. Она работает путем исследования различных путей выполне­ния программы для поиска входных данных, которые вызывают определенное поведение, ведущее к ошибкам, сбоям или нарушениям спецификаций про­граммы.
Символьное исполнение необходимо, потому что традиционные методы тестирования, такие как ручное тестирование или простое случайное тестиро­вание, часто неэффективны при обнаружении редких и сложных дефектов и уязвимостей в программных системах. В отличие от этого, оно может обеспе­чить более всестороннее покрытие пространства выполнения программы, что позволяет выявлять дефекты и уязвимости, которые традиционные методы тестирования упускают.
Однако данный метод может столкнуться с проблемами при анализе, поскольку требует значительных вычислительных ресурсов, особенно для сложных и больших программных систем. Более того, символьное испол­нение анализирует только некоторую модель программы, что означает, что анализ может допускать ошибки, приводящие к ложным срабатываниям. На­пример, когда программа имеет большое количество путей выполнения или когда символьная виртуальная машина выполнения сталкивается с циклами, объем вычислений, необходимых для исследования всех возможных путей, может стать невозможным для дальнейшего анализа. Кроме того, иногда ана­лиз ошибочно идентифицирует ошибки, когда они на самом деле их нет, что приводит к ложным тревогам. Это может привести к долгому времени ана­лиза, его ненадежности или даже привести к сбою анализа, что затрудняет применение данной техники на практике.
Для решения этих проблем в данном дипломе представлена разработ­ка виртуальной машины динамического символьного исполнения для языков программирования Java и Kotlin, расширяющую уже реализованную подси­стему символьного исполнения подсистемой конкретного исполнения с це­лью уменьшения количества ложных срабатываний и увеличения покрытия кода. Виртуальная машина (движок) реализует подход, который объединя­ет оба подхода, чтобы повысить эффективность и надежность анализа кода. Такая комбинация позволяет выполнять программу символьно и конкретно, уменьшая неточности чистого символьного исполнения и повышая качество анализа и покрытие анализируемой программы. Все это делает анализ бо­лее практичным и применимым для тестирования и анализа программного обеспечения.
Этот диплом описывает дизайн и реализацию виртуальной машины, включая архитектуру конкретного движка, структуры данных и алгорит­мы. Также представлены экспериментальные результаты, которые позволя­ют дальнейший анализ эффективности виртуальной машины в обнаружении дефектов и уязвимостей в реальных программах.
Более того, подсистема конкретного исполнения, представленная в дан­ном дипломе, интегрирована в инструмент UnitTestBot1 - автоматизирован­ную систему генерации модульных тестов для языков программирования Java и Kotlin. UnitTestBot реализует чистый символьный подход с расширенными возможностями, которые улучшают анализ кода и качество генерируемых те­стов. Эта интеграция позволяет применять UnitTestBot более уверенно, обес­печивая эффективное тестирование больших и сложных программ и про­граммных систем.
Инструмент UnitTestBot также предоставляет такую функциональность, как символьное исполнение, фаззинг, генерацию мок-объектов и минимиза­цию тестов, что дополнительно улучшает эффективность тестирования на основе динамического символьного исполнения. Подсистема конкретного ис­полнения разработана таким образом, чтобы легко интегрироваться в суще­ствующие рабочие процессы разработки данного продукта.
В целом, реализация виртуальной машины динамического символьного исполнения в UnitTestBot обеспечивает эффективное решение для автома­тической генерации и анализа тестов. Этот диплом вносит вклад в развитие программной инженерии, предоставляя практический и эффективный подход для обеспечения качества и надежности разрабатываемых программ.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Данный диплом достиг своей цели. Разработана и реализована вирту­альная машина для динамического символьного исполнения на языках про­граммирования Java и Kotlin на основе уже имеющегося символьного движка и прототипа подсистемы конкретного исполнения в UnitTestBot. Разработан­ная подсистема также интегрирована в инструмент UnitTestBot, что сделало генерацию тестов более надежной без снижения покрытия кода. В процессе реализации были получены следующие результаты:
1. Проведен обзор существующих инструментов, основанных на динами­ческом символьном исполнении: JDart, ACTEve и Triton;
2. Изучена структура и кодовая база инструмента UnitTestBot;
3. Разработана и реализована архитектура подсистемы конкретного ис­полнения, взяв за основу, доработав и улучшив уже готовый прототип данной подсистемы;
4. Реализованная подсистема интегрирована в UnitTestBot, тем самым по­лучена виртуальная машина для динамического символьного исполне­ния, поддерживающая языки программирования Java и Kotlin;
5. Установлено, что реализованный движок улучшает генерацию тестов путем существенного сокращения числа некорректных и ненадежных тестов без потери покрытия кода;
6. Получены новые возможности для разработки и реализации новых под­систем и алгоритмов для улучшения качества UnitTestBot, в частности, уже реализованные модули фаззинга и минимизации.
7. UnitTestBot с реализованной подсистемой конкретного исполнения при­нял участие в соревновании по генерации тестов для Java, SBFT 2023, где занял второе место, показав хорошие результаты работы на реаль­ных проектах.


[1] Shaukat Ali и др. “A systematic review of the application and empirical investigation of search-based test case generation”. В: IEEE Transactions on Software Engineering 36.6 (2009), с. 742—762.
[2] Saswat Anand и др. “Automated concolic testing of smartphone apps”. В: Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering. 2012, с. 1—11.
[3] Ricardo Anido и др. “Test suite minimization for testing in context”. В: Software Testing, Verification and Reliability 13.3 (2003), с. 141—155.
[4] Roberto Baldoni и др. A Survey of Symbolic Execution Techniques. 2018. arXiv: 1610.00502 [cs.SE].
[5] Clark Barrett и др. “CVC4”. В: Computer Aided Verification. Под ред. Ganesh Gopalakrishnan и Shaz Qadeer. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011, с. 171—177. ISBN: 978-3-642-22110-1.
[6] Pietro Braione и др. “Combining symbolic execution and search-based testing for programs with complex heap inputs”. В: Proceedings of the 26th ACM SIGSOFT International Symposium on Software Testing and Analysis. 2017, с. 90—101.
[7] Cristian Cadar и Koushik Sen. “Symbolic Execution for Software Testing: Three Decades Later”. В: Commun. ACM 56.2 (февр. 2013), с. 82—90. ISSN: 0001-0782. DOI: 10.1145/2408776.2408795. URL: https://doi.org/ 10.1145/2408776.2408795.
[8] Ting Chen и др. “State of the art: Dynamic symbolic execution for automated test generation”. В: Future Generation Computer Systems 29.7 (2013), с. 1758—1773.
[9] Kivanc Doganay и др. Search-based testing for embedded telecommunication software with complex input structures: An industrial case study. 2014.
[10] Niklas Een и Niklas Sorensson. “An Extensible SAT-solver”. В: International Conference on Theory and Applications of Satisfiability Testing. 2003.
[11] Juan Pablo Galeotti, Gordon Fraser и Andrea Arcuri. “Improving search­based test suite generation with dynamic symbolic execution”. В: 2013 ieee 24th international symposium on software reliability engineering (issre). IEEE. 2013, с. 360—369.
[12] Patrice Godefroid, Nils Klarlund и Koushik Sen. “DART: Directed automated random testing”. В: Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation. 2005, с. 213—223.
[13] Patrice Godefroid, Michael Y Levin, David A Molnar и др. “Automated whitebox fuzz testing.” В: NDSS. Т. 8. 2008, с. 151—166.
[14] Eugene Goldberg и Yakov Novikov. “BerkMin: A fast and robust Sat-solver”. В: Discrete Applied Mathematics 155.12 (2007). SAT 2001, the Fourth International Symposium on the Theory and Applications of Satisfiability Testing, с. 1549—1561. ISSN: 0166-218X. DOI: https://doi.org/10.1016/ j. dam. 2006.10.007. URL: https: / / www. sciencedirect. com / science / article/pii/S0166218X06004616.
[15] Kasper Luckow и др. “JD art: a dynamic symbolic analysis framework”. В: Tools and Algorithms for the Construction and Analysis of Systems: 22nd International Conference, TACAS 2016, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2016, Eindhoven, The Netherlands, April 2-8, 2016, Proceedings 22. Springer. 2016, с. 442— 459.
...


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ