title: Hybrid language-independent static analysis as an element of complex programming technology
metadata.name: dc.contributor.advisor
metadata.value: Подкопаев Антон Викторович
metadata.lang: ru_RU
metadata.name: dc.contributor.advisor
metadata.value: Podkopaev Anton Viktorovic
metadata.lang: en_GB
metadata.name: dc.contributor.author
metadata.value: Меньшиков Максим Александрович
metadata.lang: ru_RU
metadata.name: dc.contributor.author
metadata.value: Mensikov Maksim Aleksandrovic
metadata.lang: en_GB
metadata.name: dc.contributor.editor
metadata.value: Терехов Андрей Николаевич
metadata.lang: ru_RU
metadata.name: dc.contributor.editor
metadata.value: Terehov Andrej Nikolaevic
metadata.lang: en_GB
metadata.name: dc.date.accessioned
metadata.value: 2023-04-06T21:47:26Z
metadata.lang: -
metadata.name: dc.date.available
metadata.value: 2023-04-06T21:47:26Z
metadata.lang: -
metadata.name: dc.date.issued
metadata.value: 2022
metadata.name: dc.identifier.other
metadata.value: 013800
metadata.lang: en_GB
metadata.name: dc.identifier.uri
metadata.value: http://hdl.handle.net/11701/39485
metadata.lang: -
metadata.name: dc.description.abstract
metadata.value: Быстрое развитие компьютеров привело к тому, что микроэлектроника вплотную приблизилась к физическому пределу, препятствующему дальнейшему увеличению производительности процессоров. Ответом индустрии на эту проблему стало использование программно-аппаратных комплексов, основанных на параллельных, гетерогенных вычислениях со специализированными процессорами. Это значительно подняло сложность программного обеспечения и затруднило контроль его качества, который и так был непростой задачей, но теперь происходит в неоднородных условиях.
  
  Решением проблемы является переход на комплексные технологии разработки, которые будут покрывать весь жизненный цикл программного обеспечения. Статический анализ занимает в таких средах место хранилища и обработчика семантических данных программ, уходящего от обычного поиска дефектов к выполнению задач проектирования, документирования, контроля взаимосвязей, помощи в импорте и т.п. Тем самым анализаторы могут занять центральную роль в модернизирующейся инфраструктуре разработки. Для перехода к этому качеству необходим новый метод их построения.
  
  Объектами данного исследования являются методологии разработки статических анализаторов программного кода.
  Предмет исследования - подход к их созданию, выводящий на первый план языковую независимость, гибридность, возможности по интеграции. Языковая независимость позволяет в одном контексте читать и анализировать взаимосвязи программ, написанных на разных языках. Гибридность предполагает поддержку множества процедур анализа - от просмотра абстрактных синтаксических деревьев до проверки модели. Интегрировать анализ в различные условия можно при помощи развитой сервисной модели.
  
  Реализация этих элементов осуществима при внедрении в этап чтения единого языкового базиса, допускающего хранение обобщенных синтаксических и семантических структур. Промежуточное представление, совмещающее преимущества низкоуровневого ассемблера и абстрактных синтаксических деревьев, дает возможность переключать используемые семантики в рамках одной программы, а гипервизор и виртуальные машины обеспечивают запуск внутрипроцедурного и межпроцедурного видов языково-независимого анализа. Гибридный решатель формирует специальные аналитические представления для работы абстрактной интерпретации, проверки модели через SMT-решатели, а также символьного исполнения. В сочетании с техниками по пробному запуску компиляторов, настройке "гибких таргетов" и перехвату вызовов, это позволяет достигнуть высокого качества анализа гетерогенных промышленных проектов.
  
  Целью работы является разработка методологии проведения статического анализа для комплексной технологии программирования на базе языков C, C++, РуСи с учетом требований о взаимодействии частей программного комплекса, полноценной поддержке различных языков программирования и их применении в одном контексте.
  Научная новизна работы заключается в описании новых способов чтения, обработки и анализа исходных текстов. Теоретическая значимость - в процессах, складывающихся из сочетания алгоритмов, архитектурных и технических решений, а также опыта исправления возникающих проблем. Практическая значимость - в реализации подхода в промышленном статическом анализаторе кода, который может использоваться практически любыми организациями, занимающимися программированием.
  
  В работе используются фундаментальные достижения информатики и программной инженерии. Анализ основывается на абстрактной интерпретации, символьном исполнении и аппарате Satisfiability Modulo Theories (SMT). Промежуточное представление использует теорию компиляторов.
  
  Результатом исследования является поддерживающая различные сервисные модели архитектура статического анализатора, принципы работы модуля чтения, промежуточное представление, фреймворк гипервизора и виртуальных машин, архитектура гибридного решателя, а также их непосредственная реализация на языке C++.
  
  Проведенная апробация показывает, что разработанный по описанной схеме анализатор демонстрирует высокий уровень обнаружения дефектов, адаптивен к среде, имеет почти линейную масштабируемость, устойчив к изменениям сетевых условий.
metadata.lang: ru_RU
metadata.name: dc.description.abstract
metadata.value: The fast development of computers led to reaching physical limitations that prevent further increase in Central Processing Unit (CPU) performance. In response to this problem, the industry started using software and hardware systems based on parallel, heterogeneous computations with specialized processors. That increased the complexity of the software and its quality assurance processes.
  
  One possible solution is the transition to complex development technologies that would cover the complete software life cycle. In them, the static analyzer might become the storage and the processor of semantic data, switching from simple defect search to a mixture of continuous architectural, documentation, dependency, and import checks. By doing that, the analyzer might get the central role in modernized development infrastructure. However, a new method for their construction is required.
  
  The objective of this research is the methodology of static analyzer development. A subject is an approach to their creation which puts language agnosticism, hybridity and integrations in the foreground. Language agnosticism allows for analyzing relationships of programs in different languages. Hybridity implies the support of different analysis methods - from abstract syntax tree inspection to model checking. The integration enables the analyzer to solve problems in varying environments without losing precision.
  
  Implementation of these elements is possible with the unified language basis, permitting the use of generalized syntax and semantic structures. Intermediate representation blends the advantages of low-level assembly with abstract syntax trees and gives an ability to alter language semantics in the application. The hypervisor and virtual machines add the ability to run intra-procedural and inter-procedural types of language-agnostic analyses. A hybrid solver generates analytical models which facilitate the use of abstract interpretation, model checking and symbolic execution. Combined with the abilities to perform "probing" on compilers, setting up "flexible targets" and intercepting compiler calls, it is possible to achieve high quality heterogeneous industrial project analysis.
  
  The research is aimed at making the static analysis methodology for complex development technologies with the support of C, C++ and RuC, complying with the requirements of cross-tool interoperation and support of different languages in one context.
  The novelty is in the description of new parsing, processing, and analysis methods reaching these goals. Theoretical influence is in the combination of algorithms, architectural and technical solutions, as well as the experience in solving development issues. Practical influence is in the implementation of an industrial static analyzer, which can be used by almost any organization involved in programming.
  
  The paper uses fundamental concepts of informatics and software engineering. The analysis is based on abstract interpretation, symbolic execution and the Satisfiability Modulo Theories machinery. Intermediate representation uses compiler theory. Integrations are based on network optimization principles.
  
  The main outcome is a developed architecture of a static analyzer supporting various service models, novel principles of parsing, the language-agnostic intermediate representation, the virtual machine framework, and the scheme of a hybrid solver, all implemented in C++.
  
  The evaluation shows that the analyzer demonstrates a high level of defect detection. It is adapting to the environment, is linearly scalable and is network failure-resistant.
metadata.lang: en_GB
metadata.name: dc.language.iso
metadata.value: ru
metadata.name: dc.subject
metadata.value: статический анализ
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: многоязычность
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: комплексная технология программирования
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: интеграции
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: гибридный решатель
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: промежуточное представление
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: midair
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: equid
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: библиотека удаленного доступа
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: сервер анализа
metadata.lang: ru_RU
metadata.name: dc.subject
metadata.value: static analysis
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: language agnosticism
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: language independency
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: complex programming technology
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: complex development technology
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: integrations
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: hybrid solver
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: intermediate representation
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: midair
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: equid
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: remote access
metadata.lang: en_GB
metadata.name: dc.subject
metadata.value: analysis server
metadata.lang: en_GB
metadata.name: dc.title
metadata.value: Hybrid language-independent static analysis as an element of complex programming technology
metadata.lang: en_GB
metadata.name: dc.title.alternative
metadata.value: Гибридный языково-независимый статический анализ как элемент комплексной технологии программирования
metadata.lang: ru_RU
resources.filename: Mensikov_M.A._VKR_2022.pdf
resources.url: https://dspace.spbu.ru/bitstream/11701/39485/2/Mensikov_M.A._VKR_2022.pdf
resources.format: Adobe PDF
resources.description: Article
resources.size: 1,86 MB
resources.filename: Akt_o_vnedrenii.pdf
resources.url: https://dspace.spbu.ru/bitstream/11701/39485/3/Akt_o_vnedrenii.pdf
resources.format: Adobe PDF
resources.description: Article
resources.size: 988,13 kB
resources.filename: reviewSV_otzyv_VKR_Mensikov.pdf
resources.url: https://dspace.spbu.ru/bitstream/11701/39485/4/reviewSV_otzyv_VKR_Mensikov.pdf
resources.format: Adobe PDF
resources.description: ReviewSV
resources.size: 99,32 kB