﻿# Краткий ответ про MISRA

Нас часто спрашивают, поддерживает ли анализатор PVS\-Studio стандарт MISRA\. Я решил написать короткую заметку, чтобы было удобно отвечать на письма, давая ссылку\. Короткий ответ: на данный момент мы не поддерживаем стандарты MISRA C, MISRA C\+\+ и пока не планируем их поддерживать\. Объяснение нашей позиции изложено ниже\. 


> В связи с началом поддержки в PVS\\\-Studio различных компиляторов для встраиваемых платформ мы изменили свою позицию касательно MISRA\\\. Начиная с версии 6\\\.27 анализатор PVS\\\-Studio поддерживает стандарты MISRA C и MISRA C\\\+\\\+\\\. \[Подробнее\]\(https://pvs\-studio\.ru/ru/blog/posts/cpp/0596/\)\\\.

Мы никогда не ориентировались на поддержку стандарта [MISRA C](https://ru.wikipedia.org/wiki/MISRA_C), MISRA C\+\+ и других подобных стандартов\. Мы ориентированы на поиск уже присутствующих в коде ошибок, а не на предотвращение потенциальных проблем ценой ограничения программистов\.

Например, мы не заставляем разработчика обязательно писать _break_ в _swicth_, не запрещаем использовать _goto_\. Мы считаем малополезной рекомендацию не писать комментарии вида /\* \*/, а использовать //\. Мы не видим смысла предупреждать С программистов о том, что у них в программе используется адресная арифметика: _p\+\+_;\.

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

Мы избрали другой путь\. Ни в одном стандарте не написано "не делайте опечатки"\. Однако они есть и с ними надо бороться\. Наш анализатор, например, очень силён в этом\. Чего стоит только одна диагностика [V501](https://pvs-studio.ru/ru/blog/examples/v501/)\. Подобные диагностики — это наше конкурентное преимущество\.

Да, отчасти мы можем пересекаться с MISRA\. Это значит, что некоторые вещи однозначно полезны и одновременно появляются в разных стандартах и анализаторах\.

На данный момент мы не планируем поддерживать MISRA\. Мы понимаем, что некоторым необходима поддержка этого стандарта\. Но сейчас мы хотим максимально развивать анализатор в направлении уникальных диагностик и поиске опечаток\. Я думаю, это нормально\. Если нужно соблюдать стандарт MISRA, есть множество инструментов, позволяющих это делать\.

Анализаторы, проверяющие соответствие кода стандарту MISRA:

* Coverity by Synopsys,
* Klocwork by Rogue Wave Software,
* LDRA Testbed by Liverpool Data Research Associates,
* Parasoft C/C\+\+test by Parasoft,
* PC\-Lint by Gimpel Software,
* Polyspace by MathWorks,
* QA\-C by Programming Research,
* Understand by SciTools,
* и так далее\.

Как видите, много кто умеет давать рекомендации по написанию более качественного кода\. 

Демонстрация возможностей анализатора PVS\-Studio по выявлению ошибок в коде:

* [ошибки](https://pvs-studio.ru/ru/blog/examples/), обнаруженные в Open Source проектах \(на момент написания статьи мы нашли уже более 10500 ошибок\);
* [статьи](https://pvs-studio.ru/ru/blog/inspections/) о проверке известных открытых проектов с помощью анализатора PVS\-Studio\.

**Update 2021\.** Как видите, статья устарела :\)\. Реализовав в PVS\-Studio множество диагностик общего назначения для поиска ошибок и потенциальных уязвимостей, наша команда занялась и [поддержкой](https://pvs-studio.ru/ru/pvs-studio/sast/) таких стандартов, как CWE, OWASP, SEI CERT\. В том числе сейчас \(2021 год\) мы активно развиваем поддержку стандартов MISRA C, MISRA C\+\+\. Дополнительные ссылки:

1. [Классификация предупреждений PVS\-Studio согласно стандартам: MISRA C, MISRA C\+\+](https://pvs-studio.ru/ru/pvs-studio/sast/misra/)\.
1. [Что такое MISRA и как её готовить](https://pvs-studio.ru/ru/blog/posts/cpp/0702/)\.
1. [Зачем нужен отчёт MISRA Compliance и как его получить в PVS\-Studio?](https://pvs-studio.ru/ru/blog/posts/cpp/0863/)