静态代码分析

什么是静态代码分析?

静态代码分析也称静态分析,作为一种软件验证活动,它不要求执行代码,而是通过分析源代码实现质量、可靠性和安全性目的。使用静态分析,您可以识别可能危害您应用安全的缺陷和安全漏洞。静态分析不产生测试用例编写和代码检测配置的开销,因此可以较为经济地衡量和跟踪软件质量指标。

为什么运行静态代码分析?

大多数软件开发团队依赖动态测试方法,检测软件中的缺陷和运行时错误。动态测试需要工程师编写和执行大量测试用例。由于动态测试不能穷尽所有情形,单靠它还不足以确保软件安全可靠。

以下是一个非常简单的例子:

静态代码分析代码示例

speed 函数在第 14 行有可能除以零,从而造成偶发的运行时错误。若要确保绝对不会除以零,您需要使用变量 input 的所有可能值来测试该函数。

静态代码分析可以弥补动态测试的缺点,具有以下几个优势:

  • 错误检测。您可以识别出数百类缺陷,涉及并发性、污点数据、数据流、安全性以及静态和动态内存。而依靠动态测试方法,有些缺陷几乎无法被检测出来。
  • 成本低。您可以轻松地自动执行静态代码分析,而不会产生任何测试用例编写、代码检测配置或程序执行方面的开销。
  • 编码标准合规。您可以验证自己的代码是否符合 MISRA C®/C++ 或 JSF++ 等编码标准,或者 CWE、CERT C/C++ 和 ISO/IEC 17961 等安全标准,或者网络安全规范。
  • 证明不存在严重的运行时错误。静态代码分析工具能够证明软件不会因为严重的运行时错误而失效。能实现此种程度验证的工具使用形式化方法,将理论计算机科学基础知识应用于代码证明。

谁来运行静态代码分析?为什么?

  • 软件开发人员。根据最佳实践,应在编写代码后立即检查有无缺陷,以及是否符合编码标准。在开发过程中,越早检测到错误,就越容易调试和修复。
  • 软件测试人员。在应用程序代码集成后,建议对集成的代码运行深度静态代码分析,以查找缺陷,并证明不存在严重的运行时错误。
  • 项目经理和质量保证负责人。静态代码分析工具生成代码质量指标,可用来监控软件质量、项目状态、缺陷数量和质量趋势。

如何选择静态代码分析器

包括 Polyspace® 产品在内,有多种工具可支持您执行静态代码分析。在选择静态代码分析工具时,请考虑以下问题:

  • 该工具是否支持您所在行业的标准?
    标准合规有助于最大程度地降低由于软件错误导致经济损失、人身伤害、财产损失或环境破坏的风险。各行各业都定义了各自的安全标准,例如汽车行业标准 ISO 26262、航空航天标准 DO-178 和医疗设备标准 IEC 62304。
  • 分析结果的可靠性和可操作性如何?
    静态代码分析可以使用各种技术,其结果可靠性和准确性不尽相同。例如,人们认为抽象解释是一种可靠的形式化方法,因为它永远不会产生漏报。
  • 该工具是否提供有助于修复错误的深层信息和指导?
    通常情况下,检测缺陷只是第一步。开发人员需要更多信息以深入代码结构并找出错误根源。借助调用层级、变量值、上下文相关帮助和修复建议之类的信息,开发人员可以更好地解决复杂问题。
  • 该工具是否支持协同审查?
    有些静态代码分析工具提供此类功能,支持通过在线平台等方式在软件开发团队内部轻松分享分析结果和质量指标。利用该功能,团队可以执行协同审查、分流和解决缺陷。
  • 该工具能否与现有软件开发流程集成?
    高效的静态代码分析工具必须能够与各种软件开发流程集成,包括较新的持续集成和持续交付 (CI/CD)、开发运营一体化 (DevOps) 以及开发、安全和运营一体化 (DevSecOps)。工具应提供丰富的 API 和插件,以集成到各种软件开发工具,例如 IDE(如 Eclipse™、Microsoft® Visual Studio® Code)、CI 工具(如 Jenkins™、Bamboo®)和缺陷跟踪工具(如 Jira、Redmine)。
  • 该工具是否支持公有云或私有云?
    软件开发正日益转向 Amazon® AWS® 和 Microsoft Azure® 等公有云和私有云基础架构。云为开发团队提供了敏捷性、可扩展性和高可用性,并支持全球访问。在评估静态分析工具时,务必确保工具支持云,即可以在云平台上进行部署并与软件开发流程集成。了解更多

为什么选择 Polyspace 产品?

Polyspace® 静态代码分析产品使用形式化方法,证明在所有可能的控制流和数据流下,均不存在严重的运行时错误。Polyspace 产品系列包括:

  • Polyspace Bug Finder™ 产品,可检查 C/C++ 源代码是否违背编码标准,查找多种类型的缺陷,检测安全漏洞,以及计算质量指标(如代码复杂度指标)。
  • Polyspace Code Prover™ 产品,使用形式化方法,不要求执行代码,即可证明 C/C++ 源代码中不存在严重的运行时错误。
  • 适用于 Ada 的 Polyspace 产品,证明 Ada 源代码中不存在运行时错误。

Polyspace 产品具有前文所述的优势和功能,包括错误检测和编码标准合规,并能证明不存在严重的运行时错误。例如,对于上文示例中的代码片断,Polyspace Code Prover 能够对照所有可能的输入分析 speed 函数的所有代码路径,证明不会发生除以零的情况。而这些操作都无需执行代码。结果显示第 14 行上的除号为绿色,表示此运算对于所有输入都是安全的,不会引发运行时错误。

使用 Polyspace Code Prover 进行除零检查。

使用 Polyspace Code Prover 进行除零检查。

使用 Polyspace Code Prover 进行除零检查。

另请参阅: Static analysis with Polyspace products, verification, validation, and test, 静态代码分析视频, embedded systems, abstract interpretation, code review, cyclomatic complexity, formal methods, software metrics, software QA, software quality objectives, source code analysis, static code analysis, static code analysis videos