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


Вывод инвариантов циклов на базе абстрактных реляционных доменов в задачах статического анализа программ на языке JavaScript

Работа №144931

Тип работы

Дипломные работы, ВКР

Предмет

математика

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

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


Введение 3
Постановка задачи 5
1. Обзорный раздел по предметной области 6
1.1. Абстрактная интерпретация 6
1.2. Реляционные и нереляционные домены 9
1.3. Существующие реляционные числовые домены 10
1.3.1 Домен, выражающий равенства 10
1.3.2 Polyhedra 10
1.3.3 Октогональный домен 11
1.4. Вывод инвариантов циклов и свойств элементов массивов . 12
2. Добавление поддержки реляционных доменов в движок 18
2.1. Схема работы движка с реляционными доменами 18
2.2. Чувствительность к путям исполнения 20
2.3. Реляционные домены и интерпроцедурность 22
3. Реализация октогонального домена 23
3.1. Абстрактный октогональный домен 23
3.2. Работа с целыми и нецелыми числами в октогональном домене 24
3.3. Учет целочисленности в строгих неравенствах 25
4. Реализация вывода инвариантов, касающихся элементов мас­
сивов 27
4.1. Общее устройство домена для вывода инвариантов 27
4.2. Динамическое разбиение на подпространства 28
4.3. Выбор ограничений, хранимых для подпространств 31
4.4. Оптимизации оператора объединения 31
5. Тестирование движка с реляционными доменами 33
5.1. Проведенные тесты и их результаты 33
5.2. Сравнение с возможностями аналогичных движков 36
Заключение 37
Список литературы 38

В современном мире непрерывно увеличивается количество окружа­ющих нас компьютерных программ. Вместе с ним неизбежно увеличивает­ся и количество всевозможных уязвимостей и дефектов в этих программах. Ошибки в программном обеспечении приводят к плачевным последствиям — некорректной работе программ, утечкам данных разработчиков и/или пользо­вателей, а иногда — к крупным экономическим и даже человеческим потерям. Так, проблемы в ПО стали причиной двух крушений самолетов Boeing 737 MAX в 2018 и 2019 годах.
Высокая доля потенциальных ошибок в программах выявляется ком­пилятором или интерпретатором и выдается ими в качестве ошибок или предупреждений. Однако таким образом могут быть выявлены только наи­более стандартные и примитивные ошибки. Другим способом поиска дефек­тов является тестирование — ручное и автоматическое, которое позволяет проверить корректность работы ПО в сценариях различной сложности. Су­щественным недостатком этого метода является человеческий фактор: во- первых, разработка и проведение тестов требуют большого количества че­ловекочасов, во-вторых, ошибки можно допустить и при составлении тестов, наконец, зачастую даже самое тщательное тестирование не способно покрыть все возможные сценарии работы программы.
В силу недостаточности приведенных методов поиска дефектов все большее развитие получают статические анализаторы — специальные про­граммы для автоматического поиска уязвимостей в коде, которые не требуют непосредственно запуска этого кода. Статические анализаторы позволяют без помощи человека находить проблемы в коде, которые не под силу найти компиляторам. Одной из наиболее классических и развитых техник статиче­ского анализа является абстрактная интерпретация, предложенная еще в 1977 году.
Суть этой техники состоит в том, чтобы научиться представлять кон­кретные состояния программы (содержимого ее переменных, стека вызовов и пр.) в каждый момент времени исполнения в виде элементов некоторо­го абстрактного домена, и свести моделирование исполнения программы к выполнению ее инструкций над этим абстрактным состоянием. Тогда, анали­зируя достижимые абстрактные состояния, можно определить достижимость конкретных ошибочных состояний программы.
Ключевым фактором, определяющим точность абстрактной интерпре­тации, является выбранный абстрактный домен, отвечающий за хранение ин­формации о состоянии переменных программы. Данная работа посвящена разработке и внедрению в промышленный движок абстрактной интерпрета­ции доменов, способных выводить и использовать в анализе сложные свойства программ: неравенства, связывающие значения различных числовых пере­менных, а также свойства элементов массивов, выполненные на всех итера­циях циклов — инварианты циклов.

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

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

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


В ходе данной работы в движок для абстрактной интерпретации была добавлена возможность расширения его произвольными реляционными до­менами. Был реализован октогональный домен для числовых переменных. Также на основе имеющихся работ в этой области был придуман, разрабо­тан и внедрен домен, позволяющий выводить инварианты циклов и свойства элементов массивов.
Оба реализованных расширения были протестированы как на искус­ственных тестовых примерах, так и на реальных больших проектах. В ре­зультате оба домена продемонстрировали свою корректность и повышение точности статического анализа при их использовании. При этом октогональ- ный домен практически не оказывает влияния на скорость работы движка, а вывод инвариантов в подавляющем большинстве случаев приводит к разум­ному замедлению движка не более чем в несколько раз.
Оба домена оказались способны произвести точный анализ кода во мно­гих примерах, с которыми не справились популярные находящиеся в откры­том доступе аналоги.


[1] G. Travis, “How the Boeing 737 Max Disaster Looks to a Software Developer.” https://spectrum.ieee.org/how-the-boeing- 737-max-disaster-looks-to-a-software-developer, 2019. (дата обр. 09.05.2024).
[2] P. Cousot and R. Cousot, “Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints,” in Proceedings of the 4th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, POPL ’77, (New York, NY, USA), p. 238-252, Association for Computing Machinery, 1977.
[3] S. Diehl, P. Hartel, and P. Sestoft, “Abstract machines for programming language implementation,” Future Generation Computer Systems, vol. 16, no. 7, pp. 739-751, 2000.
[4] D. Van Horn and M. Might, “Abstracting abstract machines,” SIGPLAN Not., vol. 45, p. 51-62, sep 2010.
[5] P. Cousot and N. Halbwachs, “Automatic discovery of linear restraints among variables of a program,” in Proceedings of the 5th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages, POPL ’78, (New York, NY, USA), p. 84-96, Association for Computing Machinery, 1978.
[6] A. Mine, “The Octagon Abstract Domain,” Higher-Order and Symbolic Computation, vol. 19, pp. 31-100, 2006.
[7] C. A. Furia, B. Meyer, and S. Velder, “Loop invariants: Analysis, classification, and examples,” ACM Comput. Surv., vol. 46, jan 2014.
[8] M. D. Ernst, A. Czeisler, W. G. Griswold, and D. Notkin, “Quickly detecting relevant program invariants,” in Proceedings of the 22nd International Conference on Software Engineering, ICSE ’00, (New York, NY, USA), p. 449-458, Association for Computing Machinery, 2000.
[9] T. Henzinger, T. Hottelier, L. Kovacs, and A. Rybalchenko, “Aligators for arrays (tool paper),” pp. 348-356, 10 2010.
[10] D. Larraz, E. Rodriguez-Carbonell, and A. Rubio, “Smt-based array invariant generation,” in Verification, Model Checking, and Abstract Interpretation (R. Giacobazzi, J. Berdine, and I. Mastroeni, eds.), (Berlin, Heidelberg), pp. 169-188, Springer Berlin Heidelberg, 2013.
[11] D. Gopan, T. Reps, and M. Sagiv, “A framework for numeric analysis of array operations,” in Proceedings of the 32nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL ’05, (New York, NY, USA), p. 338-350, Association for Computing Machinery, 2005.
[12] N. Halbwachs and M. Peron, “Discovering properties about arrays in simple programs,” in Proceedings of the 29th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI ’08, (New York, NY, USA), p. 339-348, Association for Computing Machinery, 2008.
[13] V. Kashyap, K. Dewey, E. Kuefner, J. Wagner, K. Gibbons, J. Sarracino, B. Wiedermann, and B. Hardekopf, “Jsai: Designing a sound, configurable, and efficient static analyzer for javascript,” 03 2014.
[14] MDN, “Addition (+).” https://developer.mozilla.org/en-US/docs/ Web/JavaScript/Reference/Operators/Addition#description. (да­та обр. 13.05.2024).
[15] R. Bagnara, P. M. Hill, E. Mazzi, and E. Zaffanella, “Widening operators for weakly-relational numeric abstractions,” in Static Analysis (C. Hankin and I. Siveroni, eds.), (Berlin, Heidelberg), pp. 3-18, Springer Berlin Heidelberg, 2005.
... всего 22 источника


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




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