В этом примере показано, как использовать фильтры покрытия модели Simulink® Coverage™, чтобы исключить элементы модели из записи покрытия и выровнять по ширине недостающее покрытие в отчетах.
В процессе проверки модель может содержать несколько построений, которые предотвращают полное покрытие модели, такое как подсистема, которая содержит некоторый драйвер для контроллера, который не тестируется и не относится к процессу валидации. Фильтрация этих построений от записи покрытия и создания отчетов позволяет вам фокусироваться на других аспектах недостающего покрытия, которое может и должно быть протестировано.
Фильтры покрытия хранятся в .cvf
файлы. Файлы фильтра могут охватить многоуровневые модели. Каждый фильтр состоит из правил, которые задают объекты модели, которые будут исключены или выровнены по ширине в результатах покрытия. Можно отфильтровать любой объект модели, который получает покрытие или содержит другие элементы, такие как подсистема.
Фильтры покрытия могут быть созданы и применялись или прежде или после симуляции модели. Оба рабочих процесса описаны в этом примере.
Этот пример использует модель slvnvdemo_covfilt
. Модель показывает некоторые общие шаблоны, которые могут должны быть быть отфильтрованы от записи покрытия и создания отчетов.
Откройте модель, чтобы начаться.
В slvnvdemo_covfilt
модель, блок Saturation имеет нижний предел 0
и верхний предел 200
. Входом с этим блоком является rate
сигнал, который никогда не может быть меньше чем или равен 0
. Это приведет к недостающему покрытию, когда нижний предел блока Saturation не полностью осуществлен. По сути, исключите блок Saturation из покрытия.
В Редакторе Simulink щелкните правой кнопкой по блоку Saturation и выберите Coverage> Exclude этот блок.
Список текущих правил фильтра показывает в Проводнике Результатов покрытия. Щелкните в поле Rationale для этого нового правила и введите текст, описывающий, почему этот блок исключен, такие как "Input never <= lower limit (0)"
. Нажмите Apply по окончании.
Библиотечный блок slvnvdemo_covfilt_lib/protected division
защита от деления на нуль и может быть не важной в отчете покрытия. Контекстное меню щелчка правой кнопкой на этом блоке предоставляет возможности для фильтрации определенного экземпляра библиотеки или всех ссылок на эту библиотеку. Выберите ссылочную библиотеку Exclude: деление slvnvdemo_covfilt_lib/protected.
Под вкладкой Filter Проводника Результатов покрытия введите Объяснение для этого правила, такого как "division by zero protection"
. Нажмите Apply по окончании.
Обычно отфильтруйте правила, устраняют целый блок или объект Stateflow® от записи покрытия. События Stateflow® являются исключением, где можно устранить покрытие для части перехода и записать покрытие для остатка от перехода.
В этом примере существует переход, который задает временное событие tick
это никогда не является ложным, предотвращая полное условие и покрытие MCDC.
Исключить временное событие tick
, выберите Coverage> Exclude временное событие 'метка деления' в контекстном меню щелчка правой кнопкой этого перехода.
Под вкладкой Filter Проводника Результатов покрытия введите Объяснение для этого правила, такого как "tick"
. Нажмите Apply по окончании.
Симулируйте модель. Проводник Результатов покрытия откроется, когда симуляция завершится. Щелкните по ссылке отчета Generate, чтобы создать и открыть отчет покрытия для этого запуска.
Отчет покрытия показывает, что раздел назвал Объекты, Фильтрованные от Анализа покрытия, перечисляющего каждый из исключенных элементов и их соответствующих объяснений. Результаты покрытия исключают эти элементы.
В определенных случаях у вас может быть ожидание, что определенные элементы в модели не достигнут полного охвата. Вы поэтому фильтруете эти элементы прежде, чем симулировать для покрытия, как был сделан в предыдущих разделах этого примера. Можно также создать и применить фильтр к результатам покрытия после симуляции. Это позволяет вам рассматривать результаты покрытия, создавать или настраивать фильтр, как желаемый и генерировать новый отчет покрытия с помощью этого фильтра, не имея необходимость повторно выполнять симуляцию.
Считайте, например, подсистему Switchable config
. Используя постоянные значения, чтобы управлять подсистемой включают порты для изменения настроек модели, общий шаблон в проектах; однако, разрешать логика и содержимое подсистемы могут привести к недостающему покрытию. Эта настройка не используется в этой модели, поэтому добавьте Switchable config
подсистема к фильтру покрытия.
В Редакторе Simulink щелкните правой кнопкой по Switchable config
подсистема и выбирает Coverage> подсистема Exclude со всеми потомками.
Под вкладкой Filter Проводника Результатов покрытия введите Объяснение для этого правила, такого как "unused config"
. Нажмите Apply по окончании.
В отчете покрытия перейдите к подробным результатам для Stateflow® Transition" [! на]" от Соединения № 0 к "прочь" в соответствии с графиком Mode Logic
. Этот переход никогда не является ложным, потому что он только оценивает, когда Переход" [на]" от Соединения № 0 к "на" является ложным.
Как альтернатива навигации назад к модели и фильтрации этого перехода через контекстное меню щелчка правой кнопкой, можно отфильтровать этот элемент непосредственно из отчета.
Нажмите Justify или ссылку Exclude под подробными результатами для этого перехода.
Вкладка Filter Проводника Результатов покрытия открывается, и правило, фильтрующее этот переход, добавляется.
Измените Режим фильтрации для этого правила к Выровненному по ширине и введите описание для Объяснения, такого как "expression can't be false"
. Нажмите Apply по окончании.
В предыдущих примерах были отфильтрованы все цели, сопоставленные с заданными объектами модели. Можно также выровнять по ширине отдельные результаты цели покрытия непосредственно из отчета. Это допускает больше гранулярности в определении правил выравнивания.
В отчете покрытия перейдите к подробным результатам для Stateflow® Transition" [высоко]" от Соединения № 3 к Соединению № 4 в соответствии с графиком Mode Logic
. Этот переход в настоящее время никогда не выполняется, и поэтому ни лжи, ни истинным результатам цели Decision Coverage не удовлетворяют.
Нажмите значок правила выравнивания Add рядом с ложным результатом, чтобы выровнять по ширине этот отдельный объективный результат.
Вкладка Filter Проводника Результатов покрытия открывается, и правило, фильтрующее этот объективный результат, добавляется.
Введите описание для Объяснения, такого как "justify false outcome only"
. Нажмите Apply по окончании.
После нажатия Apply ссылка отчета Generate показывает в нижней части диалогового окна. Щелкните по этой ссылке, чтобы регенерировать отчет с обновленным фильтром покрытия.
Новый отчет покрытия перечисляет все исключенные и выровненные по ширине элементы под Объектами, Фильтрованными от Анализа покрытия, включая те элементы, которые были отфильтрованы после симуляции. Ссылки в столбце Объяснения перешли к соответствующим правилам во вкладке Filter Проводника Результатов покрытия. Кроме того, выровненным по ширине объектам модели предшествует идентификатор (например, J6 и J7 в отчете ниже), каждый из которых соединяется с подробными результатами для выровненного по ширине объекта модели или объективного результата.
Выровненные по ширине цели раскрашены голубые и обработаны, как удовлетворено при создании отчетов о процентах покрытия.
Подробные результаты для Перехода" [! на]" от Соединения № 0 к "от" показа, что недостающее покрытие для этого перехода было выровнено по ширине. Обратите внимание на то, что ссылка Выровненный по ширине J6 перешла к соответствующему правилу выравнивания в разделе Objects Filtered from Coverage Analysis отчета.
Точно так же подробные результаты для Перехода" [высоко]" от Соединения № 3 к Соединению № 4 показывают, что недостающее покрытие для ложного результата решения было выровнено по ширине. Однако, потому что правило выравнивания было создано только для этого отдельного результата, об истинном результате решения все еще сообщают как неудовлетворенном. Обратите внимание на то, что ссылка J7, показанный рядом с ложным результатом решения, перешла к соответствующему правилу выравнивания в разделе Objects Filtered from Coverage Analysis отчета.
Чтобы завершить пример, закройте модель.