Покрытие модели для функций MATLAB

О покрытии модели для функций MATLAB

Программное обеспечение Simulink® Coverage™ моделирует модель Simulink и сообщает о данных о покрытии модели для решений и условий кода в блоках MATLAB function. Покрытие модели только поддерживает покрытие для функций MATLAB®, сконфигурированных для генерации кода.

Например, рассмотрите следующий оператор if:

if (x > 0 || y > 0)
	reset = 1;

Оператор if содержит решение с двумя условиями (x > 0 и y > 0). Программное обеспечение Simulink Coverage проверяет, что все решения и условия взяты во время симуляции модели.

Типы покрытия модели для функций MATLAB

Типы покрытия модели, которое записи программного обеспечения Simulink Coverage для функций MATLAB, сконфигурированных для генерации кода:

Decision Coverage

Во время симуляции следующие операторы блока 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, по крайней мере, однажды.

Условие и покрытие MCDC

Во время симуляции, в функции блока MATLAB function, следующие логические условия тестируются на условие и покрытие MCDC:

  • Условия оператора if

  • Условия оператора while

  • Логические выражения в операторах присваивания

Покрытие Simulink Design Verifier

Следующие функции 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.

Для получения информации о правилах допуска и порядке строгости типов, смотрите Реляционное Граничное Покрытие.

Как собрать покрытие для функций MATLAB

Когда вы моделируете свою модель, программное обеспечение 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.

Следующий раздел обеспечивает примеры покрытия модели для каждой из этих ситуаций.

Примеры: покрытие модели для функций MATLAB

Покрытие модели для блоков MATLAB function

Программное обеспечение Simulink Coverage измеряет покрытие модели для функций в блоке MATLAB function.

Следующая модель содержит две функции MATLAB в своем блоке MATLAB function:

В диалоговом окне Configuration Parameters, на панели Solver, под Solver selection, параметры симуляции устанавливаются можно следующим образом:

  • Ввод Fixed-step

  • Solverdiscrete (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 во внешнем файле

Используя ту же модель в Покрытии модели для блоков 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 включает какую-либо из следующих функций 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 смотрите Покрытие Целей и Ограничений.