25
社区成员
发帖
与我相关
我的任务
分享静态分析是在不改变现有软件开发流程的情况下在编码阶段最容易实施并且性价比最高的软件质量保障手段,已成为各行业软件开发和测试的标准实践。大型IT公司如Facebook、Google、百度、腾讯、阿里巴巴等都自主研发满足自身需求的静态分析工具,并将其无缝集成到软件开发过程,波音、NASA、空客等也采用多种静态分析工具对其安全关键软件进行测试分析。我国航天、航空等军工领域都制定了相应的静态分析技术标准,并普遍采用了各类静态分析工具。
静态分析是指在不运行计算机程序的条件下,综合运用词法/语法分析、控制流、数据流分析等技术对被测软件的代码进行扫描,以发现代码中潜在的风险和缺陷。
在单元验证和集成验证中都提出实施静态分析相关方法:

图7 静态分析方法
用于确定程序控制流的一项静态分析技术。控制流的表示形式就是控制流图(Control Flow Graph,CFG)。

图8 控制流分析
通过模式匹配在程序的抽象语法树(Abstract Syntax Tree, AST)上查找问题。

图9 语法分析
根据程序的执行逻辑和每条语句的语义,推测变量的可能值。编译器优化的基础,也是当今静态分析工具的基础。

图10 典型的数据流分析问题
采用抽象域对程序变量的取值进行近似,进而通过迭代求得程序行为不动点的一项技术。数据流分析是抽象解释的一个特例。抽象解释擅长数值类型的缺陷检测,如除零错、数值溢出等。

图11 抽象解释一般案例
缺点:能有效建模一些数值取值范围以及值域分类,但对变量的取值相关性,指针运算等处理不够好。

图12 抽象解释缺点案例
一个具体的静态分析工具往往会使用多种静态分析技术,误报率、漏报率和可扩展性是其核心指标。


图13 丰田美国信息技术中心评估结果
选择高质量的静态分析工具主要有以下五项准则:
4.1 工具检查项目能否覆盖ISO 26262对于软件编码的要求

图14 6-9 Table 7 - Methods for software unit verification
ISO 26262标准对于ASIL C/D级软件强烈建议的7类验证手段中,“1f控制流分析”、“1g数据流分析”、 “1h源代码静态分析”三类可以通过静态分析工具结合合适的编码规范(如:MISRA C:2012、MISRA C++:2008、AUTOSAR CPP14等)自动化完成。
实践中,通常选择MISRA C:2012、MISRA C++:2008或AUTOSAR CPP14作为编程规范以满足ISO 26262对编码的要求,这些编程规范明确标注了对功能安全要求的覆盖,并且覆盖的功能安全要求多,被各大认证机构认可。

图15 MISRA、AUTOSAR对ISO26262要求的覆盖情况
实验表明,对于未提前考虑功能安全要求的C++程序,使用AUTOSAR CPP14编程规范对代码进行检查,规则违反密度将超过1个/行,如开源项目Z3(4.8.10版本,37.1万行),违反AUTOSAR CPP14编码规则246类,违反条数超过65万条。
对于这样的项目,开发人员往往将面对数万甚至数十万规则违反,误报过多或报警意义不明将严重影响开发人员清除报警的效率和对工具报警的信心。

图16 工具报警信息有效性示例
工具对语言标准的支持直接影响工具可用性,检测结果的正确性和有效性。能否及时支持最新版本的C/C++语言标准被视为是选择静态分析工具重要准则。

图17 各个版本的C++语言标准
基于不同客户的工作差异,产生了对工具的多种使用场景需求,包括单机使用场景、IDE集成场景、多人协同作业场景、CICD场景等。好的工具可以同时提供多样的场景支持,以应对不同客户的差异化需求。

图18 多样的工具使用场景
4.5 工具是否通过功能安全认证,能否提供标准评估报告或工具鉴定报告

图19 ISO26262中部分内容
工具选择时应考察其是否通过功能安全认证,能否提供标准评估报告或工具鉴定报告。对于不具备上述能力的工具,用户向认证机构证明工具的有效性将是繁重的甚至不能独立完成的工作。
欢迎访问产品网站:北京轩宇信息技术有限公司--高可信工具软件