Чтобы сгенерировать отчет Покрытия модели, выберите Analysis> Coverage> Settings и задайте желаемые опции на Coverage> панель Results в диалоговом окне Configuration Parameters. Для графиков Stateflow® программное обеспечение Simulink® Coverage™ записывает выполнение самого графика и выполнение состояний, решения перехода и отдельные условия, которые составляют каждое решение. После концов симуляции покрытие модели сообщает относительно того, как полностью модель была протестирована. Отчет показывает:
Сколько раз каждое исключительное подсостояние выполнено или выходится из его родительской сверхдержавы и введено должное породить историю сверхдержавы
Сколько раз каждое решение перехода было оценено как TRUE или FALSE
Сколько раз каждое условие было оценено как TRUE или FALSE
Чтобы измерить данные о покрытии модели для диаграммы Stateflow, вы должны:
Имейте лицензию Stateflow.
Включите отладку/анимацию для графика.
Чтобы задать настройки записи покрытия, выберите Analysis> Coverage> Settings в Редакторе Simulink. Затем выберите Enable coverage analysis.
Путем выбора Generate сообщают автоматически после аналитической опции в Coverage> панель Results диалогового окна Configuration Parameters, можно создать отчет HTML, содержащий данные о покрытии, сгенерированные во время симуляции модели. Отчет появляется в Браузере документации MATLAB® в конце симуляции.
Включение анализа покрытия также включает выбор различных покрытий, которые можно задать для отчетов. Следующие разделы обращаются только к метрикам покрытия, которые влияют на отчеты для диаграмм Stateflow. Эти метрики включают Decision Coverage, покрытие условия и покрытие MCDC.
Цикломатическая сложность является мерой сложности программного модуля на основе его ребер, узлов и компонентов в рамках графика потока управления. Это обеспечивает индикацию относительно того, сколько раз необходимо протестировать модуль.
Вычисление цикломатической сложности следующие:
CC = E - N + p
где CC
является цикломатической сложностью, E
является количеством ребер, N
является количеством узлов, и p
является количеством компонентов.
В Инструменте model coverage каждое решение точно эквивалентно одному узлу потока управления, и каждый результат решения эквивалентен ребру потока управления. Любая дополнительная структура в графике потока управления проигнорирована, поскольку это вносит то же количество узлов как ребра и поэтому не имеет никакого эффекта на вычисление сложности. Поэтому можно выразить цикломатическую сложность можно следующим образом:
CC = OUTCOMES - DECISIONS + p
В аналитических целях каждый график рассчитывает как один компонент.
Decision Coverage интерпретирует образцовое выполнение с точки зрения базовых решений, где поведение или выполнение должны взять один результат из набора взаимоисключающих результатов.
Полный охват для объекта решения означает, что каждое решение имело по крайней мере одно вхождение каждого из его возможных исходов.
Решения принадлежат объекту, принимающему решение на основе его содержимого или свойств. В следующей таблице перечислены решения, зарегистрированные для покрытия модели для объектов Stateflow, владеющих ими. Разделы, которые следуют таблице, описывают эти решения и их возможные исходы.
Объект | Возможные решения |
---|---|
График | Если графиком является инициированный блок Simulink, он должен решить, выполнить ли его блок. Если график содержит исключительный (OR) подсостояния, это должно решить который из его состояний, чтобы выполниться. |
Состояние | Если состояние является сверхдержавой, содержащей исключительный (OR) подсостояния, это должно решить который подсостояние выполниться. Если состояние имеет |
Переход | Если переход является условным переходом, он должен решить, выйти ли из его активного исходного состояния или соединения и ввести другое состояние или соединение. |
Если график является инициированным блоком в модели Simulink, решение выполнить блок тестируется. Если блок не инициирован, нет никакого решения выполнить блок, и измерение Decision Coverage не применимо (NA
).
Если график содержит исключительный (OR) подсостояния, решение, на котором тестируется подсостояние выполниться. Если график содержит только параллельные подсостояния AND, это измерение покрытия не применимо (NA
).
Поскольку график иерархически обрабатывается от верхней части вниз, процедуры такой как исключительный (OR) запись подсостояния, выход, и выполнение иногда решается сверхдержавой порождения.
Decision Coverage для сверхдержав применяет только к исключительному (OR) подсостояния. Сверхдержава не принимает решений для параллели (AND) подсостояния.
Поскольку сверхдержава должна решить, который исключительный (OR) подсостояние к процессу, количество результатов решения для сверхдержавы является количеством исключительных (OR), подутверждает, что это содержит. В примерах, которые следуют, выбор которого подутверждают к процессу, может произойти в одном из трех возможных контекстов.
Неявные переходы появляются как пунктирные линии в следующих примерах.
Контекст | Пример | Решения, которые происходят |
---|---|---|
Активный вызов | Состояния |
A1 состояния тестируются все исходящие переходы. Это решение принадлежит переходу а не метрополии A. В этом случае переход, отмеченный условием, C2 тестируется и решение, сделан, взять ли переход к A2 или нет. |
Неявный выход подсостояния | Переход происходит, чей источник является сверхдержавой A и чье место назначения является состоянием B. | Если сверхдержава имеет два исключительных (OR) подсостояния, это - решение о сверхдержаве, какое подсостояние выполняет неявный переход от подсостояния до сверхдержавы. |
Запись подсостояния с соединением истории | Соединение истории записывает, какое подсостояние было в последний раз активно, прежде чем из сверхдержавы вышли. | Если та сверхдержава становится местом назначения одного или нескольких переходов, соединение истории решает который ранее активное подсостояние войти. |
Для получения дополнительной информации смотрите Раздел Отчета Деталей состояния.
Состояние, которое имеет оператор действия event_name
on
, должно решить, выполнить ли тот оператор на основе приема заданного события или на накоплении заданного события при использовании временных логических операторов.
Условный переход является переходом с инициирующим событием и/или условием защиты. В условном переходе от одного состояния до другого решение выйти из одного состояния и ввести другого зачислено на сам переход.
Только условные переходы получают Decision Coverage. Переходы без решений не применимы к Decision Coverage.
Покрытие условия сообщает относительно степени, до которой все возможные исходы достигаются для отдельных подусловий, составляющих решение перехода или для логических выражений в операторах присваивания в состояниях и переходах.
Например, для решения [A & B & C] на переходе, покрытие условия сообщает относительно истинных и ложных случаев каждого из подусловий A, B, и C. Это приводит к восьми возможным исходам: истина и ложь для каждого из трех подусловий.
Результат | A | B | C |
---|---|---|---|
1 | T | T | T |
2 | T | T | F |
3 | T | F | T |
4 | T | F | F |
5 | F | T | T |
6 | F | T | F |
7 | F | F | T |
8 | F | F | F |
Для получения дополнительной информации смотрите Раздел Отчета Деталей Перехода.
Измененное Решение/Покрытие Условия (MCDC) опция сообщает о покрытии теста случаев, в которых изменение отдельного подусловия в логическом выражении приводит к изменению целого выражения от истинного до лжи или лжи к истине.
Например, если переход выполняется на условии [C1 & C2 & C3 | C4 & C5
], отчет MCDC для того перехода показывает фактические случаи для каждого из этих пяти подусловий (C1, C2, C3, C4, C5
), в котором изменение его результата верного для лжи может изменить результат целого условия от истинного до лжи.
Если переход в диаграмме Stateflow включает реляционную операцию, он получает реляционное граничное покрытие. Для получения дополнительной информации смотрите Реляционное Граничное Покрытие.
Можно использовать следующие функции Simulink Design Verifier™ в диаграммах Stateflow:
Если у вас нет лицензии Simulink Design Verifier, можно собрать покрытие модели для диаграммы Stateflow, содержащей эти функции, но вы не можете анализировать модель с помощью программного обеспечения Simulink Design Verifier.
Когда вы задаете метрику покрытия Objectives and Constraints в панели Coverage диалогового окна Configuration Parameters, программное обеспечение Simulink Coverage записывает покрытие для этих функций.
Каждая из этих функций выполняет выражение expr
, например,
, где sldv.test(expr)
expr
является любым допустимым булевым выражением MATLAB. Покрытие Simulink Design Verifier измеряет количество временных шагов, которые выражение expr
оценивает к true
.
Если expr
является true
по крайней мере для одного временного шага, покрытие Simulink Design Verifier для этой функции составляет 100%. В противном случае программное обеспечение Simulink Coverage сообщает о покрытии для этой функции как 0%.
Рассмотрите модель, которая содержит эту диаграмму Stateflow:
Чтобы собрать покрытие для функций Simulink Design Verifier, на панели Coverage в диалоговом окне Configuration Parameters, выбирают Objectives and Constraints.
После симуляции отчет покрытия модели перечисляет покрытие для sldv.condition
, sldv.assume
, sldv.prove
и функций sldv.test
.
Следующие разделы отчета Покрытия модели были сгенерированы путем симуляции модели sf_boiler
, которая включает Контроллер Скорострельного оружия график. Метрики покрытия для MCDC включены для этого отчета.
Раздел Summary показывает результаты покрытия для целого теста и появляется в начале отчета Покрытия модели.
Каждая строка в иерархии обобщает результаты покрытия на том уровне и уровнях ниже его. Можно кликнуть по гиперссылке на более поздний раздел в отчете с тем же присвоенным номером иерархии, который детализирует то покрытие и покрытие его дочерних элементов.
Верхний уровень, sf_boiler
, является самой моделью Simulink. Вторым уровнем, Контроллером Скорострельного оружия, является диаграмма Stateflow. Следующие уровни являются сверхдержавами в рамках графика, в порядке иерархического включения. Каждая сверхдержава использует SF: префикс. Нижний уровень, модель Boiler Plant, является дополнительной подсистемой в модели.
При записи покрытия для диаграммы Stateflow программное обеспечение Simulink Coverage сообщает о двух типах покрытия для графика — Подсистема и График.
Подсистема — Этот раздел сообщает о покрытии для графика:
Покрытие (этот объект): данные о Покрытии для графика как контейнерный объект
Покрытие (inc). потомки: данные о Покрытии для графика и состояний и переходов в графике.
Если вы кликаете по гиперссылке имени подсистемы в заголовке раздела, блок Bang-Bang Controller подсвечен в блок-схеме.
Decision Coverage не применим (NA
), потому что этот график не имеет явного триггера. Покрытие условия и MCDC не применимы (NA
) для графика, но применяются к своим потомкам.
График — Этот раздел сообщает о покрытии для графика:
Покрытие (этот объект): данные о Покрытии для графика и его входных параметров
Покрытие (inc). потомки: данные о Покрытии для графика и состояний и переходов в графике.
Если вы кликаете по гиперссылке имени графика в заголовке раздела, график открывается в редакторе Stateflow.
Decision Coverage перечислен, появляется для графика и его потомков. Покрытие условия и MCDC не применимы (NA
) для графика, но применяются к своим потомкам.
Для каждого состояния в графике отчет покрытия включает в себя раздел State с деталями о покрытии, зарегистрированном для того состояния.
В модели sf_boiler
On
состояния находится в поле Heater
. On
является сверхдержавой, которая содержит:
Два подсостояния HIGH
и NORM
Соединение истории
Функциональный warm
Отчет покрытия включает в себя раздел State по On
состояния.
Decision Coverage для состояния On
тестирует решение, которого подутверждают, чтобы выполниться.
Эти три решения перечислены в отчете:
Под выполняемым Подсостоянием, которые подутверждают, чтобы выполниться, когда On
выполняется.
Под Подсостоянием, из которого выходят, когда родительский элемент, из которого выходят, какое подсостояние активно, когда On
выходит. NORM
перечисляется как никогда являющийся активным, когда On
выходит, потому что инструмент покрытия видит суперпереход от NORM
до Off
как переход от On
до Off
.
Под Ранее активным подсостоянием, вводимым из-за истории, которые подутверждают, чтобы повторно вступить, когда On
повторно выполняется. Соединение истории записывает ранее активное подсостояние.
Поскольку каждое решение может привести или к HIGH
или к NORM
, общими возможными исходами являются 3 × 2 = 6. Результаты показывают, что пять из шести возможных исходов были протестированы во время симуляции.
Цикломатическая сложность и Decision Coverage также применяются к потомкам состояния On
. Решение, требуемое условием [warm()]
для перехода от HIGH до NORM, приносит общие возможные результаты решения к 8. Покрытие условия и MCDC не применимы (NA
) для состояния.
Узлы и ребра, которые составляют цикломатическое вычисление сложности, не имеют никакой непосредственной связи с объектами модели (состояния, переходы, и так далее). Вместо этого это вычисление требует представления графика эквивалентного потока управления.
Отчеты для переходов появляются под разделами отчета их объектов владения. Переходы не появляются в иерархии модели раздела Summary, поскольку иерархия основана на сверхдержавах, которые владеют другими объектами Stateflow.
Решение для этого перехода зависит от задержки 40 секунд и условия [cold()]
. Если после 40-секундной задержки среда является холодной (cold() = 1
), решение выполнить этот переход и включить Нагреватель принято. Для других временных интервалов или условий среды, решение принято, чтобы не выполниться.
Для Decision Coverage произошли оба истинных и ложных результата. Поскольку два из двух результатов решения произошли, покрытие было полно или 100%.
Покрытие условия показывает, что только 4 из 6 результатов условия были протестированы. Временный логический оператор after(40,sec)
представляет два условия: вхождение sec
и after(40,sec)
с временной задержкой. Поэтому три условия на переходе существуют: sec
, after(40,sec)
и cold()
. Поскольку каждое из этих решений может быть TRUE или FALSE, шесть возможных результатов условия существуют.
Анализируемая таблица Условий показывает каждое условие строкой с записанным количеством случаев для каждого результата (TRUE или FALSE). Заштрихованы строки решения, в которых не произошел возможный исход. Например, первое и третьи строки не записывали вхождение ложного результата.
В отчете MCDC все наборы случаев условий перехода сканируются для конкретной пары решений для каждого условия, в котором следующее верны:
Условие отличается от истинного до лжи.
Все другие условия, способствующие результату решения, остаются постоянными.
Результат решения отличается от истинного до лжи или реверса.
Для трех условий, связанных подразумеваемой операцией И, эти критерии могут быть удовлетворены вхождением этих условий.
Протестированное условие | Истинный результат | Ложный результат |
---|---|---|
1 | TTT | Fxx |
2 | TTT | TFx |
3 | TTT | TTF |
Заметьте, что в каждой строке, протестированное условие изменяется от истинного до лжи, в то время как другое условие остается постоянным. Несоответствующие факторы закодированы с "x" (обсужденный ниже). Если оба результата происходят во время тестирования, покрытие завершено (100%) для протестированного условия.
Предыдущий пример отчета показывает покрытие только для условия 2. Ложные результаты, требуемые для условий 1 и 3, не произошли и обозначаются круглыми скобками для обоих условий. Поэтому строки 1 и 3 условия заштрихованы. В то время как условие 2 было протестировано, условия 1 и 3 не имеют, и MCDC составляет 33%.
Для некоторых решений значения некоторых условий не важны при определенных обстоятельствах. Например, в решении [C1 & C2 & C3 | C4 & C5
] левая сторона |
является ложной, если кто-либо из условий C1
, C2
или C3
является ложным. То же самое применяется к результату правой стороны, если или C4
или C5
являются ложными. Когда поиск соответствия с парами, которые изменяют результат решения путем изменения одного условия, содержания некоторых остающихся постоянных условий, не важен. В этих случаях отчет MCDC отмечает эти условия "x", чтобы указать на их неуместность как на фактор результата. Эти условия появляются как показано.
Рассмотрите первую совпадающую пару. Поскольку условие 1 верно в Истинном столбце результата, это должно быть ложным в соответствующем Ложном столбце результата. Это делает условия C2
и C3
не важный для ложного результата, поскольку C1 & C2 & C3
является всегда ложным, если C1
является ложным. Кроме того, поскольку ложный результат требуется, чтобы оценивать ко лжи, оценка C4 & C5
должна также быть ложной. В этом случае соответствие было найдено с C4
= F, делая условие C5
не важный.
Таблицы переходов состояний являются альтернативным способом выразить модальную логику в Stateflow. Диаграммы Stateflow представляют модальную логику графически, и таблицы переходов состояний могут представлять эквивалентную модальную логику в табличной форме. Для получения дополнительной информации смотрите Таблицы переходов состояний (Stateflow).
Результаты покрытия для таблиц переходов состояний совпадают с результатами покрытия для эквивалентных диаграмм Stateflow, за исключением незначительных различий, которые возникают в покрытии временной логики. Например, считайте временное логическое выражение after(4, tick)
в Логической блок-схеме Режима модели slvnvdemo_covfilt
в качестве примера.
В покрытии графика переход after(4, tick)
представляет два условия: вхождение tick
и after(4, tick)
с временной задержкой. Поскольку временное событие tick
никогда не является ложным, первое условие не выполнимо, и вы не можете записать 100%-е условие и покрытие MCDC для перехода after(4, tick)
.
В табличном покрытии изменения состояния переход after(4, tick)
представляет одно решение без подусловия для вхождения tick
. Поэтому только Decision Coverage зарегистрирован.
Для таблиц переходов состояний, содержащих временные логические решения, как в вышеупомянутом примере, покрытии условия и MCDC, не зарегистрирован.
В диаграмме Stateflow атомарный подграфик является графическим объектом, который позволяет вам снова использовать то же состояние или подграфик через несколько графиков и моделей.
Когда вы задаете, чтобы записать данные о покрытии для модели во время симуляции, программное обеспечение Simulink Coverage записывает покрытие для любых атомарных подграфиков в вашей модели. Записи данных покрытия выполнение самого графика, и выполнение состояний, решения перехода и отдельные условия, которые составляют каждое решение в атомарном подграфике.
Моделируйте пример doc_atomic_subcharts_map_iodata
образцовый и Decision Coverage записи:
Откройте модель doc_atomic_subcharts_map_iodata
.
Эта модель содержит два блока Синусоиды, которые предоставляют входные сигналы к диаграмме Stateflow. График содержит два атомарных подграфика — A и B — которые соединяются из того же графика библиотеки, также названного A. График библиотеки содержит следующие объекты:
В Редакторе Simulink выберите Analysis> Coverage> Settings
Панель Coverage диалогового окна Configuration Parameters появляется.
Выберите Enable coverage analysis и затем выберите Entire System.
На Coverage> панель Results, выберите Generate report automatically after analysis.
Нажмите OK, чтобы закрыть диалоговое окно Configuration Parameters.
Моделируйте модель doc_atomic_subcharts_map_iodata
.
Когда симуляция завершается, отчет покрытия открывается.
Отчет обеспечивает данные о покрытии для атомарных подграфиков A и B в следующих формах:
Для атомарного экземпляра подграфика и его содержимого. Decision Coverage не применим (NA
), потому что этот график не имеет явного триггера.
Поскольку библиотека строит диаграмму A и его содержимого. Сам график достигает 100%-го покрытия на входе u1
и 88%-го покрытия на состояниях и переходах в графике библиотеки.
Атомарный подграфик B является копией того же A графика библиотеки. Покрытие содержимого подграфика B идентично покрытию содержимого подграфика A.
Программное обеспечение Simulink Coverage сообщает о покрытии модели для решений, которые объекты принимают в диаграмме Stateflow во время симуляции модели. Отчет включает в себя покрытие для решений, которые принимают функции таблицы истинности.
Для этого типа таблицы истинности... | Отчет включает в себя данные о покрытии для... |
---|---|
Классика Stateflow | Условия только. |
MATLAB | Условия и только те действия, которые имеют моменты принятия решения. ПримечаниеС MATLAB для языка действия генерации кода можно задать моменты принятия решения в действиях с помощью построений потока управления, таких как циклы и операторы switch. |
Чтобы измерить данные о покрытии модели для таблицы истинности Stateflow, у вас должна быть лицензия Stateflow. Для получения дополнительной информации о таблицах истинности Stateflow, смотрите, Получают Совокупное Покрытие для Допускающих повторное использование Подсистем и Stateflow® Constructs.
Если у вас есть лицензия Stateflow, можно сгенерировать отчет покрытия модели для таблицы истинности.
Рассмотрите следующую модель.
Диаграмма Stateflow содержит следующую таблицу истинности:
Когда вы моделируете модель и собираете покрытие, отчет покрытия модели включает в себя следующие данные:
Столбец Coverage (this object) не показывает покрытия. Причина состоит в том, что контейнерный объект для функции таблицы истинности — диаграмма Stateflow — не решает, выполнить ли таблицу истинности ttable
.
Столбец Coverage (inc. descendants) показывает покрытие для графической функции. Графическая функция имеет логику решения, которая делает переходы для таблицы истинности. Переходы в графической функции содержат решения и условия таблицы истинности. Покрытие для потомков в столбце Coverage (inc. descendants) включает покрытие для этих условий и решений. Вызовы функции к таблице истинности тестируют покрытие модели этих условий и решений.
Вид на море Сгенерированное Содержимое для Таблиц истинности Stateflow (Stateflow) для описания графической функции для таблицы истинности.
Покрытие для решений и их отдельных условий в функции таблицы истинности ttable
следующие.
Инструмент model coverage отображает результаты покрытия модели для отдельных блоков непосредственно в схемах Simulink. Если вы активируете эту опцию, Инструмент model coverage:
Объекты Stateflow подсветок, которые получают покрытие модели во время симуляции
Обеспечивает контекстно-зависимое отображение итоговой информации о покрытии модели для каждого объекта
Изменения инструмента покрытия окрашивают только для открытых графиков в то время, когда информация покрытия сообщается. Когда вы взаимодействуете с графиком, таким как выбор перехода или состояния, цвета возвращаются к значениям по умолчанию.
Для получения дополнительной информации при включении и выборе этой функции в окне Simulink, смотрите, Включают Выделение Покрытия.
Если вы включаете покрытие отображения с окраской модели, в любое время это, модель генерирует отчет покрытия модели, отдельные объекты диаграммы, получающие покрытие, кажутся подсвеченными со светло-зеленым или светло-красным цветом.
Откройте модель sf_car
.
Выберите Analysis> Coverage> Settings.
В панели Coverage диалогового окна Configuration Parameters выберите Enable coverage analysis.
В Coverage> панель Results, выберите Display coverage results using model coloring.
Нажмите OK.
Моделируйте модель.
После концов симуляции объекты диаграммы с покрытием кажутся подсвеченными.
Объектное выделение указывает на покрытие можно следующим образом:
Светло-зеленый для полного охвата
Светло-красный для частичного покрытия
Никакой цвет для нулевого покрытия
Чтобы вернуться график, чтобы показать исходные цвета, выберите и отмените выбор любых объектов.
Нажмите selection_state
в графике.
Следующий сводный отчет появляется.
Когда вы кликаете по подсвеченному объекту Stateflow, итоговое покрытие для того объекта появляется в Окне экрана Покрытия. Нажатие на гиперссылку открывает раздел отчета покрытия для этого объекта.
Можно установить Окно экрана Покрытия появляться для блока в ответ на наводящий курсор мыши вместо клика мыши одним из двух способов:
Выберите направленную вниз стрелку на правой стороне Окна экрана Покрытия и выберите Focus.
Щелкните правой кнопкой по цветному блоку и выберите Coverage> Display details on mouse-over.
Simulink Coverage может записать покрытие кода, если ваша диаграмма Stateflow содержит пользовательский код C/C++. Для получения дополнительной информации смотрите Покрытие для Пользовательского Кода C/C++ в Моделях Simulink.