Тестовые библиотечные блоки

Если ваша модель включает образцы блоков из библиотеки, можно протестировать как исходный блок в библиотеке, так и отдельные образцы блоков в других моделях. Можно также протестировать код программы в цикле (SIL), сгенерированный для повторно используемой подсистемы библиотеки. Во-первых, создайте тестовые обвязки для библиотечного блока, чтобы протестировать ваш проект. Когда библиотечный блок удовлетворяет вашим требованиям, создайте тестовые обвязки для связанных блоков и протестируйте образцы подсистемы. Можно переместить тестовые обвязки из библиотеки в образец и образец в библиотеку.

Рабочий процесс тестирования библиотеки

Эта процедура описывает пример рабочего процесса для проверки подсистем библиотеки и связанных подсистем.

  1. Создайте тест и тестовую обвязку для подсистемы библиотеки.

  2. Протестируйте подсистему библиотеки. Если это не соответствует вашим требованиям, пересмотрите проект и повторите тест.

  3. Заблокируйте библиотеку, когда ваши тесты пройдут.

  4. В модели создайте связанную подсистему и сохраните тестовые обвязки библиотеки.

  5. Сравните выходные данные связанного образца с выходными данными библиотечного блока с помощью теста эквивалентности.

  6. Создайте дополнительные тесты и тестовые обвязки для связанных образцов.

  7. Продвигайте тестовую обвязку из связанной подсистемы в библиотеку, если хотите включить тестовую обвязку с будущими связанными подсистемами.

Библиотека и связанная подсистема Тестовых обвязок

Тестовая обвязка для подсистемы библиотеки имеет определенные свойства:

  • Библиотеки не компилируются, поэтому тестовая обвязка для подсистемы библиотеки не использует скомпилированные атрибуты, такие как тип данных или частота дискретизации.

  • Тестовая обвязка для подсистемы библиотеки не генерирует подсистемы преобразования для входов и выходов блоков.

  • Подсистема библиотеки, тестовой обвязки не использует операции push или rebuild, потому что библиотеки не используют параметры конфигурации.

Когда вы создаете связанную подсистему из подсистемы библиотеки, тестовые обвязки копируют в связанный образец. Если вам не нужен тестовые обвязки, можно удалить их. Инструкции по удалению всех тестовых обвязок из модели см. в разделе Управление тестовых обвязках.

Когда вы создаете тестовую обвязку для связанной подсистемы, обвязка связывается со связанной подсистемой, а не с подсистемой библиотеки. Можно переместить тестовую обвязку из связанной подсистемы в подсистему библиотеки. Для примера эта связанная подсистема Controller имеет три тестовых обвязок. Как переместить Requirements_Tests1 тестовая обвязка в библиотеку:

  1. Щелкните значок обвязки в связанной подсистеме.

  2. Щелкните значок Harness Operations .

  3. Выберите Move to Library.

  4. Диалоговое окно сообщает, что перемещение обвязки удаляет его из связанной подсистемы.

  5. После подтверждения обвязка появляется с подсистемой библиотеки.

Редактировать Библиотечный блок из Тестовой обвязки

Можно применить итерационный рабочий процесс проекта и тестирования к библиотекам, протестировав библиотечный блок в тестовой обвязке и обновив тестируемый компонент. Изменения в тестируемом компоненте синхронизируются с библиотекой, когда вы закрываете тестовую обвязку.

Если у вас есть библиотечный блок, проект которого завершен, установите тестовые обвязки, чтобы предотвратить изменения тестируемого компонента. Вы можете задать это свойство при создании тестовой обвязки или после обвязки создания. См. «Создание тестовых обвязок» и «Выбор свойств».

Проверка библиотеки и связанного блока

Проверьте повторно используемую подсистему в библиотеке и в большей системе.

Этот пример демонстрирует тест, которая подтверждает, что библиотечный блок соответствует краткому набору требований. После проверки библиотечного блока вы выполняете регрессионный тест связанного блока и захватываете результаты базового уровня. Затем вы продвигаете тестовую обвязку базовой линии в библиотеку.

Библиотечный блок управляет простой системой теплового насоса, подавая сигналы включения/выключения на вентилятор и компрессор и определяя режим теплового насоса (отопление или охлаждение).

Откройте тестовый файл

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

testFile = 'sltestHeatpumpLibraryTests.mldatx';
library = 'sltestHeatpumpLibraryExample';
system = 'sltestHeatpumpLibraryLinkExample';
open(testFile);

Разверните тестовый набор Библиотечного блока Test и выделите тест Requirements Scenarios в тестовом браузере. Разверните раздел «Тестовая обвязка» в разделе «Тестируемая система» и щелкните на стреле, чтобы открыть тестовую обвязку для библиотечного блока.

open_system(library);
sltest.harness.open([library '/Controller'],'Requirements_Tests');

Блок Test Sequence устанавливает три сценария для контроллера:

  • Контроллер на холостом ходу

  • Контроллер, активирующий только вентилятор

  • Контроллер, активирующий систему нагрева и охлаждения

Блок Test Assessment в тестовую обвязку проверяет сигналы для каждого сценария. Поскольку тестовые воздействия и оценки содержатся в тестовой обвязке, и никакие базовые данные не регистрируются, контрольный пример является тестом моделирования.

Запуск основанного на требованиях теста

В менеджере тестов запустите контрольный пример Requirements Scenarios. The verify результаты оператора показывают, что control_out проходят сигналы.

Откройте модель связанного блока

В диспетчере тестов разверните раздел «Образец». Выделите контрольный пример Baseline Test. В тестируемой системе щелкните стреле рядом с полем Model, чтобы открыть модель.

sltest.harness.close([library '/Controller'], 'Requirements_Tests');
open_system(system);
sim(system);

Контроллер является связанным блоком с библиотекой. Это связано с тестовой обвязкой регрессионным тестом, который сравнивает результаты симуляции из образца с базовыми данными. В вашем рабочем процессе успешные проверки базовой линии для образцов блока библиотеки могут показать, что связанный блок правильно моделирует в содержащей его модели. Тестовая обвязка обеспечивает синусоиде температуру и захватывает контроллер выход.

Запустите регрессионный тест и наблюдайте результаты

В диспетчере тестов нажмите Запуск, чтобы выполнить тест. Результаты показывают, что базовый тест прошел.

Переместите тестовую обвязку в библиотеку

Если вы разрабатываете особенно полезный тест для связанного блока, можно продвигать тестовую обвязку от связанного блока к исходному библиотечному блоку. Затем тестовый кабель копируется во все будущие образцы библиотечного блока.

Переместите Baseline_controller_tests тестовая обвязка в библиотечный блок:

1. В модели sltestHeatpumpLibraryLinkExample щелкните значок обвязки и наведите указатель мыши на Baseline_controller_tests тестовая обвязка.

2. Щелкните значок операций обвязок

3. Выберите «Переместить в библиотеку». Диалоговое окно сообщает вам, что операция удаляет тестовую обвязку из образца и добавляет его в библиотеку. Нажмите Да.

4. Тестовая обвязка переходит к Контроллеру библиотечного блока.

close_system(library,0);
close_system(system,0);
clear(library,system,testFile);
sltest.testmanager.clear;
sltest.testmanager.clearResults;

SIL-тестирование переиспользуемой подсистемы библиотеки

В этом примере показано, как выполнить модульное тестирование повторно используемого компонента в библиотеке. Он тестирует код программы в цикле (SIL), сгенерированный для подсистемы, используя тест эквивалентности.

Переиспользуемая библиотечная подсистема должна располагаться на верхнем уровне библиотеки и должна иметь функциональные интерфейсы для блокировки интерфейса подсистемы. Для получения информации о переиспользуемых библиотеках подсистем, интерфейсах функций и ограничениях рабочего процесса, смотрите Library-Based Code Generation for Reusable Library Subsystems (Embedded Coder).

Настройка окружения генерации кода

orig = Simulink.fileGenControl('get','CodeGenFolderStructure');
Simulink.fileGenControl('set','CodeGenFolderStructure',...
    Simulink.filegen.CodeGenFolderStructure.TargetEnvironmentSubfolder);

Откройте переиспользуемую библиотеку

Эта библиотека содержит блок подсистемы на верхнем уровне.

ReuseLibSubsysExample

Создайте библиотеку

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

slbuild('ReuseLibSubsysExample');
### Starting build procedure for: Double
### Generating code and artifacts to 'Target environment subfolder' folder structure
### Generating code into build folder: /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/Double
### Invoking Target Language Compiler on Double.rtw
### Using System Target File: /mathworks/devel/bat/BR2021ad/build/matlab/rtw/c/ert/ert.tlc
### Loading TLC function libraries
......
### Initial pass through model to cache user defined code
.
### Caching model source code
............................................
    ### Writing header file Subsystem_8qFtgSZM.c
.
    ### Writing header file Double_types.h
    ### Writing header file Double.h
    ### Writing header file rtwtypes.h
    ### Writing header file Subsystem_8qFtgSZM.h
    ### Writing source file Double.c
.
    ### Writing header file Double_private.h
    ### Writing source file ert_main.c
  ### TLC code generation complete.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/_shared/rtwshared.mk' ...
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/Double/Double.mk' ...
### Successful completion of code generation for: Double

The following files will be copied from IntelWin64/_shared to /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/ReuseLibSubsysExample/R2021a:

    Subsystem_8qFtgSZM.c
    Subsystem_8qFtgSZM.h
    shared_file.dmr

Files copied from IntelWin64/_shared to /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/ReuseLibSubsysExample/R2021a.
### Starting build procedure for: Single
### Generating code and artifacts to 'Target environment subfolder' folder structure
### Generating code into build folder: /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/Single
### Invoking Target Language Compiler on Single.rtw
### Using System Target File: /mathworks/devel/bat/BR2021ad/build/matlab/rtw/c/ert/ert.tlc
### Loading TLC function libraries
......
### Initial pass through model to cache user defined code
.
### Caching model source code
............................................
    ### Writing header file Subsystem_JUQsZMO7.c
    ### Writing header file Single_types.h
.
    ### Writing header file Single.h
    ### Writing header file Subsystem_JUQsZMO7.h
    ### Writing source file Single.c
    ### Writing header file Single_private.h
    ### Writing source file ert_main.c
.
  ### TLC code generation complete.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/_shared/rtwshared.mk' ...
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/Single/Single.mk' ...
### Successful completion of code generation for: Single

The following files will be copied from IntelWin64/_shared to /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/ReuseLibSubsysExample/R2021a:

    Subsystem_JUQsZMO7.c
    Subsystem_JUQsZMO7.h
    shared_file.dmr

Files copied from IntelWin64/_shared to /tmp/BR2021ad_1584584_202060/publish_examples4/tpfe114df1/ex98874249/IntelWin64/ReuseLibSubsysExample/R2021a.

Выберите Компонент Подсистемы и откройте Диспетчер тестов

Щелкните Подсистема (Subsystem) в модели библиотеки, чтобы выбрать ее. Затем откройте Test Manager.

sltestmgr

Откройте тестовый файл

  1. В Диспетчере тестов нажмите Открыть и выберите ReuseLibSubsysTest.mldatx файл.

Включите набор покрытия

  1. Выберите ReuseLibSubsysTest на панели браузера тестов.

  2. Затем разверните раздел «Параметры покрытия» на основной панели.

  3. В поле Переадресация для сбора проверьте переадресацию записи для тестируемой системы.

  4. В метриках покрытия проверьте, что выбраны Decision, MCDC и условие.

Откройте мастер создания теста для компонента модели

  1. Щелкните стреле в разделе Создать (New) и выберите Тест (Test) для Компонента модели (Model Component), чтобы открыть мастер создания теста для компонента модели (Create Test for Model Component).

  2. На первой странице мастера щелкните значок Использовать выбранный компонент модели рядом с полем Компонент. Заполняются поля « Компоненты» и «Модель верхней части».

  3. Щелкните значок обновления рядом с полем Select function interface и выберите Double из выпадающего списка.

  4. Нажмите кнопку Далее.

Выберите тестовые воздействия

  1. Выберите Использовать Проект Verifier, чтобы сгенерировать тестовое воздействие сценарии.

  2. Выберите Inports в качестве тестовой обвязки источника входа.

  3. Нажмите кнопку Далее.

Выберите способ тестирования компонента

  1. Выберите Выполнить обратную проверку.

  2. Установите Simulation1 в режим normal mode.

  3. Установите Simulation2 в режим Software-in-the-Loop (SIL).

  4. Нажмите кнопку Далее.

Укажите формат и расположение файла данных

  1. Выберите MAT в качестве формата файла.

  2. Выберите Добавить тесты к текущему выбранному тестовому файлу.

Сгенерируйте тестовый пример и вернитесь к менеджеру тестов

Нажмите Done, чтобы сгенерировать Double_harness1 тест для интерфейса функции Double.

После завершения генерации тестового примера в Диспетчере тестов появляется Double_harness1 контрольный пример. Заметьте, что в Simulation Mode for Simulation1 установлено значение Normal, а в Simulation2 - значение Software-in-the-Loop (SIL).

Запуск теста

Нажмите Запуск.

Просмотр результатов эквивалентности

Разверните раздел Результаты (Results), чтобы просмотреть результат критерия эквивалентности. Заметьте, что график «Различия» не показывает различий между этими двумя сигналами, что указывает на то, что симуляции Normal и SIL дают одинаковые результаты. Код SIL, сопоставленный с переиспользуемой подсистемой библиотеки, может быть повторно использован для других тестов SIL.

Просмотр результатов покрытия

Разверните раздел «Агрегированное покрытие», чтобы просмотреть результаты покрытия. Два результата покрытия, которые показывают 100%, предназначены для запуска эквивалентности для функционального интерфейса Double. Другие два результата показывают 0% или отсутствие покрытия, поскольку интерфейс с одной функцией не был протестирован.

Очистка

Simulink.fileGenControl('set','CodeGenFolderStructure',orig);

Похожие темы