Покрытие модели для функций 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 случай взят, включая провалиться случай.

  • for — Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true по крайней мере, однажды, и false по крайней мере, однажды.

  • while — Decision Coverage составляет 100%, если эквивалентное условие цикла оценивает к true по крайней мере, однажды, и оценивает к false по крайней мере, однажды.

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

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

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

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

Покрытие 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, сконфигурированных для генерации кода. Вы включаете покрытие модели из приложения Coverage.

Вы собираете покрытие модели для функций 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.condition и sldv.test функции. Для sldv.condition, выражение u > -30 оцененный к true 51 раз. Для sldv.test, выражение u == 30 оцененный к true 51 раз.

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