Можно анализировать код, чтобы обнаружить ошибки, проверить соответствие стандартов и оценить ключевые метрики, такие как длина и цикломатическая сложность. Для рукописного кода вы обычно проверяете на ошибки времени выполнения с инструментом статического анализа кода и запускаете тесты, которые оценивают код против требований и оценивают покрытие кода. На основе результатов вы совершенствовали код и добавляете тесты.
В этом примере вы генерируете код и демонстрируете, что выполнение кода приводит к эквивалентным результатам к модели при помощи тех же тестов и базовым результатам. Затем вы сравниваете покрытие кода с покрытием модели. На основе результатов испытаний добавьте тесты и измените модель, чтобы регенерировать код.
Этот рабочий процесс описывает, как проверять, производит ли ваша модель MISRA® Совместимый код C:2012 и как проверять ваш сгенерированный код на метрики кода и дефекты. Чтобы произвести больше совместимого кода 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 target speed и выберите C/C++ Code> Code Generation Advisor.
Выберите папку Code Generation Advisor. На правой панели переместите Polyspace
к Selected objectives - prioritized. MISRA C:2012 guidelines
цель уже выбрана.
Нажмите Run Selected Checks.
Советник Генерации кода проверяет, включает ли модель блоки или параметры конфигурации, которые не рекомендуются для податливости MISRA C:2012 и анализа кода Polyspace. Для этой модели проверка на несовместимые передачи блоков, но некоторые параметры конфигурации несовместима с податливостью MISRA и проверкой Polyspace.
Кликните по проверке, которая не передала. Примите изменения параметра путем выбора Modify Parameters.
Повторно выполните проверку путем выбора Run This Check.
Прежде чем вы сгенерируете код из своей модели, используйте Model Advisor, чтобы проверять вашу модель на MISRA C и податливость Polyspace. Этот пример показывает вам, как использовать Model Advisor, чтобы проверять вашу модель прежде, чем сгенерировать код.
В нижней части окна Code Generation Advisor выберите Model Advisor.
Под папкой By Task выберите советника Modeling Standards for MISRA C:2012 проверки.
Нажмите Run Selected Checks и рассмотрите результаты.
Если какой-либо сбой задач, сделайте предложенные модификации и повторно выполните проверки до передачи руководств по моделированию MISRA.
После того, как вы сделали проверку податливости модели, можно сгенерировать код. С Polyspace можно проверять код на податливость с MISRA C:2012 и сгенерировать отчеты продемонстрировать податливость с MISRA C:2012.
В Simulink® редактор, щелкните правой кнопкой по Compute target speed и выберите C/C++ Code> Build This Subsystem.
Используйте настройки по умолчанию для настраиваемых параметров и выберите Build.
После того, как код сгенерирован в Редакторе Simulink, щелкните правой кнопкой по Compute target speed и выберите Polyspace> Options.
Нажмите Configure, чтобы выбрать более усовершенствованные опции анализа Polyspace в окне настройки Polyspace.
На левой панели нажмите Coding Standards & Code Metrics, затем выберите Calculate Code Metrics, чтобы включить метрические вычисления кода для вашего сгенерированного кода.
Сохраните и закройте окно настройки Polyspace.
Из вашей модели щелкните правой кнопкой по Compute target speed и выберите Polyspace> Verify> Code Generated For Selected Subsystem.
Polyspace Bug Finder™ анализирует сгенерированный код для подмножества проверок MISRA. Вы видите прогресс анализа в командном окне MATLAB. После аналитических концов открывается среда Polyspace.
Среда Polyspace показывает вам результаты инструмента статического анализа кода.
Расширьте дерево для правила 8.7 и нажатия кнопки через различные результаты.
Правило 8.7 утверждает эти функции, и объекты не должны быть глобальной переменной, если функция или объект локальны. Когда вы щелкаете посредством этих 8,7 нарушений, вы видите, что эти результаты относятся к переменным, которые другие компоненты также используют, такие как CruiseOnOff
. Можно аннотировать код или модель, чтобы выровнять по ширине каждый результат. Поскольку эта модель является модулем в большей программе, можно также изменить настройку анализа, чтобы проверять только подмножество правил MISRA.
В вашей модели щелкните правой кнопкой по Compute target speed и выберите Polyspace> Options.
Установите опцию Settings from на Project configuration
выбрать подмножество MISRA управляет в настройке Polyspace.
Нажмите Configure.
В окне Polyspace, на левой панели, нажимают Coding Standards & Code Metrics. Затем выберите Check MISRA C:2012 и, из выпадающего списка, выберите single-unit-rules
. Теперь Polyspace проверяет только правила MISRA C:2012, которые применимы к единому блоку.
Сохраните и закройте окно настройки Polyspace.
Повторно выполните анализ с новой настройкой.
Polyspace правил показал, ранее были найдены, потому что модель анализировалась отдельно. Когда вы ограничили Polyspace правил, проверяемый на подмножество единого блока, Polyspace нашел только два нарушения.
Когда вы интегрируете эту модель с ее родительской моделью, можно добавить остальную часть правил MISRA C:2012.
Чтобы продемонстрировать податливость с MISRA C:2012 и сообщить относительно ваших метрик сгенерированного кода, необходимо экспортировать результаты. Если вы хотите сгенерировать отчет каждый раз, когда вы запускаете анализ, видите Generate report
(Polyspace Bug Finder).
Если они уже не открыты, открывают ваши результаты в среде Polyspace.
Из панели инструментов выберите Reporting> Run Report.
Выберите BugFinderSummary как свой тип отчета.
Нажмите Run Report.
Отчет сохранен в той же папке как ваши результаты.
Чтобы открыть отчет, выберите Reporting> Open Report.
Вы ранее показали, что функциональность модели удовлетворяет свои требования путем выполнения тестов на основе тех требований. Теперь запустите те же тесты на сгенерированном коде, чтобы показать, что код приводит к эквивалентным результатам и выполняет требования. Затем сравните покрытие кода с покрытием модели, чтобы видеть степень, до которой тесты осуществили сгенерированный код.
В MATLAB, в окне проекта, открывают tests
папка, затем открытый SILTests.mldatx
. Файл открывается в менеджере по Тесту.
Рассмотрите тест. На панели Test Browser перейдите к SIL Equivalence Test Case
. Этот эквивалентный тест запускает две симуляции для simulinkCruiseErrorAndStandardsExample
модель с помощью тестовой обвязки.
Симуляция 1 является симуляцией модели в режиме normal mode.
Симуляция 2 является программным обеспечением в цикле (SIL) симуляция. Для SIL симуляции тест запускает код, сгенерированный из модели вместо того, чтобы запустить модель.
Эквивалентный тест регистрирует один выходной сигнал и сравнивает результаты симуляций. Тест также собирает измерения покрытия для обеих симуляций.
Запустите эквивалентный тест. Выберите тест и нажмите Run.
Рассмотрите результаты в менеджере по Тесту. В панели Results and Artifacts выберите SIL Equivalence Test Case, чтобы видеть результаты испытаний. Тест передал, и результаты показывают, что код привел к тем же результатам как модель для этого теста.
Расширьте раздел Coverage Results результатов. Измерения покрытия показывают степень, до которой тест осуществил модель и код. Когда вы запускаете несколько тестов, можно просмотреть агрегированные измерения покрытия в результатах для целого запуска. Используйте результаты покрытия, чтобы добавить, что тесты и удовлетворять требования покрытия, как показано в Выполняют Функциональное Тестирование и Анализируют Тестовое покрытие.
Можно также протестировать сгенерированный код на целевом компьютере путем выполнения процессора в цикле (PIL) симуляция. Путем добавления PIL симуляции в тесты можно сравнить результаты испытаний и результаты покрытия от модели до результатов сгенерированного кода, когда это работает на целевом компьютере. Для получения дополнительной информации смотрите Процессор в Симуляции цикла (Embedded Coder).