主要内容

对覆盖率数据的操作

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

示例模型

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

开放式系统(“slvnvdemo_cv_互斥”

使用命令cvtcvsim开始模拟。最初,常量块的值为0,这将强制子系统2执行。

test1 = cvt (“slvnvdemo_cv_互斥”);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。

设置参数(“slvnvdemo_cv_互斥/常数”“价值”' 1 ');test2 = cvt (“slvnvdemo_cv_互斥”);data2 = cvsim (test2)
data2=…cvdata version:(R2021b)id:615类型:测试\数据测试:cvtest对象根id:562校验和:[1x1结构]模型信息:[1x1结构]开始时间:01-Sep-2021 10:50:08停止时间:01-Sep-2021 10:50:08间隔开始时间:0间隔时间:0模拟开始时间:0模拟开始时间:10筛选器:simMode:正常

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

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

cov1=决策信息(数据1,“slvnvdemo_cv_互斥”);conview1 = 100*(cov1(1)/cov1(2))“slvnvdemo_cv_互斥”); 百分比2=100*(cov2(1)/cov2(2))
1 = 50% 2 = 50%

寻找覆盖范围的联合

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

注意:根据其他模拟结果的组合创建的新cvdata对象将使用类型属性集标记为派生的_数据。

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=决策信息(数据联盟,“slvnvdemo_cv_互斥”);percentU = 100 * (covU (1) / covU (2))
percentU = 100

寻找覆盖的交集

通过将data1和data2与*运算符相交,确认覆盖率在两个测试之间不重叠。正如预期的那样,相交中存在0%的决策覆盖率。

dataIntersection = data1 * data2“slvnvdemo_cv_互斥”);百分比i=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
新联盟=。。。cvdata版本:(R2021b)id:0类型:派生数据测试:[]根id:562校验和:[1x1结构]模型信息:[1x1结构]开始时间:01-Sep-2021 10:50:06停止时间:01-Sep-2021 10:50:08间隔开始时间:0间隔时间:0筛选器:simMode:正常

计算覆盖(集)差异

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

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

newCov2=dataUnion-data1covn=decisioninfo(newCov2,“slvnvdemo_cv_互斥”);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