Определение и расширение существующих случаев тестирования

В этом примере показано, как Simulink ® Design Verifier™ может расширить тестовые случаи с помощью дополнительных временных шагов, чтобы эффективно сгенерировать полные наборы тестов.

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

Характеристики модели, которые мотивируют расширение теста

The sldvdemo_sbr_extend_design модель включает диаграмму Stateflow ® SBR который использует временную логику, так что для перехода от KEY_OFF требуются очень длинные тесты состояние в KEY_ON состояние. Этот тип характеристики задержки по времени распространен в проектах, где задержка используется для отклонения ложного поведения или для ожидания ответа физической системы или пользователя. В этом проекте удовлетворение временной логики в этом переходе является общим препятствием для проверки любого из состояний и переходов в KEY_ON состояние.

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

open_system('sldvdemo_sbr_extend_design');
sf('Open',sldvdemo_ssid_to_sfid('sldvdemo_sbr_extend_design/SBR',11));

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

Функция Simulink Design Verifier sldvmakeharness создает модель тестовой обвязки с блоком, который генерирует вход значения в экспериментальные модели, включенные в блок модели-ссылки.

Можно изменить тестовые данные в модели тестовой обвязки путем редактирования значений данных вручную с помощью пользовательского интерфейса Signal Builder. Можно также добавить больше тесты, создав новые группы сигналов в блоке. Также можно использовать signalbuilder команда программно выполнить то же самое.

В этом примере вы задаете тест, которая сохраняет систему в KEY_OFF состояние в течение 5 секунд:

[~, harnessModelFilePath] = sldvmakeharness('sldvdemo_sbr_extend_design',[],[],true);
[~, harnessModel] = fileparts(harnessModelFilePath);

startingTestTime = 0:0.5:5;
startingTestData = cell(3, 1);
lengthStartingTest = length(startingTestTime);
startingTestData{1} = zeros(1,lengthStartingTest);
startingTestData{2} = zeros(1,lengthStartingTest);
startingTestData{3} = ones(1,lengthStartingTest);

signalBuilderBlock = sldvdemo_signalbuilder_block(harnessModel);
signalbuilder(signalBuilderBlock,'Append',...
    startingTestTime, startingTestData,...
    {'Inputs.Speed','Inputs.SeatBeltFasten','Inputs.KEY'},'Starting Test Case');

signalbuilder(signalBuilderBlock, 'ActiveGroup', 2);
open_system(signalBuilderBlock);

Логгирование стартовых тестов

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

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

Родительская модель не ограничена моделями тестовой обвязки Simulink Design Verifier. Кроме того, можно записать данные из модели симуляции с обратной связью, которая использует блок Model для включения контроллера, так что тесты контроллера более реалистично отражают непрерывное поведение времени, ожидаемое в системе с обратной связью.

[~, modelBlock] = find_mdlrefs(harnessModel, false);
loggeddata = sldvlogsignals(modelBlock{1},2);

Расширение существующих тестов во время генерации тестов

Прежде чем вы сможете использовать существующие тестовые данные во время генерации тестов, данные должны быть сохранены в MAT-файле. Вы активируете расширение тестового примера в панели Генерация тестов параметров конфигурации Simulink Design Verifier. Выберите Расширить существующие тесты и укажите файл MAT в поле Файл данных.

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

save('existingtestcase.mat', 'loggeddata');

opts = sldvoptions;
opts.ExtendExistingTests = 'on';
opts.ExistingTestFile = 'existingtestcase.mat';
opts.SaveHarnessModel = 'off';
opts.SaveReport = 'off';

[~, fileNames] = sldvrun('sldvdemo_sbr_extend_design', opts, true);

Проверка полного покрытия

The sldvruntest Функция проверяет, что новый тестовый набор достигает полного покрытия модели. The cvhtml функция создает отчет о покрытии, который указывает, что 100% Decision Coverage достигается сгенерированными тестовыми векторами.

[~, finalCov] = sldvruntest('sldvdemo_sbr_extend_design', fileNames.DataFile, [], true);
cvhtml('Final Coverage', finalCov);

Очистка

Чтобы завершить демонстрацию, закройте все модели и удалите сохраненный файл записанных данных.

close_system(harnessModel,0);
close_system('sldvdemo_sbr_extend_design');
delete('existingtestcase.mat');