exponenta event banner

Использование существующих данных покрытия при анализе подсистемы

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

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

Измерение покрытия подсистемы

sldvdemo_autotrans модель является имитационной моделью с замкнутым контуром. Подсистема ShiftLogic представляет собой диаграмму Stateflow ® и представляет часть контроллера этой модели. Тестовые примеры, разработанные в блоке Signal BuilderManeuversGUI управление моделированием с замкнутым контуром. Вы можете использовать cvtest и cvsim функции для измерения охвата модели, достигнутого для этой подсистемы внутри имитационной модели с замкнутым контуром. В этом примере задание входных данных для cvtest как путь к подсистеме, а не к имени модели приводит к измерению покрытия только для подсистемы. Кроме того, второй вход в cvsim задает временной интервал для моделирования модели и определяется на основе временного диапазона текущей панели в блоке. ManeuversGUI.

cvhtml функция создает отчет, который указывает, что 87% принятия решения, 67% условия и 33% покрытия MCDC достигается путем моделирования тестового случая, созданного в блоке ManeuversGUI.

open_system('sldvdemo_autotrans');
open_system('sldvdemo_autotrans/ManeuversGUI');

test = cvtest('sldvdemo_autotrans/ShiftLogic');
test.settings.decision = 1;
test.settings.condition = 1;
test.settings.mcdc = 1;

signalBuilderBlock = sldvdemo_signalbuilder_block('sldvdemo_autotrans');
signalBuilderTime = signalbuilder(signalBuilderBlock);
simulationStopTime = signalBuilderTime{1,1}(end);

existingCovData = cvsim(test,[0 simulationStopTime]);
cvhtml('Existing Coverage', existingCovData);

Поиск тестовых случаев для отсутствующего покрытия

Для использования существующих данных покрытия во время генерации теста сохраните существующие данные покрытия в файле данных покрытия .cvt. Существующие данные о покрытии можно использовать путем указания пути к данным о покрытии в параметре файла данных о покрытии и установки параметра Игнорировать цели, удовлетворяемые в существующем параметре данных о покрытии, равным on на панели Test Generation конфигурационных параметров Simulink Design Verifier.

В этом примере первый вход в sldvrun определяет подсистему для анализа. Инструктирование Simulink Design Verifier по анализу подсистемы полезно в том случае, если часть контроллера модели требуется протестировать отдельно или если требуется разделить анализ большой модели на более мелкие управляемые части.

Как видно из отчета, Simulink Design Verifier находит только те тестовые примеры для целей покрытия, которые не охвачены существующим файлом покрытия. Обратите внимание, что 4 цели покрытия в подсистеме ShiftLogic доказано, что они являются неудовлетворительными. Это ожидается, поскольку логика внутри диаграммы Stateflow ShiftLogic использует временные события, и поскольку эта диаграмма обновляется в каждый момент времени выборки, использование временных условий должно быть удовлетворительным. Также следует отметить, что мертвый код в подсистеме всегда будет мертвым кодом в модели, содержащей эту подсистему.

Чтобы создать модель электрического жгута, Simulink Design Verifier извлекает содержимое подсистемы ShiftLogic в компонент Test Unit, подаваемый блоком Signal Builder, содержащим сгенерированные тестовые примеры.

cvsave('existingcov',existingCovData);

opts = sldvoptions;
opts.IgnoreCovSatisfied = 'on';
opts.CoverageDataFile = 'existingcov.cvt';
opts.ModelCoverageObjectives = 'MCDC';
opts.SaveHarnessModel = 'on';
opts.SaveReport = 'on';

[status, fileNames] = sldvrun('sldvdemo_autotrans/ShiftLogic',opts,true);
[~, harnessModel] = fileparts(fileNames.HarnessModel);
open_system(harnessModel);

Очистить

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

close_system('sldvdemo_autotrans');
close_system(fileNames.ExtractedModel,0);
close_system(fileNames.HarnessModel,0);
delete('existingcov.cvt');