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

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

3天内不再提示

如何提高嵌入式软件测试准确性

要长高 来源:网络整理 作者:网络整理 2023-09-29 06:41 次阅读

嵌入式开发人员测试他们的软件时,有多种力量在起作用。由于对更大的计算工作负载、更广泛的连接以及改进的安全性的需求,系统的复杂性不断增加,这使得开发人员更难根据需求验证代码。随着发布时间的缩短,测试团队努力使传统的测试方法适应更大的复杂性和规模。

需要一种新的测试方法,团队正在寻求数学上证明的代码正确性,以显着提高对其应用程序的信心。要了解当今的产品目标与传统测试方法之间的差距,考虑复杂性如何影响测试会有所帮助:

覆盖。随着软件复杂性的增长,创建涵盖足够级别的代码库(包括函数、语句、路径、决策和条件)的测试变得越来越困难。

规模。无论测试范围(特性、组件、库或功能)如何,单元越多,测试它们所需的时间和资源就越多。

速度。传统的测试开发和执行实践无法跟上发布时间表的步伐,不可避免地迫使在测试覆盖率和时间之间进行权衡。

长期以来,人们一直认为接近 100% 的代码覆盖率是不可能的,因为这样的目标极难实现且运行成本高昂。单元测试、渗透测试、动态分析 – 所有传统技术都需要大量的时间和资源来执行,并导致对系统中错误和漏洞的不完整视图。

随着软件技术和计算能力的最新进步,这种信念现在已成为一个被证明的神话。学术和行业研究人员已经开发出数学上严格的技术,称为形式化方法,可实现高达 100% 的代码覆盖率并保证系统的正确性 - 现在可供企业就绪平台中的安全和安保关键型开发团队使用。

了解基于正式方法的测试工具

在纸面上,形式化方法明确证明代码没有错误和安全漏洞等问题。这些方法使用严格指定的数学模型,根据精确定义的规范验证软件的属性和行为。换句话说,形式化方法可以找到代码中出现的所有问题。

在实践中,任何开发人员都可以使用且负担得起基于企业级正式方法的测试工具。它们被称为详尽的静态分析工具,经过精心设计和验证,可将正式方法的强大功能集成到安全和安保关键型开发团队的现有验证和确认流程中。

与传统的测试和静态分析方法相比,这些工具有几个优点:

高达 100% 的应用程序覆盖率,涵盖所有可能的功能、语句、路径、决策和条件。

高达 100% 的输入覆盖率,涵盖被测单元范围内的所有可能值。

数学保证代码中没有未定义的行为(错误和漏洞),导致部署中零问题。

零漏报,因此开发人员可以增强发现所有问题的信心。

误报率低至零,这意味着开发人员花在追逐并非真正问题上的时间更少。

显著缩短测试时间,提高资源消耗效率。

图 1 说明了差异。传统的测试方法通常是测试用例开发和算法设计的“最大努力”尝试,受到人力和项目进度的限制。这会导致测试每次运行执行一个代码分支,并限制团队在给定测试阶段可以覆盖的内容。以正式方法为后盾的详尽静态分析可在单次测试运行中并行分析所有分支,将覆盖率提高到 100%,并显著缩短测试时间。

wKgZomUFaXqAECEkAAGaYDz7HdM881.png

图 1:传统测试方法(左)和声音静态分析(右)之间的代码路径比较。访问的段以橙色显示;未访问的段为黑色。

详尽的静态分析可以为开发人员提供一种强大的方法来管理软件复杂性,从而极大地改变他们对软件复杂性的看法。

详尽的静态分析如何提供帮助

传统测试方法的一个限制是它们的状态空间覆盖,即数据值和输入、控制和数据流的不同组合的数量以及它们可以覆盖的输出路径的固有限制。例如,传统的测试方法通常会在给定预期输入的情况下测试预期输出的函数。一些静态分析工具对此进行了扩展,以涵盖更广泛的输入和输出。但由于测试设计、实现和计划约束,这些工具无法测试所有可能的行为。

下面的代码示例演示了一个递增数组中的单元格值的 C 函数。

wKgZomUFaYaABxU-AACd4QQ_ViE564.png

典型的单元测试将根据函数的要求进行验证,检查函数是否递增了输出数组中的单元格值,并根据结果报告通过或失败。此测试不一定会检查数组索引 *p 是否由于系统中意外或不希望的副作用而导致越界内存访问 - 就像本代码示例中由于 while 循环中指定的不正确条件而发生的那样。

尽管存在缓冲区溢出,但针对要求的传统测试将在调用函数后验证数组是否为 {2, 4, 6, 8},并且始终通过,如以下控制台输出所示:

wKgZomUFaZKAeuHTAAAxWLTZK18407.png

除非测试设计者考虑越界数组访问的可能性,否则永远不会识别此缓冲区溢出。

这些类型的细微缺陷可能导致内存损坏,从而导致潜在的错误、崩溃或应用程序漏洞 - 传统测试方法不可见,但可以通过详尽的静态分析工具发现,如图 2 所示。该工具检测到数组开头后有 16 个字节的写入:缓冲区溢出。

wKgaomUFaaGAE-gbAAFz56nQnWw103.png

图 2:在 TrustInSoft 详尽静态分析工具中查找结果的屏幕截图。

这种内存损坏可以通过更详细的测试用例来揭示,其中越界写入条件会影响变量名称的值,即使它不参与测试的函数,如以下控制台输出所示:

wKgaomUFaayAOSBRAACLWVfo0OQ187.png

但是,开发团队很少实现此级别的测试深度,尤其是当代码比此示例更复杂时。

硬件感知在静态分析中的重要性

更 高级 的 详尽 静态 分析 工具 为 验证 和 确认 活动 带来 硬件 感知, 从而 实现 更 准确 和 高效 的 测试 覆盖率。硬件感知的重要性怎么强调都不为过,因为编译器实现、硬件架构和内存对齐的差异可能导致测试条件和代码行为大不相同。例如:

在 64 位目标上,long 通常为 64 位,int 通常为 32 位。

在 32 位目标上,long 和 int 通常都是 32 位。

这些硬件差异会影响测试条件、输入和路径,如以下代码示例所示:

wKgZomUFabqAJcEPAAAmq-4jkM8754.png

如果没有硬件感知,测试或分析方法将无法确定最后一条语句是否导致整数溢出(32 位目标)或不导致整数溢出(64 位目标)。在某些情况下,测试将执行比必要的更多的运行,以涵盖硬件支持范围之外的条件。在其他情况下,测试可能只是错过潜在的溢出。硬件感知静态分析在 100% 覆盖率和实现覆盖率所需的最少测试用例数量之间提供了完美的平衡。

另一个关键的硬件差异是字节序,如以下代码示例所示:

wKgaomUFacSAZgLhAAAtRKXa_UY950.png

根据底层硬件的字节序,变量 c 将设置为 0xBE(大端序)或0xEF(小端序)——这是测试执行的关键区别。

这种微妙的差异可能会导致灾难性的结果。请考虑将以下语句添加到上述代码示例中的情况:

wKgZomUFac-AL1FUAAAPwzZfS8w732.png

在大端系统上,此语句将导致除以零条件,并可能导致应用程序崩溃或其他不良行为。在小端系统上,此语句是有效的。了解这些差异的测试方法可以得出更准确的结果。

包含硬件感知的详尽静态分析工具还具有以下优点:

开发人员可以运行硬件感知分析,而无需将物理目标连接到主机。

目标测试可以在开发生命周期的早期运行,甚至在物理硬件可用之前。

开发团队可以提高测试能力并降低成本,因为不需要每个主机和开发人员都使用物理硬件。

详尽静态分析的未来

优先考虑详尽静态分析的嵌入式开发团队(代码覆盖率高达 100%,准确性远高于传统测试)将从其测试投资中获得最高价值。那些现在能够加入的开发人员将能够更好地提供更高质量的代码,并随着时间的推移提高测试效率。

从长远来看,从这种严格的测试中获得的结果和知识将导致“零问题”保证。这些原则将在开发过程的早期带来更强的可测试性,以支持安全和安保关键型产品要求和设计,并显着降低现场软件故障和漏洞的可能性。

编辑:黄飞

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

    关注

    3

    文章

    4299

    浏览量

    62370
  • 嵌入式软件
    +关注

    关注

    4

    文章

    240

    浏览量

    26604
  • 代码
    +关注

    关注

    30

    文章

    4733

    浏览量

    68294
  • 软件测试
    +关注

    关注

    2

    文章

    228

    浏览量

    18557
收藏 人收藏

    评论

    相关推荐

    浅析嵌入式系统软件的可靠测试难点

    `目前,嵌入式软件的可靠评价主要依赖测试,因为嵌入式软件的开发环境和
    发表于 08-02 10:05

    合同智能审核软件-提高审查效率和准确性

    审查的准确性。使用软件能够提高审查速度在提高合同审查的速度方面,灵玖合同智能审核软件设定了丰富的合同审核范围:1.审查合同格式是否规范:检查
    发表于 09-05 17:22

    嵌入式软件可靠测试方法是什么

    本文原文链接如下:https://www.jianshu.com/p/f6f5c3cd3fab目前,嵌入式软件的可靠评价主要依赖测试,因为嵌入式
    发表于 12-21 07:09

    如何提高嵌入式软件单元测试效率

    在本指南中,您将学习如何通过在更短的时间内运行更多的测试来增加您的单元测试吞吐量。 这种效率的提高来自于使用虚拟平台而不是物理硬件作为开发平台。 本指南对任何开发或运行嵌入式
    发表于 08-28 06:31

    基于模块化设计的嵌入式软件测试方法

    分析嵌入式软件的特点,综述传统的软件测试方法;针对嵌入式软件的特点,提出
    发表于 05-18 13:26 23次下载

    如何提高投标报价编制的准确性

        施工企业要在激烈的市场竞争中战胜对手,赢得工程项目,投标报价的准确性是关键。下面结合多年工作的实际,谈一下如何提高投标报价编制的准确性
    发表于 01-08 15:36 13次下载

    基于模块化设计的嵌入式软件测试方法

    摘要:分析嵌入式软件的特点,综述传统的软件测试方法;针对嵌入式软件的特点,提出
    发表于 04-07 00:32 2022次阅读
    基于模块化设计的<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>方法

    基于CodeTEST的嵌入式软件测试技术

    嵌入式软件测试有助于提高嵌入式软件质量和可靠。因此
    发表于 01-17 15:53 41次下载

    嵌入式Linux软件测试框架的研究

    嵌入式Linux 软件是最难测试的一类软件。在测试过程中通过使用有效的测试框架,可以显著
    发表于 06-07 17:14 29次下载

    嵌入式软件测试参考书籍

    嵌入式软件测试的几本参考书籍:1、《嵌入式软件测试》;2、《
    发表于 10-20 12:06 51次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>参考书籍

    嵌入式软件怎样测试,如何对嵌入式软件进行可靠测试

    摘 要 本文针对目前嵌入式软件设计可靠测试用例的手段主要依靠手工分析,沿用传统的软件测试用例设
    发表于 10-20 15:21 8次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>怎样<b class='flag-5'>测试</b>,如何对<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>进行可靠<b class='flag-5'>性</b><b class='flag-5'>测试</b>

    嵌入式软件测试研究意义,嵌入式软件测试的研究

    摘要:嵌入式系统在人类生活中发挥着重要的作用,包括飞行控制器这样的控制系统,以及洗衣机这样的家用电器。日前,嵌入式系统中软件的比重越来越大,也越来越复杂,保证嵌入式
    发表于 10-20 17:20 17次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>研究意义,<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>的研究

    测试嵌入式软件测试VS一般软件测试

    嵌入式软件测试的复杂多样3.3 嵌入式软件测试中对实时
    发表于 10-21 13:06 31次下载
    【<b class='flag-5'>测试</b>】<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>VS一般<b class='flag-5'>软件</b><b class='flag-5'>测试</b>

    几款常见的嵌入式软件测试工具

    说起嵌入式软件测试,我们先快速了解一下嵌入式软件自身的特点。嵌入式
    的头像 发表于 02-14 15:50 7386次阅读
    几款常见的<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>测试</b>工具

    影响电源纹波测试准确性的因素

    电源纹波测试是评估电源质量的重要手段之一,它能够反映出电源在输出电压中的波动情况。然而,测试过程中的多种因素都可能对测试结果的准确性产生影响。本文将从多个方面分析影响电源纹波
    的头像 发表于 08-02 09:42 489次阅读