主要内容

覆盖数据操作

这个示例展示了如何使用重载操作符+、*和-将覆盖结果组合为结果的并集、交集或差集。

示例模型

打开一个具有两个互斥的启用子系统的简单模型。

open_system (“slvnvdemo_cv_mutual_exclusion”

使用命令cvt而且cvsim开始模拟。最初,Constant块的值为0,这迫使子系统2执行。

Test1 = cvtest(“slvnvdemo_cv_mutual_exclusion”);Data1 = cvsim(test1)
Data1 =…cvdata version: (R2022a) id: 1180 type: TEST_DATA test: cvtest object rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26- 2 -2022 12:55:14 stopTime: 26- 2 -2022 12:55:14 intervalStartTime: 0 intervalStopTime: 0 simulationStartTime: 0 simulationStopTime: 10 filter: simMode: Normal

下面的命令在运行第二个模拟之前将Constant块的值更改为1。这迫使子系统1执行。

set_param (“slvnvdemo_cv_mutual_exclusion /常数”“价值”' 1 ');Test2 = cvtest(“slvnvdemo_cv_mutual_exclusion”);Data2 = cvsim(test2)
Data2 =…cvdata version: (R2022a) id: 1235 type: TEST_DATA test: cvtest object rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26- 2 -2022 12:55:15 stopTime: 26- 2 -2022 12:55:15 intervalStartTime: 0 intervalStopTime: 0 simulationStartTime: 0 simulationStopTime: 10 filter: simMode: Normal

我们使用decisioninfo命令从每个测试中提取决策覆盖率,并以百分比的形式列出它。

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

Cov1 =决策信息(数据a1,“slvnvdemo_cv_mutual_exclusion”);百分比1 = 100*(cov1(1)/cov1(2))“slvnvdemo_cv_mutual_exclusion”);百分2 = 100*(cov2(1)/cov2(2))
Percent1 = 50% percent2 = 50

寻找覆盖范围联盟

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

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

dataUnion = data1 + data2
dataUnion =…cvdata version: (R2022a) id: 0 type: DERIVED_DATA test: [] rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26-Feb-2022 12:55:14 stopTime: 26-Feb-2022 12:55:15 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal

请注意,覆盖率的并集是100%,因为两个集合之间的覆盖率没有重叠。

covU =决策信息(dataUnion,“slvnvdemo_cv_mutual_exclusion”);percentU = 100*(covU(1)/covU(2))
百分比= 100

找到覆盖范围的交叉点

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

dataIntersection =数据a1 *数据a2 covI =决策信息(dataIntersection,“slvnvdemo_cv_mutual_exclusion”);% i = 100*(covI(1)/covI(2))
datintersection =…cvdata version: (R2022a) id: 0 type: DERIVED_DATA test: [] rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26-Feb-2022 12:55:14 stopTime: 26-Feb-2022 12:55:15 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal percentI = 0

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

派生的cvdata对象可用于所有报告和分析命令,并可作为后续操作的输入。例如,从派生的datintersection对象生成覆盖率报告。

cvhtml (“intersect_cov”, dataIntersection);另一个操作的输入newUnion = dataUnion +数据交叉口
newUnion =…cvdata version: (R2022a) id: 0 type: DERIVED_DATA test: [] rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26-Feb-2022 12:55:14 stopTime: 26-Feb-2022 12:55:15 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal

计算覆盖(集)差

-操作符用于形成一个cvdata对象,表示左操作数和右操作数之间的差异。操作的结果包含左操作数满足但右操作数不满足的覆盖点。此操作对于确定有多少额外的覆盖率归因于特定的测试是有用的。

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

newCov2 = dataUnion - data1 covN = decision - info(newCov2,“slvnvdemo_cv_mutual_exclusion”);% n = 100*(covN(1)/covN(2))
newCov2 =…cvdata version: (R2022a) id: 0 type: DERIVED_DATA test: [] rootID: 1182 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 26-Feb-2022 12:55:14 stopTime: 26-Feb-2022 12:55:15 intervalStartTime: 0 intervalStopTime: 0 filter: simMode: Normal percentN = 50