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

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

3天内不再提示

通过覆盖分析深入研究安全关键代码测试

星星科技指导员 来源:嵌入式计算设计 作者:Jay Thomas 2022-06-19 15:55 次阅读

对于安全关键代码,确保应用程序执行它应该执行的操作并正确执行这些操作的功能测试只是表面上的问题。应用程序包含隐藏的复杂性,这些复杂性可能会在不可预测的条件下出现。如果编码不正确,它们可能会导致灾难。开发人员必须深入挖掘以测试所有底层代码是否存在细微错误。但这究竟是什么意思?

虽然可以从系统需求文档手动生成基本功能测试,但使用自动化工具(生成测试工具和测试用例的工具、运行这些测试的工具以及评估测试有效性的工具)进行更深层次的测试会更有效。 最后,关键活动是通过覆盖分析完成的。

在基本层面上,函数(或过程)覆盖分析显示每个函数是否已被调用。语句覆盖更进一步,提供了一种方法来确保每一行代码至少被执行一次。但是虽然这些都很有用,但覆盖分析不仅仅是函数和语句覆盖。

安全关键代码需要更深入的分析

可以在多个级别测试代码,安全关键代码需要深入、彻底的研究。分支/决策覆盖提供了更彻底的检查,旨在证明每个分支至少被采用一次,而分支条件组合覆盖需要测试所有可能的条件组合。

这听起来很简单,但如果一个决定取决于四个或更多条件,那么测试每个组合的要求就会变得不合理。修改条件/决策覆盖或 MC/DC 旨在提供一种实用的替代方案。MC/DC 确保:

调用每个入口和出口点

每一个决定都有每一个可能的结果

决策中的每个条件都包含所有可能的结果

决策中的每个条件都显示为独立地影响决策的结果

函数调用覆盖扩展了该查询线,并通过生成有关已执行哪些函数调用的信息来构建函数覆盖概念。这很重要,因为错误通常发生在模块之间的接口中。

在某些情况下,例如受 DO-178C 等标准约束的关键航空电子应用,还需要进行更苛刻的测试。对于最关键的“DAL A”应用,DO-178C 需要目标代码验证,其中包括分析汇编代码和源代码的覆盖信息。

动态测试通常使用软件工具进行,该工具检测源代码的副本以在运行时提供覆盖率数据。随后分析该数据以准确揭示代码的哪些部分已被执行,以及执行到什么级别。它以数据和控制流程图以及带有符号的源代码等显示形式使开发人员可以看到结果(图 1)。

poYBAGKu1oGAFoDPAAD6ZJmP9aY348.png

【图1 | LDRA 的 TBvision 代码覆盖为 DO-178C 等安全关键标准提供语句、分支和 MC/DC 覆盖。背景是一个分支/决策图,交叉引用了带注释的源代码。前景是每个功能和通过/失败结果的覆盖范围摘要。]

使用自动化工具减轻琐碎的测试任务

动态分析可以应用于完整的应用程序(系统测试)或它的子集(单元测试,包括集成组件测试),并且通常在完整系统可用时使用这两种方法的组合。一个集成的工具套件整理来自两个来源的信息,以提供整体覆盖率指标。单元测试工具通过静态分析代码结构,然后围绕应用程序创建一个“线束”或框架,在测试期间注入输入并接收输出,从而减轻了设置测试环境的繁琐工作。对于安全关键型应用程序,“测试向量”必须基于要求,以提供证据证明代码对预期和未预期的输入都按预期执行,但仍满足要求,仅此而已。

还可以通过对源代码的深入静态分析自动生成测试向量,这通常会导致在运行时覆盖 50% 到 75% 的代码。显然,这并不能提供正确功能的证据,但它确实在非关键应用程序中占有一席之地,否则覆盖率分析可能不会发生。即使在关键应用程序中,这种方法通过验证面对边界值、空指针和默认 switch 语句条件等数据的稳健行为,将动态分析超越了基于需求的测试。

在开发周期中尽早开始单元测试是最具成本效益的,甚至可能在目标硬件可供开发人员使用之前。这意味着使用在主机开发系统和目标硬件上应用相同测试向量的工具非常重要,以便生成一次测试用例,从而节省时间和金钱。

一个完整的工具套件还可以提供数据和控制流分析形式的分析,这是 DO-178C(航空电子)和 ISO 26262(汽车)等标准所要求的,以确保功能的每次调用都已执行,并且对数据的每次访问都已执行。它通过源代码跟踪变量并报告异常使用(图 2)。

poYBAGKu1oiAQYh6AAD-tLioVe8065.png

【图2 | 基于当前测试运行的变量和参数使用报告突出显示文件中使用变量的文件和位置,并使用自定义过滤器进行更精细的测试。]

这种深层次的测试——以及对测试的彻底和严格的评估——只有使用一套集成的软件分析工具才能可靠地完成。

审核编辑:郭婷

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

    关注

    2999

    文章

    7446

    浏览量

    161562
  • 源代码
    +关注

    关注

    94

    文章

    2926

    浏览量

    66057
  • 航空电子
    +关注

    关注

    15

    文章

    478

    浏览量

    44859
收藏 人收藏

    评论

    相关推荐

    深入研究:我国工业实时操作系统的核心技术与演进路径

    RTOS广泛应用于各类关键场景,且相较于传统软件单品,更需要通过建设丰富的软、硬件生态,进一步满足广泛连接和多样化负载的需求。在此背景下,统一而规范的接口和基础设施是代码移植和复用的前提,也是各种
    的头像 发表于 04-07 17:24 180次阅读
    <b class='flag-5'>深入研究</b>:我国工业实时操作系统的核心技术与演进路径

    深入理解FFmpeg阅读体验》+ 书收到了,崭新的开篇

    今天收到了《深入理解FFmpeg》 崭新的书,一个在2022年较近距离接触过却尚未深入研究的领域图像处理。最近刚好在作这方面的研究,希望自己可以把握这次机会,好好学习下 FFMpeg,相信可以让自己
    发表于 01-07 18:57

    怎么用Vivado做覆盖分析

    在做仿真的时候往往会去做代码覆盖率和功能覆盖率的分析,来保证仿真是做的比较充分完备的。
    的头像 发表于 01-03 12:34 585次阅读
    怎么用Vivado做<b class='flag-5'>覆盖</b>率<b class='flag-5'>分析</b>

    GSM覆盖增强技术和超远覆盖原理的研究分析

    电子发烧友网站提供《GSM覆盖增强技术和超远覆盖原理的研究分析.pdf》资料免费下载
    发表于 11-17 16:36 0次下载
    GSM<b class='flag-5'>覆盖</b>增强技术和超远<b class='flag-5'>覆盖</b>原理的<b class='flag-5'>研究</b><b class='flag-5'>分析</b>

    代码覆盖率记录

    为确保具体的产品(例如,医疗或航空电子市场)质量合格, 通常需要提供语句覆盖与判定覆盖认证证明。对于各种嵌 入式系统,规范要求高度优化的代码需要实时测试。禁止
    发表于 11-03 11:02 0次下载
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>率记录

    芯片剪切力测试机试验机推力速度

    探索芯片剪切力测试机的推力速度对于了解芯片性能和质量具有重要意义。博森源电子将介绍芯片剪切力测试机的概念和原理,并深入研究推力速度对测试结果的影响。
    的头像 发表于 10-09 15:46 412次阅读
    芯片剪切力<b class='flag-5'>测试</b>机试验机推力速度

    通过双比率检验测试供应商延迟交付率

    测试分析两个供应商(供应商A和供应商b)之间的延迟交付率。通过深入研究数据并执行2-比例测试,我们旨在辨别哪个供应商的延迟交付率更高。 什么是2比例检验? 2-比例检验也称为双比率检
    的头像 发表于 10-09 15:05 190次阅读

    面向OpenHarmony终端的密码安全关键技术

    中心主任。 内容来源 第一届开放原子开源基金会OpenHarmony技术峰会——安全及机密计算分论坛 ​ 正 文 内 容 终端设备的密码安全通过哪些关键技术保障,在OpenHarmon
    发表于 09-13 19:20

    Wasm软件生态系统安全分析

    OpenHarmony生态的开发者群体。 02►Wasm安全及相关研究 Wasm生态中也有很多安全问题得到了学术界的重视,包括前端编译器安全代码
    发表于 09-05 15:29

    软件代码结构化覆盖测试-分支覆盖

    本篇我们介绍分支覆盖,从测试技术对代码测试程度上来说,在复杂代码中,分支覆盖比语句
    的头像 发表于 09-01 11:34 394次阅读
    软件<b class='flag-5'>代码</b>结构化<b class='flag-5'>覆盖</b><b class='flag-5'>测试</b>-分支<b class='flag-5'>覆盖</b>

    软件代码结构化覆盖测试-语句覆盖

    本篇将深入代码层面,讲解单元测试中的一项重要工作-软件代码测试
    的头像 发表于 08-25 11:50 385次阅读
    软件<b class='flag-5'>代码</b>结构化<b class='flag-5'>覆盖</b><b class='flag-5'>测试</b>-语句<b class='flag-5'>覆盖</b>

    ARM架构同步概述及案例分析

    代码可能会在其他具有不同或未来微体系结构设计的CPU上崩溃。 本文还提供了有关典型增强功能的信息,并提供了一个深入研究案例。
    发表于 08-21 07:51

    从软件测试白盒测试实例分析

    白盒测试是关注测试用例覆盖程序逻辑(源代码)的程度。最终的白盒测试是执行程序中的每个路径。但对于大多数的程序(例如带有循环的程序),完全意义
    的头像 发表于 08-20 14:44 819次阅读
    从软件<b class='flag-5'>测试</b>白盒<b class='flag-5'>测试</b>实例<b class='flag-5'>分析</b>

    功率分析仪LMG671 用于光伏逆变器对比测试

    近日,德国计算机杂志《COMPUTER BILD》深入研究了目前分布式太阳能电站的技术趋势,并对不同的太阳能组件和太阳能逆变器进行了广泛的测试。为此,编辑的技术和产品团队使用我们的LMG671功率分析仪对太阳能逆变器进行了精确的
    的头像 发表于 06-16 13:36 269次阅读
    功率<b class='flag-5'>分析</b>仪LMG671  用于光伏逆变器对比<b class='flag-5'>测试</b>

    代码覆盖检测

    1 代码覆盖率概述 覆盖率(code coverage rate)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量
    的头像 发表于 05-12 22:26 2485次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>覆盖</b>检测