Программное обеспечение Simulink ® Coverage™ моделирует модель Simulink и сообщает данные о покрытии модели для решений и условий кода в функциональных блоках MATLAB. Покрытие модели поддерживает только покрытие функций MATLAB ®, сконфигурированных для генерации кода.
Например, рассмотрим следующее: if заявление:
if (x > 0 || y > 0) reset = 1;
if оператор содержит решение с двумя условиями (x > 0 и y > 0). Программное обеспечение Simulink Coverage проверяет, что все решения и условия принимаются во время моделирования модели.
Типы покрытия модели, которые записывает программное обеспечение Simulink Coverage для функций MATLAB, сконфигурированных для генерации кода:
Во время моделирования проверяются следующие операторы функциональных блоков MATLAB для покрытия принятия решений:
Заголовок функции - покрытие решения составляет 100%, если выполняется функция или локальная функция.
if - Покрытие принятия решений составляет 100%, если if выражение вычисляется как true по крайней мере один раз, и false хотя бы один раз.
switch - Охват принятия решений составляет 100%, если каждый switch берется случай, включая падающий случай.
for - Покрытие принятия решения составляет 100%, если эквивалентное условие цикла оценивается как true по крайней мере один раз, и false хотя бы один раз.
while - Покрытие принятия решения составляет 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)
При указании показателя покрытия «Цели и ограничения» на панели «Покрытие» диалогового окна «Параметры конфигурации» программное обеспечение 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 содержит реляционную операцию, к этому блоку применяется показатель покрытия реляционной границы.
Если функциональный блок MATLAB вызывает функции, содержащие реляционные операции, несколько раз, покрытие реляционной границы сообщает о кумулятивном результате по всем экземплярам, где вызывается функция. Если реляционная операция в функции использует операнды различных типов в различных вызовах, реляционная граничная зона покрытия использует правила допуска для более строгого типа операнда. Например, если реляционная операция использует int32 операнды в одном вызове, и double операнды в другом вызове, реляционное граничное покрытие использует правила допуска для double операнды.
Сведения о правилах допуска и порядке строгости типов см. в разделе Покрытие реляционных границ.
При моделировании модели программное обеспечение Simulink Coverage может собирать данные покрытия для функций MATLAB, сконфигурированных для генерации кода. Вы включаете покрытие модели из приложения Покрытие.
Покрытие модели для функций MATLAB выполняется следующим образом:
Функции в функциональном блоке MATLAB
Функции во внешнем файле 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)
Чтобы собрать покрытие для этих функций, на панели Покрытие (Coverage) диалогового окна Параметры конфигурации (Configuration Parameters) выберите метрику покрытия Цели и ограничения (Targets and Constraints).
В следующем разделе приведены примеры модельного покрытия для каждой из этих ситуаций.
Программное обеспечение Simulink Coverage измеряет покрытие модели для функций в функциональном блоке MATLAB.
Следующая модель содержит две функции MATLAB в функциональном блоке MATLAB:

В диалоговом окне Параметры конфигурации (Configuration Parameters) на панели Решатель (Solver) в разделе Выбор решателя (Solver selection) параметры моделирования задаются следующим образом.
Тип - Fixed-step
Решатель - discrete (no continuous states)
Фиксированный размер шага (основное время выборки) - 1
Функциональный блок MATLAB содержит две функции:
Функция верхнего уровня, 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, если они не пересекаются.
Выходные данные области во время моделирования, отображающие возвращаемое значение относительно времени выборки, подтверждают пересекающиеся прямоугольники для времени выборки 2, 3, и 4 .

После моделирования отчет о покрытии модели появляется в окне браузера. После сводки в отчете в разделе Подробно отчета об охвате модели отображаются отчеты по каждой части модели.
Отчет о покрытии модели для функционального блока MATLAB показывает, что сам блок не имеет собственных решений, кроме своей функции.
В следующих разделах рассматривается отчет об охвате модели для модели в обратном порядке. Сторнирование заказа помогает получить представление о сводной информации в верхней части каждого раздела.
Покрытие для run_intersect_test функций MATLAB. Покрытие модели для функции функционального блока MATLAB run_intersect_test появляется под связанным именем функции. По ссылке открывается функция в редакторе.
Под именем связанной функции находится ссылка на отчет об покрытии модели для родительского функционального блока MATLAB, который содержит код для run_intersect_test.

Верхняя половина отчета для функции суммирует результаты модельного покрытия. Метрики покрытия для run_intersect_test включают решение, условие и покрытие MCDC. Эти показатели лучше всего понять, изучив код для run_intersect_test.

Строки с элементами покрытия помечаются выделенным номером строки в списке:
Строка 1 получает покрытие для принятия решения о том, является ли функция верхнего уровня run_intersect_test выполняется.
Строка 6 получает покрытие для принятия решения if заявление.
Линия 14 получает покрытие для принятия решения о том, является ли локальная функция 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. Поскольку произошли оба возможных результата, охват принятием решений составляет 100%.

Покрытие для линии 14. Таблица «Решения проанализированы» показывает, что локальная функция rect_intersect выполняется во время тестирования, получая таким образом 100% покрытия.

Покрытие для линии 27. Таблица «Решения проанализированы» показывает, что есть два возможных результата для решения в строке 27: true и false. Пять из восьми раз оно было исполнено, решение оценено false. Остальные три раза он оценивал до true. Поскольку произошли оба возможных результата, охват принятием решений составляет 100%.
Проанализированная таблица условий проливает дополнительный свет на решение в строке 27. Поскольку это решение состоит из двух условий, связанных логическим ИЛИ (||) операция, только одно условие должно оценить 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 достигаются результаты, охват принятия решений для строки 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).
Покрытие принятия решения для каждой строки показывает 100% покрытие принятия решения. Это означает, что покрытие решений для 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», предположим, что функции MATLAB run_intersect_test и rect_intersect хранятся во внешнем файле MATLAB с именем run_intersect_test.m.
Для сбора покрытия для функций MATLAB во внешнем файле на панели «Покрытие» диалогового окна «Параметры конфигурации» выберите «Покрытие для файлов MATLAB».
После моделирования сводка отчета об охвате модели содержит разделы для модели верхнего уровня и для внешней функции.

Отчет о покрытии модели для 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.

Функциональный блок MATLAB содержит следующий код:
function y = fcn(u) % This block supports MATLAB for code generation. sldv.condition(u > -30) sldv.test(u == 30) y = 1;
Чтобы собрать покрытие для функций Simulink Design Verifier MATLAB, на панели Покрытие (Coverage) в диалоговом окне Параметры конфигурации (Configuration Parameters) в разделе Другие метрики (Other metrics) выберите Цели и ограничения (Targets and Constraints).
После моделирования в отчете о покрытии модели был указан охват для sldv.condition и sldv.test функции. Для sldv.condition, выражение u > -30 оценено в true 51 раз. Для sldv.test, выражение u == 30 оценено в true 51 раз.

Пример данных покрытия модели для блоков Simulink Design Verifier см. в разделе Цели и ограничения покрытия.