Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
>
PVS-Studio: поддержка стандартов кодиро…

PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++

10 декабря 2018 г.

Начиная с версии 6.27 статический анализатор кода PVS-Studio может классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.

0596_PVS_Studio_MISRA_ru/image1.png

Update. На сайте появился раздел "Классификация предупреждений PVS-Studio согласно стандартам: MISRA C, MISRA C++". В нём приводится таблица соотвествия между диагностиками PVS-Studio и правилами, описанными в MISRA C:2012 и MISRA C++:2008.

В этом году мы занялись поддержкой в анализаторе PVS-Studio таких стандартов, как CWE и SEI CERT. В основном поддержка свелась к классификации уже реализованных в анализаторе диагностик согласно этим стандартам. Дополнительно было реализовано несколько новых или расширено несколько старых диагностик, чтобы более полно соответствовать этим стандартам.

Таблицы соответствий диагностик PVS-Studio различным стандартам:

Теперь настало время стандартов MISRA C и MISRA C++. Это стандарты разработки программного обеспечения на языке C и C++, созданные организацией MISRA (Motor Industry Software Reliability Association). Цель стандартов - улучшить безопасность, переносимость и надежность программ для встраиваемых систем. Текст стандартов является платным.

Мы считаем сильной стороной нашего анализатора возможность взять и начать использовать его в уже существующем большом проекте. Можно запустить PVS-Studio на кодовой базе, выявить старые ошибки и затем использовать анализатор регулярно, чтобы находить новые дефекты как можно раньше.

Многие анализаторы идут по другому пути и реализуют диагностики, связанные со стандартами кодирования. Они подсказывают, как лучше именовать переменные, напоминают вставлять комментарии в начало файла и так далее. Это нужно и полезно. Однако в этом случае анализаторы очень "шумные" и генерируют огромное число предупреждений, в которых тонут предупреждения, касающиеся ошибок.

Мы решили, что PVS-Studio будет анализатором, который ищет именно ошибки. Это его конкурентное преимущество. Программист может запустить его на большой кодовой базе и быть уверен, что его не завалит невероятным количеством сообщений про оформление кода и он сможет сосредоточиться именно на багах.

Поэтому мы изначально критически относились к стандартам MISRA и долгое время не планировали их реализовывать. Стандарты MISRA предназначены для упрощения и улучшения качества кода в целом, что помогает предотвращать ошибки. То есть в нем как раз большинство диагностик относится к стилю написания кода. Лучше всего это пояснить на примере.

В стандарте MISRA есть правило, согласно которому тела операторов if должны быть заключены в фигурные скоки. В MISRA C это правило 15.6, а в MISRA C++ это 6-4-1. Пример неправильного кода:

if (i == bestOffs) continue;

Правильный код:

if (i == bestOffs)
{
  continue;
}

Подобные диагностики невозможно применять к уже существующим проектам, написанным для работы под управлением операционной системы Winodws, Linux или macOS. Например, одно только описанное правило про фигурные скобки даёт 1947 срабатываний диагностики V2507 (MISRA C 15.6, MISRA C++ 6-4-1) для проекта WinMerge. А ведь WinMerge - это маленький проект! Всего около 250 000 строк кода на языке C и C++.

До 2018 года анализатор PVS-Studio был ориентирован на проверку десктопных приложений, работающих под управлением Windows, Linux и macOS. Соответственно, поддержка MISRA имела мало практического смысла. Никто не будет внедрять в большой существующий десктопный проект этот стандарт.

Всё изменилось, когда в 2018 году мы начали поддержку встраиваемых систем. В этом году в анализаторе были поддержаны:

  • Windows. IAR Embedded Workbench, C/C++ Compiler for ARM C, C++
  • Windows/Linux. Keil µVision, DS-MDK, ARM Compiler 5/6 C, C++
  • Windows/Linux. Texas Instruments Code Composer Studio, ARM Code Generation Tools C, C++
  • Windows/Linux/macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC compiler, C, C++

В отличие от десктопных проектов, многие embedded-разработчики уже пишут проекты с учетом MISRA рекомендаций, и их поддержка в нашем анализаторе будет разработчикам однозначно полезна.

Тем не менее, мы всё равно опасаемся, что кто-то из разработчиков, не разобравшись, может посчитать, что мы "испортили" анализатор внедрением в него "странных диагностик". Поэтому MISRA диагностики по умолчанию выключены. Мы считаем это очень правильным решением. Эти диагностики можно включать, только если вы точно понимаете для чего они нужны и как их использовать.

Например, для прикладных программистов может быть непонятным, почему вдруг анализатор запрещает им использовать динамическую память. Т.е. почему вдруг нельзя выделять память, используя функцию malloc или оператор new. Но такие ограничения (V2511) хорошо понятны разработчикам встраиваемых устройств. В некоторых устройствах, работающих непрерывно, действительно недопустимо использование программ, для которых вдруг может кончиться память.

Итак, теперь вы можете установить или обновить PVS-Studio и начать использовать диагностики, реализующие правила из MISRA C и MISRA C++. Набор поддерживаемых правил неполон, но это не должно быть препятствием для начала использования PVS-Studio. На данный момент не существует ни одного статического анализатора, реализующего абсолютно все MISRA правила. В дальнейшем мы планируем расширить набор диагностических правил, реализованных в MISRA, и надеемся стать лидирующим инструментом по полноте их поддержки.

Чтобы включить MISRA диагностики в Visual Studio или в утилите PVS-Studio Standalone, необходимо в настройках сменить значение Disabled на Show All.

0596_PVS_Studio_MISRA_ru/image2.png

Поскольку Disabled означает, что предупреждения вообще не генерируются и не попадают в отчёт, то понадобится перезапуск анализа. Режим Disabled по умолчанию установлен для того, чтобы сократить размер отчёта. Включение MISRA диагностик может приводить к огромному количеству срабатываний и сильному увеличению файлов с отчётом (*.plog - файлов).

Для анализа проектов в операционных системах Linux и macOS существует утилита pvs-studio-analyzer. По умолчанию там включены только диагностики общего назначения (General Analysis, GA). Включить дополнительные правила можно с помощью опции "-a":

-a [MODE], --analysis-mode [MODE]
        MODE defines the type of warnings:
        1 - 64-bit errors;
        2 - reserved;
        4 - General Analysis;
        8 - Micro-optimizations;
        16 - Customers Specific Requests;
        32 - MISRA.
        Modes can be combined by adding the values
        Default: 4

Для включения предупреждений GA и MISRA необходимо запустить анализ со следующими параметрами:

pvs-studio-analyzer analyze ... -a 36 ... -o /path/to/report.log ...

Значение 36 - это побитовое ИЛИ для 4 (GA - диагностики общего назначения) и 32 (MISRA).

Далее рекомендуется создать несколько отчётов с разными типами предупреждений, например, так:

plog-converter -a GA:1,2 -t tasklist
  -o /path/to/ga_results.tasks /path/to/project.log
plog-converter -a MISRA:1,2,3 -t tasklist -m misra
  -o /path/to/misra_results.tasks /path/to/project.log

Первый отчёт "ga_results.tasks" будет содержать предупреждения общего назначения уровня достоверности High и Medium.

А во второй отчёт "misra_results.tasks" попадут только предупреждения, относящиеся к MISRA всех уровней. Ключ "-m misra" указывает, что в отчёт, помимо номеров в формате PVS-Studio, будут включены номера диагностик согласно классификации MISRA.

Все режимы запуска анализатора в Linux и macOS, а также форматы отчётов, описаны в документации.

P.S. Мы хотим оценить, насколько мы угадали, выбрав MISRA в качестве одного из направлений развития PVS-Studio. Если Вас заинтересовала эта тема, просьба написать нам. Даже если вы пока не планируете использовать PVS-Studio, всё равно просим написать. Мы хотим задать вам несколько уточняющих вопросов.

Дополнительные ссылки:

Популярные статьи по теме
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14.04.2016

Автор: Андрей Карпов

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Эффект последней строки

Дата: 31.05.2014

Автор: Андрей Карпов

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
PVS-Studio ROI

Дата: 30.01.2019

Автор: Андрей Карпов

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22.12.2018

Автор: Андрей Карпов

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
Как PVS-Studio оказался внимательнее, чем три с половиной программиста

Дата: 22.10.2018

Автор: Андрей Карпов

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31.07.2017

Автор: Андрей Карпов

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
PVS-Studio для Java

Дата: 17.01.2019

Автор: Андрей Карпов

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27.06.2017

Автор: Андрей Карпов

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей

Дата: 21.11.2018

Автор: Андрей Карпов

Краткое описание технологий, используемых в инструменте PVS-Studio, которые позволяют эффективно обнаруживать большое количество паттернов ошибок и потенциальных уязвимостей. Статья описывает реализа…
Зло живёт в функциях сравнения

Дата: 19.05.2017

Автор: Андрей Карпов

Возможно, читатели помнят мою статью под названием "Эффект последней строки". В ней идёт речь о замеченной мной закономерности: ошибка чаще всего допускается в последней строке однотипных блоков текс…

Комментарии (0)

Следующие комментарии

На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять