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