Выпуск ControlFlag 1.0, инструмента для выявления ошибок в коде на языке Си

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
19-Ноя-2021 20:30

Компания Intel опубликовала первый значительный релиз инструментария ControlFlag 1.0, позволяющего выявлять ошибки и аномалии в исходных текстах, используя систему машинного обучения, натренированную на большом объёме существующего кода. В отличие от традиционных статических анализаторов, ControlFlag не применяет готовых правил, в которых трудно предусмотреть все возможные варианты, а отталкивается от статистики использования всевозможных языковых конструкций в большом числе существующих проектов. Код ControlFlag написан на языке С++ и открыт под лицензией MIT.
Система обучается путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях. На стадии обучения система определяет типовые шаблоны построения конструкций в коде и строит синтаксическое дерево связей между этими шаблонами, отражающее поток выполнения кода в программе. В итоге формируется эталонное дерево принятия решений, объединяющее опыт разработки всех проанализированных исходных текстов. Для проверяемого кода выполняется похожий процесс определения шаблонов, которые сверяются с эталонным деревом принятия решений. Большие расхождения с соседними ветвями свидетельствуют о наличии аномалии в проверяемом шаблоне.

В качестве примера возможностей ControlFlag разработчиками был проведён анализ исходных текстов проектов OpenSSH и cURL:
  • В OpenSSL были выявлены аномальные конструкции "(s1 == NULL) ∧ (s2 == NULL)" и "(s1 == NULL) | (s2 == NULL)" , не соответствующие обычно используемому шаблону "(s1 == NULL) || (s2 == NULL)". В коде также были выявлены аномалии в выражениях "(-2 == rv)" (минус был опечаткой) и "BIO_puts(bp, ":") <= 0)" (в контексте проверки успешного завершения функции должно было быть "== 0").
  • В cURL выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.
Из особенностей версии ControlFlag 1.0 отмечается полная поддержка типовых шаблонов для языка Си и возможность выявления аномалий в условных выражениях "if". Например, при анализе фрагмента кода "if (x = 7) y = x;" система определит, что обычно в операторе "if" для сравнения числовых значений используется конструкция "переменная == число", поэтому с большой вероятностью указание "переменная = число" в выражении "if" вызвано опечаткой. В комплекте предоставляется сценарий, позволяющий загрузить имеющиеся в GitHub репозитории на языке Си и использовать их для построения модели. Также доступны уже готовые модели, позволяющие сразу приступить к проверке кода.
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_controlflag, #_intel
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 21-Ноя 21:41
Часовой пояс: UTC + 5