В этом примере показано, как использовать фильтры покрытия модели 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
блок указывает на недостаточную проверку и должен быть решен с помощью дальнейшей симуляции с входными значениями, которые более тщательно выполняют эти элементы.
Фильтрация покрытия предоставляет различные методы для указания аспектов вашей модели, которые не ожидаются или предназначены для полной реализации в текущем контексте проверки.
Фильтрация объектов модели и результатов цели покрытия, которые не нужно выполнять, позволяет вам фокусироваться на недостающее покрытие для конструкций, которые могут и должны быть протестированы.