Создание и использование фильтров покрытия

В этом примере показано, как использовать фильтры покрытия модели Simulink ® Coverage™, чтобы исключить элементы модели из результатов покрытия и обосновать недостающее покрытие в отчетах.

Фильтры покрытия

В процессе верификации модель может содержать несколько конструкций, которые препятствуют полному покрытию модели, таких как подсистема, которая содержит драйвер для контроллера, который не тестируется и не относится к процессу валидации. Можно исключить эту подсистему из результатов покрытия.

Кроме того, у вас могут быть критерии проверки, которые требуют выполнения определенных аспектов блока, таких как попадание в конкретные точки принятия решений. Если невозможно удовлетворить все объективные результаты для этого блока, и вы не намеревались, чтобы ваши тесты проводили эти неудовлетворенные результаты, то вы можете обосновать это недостающее покрытие.

Фильтрация этих конструкций в результатах покрытия путем исключения или обоснования позволяет вам фокусироваться на других аспектах недостающего покрытия, которые могут и должны быть протестированы.

Фильтры покрытия хранятся в .cvf файлы. Каждый фильтр состоит из правил, которые исключают или обосновывают определенные объекты модели или отдельные результаты цели покрытия. Несколько файлов фильтра могут быть применены к результатам покрытия для модели. Кроме того, несколько моделей могут также использовать один и тот же файл фильтра.

Фильтры покрытия могут быть созданы и применены либо до, либо после симуляции модели. Оба рабочих процессов описаны в этом примере.

Откройте модель

Этот пример использует slvnvdemo_covfilt модель. Модель показывает некоторые общие шаблоны, которые могут потребоваться для фильтрации из результатов покрытия. Откройте модель.

open_system('slvnvdemo_covfilt');

Укажите элементы для исключения из результатов покрытия перед симуляцией

Область библиотечного блока slvnvdemo_covfilt_lib/protected division защищает от деления на нули. Если вы определяете, что ваша проверка не ожидается или предназначено для полного покрытия каждого образца этого блока в этом контексте, блок может быть исключен из результатов покрытия.

В редакторе Simulink щелкните правой кнопкой мыши образец protected division Библиотечный блок и перейдите к опциям покрытия. Опции для этого блока позволяют вам фильтровать конкретный образец библиотеки или все ссылки на эту библиотеку. Выберите Исключить библиотеку-ссылку: slvnvdemo_covfilt_lib/protected деление, чтобы фильтровать все ссылки.

Откроется раздел «Редактор фильтров» в обозревателе результатов покрытия. Обратите внимание, что новый файл фильтра с начальным именем Untitled, был создан, и добавлено правило фильтра для исключения всех ссылок на библиотечный блок.

Укажите имя и описание для нового файла фильтра. В таблице откройте поле Rationale для нового правила и введите текст, описывающий, почему этот блок исключен, например "division by zero protection". Нажмите «Применить», чтобы сохранить файл фильтра. Диалоговое окно файла предложит вам указать, где сохранить этот файл.

Повторно используйте существующий файл фильтра

Можно делиться и повторно применять файлы фильтра с обобщенными правилами для фильтрации результатов покрытия для различных моделей, которые содержат похожие конструкции.

Например, существующий файл фильтра Filter_Tick.cvf захватывает правило, чтобы исключить временное событие Stateflow tick из результатов покрытия. Это событие никогда не может быть ложным и, следовательно, может предотвратить полное покрытие условие и MCDC в любой модели, использующей tick во временной логике на основе событий в Stateflow.

Потому что slvnvdemo_covfilt/Mode Logic содержит такую конструкцию, можно применить файл фильтра Filter_Tick.cvf в модель.

Чтобы применить этот существующий файл фильтра, щелкните правой кнопкой мыши узел Applied filters в обозревателе результатов покрытия и выберите Load filter. В открывшемся диалоговом окне файла выберите Filter_Tick.cvf и нажмите Открыть.

Обратите внимание, что теперь Applied filters перечисляет оба Filter_DivBy0 и Filter_Tick.

Моделирование и просмотр отфильтрованных результатов покрытия

Нажмите кнопку Run (Покрытие), чтобы симулировать модель и записать покрытие. Когда симуляция завершается, результаты покрытия подсвечиваются на модели, и открывается окно Coverage Details.

Заметьте, что обе ссылки на protected division Библиотечные блоки окрашены в серый цвет в холсте Simulink, что указывает на то, что они были исключены из результатов покрытия.

Прокрутите содержимое окна Сведения о покрытии и обратите внимание на раздел Объекты, отфильтрованные из анализа покрытия. В этом разделе перечислены каждый из исключенных элементов и соответствующие обоснования для каждого из них и организованы по файлу фильтра. Оба Filter_DivBy0 и Filter_Tick были применены.

Создайте новый файл фильтра

Файлы фильтра, используемые выше, захватывают обобщенные правила фильтра, которые могут быть широко применимы ко многим различным моделям.

Создайте другой файл фильтра, чтобы отдельно захватить правила фильтра, исключительно относящиеся к этой модели.

В обозревателе результатов покрытия щелкните правой кнопкой мыши по узлу Applied filters и выберите New filter.

Введите имя и описание для этого файла фильтра. Нажмите Применить и укажите, где сохранить файл.

Исключение элементов из результатов покрытия после симуляции

В предыдущих разделах этого примера показано, как задать правила фильтра для применения перед выполнением симуляции. Можно также создать и применить правила фильтрации к результатам покрытия после симуляции. Это позволяет вам просмотреть результаты покрытия, создать или настроить фильтры и сгенерировать новый отчет о покрытии без необходимости повторного запуска симуляции.

Рассмотрим, например, подсистему Switchable config. Это шаблон проектирования использовать постоянные значения для управления портами включения подсистемы для изменения строений модели; однако логика включения и содержимое подсистемы могут привести к недостающему покрытию. Это строение не используется в этой модели и, следовательно, может быть исключена из результатов покрытия.

В редакторе Simulink щелкните на Подсистеме конфигурационного элемента с возможностью переключения. В окне Coverage Details появится подробная информация для этой подсистемы. Для этого щелкните ссылку «Выравнивание» или «Исключить».

Новое правило фильтра добавляется к текущему выбранному файлу фильтра в редакторе фильтров. По умолчанию для этого правила задан режим "Excluded". Введите обоснование этого правила, например "unused config".

По завершении нажмите кнопку Применить. Это сохраняет изменения в файле фильтра и автоматически обновляет результаты покрытия, отображенные в модели. Заметьте, что подсистема Switchable config теперь отображается серым цветом, что указывает на ее исключение из результатов покрытия.

Обоснование индивидуального объективного результата из результатов покрытия

В редакторе Simulink щелкните на Saturation блокируйте и просматривайте результаты покрытия в окне Coverage Details. Заметьте, что два результата Решения неудовлетворены. Это потому, что Saturation блок имеет нижний предел 0 и верхний предел 200. Однако вход в этот блок является rate сигнал, который никогда не может быть меньше или равен 0. Как таковой, нижний предел Saturation не ожидается, что блок будет реализован в полном объеме, поэтому соответствующий результат Решения может быть обоснован.

Щелкните значок Добавить правило обоснования рядом с ложным результатом для Decision "input > lower limit".

Новое правило фильтра добавляется к текущему выбранному файлу фильтра в редакторе фильтров. Укажите обоснование, например "rate > 0".

Нажмите Применить по завершении, чтобы сохранить файл фильтра и обновить результаты покрытия, показанные на модели.

Заметьте, что в окне Coverage Details, Saturation обоснованный результат блока подсвечивается светло-синим цветом и имеет ссылку на обоснование. Истинный результат решения "input >= upper limit" не фильтруется и указывается как неудовлетворенный. Как таковой, Saturation блок все еще подсвечивается красным цветом в модели, чтобы указать на недостающее покрытие.

Автоматическая генерация правил фильтра для мертвой логики

В некоторых случаях недостающее покрытие связано с мертвой логикой. Соответствующие цели покрытия неудовлетворительны. Если эта логика предназначена для конструкций, которые вы не хотите удалять из модели, то эти цели покрытия могут быть обоснованы.

Если у вас есть лицензия Simulink Design Verifier™, то можно автоматически создать правила фильтра обоснования для мертвой логики.

В обозревателе результатов покрытия выберите узел Applied filters. На панели Редактор фильтров выберите опцию Сделать правила фильтра обоснования для мертвой логики (используя Simulink Design Verifier).

Эта опция использует Simulink Design Verifier™, чтобы проанализировать модель на мертвую логику. После завершения создается новый файл фильтра и добавляются правила обоснования для каждого из соответствующих результатов покрытия.

Укажите имя и описание для этого файла фильтра. По завершении нажмите кнопку Применить. В получившемся диалоговом окне файла укажите, где сохранить этот файл фильтра.

Закройте открытые окна результатов Simulink Design Verifier.

Просмотр результатов фильтрации покрытия

В редакторе Simulink перейдите в раздел Результаты приложения Coverage и нажмите Coverage Highlighting.

После применения всех четырех фильтров, используемых в этом примере, симуляция теперь достигает 100% условие, 63% Decision и 75% выполнение для этой модели. Обратите внимание, что результаты покрытия больше не содержат объектов модели, которые получают MCDC, поэтому эта метрика не указана.

Оставшееся недостающее покрытие в Mode Logic график, time capture подсистема и Saturation блок указывает на недостаточную проверку и должен быть решен с помощью дальнейшей симуляции с входными значениями, которые более тщательно выполняют эти элементы.

Заключение

Фильтрация покрытия предоставляет различные методы для указания аспектов вашей модели, которые не ожидаются или предназначены для полной реализации в текущем контексте проверки.

Фильтрация объектов модели и результатов цели покрытия, которые не нужно выполнять, позволяет вам фокусироваться на недостающее покрытие для конструкций, которые могут и должны быть протестированы.