0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用静态检查工具完善功能安全中测试覆盖率

MATLAB 来源:MATLAB 2024-09-05 09:15 次阅读

在功能安全中测试覆盖率是比较重要的概念,也是在验证过程中通常需要花费时间较多的步骤,如果能借助于静态检查工具的死逻辑查找和声明、测试用例自动补全等功能往往能取得事半功倍的效果。功能安全标准中常见的几种覆盖率类型有:

- 语句覆盖:程序中的每条语句是否都被执行到。

- 判定覆盖(决策覆盖):各分支路径是否都被执行到。

- 条件覆盖:进入分支前的判断条件中的各子条件的可能输出是否都满足到。

- 修正条件判定覆盖(MC/DC):每个能独立影响到决策输出的条件是否都被满足到。MC/DC 其实是条件组合覆盖的子集,条件组合覆盖要求覆盖判定中所有条件取值的所有可能组合,所需测试用例和条件数成指数关系,在实际应用中难以操作。MC/DC 具有条件组合覆盖的优势,同时大幅减少用例数。比如对于判定条件 X||(Y&&Z), MC/DC 通过下表的四个测试用例即可实现 100% 覆盖,而如果采用条件组合覆盖则需要8个测试用例,随着条件数的增加用例数的差异会更加明显。

wKgZombZBlyAKTM5AABgbFGSCIA155.jpg

在采用基于模型设计时,语句覆盖对等的概念是执行覆盖,意指模型中的每个基本模块在仿真过程中是否都被运行到。判定覆盖、条件覆盖和 MC/DC 在模型层面均有类似的概念。

函数覆盖和函数调用覆盖

函数是程序的基本组成部分,程序通过调用函数实现功能,同一函数可能会被多次调用。如果所有定义的函数均被执行到,则满足函数覆盖;如果程序中的所有函数调用处(包括同一函数的多次调用)均被执行到,则满足函数调用覆盖。函数覆盖和函数调用覆盖只针对代码,对于模型则没有对应概念。在基于模型设计中,我们可以借助于软件在环(SIL)测试来获取这一指标。

单元级与架构级覆盖率要求

在 ISO 26262:2018 中覆盖率要求在单元级和架构级是不一样的,因此如何合理划分单元是非常重要的。

wKgZombZBlyAfm4rAADZsUsU2xY120.jpg

wKgZombZBlyAEQVtAACeZHuiLP4429.jpg

覆盖率与死逻辑

在静态检查中有一项是检查程序中有无不可达代码(死逻辑),但并不能替代测试覆盖率。没有不可达代码意味着有 100% 测试覆盖的可能,后续还需要通过运行测试用例并收集到覆盖率数据;有不可达代码意味着从理论上无法通过测试达到 100% 覆盖。

利用代码检查完善覆盖率测试

在实践中我们可以利用静态检查的这个能力来辅助测试覆盖率,从而发现程序中的缺陷或者加以声明(Justification)。以代码静态检查和形式化验证能力见长的 Polyspace 在 R2023b 之后增加了动态测试工具 Polyspace Test, 我们可以从以下案例中来看两者是如何相辅相成实现测试覆盖率和声明的。

首先利用代码解析功能查看程序中所涉及的头文件、函数和数据类型,在函数调用图中理解函数调用的层次关系。

wKgZombZBlyAX-_pAAJfbp0PINs438.jpg

在设计测试用例时可以与对应的需求进行链接,在编译前选择获取代码覆盖率。

wKgaombZBlyADiMZAAEgGjw4JuY611.jpg

从收集的覆盖率数据看到语句和决策覆盖尚未满足,也可以进一步分析具体的覆盖点。

wKgaombZBlyAe3cBAAC6bI26bKk063.jpg

wKgaombZBlyABMRdAAMur_XlbK4678.jpg

将已有的覆盖率数据作为输入并借助于自动生成测试功能,再次运行包括新增的生成用例在内的所有用例,覆盖率数据有明显提升,尚未达到的决策覆盖很有可能是不可达代码。

wKgaombZBlyAEQS1AAI3unaCGXw002.jpg

wKgaombZBlyASgBjAAF1AaGJSrQ474.jpg

我们可以借助集成的静态检查和形式化验证功能分析并定位到具体的不可达代码处,通过代码审查排查代码缺陷或者将静态检查结果导入到覆盖分析中作为声明。

wKgaombZBlyAO92cAAN8nVgr7e8176.jpg

wKgZombZBlyAM1eTAALcRYN_xxo994.jpg

以上从工具的角度展示了如何利用静态检查和形式化验证的能力来完善测试覆盖率的过程,具体的使用方法需要根据代码的安全要求和质量目标所定的流程来开展。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4299

    浏览量

    62372
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68294
  • 功能安全
    +关注

    关注

    2

    文章

    78

    浏览量

    5619
  • 静态检查
    +关注

    关注

    0

    文章

    3

    浏览量

    832

原文标题:功能安全 | 利用代码检查完善测试覆盖率

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何提高DFT设计测试覆盖率

    提高DFT设计测试覆盖率的有效方法是什么
    发表于 05-07 06:37

    嵌入式仿真平台SkyEye的覆盖率分析相关资料下载

    代码执娜行覆盖情况的功能,来检测代码未执行覆盖情况。在覆盖率分析时需要分析嵌入式软件的指令覆盖率
    发表于 12-17 07:27

    单元测试/集成测试自动化工具--WinAMS

    直接使用目标机代码进行单元测试联合静态解析工具[CasePlayer2],提供C0(语句),C1(判定),MC/DC覆盖率报告,优化测试
    发表于 06-17 18:26

    关于SpinalHDL的验证覆盖率收集简单说明

    在做RTL仿真验证时,覆盖率收集往往是我们在验证需要注意的地方,本篇就SpinalHDL的验证覆盖率收集做一个简单说明。sbt配置在SpinalHDL里进行仿真验证时,我们的待
    发表于 06-24 15:56

    重点厘清覆盖率相关的概念以及在芯片开发流程中跟覆盖率相关的事项

    较麻烦,工程师们需要针对各种各样的功能和应用场景,使用SV等验证语言去实现覆盖率模型(Coverage Model)或断言(Assertion),并且从大量的回归测试(Regression)
    发表于 09-14 11:57

    Verilog代码覆盖率检查

    Verilog代码覆盖率检查检查验证工作是否完全的重要方法,代码覆盖率(codecoverge)可以指示Verilog代码描述的功能有多少
    发表于 04-29 12:35 8338次阅读

    使用 Veloce 完成局部系统级协议检查覆盖率收敛

    使用 Veloce 完成局部系统级协议检查覆盖率收敛
    发表于 09-05 08:39 4次下载
    使用 Veloce 完成局部系统级协议<b class='flag-5'>检查</b>和 <b class='flag-5'>覆盖率</b>收敛

    汽车功能安全诊断覆盖率的评估

    例一种安全机制可以在本附件具有较高的通用典型诊断覆盖率,但如果所使用的诊断测试间隔大于符合相关容错时间间隔所需的诊断测试间隔,则避免违反
    的头像 发表于 08-25 15:30 5319次阅读
    汽车<b class='flag-5'>功能</b><b class='flag-5'>安全</b>诊断<b class='flag-5'>覆盖率</b>的评估

    嵌入式代码覆盖率统计方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中检查的程序源代码比例计算得出。代码覆盖率可以有效避免包含未
    的头像 发表于 01-06 15:06 3115次阅读
    嵌入式代码<b class='flag-5'>覆盖率</b>统计方法和经验

    嵌入式代码覆盖率如何进行统计有哪些方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中检查的程序源代码比例 计算得出。代码覆盖率可以有效避免包含未
    的头像 发表于 01-09 11:12 3015次阅读
    嵌入式代码<b class='flag-5'>覆盖率</b>如何进行统计有哪些方法和经验

    统计嵌入式代码覆盖率的方法和经验

    代码覆盖率是衡量软件测试完成情况的指标,通常基于测试过程中检查的程序源代码比例计算得出。代码覆盖率可以有效避免包含未
    的头像 发表于 03-29 11:58 1898次阅读
    统计嵌入式代码<b class='flag-5'>覆盖率</b>的方法和经验

    代码覆盖率工具的重要性

    测试覆盖率是软件质量的重要指标,也是软件维护的重要组成部分。它通过提供不同承保项目的数据来帮助评估测试的有效性。这种洞察力允许通过为未经测试的代码定义新的
    的头像 发表于 12-08 15:13 1418次阅读
    代码<b class='flag-5'>覆盖率</b><b class='flag-5'>工具</b>的重要性

    EDA仿真验证环境的激励、检查覆盖率

    下图是一个典型的EDA仿真验证环境,其中主要的组件就是激励生成、检查覆盖率收集。
    的头像 发表于 04-15 10:13 1644次阅读

    静态代码测试工具Helix QAC 2023.1更新快讯:主打编码标准覆盖率

    Helix QAC 2023.1 对 MISRA C:2012修订版4和MISRA C:2023的覆盖率为100%,对 AUTOSAR C++14的覆盖率为96%。它还更新了CWE最新版本v4.10
    的头像 发表于 04-13 16:44 1123次阅读
    <b class='flag-5'>静态</b>代码<b class='flag-5'>测试工具</b>Helix QAC 2023.1更新快讯:主打编码标准<b class='flag-5'>覆盖率</b>

    单元测试工具TESSY 新版本亮点速览:提供测试驾驶舱视图、超级覆盖率、代码访问分析、增强覆盖率审查

    各种测试对象和方法的所有覆盖率测量结果,并记录在新的测试总结报告。 了解更多TESSY新版本功能详情或申请免费试用,欢迎咨询TESSY中国
    的头像 发表于 07-08 16:20 395次阅读
    单元<b class='flag-5'>测试工具</b>TESSY 新版本亮点速览:提供<b class='flag-5'>测试</b>驾驶舱视图、超级<b class='flag-5'>覆盖率</b>、代码访问分析、增强<b class='flag-5'>覆盖率</b>审查