Intel открыл код системы машинного обучения ControlFlag для выявления ошибок в коде
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Компания Intel открыла наработки, связанные с исследовательским проектом ControlFlag, нацеленным на создание системы машинного обучения для повышения качества кода. Подготовленный проектом инструментарий позволяет на основе модели, обученной на большом объёме существующего кода, выявлять различные ошибки и аномалии в исходных текстах, написанных на высокоуровневых языках, таких как C/C++. Система подходит для определения в коде различных видов проблем, от определения опечаток и неверного сочетания типов, до выявления пропущенных проверок значения NULL в указателях и проблем при работе с памятью. Код ControlFlag написан на языке С++ и открыт под лицензией MIT.
Система самообучается путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях. На стадии обучения система определяет типовые шаблоны построения конструкций в коде и строит синтаксическое дерево связей между этими шаблонами, отражающее поток выполнения кода в программе. В итоге формируется эталонное дерево принятия решений, объединяющее опыт разработки всех проанализированных исходных текстов.
Для проверяемого кода выполняется похожий процесс определения шаблонов, которые сверяются с эталонным деревом принятия решений. Большие расхождения с соседними ветвями свидетельствуют о наличии аномалии в проверяемом шаблоне. Система также позволяет не только выявить ошибку в шаблоне, но и предложить исправление. Например в коде OpenSSL была выявлена конструкция "(s1 == NULL) ∧ (s2 == NULL)", которая встречалась в синтаксическом дереве всего 8 раз, в то время как ближайшая ветка со значением "(s1 == NULL) || (s2 == NULL)" встречалась около 7 тысяч раз. Система также выявила аномалию "(s1 == NULL) | (s2 == NULL)" которая встречалась в дереве 32 раза.
При анализе фрагмента кода "if (x = 7) y = x;" система определила, что обычно в операторе "if" для сравнения числовых значений используется конструкция "переменная == число", поэтому с большой вероятностью указание "переменная = число" в выражении "if" вызвано опечаткой. Такую ошибку выловили бы и традиционные статические анализаторы, но в отличие от них ControlFlag не применяет готовых правил, в которых трудно предусмотреть все возможные варианты, а отталкивается от статистики использования всевозможных конструкций в большом числе проектов.
В качестве эксперимента при помощи ControlFlag в исходных текстах утилиты cURL, которая часто приводится как пример качественного и проверенного кода, была выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE. В коде OpenSSL, помимо вышеупомянутой проблемы с "(s1 == NULL) ∧ (s2 == NULL)", также были выявлены аномалии в выражениях "(-2 == rv)" (минус был опечаткой) и "BIO_puts(bp, ":") <= 0)" ( в контексте проверки успешного завершения функции должно было быть "== 0"). Также сообщается, что применение ControlFlag позволило выявить в неконкретизированном проприетарном ПО нескольких сотен ошибок, приводивших к крахам и проблемам при работе с памятью.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://www.linkedin.com/pulse...)
- OpenNews: IBM открыл CodeNet для систем машинного обучения, транслирующих и проверяющих код
- OpenNews: GitHub открыл наработки по применению машинного обучения для поиска и анализа кода
- OpenNews: Система машинного обучения для синтеза типового кода на языке Java
- OpenNews: Выпуск cppcheck 2.6, статического анализатора кода для языков C++ и С
- OpenNews: Facebook открыл код статического анализатора Mariana Trench
Похожие новости:
- Атака на Intel SGX, позволяющая извлечь конфиденциальные данные или выполнить код в анклаве
- Выпуск отладчика GDB 11
- Доступен Uncoded, вариант редактора VSCode без телеметрии
- Релиз CrossOver 21.0 для Linux, Chrome OS и macOS
- Выпуск программы для перекодирования видео HandBrake 1.4.0
- [Управление разработкой, Карьера в IT-индустрии, IT-компании] Как стать IT лидом в стартапе. Мой опыт в 5 шагах
- [FPGA, Системы сборки, DevOps, Производство и разработка электроники] Continuous Integration для Intel FPGA (Altera)
- [Python, Алгоритмы, Big Data, Машинное обучение, Искусственный интеллект] Open Data Science Odessa Meetup #3
- [Хранение данных, Хранилища данных] DAOS — современный подход к хранению данных
- [Python, Алгоритмы, Big Data, Машинное обучение, Искусственный интеллект] Data Phoenix Digest — 08.07.2021
Теги для поиска: #_controlflag, #_intel, #_code, #_debug
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 17:32
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Компания Intel открыла наработки, связанные с исследовательским проектом ControlFlag, нацеленным на создание системы машинного обучения для повышения качества кода. Подготовленный проектом инструментарий позволяет на основе модели, обученной на большом объёме существующего кода, выявлять различные ошибки и аномалии в исходных текстах, написанных на высокоуровневых языках, таких как C/C++. Система подходит для определения в коде различных видов проблем, от определения опечаток и неверного сочетания типов, до выявления пропущенных проверок значения NULL в указателях и проблем при работе с памятью. Код ControlFlag написан на языке С++ и открыт под лицензией MIT. Система самообучается путём построения статистической модели имеющегося массива кода открытых проектов, опубликованных в GitHub и подобных публичных репозиториях. На стадии обучения система определяет типовые шаблоны построения конструкций в коде и строит синтаксическое дерево связей между этими шаблонами, отражающее поток выполнения кода в программе. В итоге формируется эталонное дерево принятия решений, объединяющее опыт разработки всех проанализированных исходных текстов. Для проверяемого кода выполняется похожий процесс определения шаблонов, которые сверяются с эталонным деревом принятия решений. Большие расхождения с соседними ветвями свидетельствуют о наличии аномалии в проверяемом шаблоне. Система также позволяет не только выявить ошибку в шаблоне, но и предложить исправление. Например в коде OpenSSL была выявлена конструкция "(s1 == NULL) ∧ (s2 == NULL)", которая встречалась в синтаксическом дереве всего 8 раз, в то время как ближайшая ветка со значением "(s1 == NULL) || (s2 == NULL)" встречалась около 7 тысяч раз. Система также выявила аномалию "(s1 == NULL) | (s2 == NULL)" которая встречалась в дереве 32 раза. При анализе фрагмента кода "if (x = 7) y = x;" система определила, что обычно в операторе "if" для сравнения числовых значений используется конструкция "переменная == число", поэтому с большой вероятностью указание "переменная = число" в выражении "if" вызвано опечаткой. Такую ошибку выловили бы и традиционные статические анализаторы, но в отличие от них ControlFlag не применяет готовых правил, в которых трудно предусмотреть все возможные варианты, а отталкивается от статистики использования всевозможных конструкций в большом числе проектов. В качестве эксперимента при помощи ControlFlag в исходных текстах утилиты cURL, которая часто приводится как пример качественного и проверенного кода, была выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE. В коде OpenSSL, помимо вышеупомянутой проблемы с "(s1 == NULL) ∧ (s2 == NULL)", также были выявлены аномалии в выражениях "(-2 == rv)" (минус был опечаткой) и "BIO_puts(bp, ":") <= 0)" ( в контексте проверки успешного завершения функции должно было быть "== 0"). Также сообщается, что применение ControlFlag позволило выявить в неконкретизированном проприетарном ПО нескольких сотен ошибок, приводивших к крахам и проблемам при работе с памятью. =========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 21-Ноя 17:32
Часовой пояс: UTC + 5