В этом примере показано, как использовать фильтры покрытия модели Simulink® Coverage™, чтобы исключить элементы модели из результатов покрытия и выровнять по ширине недостающее покрытие в отчетах.
Во время процесса проверки модель может содержать несколько построений, которые предотвращают полное покрытие модели, такое как подсистема, которая содержит драйвер для контроллера, который не тестируется и не относится к процессу валидации. Можно исключить эту подсистему из результатов покрытия.
В качестве альтернативы у вас могут быть критерии тестирования, который требует тренирующихся определенных аспектов блока, таких как удар конкретных моментов принятия решения. Если не выполнимо удовлетворить всем объективным результатам для этого блока, и вы не намеревались для своих тестов осуществить эти неудовлетворенные результаты, то вы могли выровнять по ширине это недостающее покрытие.
Фильтрация этих построений в результатах покрытия исключением или выравниванием по ширине их позволяет вам фокусироваться на других аспектах недостающего покрытия, которое может и должно быть протестировано.
Фильтры покрытия хранятся в .cvf
файлы. Каждый фильтр состоит из правил, которые исключают или выравнивают по ширине определенные объекты модели или отдельные результаты цели покрытия. Несколько файлов фильтра могут быть применены к результатам покрытия для модели. Кроме того, многоуровневые модели могут также использовать тот же файл фильтра.
Фильтры покрытия могут быть созданы и применялись или прежде или после симуляции модели. Оба рабочих процесса описаны в этом примере.
Этот пример использует slvnvdemo_covfilt
модель. Модель показывает некоторые общие шаблоны, которые могут должны быть быть отфильтрованы от результатов покрытия. Откройте модель.
open_system('slvnvdemo_covfilt');
Библиотечный блок slvnvdemo_covfilt_lib/protected division
защищает от деления на нуль. Если вы решаете, что ваше тестирование не ожидается или предназначается, чтобы полностью покрыть каждый экземпляр этого блока в этом контексте, блок может быть исключен из результатов покрытия.
В Редакторе Simulink щелкните правой кнопкой по экземпляру protected division
библиотечный блок и перешел к опциям Покрытия. Опции для этого блока позволяют вам фильтровать определенный экземпляр библиотеки или всех ссылок на эту библиотеку. Выберите ссылочную библиотеку Exclude: деление slvnvdemo_covfilt_lib/protected, чтобы отфильтровать все ссылки.
Это открывает раздел Filter Editor Проводника Результатов покрытия. Обратите внимание на то, что новый файл фильтра, первоначально названный Untitled
, был создан, и правило фильтра для исключения всех ссылок на библиотечный блок было добавлено.
Задайте Имя и Описание для нового файла фильтра. В таблице откройте поле Rationale для нового правила и введите текст, описывающий, почему этот блок исключен, такие как "division by zero protection"
. Нажмите Apply по окончании, чтобы сохранить файл фильтра. Диалоговое окно файла предложит вам задавать, где сохранить этот файл.
Можно совместно использовать и повторно применить файлы фильтра с обобщенными правилами отфильтровать результаты покрытия для всевозможных моделей, которые содержат подобные построения.
Например, существующий файл фильтра Filter_Tick.cvf
получает правило исключить Stateflow временное событие tick
от результатов покрытия. Это событие никогда не может быть ложным и, поэтому, могло предотвратить полное Условие и покрытие MCDC в любой модели с помощью tick
в основанной на событии временной логике в Stateflow.
Поскольку slvnvdemo_covfilt/Mode Logic
содержит такое построение, можно применить файл фильтра Filter_Tick.cvf
к модели.
Чтобы применить этот существующий файл фильтра, щелкните правой кнопкой по Прикладному узлу фильтров в Проводнике Результатов покрытия и выберите фильтр Load. В диалоговом окне файла, которое открывается, выберите Filter_Tick.cvf
и нажмите Open.
Обратите внимание на то, что Прикладные фильтры теперь перечисляют оба Filter_DivBy0
и Filter_Tick
.
Нажмите кнопку Run (Coverage), чтобы симулировать покрытие записи и модели. Когда симуляция завершается, результаты покрытия подсвечены на модели, и окно Coverage Details открыто.
Заметьте, что обе ссылки на protected division
библиотечный блок окрашен в серый в холсте Simulink, указав, что они были исключены из результатов покрытия.
Просмотрите содержимое путем прокрутки в окне Coverage Details и обратите внимание, что раздел назвал Объекты, Фильтрованные от Анализа покрытия. Этот раздел перечисляет каждый из исключенных элементов и соответствующих объяснений для каждого и организован файлом фильтра. Оба Filter_DivBy0
и Filter_Tick
были применены.
Файлы фильтра, используемые выше получения, обобщили правила фильтра, которые могли быть широко применимы ко многим различным моделям.
Создайте другой файл фильтра, чтобы отдельно получить правила фильтра, исключительно относящиеся к этой модели.
В Проводнике Результатов покрытия щелкните правой кнопкой по Прикладному узлу фильтров и выберите New filter.
Введите имя и описание для этого файла фильтра. Нажмите Apply и задайте, где сохранить файл.
Предыдущие разделы этого примера показывают, как задать правила фильтра применяться прежде, чем запустить симуляцию. Можно также создать и применить правила фильтра к результатам покрытия после симуляции. Это позволяет вам рассматривать результаты покрытия, создавать или настраивать фильтры и генерировать новый отчет покрытия, не имея необходимость повторно выполнять симуляцию.
Рассмотрите, например, Переключаемую подсистему config. Это - шаблон проектирования, чтобы использовать постоянные значения, чтобы управлять подсистемой, включают порты для изменения настроек модели; однако, разрешать логика и содержимое подсистемы могут привести к недостающему покрытию. Эта настройка не используется в этой модели, и поэтому может быть исключена из результатов покрытия.
В Редакторе Simulink нажмите на Переключаемую подсистему config. Окно Coverage Details перейдет к деталям для этой подсистемы. Под этими деталями нажмите Justify или ссылку Exclude.
Новое правило фильтра добавляется к в настоящее время выбранному файлу фильтра в Редакторе Фильтра. По умолчанию режим для этого правила установлен в "Excluded"
. Введите объяснение для этого правила, такого как "unused config"
.
Нажмите Apply по окончании. Это сохраняет изменения в файле фильтра и автоматически обновляет результаты покрытия, отображенные на модели. Заметьте, что Переключаемую подсистему config теперь показывают как серая, указывая, что она была исключена из результатов покрытия.
В Редакторе Simulink нажмите на Saturation
блокируйте и рассмотрите результаты покрытия в окне Coverage Details. Заметьте, что два результата Решения не удовлетворены. Это вызвано тем, что Saturation
блок имеет нижний предел 0
и верхний предел 200
. Однако входом с этим блоком является rate
сигнал, который никогда не может быть меньше чем или равен 0
. По сути, нижний предел Saturation
блок, как ожидают, не будет полностью осуществлен, таким образом, соответствующий результат Решения сможет быть выровнен по ширине.
Нажмите на Добавить значок правила выравнивания рядом с ложным результатом для Решения "input > lower limit"
.
Новое правило фильтра добавляется к в настоящее время выбранному файлу фильтра в Редакторе Фильтра. Задайте объяснение выравнивания, такое как "rate > 0"
.
Нажмите Apply по окончании, чтобы сохранить файл фильтра и обновить результаты покрытия, показанные на модели.
Заметьте, что в окне Coverage Details, Saturation
выровненный по ширине результат блока подсвечен в голубом и имеет ссылку на объяснение. Истинный результат решения "input >= upper limit"
не отфильтрован и сообщается как неудовлетворенный. По сути, Saturation
блок все еще подсвечен красный в модели, чтобы указать на недостающее покрытие.
В некоторых случаях недостающее покрытие происходит из-за мертвой логики. Связанные цели покрытия невыполнимы. Если эта логика предназначается для построений, которые вы не хотите удалять из своей модели, то те цели покрытия могут быть выровнены по ширине.
Если у вас есть лицензия Simulink Design Verifier™, то можно автоматически создать правила фильтра выравнивания для мертвой логики.
В Проводнике Результатов покрытия выберите Прикладной узел фильтров. В Редакторе Фильтра панель выберите опцию, Делают правила фильтра выравнивания для мертвой логики (использующий Simulink Design Verifier).
Эта опция использует Simulink Design Verifier™, чтобы анализировать модель для мертвой логики. После завершения создается новый файл фильтра, и правила выравнивания добавляются для каждого из соответствующих результатов покрытия.
Задайте имя и описание для этого файла фильтра. Нажмите Apply по окончании. В получившемся диалоговом окне файла задайте, где сохранить этот файл фильтра.
Закройте окна Simulink Design Verifier Results, которые открылись.
В Редакторе Simulink перейдите к разделу Review Results приложения Покрытия и нажмите Coverage Highlighting.
После применения всех четырех фильтров использовал в этом примере, симуляция теперь достигает 100%-го Условия, 63%-го Решения и 75%-го покрытия Выполнения для этой модели. Обратите внимание на то, что результаты покрытия больше не содержат объектов модели, которые получают MCDC, таким образом, эта метрика не перечислена.
Считающееся пропавшее без вести покрытие в Mode Logic
график, time capture
подсистема и Saturation
блок указывает на несоответствующее тестирование и должен быть обращен при помощи дальнейшей симуляции с входными значениями, которые более тщательно осуществляют эти элементы.
Фильтрация покрытия предоставляет различные методы для указания на аспекты вашей модели, которые не ожидаются или предназначаются, чтобы быть полностью осуществленными в текущем контексте тестирования.
Фильтрация объектов модели и результатов цели покрытия, которые не должны быть осуществлены, позволяет вам фокусироваться на недостающем покрытии для построений, которые могут и должны быть протестированы.