Стандарт Misra для встраиваемого ПО

У меня есть требование сделать большой объем кода совместимым с MISRA.
Первый вопрос: может ли кто-нибудь дать оценка за прохождение хорошо написанного кода для встроенной системы на основе опыта. Я понимаю, что "хорошо написано" плохо определено и расплывчато, поэтому я прошу приблизительную оценку. Второй вопрос: любые рекомендации по инструменту, который можно настраивать (например, позволять подавлять определенные предупреждения) и использовать в среде автоматической сборки (например, в интерфейсе командной строки)
Любые другие полезные предложения, которые могут помочь с этой задачей. Спасибо Илья.

Этот вопрос во многом зависит от того, какая версия MISRA вам нужна. Последней версии 2012 года по-прежнему не хватает инструментальной поддержки со стороны многих компаний.

Lundin 20.12.2013 14:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
1
8 157
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Я использую PC Lint для статического анализа кода C и C++. Его можно настроить для отображения того, какие правила MISRA были нарушены, и он имеет интерфейс командной строки.

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

Я бы поддержал рекомендацию Грега для PC Lint, но стоит также взглянуть на Splint с открытым исходным кодом, хотя между ними (и системой предупреждений компилятора), я полагаю, вы все равно сможете охватить только 80% правил Misra. - остальное, вероятно, потребуется проверить вручную.

Ответ принят как подходящий

Я также очень рекомендую PC-Lint. Если вы собираете свой код с помощью Visual Studio, я рекомендую подключаемый модуль Visual Lint от Riverblade. Если вы не можете скомпилировать код в Visual Studio, вы все равно можете запустить PC-Lint из командной строки, чтобы добиться хороших результатов.

Некоторые компиляторы встроенных систем предоставляют тестирование на соответствие MISRA в виде предупреждений компилятора. Я использую компилятор IAR для разработки Arm7 / Arm9. Он предоставляет простой в настройке контрольный список соответствия MISRA прямо в настройке компилятора.

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

Приблизительная оценка:
2-3 дня, чтобы научиться пользоваться PC-Lint. Первоначальный этап приведения существующего кода в соответствие с MISRA: от 10 до 25 процентов времени, затрачиваемого на написание кода в первую очередь. Обеспечение соответствия кода MISRA: от 5 до 10 процентов добавлено к разработке кода. Половина этих затрат - это изменение привычек ваших программистов, чтобы они следовали «методу MISRA». Другая половина - это дополнительные расходы на тестирование и проверку кода для обеспечения соответствия MISRA.

Обратите внимание, что ни один из этих инструментов не поддерживает MISRA-C: 2012. Я недавно спросил IAR, поддерживают ли они это, и они, похоже, даже не знали, что вышла новая версия ...

Lundin 20.12.2013 14:10

При этом я бы порекомендовал приобрести дешевый инструмент, такой как Lint. Он будет давать сотни ложных предупреждений, как и якобы «современные» статические анализаторы, которые стоят целое состояние. Дорогие инструменты, такие как LDRA или Klocwork, не менее ошибочны, чем Lint, когда дело доходит до проверки MISRA.

Lundin 20.12.2013 14:18

Я использовал коммерческий инструмент под названием QAC. Инструмент может применять MISRA

Он имеет интерфейс командной строки, поэтому вы можете настроить его для запуска из среды автоматической сборки. Применяемые правила можно настраивать, но ожидайте, что кто-то потратит некоторое время на их настройку. U. Применение MISRA довольно простое и работает достаточно хорошо. Мне сказали (и это всего лишь третья сторона), что это один из инструментов, который некоторые агентства (например, FDA) используют для оценки кода. Как и в большинстве инструментов статического анализа, необходимо иметь дело с шумом (ложными срабатываниями). В последний раз, когда я использовал его, у него не было хороших средств для того, чтобы пометить / остановить ложное срабатывание от повторения (без изменения кода, на который он жаловался).

Я подозреваю, что младшему инженеру потребуется до недели (4-5 дней), чтобы настроить его (при условии, что он настроен заставить его работать так, как вы хотите).

Кстати, другие коммерческие инструменты статического анализа, вероятно, также имеют принудительное применение MISRA. Как сообщается (согласно их торговому представителю), Klocwork делает.

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

Lundin 20.12.2013 14:15

У нас была аналогичная проблема с модификацией правил Misra. У нас были некоторые проблемы с качеством кода в большом проекте, и мы решили использовать MISRA для улучшения качества кода.

Мы используем компилятор Green Hills, который поддерживает правила MISRA C. Также доступны автономные шашки. В зависимости от того, что вы хотите сделать, это может немного перебить переключение на все правила. Мы включали по одному правилу за раз, чтобы дать людям время исправить ограниченное количество похожих проблем, иначе вы будете полностью ошеломлены количеством ошибок.

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

Иногда бывает трудно добиться соответствия старому коду, поскольку никто точно не знает, как он работает. Надеюсь, у вас есть модульные тесты.

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

Я рекомендую писать новый код с учетом MISRA; следовательно, будет намного легче соблюдать требования.

Однако это не всегда возможно - в частности, при попытке реконструировать код в соответствии с рекомендациями. В этом случае я предлагаю вам сосредоточиться на Обязательных правилах и относиться к Советам как к бонусу ... здесь также применимы затраты и выгода!

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

Другие вопросы по теме