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

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

3天内不再提示

静态分析揭示了传统软件中的潜在缺陷

星星科技指导员 来源:嵌入式 作者:PAUL ANDERSON 2022-11-10 16:31 次阅读

静态分析工具可以帮助找到并发性和其他缺陷,以减少遗留的延迟。

从基于软件的旧系统迁移到新技术时,能够重用尽可能多的代码非常重要。即使这些代码已经过彻底的测试,并且在旧系统中的实践中被证明是可靠的,它仍然可能包含潜在的错误。这些错误可能从未在旧系统中触发,因为该系统非常特定的属性,例如用于编译代码的工具链、处理器体系结构或主机操作系统。当移植到这些属性不同的新系统时,潜在缺陷可能表现为有害错误。但好消息是,先进的静态分析工具可以清除这些潜在的缺陷,以帮助应对挑战。

更新系统,揭示编码缺陷

迁移遗留系统最重要的动机之一是利用自原始系统首次部署以来硬件技术的进步。由于采用了更新更快的处理器,最常见的好处可能是性能提高。从代码的角度来看,这也是一个最重要的变化。新处理器可以具有不同的位宽或字节序,并且可用内核的数量可以不同。在从旧平台移植到下一个平台的代码期间,大部分重新编码工作将用于使代码适应这些差异。

编译器、工具链和潜在错误

与实现新处理器相比,还有许多其他不太明显的差异,这些细微差别很容易被忽视。以用于编译代码的工具链为例。从表面上看,这应该不会有太大区别。毕竟,如果代码是编写为符合 ANSI C 标准,并且如果编译器声称支持 ANSI C,那么当由任一编译器编译时,代码肯定会具有相同的语义吗?不幸的是不是。C 和 C++ 标准充斥着“编译器依赖”的子句,这意味着该标准并不确切规定如何编译某些结构,选择取决于编译器编写者。其中许多对于程序员来说是显而易见和众所周知的,例如计算操作数的顺序,但其他的则非常微妙。潜在错误在旧系统上可能是无害的,因为编译器选择以特定方式编译它,但在新系统上是危险的,因为新编译器会做出不同的选择。

当然,编译器也是程序,它们本身并非没有缺陷。最近一项针对 C 编译器的研究发现,他们测试的每个编译器都有代码生成缺陷[1]。易失性关键字的处理在嵌入式安全关键型软件中至关重要,因为它经常用于读取传感器数据,特别容易出现编译器错误,从而导致传感器值的更改被静默忽略。程序的正确运行甚至可能依赖于这些缺陷。

另一个危险区域:标准库

另一个可能导致潜在缺陷变得危险的细微软件迁移差异涉及与操作系统接口的标准库。人们可能希望这样的库在各个平台上保持一致,但这种情况很少见。最显着的区别是在错误处理方面。新平台可能具有与旧平台完全不同的故障模式,可能需要更改代码才能处理这些差异。更糟糕的是,根据最近的一项研究,错误案例的记录似乎非常糟糕[2]。

静态分析胜出,补充传统测试

显然,任何遗留迁移项目都必须包括大量时间来测试软件的新版本。但是,测试结果仅与测试输入一样好。如果测试用例未能执行发生错误的路径,则该缺陷可能无法检测到。生成新的测试用例也很昂贵。因此,清除这些潜在缺陷的明智策略是使用高级静态分析工具作为遗留转换工作的一部分。此类工具能够发现本文所述的缺陷,包括那些依赖于平台微妙之处的缺陷。他们特别擅长发现并发缺陷,例如使用传统测试方法极难发现的数据争用。他们还擅长查找代码实例,这些代码虽然不是绝对错误的,但与错误高度相关,或者在移植到不同环境时特别危险。

审核编辑:郭婷

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

    关注

    68

    文章

    18304

    浏览量

    222358
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48640
收藏 人收藏

    评论

    相关推荐

    源代码审计怎么做?有哪些常用工具

    源代码审计是一种通过检查源代码来发现潜在的安全漏洞的方法。 下面是常用的源代码审计工具: 1、Fortify:通过内置的五大主要分析引擎,对源代码进行静态分析,并与特有的
    发表于 01-17 09:35

    Helix QAC—软件静态测试工具

    Helix QAC是Perforce公司(原PRQA公司)产品,主要用于C/C++代码的自动化静态分析工作,可以提供编码规则以及信息安全相关检查、代码质量度量、软件结构分析、测试结果管
    的头像 发表于 01-10 17:35 278次阅读
    Helix QAC—<b class='flag-5'>软件</b><b class='flag-5'>静态</b>测试工具

    SiC外延层的缺陷控制研究

    探索SiC外延层的掺杂浓度控制与缺陷控制,揭示其在高性能半导体器件中的关键作用。
    的头像 发表于 01-08 09:35 852次阅读
    SiC外延层的<b class='flag-5'>缺陷</b>控制研究

    嵌入式软件的问题分析

    使用异常,那么这个架构的可扩展性就很差。 4. 伸缩性 伸缩性就是设计的方案或系统是否可以根据需求适配不同数量的功能或子系统,在我们设计的软件系统,架构的可伸缩性决定架构的可适配性,例如,当硬件资源
    发表于 11-17 09:29

    分析蔡司工业CT中的自动缺陷检测

    读取CT扫描和X射线结果对其进行详细分析。AI软件将根据检测区域,评估缺陷经过进一步处理后是否会造成问题,以及是否应据此判定部件不合格。可检测在线操作中是否更频繁地出现类似缺陷,从而在
    的头像 发表于 11-15 11:14 264次阅读

    基于软件性质的自动化测试技术

    软件开发的生命周期中,测试是至关重要的一环。为了确保软件产品的质量,开发团队需要进行全面的测试,以发现和修复软件潜在缺陷和问题。
    的头像 发表于 10-09 16:29 283次阅读
    基于<b class='flag-5'>软件</b>性质的自动化测试技术

    【KV260视觉入门套件试用体验】三、缺陷检测

    /HDMI-Tx/ file。下表列出了缺陷检测加速应用程序中使用的特定硬件(SOM + Carrier卡)和相关外设。 下图显示该设计支持的各种管道。 缺陷检测应用程序的关键特性 缺陷
    发表于 09-26 15:17

    嵌入式开发中静态代码分析工具的功能

    当前标准的C语言编译器存在普遍只能找出代码中潜在缺陷,而对程序方案设计并没有效。
    发表于 08-31 09:11 342次阅读
    嵌入式开发中<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>工具的功能

    医疗器械软件风险分析介绍 医疗设备软件静态和动态分析技巧

    静态和动态分析是满足软件测试合规性的关键,但这些过程并不容易实施。这篇文章提供了有关如何自动化该过程的专家指南。
    的头像 发表于 08-11 11:07 1317次阅读
    医疗器械<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>技巧

    用于嵌入式的常见代码静态分析工具有哪些?

    当前标准的C语言编译器存在普遍只能找出代码中潜在缺陷,而对程序方案设计并没有效。
    发表于 08-09 10:10 799次阅读
    用于嵌入式的常见代码<b class='flag-5'>静态</b><b class='flag-5'>分析</b>工具有哪些?

    嵌入软件静态解析工具

    ANSI),以及汇编语言的源代码,制作包括流程图等的程序说明书的工具。不论是对以往的程序进行逻辑分析,还是为新开发的程序制作说明书,都提供强有力的支援。作为程序静态分析功能,包括外部
    发表于 08-02 11:51

    什么是静态代码分析静态代码分析概述

    静态分析可帮助面临压力的开发团队。高质量的版本需要按时交付。需要满足编码和合规性标准。错误不是一种选择。 这就是开发团队使用静态分析工具/源代码分析
    的头像 发表于 07-19 12:09 944次阅读
    什么是<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>?<b class='flag-5'>静态</b>代码<b class='flag-5'>分析</b>概述

    静态时序分析的相关概念

      本文主要介绍了静态时序分析 STA。
    的头像 发表于 07-04 14:40 605次阅读
    <b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>的相关概念

    Linux内核代码的静态检查

    Linus在2004年开发了kernel代码静态检查工具,可以检查出kernel中潜在的风险代码
    的头像 发表于 06-05 14:50 736次阅读

    静态分析和动态分析的区别

    静态分析和动态分析是一种双管齐下的方法,可以在可靠性、错误检测、效率和安全性方面改进开发过程。为什么它们都很重要?它们又有什么区别呢?
    的头像 发表于 05-16 16:03 4085次阅读