Статический анализ играет важную роль в задаче поиска ошибок в коде. Однако многие из методов статического анализа основаны на сопоставлении участков кода с некоторым шаблоном: если участок кода соответствует шаблону, считается, что он содержит ошибку. Такой подход может приводить как к пропуску существующих ошибок, так и выдаче ложных предупреждений. Алгоритмы статического анализа, которые выделяют ошибки на основе различных свойств программы, например, контекстов вызова и потока управления, позволяют обнаруживать больше истинных ошибок и сообщать меньше ложных предупреждений.
Многие виды статического анализа могут быть сформулированы как задача контекстно-свободной (КС) достижимости. Один из примеров — анализ псевдонимов (анализ указателей). Он позволяет обнаруживать использование освобождённой памяти, взаимные блокировки и обращение к выделенной памяти через тип с несоответствующим размером. Ещё один пример — Points-to анализ, учитывающий поля, особенностью которого являются большие грамматики, используемые для анализа.
Существует множество алгоритмов, решающих задачу КС- достижимости. Среди них можно выделить алгоритмы, основанные на операциях линейной алгебры, так как такие операции хорошо поддаются распараллеливанию. В исследовании Никиты Мишина и др. был произведён сравнительный анализ времени работы нескольких реализаций матричного алгоритма Рустама Азимова, основанных на различных специализированных матричных библиотеках. Однако графы, на которых проводилось исследование, значительно меньше получаемых по исходному коду для статического анализа.
В данной работе предлагается изучить различные алгоритмы КС- достижимости в графах и сравнить их производительность на больших графах, полученных по реальным программам.
1. Постановка задачи
Целью данной работы является экспериментальное исследование алгоритмов КС-достижимости в задаче статического анализа кода.
Для достижения цели были поставлены следующие задачи.
1. Рассмотреть возможность применения алгоритмов, основанных на операциях линейной алгебры, для Points-to анализа, учитывающего поля, и предложить модификацию алгоритма, подходящую для этого анализа.
2. Оптимизировать реализации алгоритмов, основанных на операциях линейной алгебры.
3. Провести замеры производительности алгоритмов, основанных на операциях линейной алгебры, на графах, полученных по реальным программам, сравнить их с другими алгоритмами КС- достижимости.
В ходе работы были достигнуты следующие результаты.
• Предложена модификация тензорного алгоритма для Points-to анализа, учитывающего поля, показавшая наилучшее время работы на небольших графах среди алгоритмов, основанных на операциях линейной алгебры. Однако эксперименты показали, что из-за большого потребления памяти алгоритм практически неприменим для данного вида анализа.
• Оптимизирована реализация матричного алгоритма из библиотеки CFPQ_PyAlgo, эффективность оптимизации экспериментально проверена.
• Проведены замеры производительности реализаций алгоритмов КС-достижимости, которые показали, что алгоритмы, основанные на операциях линейной алгебры, достаточно эффективны для анализа псевдонимов, но из-за больших размеров грамматики малоэффективны для Points-to анализа, учитывающего поля.
Так как реализации алгоритма, основанного на произведении Кро- некера, и его вариации плохо применимы для Points-to анализа, учитывающего поля, в силу очень большого объёма потребляемой памяти под пересечение графа и рекурсивного автомата, в дальнейшем можно рассмотреть следующие шаги по оптимизации матричного алгоритма для применения его к данному типу анализа.
• Разработка инкрементальной версии матричного алгоритма, в которой полученные на предыдущих итерациях данные не будут пересчитываться в дальнейшем, что позволит сократить затрачиваемое на умножение матриц время.
• Специализация матричного алгоритма для данного анализа, не требующего перевода грамматики в ОНФХ и вычисления достижимости для нетерминала FlowsTo непосредственно, что позволит значительно сократить количество перемножений матриц.
[1] Analysis of Recursive State Machines / Rajeev Alur, Michael Benedikt, Kousha Etessami et al. // ACM Trans. Program. Lang. Syst. — 2005.— Vol. 27, no. 4.— P. 786-818.— URL: https://doi.org/10. 1145/1075382.1075387.
[2] Azimov Rustam, Grigorev Semyon. Context-Free Path Querying by Matrix Multiplication // Proceedings of the 1st ACM SIGMOD Joint International Workshop on Graph Data Management Experiences & Systems (GRADES) and Network Data Analytics (NDA).— GRADES-NDA ’18.-- New York, NY, USA : Association for Computing Machinery, 2018. -- 10 p. -- URL: https://doi.org/10.1145/ 3210259.3210264 (online; accessed: 10.10.2021).
[3] Context-Free Path Querying by Kronecker Product / Egor Orachev, Ilya Epelbaum, Rustam Azimov, Semyon Grigorev // Advances in Databases and Information Systems / Ed. by Jerome Darmont, Boris Novikov, Robert Wrembel. -- Cham : Springer International Publishing, 2020. — P. 49-59.
[4] Evaluation of the Context-Free Path Querying Algorithm Based on Matrix Multiplication / Nikita Mishin, Iaroslav Sokolov, Egor Spirin et al. // Proceedings of the 2nd Joint International Workshop on Graph Data Management Experiences & Systems (GRADES) and Network Data Analytics (NDA). - GRADES-NDA’19. - New York, NY, USA : Association for Computing Machinery, 2019. — 5 p. — URL: https:// doi.org/10.1145/3327964.3328503 (online; accessed: 10.10.2021).
[5] Faults in Linux: Ten Years Later / Nicolas Palix, Ga6l Thomas, Suman Saha et al. // Proceedings of the Sixteenth International Conference on Architectural Support for Programming Languages and Operating Systems. — ASPLOS XVI. — New York, NY, USA : Association for Computing Machinery, 2011. — P. 305-318. — URL: https://doi. org/10.1145/1950365.1950401 (online; accessed: 10.10.2021).
[6] Hellings Jelle. Querying for Paths in Graphs using Context-Free Path Queries. — 2016. — 1502.02242.
[7] Hopcroft John E., Motwani Rajeev, Ullman Jeffrey D. Introduction to Automata Theory, Languages, and Computation (3rd Edition). — USA : Addison-Wesley Longman Publishing Co., Inc., 2006. — ISBN: 0321455363.
[8] Medeiros Ciro M., Musicante Martin A., Costa Umberto S. An Algorithm for Context-Free Path Queries over Graph Databases // Proceedings of the 24th Brazilian Symposium on Context-Oriented Programming and Advanced Modularity. — SBLP ’20. — New York, NY, USA : Association for Computing Machinery, 2020. — P. 4047.— URL: https://doi.org/10.1145/3427081.3427087 (online; accessed: 10.10.2021).
[9] Shemetova Ekaterina, Azimov Rustam, Orachev Egor et al. One Algorithm to Evaluate Them All: Unified Linear Algebra Based Approach to Evaluate Both Regular and Context-Free Path Queries. — 2021.— 2103.14688.
[10] Reps Thomas. Program analysis via graph reachability1An abbreviated version of this paper appeared as an invited paper in the Proceedings of the 1997 International Symposium on Logic Programming [84].1 // Information and Software Technology.— 1998.— Vol. 40, no. 11. — P. 701-726. — URL: https://www.sciencedirect. com/science/article/pii/S0950584998000937 (online; accessed: 10.10.2021).
[11] Reps Thomas, Horwitz Susan, Sagiv Mooly. Precise Interprocedural Dataflow Analysis via Graph Reachability // Proceedings of the 22nd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. - POPL ’95. - New York, NY, USA : Association for Computing Machinery, 1995.— P. 49-61.— URL: https://doi.org/ 10.1145/199448.199462 (online; accessed: 10.10.2021).
[12] Sagiv Mooly, Reps Thomas, Horwitz Susan. Precise interprocedural dataflow analysis with applications to constant propagation // Theoretical Computer Science.— 1996.— Vol. 167, no. 1.— P. 131— 170.— URL: https://www.sciencedirect.com/science/article/ pii/0304397596000722 (online; accessed: 10.10.2021).
[13] Sevon Petteri, Eronen Lauri. Subgraph Queries by Context- free Grammars // Journal of Integrative Bioinformatics. — 2008. — Vol. 5, no. 2.- P. 157-172.- URL: https://doi.org/10.1515/ jib-2008-100 (online; accessed: 10.10.2021).
[14] Sridharan Manu, Bodik Rastislav. Refinement-Based ContextSensitive Points-to Analysis for Java // Proceedings of the 27th ACM SIGPLAN Conference on Programming Language Design and Implementation. — PLDI ’06. — New York, NY, USA : Association for Computing Machinery, 2006. -- P. 387-400. -- URL: https://doi.org/ 10.1145/1133981.1134027 (online; accessed: 10.10.2021).
[15] Zheng Xin, Rugina Radu. Demand-Driven Alias Analysis for C // SIGPLAN Not.- 2008.-1.- Vol. 43, no. 1.- P. 197208.— URL: https://doi.org/10.1145/1328897.1328464 (online; accessed: 10.10.2021).