主要内容

覆盖数据的操作

此示例显示了如何使用重载的运算符+,*,以及 - 将覆盖结果组合成UNION,交叉点或设置结果差异。

示例模型

打开一个简单的模型,具有两个互斥的支持子系统。

open_system (“slvnvdemo_cv_mutual_exclusion”

使用的命令CVTest.CVSIM开始仿真。最初,Constant块的值是0,这迫使子系统2执行。

test1 = cvtest(“slvnvdemo_cv_mutual_exclusion”);data1 = cvsim(test1)
data1 =…cvdata version: (R2021a) id: 231 type: TEST_DATA test: cvtest object rootID: 233 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 23- 2 -2021 16:43:06 stopTime: 23- 2 -2021 16:43:06 intervalStartTime: 0 intervalStopTime: 0 simulationStartTime: 0 simulationStopTime: 10 filter: simMode: Normal

在运行第二次模拟之前,以下命令将常量块的值更改为1。这力量子系统1执行。

set_param (“slvnvdemo_cv_mutual_exclusion /常数”'价值''1');test2 = cvtest(“slvnvdemo_cv_mutual_exclusion”);data2 = cvsim(test2)
data2 = ... cvdata版本:(r2021a)ID:286类型:test_data测试:cvtest对象rootid:233校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:23-Feb-2021 16:43:08停止时间:23-FEB-2021 16:43:08 IntervalstartTime:0 intervalStoptime:0 SimulationStartTime:0 SimulationStoptime:10过滤器:SimMode:正常

我们使用决策情况命令从每个测试中提取决策覆盖范围并将其列为百分比。

注意:虽然这两个测试都有50%的决策覆盖范围,但它们是否覆盖相同的50%是未知的。

cov1 = decisioninfo (data1、“slvnvdemo_cv_mutual_exclusion”);百分比1 = 100 *(CoV1(1)/ CoV1(2))CoV2 =决策(Data2,“slvnvdemo_cv_mutual_exclusion”);percent2 = 100 * (cov2 (1) / cov2 (2))
百分比1 = 50%2 = 50

寻找覆盖联盟

使用+操作符派生第三个cvdata对象,表示data1和data2 cvdata对象的并集。

注意:由其他模拟结果组合创建的新cvdata对象被标记为type属性集为DERIVED_DATA。

dataunion = data1 + data2
dataunion = ... cvdata版本:(r2021a)ID:0类型:derived_data测试:[] rootid:233校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:23-Feb-2021 16:43:06停止时间:23-FEB-2021 16:43:08 IntervalstartTime:0 intervalstoptime:0过滤器:SimMode:正常

请注意,覆盖率的结合是100%,因为两组之间没有重叠在覆盖范围内。

covU = decisioninfo (dataUnion,“slvnvdemo_cv_mutual_exclusion”);百分之= 100 *(COVU(1)/ COVU(2))
百分之= 100.

寻找覆盖范围

通过将数据a1和数据a2与*操作符相交,确认两个测试之间的覆盖率没有重叠。如预期,交叉口的决策覆盖率为0%。

datainterection = data1 * data2 covi = demanticinfo(dataintersection,“slvnvdemo_cv_mutual_exclusion”);percentI = 100 * (covI (1) / covI (2))
dataIntersection =…cvdata version: (R2021a) id: 0 type: DERIVED_DATA test: [] rootID: 233 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 23- 2 -2021 16:43:06 stopTime: 23- 2 -2021 16:43:08 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal percentI = 0

使用派生的覆盖数据对象

派生的CVDATA对象可用于所有报告和分析命令,以及作为后续操作的输入。作为示例,从派生的DAIAILERINCETECTEMENT生成覆盖报告。

cvhtml(“intersect_cov”,歌剧团);%输入到另一个操作newunion = dataunion + dataintersection
newunion = ... cvdata版本:(r2021a)ID:0类型:derived_data测试:[] rootid:233校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:23-Feb-2021 16:43:06停止时间:23-FEB-2021 16:43:08 IntervalstartTime:0 intervalstoptime:0过滤器:SimMode:正常

计算覆盖范围(设置)差异

- 运算符用于形成CVData对象,表示左侧和右操作数之间的设定差异。操作结果包含满足于左操作数但不满足右操作数的覆盖点。该操作对于确定额外的覆盖率归因于特定测试是有用的。

在以下示例中,第一和第二测试覆盖的联合与第一测试覆盖的差异应该指示所提供的第二测试的额外覆盖程度。如图所示,由于没有重大决策点重叠,因此测试2的新决策覆盖率为50%。

newCov2 = dataUnion - data1 covN = decisioninfo(newCov2,“slvnvdemo_cv_mutual_exclusion”);百分比= 100 *(COVN(1)/ COVN(2))
newCov2 =…cvdata version: (R2021a) id: 0 type: DERIVED_DATA test: [] rootID: 233 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 23- 2 -2021 16:43:06 stopTime: 23- 2 -2021 16:43:08 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal percentN = 50