Стандарт Misra для встраиваемого программного обеспечения

StackOverflow https://stackoverflow.com/questions/62946

Вопрос

У меня есть требование сделать большой объем кода 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, не слишком сложная задача - если вы будете следовать достаточно хорошим практикам программирования.Некоторые правила указателей могут показаться вам немного сложными, если код, который вы пытаетесь привести в соответствие, содержит какую-то странную и замечательную арифметику указателей.

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

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

Я использовал коммерческий инструмент под названием QAC.Этот инструмент способен обеспечить соблюдение МИСРА

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top