Отчет покрытия модели сгенерирован автоматически, если вы симулируете свою модель с помощью кнопки Run. Если вы не использовали кнопку Run, или вы загрузили данные о покрытии, не симулируя модель, сгенерируйте использование отчета Покрытия модели cvhtml
. Для Stateflow® графики, Simulink® Coverage™ записывает выполнение самого графика и выполнение состояний, решения перехода и отдельные условия, которые составляют каждое решение. После концов симуляции покрытие модели сообщает относительно того, как полностью модель была протестирована. Отчет показывает:
Сколько раз каждое исключительное подсостояние выполнено или выходится из его родительского сверхсостояния и введено должное породить историю сверхсостояния
Сколько раз каждое решение перехода было оценено как TRUE или FALSE
Сколько раз каждое условие было оценено как TRUE или FALSE
Примечание
Чтобы измерить данные о покрытии модели для диаграммы Stateflow, вы должны:
Имейте лицензию Stateflow.
Включите отладку/анимацию для графика.
Задайте настройки записи покрытия от панели Coverage диалогового окна Configuration Parameters.
Включение анализа покрытия также включает выбор различных метрик покрытия. Следующие разделы обращаются только к метрикам покрытия, которые влияют на отчеты для диаграмм 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), подутверждает, что это содержит. В примерах, которые следуют, выбор которого подутверждают к процессу, может произойти в одном из трех возможных контекстов.
Примечание
Неявные переходы появляются как пунктирные линии в следующих примерах.
Контекст | Пример | Решения, которые происходят |
---|---|---|
Активный вызов | Состояния
|
Во время обработки |
Неявный выход подсостояния | Переход происходит, чей источник является сверхсостоянием A и чье место назначения является состоянием B.
| Если сверхсостояние имеет два исключительных (OR) подсостояния, это - решение о сверхсостоянии, какое подсостояние выполняет неявный переход от подсостояния до сверхсостояния. |
Запись подсостояния с соединением истории | Соединение истории записывает, какое подсостояние было в последний раз активно, прежде чем из сверхсостояния вышли. | Если то сверхсостояние становится местом назначения одного или нескольких переходов, соединение истории решает который ранее активное подсостояние войти. |
Для получения дополнительной информации смотрите Раздел Отчета Деталей состояния.
Состояние, которое имеет on
event_name
оператор действия должен решить, выполнить ли тот оператор на основе приема заданного события или на накоплении заданного события при использовании временных логических операторов.
Условный переход является переходом с инициирующим событием и/или условием защиты. В условном переходе от одного состояния до другого решение выйти из одного состояния и ввести другого зачислено на сам переход.
Примечание
Только условные переходы получают 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:
sldv.condition
(Simulink Design Verifier)
sldv.test
(Simulink Design Verifier)
sldv.assume
(Simulink Design Verifier)
sldv.prove
(Simulink Design Verifier)
Если у вас нет лицензии 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
модель, которая включает график Bang-Bang Controller. Метрики покрытия для 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 записывает покрытие для любых атомарных субдиаграмм в вашей модели. Записи данных покрытия выполнение самого графика, и выполнение состояний, решения перехода и отдельные условия, которые составляют каждое решение в атомарной субдиаграмме.
Симулируйте sf_atomic_subcharts_map_iodata_fixed
пример Decision Coverage записи и модели:
Откройте пример Stateflow Map Input and Output Data for an Atomic Subchart.
openExample('stateflow/AtomicSubchartInOutDataExample');
Откройте sf_atomic_subcharts_map_iodata_fixed
модель.
open_system('sf_atomic_subcharts_map_iodata_fixed')
Эта модель содержит два блока Sine Wave, которые предоставляют входные сигналы к диаграмме Stateflow. Этот график содержит две атомарных субдиаграммы — A и B — которые соединяются из того же графика библиотеки, также названного A. График библиотеки содержит следующие объекты:
В Редакторе Simulink выберите Model Settings на вкладке Modeling. Выберите панель Coverage диалогового окна Configuration Parameters.
Выберите Enable coverage analysis и затем выберите Entire System.
Нажмите OK, чтобы закрыть диалоговое окно Configuration Parameters.
Симулируйте sf_atomic_subcharts_map_iodata_fixed
модель путем нажатия кнопки Run.
Когда симуляция завершается, отчет покрытия открывается.
Отчет обеспечивает данные о покрытии для атомарных субдиаграмм 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) включает покрытие для условий и решений о логических выражениях, представленных таблицей истинности.
Покрытие для решений и их отдельных условий в ttable
функция таблицы истинности следующие:
Simulink Coverage отображает результаты покрытия модели для отдельных блоков непосредственно в диаграммах Stateflow. Когда вы симулируете свою модель с включенным покрытием, отображения модели:
Выделение для элементов Stateflow, которые получают покрытие модели в процессе моделирования
Контекстно-зависимое отображение итоговой информации о покрытии модели для каждого объекта
Для получения дополнительной информации при включении выделения покрытия, смотрите, Включают Выделение Покрытия.
Когда вы включаете покрытие и симулируете модель с кнопкой Run, модель подсвечивает отдельные элементы Stateflow, получающие покрытие. Если при запуске свое использование модели sim
модель не отображает результаты покрытия по умолчанию. В этом случае вы видите, что модель подсвечивает при помощи cvmodelview
.
Откройте sf_car
модель от Симулирует График как блок Simulink С Локальными Событиями (Stateflow).
Во вкладке Modeling нажмите Model Settings.
В панели Coverage диалогового окна Configuration Parameters выберите Enable coverage analysis.
В разделе Coverage metrics, набор Structural coverage level к Modified Condition Decision Coverage (MCDC)
.
Нажмите OK.
Симулируйте модель путем нажатия кнопки Run (Coverage).
Откройте диаграмму Stateflow shift_logic.
После концов симуляции модель подсвечивает объекты диаграммы, которые анализировались для покрытия.
Цвета указывают на полноту анализа покрытия:
Зеленая граница для полного охвата
Красная граница для частичного или недостающего покрытия
Светло-серый для элементов, не анализируемых для покрытия
Состояния, которые включают исполняемый код и условные переходы, которые используют MATLAB в качестве языка действия, отображают гранулированный текст, окрашивающий, на основе которого удовлетворяют результатам. Грин указывает, что результаты, которым удовлетворяют, и красный указывают на неудовлетворенные результаты. Например, рассмотрите следующий график:
В этом примере, if
оператор оценил и к истине и лжи и к поэтому имеет полный Decision Coverage. В операторе, условие a > 0
оцененный и к истине и лжи и имеет полное покрытие условия. Условие b > 0
, однако, оцененный к истине, но не ложный и поэтому имеет только частичное покрытие условия.
Simulink Coverage может записать покрытие кода, если ваша диаграмма Stateflow содержит пользовательский код C/C++. Для получения дополнительной информации смотрите Покрытие для Пользовательского Кода C/C++ в Моделях Simulink.