В этом примере показано, как использовать модель спецификации для выполнения проверки на основе требований. В этом примере вы следуете систематическому подходу, чтобы проверить свою модель проекта на соответствие требованиям. Подробное описание модели спецификации смотрите в Что такое модель спецификации?.
Этот пример использует контроллер автопилота крена, RollAutopilotMdlRef
которая является моделью проекта, которая управляет углом крена самолета. Контроллер автопилота крена работает в двух высокоуровневых режимах:
1. Режим удержания крена: Этот режим либо поддерживает текущий угол наклона самолета, либо изменяет его в соответствии с заданным пользователем углом.
2. Режим удержания курса: Этот режим либо поддерживает текущий курс, либо катит самолет для достижения заданного пользователем значения курса. Для получения дополнительной информации о системе Roll Autopilot Controller, смотрите Основанное на требованиях Проверку для Разработки Модели (Simulink Test).
Для контроллера автопилота требования описывают системные интерфейсы, высокоуровневые системные режимы и ожидаемое поведение контроллера. Эти требования создаются в редакторе требований и сохраняются в AP_Controller.slreqx
файл. Дополнительные сведения о редакторе требований см. в разделе Работа с требованиями в редакторе Simulink (Simulink Requirements). Чтобы просмотреть требования, откройте Редактор требований путем ввода:
slreq.open('AP_Controller');
В редакторе требований отображаются требования высокого уровня для режимов удержания крена и удержания заголовка. При щелчке по каждому требованию на вкладке перечисляются подробные данные для этого требования.
Когда вы создаете модель спецификации, необходимо учитывать несколько факторов, таких как тип требований, выбор блоков модели и уровень абстракции. Следуйте руководствам, описанным в разделе Создание модели спецификации.
Откройте sldvexSpecPartial
модель спецификации, которая охватывает набор требований автопилота:
spec_model = 'sldvexSpecPartial';
open_system(spec_model);
The sldvexSpecPartial
модель состоит из входного и выходного интерфейсов. Таблица истинности захватывает требования.
Чтобы открыть таблицу истинности, введите:
open_system('sldvexSpecPartial/AP Controller Requirements');
Выполните эти шаги, чтобы связать требования с моделью спецификации.
1. Щелкните правой кнопкой мыши таблицу истинности с именем AP Controller Requirements
в модели спецификации. В контекстном меню выберите Requirements > Select для связывания с Simulink.
2. Откройте требования в редакторе требований. Щелкните правой кнопкой по требованию, которое необходимо связать с таблицей истинности, и выберите Ссылка из Требования к контроллеру AP (Таблица истинности). Если у вас есть несколько таблиц истинности, каждая из которых задает группу требований, соедините их также.
Использование sldvoptions
чтобы сгенерировать тесты для модели спецификации. Каждое требование было связано с отдельной целью генерации тестов с помощью sldv.test()
.
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'None'; [~, files] = sldvrun(spec_model,opts,true);
После завершения анализа в окне Сводка результатов (Results Summary) отображается, что шесть из шести целей удовлетворены.
Модель спецификации контроллера автопилота и модели проекта имеют различные интерфейсы, что означает, что тесты, сгенерированные на шаге 4, не поддерживаются для выполнения симуляции на модель проекта.
Для примера Угол крена самолета имеет тип области значений перечисления в спецификации, но имеет двойной тип в модель проекта.
В процессе тестового преобразования, если значение сигналов, такое как RA_Horizontal, является областью значений, можно выбрать любое значение, которое попадает в эту область значений. Может использоваться различная эвристика, такая как средняя точка (где можно выбрать среднюю точку области значений), граничное значение (где можно выбрать нижнюю или верхнюю границу области значений) или даже случайная стратегия (где вы выбираете случайное значение в области значений). Для контроллера автопилота подсистема sldvexDesignHarness/Test Conversion
реализует стратегию средней точки в модели тестовой обвязки, как показано ниже:
design_model = 'sldvexDesignHarness'; load_system(design_model); open_system('sldvexDesignHarness/Test Conversion');
Разработка модели проекта осуществляется независимо с помощью документа требований. Чтобы проверить проект, создайте модель тестовой обвязки, которая содержит эти четыре подсистемы:
(i) Модель спецификации.
Модель проекта.
Подсистема тестового преобразования, описанная на стадии 5.
(iv) Блок верификации во время выполнения. Этот блок проверяет, находится ли проект значения сигналов в области значений, заданной моделью спецификации.
Запустите тесты с шага 5 на модель проекта при помощи sldvruntest
и сгенерируйте отчет о покрытии модели.
cvopts = sldvruntestopts;
cvopts.coverageEnabled = true;
[~, initCov] = sldvruntest(design_model,files.DataFile,cvopts);
cvhtml('InitialCov',initCov);
Результаты анализа сообщают, что полный охват для roll_ap_mod
не достигается, и охват подсистемы достигается для модели проекта.
Добавить требование добавляется к sldvexSpecFull
модель спецификации для анализа.
spec_model = 'sldvexSpecFull';
open_system(spec_model);
Использование sldvoptions
для генерации тестов.
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.ModelCoverageObjectives = 'None'; [~, files] = sldvrun(spec_model,opts,true);
Откройте sldvexDesignHarness
модель, которая содержит модель проекта, модель спецификации и подсистему тестового преобразования.
design_model = 'sldvexDesignHarness';
open_system(design_model);
Симулируйте тесты при помощи sldvruntest
и сгенерируйте отчет о покрытии модели.
cvopts = sldvruntestopts;
cvopts.coverageEnabled = true;
[~, FinalCov] = sldvruntest(design_model,files.DataFile,cvopts);
cvhtml('FinalCov', FinalCov);
Отчет о покрытии показывает, что полное покрытие достигается от модели проекта.
bdclose('all');
slreq.clear;