> 文档中心 > 什么是声音静态分析?

什么是声音静态分析?

在开发需要安全、可靠和合规的软件时,声音静态分析是一种有益的实践。在这里,我们将讨论声音分析的不同之处,包括静态分析、为什么它很重要,以及声音静态代码分析的工作原理。

什么是声音静态分析?

声音静态分析,或简称为声音分析,是指分析结果的完整性或"合理性"。对于声称提供可靠分析结果的静态分析工具,这意味着如果软件中存在指定的错误,缺陷或漏洞,则该工具将报告该工具。

如果存在或不存在是有争议的,那么将提供某种形式的警告*,以便没有任何东西可以"溜走"。

(*注意:这些在Helix QAC中被归类为可能的问题,如果不需要声音分析,则可以禁用。)

声音静态分析不同于其他形式的静态分析,后者的结果可能基于在一定时间或资源范围内可能实现的结果。

鉴于对程序的运行时行为进行建模需要某些近似值(例如,缺乏对程序输入或操作系统状态的了解),因此声音分析需要过度近似。

过度近似保证没有假阴性(对于给定类型的漏洞),而近似值不足通常优先考虑没有误报。
在这里插入图片描述

其他形式的静态分析没有表现出这种严格性,并且可能包含低估和过近似的混合。

声音和不合理的分析工具的结果可能会为程序的特定部分提供干净的健康证明,但是声音分析引擎提供了额外的保证,即所有可能性和所有路径都已得到验证,以得出这一结论。

声音静态分析的工作原理

在提到声音分析时,我们通常会考虑更复杂的程序间和程序内控制和数据流分析形式,如当今最先进的静态分析工具中所示。

与更简单的代码语法和语义分析不同,控制流和数据流静态分析通常与检测更复杂的问题相关联,例如:

  • 空指针取消引用
  • 阵列或缓冲区下溢和溢出
  • 未初始化对象的使用
  • 内存分配和取消分配异常
  • 数字溢出、下溢和环绕
  • 除以零
  • 死代码
  • 数据争用、死锁和其他并发冲突

控制和数据流分析是一项计算繁重的任务,因为必须考虑系统的所有可能输入以及通过系统的所有可能的控制流路径。事实上,用于控制和数据流分析的蛮力详尽算法会导致指数分析时间,因此很少适合。但是,更优雅的选项以符号执行和抽象解释算法的形式存在。

根据Roberto Amadini,Graeme Gange,Peter Schachte,Harald Søndergaard和Peter J. Stuckey的抽象解释,符号执行和约束,"抽象解释是一个静态分析框架,用于声音过度逼近程序的所有可能的运行时状态。

而"符号执行是一个可访问性分析框架,它试图探索程序的所有可能的执行路径。抽象解释和符号执行在执行期间都以不变量或路径条件的形式保持约束,这决定了可以执行哪些可能的路径以及可以在各种数据源中保存哪些值。

然而,至关重要的是,虽然抽象的解释是合理的,但象征性的执行却不是。

为什么声音静态分析很重要?

健全性是安全关键软件系统中的一个重要因素,特别是因为它保证软件不包含任何正在检查的编码缺陷。也就是说,声音分析可用于显示软件中没有错误。

因此,在汽车系统的ISO 26262功能安全(FuSa)标准中,抽象解释分析被明确引用为软件单元验证方法(表7,方法1i)。

如何使用螺旋 QAC 执行声音静态分析

由于其提供深入和高度准确的分析结果的能力,Helix QAC 30多年来一直是值得信赖的静态代码分析工具。Helix QAC能够执行可靠的静态分析,一直是需要满足严格合规要求的严格监管和安全关键型行业的首选工具。

但是,为了在Helix QAC项目中启用声音分析,需要执行某些步骤:

在这里插入图片描述

数据流深度需要设置为最大值 (5),这将添加多个 -prodoption,如上面的屏幕截图所示。(请参阅 QAC 或 QAC++ 组件手册中的"分析超时"部分,了解为什么这些"超时"设置对于声音分析是必需的。

此外,"df::inter=5"和"Inter TU分析"虽然不是声音分析所必需的,但可以启用 - 以额外的计算成本 - 以减少需要报告的可能问题的数量。这些设置的效果是启用程序间和程序内分析。

选择螺旋QAC进行声音静态分析

亲身体验Helix QAC声音静态分析对代码质量和健全性的影响,立即私信北汇信息免费试用。

作者:北汇信息-无粥
喜欢本篇文章的话记得💬评论💖点赞⭐收藏 ➕更多技术文章直播课程,敬请持续关注北汇信息➕ ⬇️业务咨询请私信北汇信息或在官网留言⬇️ 📩📩📩