一文了解全面静态代码分析

article/2025/5/14 14:11:19

在开发具有安全性、可靠性和合规性的软件时,全面静态代码分析是一种有效的方法。在这里,我们将就静态分析而言,讨论全面静态代码分析的不同之处,阐述全面静态代码分析的重要性,以及如何进行全面静态代码分析。

什么是全面静态代码分析

全面静态代码分析,或只是全面分析,是指分析结果的完整性或“健全性”。静态代码分析工具据称能够提供可靠的分析结果,这意味着如果某个软件中存在特定的缺陷或漏洞,该分析工具将报告上述问题。

如果不确实是否存在问题,则提供某种形式的警告,这样就不会“漏掉”任何问题。

(注:这些问题在Helix QAC工具中被归类为可能存在的问题,如无必要,则可以不进行全面分析。)

全面静态代码分析不同于其他形式的静态分析,其他形式的静态分析结果可能基于在一定时间或资源范围内可能发生的情况。

鉴于程序的运行时行为建模需要某些近似值(例如,缺乏对程序输入或操作系统状态的了解),全面静态代码分析需要采用Over-approximations(过近似)。

Over-approximations(过近似)用以保证不存在漏报(对于给定的漏洞类型),而under-approximations(下近似)首先保证的是没有误报而却可能有漏报。

而其他形式的静态分析没有表现出这种严格性,可能既包含Over-approximations(过近似) 又包含 under-approximations(下近似)。
 

全面静态代码分析工具和非全面静态代码分析工具可能会为程序的特定部分提供一份健康报告,而全面静态代码分析工具引擎提供了额外的保证,即在提供这一健康证明的同时,所有可能性和所有路径均已得到验证。

全面静态代码分析工具的工作原理
 

当提到全面分析时,我们通常考虑更复杂的过程间和过程内控制以及数据流分析形式,与当今最先进的静态分析工具的工作原理相同。

相较于更为简单的代码语法和语义分析,不同之处在于控制和数据流静态分析通常与检测更为复杂的问题有关,包括:

  • 空指针错误引用
  • 数组或缓冲区下溢和上溢
  • 使用未初始化的对象
  • 分配内存和释放内存异常
  • 数字上溢、下溢和环绕
  • 除以零
  • 死代码
  • 数据竞争、死锁和其他并发冲突

控制和数据流分析是一项高计算负载的任务,因为必须考虑系统的所有可能输入以及通过系统所有可能的控制流路径。事实上,由于控制流和数据流分析的蛮力穷举算法会导致分析时间指数暴涨,因此很少采用该方案。符号执行和抽象解释算法将是一个更好的选择。

根据Roberto Amadini、Graeme Gange、Peter Schachte、Harald Søndergaard 和Peter J. Stuckey的《抽象解释、符号执行和约束》,“抽象解释是一个静态代码分析框架,对程序所有可能运行时状态适用过近似。”

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

但需要注意的一点是,虽然抽象解释较为全面,但符号执行却未全面执行。

为什么全面静态代码分析很重要?
 

全面性是安全关键软件系统中的一个重要因素,尤其是能够保证软件不存在任何正在检查的编码缺陷。也就是说,全面分析可用于确保软件中不存在错误。

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

如何使用Helix QAC工具执行全面静态代码分析
 

由于能够提供深入和高度准确的分析结果,30多年以来,Helix QAC一直是值得信赖的静态代码分析工具。Helix QAC能够进行全面的静态分析,一直是符合合规性的严格监管和安全关键行业的首选工具。

但为了能在Helix QAC工具中启用全面分析,需要执行以下步骤:

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

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

为什么使用Helix QAC工具进行全面静态分析
 

亲自体验Helix QAC工具的全面静态分析对代码质量和全面性的影响。

立即联系 龙智 体验,开启您的Helix QAC免费试用之旅。

作者简介:
 

史蒂夫·霍华德(Steve Howard)

静态代码扫描工具(SAST)Perforce系统产品倡导者, 史蒂夫在软件验证和确认领域拥有超过15年的经验,尤其是在静态代码分析方面经验颇丰。

史蒂夫拥有威尔士大学计算机科学一等学位和多个软件测试和安全认证的研究生学历。


http://chatgpt.dhexx.cn/article/S47mh4DW.shtml

相关文章

代码分析工具 - SonarQube

1. 常见代码质量分析工具 SonarQube:可以分析27多种不同编程语言中的代码,并帮助您提高性能和检测安全漏洞。它由SonarSource的团队开发,对社区免费开源。SonarQube可以添加到您的CI/CD管道中,或者与您选择的代码库托管平台集成&a…

《编码 - 代码分析》代码结构分析

1 代码结构分析概述 在编写代码时,要求要结构清晰、接口简单。如果代码结构过于复杂,会带来很多问题:代码很难被理解,不方便编写测试用例,容易隐藏错误,出现问题难以定位,修改代码容易产生新的…

利用宏让ERStudio生成代码文件

Embarcadero ERStudio 是一个数据模型工具,用起来很方便。在ERStudio里建完数据模型后,可以利用宏来帮助生成对应的实体类文件以及对应的简单的数据访问类文件。为了实现这一目的,需要自己写脚本,支持的语言为 VB(以前…

Erstudio8.0怎么用?Erstudio8.0汉化版详细使用教程

Erstudio8.0使用教程 打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimensional(多维) 两种在这里主要以关系型数据库为主来介绍模型的创建过程。 第二和第三项均是重…

ERStudio如何显示entity的tableName(表名的英文)和defaultColumnName(英文字段名)

转换为物理模型就可以了 物理模型中会优先显示tableName和defaultColumnName 这个mysql选择自己使用的数据库即可, ** 温馨提示:只想单纯看一下英文名而且不会转物理模型的话可以参考我的这个步骤,专业转化物理模型的话,建议另…

【SpringBoot】4. ERStudio初使用

1. 逻辑结构 (1)创建文件 (2)建立实体对象entity (3)编辑实体对象 (4)添加属性 (5)图表显示选项 (6)实体之间建立联系 (7…

如何使用ERStudio 生成comment

在ER使用中,在生成sql过程中,如何批量生成字段描述,如何批量添加Owner,请看下文: 1、ER生成字段描述 2、ER生成描述添加Owner 使用的ER版本是8.0,英文版本,在操作过程中,有些配置细节…

使用ERStudio6创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮 来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按…

ER/Studio知识汇总

一、关系 网上找了一下,大部分说得不太清楚,我在这里举上个例子。注意,这里的关系是逻辑上的,并非表结构也要如此。 1. 标识关系identifying relationship 意思:子实体的主键包含父实体的外键(可能成为复合…

【NodeJS】20 koa 企业级Cms内容管理系统-XMind功能分析、ERStudio设计数据库ER图

一、 什么是 CMS CMS 是"Content Management System“的缩写,意为"内容管理系统”。 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场。对于内容管理,业界还没有一个统一的定义,不同的机构有不同…

ER-studio显示选项设置

新建erstudio文件,默认不显示entity的datatype,用起来不方便。 设置如下: 当前页面->右键选择 Diagram And object Display Options->Entity->Datatype(勾选即可)。效果如上图

(10)ERStudio

1.外键 https://jingyan.baidu.com/article/f79b7cb37e9d219144023ea6.html 第一个图标:Identifying Relationship。 一对多的关联,主表的主键既是子表的外键也是子表的主键 第二个图标:Non-Identifying, Mandatory Relationship。 一对多的关…

ERStudio逆向工程生成ER模型

首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,选择第二个单选按钮 接着,点击“Login”按钮,弹出如下的对话框&…

使用ERStudio创建数据表与ER图

下面以一个教育网站的用户数据表来举例说明ERStudio的一些基本操作方法: 1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“CtrlN”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文…

使用ERStudio创建数据表ER图并导出数据表的SQL(DDL)语句

1.创建数据表实体 打开ERStudio软件,其界面如下: 点击File菜单的NEW或则使用快捷键“Ctrl+N”着按钮来新建一个ER图文件,按下OK按钮即可打开一个空白的ER图文件 其后缀是.DM1类型的。新建一个ER文件后,ERStudio的工具栏内的许多按钮从灰色编程了彩色可用。 下面开始创建一个…

esStudio 逆向工程 导出 ER图

第一步:mysql 配置odbc驱动 :驱动安装 第二步配置 ERStudio 首先,打开ERStudio,如下图所示: 然后,点击菜单栏上的“File”——“New”,如下图所示: 弹出如下的对话框,…

erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。

使用ERStudio生成数据库设计文档 1、用逻辑模型(Logical Model)生成物理模型(Physical Model)。 2、选择Tools->Generate Reports...。 3、在弹出的对话框中选择RTF格式、生成文件的位置和名称,如下图。 3、单击“Next”按钮,在新窗口的左边树Tables项…

erstudio连接mysql_ERStudio的使用

打开ERstudio,点击新建出现如图对话框: 选择第一个,表示创建一个新的关系型 数据库模型 这里提一点数据库模型分为relational(关系)和dimensional(多维) 两种在这里主要以关系型数据库为主来介绍模型的创建过程。 第二和第三项均是重新设计已存在的数据库…

ERStudio使用细则

ER-Studio是一种有助于设计数据库中各种数据结构和逻辑关系的可视化工具,并可用于特定平台的物理数据库的设计和构造,可生成sql和DM1两种文件 工具栏的认知 共有5种逻辑关系,从左到右依次是: Identifying Relationship&#xff…

ERStudio操作指南

ERStudio操作指南 一、创建逻辑模型二、生成SQL脚本 本文使用的ER/Studio版本:ER/Studio Version 8.0.2 一、创建逻辑模型 1、打开ER/Studio后,选择:File>New,打开如下界面,选择Draw a new data model。 如上图&…