Анализируйте код, чтобы обнаружить ошибки, проверить соответствие стандартов и оценить ключевые метрики, такие как длина и цикломатическая сложность. Обычно для рукописного кода, вы проверяете на ошибки времени выполнения с инструментом статического анализа кода и запускаете тесты, которые оценивают код против требований и оценивают покрытие кода. На основе результатов совершенствуйте код и добавьте тесты. Для сгенерированного кода продемонстрируйте, что выполнение кода приводит к эквивалентным результатам к модели при помощи тех же тестов и базовым результатам. Сравните покрытие кода с покрытием модели. На основе результатов испытаний добавьте тесты и измените модель, чтобы регенерировать код.
Этот рабочий процесс описывает, как проверять, производит ли ваша модель MISRA® C:2012 совместимый код и как проверять ваш сгенерированный код на метрики кода, дефекты кода и соответствие MISRA. Чтобы произвести больше совместимого кода MISRA из вашей модели, вы используете генерацию кода и Model Advisor. Чтобы проверять, является ли код MISRA совместимый, вы используете средство проверки Polyspace® MISRA C:2012 и возможности генерации отчета. В данном примере вы используете модель simulinkCruiseErrorAndStandardsExample
. Открыть модель:
Откройте проект.
path = fullfile(matlabroot,'toolbox','shared','examples',... 'verification','src','cruise') run(fullfile(path,'slVerificationCruiseStart'))
Из проекта откройте модель simulinkCruiseErrorAndStandardsExample
.
Прежде чем вы сгенерируете код из своей модели, существуют шаги, которые можно сделать, чтобы сгенерировать код, более совместимый с MISRA C и более совместимый с Polyspace. Этот пример показывает, как использовать Советника Генерации кода, чтобы проверять вашу модель прежде, чем сгенерировать код.
Щелкните правой кнопкой по целевой скорости Compute и выберите C/C++> Code Generation Advisor.
Выберите папку Code Generation Advisor. Добавьте цель Polyspace
. Цель MISRA C:2012 guidelines
уже выбрана.
Нажмите Run Selected Checks.
Советник Генерации кода проверяет, существуют ли какие-либо блоки или параметры конфигурации, которые не рекомендуются для соответствия MISRA C:2012 и анализа кода Polyspace. Для этого режима, проверки на несовместимые передачи блоков, но существуют некоторые параметры конфигурации, которые несовместимы с соответствием MISRA и проверкой Polyspace.
Нажмите на проверку, которая не была передана. Примите изменения параметра путем выбора Modify Parameters.
Повторно выполните проверку путем выбора Run This Check.
Прежде чем вы сгенерируете код из своей модели, существуют шаги, которые можно сделать, чтобы сгенерировать код, более совместимый с MISRA C и более совместимый с Polyspace. Этот пример показывает вам, как использовать Model Advisor, чтобы проверять вашу модель далее прежде, чем сгенерировать код.
Для большего количества проверки прежде, чем сгенерировать код, можно также запустить Руководства по моделированию для MISRA C:2012.
В нижней части окна Code Generation Advisor выберите Model Advisor.
Под папкой By Task выберите советника Modeling Guidelines for MISRA C:2012 проверки.
Нажмите Run Selected Checks и рассмотрите результаты.
Если какой-либо сбой задач, сделайте предложенные модификации и повторно выполните проверки до передачи руководств по моделированию MISRA.
После того, как вы сделали образцовую проверку соответствия, можно теперь сгенерировать код. С Polyspace можно проверять код на соответствие с MISRA C:2012 и сгенерировать отчеты продемонстрировать соответствие с MISRA C:2012.
В редакторе Simulink® щелкните правой кнопкой по целевой скорости Compute и выберите C/C++> Build This Subsystem.
Используйте настройки по умолчанию для настраиваемых параметров и выберите Build.
После того, как код сгенерирован, щелкните правой кнопкой по целевой скорости Compute и выберите Polyspace> Options.
Нажмите кнопку Configure (Polyspace Bug Finder). Эта опция позволяет вам выбирать более усовершенствованные аналитические опции Polyspace в окне настройки Polyspace.
На той же панели выберите Calculate Code Metrics. Эта опция включает метрические вычисления кода для вашего сгенерированного кода.
Сохраните и закройте окно настройки Polyspace.
Из вашей модели щелкните правой кнопкой по целевой скорости Compute и выберите Polyspace> Verify Code Generated For> Selected Subsystem.
Polyspace Bug Finder™ анализирует сгенерированный код для подмножества проверок MISRA и дефектных проверок. Вы видите прогресс анализа в Окне Команды MATLAB. Если анализ закончен, среда Polyspace открывается.
После того, как вы запустите анализ Polyspace своего сгенерированного кода, среда Polyspace показывает вам результаты инструмента статического анализа кода. Существует 50 MISRA C:2012, кодирующий нарушения правила в вашем сгенерированном коде.
Расширьте дерево для правила 8.7 и нажатия кнопки через различные результаты.
Правило 8.7 утверждает эти функции, и объекты не должны быть глобальной переменной, если функция или объект локальны. Когда вы щелкаете посредством этих 8,7 нарушений, вы видите, что эти результаты относятся к переменным, которые другие компоненты также используют, такие как CruiseOnOff
. Можно аннотировать код или модель, чтобы выровнять по ширине каждый результат. Но, потому что эта модель является модулем в большей программе, можно также изменить настройку анализа, чтобы проверять только подмножество правил MISRA.
В вашей модели щелкните правой кнопкой по целевой скорости Compute и выберите Polyspace> Options.
Установите Settings from (Polyspace Bug Finder) опция к Project configuration
. Эта опция позволяет вам выбирать подмножество правил MISRA в настройке Polyspace.
Нажмите кнопку Configure.
В окне Polyspace Configuration, на панели Coding Rules & Code Metrics, выбирают флажок Check MISRA C:2012 и из выпадающего списка, выбирают single-unit-rules
. Теперь, Polyspace проверяет только правила MISRA C:2012, которые применимы к единому блоку.
Сохраните и закройте окно настройки Polyspace.
Повторно выполните анализ с новой настройкой.
Когда среда Polyspace вновь открылась, нет никаких результатов MISRA, только метрических результатов кода. Polyspace правил показал, ранее были найдены, потому что модель анализировалась отдельно. Когда вы ограничили Polyspace правил, проверяемый на подмножество единого блока, никакие нарушения не были найдены.
Когда эта модель интегрирована со своей родительской моделью, можно добавить остальную часть правил MISRA C:2012.
Чтобы продемонстрировать соответствие с MISRA C:2012 и сообщить относительно ваших метрик сгенерированного кода, необходимо экспортировать результаты. Этот раздел показывает вам, как сгенерировать отчет после анализа. Если вы хотите сгенерировать отчет каждый раз, когда вы запускаете анализ, видите Generate report
.
Если они уже не открыты, открывают ваши результаты в среде Polyspace.
От панели инструментов выберите Reporting> Run Report.
Выберите BugFinderSummary как свой тип отчета.
Нажмите Run Report.
Отчет сохранен в той же папке как ваши результаты.
Чтобы открыть отчет, выберите Reporting> Open Report.