В этом примере вы записываете покрытие для модели, которая содержит комбинацию блоков кода и других блоков Simulink®.
Откройте модель.
open_system('ex_cc_cruise_control_doublepress_sfun');
Модель является системой круиз-контроля, которая состоит из тестов и входных сигналов от блока Signal Builder. Сигналы от действия Signal Builder как входные параметры к Stateflow® строят диаграмму ComputeTargetSpeed
, который затрагивает или расцепляет систему круиз-контроля и устанавливает целевую скорость, tspeed
.
В Редакторе Simulink выберите Model Settings на вкладке Modeling. Прежде, чем установить опции покрытия кода, на панели Code Generation в диалоговом окне Configuration Parameters, устанавливает System target file в меню Target selection к ert.tlc
. Перейдите к вкладке Verification панели Code Generation. От вкладки Code coverage for SIL or PIL выберите None (use Simulink Coverage)
как инструмент покрытия кода.
В панели Coverage, набор опции для покрытия, вычисленного в процессе моделирования.
Выберите Enable coverage analysis.
В разделе Include in analysis гарантируйте, что C/C++ S-Functions выбран.
В разделе Coverage metrics выберите Modified Condition Decision (MCDC)
как Structural coverage level. Примените изменения путем нажатия на Apply.
Откройте RejectDoublePress
Блок S-Function Builder. В Build options вкладки Build Info выберите Enable support for coverage. Чтобы создать S-функцию, нажмите Build.
Чтобы создать S-функцию, необходимо было установить компилятор. Для получения дополнительной информации о поддерживаемых компиляторах для различных платформ см. Поддерживаемые и Совместимые Компиляторы.
Откройте блок Signal Builder.
open_system('ex_cc_cruise_control_doublepress_sfun/Signal Builder');
Signal Builder состоит из восьми групп сигнала с пятью сигналами каждый. В этом примере мы симулируем все группы сигнала и записываем покрытие. Нажмите Run all and produce coverage, чтобы начать записывать покрытие. В конце симуляции Проводник Результатов покрытия открывается, показывая результаты для последнего анализа покрытия. Блоки в модели подсвечены в различных цветах, соответствующих уровню покрытия, достигнутого каждым блоком.
Проводник Результатов покрытия предлагает несколько опций для отображения и создания отчетов о результатах покрытия. Выберите Not_Engaged_with_Enable
группа во вкладке Current Cumulative Data левой панели. Щелкните по ссылке Generate report в нижней части Проводника Результатов покрытия, чтобы сгенерировать отчет покрытия HTML во встроенном в MATLAB® веб-браузере. Отчет покрытия перечисляет покрытие модели для блоков модели Simulink и покрытие кода для блоков кода.
Прокрутите вниз, чтобы просмотреть метрики покрытия для блока S-Function в отчете покрытия. Щелкните по ссылке Detailed Report, чтобы открыть отчет покрытия кода для блока S-Function. Для получения дополнительной информации о покрытии кода сообщают для блоков S-Function, seeView Результаты покрытия для Пользовательского Кода C/C++ в Блоках s-function.
В этом примере мы выравниваем по ширине покрытие для одной группы входного сигнала путем создания фильтра покрытия. В отчете покрытия кода для блока S-Function, созданного в Результатах Анализа путем Генерации Отчета Покрытия, прокрутите вниз к Решению/Условию 2,1 !(CoastSetSwIn[0] && AccelResSwIn[0])
. Этим условием никогда не является False
для текущего теста. Мы можем поэтому выровнять по ширине это условие в нашем анализе покрытия.
Щелкните по ссылке Justify or Exclude под подробными результатами для этого условия. Вкладка Filter Проводника Результатов покрытия открывается, и правило, фильтрующее этот переход, добавляется. Измените Mode для этого правила к Justified
и введите описание для Rationale, такого как “выражение не может быть ложным”. Нажмите Apply, чтобы применить изменения.
После того, как вы нажмете Apply, ссылка Generate report становится доступной. Щелкните по ссылке, чтобы сгенерировать отчет с обновленным фильтром покрытия. Новое покрытие кода сообщает для RejectDoublePress
Черные списки S-Function исключенное условие под Objects Filtered from Coverage Analysis. Подробные результаты для условия !(CoastSetSwIn[0] && AccelResSwIn[0])
покажите, что недостающее покрытие для этого условия было выровнено по ширине. Выровненные по ширине объекты обработаны, как удовлетворено при создании отчетов о процентах покрытия и кажутся голубыми в Сводных данных Покрытия.
Для получения дополнительной информации о фильтрах покрытия смотрите, что Покрытие Фильтрует.
Покрытие для Пользовательского Кода C/C++ в Моделях Simulink | Создавая и Используя фильтры покрытия | Типы отчетов покрытия