Программное обеспечение 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
взят, включая провалиться случай.
для
Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true
, по крайней мере, однажды, и false
, по крайней мере, однажды.
в то время как
Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true
, по крайней мере, однажды и оценивает к false
, по крайней мере, однажды.
Во время симуляции, в функции блока MATLAB function, следующие логические условия тестируются на условие и покрытие MCDC:
Условия оператора if
Условия оператора while
Логические выражения в операторах присваивания
Следующие функции MATLAB активны в генерации кода и в 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, сконфигурированных для генерации кода. Чтобы включить покрытие модели, выберите Analysis> Coverage> Settings и выберите Enable coverage analysis.
Вы собираете покрытие модели для функций MATLAB можно следующим образом:
Функции в блоке MATLAB function
Функции во внешнем файле MATLAB
Чтобы собрать покрытие для внешнего файла MATLAB, панели Coverage диалогового окна Configuration Parameters, выбирают Coverage for MATLAB files.
Функции 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, сконфигурированных для генерации кода, можно измерить покрытие:
В данном примере рассмотрите следующую модель, которая содержит блок 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.test
и sldv.condition
. Для sldv.condition
, выражение u > -30
, оцененный к true
51 раз. Для sldv.test
, выражение u == 30
, оцененный к true
51 раз.
Для примера данных о покрытии модели для блоков Simulink Design Verifier смотрите Покрытие Целей и Ограничений.