主要内容

覆盖数据操作

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

示例模型

打开一个简单的模型,其中包含两个互斥的子系统。

open_system (“slvnvdemo_cv_mutual_exclusion”

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

test1 = cvt (“slvnvdemo_cv_mutual_exclusion”);data1 = cvsim (test1)
data1 =…cvdata version: (R2021b) id: 560 type: TEST_DATA test: cvtest对象rootID: 562 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 01- 9 -2021 10:50:06 stopTime: 01- 9 -2021 10:50:06 intervalStartTime: 0 intervalStopTime: 0 simulationStartTime: 0 simulationStopTime: 10 filter: simMode: Normal

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

set_param (“slvnvdemo_cv_mutual_exclusion /常数”“价值”' 1 ');test2 = cvt (“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

我们使用decisioninfo命令从每个测试中提取决策覆盖率,并将其作为百分比列出。

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

cov1 = decisioninfo (data1、“slvnvdemo_cv_mutual_exclusion”);conview1 = 100*(cov1(1)/cov1(2))“slvnvdemo_cv_mutual_exclusion”);percent2 = 100 * (cov2 (1) / cov2 (2))
1 = 50% 2 = 50%

找到保险联盟

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

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

datunion = data1 + data2
dataUnion =…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

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

covU = decisioninfo (dataUnion,“slvnvdemo_cv_mutual_exclusion”);percentU = 100 * (covU (1) / covU (2))
percentU = 100

寻找覆盖的交集

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

dataIntersection = data1 * data2“slvnvdemo_cv_mutual_exclusion”);percentI = 100 * (covI (1) / covI (2))
dataIntersection =…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 percentI = 0 . 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

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

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

cvhtml (“intersect_cov”, dataIntersection);%输入到另一个操作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”);percentN = 100 * (covN (1) / covN (2))
newCov2 =…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 percentN = 50