什么是代码静态分析?

代码静态分析是指在不运行应用程序的情况下,对软件的源代码的语义、结构和行为进行分析,由此找出程序中的不规范、不合理的或者可能造成程序运行异常的代码。最为人所熟知的代码静态分析手段就是“人工代码走查”,随着人工代码审查的日益复杂化和工作量的增加,自动化的代码静态分析技术随之得以迅速发展。时至今日,绝大部分的代码静态分析都已经可以由专业的代码静态分析工具所完成。

那么代码静态分析到底可以为我们的软件解决什么问题呢?

    • 编码规范检查。最常用的代码静态分析手段。基于公司自定义的统一编码规范,或者是特定行业通用的编码规范,检查软件代码中不合规的写法,以保证代码的统一风格,尽早预防可能造成软件质量风险的各种不合理代码的出现。编码规则可以规范编码格式、命名规范、内存和资源管理、宏定义、危险代码等软件代码编写的各个方面。

    • 软件质量缺陷检测。更高级和深度的代码静态分析技术。检测软件代码中隐藏的会导致运行时异常或安全性的代码缺陷,如空指针、越界、除零、死锁、安全漏洞等,实现快速查找并及时修复软件错误。对比于编码规范检查,软件质量缺陷检测要求对代码进行更深度的解析和扫描,以定位真正的代码缺陷,除了找出问题点,往往还需要定位相关的代码逻辑路径。有别于编码规范违规代码,软件缺陷检查出的结果不只是可能造成代码质量风险,而是它们本身就是质量问题,所以对于研发团队来说,软件缺陷检查的结果可能在实施代码静态检查工作之初会有更直接、立竿见影的效果。

    • 代码度量分析。针对软件代码的各项度量指标的代码静态分析。如复杂度、嵌套深度、分支结构等多种常见度量维度,以便准确了解和优化代码结构。代码度量检查的思路与“二八原则”不谋而合,因为少数的最复杂的代码中隐藏或导致了大部分的bug, 代码度量正式为了规避或优化这些复杂代码,而从整体结构上提高软件的代码质量和可维护性。

    • 人工代码评审。对代码的算法、逻辑的实现合理与否的检查,这部分由于其与业务需求的密切相关,目前更多还是通过人工代码走读来完成,这也是代码静态分析中最需要人工智慧的部分。

 为什么要做代码静态分析 

简言之,代码静态分析的目的就是为了更早、更彻底地检测或预防代码错误,减少后期测试的bug, 最终降低项目成本并提高软件可靠性。

正如下面广为流传的Capers Jones对软件开发过程各个阶段缺陷引入数量、错误所查找的数量和错误修复成本的分布图所示,以往传统的瀑布式开发流程,大部分的软件缺陷都是在编码阶段被引入,而多数是在后期功能测试和系统测试阶段才被发现,而越到项目后期修复每个所发现的缺陷的成本越高,导致整体项目的高成本,和测试周期的不可预测性。

代码静态分析-1

代码静态分析要做的恰恰就是在软件缺陷被引入最多的、修复最容易的阶段 -- 也就是编码之初,利用无论是人工还是自动化工具的方式发现并修复这些代码错误。代码静态分析可以对软件质量的诸多方面带来好处,包括代码的可靠性、可读性、可维护性和可移植性。

对于像国防军工、航空航天、汽车电子、轨道交通、工业自动化和医疗器械等高安全和高可靠性行业来说,代码静态分析已经成为这些软件研发流程中的强制要求环节,其出发点也是基于以上目的。

难点和挑战

  • 到底应该引入哪些编码代码规则难以抉择,太多、太少都有问题。

  • 软件缺陷检测的误报率太高,是否存在漏报?

  • 编码规则重要还是缺陷检测重要,如何取舍?

  • 如何保证代码静态分析的结果能被及时修复?

  • 历史遗留代码中的海量检测结果如何处理?

  • 如何最大程度实现代码静态分析的自动化?

  • 开源工具和商业工具有什么区别?

解决方案

  • Helix QAC提供业内最全、最准确的代码合规性代码静态分析方案,内建MISRA C/C++, AutoSAR C++14, High Integrity C++, JSF等常用权威编码规则集,并支持编码规则的自定义

  • Klocwork提供侧重于代码质量的代码静态分析方法,凭借其领先的数据流分析技术,深度查找软件代码缺陷,快速支持百万级行甚至千万行以上大型软件,精准定位缺陷发生点和相关触发路径,误报率和漏报率低

  • 支持针对安全漏洞的静态扫描,基于CERT C/C++, CWE, OWASP等常用安全开发规范对代码的安全性进行检测

  • 提供基于几十种维度的代码度量指标分析功能,提供各种度量统计图表、结构图和仪表板

  • Helix QAC和Klocwork都采用现代化的B/S + C/S部署方式,对代码静态分析结果进行直观地展示、分配、协作和跟踪,保证代码静态分析监测结果的及时修复和有效管理

  • 支持与持续集成系统的集成,无缝衔接到日常研发流程

  • 支持C/C++, Java, C#等多种开发语言,支持Windows和Linux等各种开发平台

  • 完全符合ISO 26262, ASPICE, En 50128, IEC 61508, IEC 60880, IEC 62304, DO-178B/C等标准对工具鉴定和认证要求

RELATED RESOURCES

下载申请

是否需要技术支持

验证码

温馨提示:

我们将通过电子邮件向您发送下载地址,请核对您填写的工作邮箱是否正确。

提 交