В этом примере вы записываете покрытие для модели, которая содержит комбинацию блоков кода и других 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, чтобы начать запись покрытия. В конце симуляции откроются Результаты покрытия Explorer, показывающий результаты последнего анализа покрытия. Блоки в модели подсвечиваются в разных цветах, соответствующих уровню покрытия, достигнутому каждым блоком.
Обозреватель результатов покрытия предлагает несколько опций отображения и отчетности о результатах покрытия. Выберите Not_Engaged_with_Enable
группу на вкладке Current Cumulative Data левой панели. Щелкните ссылку Generate report в нижней части обозревателя результатов покрытия, чтобы сгенерировать отчет о покрытии HTML во встроенном MATLAB® веб-браузер. В отчете о покрытии перечислено покрытие модели для блоков модели Simulink и покрытие кода для блоков кода.
Прокрутите вниз, чтобы просмотреть метрики покрытия для блока S-Function в отчете о покрытии. Щелкните ссылку Detailed Report, чтобы открыть отчет о покрытии кода для блока S-Function. Для получения дополнительной информации об отчете о покрытии кода для блоков S-Function смотрите Просмотр результатов покрытия для пользовательского кода C/C + + в блоках S-Function.
В этом примере мы обосновываем покрытие для одной группы входных сигналов, создавая фильтр покрытия. В отчете о покрытии кода для блока S-Function, созданного в Результаты by Generating a Coverage Report, прокрутите вниз до Decision/Condition 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 | Создание и использование фильтров покрытия | Типы отчетов о покрытии