Программное обеспечение Simulink® Coverage™ симулирует модель Simulink и сообщает о данных о покрытии модели для решений и условий кода в блоках MATLAB Function. Покрытие модели только поддерживает покрытие для функций MATLAB®, сконфигурированных для генерации кода.
Например, рассмотрите следующий if
оператор:
if (x > 0 || y > 0) reset = 1;
if
оператор содержит решение с двумя условиями (x > 0
и y > 0
). Программное обеспечение Simulink Coverage проверяет, что все решения и условия взяты во время симуляции модели.
Типы покрытия модели, которое записи программного обеспечения Simulink Coverage для функций MATLAB, сконфигурированных для генерации кода:
В процессе моделирования следующие операторы блока MATLAB Function тестируются на Decision Coverage:
Функциональный заголовок — Decision Coverage составляет 100%, если функциональная или локальная функция выполняется.
if
— Decision Coverage составляет 100% если if
выражение оценивает к true
по крайней мере, однажды, и false
по крайней мере, однажды.
switch
— Decision Coverage составляет 100% если каждый switch
случай взят, включая провалиться случай.
for
— Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true
по крайней мере, однажды, и false
по крайней мере, однажды.
while
— Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true
по крайней мере, однажды, и оценивает к false
по крайней мере, однажды.
В процессе моделирования, в функции блока MATLAB Function, следующие логические условия тестируются на условие и покрытие MCDC:
if
условия оператора
Логические выражения в операторах присваивания
Следующие функции MATLAB активны в генерации кода и в Simulink Design Verifier™:
sldv.condition
(Simulink Design Verifier)
sldv.test
(Simulink Design Verifier)
sldv.assume
(Simulink Design Verifier)
sldv.prove
(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%.
Для примера данных о покрытии для функций Simulink Design Verifier в отчете покрытия смотрите Покрытие Simulink Design Verifier.
Если блок MATLAB function содержит реляционную операцию, реляционная граничная метрика покрытия применяется к этому блоку.
Если блок MATLAB function вызывает функции, содержащие реляционные операции многократно, реляционное граничное покрытие сообщает о совокупном результате по всем экземплярам, где функция вызвана. Если реляционная операция в функции использует операнды различных типов в различных вызовах, реляционное граничное покрытие использует правила допуска для более строгого типа операнда. Например, если реляционная операция использует int32
операнды в одном вызове и double
операнды в другом вызове, реляционное граничное покрытие использует правила допуска для double
операнды.
Для получения информации о правилах допуска и порядке строгости типов, смотрите Реляционное Граничное Покрытие.
Когда вы симулируете свою модель, программное обеспечение Simulink Coverage может собрать данные о покрытии для функций MATLAB, сконфигурированных для генерации кода. Вы включаете покрытие модели из приложения Coverage.
Вы собираете покрытие модели для функций MATLAB можно следующим образом:
Функции в блоке MATLAB Function
Функции во внешнем файле MATLAB
Чтобы собрать покрытие для внешнего файла MATLAB, панели Coverage диалогового окна Configuration Parameters, выбирают Coverage for MATLAB files.
Функции Simulink Design Verifier:
sldv.condition
(Simulink Design Verifier)
sldv.test
(Simulink Design Verifier)
sldv.assume
(Simulink Design Verifier)
sldv.prove
(Simulink Design Verifier)
Чтобы собрать покрытие для этих функций, на панели Coverage диалогового окна Configuration Parameters, выбирают метрику покрытия Objectives and Constraints.
Следующий раздел обеспечивает примеры покрытия модели для каждой из этих ситуаций.
Программное обеспечение Simulink Coverage измеряет покрытие модели для функций в блоке MATLAB Function.
Следующая модель содержит две функции MATLAB в своем блоке MATLAB Function:
В диалоговом окне Configuration Parameters, на панели Solver, под Solver selection, параметры симуляции устанавливаются можно следующим образом:
Ввод Fixed-step
Solver — discrete (no continuous states)
Fixed-step size (fundamental sample time) — 1
Блок MATLAB Function содержит две функции:
Функция верхнего уровня, run_intersect_test
, отправляет координаты за двумя прямоугольниками, одним зафиксированным и другим перемещением, в качестве аргументов к rect_intersect
.
Локальная функция, rect_intersect
, тесты для пересечения между этими двумя прямоугольниками. Источник движущегося прямоугольника увеличивается 1
в x
и y
направления с каждым временным шагом.
Координаты для источника движущегося тестового прямоугольника представлены персистентными данными x1
и y1
, которые оба инициализируются к -1
. Для первой выборки, x1
и y1
оба увеличения к 0
. С тех пор прогрессия прямоугольных аргументов в процессе моделирования находится как показано в следующей диаграмме.
Фиксированный прямоугольник показывают полужирным с нижним левым источником (2,4)
и ширина и высота 2. Во время t = 0
, первый тестовый прямоугольник возникает (0,0)
и ширина и высота 2. Для каждой последующей выборки источник тестового прямоугольника постепенно увеличивается (1,1)
. Прямоугольники в шагах расчета t = 2
, 3, и
4
пересекитесь с тестовым прямоугольником.
Локальная функция rect_intersect
проверки, чтобы видеть, пересекаются ли его два прямоугольных аргумента. Каждый аргумент состоит из координат для нижнего левого угла прямоугольника (источник), и его ширина и высота. x
значения для левых и правых сторон и y
значения для верха и низа вычислены для каждого прямоугольника и сравнены во вложенном if-else
решения. Функция возвращает логическое значение 1, если прямоугольники пересекаются и 0, если они не делают.
Выход Scope в процессе моделирования, который строит возвращаемое значение против шага расчета, подтверждает пересекающиеся прямоугольники для шагов расчета 2
, 3, и
4
.
После симуляции отчет покрытия модели появляется в окне браузера. После сводных данных в отчете раздел Details отчетов отчета покрытия модели относительно каждого отделяется модели.
Отчет покрытия модели для блока MATLAB Function показывает, что сам блок не имеет никаких собственных решений кроме своей функции.
Следующие разделы исследуют отчет покрытия модели на модель в качестве примера в противоположном порядке модели функциональным блоком. Инвертирование порядка помогает вам понять итоговую информацию во главе каждого раздела.
Покрытие для функции MATLAB run_intersect_test. Покрытие модели для блока MATLAB Function функционирует run_intersect_test
появляется под соединенным именем функции. Щелчок по этой ссылке открывает функцию в редакторе.
Ниже соединенного имени функции ссылка на отчет покрытия модели для родительского блока MATLAB Function, который содержит код для run_intersect_test
.
Верхняя часть отчета для функции обобщает свои результаты покрытия модели. Метрики покрытия для run_intersect_test
включайте решение, условие и покрытие MCDC. Можно лучше всего изучить эти метрики путем исследования кода на run_intersect_test
.
Линии с элементами покрытия отмечены подсвеченным номером строки в листинге:
Линия 1 получает Decision Coverage на ли функциональный run_intersect_test
верхнего уровня выполняется.
Линия 6 получает Decision Coverage для своего if
оператор.
Линия 14 получает Decision Coverage на ли локальная функция rect_intersect
выполняется.
Линии 27 и 30 получают решение, условие и покрытие MCDC для их if
операторы и условия.
Каждая из этих линий является предметом отчета, который следует листингу.
Условие right1 < left2
в линии 30 подсвечен в красном. Это означает, что это условие не было протестировано на все свои возможные исходы в процессе моделирования. Точно то, которое из результатов не было протестировано, находится в отчете для решения в линии 30.
Следующие разделы отображают покрытие для каждого run_intersect_test
линия решения. Покрытие для каждой линии названо с самой линией, которая, если кликнувшийся, открывает редактор для обозначенной линии.
Покрытие для Линии 1. Метрики покрытия для линии 1 являются частью данных о покрытии для функционального run_intersect_test
.
Первая линия каждой функции MATLAB, сконфигурированной для генерации кода, получает анализ покрытия, показательный из решения запустить функцию в ответ на вызов. Покрытие для run_intersect_test
указывает, что это выполнилось, по крайней мере, однажды в процессе моделирования.
Покрытие для Линии 6. Решения анализировали таблицу, указывает что решение в линии 6, if isempty(x1)
, выполняемый в общей сложности восемь раз. В первый раз это выполнилось, решение, оцененное к true
, включение run_intersect_test
инициализировать значения его персистентных данных. Остающиеся семь раз решение выполнилось, оно оценило к false
. Поскольку оба возможных исхода произошли, Decision Coverage составляет 100%.
Покрытие для Линии 14. Решения анализировали таблицу, указывает что локальная функция rect_intersect
выполняемый во время тестирования, таким образом получая 100%-е покрытие.
Покрытие для Линии 27. Решения анализировали таблицу, указывает, что существует два возможных исхода для решения в линии 27: true
и false
. Пять из этих восьми раз это выполнялось, решение, оцененное к false
. Остающиеся три раза это оценило к true
. Поскольку оба возможных исхода произошли, Decision Coverage составляет 100%.
Анализируемая таблица Условий проливает некоторый дополнительный свет на решение в линии 27. Поскольку это решение состоит из двух условий, соединенных логическим OR (||
) операция, только одно условие должно оценить true
для решения быть true
. Если первое условие оценивает к true
, нет никакой потребности оценить второе условие. Первое условие, top1 < bottom2
, был оценен восемь раз и был true
дважды. Это означает, что второе условие было оценено только шесть раз. Только в одном случае был он true
, который приносит общий true
случаи для решения к три, как сообщается в Решениях анализировали таблицу.
Покрытие MCDC ищет реверсирования решения, которые происходят, потому что один результат условия изменяется от T
к F
или от F
к T
. Аналитическая таблица MCDC идентифицирует все возможные комбинации результатов для условий, которые приводят к реверсированию в решении. Символьный x
используется, чтобы указать на результат условия, который не важен реверсированию решения. Инвертирующие решение результаты условия, которые не достигаются в процессе моделирования, отмечены набором круглых скобок. Нет никаких круглых скобок, поэтому все инвертирующие решение результаты произошли, и покрытие MCDC завершено для решения в линии 27.
Покрытие для Линии 30. Линия 30 решений, if (right1 < left2 || right2 < left1)
, вкладывается в if
оператор линии, 27 решений и оценены, только если линией 27 решений является false
. Поскольку линия 27 решений оценила false
пять раз линия 30 оценена пять раз, тремя из которых является false
. Поскольку оба true
и false
результаты достигаются, Decision Coverage для линии 30 составляет 100%.
Поскольку линия 30, как линия 27, имеет два условия, связанные логической операцией ИЛИ (||
), условие 2 тестируется, только если условием 1 является false
. Поскольку условие 1 тест false
пять раз условие 2 тестируется пять раз. Из них, условие 2 теста true
два раза и false
три раза, который составляет два случаев true
результат для этого решения.
Поскольку первое условие линии 30 решений не тестирует true
, оба результата не происходят для того условия, и покрытие условия для первого условия подсвечено с, повысился цвет. Покрытие MCDC также подсвечено таким же образом для реверсирования решения на основе true
результат для того условия.
Покрытие для run_intersect_test. На вкладке Details, метрики, которые обобщают покрытие для целого run_intersect_test
о функции сообщают и повторяют как показано.
Результаты, полученные в итоге в сводных данных метрик покрытия, могут быть описаны в следующих заключениях:
Существует восемь результатов решения, о которых сообщают для run_intersect_test
в отчетах линии:
Один для линии 1 (выполняемый)
Два для линии 6 (true
и false
)
Один для линии 14 (выполняемый)
Два для линии 27 (true
и false
)
Два для линии 30 (true
и false
).
Decision Coverage для каждой линии показывает 100% Decision Coverage. Это означает тот Decision Coverage для run_intersect_test
восемь из восьми возможных исходов, или 100%.
Существует четыре условия, о которых сообщают для run_intersect_test
в отчетах линии. Линии 27 и 30 у каждого есть два условия, и каждое условие имеет два результата условия (true
и false
), для в общей сложности восьми результатов условия в run_intersect_test
. Все условия дали положительный результат на обоих true
и false
результаты кроме первого условия линии 30 (right1 < left2
). Это означает что покрытие условия для run_intersect_test
семь из восемь, или 88%.
Таблицы покрытия MCDC для линий решения 27 и 30 каждых списков два случая реверсирования решения для каждого условия, для в общей сложности четырех возможных реверсирований. Только реверсирование решения для разнообразия в оценке условия right1 < left2
из линии 30 от true
к false
не произошел в процессе моделирования. Это означает, что три из четыре или 75% возможных случаев реверсирования были протестированы на в процессе моделирования на покрытие 75%.
Используя ту же модель в Покрытии модели для блоков MATLAB function, предположите функции MATLAB run_intersect_test
и rect_intersect
хранятся во внешнем файле MATLAB под названием run_intersect_test.m
.
Чтобы собрать покрытие для функций MATLAB во внешнем файле, на панели Coverage диалогового окна Configuration Parameters, выбирают Coverage for MATLAB files.
После симуляции сводные данные отчета покрытия модели содержат разделы для модели верхнего уровня и для внешней функции.
Отчет покрытия модели для run_intersect_test.m
сообщают те же данные о покрытии, как будто функции хранились в блоке MATLAB Function.
Для подробного примера отчета покрытия модели для функции MATLAB во внешнем файле см. Внешний Отчет Покрытия файла MATLAB.
Если код MATLAB включает какую-либо из следующих функций Simulink Design Verifier, сконфигурированных для генерации кода, можно измерить покрытие:
sldv.condition
(Simulink Design Verifier)
sldv.test
(Simulink Design Verifier)
sldv.assume
(Simulink Design Verifier)
sldv.prove
(Simulink Design Verifier)
В данном примере рассмотрите следующую модель, которая содержит блок MATLAB Function.
Блок MATLAB Function содержит следующий код:
function y = fcn(u) % This block supports MATLAB for code generation. sldv.condition(u > -30) sldv.test(u == 30) y = 1;
Чтобы собрать покрытие для функций MATLAB Simulink Design Verifier, на панели Coverage в диалоговом окне Configuration Parameters, под Other metrics, выбирают Objectives and Constraints.
После симуляции отчет покрытия модели перечислил покрытие для sldv.condition
и sldv.test
функции. Для sldv.condition
, выражение u > -30
оцененный к true
51 раз. Для sldv.test
, выражение u == 30
оцененный к true
51 раз.
Для примера данных о покрытии модели для блоков Simulink Design Verifier смотрите Покрытие Целей и Ограничений.