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

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

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

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

Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

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


Если вы так и не получили ответ, пожалуйста, проверьте папку
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, всё равно просим написать. Мы хотим задать вам несколько уточняющих вопросов.

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

Популярные статьи по теме
PVS-Studio для Java

Дата: 17 Янв 2019

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

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

Дата: 21 Ноя 2018

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

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

Дата: 19 Май 2017

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

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

Дата: 31 Май 2014

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

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

Дата: 16 Окт 2017

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

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

Дата: 22 Дек 2018

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

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

Дата: 30 Янв 2019

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

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

Дата: 20 Мар 2017

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

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

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

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

Дата: 31 Июл 2017

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

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

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

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