【问题标题】:Static code analysis: integrate into debug and release builds, or just one or the other?静态代码分析:集成到调试和发布版本中,还是只是其中之一?
【发布时间】:2010-11-24 16:30:08
【问题描述】:

作为最佳实践,您是在调试版本和发布版本上运行代码分析,还是只在其中一个上运行?

【问题讨论】:

  • 调试和发布版本是什么意思?代码应该是一样的...
  • 在 .Net 中,如果您广泛使用条件输出,您可能会产生略有不同的构建。

标签: code-analysis


【解决方案1】:

我通常会选择一个,那个是发布版本。我想这并不重要,但我倾向于认为,在收集有关将在生产中运行的信息时,最好准确地测试什么将进入生产(这用于分析、分析、基准测试等)。

【讨论】:

  • 那么在您项目的构建配置中,您是否在发布构建中定义了 CODE_ANALYSIS?这是否会显着改变发布版本的输出或影响性能?
【解决方案2】:

无论您的构建类型如何,静态代码分析都会显示相同的结果。

调试/发布仅更改生成的程序集以及在运行时包含或排除调试信息。

【讨论】:

  • 正确。而且我猜您不会关心仅调试代码的分析。有道理。
  • 这并不完全正确,编译器不会优化调试版本,并且可能会发出不在优化版本版本中的 IL。
  • @Andrew - 是的,我猜这取决于工具评估过程中的方式/位置,可能会有一些内联和其他优化,仅用于发布版本。
【解决方案3】:

我没有单独的“调试”和“发布”版本(请参阅 Separate ‘debug’ and ‘release’ builds?)。

【讨论】:

    【解决方案4】:

    如果由于某种原因这两个版本不同(它们确实不应该用于静态分析),您应该确保您的指标与实际用于生产的指标相一致。

    理想情况下,您应该有一个 CI 服务器,并且开发人员运行以启动此类分析的命令与 CI 服务器所做的没有什么不同

    【讨论】:

    • 是的。这个想法是将代码分析集成到 CI 环境中。
    【解决方案5】:

    LLVM 人员实际上建议分析 DEBUG 配置:

    始终在“调试”配置中分析项目

    大多数项目都可以在启用断言的“调试”模式下构建。 断言被静态分析器拾取以修剪不可行的 路径,在某些情况下可以大大减少错误的数量 该工具发出的肯定(虚假错误报告)。

    此外,调试构建往往更快(无需优化),在 CI 世界中,更快总是更好(其他条件相同)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 2014-07-09
      • 1970-01-01
      • 2013-12-13
      相关资源
      最近更新 更多