主要内容

覆盖数据操作

此示例演示如何使用重载运算符+、*、和-将覆盖率结果合并为结果的并集、交集或集差。

示例模型

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

open_system (“slvnvdemo_cv_mutual_exclusion”)

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

test1=cvtest(“slvnvdemo_cv_mutual_exclusion”); 数据1=cvsim(测试1)
数据1=。。。cvdata版本:(R2020b)id:231类型:测试\数据测试:cvtest对象根id:233校验和:[1x1结构]模型信息:[1x1结构]开始时间:24-Aug-2020 18:54:07停止时间:24-Aug-2020 18:54:07间隔开始时间:0间隔时间:0模拟开始时间:0模拟停止时间:10个度量:[1x1结构]过滤器:simMode:正常

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

set_param (“slvnvdemo_cv_mutual_exclusion /常数”,“价值”,'1'); test2=cvtest(“slvnvdemo_cv_mutual_exclusion”); 数据2=cvsim(测试2)
data2=…cvdata version:(R2020b)id:286类型:测试\数据测试:cvtest对象根id:233校验和:[1x1结构]模型信息:[1x1结构]开始时间:24-Aug-2020 18:54:08停止时间:24-Aug-2020 18:54:09间隔开始时间:0间隔时间:0模拟开始时间:0模拟开始时间:10指标:[1x1结构]过滤器:simMode:正常

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

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

cov1 = decisioninfo (data1、“slvnvdemo_cv_mutual_exclusion”); 百分比1=100*(cov1(1)/cov1(2))cov2=决策信息(数据2,“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 version:(R2020b)id:0类型:派生_数据测试:[]根id:233校验和:[1x1结构]模型信息:[1x1结构]开始时间:24-Aug-2020 18:54:07停止时间:24-Aug-2020 18:54:09间隔开始时间:0间隔时间:0度量:[1x1结构]过滤器:simMode:正常

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

covU = decisioninfo (dataUnion,“slvnvdemo_cv_mutual_exclusion”); 百分比u=100*(covU(1)/covU(2))
百分比u=100

寻找覆盖的交集

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

dataIntersection=data1*data2 covI=decisioninfo(dataIntersection,“slvnvdemo_cv_mutual_exclusion”);percentI = 100 * (covI (1) / covI (2))
数据交叉点=。。。cvdata版本:(R2020b)id:0类型:派生数据测试:[]根id:233校验和:[1x1结构]模型信息:[1x1结构]开始时间:2020年8月24日18:54:07停止时间:2020年8月24日18:54:09间隔开始时间:0间隔时间:0度量:[1x1结构]过滤器:simMode:正常百分比i=0

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

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

cvhtml(“intersect_cov”,数据交叉点);%输入到另一个操作newUnion=dataUnion+datacrossion
新联盟=。。。cvdata版本:(R2020b)id:0类型:派生数据测试:[]根id:233校验和:[1x1结构]模型信息:[1x1结构]开始时间:24-Aug-2020 18:54:07停止时间:24-Aug-2020 18:54:09间隔开始时间:0间隔时间:0度量:[1x1结构]过滤器:simMode:正常

计算覆盖(集)差

-运算符用于形成cvdata对象,该对象表示左操作数和右操作数之间的集合差。运算结果包含左操作数满足但右操作数不满足的覆盖点。此操作有助于确定特定测试的附加覆盖率。

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

newCov2 = dataUnion - data1 covN = decisioninfo(newCov2,“slvnvdemo_cv_mutual_exclusion”); 百分比n=100*(covN(1)/covN(2))
newCov2 =…cvdata version: (R2020b) id: 0 type: DERIVED_DATA test: [] rootID: 233 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 24- 8 -2020 18:54:07 stopTime: 24- 8 -2020 18:54:09 intervalStartTime: 0 intervalStopTime: 0 metrics: [1x1 struct] filter: simMode: Normal percentN = 50 . cvdata version: (R2020b) id: 0 type: DERIVED_DATA test: [] rootID: 233 checksum: [1x1 struct] modelinfo: [1x1 struct] startTime: 24- 8 -2020 18:54:07 stopTime: 24- 8 -2020 18:54:09 intervalStartTime: 0 intervalStopTime: 0 metrics: [1x1 struct] filter: simMode: Normal percentN = 50