什么是静态代码分析?

时间:2020-03-05 18:49:21  来源:igfitidea点击:

静态分析有很多选项,这是一个热门话题,因此:

什么是静态分析?

我们什么时候应该使用它,什么时候不应该使用它?

关于正确和不正确使用/应用静态分析的潜在陷阱是什么?

任何没有好的静态分析工具的语言,当我们没有自动分析的选项时该怎么办?

-亚当

解决方案

回答

What is static analysis?

分析代码而不执行它。通常用于查找错误或者确保符合编码准则。典型的示例是一个编译器,该编译器会发现词法,句法甚至某些语义错误。

When should you use it, and when shouldn't it be used?

当静态分析工具有助于保持代码质量时,应使用它们。如果使用它们,则应将它们集成到构建过程中,否则将被忽略。

What are potential gotchas regarding proper and improper usage/application of static analysis?

使用静态分析工具时,会出现两种常见的病理情况:

  • 该工具会产生虚假的警告/错误,开发人员无法使其静音。最终,大多数警告是虚假的,开发人员停止关注输出。这就是为什么许多团队要求代码可以干净地编译的原因。如果开发人员对忽略编译器警告感到满意,则编译阶段最终将充满没有人关注的警告,即使它们可能是错误。
  • 这些工具需要花费很长时间才能运行,并且开发人员永远也不必费心运行它们。
Any languages that don't have a good static analysis tool, and what do you do when you don't have an option for automated analysis?

由于多种原因,许多动态语言(ruby,python,perl)没有静态分析工具,其功能不如静态语言可用。查找错误并确保代码以动态语言运行的标准方法是单元测试,这有助于建立对代码实际起作用的信心(提示:Chris Conway)。

回答

静态分析正在寻找潜在问题的源代码。之所以称为静态,是因为没有执行代码来发现问题,而是对源进行了分析性分析。

目前,静态分析还很不成熟。大多数工具只会发现最愚蠢的错误。例如,据我所知没有工具可以找到所有空指针取消引用,但这是我们希望针对静态分析的一个明显的错误。我们至少可以暂时忘记尝试通过静态分析来查找更难的错误,例如竞争条件。

静态分析对于执行编码标准特别有用。 FXCop分析.NET代码,其中包含各种编码标准缺陷的规则。

如我们所说,有许多工具可以进行静态分析。这是我个人使用的免费产品列表:

  • FindBugs(Java)
  • FXCop(.NET)
  • PyLint(Python)

我可以推荐所有这些。

回答

除了查找代码中的错误(例如,保证空指针取消引用,无限循环等)之外,静态分析还可用于代码的安全性分析。我强烈建议观看Fortify软件的Brian Chess的"使用静态分析进行安全编程"演示。

回答

有关静态分析的其他问题(每个问题都有工具建议):

  • 分析多线程程序
  • 选择静态代码分析工具
  • 我们使用什么工具进行静态代码分析?

回答

如果我们正在寻找企业级工具,请访问http://www.ouncelabs.com。