МЕЖПРОЦЕДУРНЫЙ СТАТИЧЕСКИЙ АНАЛИЗ ДЛЯ ПОИСКА ОШИБОК В ПРОГРАММАХ НА ЯЗЫКЕ GO (2021)
За последние годы популярность языка Go значительно возросла. Вместе с тем в настоящее время для языка Go существуют только легковесные статические анализаторы. Мы восполнили этот пробел, адаптировав статический анализатор Svace для поиска ошибок в программах на языке Go. Нами был реализован межпроцедурный и межмодульный статический анализатор имеющий чувствительность к потоку и путям. Для оценки результатов использовалось 10 проектов с открытым исходным кодом. 16 оцениваемых детекторов выдали 6817 предупреждений с 76 срабатываний.
Идентификаторы и классификаторы
- eLIBRARY ID
- 46385984
Язык программирования Go – компилируемый, строго типизированный, многопоточный язык программирования, созданный компанией Google в 2009 году. Применяется в основном в backend-е web-приложений [1], что не помешало ему попасть в 20 самых популярных языков программирования на момент написания статьи [2, 3].
Разработчики языка старались максимально обезопасить язык от часто допускаемых программистами ошибок. Языком не предусмотрено неявное приведение типов. Все переменные по умолчанию инициализированы нулевым значением, переполнение буфера не приводит к уязвимости, реализован механизм сборки мусора, помогающий бороться с утечками памяти.
Компилятор Go занимается поиском распространенных тривиальных ошибок, например, ситуаций с объявлением переменной, которая нигде не используется. Важным преимуществом языка Go является высокая скорость компиляции, так как при конструировании компилятора на первое место выходит скорость сборки и качество оптимизаций, а не поиск дефектов. Поэтому необходимость дополнительного статического анализа им не устранена.
Чтобы не перегружать компилятор, разработчики языка реализовали открытый статический анализатор go vet, промежуточным представлением анализа которого является абстрактное синтаксическое дерево (АСД) языка Go.
Список литературы
- Golang-2019 Survey. https://blog.golang.org/survey2019-results. Accessed: 2020-10-3.
- PYPL. http://pypl.github.io/PYPL. Accessed: 2020-10-3.
- IEEE Spectrum’s programming languages top. https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2019. Accessed: 2020-10-3.
- StaticCheck main page. https://staticcheck.io. Accessed: 2020-10-10.
- go-critic main page. https://github.com/go-critic/go-critic. Accessed: 2020-10-10.
- errcheck main page. https://github.com/kisielk/errcheck. Accessed: 2020-10-10.
- Бородин А.Е., Дудина И.А. Внутрипроцедурный анализ для поиска ошибок на основе символьного выполнения // Труды Института системного программирования РАН. 2020. Т. 32. № 6. С. 87-100. DOI: 10.15514/ISPRAS-2020-32(6)-7 EDN: KBIJRQ
- Бородин А.Е., Белеванцев А.А. Статический анализатор Svace как коллекция анализаторов разных уровней сложности // Труды Института системного программирования ИСП РАН. 2015. Т. 27. № 2. С. 111-134. DOI: 10.15514/ISPRAS-2015-27(6)-8 EDN: VLMYJR
- Belevantsev A. et al. Design and Development of Svace Static Analyzers // In 2018 Ivannikov Memorial Workshop (IVMEM). 2018. P. 3-9.
-
Ivannikov V.P. Static analyzer Svace for finding defects in a source program code // Programming and Computer Software. 2014. V. 40. № 5. P. 265-275. EDN: UFPOPF
-
Меркулов А.П., Поляков С.А., Белеванцев А.А. Анализ программ на языке Java в инструменте Svace // Труды Института системного программирования РАН. 2017. Т. 29. № 3. EDN: YUFLUT
-
Бородин А.Е. Межпроцедурный контекстно-чувствительный статический анализ для поиска ошибок в исходном коде программ на языках Си и Си++. Диссертация на соискание ученой степени кандидата физ.-мат. наук. ИСП РАН, 2016. EDN: ZQALLL
-
Белеванцев А.А., Избышев А.О., Журихин Д.М. Организация контролируемой сборки в статическом анализаторе Svace // Системный администратор. 2017. № 7-8. С. 135-139. EDN: ZDNBUH
Выпуск
АНАЛИЗ И ТРАНСФОРМАЦИЯ ПРОГРАММ
КОМПЬЮТЕРНАЯ АЛГЕБРА
АНАЛИЗ ДАННЫХ
ТЕОРИЯ ПРОГРАММИРОВАНИЯ: ФОРМАЛЬНЫЕ МОДЕЛИ И СЕМАНТИКА
Другие статьи выпуска
Непрерывно-временные сети Петри (НВСП), где каждому переходу сети ставится в соответствие временной интервал его срабатывания, используются для моделирования сложных параллельных систем, критичных с точки зрения безопасности. В общем случае, пространство состояний НВСП бесконечно и несчетно и, следовательно, анализ их поведения довольно сложен. ‘Истинно параллельная’ семантика представляет поведение НВСП в виде набора действий, отношение причинной зависимости между которыми моделируется частичным порядком, а отношение параллелизма – отсутствием порядка. Такое представление является более приемлемым для изучения следующих свойств параллельных систем: отсутствие тупиков, ‘справедливость’ (fairness), максимальный параллелизм и т.д. В статье вводятся и исследуются семантики шага (множества параллельных действий) и частичного порядка (множества упорядоченных по причине и параллельных действий) в контексте НВСП, поведение которых определяется слабой временной стратегией (т.е. ход модельного времени не ограничен срабатыванием переходов сети) и устойчиво атомарной техникой сброса часов (т.е. при сбросе часов срабатывание переходов сети рассматривается как атомарное действие).
Предложены шесть методов бинаризации алгоритма стаи ласточек для решения задачи отбора признаков по методу обертки. Эффективность выбранных подмножеств признаков оценивается двумя классификаторами: нечетким классификатором и классификатором на основе k-ближайших соседей. При поиске оптимального подмножества признаков учитывались количество признаков и точность классификации. Разработанные алгоритмы протестированы на наборах данных из репозитория KEEL. Для статистической оценки методов бинаризации использовался двухфакторный дисперсионный анализ Фридмана для связных выборок. Лучшие способности к отбору признаков показал гибридный метод, основанный на методе модифицированных алгебраических операций и введенной нами операции MERGE. Лучшая точность классификации получена с использованием метода V-образной функции трансформации.
Здесь дается описание алгоритмов и программного обеспечения для двух новых методов решения полиномиальных уравнений, основанных на построении выпуклого многоугольника. Первый метод позволяет находить приближенные корни многочлена с помощью многоугольника Адамара. Второй метод позволяет находить ветви алгебраической кривой вблизи ее особой точки и вблизи бесконечности с помощью многоугольника Ньютона и строить эскизы вещественных алгебраических кривых на плоскости. Указаны соответствующие геометрии и алгоритмы компьютерной алгебры, которые позволяют анализировать любые сложные случаи.
В работе строится вычислительно эффективная реализация алгоритма Брейди расчета быстрого преобразования Хафа (БПХ) на отечественном сопроцессоре СРСА, входящем в состав системы-на-кристалле 1890ВМ9Я “КОМДИВ128-М”. Показывается, что БПХ находит широкое применение в задачах анализа изображений, от зрительных систем беспилотного транспорта до вычислительной рентгеновской томографии. Приводится и анализируется с точки зрения низкоуровневой имплементации классическая рекурсивная реализация БПХ. Впервые рассматривается более эффективный нерекурсивный вариант алгоритма, для которого проводится анализ нагрузки на вычислители и память сопроцессора, а также экспериментальные замеры производительности. Показывается, что теоретически возможная производительность нерекурсивного алгоритма на СРСА составляет 800 Мопс, при этом максимально достижимая на практике производительность составила 470 Мопс, а максимальное полученное экспериментально значение оказалось 406 Мопс. При этом загрузка вычислителей сопроцессора достигла 18%. Таким образом, несмотря на относительно малое число арифметических операций в методе, использование сопроцессора оказывается целесообразным.
Издательство
- Издательство
- ИЗДАТЕЛЬСТВО НАУКА
- Регион
- Россия, Москва
- Почтовый адрес
- 121099 г. Москва, Шубинский пер., 6, стр. 1
- Юр. адрес
- 121099 г. Москва, Шубинский пер., 6, стр. 1
- ФИО
- Николай Николаевич Федосеенков (Директор)
- E-mail адрес
- info@naukapublishers.ru
- Контактный телефон
- +7 (495) 2767735