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

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

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

Охват подсистемы измерениями

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

The cvhtml функция создает отчет, который указывает, что 87% Decision, 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 на панели «Генерация тестов» параметров конфигурации 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');