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

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

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

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

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

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

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


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

>
>
>
Зачем нужен отчёт MISRA Compliance и ка…

Зачем нужен отчёт MISRA Compliance и как его получить в PVS-Studio?

06 Сен 2021

Если вы не понаслышке знаете о MISRA и хотели бы понимать, соответствует ли ваш проект какому-то из стандартов ассоциации MISRA, то есть решение. Имя ему - MISRA Compliance. С недавних пор PVS-Studio научился генерировать отчёт соответствия по этому стандарту, и хочется поделиться тем, как это делается. Возможно, кому-то это упростит жизнь.

0863_MisraCompliance_ru/image1.png

Если вам больше хочется посмотреть об отчете MISRA Compliance, то для вас доступно видео:

Что такое MISRA Compliance

MISRA Compliance – это стандарт, который позволяет понять, соответствует ли ваш проект стандарту MISRA C\C++ с учетом всех отклонений и рекатегоризаций. MISRA Compliance применим ко всем стандартам ассоциации MISRA, но в данной статье мы рассмотрим его использование на примере стандарта MISRA C 2012.

В руководящих принципах MISRA C 2012 признаётся, что в некоторых ситуациях соблюдение требований неоправданно или даже невозможно. В случаях отклонений от правил всё должно быть задокументировано. Однако после может быть проблематично понять, соответствует ли в итоге программа данному стандарту. Здесь на помощь и приходит стандарт MISRA Compliance.

Правила получения MISRA Compliance

Основное, что нужно сделать, – это понять, соответствует ли ваш проект MISRA C 2012 или нет. Для этого нам необходимо получить GCS (Guideline Compliance Summary). GCS включает запись для каждого руководства и регистрирует уровень соответствия им, как это разрешено его категорией MISRA. Проще говоря, нам нужно отобразить номер правила, его категорию и информацию о соответствии с ним. Вот пример как это должно выглядеть:

0863_MisraCompliance_ru/image2.png

Номер правила и его категория по умолчанию берутся из стандарта. Однако MISRA Compliance позволяет изменять (рекатегоризировать) уровень руководящих принципов, хоть это и не обязательно. Делается это каждым конкретным пользователем для конкретного проекта в соответствии с GRP (Guideline Re-categorization Plan). GRP – это такой допустимый набор преобразований из одного уровня в другой. Вот так это выглядит в виде таблицы:

0863_MisraCompliance_ru/image3.png

И чтобы было проще, давайте на примере. Допустим у нас есть правило 1.1, у которого уровень равен Required. Согласно таблице, мы можем повысить уровень предупреждения до Mandatory или оставить его неизменным. Это отображено зелеными ячейками. При этом понижение уровня до Advisory или Disapplied не допускается. Это отображено красными ячейками.

На основе получившихся категорий для правил можно указывать соответствия. Возможные варианты соответствий для MISRA-категорий выглядят так:

0863_MisraCompliance_ru/image4.png

Эта таблица используется для того, чтобы сказать, соответствует ли ваш проект стандарту MISRA C 2012. А конкретно, если у вас есть хотя бы одно соответствие, которое попадает в красную секцию (таблица выше), то вы не соответствуете стандарту.

Чтобы было проще, давайте опять для наглядности возьмём правило 1.1 со стандартным значением категории, равной Required. Смотрим в таблицу и видим, что допустимые значения соответствия для Required – это Compliance или Deviations (чуть подробнее о смысле этих статусов будет в пункте ниже). То есть, если в ваш проект соответствует правилу 1.1, либо соответствует, но с отклонениями, то все хорошо и можно смотреть следующее правило. Если есть хотя бы одно соответствие с Violations или Disapplied, то проект не соответствует MISRA C 2012. Если все правила имеют только допустимые значения, то поздравляю, ваш проект соответствует стандарту MISRA C 2012. Если у вас есть соответствие, которое попадает в красную секцию (таблица выше), то вы не соответствуете стандарту.

Собственно, это все основные вещи, которые нужно знать для генерации MISRA Compliance отчёта.

Генерация отчета MISRA Compliance в PVS-Studio

Чтобы сгенерировать отчет, нужно воспользоваться утилитой PlogConverter.exe или plog-converter на Windows и Unix соответственно. Данные утилиты также распространяются в составе дистрибутивов. На момент написания статьи PVS-Studio умеет выдавать отчёт соответствия только для стандарта MISRA C 2012. Также весь описанный здесь функционал будет доступен с версии PVS-Studio 7.15 либо запросите бета-версию.

Для генерации отчёта MISRA Compliance необходимо выполнить анализ. Как это сделать на Windows, можно почитать вот тут, а для Unix - тут. Обратите внимание, что вам следует включить все диагностики, связанные с MISRA. Иначе вы добровольно уменьшаете покрытие MISRA-правил. Как проверить, включены ли все правила, описано в предоставленных ссылках на документацию про анализ.

Затем используем одну из утилит конвертации отчёта. Пример запуска PlogConverter.exe:

"C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" "path_to_report_file" \
-t MisraCompliance -o "path_to_MISRA_report" --grp "path_to_grp.txt"

И пример команды для plog-converter:

plog-converter "path_to_report_file" -t misra_compliance \
-o "path_to_MISRA_report" --grp "path_to_grp.txt"

Сам отчёт представляет собой html-страницу, которая удобно подходит для печати. Вот пример отчёта, когда проект не соответствует MISRA C 2012:

0863_MisraCompliance_ru/image5.png

Отчёт, когда проект соответствует MISRA C 2012:

0863_MisraCompliance_ru/image6.png

Итак, пройдемся по столбцам:

  • Guideline содержит номера правил и директив стандарта MISRA C;
  • Category содержит категорию правила или директивы, указанную в стандарте;
  • Recategorication содержит категорию после рекатегоризации в соответствии с GRP;
  • Compliance содержит статус соответствия проверяемого кода правилу. Красным цветом выделено то, что мешает соответствию стандарту MISRA C 2012.

В нашем случае GRP представляет собой txt-файл. Пример содержания файла с допустимыми переходами:

Rule 2.1 = Mandatory
Rule 8.13 = Required
Directive 4.3 = Mandatory
Rule 2.6 = Disapplied

Если этот файл содержит понижение категории, то утилита выдаст сообщение об ошибке и не сгенерирует отчёт. Исключением является Advisory-категория, которая может понижаться до Disapplied. Если что, то вот так располагаются категории от наиболее важной к наименее важной:

0863_MisraCompliance_ru/image7.png

Статусы соответствия проверяемого кода означают следующее:

  • Compliant – в проекте нет отклонений по данному правилу;
  • Deviations – отклонения от правила обнаружены и задокументированы. Чтобы утилита поняла про необходимость игнорирования конкретного предупреждения, его следует разметить как ложное (Mark as False Alarm). В скобочках указывается число подтвержденных отклонений;
  • Violations – существует хотя бы одно отклонение от правила, которое не было задокументировано. В скобочках указывается число таких отклонений. Если кроме Violations для правила есть и Deviations-предупреждения, то будут отображены оба статуса;
  • Disapplied – категория выключена и никак не будет учитываться. Применимо только к Advisory-категориям;
  • Not Supported – данное правило не поддерживается анализатором. На момент написания статьи PVS-Studio уже покрыло 60% стандарта MISRA C 2012. Но мы на этом не останавливаемся и планируем к концу года повысить этот показатель до 85%. О текущем положении дел с MISRA вы можете почитать вот тут.

Ну и самое главное – это заключение о соответствии или несоответствии проекта стандарту MISRA C 2012. Код соответствует стандарту, если:

  • Все Mandatory-правила имеют статус Compliant;
  • Все Required-правила имеют статус Compliant и\или Deviations;
  • Advisory-правила могут иметь любой статус;
  • Disapplied-правила игнорируются.

Заключение

Не стесняйтесь пробовать новый отчёт. Если возникнут какие-либо трудности, проблемы или пожелания, то обязательно напишите нам в поддержку.

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

Популярные статьи по теме
Как различить C и C++ разработчиков по их коду

Дата: 12 Май 2022

Автор: Гость

Так уж случилось, что я пишу код для разных IoT-железок, связанных с электричеством, типа зарядных станций автомобилей. Поскольку аппаратных ресурсов, как правило, вполне достаточно, то основным фоку…
Отладочный вывод на микроконтроллерах: как Concepts и Ranges отправили мой printf на покой

Дата: 06 Май 2022

Автор: Гость

Здравствуйте! Меня зовут Александр, и я работаю программистом микроконтроллеров.
Нереальный baselining или доработки PVS-Studio для Unreal Engine проектов

Дата: 26 Апр 2022

Автор: Валерий Комаров

Статический анализатор PVS-Studio постоянно развивается: улучшаются различные механизмы, происходит интеграция с игровыми движками, IDE, CI/CD и другими системами и сервисами. Благодаря этому несколь…
Разбор некоторых вредных советов для С++ программиста

Дата: 21 Апр 2022

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

Юмор юмором, но осторожность не повредит. Вдруг кому-то не до конца понятно, почему какой-то из советов является вредным. Здесь можно найти соответствующие пояснения.
Четыре причины проверять, что вернула функция malloc

Дата: 20 Апр 2022

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

Некоторые разработчики пренебрежительно относятся к проверкам: удалось ли выделить память с помощью функции malloc или нет. Их логика проста – памяти всегда должно хватить. А если не хватит, всё равн…

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

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