主要内容

覆盖数据操作

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

示例模型

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

open_system (“slvnvdemo_cv_mutual_exclusion”

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

test1 = cvtest(“slvnvdemo_cv_mutual_exclusion”);data1 = cvsim(test1)
data1 = ... cvdata版本:(r2021b)ID:560类型:test_data测试:cvtest对象rootid:562校验和:[1x1 struct] modelInfo:[1x1 struct] starttime:01-sep-2021 10:50:06停止时间:01-SEP-2021 10:50:06 IntervalStartTime:0 IntervalStoptime:0 SimulationStartTime:0 SimulationStoptime:10筛选:SimMode:正常

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

set_param (“slvnvdemo_cv_mutual_exclusion /常数”'价值''1');test2 = cvtest(“slvnvdemo_cv_mutual_exclusion”);data2 = cvsim(test2)
data2 =…cvdata version: (R2021b) id: 615 type: TEST_DATA test: cvtest对象rootID: 562 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 01- 9 -2021 10:50:08 stopTime: 01- 9 -2021 10:50:08 intervalStartTime: 0 intervalStopTime: 0 simulationStartTime: 0 simulationStopTime: 10 filter: simMode: Normal

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

注意:虽然这两个测试都有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对象被标记为类型属性设置为DERIVED_DATA。

dataunion = data1 + data2
dataunion = ... cvdata版本:(r2021b)ID:0类型:derived_data测试:[] rootid:562校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:01-sep-2021 10:50:06停止时间:01-SEP-2021 10:50:08 IntervalStartTime:0 intervalStoptime:0过滤器:SimMode:正常

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

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

寻找覆盖范围

通过使用*操作符交叉data1和data2,确认两个测试之间的覆盖范围没有重叠。正如预期的那样,在交集中有0%的决策覆盖率。

datainterection = data1 * data2 covi = demanticinfo(dataintersection,“slvnvdemo_cv_mutual_exclusion”);percentI = 100 * (covI (1) / covI (2))
dataintersection = ... cvdata版本:(r2021b)ID:0类型:derived_data测试:[] rootid:562校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:01-sep-2021 10:50:06停止时间:01-SEP-2021 10:50:08 IntervalStartTime:0 intervalstoptime:0过滤器:SimMode:普通百分比= 0

使用派生的覆盖率数据对象

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

cvhtml(“intersect_cov”,歌剧团);%输入到另一个操作newunion = dataunion + dataintersection
newUnion =…cvdata version: (R2021b) id: 0 type: DERIVED_DATA test: [] rootID: 562 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 01- 9 -2021 10:50:06 stopTime: 01- 9 -2021 10:50:08 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal

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

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

在下面的例子中,第一个和第二个测试覆盖率的联合和第一个测试覆盖率之间的差异应该表明第二个测试提供了多少额外的覆盖率。如前所述,由于没有决策覆盖点重叠,测试2的新决策覆盖是50%。

newCov2 = dataUnion - data1 covN = decisioninfo(newCov2,“slvnvdemo_cv_mutual_exclusion”);百分比= 100 *(COVN(1)/ COVN(2))
newcov2 = ... cvdata版本:(r2021b)ID:0类型:derived_data测试:[] rootid:562校验和:[1x1 struct] modelinfo:[1x1 struct] starttime:01-sep-2021 10:50:06停止时间:01-SEP-2021 10:50:08 IntervalStartTime:0 intervalStoptime:0过滤器:SimMode:普通百分比= 50