Этот пример показывает, как использовать перегруженные операторы +, *, и - чтобы объединить результаты покрытия в объединение, пересечение или разность множеств результатов.
Откройте простую модель с двумя взаимоисключающими активированными подсистемами.
open_system('slvnvdemo_cv_mutual_exclusion')

Используйте команды cvtest и cvsim, чтобы запустить симуляцию. Первоначально, значение блока Constant 0, который обеспечивает Подсистему 2, чтобы выполниться.
test1 = cvtest('slvnvdemo_cv_mutual_exclusion');
data1 = cvsim(test1)
data1 = ... cvdata
id: 1807
type: TEST_DATA
test: cvtest object
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:32
stopTime: 23-Dec-2016 17:15:32
intervalStartTime: 0
intervalStopTime: 0
simulationStartTime: 0
simulationStopTime: 10
metrics: [1x1 struct]
filter:
simMode: Normal
Следующие команды изменяют значение блока Constant к 1 прежде, чем запустить вторую симуляцию. Это обеспечивает Подсистему 1, чтобы выполниться.
set_param('slvnvdemo_cv_mutual_exclusion/Constant','Value','1'); test2 = cvtest('slvnvdemo_cv_mutual_exclusion'); data2 = cvsim(test2)
data2 = ... cvdata
id: 1874
type: TEST_DATA
test: cvtest object
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:33
stopTime: 23-Dec-2016 17:15:33
intervalStartTime: 0
intervalStopTime: 0
simulationStartTime: 0
simulationStopTime: 10
metrics: [1x1 struct]
filter:
simMode: Normal
Мы используем команду decisioninfo, чтобы извлечь Decision Coverage от каждого теста и перечислить его как процент.
Примечание: В то время как оба теста имеют 50% Decision Coverage, покрывают ли они те же 50%, неизвестно.
cov1 = decisioninfo(data1,'slvnvdemo_cv_mutual_exclusion'); percent1 = 100*(cov1(1)/cov1(2)) cov2 = decisioninfo(data2,'slvnvdemo_cv_mutual_exclusion'); percent2 = 100*(cov2(1)/cov2(2))
percent1 =
50
percent2 =
50
Используйте + оператор, чтобы вывести треть cvdata объект, представляющий объединение объектов data2 cvdata и data1.
Примечание: Новые объекты cvdata, созданные из комбинаций других результатов симуляции, отмечены набором свойств типа как DERIVED_DATA.
dataUnion = data1 + data2
dataUnion = ... cvdata
id: 0
type: DERIVED_DATA
test: []
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:32
stopTime: 23-Dec-2016 17:15:33
intervalStartTime: 0
intervalStopTime: 0
metrics: [1x1 struct]
filter:
simMode: Normal
Заметьте, что объединение покрытия - 100%, потому что нет никакого перекрытия в покрытии между двумя наборами.
covU = decisioninfo(dataUnion,'slvnvdemo_cv_mutual_exclusion');
percentU = 100*(covU(1)/covU(2))
percentU = 100
Подтвердите, что покрытие не накладывается между двумя тестами путем пересечения data1 и data2 с оператором *. Как ожидалось существует 0% Decision Coverage в пересечении.
dataIntersection = data1 * data2
covI = decisioninfo(dataIntersection,'slvnvdemo_cv_mutual_exclusion');
percentI = 100*(covI(1)/covI(2))
dataIntersection = ... cvdata
id: 0
type: DERIVED_DATA
test: []
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:32
stopTime: 23-Dec-2016 17:15:33
intervalStartTime: 0
intervalStopTime: 0
metrics: [1x1 struct]
filter:
simMode: Normal
percentI =
0
Выведенные объекты cvdata могут использоваться во всех командах создания отчетов и анализа, и как входные параметры к последующим операциям. Как пример, сгенерируйте отчет покрытия от выведенного объекта dataIntersection.
cvhtml('intersect_cov', dataIntersection); % Input to another operation newUnion = dataUnion + dataIntersection
newUnion = ... cvdata
id: 0
type: DERIVED_DATA
test: []
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:32
stopTime: 23-Dec-2016 17:15:33
intervalStartTime: 0
intervalStopTime: 0
metrics: [1x1 struct]
filter:
simMode: Normal

- оператор используется, чтобы сформировать объект cvdata, который представляет разность множеств левых и правых операндов. Результат операции содержит точки покрытия, которые удовлетворены в левом операнде, но не удовлетворены в правильном операнде. Эта операция полезна для определения, сколько дополнительного покрытия приписано конкретному тесту.
В следующем примере различие между объединением первого и второго тестового покрытия и первым тестовым покрытием должно указать сколько дополнительного покрытия второй обеспеченный тест. Как уже показано, начиная ни с одной из перекрытых точек Decision Coverage, новый Decision Coverage от теста 2 составляет 50%.
newCov2 = dataUnion - data1
covN = decisioninfo(newCov2,'slvnvdemo_cv_mutual_exclusion');
percentN = 100*(covN(1)/covN(2))
newCov2 = ... cvdata
id: 0
type: DERIVED_DATA
test: []
rootID: 1811
checksum: [1x1 struct]
modelinfo: [1x1 struct]
startTime: 23-Dec-2016 17:15:32
stopTime: 23-Dec-2016 17:15:33
intervalStartTime: 0
intervalStopTime: 0
metrics: [1x1 struct]
filter:
simMode: Normal
percentN =
50
Конец путем закрытия модели.
close_system('slvnvdemo_cv_mutual_exclusion',0);