什么是代码静态分析?
代码静态分析是指在不运行应用程序的情况下,对软件的源代码的语义、结构和行为进行分析,由此找出程序中的不规范、不合理的或者可能造成程序运行异常的代码。最为人所熟知的代码静态分析手段就是“人工代码走查”,随着人工代码审查的日益复杂化和工作量的增加,自动化的代码静态分析技术随之得以迅速发展。时至今日,绝大部分的代码静态分析都已经可以由专业的代码静态分析工具所完成。
那么代码静态分析到底可以为我们的软件解决什么问题呢?
• 编码规范检查。最常用的代码静态分析手段。基于公司自定义的统一编码规范,或者是特定行业通用的编码规范,检查软件代码中不合规的写法,以保证代码的统一风格,尽早预防可能造成软件质量风险的各种不合理代码的出现。编码规则可以规范编码格式、命名规范、内存和资源管理、宏定义、危险代码等软件代码编写的各个方面。
• 软件质量缺陷检测。更高级和深度的代码静态分析技术。检测软件代码中隐藏的会导致运行时异常或安全性的代码缺陷,如空指针、越界、除零、死锁、安全漏洞等,实现快速查找并及时修复软件错误。对比于编码规范检查,软件质量缺陷检测要求对代码进行更深度的解析和扫描,以定位真正的代码缺陷,除了找出问题点,往往还需要定位相关的代码逻辑路径。有别于编码规范违规代码,软件缺陷检查出的结果不只是可能造成代码质量风险,而是它们本身就是质量问题,所以对于研发团队来说,软件缺陷检查的结果可能在实施代码静态检查工作之初会有更直接、立竿见影的效果。
• 代码度量分析。针对软件代码的各项度量指标的代码静态分析。如复杂度、嵌套深度、分支结构等多种常见度量维度,以便准确了解和优化代码结构。代码度量检查的思路与“二八原则”不谋而合,因为少数的最复杂的代码中隐藏或导致了大部分的bug, 代码度量正式为了规避或优化这些复杂代码,而从整体结构上提高软件的代码质量和可维护性。
• 人工代码评审。对代码的算法、逻辑的实现合理与否的检查,这部分由于其与业务需求的密切相关,目前更多还是通过人工代码走读来完成,这也是代码静态分析中最需要人工智慧的部分。
为什么要做代码静态分析
简言之,代码静态分析的目的就是为了更早、更彻底地检测或预防代码错误,减少后期测试的bug, 最终降低项目成本并提高软件可靠性。
正如下面广为流传的Capers Jones对软件开发过程各个阶段缺陷引入数量、错误所查找的数量和错误修复成本的分布图所示,以往传统的瀑布式开发流程,大部分的软件缺陷都是在编码阶段被引入,而多数是在后期功能测试和系统测试阶段才被发现,而越到项目后期修复每个所发现的缺陷的成本越高,导致整体项目的高成本,和测试周期的不可预测性。
代码静态分析要做的恰恰就是在软件缺陷被引入最多的、修复最容易的阶段 -- 也就是编码之初,利用无论是人工还是自动化工具的方式发现并修复这些代码错误。代码静态分析可以对软件质量的诸多方面带来好处,包括代码的可靠性、可读性、可维护性和可移植性。
对于像国防军工、航空航天、汽车电子、轨道交通、工业自动化和医疗器械等高安全和高可靠性行业来说,代码静态分析已经成为这些软件研发流程中的强制要求环节,其出发点也是基于以上目的。
难点和挑战
到底应该引入哪些编码代码规则难以抉择,太多、太少都有问题。
软件缺陷检测的误报率太高,是否存在漏报?
编码规则重要还是缺陷检测重要,如何取舍?
如何保证代码静态分析的结果能被及时修复?
历史遗留代码中的海量检测结果如何处理?
如何最大程度实现代码静态分析的自动化?
开源工具和商业工具有什么区别?
解决方案
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等标准对工具鉴定和认证要求
相关资源
白皮书
博客
新闻资讯
修复和预防Bug的成本量化对比_白皮书
点击下载
通过静态分析和持续集成保证代码的质量_白皮书
点击下载
实施代码静态分析的投资回报率_白皮书
点击下载
如何开发高质量的软件_白皮书
点击下载
《MISRA-C合规检验工具对比研究》摘要_白皮书
点击下载
选择Fortify静态代码分析工具作为您的下一个SAST工具是正确的吗?
查看更多
什么是Barr-C?
查看更多
医疗器械安全最佳实践
查看更多
车载信息娱乐系统的网络安全考虑
查看更多
开发人员使用Klocwork实现软件安全的5大原因
查看更多
开发人员使用Helix QAC满足合规性的5大原因
查看更多
什么是完全的静态分析?
查看更多
什么是遗留代码:有效地处理遗留代码的8个小贴士
查看更多
如何使用MISRA改进嵌入式编程
查看更多
静态代码分析是如何工作的
查看更多
为什么Eclipse Iceoryx使用Helix QAC
查看更多
什么是JSF AV C++编码规范?
查看更多
GitLab SAST:如何将Klocwork与GitLab一起使用
查看更多
什么是圈复杂度?
查看更多
MISRA和AUTOSAR将统一C++编码规范——这意味着什么
查看更多
什么是误报?如何识别误报和漏报
查看更多
如何在Perforce静态代码分析工具中生成合规报告
查看更多
什么是CVE?常见漏洞和暴露列表概述
查看更多
安全编码实践:什么是安全编码标准?
查看更多
Docker容器使用指南:如何将Klocwork作为一个容器创建和运行
查看更多
如何将Klocwork与Incredibuild一起使用来提高DevOps生产效率
查看更多
安全最佳实践+Klocwork
查看更多
Log4Shell是什么?从Log4j漏洞说起
查看更多
使用Helix QAC对OpenHarmony代码做静态分析
查看更多
Helix QAC所提供的四种抑制方式
查看更多
AUTOSAR C++14编码规范的前世今生
查看更多
原PRQA产品线更名为Helix QAC
查看更多
RELATED RESOURCES
下载申请