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


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

Работа №144061

Тип работы

Магистерская диссертация

Предмет

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

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

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


Введение 4
1. Постановка задачи 6
2. Термины 7
2.1. Графы 7
2.2. Символьное исполнение и анализ программ 9
2.3. Машинное обучение 9
3. Обзор инфраструктур для машинного обучения 11
4. Обзор инфраструктур, использующих символьные машины 13
5. Архитектура 15
6. Реализация 18
6.1. Взаимодействие с символьной машиной 18
6.2. Ускорение обучения 19
6.3. Интеграция модели с символьной машиной 20
6.4. Анализ результатов 21
7. Сравнение с аналогами 23
7.1. Параметры сравнения 23
7.2. Результаты 23
7.3. Обсуждение результатов 24
Заключение 25
Список литературы 26

Тестирование — распространенный способ проверки корректности программного кода. Это дополнительная программная (или программно-аппаратная) инфраструктура, позволяющая проверить приложение на ожидаемое поведение. Однако, как утверждал Дейкстра, тестирование программы может эффективно продемонстрировать наличие ошибок, но неадекватно для демонстрации их отсутствия. Поэтому для проверки кода в критически важных программных компонентах необходим другой, более надежный способ.
Одним из наиболее надежных методов проверки корректности программ является символьное исполнение. Это техника анализа ПО, позволяющая выполнять программу не с конкретными входами, а с их символьным представлением. С помощью эффективных решателей логических уравнений этот подход позволяет перебрать все возможные состояния исполнения программы и проверить каждое из них на соответствие условию корректности. Преимуществом этого метода также является возможность воспроизвести путь символьной машины к состоянию программы, исполнив её с конкретными данными, таким образом создавая тест на поведение, соответствующее пути символьного исполнения к этому состоянию. Успех этого подхода подтверждается множеством инструментов, использующих символьное исполнение для генерации тестов. Целью работы этих инструментов является увеличение тестового покрытия, метрики, сигнализирующей о качестве тестирования программы.
Символьное исполнение сталкивается с проблемой экспоненциального увеличения количества путей, которые нужно исследовать для достижения целевых состояний. Одним из способов решения этой проблемы является оптимизация выбора путей исполнения. Оптимизируя выбор путей, можно сократить количество исследуемых состояний исполнения.
Определить заранее, увеличит ли выбор определенного пути исполнения тестовое покрытие в разумное время, невозможно. Поэтому инструменты, использующие символьное исполнение, полагаются на вручную разработанные стратегии, которые аппроксимируют идеальный алгоритм (или эвристику). Эти эвристики могут направлять исполнение в те части программы, где максимизируется целевая метрика, а не туда, где присутствует уязвимость. В таких случаях, где отношения между данными и целевым признаком слишком сложны для выявления закономерностей вручную, эффективно использовать машинное обучение.
В задаче выбора оптимального пути существующие решения на основе машинного обучения опираются на анализ данных об особенностях состояний исполнения. Так как множество состояний программы и путей между ними представляют собой граф, называемый графом исполнения, новые данные для анализа могут быть предоставлены графовыми нейронными сетями (англ. Graph Neural Networks, GNN). Графовые нейронные сети могут улавливать зависимости между вер-шинами в графах, что можно использовать для разработки стратегии выбора оптимальных путей в графе исполнения, учитывая не только особенности состояний, но и взаимосвязи между ними.
Хотя существующие решения позволяют использовать машинное обучение для создания стратегий выбора оптимального пути, нельзя сказать, что эти решения подходят для внедрения графовых нейронных сетей и их обучения. Таким образом, возникает идея создания собственного набора инструментов для осуществления обучения.
При разработке инфраструктуры для создания стратегии выбора пути с использованием машинного обучения можно выделить несколько основных пунктов. К ним относятся проектирование и реализация алгоритма взаимодействия с символьной машиной во время обучения, рациональное использование вычислительных ресурсов, инструменты внедрения результатов обучения, визуализация и сравнение результатов обучения. В данной работе будут рассмотрены разработанные решения, адресующие вышеописанные пункты.

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

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

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


В ходе данного исследования был разработан и реализован набор инструментов, предназначенный для обучения нейронных сетей выбору оптимального пути для символьного исполнения программ.
1. Спроектирована инфраструктура инструмента для обучения графовых нейронных сетей выбору оптимального пути.
2. Реализован инструмент, позволяющий осуществлять обучение нейронных сетей и валидировать результаты обучения с помощью взаимодействия с символьной машиной.
3. Реализован протокол взаимодействия с символьной машиной V через сервер-обертку, использующий веб-сокеты для передачи сообщений.
4. Создан компонент для сравнения результатов работы различных нейронных сетей как алгоритма выбора оптимального пути исполнения на различных программах.
5. Создан компонент для конвертации нейронных сетей в формат ONNX, с его помощью выполнено внедрение нейронной сети в качестве механизма выбора пути для символьного исполнения в символьную машину Vft.
Проведённое сравнение показало, что существующие инструменты уступают разработанному решению по параметрам, актуальным для исследуемого подхода. Разработанный набор инструментов позволяет использовать различные символьные машины как в качестве окружения для обучения, ускорить процесс обучения посредством параллельной валидации, экспортировать результаты обучения в общепринятый формат, сравнивать стратегии символьных машин.
Исходный код набора инструментов: https://github.com/gsvgit/PySymGym/tree/dev. Аккаунт автора работы на GITHUB:https://github.com/emnigma.


[1] Burnim J., Sen K.Heuristics for Scalable Dynamic Test Generation// Proceedings of the 23rd IEEE/ACM International Conference on Au-tomated Software Engineering. — ASE ’08. — USA : IEEE Computer Society, 2008. - P. 443-446. - URL: https://doi.org/10.1109/ASE.2008.69.
[2] Cadar Cristian, Dunbar Daniel, Engler Dawson. KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Sys¬tems Programs // Proceedings of the 8th USENIX Conference on Operating Systems Design and Implementation. — OSDI’08. — USA : USENIX Association, 2008. — P. 209-224.
[3] Cadar Cristian, Sen Koushik. Symbolic execution for software test¬ing: three decades later //Commun. ACM.— 2013. — feb.— Vol. 56, no. 2.— P. 82-90.— URL: https://doi.org/10.1145/2408776.2408795.
[4] Cooper Keith D., Torczon Linda.Chapter 4 - Intermediate Rep¬resentations // Engineering a Compiler (Third Edition) / Ed. by Keith D. Cooper, Linda Torczon.— Philadelphia : Morgan Kauf¬mann, 2023.— P. 159-207.— URL: https://www.sciencedirect.com/science/article/pii/B9780128154120000103.
[5] Dijkstra testing quote.— https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/EWD303.html. — Accessed: 2023-09-23.
[6] Enhancing Dynamic Symbolic Execution by Automatically Learning Search Heuristics / Sooyoung Cha, Seongjoon Hong, Jiseong Bak et al. //IEEE Transactions on Software Engineering. — 2022. — Vol. 48, no. 9. — P. 3640-3663.
[7] Godefroid Patrice, Levin Michael Y., Molnar David. SAGE: Whitebox Fuzzing for Security Testing: SAGE Has Had a Remarkable Impact at Microsoft. //Queue. — 2012. —jan. — Vol. 10, no. 1. — P. 20-27. — URL: https://doi.org/10.1145/2090147.2094081.
[8] The Graph Neural Network Model / Franco Scarselli, Marco Gori, Ah Chung Tsoi et al. //IEEE Transactions on Neural Networks. — 2009. — Vol. 20, no. 1. — P. 61-80.
[9] Towers Mark, Terry Jordan K., Kwiatkowski Ariel et al. Gym¬nasium.— 2023. — .— URL: https://zenodo.org/record/8127025(дата обращения: 2023-07-08).
[10] Hunter J. D. Matplotlib: A 2D graphics environment //Computing inScience & Engineering. — 2007. — Vol. 9, no. 3. — P. 90-95.
[11] IntelliTest. — https://learn.microsoft.com/en-us/visualstudio/test/intellitest-manual/?view=vs-2022. — Accessed: 2023-09-23.
[12] King James C. Symbolic Execution and Program Testing //Commun.ACM.— 1976.—jul.— Vol. 19, no. 7.— P. 385-394.— URL: https://doi.org/10.1145/360248.360252.
[13] Learning to Explore Paths for Symbolic Execution/ Jingxuan He, Gishor Sivanrupan, Petar Tsankov, Martin Vechev // Proceedings of the 2021 ACM SIGSAC Conference on Computer and Communi¬cations Security.-- CCS ’21.-- New York, NY, USA : Association for Computing Machinery, 2021. -- P. 2526-2540. -- URL: https://doi.org/10.1145/3460120.3484813.
[14] Lengauer Thomas, Tarjan Robert Endre. A Fast Algorithm for Finding Dominators in a Flowgraph //ACM Trans. Program. Lang. Syst. -¬1979. —jan. — Vol. 1, no. 1. — P. 121-141. — URL: https://doi.org/10.1145/357062.357071.
[15] Bai Junjie, Lu Fang, Zhang Ke et al. ONNX: Open Neural Network Exchange.— https://github.com/onnx/onnx.— 2019.— Accessed: 2024-05-13...(23)


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




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