exponenta event banner

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

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

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

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

  1. Создайте тестовый пример и тестовый жгут для библиотечной подсистемы.

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

  3. Заблокируйте библиотеку по завершении тестов.

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

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

  6. Создайте дополнительные тестовые примеры и тестовые жгуты для связанного экземпляра.

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

Тестовые жгуты библиотеки и связанной подсистемы

Тестовый электрический жгут для библиотечной подсистемы имеет следующие свойства:

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

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

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

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

При создании тестового электрического жгута для связанной подсистемы этот электрический жгут связывается со связанной подсистемой, а не с библиотечной подсистемой. Тестовый электрический жгут можно переместить из связанной подсистемы в библиотечную подсистему. Например, эта связанная подсистема Controller имеет три тестовых жгута. Чтобы переместить Requirements_Tests1 тестовый жгут к библиотеке:

  1. Щелкните значок электрического жгута на связанной подсистеме.

  2. Щелкните значок «Операции с кабелями ».

  3. Выберите «Переместить в библиотеку».

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

  5. После подтверждения электрический жгут появится вместе с библиотечной подсистемой.

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

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

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

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

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

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

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

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

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

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

Разверните набор тестов «Library Block Test» и выделите в обозревателе тестов тестовый сценарий «Requirements Scriptions». Разверните раздел «Тестовый электрический жгут» раздела «Система в испытании» и щелкните стрелку, чтобы открыть тестовый электрический жгут для блока библиотеки.

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

Блок тестовой последовательности устанавливает три сценария для контроллера:

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

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

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

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

Выполнение теста на основе требований

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

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

В диспетчере тестов разверните раздел «Проверка экземпляра». Выделите тестовый пример базового теста. В окне Проверка системы щелкните стрелку рядом с полем Модель, чтобы открыть модель.

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

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

Выполнение базового теста и наблюдение за результатами

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

Перемещение тестового кабеля в библиотеку

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

Переместите тестовый электрический жгут Baseline_controller_tests в блок библиотеки:

1. В модели sltestHeatpumpLibrureLinkExample щелкните значок электрического жгута и наведите курсор на тестовый электрический жгут Baseline_controller_tests.

2. Щелкните значок операций с кабельными трассами

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

4. Тестовый электрический жгут перемещается в блок библиотеки Controller.

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

Тестирование SIL многоразовой библиотечной подсистемы

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

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

Настройка среды генерации кода

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.

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

Щелкните подсистему в модели библиотеки, чтобы выбрать ее. Затем откройте диспетчер тестов.

sltestmgr

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

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

Включить сбор покрытия

  1. На панели «Обозреватель тестов» выберите команду «Повторно использовать LibSubsysTest».

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

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

  4. В окне «Показатели покрытия» проверьте, что выбраны параметры «Решение», «MCDC» и «Условие».

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

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

  2. На первой странице мастера щелкните значок Использовать текущий выбранный компонент модели (Use current selected model component) рядом с полем Компонент (Component). Заполните поля Компонент (Component) и Верхняя модель (Top Model).

  3. Щелкните значок обновления рядом с полем Выбрать интерфейс функции и выберите Double в раскрывающемся списке.

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

Выберите тестовые входы

  1. Выберите Use Design Verifier для создания сценариев тестового ввода.

  2. В качестве источника ввода тестового электрического жгута выберите Inports.

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

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

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

  2. Установите Simulation1 в обычный режим.

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

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

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

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

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

Создание тестового примера и возврат к менеджеру тестов

Нажмите кнопку Done (Готово), чтобы создать Double_harness1 тестовый пример для интерфейса Double function.

После завершения создания тестового случая в диспетчере тестов появляется Double_harness1 тестовый случай. Обратите внимание, что для параметра «Режим моделирования для Simulation1» установлено значение «Обычный», а для параметра «Simulation2» установлен режим «Программное обеспечение в контуре» (SIL).

Запустить тест

Щелкните Выполнить (Run).

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

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

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

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

Очистить

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

Связанные темы