什么是静态代码分析?
静态分析有很多选项,这是一个热门话题,因此:
什么是静态分析?
我们什么时候应该使用它,什么时候不应该使用它?
关于正确和不正确使用/应用静态分析的潜在陷阱是什么?
任何没有好的静态分析工具的语言,当我们没有自动分析的选项时该怎么办?
-亚当
解决方案
回答
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。