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

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

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

Для примера рассмотрим следующее if оператор:

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

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

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

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

Decision Coverage

Во время симуляции для Decision Coverage проверяются следующие операторы блоков MATLAB Function:

  • Заголовок функции - 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 диалогового окна Параметров конфигурации, программное обеспечение 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 панели диалогового окна Параметры конфигурации выберите Coverage for MATLAB files.

  • Функции Simulink Design Verifier:

    Чтобы собрать покрытие для этих функций, на панели Coverage диалогового окна Параметры конфигурации выберите Objectives and Constraints метрику покрытия.

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

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

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

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

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

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

  • TypeFixed-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 проверяет, пересекаются ли два аргумента прямоугольника. Каждый аргумент состоит из координат для левого нижнего угла прямоугольника (origin), и его ширины и высоты. x значения для левой и правой сторон и y значения для верхней части и низа вычисляются для каждого прямоугольника и сравниваются во вложенных if-else решения. Функция возвращает логическое значение 1, если прямоугольники пересекаются, и 0, если они не пересекаются.

Возможности выхода во время симуляции, который строит график возврата значения относительно шага расчета, подтверждают пересекающиеся прямоугольники для шагов расчета 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.  Таблица Decisions analysed указывает, что решение в линии 6, if isempty(x1), казнен в общей сложности восемь раз. При первом выполнении решение оценивалось как true, что позволяет run_intersect_test для инициализации значений его постоянных данных. Остальные семь раз, чем было исполнено решение, он оценивался как false. Поскольку оба возможных результата произошли, Decision Coverage составляет 100%.

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

Покрытие для линии 27.  Проанализированная таблица Decisions указывает, что существует два возможных результата для решения в линии 27: true и false. Пять из восьми раз он был исполнен, решение оценивалось как false. Оставшиеся три раза он оценивался как true. Поскольку оба возможных результата произошли, Decision Coverage составляет 100%.

Анализируемая Условиями таблица проливает некоторый дополнительный свет на решение в линию 27. Потому что это решение состоит из двух условий, связанных логическим OR (||) операция, только одно условие должно быть оценено true для принятия решения о true. Если первое условие оценивается как true, нет необходимости оценивать второе условие. Первое условие, top1 < bottom2, был оценен восемь раз и был true дважды. Это означает, что второе условие оценивалось всего шесть раз. Только в одном случае это было true, что приносит общее true вхождения принятия решения до трех, как указано в анализируемой таблице Decisions.

Покрытие 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, имеет два условия, связанных логическим оператором OR (||), условие 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 диалогового окна Параметры конфигурации выберите Coverage for MATLAB files.

После симуляции сводные данные отчетов о покрытии модели содержат разделы для модели верхнего уровня и для внешней функции.

Отчет о покрытии модели для run_intersect_test.m сообщает те же данные покрытия, как если бы функции хранились в блоке MATLAB Function.

Подробный пример отчета о покрытии модели для функции 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 в диалоговом окне Параметры конфигурации, под Other metrics, выберите Objectives and Constraints.

После симуляции в отчете о покрытии модели перечислено покрытие для sldv.condition и sldv.test функций. Для sldv.condition, выражение u > -30 рассчитано как true 51 раз. Для sldv.test, выражение u == 30 рассчитано как true 51 раз.

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