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

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

3天内不再提示

利用正确的静态分析实现应用

星星科技指导员 来源:嵌入式计算设计 作者:Wayne Ariola,Adam T 2022-07-04 15:22 次阅读

一般来说,最佳实践是平台中立的——这就是为什么它们被称为“最佳实践”。尽管嵌入式开发特有的微妙之处,有已知的标准来确保质量,无论平台如何。例如,避免内存泄漏应该是通用的。此外,静态分析和软件之间的关系不一定由应用程序定义:它由设备的用途定义。也就是说,运行静态分析是嵌入式软件开发特别重要的最佳实践。

传统上,嵌入式软件在发布后访问起来非常昂贵且痛苦。出于这个原因,大多数质量或验证活动都集中在消除修补或重构嵌入式代码的需要上。发布后修复错误不仅对品牌而且对利润构成最大风险。在某些行业,特别是在安全关键领域,与软件缺陷相关的后果非常严重,以至于必须完美地执行质量和验证任务。嵌入到胰岛素泵、武器控制系统、汽车制动系统等关键设备中的软件需要使用全方位静态分析功能的预防策略;否则后果可能包括代价高昂的诉讼、C 级辞职,甚至丧生。这与敏捷相反,持续开发,Web 驱动的软件应用程序,例如智能手机、电视等,对于这些应用程序而言,预防策略不太重要。为此,在软件开发范围的预防策略方面进行了以下讨论,检查了各种静态分析实现:

积分时静态分析

持续集成时间 (CI) 静态分析

指标分析

编辑时静态分析

运行时静态分析

积分时静态分析

在集成期间运行静态分析以检测容易实现的目标和严重错误是实施预防策略的良好起点。集成时静态分析在不实际执行代码的情况下模拟可行的应用程序路径,这对于无法进行运行时分析的系统非常有用。静态分析可以跨多个函数和文件进行测试,并捕获常见的内存问题,例如未初始化的内存、溢出、空指针等。

当组织开始在集成期间进行测试时,静态分析在开发策略方面有几个目的。首先,工程师可以查看测试结果并确定它们对于特定应用的重要性。静态分析可能会发现可能对软件安全性、可靠性或性能产生严重影响的潜在缺陷。另一方面,它可能会返回企业可能不关心的东西。例如,企业可能并不关心游戏控制台中的缺陷会导致软件在发生不太可能的操作序列时崩溃。用户可以简单地重新启动并继续享受他们的系统。然而,在其他情况下解决同类问题可能对于防止灾难性后果至关重要。

静态分析还可以帮助软件工程师发现在风险评估阶段很难想到的潜在缺陷。工程师可以对潜在缺陷进行分类,以改进未来的风险评估迭代。

持续集成时间 (CI) 静态分析

在运行集成时静态分析之后,软件工程师应该对代码中潜在的系统问题有更强烈的认识。下一步是运行 CI 静态分析,以执行规划阶段概述的编码策略。这可以防止在集成时间分析期间发现的缺陷类型。

对于静态分析中发现的每个问题,在代码的其他地方至少还有 10 个完全相同的东西。静态分析是同时解决所有同类违规行为的理想工具。这与在代码中追逐每一条可能的路径相反。找到系统性问题,创造一个bug无法生存的环境要好得多。

当我们谈论静态分析时,在很多情况下我们指的是反模式分析。积极的模式是应该在代码中的东西。例如,要求工程师在声明函数指针时使用typedef的策略是正模式静态分析规则。这与例如在与标准 C 库 交互时禁止使用字符串类中的data()成员函数的策略形成对比。

执行两种类型(正模式和反模式)的静态分析很重要,但值得一提的是这种区别,因为如果组织花时间基于正模式构建编码策略,这可以确保软件工程师准确地构建代码它应该符合业务目标或合规性要求。

指标分析

指标分析是一种静态分析实现,它评估代码特征并提供有关代码的洞察力,可以帮助软件工程师识别弱点(图 1)。它是一种关键传感器,可以突出显示可能容易出现逻辑错误的应用程序区域。指标分析是一个基本的基线测量,应该触发进一步的分析,例如代码审查或其他一些补救活动。

图 1: Parasoft 静态分析指标报告

poYBAGLClVSAPqDYAAzok6Ytcn4348.png

指标分析最好尽早使用,因为它可能会影响软件工程师编写代码的方式。避免尝试被动地或在 QA 阶段实施指标分析。指标分析的目标不仅仅是检测潜在的缺陷;它以允许工程师遵循可持续编码轨迹的方式检测它们。对潜在缺陷热点运行指标分析,纠正任何违规行为,并实施基于模式的分析规则以防止将来发生。

任何与潜在问题相关的指标都是公平的游戏。例如,一家医疗设备公司可能会使用度量分析来衡量圈复杂度,因为高分表明设备在正常操作期间有太多决策点需要处理。当有 10 个分支要削减时,知道复杂性分数超过了编码策略中设置的阈值,而不是在 QA 阶段发现,这将有助于保持项目按时和按预算进行。例如,组织可能想要测量公共变量,因为高数字可能与代码中过多的依赖关系相关。每个组织都需要决定哪些指标可以与代码中可能的缺陷相关联。

编辑时静态分析

静态分析的最佳点是开发人员在编辑器中工作时。在编辑时运行静态分析有几个目的。首先,它将软件工程师指出潜在的问题。其次,它通过确保系统地修复任何问题来实施风险评估策略。

但是什么时候应该实施静态分析呢?我们已经讨论了为什么太迟实施静态分析是一个问题。但是,它也可能实施得太早,因为静态分析必须有足够的上下文才能提供有意义的信息。对字符、行甚至语句运行静态分析会产生太多噪音而无用。实施积极的设计模式可确保新代码在编写时按预期构建。在编辑时运行静态分析是在开发团队中促进正确行为的一种有效方式,因为反馈是快速的并且是在正在编写的代码的上下文中。利用这种类型的分析可以提高代码审查的效率,因为工程师应该能够立即纠正基于策略的错误。

运行时静态分析

一些静态分析模式可以在运行时检测缺陷。如果嵌入式目标可以容纳开销,则组织应执行运行时静态分析以完善其预防策略。运行时静态分析在代码实际运行时检测错误,这使软件工程师能够使用真实数据测试真实路径。

关于静态分析和 QA 的最后说明

在理想的预防策略中,QA 运行静态分析时发现的错误应该已经知道并确定为可接受的。这是因为软件工程师应该已经针对设计模式进行了测试和调整以强制执行编码策略。此阶段的违规意味着流程存在问题,例如不正确的静态分析规则。在这些情况下,QA 需要将代码发送回开发人员,以便他们可以找到缺陷的系统原因并实施规则以防止将来发生。从这个角度来看,静态分析是一个比错误查找器更好的质量门。

作者:Wayne Ariola,Adam Trujillo,Arthur Hicken

审核编辑:郭婷

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

    关注

    2526

    文章

    48092

    浏览量

    740016
收藏 人收藏

    评论

    相关推荐

    如何利用LiDAR实现深度感测

    如何利用LiDAR实现深度感测
    的头像 发表于 12-06 16:19 296次阅读
    如何<b class='flag-5'>利用</b>LiDAR<b class='flag-5'>实现</b>深度感测

    无线网IP静态好还是DHCP好

    静态IP和动态主机配置协议(DHCP)是两种不同的IP地址分配方法。每种方法都有其优点和适用场景,选择哪种方法取决于您的具体需求和网络环境。下面将详细介绍静态IP和DHCP的优缺点,以帮助您做出正确
    的头像 发表于 11-27 15:03 5720次阅读

    什么是静态?收音机放大电路的静态分析指标是什么?

    未加信号时三极管的直流工作状态被称为静态,也可以说成放大电路没有输入信号时的工作状态,放大电路的质量与静态值的关系很大。
    的头像 发表于 09-27 16:46 1627次阅读
    什么是<b class='flag-5'>静态</b>?收音机放大电路的<b class='flag-5'>静态</b><b class='flag-5'>分析</b>指标是什么?

    基本放大电路中静态值和静态工作点一样吗?

    基本放大电路中静态值和静态工作点一样吗?  基本放大电路是指通常用于信号放大和增强的电路,它是电子工程中最基本的电路之一。在基本放大电路中,静态值和静态工作点都是非常重要的概念,但它们
    的头像 发表于 09-13 14:17 1268次阅读

    为什么在放大电路中必须设置合适的静态工作点?

    电路不能正确工作,甚至会损坏元件。本文将详细介绍放大电路的静态工作点的概念、作用及如何设置。 一、放大电路的静态工作点的概念 放大电路是指将输入信号放大后输出的电路。其基本结构一般包括输入端、输出端和放大元件。放大
    的头像 发表于 09-13 14:15 5864次阅读

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

    静态和动态分析是满足软件测试合规性的关键,但这些过程并不容易实施。这篇文章提供了有关如何自动化该过程的专家指南。
    的头像 发表于 08-11 11:07 1298次阅读
    医疗器械软件风险<b class='flag-5'>分析</b>介绍 医疗设备软件<b class='flag-5'>静态</b>和动态<b class='flag-5'>分析</b>技巧

    UVM中通过静态实现对全局资源实现管理

    Systemverilog中可以使用static修饰变量,方法,得到静态变量和静态函数。static也可以直接修饰class,获得静态类。但
    的头像 发表于 08-07 17:35 1094次阅读
    UVM中通过<b class='flag-5'>静态</b>类<b class='flag-5'>实现</b>对全局资源<b class='flag-5'>实现</b>管理

    静态时序分析是什么 静态时序分析可以检查什么

    传统的电路设计分析方法是仅仅采用动态仿真的方法来验证设计的正确性。随着集成电路的发展,这一验证方法就成为了大规模复杂的设计验证时的瓶颈。
    的头像 发表于 07-20 09:46 1535次阅读
    <b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>是什么 <b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>可以检查什么

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

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

    静态时序分析的基本概念和方法

    引言 在同步电路设计中,时序是一个非常重要的因素,它决定了电路能否以预期的时钟速率运行。为了验证电路的时序性能,我们需要进行 静态时序分析 ,即 在最坏情况下检查所有可能的时序违规路径,而不需要测试
    的头像 发表于 06-28 09:38 802次阅读
    <b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>的基本概念和方法

    STA-0.静态时序分析概述

    静态时序分析(Static Timing Analysis, 以下统一简称 **STA** )是验证数字集成电路时序是否合格的一种方法,其中需要进行大量的数字计算,需要依靠工具进行,但是我们必须了解其中的原理。
    的头像 发表于 06-27 11:43 572次阅读
    STA-0.<b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>概述

    恒讯科技分析静态ip是什么意思?有什么优缺点?

    静态ip是什么意思?“静态”一词的意思是不变的,这很好地描述了静态ip地址的工作原理。静态ip的含义是指分配给设备并保持不变的ip地址,而不是每次设备连接到Internet时都会更改的
    的头像 发表于 06-01 16:57 1194次阅读

    FPGA静态时序分析简单解读

    任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种
    的头像 发表于 05-29 10:24 372次阅读
    FPGA<b class='flag-5'>静态</b>时序<b class='flag-5'>分析</b>简单解读

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

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