В этом примере показано, как использовать фильтры покрытия модели Simulink ® Coverage™, чтобы исключить элементы модели из результатов покрытия и обосновать отсутствие покрытия в отчетах.
Во время процесса проверки модель может содержать несколько конструкций, препятствующих полному охвату модели, таких как подсистема, содержащая драйвер для контроллера, который не протестирован и не имеет отношения к процессу проверки. Эту подсистему можно исключить из результатов покрытия.
В качестве альтернативы можно использовать критерии тестирования, которые требуют выполнения определенных аспектов блока, например, выбор определенных точек принятия решения. Если невозможно удовлетворить все объективные результаты для этого блока, и вы не намеревались, чтобы ваши тесты выполняли эти неудовлетворенные результаты, то вы можете обосновать это отсутствующее покрытие.
Фильтрация этих конструкций в результатах покрытия путем их исключения или обоснования позволяет сосредоточиться на других аспектах отсутствующего покрытия, которые могут и должны быть протестированы.
Фильтры покрытия хранятся в .cvf файлы. Каждый фильтр состоит из правил, которые исключают или оправдывают определенные объекты модели или результаты отдельных целей покрытия. К результатам покрытия для модели можно применить несколько файлов фильтров. Кроме того, несколько моделей могут также использовать один и тот же файл фильтра.
Фильтры покрытия могут быть созданы и применены до или после моделирования модели. В этом примере описаны оба рабочих процесса.
В этом примере используется slvnvdemo_covfilt модель. Модель показывает некоторые общие шаблоны, которые могут потребоваться фильтровать из результатов покрытия. Откройте модель.
open_system('slvnvdemo_covfilt');

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

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

Укажите имя и описание для нового файла фильтра. В таблице откройте поле Обоснование для нового правила и введите текст, описывающий причины исключения этого блока, например: "division by zero protection". По завершении нажмите кнопку Применить (Apply), чтобы сохранить файл фильтра. Появится диалоговое окно с запросом на указание места сохранения этого файла.

Можно совместно использовать и повторно применять файлы фильтров с обобщенными правилами для фильтрации результатов покрытия для различных моделей, содержащих схожие конструкции.
Например, существующий файл фильтра Filter_Tick.cvf захватывает правило для исключения временного события Stateflow tick от результатов покрытия. Это событие никогда не может быть ложным и, следовательно, может предотвратить полное покрытие Condition и MCDC в любой модели с использованием tick во временной логике на основе событий в Stateflow.
Поскольку slvnvdemo_covfilt/Mode Logic содержит такую конструкцию, можно применить файл фильтра Filter_Tick.cvf к модели.
Чтобы применить этот существующий файл фильтра, щелкните правой кнопкой мыши узел Примененные фильтры в обозревателе результатов покрытия и выберите пункт Загрузить фильтр. В открывшемся диалоговом окне файла выберите Filter_Tick.cvf и нажмите «Открыть».

Обратите внимание, что в поле Примененные фильтры (Applied filters) теперь перечислены оба Filter_DivBy0 и Filter_Tick.

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

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

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

В предыдущих разделах этого примера показано, как задать правила фильтрации для применения перед запуском моделирования. После моделирования можно также создать и применить правила фильтрации к результатам покрытия. Это позволяет просматривать результаты покрытия, создавать или корректировать фильтры и создавать новый отчет о покрытии без необходимости повторного запуска моделирования.
Рассмотрим, например, подсистему конфигурации Switchable. Это распространенный дизайн для использования постоянных значений для включения портов подсистемы для изменения конфигурации модели; однако логика включения и содержимое подсистемы могут привести к отсутствию покрытия. Эта конфигурация не используется в данной модели и поэтому может быть исключена из результатов покрытия.
В редакторе Simulink выберите подсистему конфигурации Switchable. В окне Coverage Details (Сведения о покрытии) будет выполнен переход к сведениям для этой подсистемы. В разделе «Сведения» щелкните ссылку «Выровнять» или «Исключить».

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

По завершении нажмите кнопку Применить (Apply). При этом сохраняются изменения в файле фильтра и автоматически обновляются результаты покрытия, отображаемые в модели. Обратите внимание, что подсистема конфигурации Switchable теперь отображается серым цветом, указывая, что она исключена из результатов покрытия.

В редакторе Simulink выберите Saturation блокировать и просматривать результаты покрытия в окне «Сведения о покрытии». Обратите внимание, что два результата решения неудовлетворительны. Это потому, что Saturation блок имеет нижний предел, равный 0 и верхний предел, равный 200. Тем не менее, вход в этот блок является rate сигнал, который никогда не может быть меньше или равен 0. Таким образом, нижний предел Saturation ожидается, что блок не будет полностью выполнен, поэтому соответствующий результат решения может быть оправдан.
Щелкните значок Добавить правило обоснования рядом с ложным результатом для решения "input > lower limit".

В текущий выбранный файл фильтра в редакторе фильтров добавляется новое правило фильтрации. Укажите обоснование обоснования, например "rate > 0".
По завершении нажмите кнопку Применить (Apply), чтобы сохранить файл фильтра и обновить результаты покрытия, показанные на модели.

Обратите внимание, что в окне «Сведения о покрытии» Saturation оправданный результат блока выделен светло-синим цветом и имеет ссылку на обоснование. Истинный итог решения "input >= upper limit" не фильтруется и считается неудовлетворенным. Как таковое, Saturation блок по-прежнему подсвечивается красным цветом в модели, что указывает на отсутствие покрытия.

В некоторых случаях отсутствие покрытия обусловлено неработающей логикой. Соответствующие цели покрытия являются неудовлетворительными. Если эта логика предназначена для конструкций, которые не требуется удалять из модели, то эти цели покрытия могут быть оправданы.
При наличии лицензии Simulink Design Verifier™ можно автоматически создать правила фильтра выравнивания для неработающей логики.
В обозревателе результатов покрытия выберите узел Примененные фильтры. На панели «Редактор фильтров» выберите параметр «Создать правила фильтра выравнивания для неработающей логики» (с помощью Simulink Design Verifier).

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

Укажите имя и описание этого файла фильтра. По завершении нажмите кнопку Применить (Apply). В открывшемся диалоговом окне укажите, где сохранить этот файл фильтра.
Закройте открывшиеся окна Результаты Simulink Design Verifier.
В редакторе Simulink перейдите в раздел "Результаты проверки" приложения "Покрытие" и щелкните Подсветка покрытия ".

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