11

对源代码进行静态代码分析有什么好处?我正在玩 FxCop,我想知道除了确保您遵循编码标准之外是否还有其他好处。

4

10 回答 10

11

有各种各样的好处:

  1. 如果您的代码中有反模式,您可能会收到警告。
  2. 有某些指标(例如 McCabe 的圈复杂度)可以说明有关源代码的有用信息。
  3. 您还可以从静态分析中获得很棒的东西,例如调用图和类图。如果你正在攻击一个新的代码库,那真是太好了。

看看SourceMonitor

于 2008-09-19T18:18:30.253 回答
5

许多类的内存泄漏和常见的逻辑错误也可以静态捕获。您还可以查看圈复杂度等,这可能是您提到的“编码标准”的一部分,但可能是您用来评估代码的算法“清洁度”的单独指标。

在任何情况下,只有将分析(动态或运行时分析)和静态分析/linting 巧妙地结合起来才能确保代码库的一致、可靠。哦,那,还有一点运气;-)

于 2008-09-19T18:17:55.933 回答
3

这是一个权衡。对于想要提高对框架和指南的理解的个人开发人员,我肯定会鼓励它。FxCop 会产生很多噪音/误报,但我还发现了以下好处:

  • 它检测错误(例如,关于未使用参数的警告可能表明您在方法主体中使用了错误的参数)。

  • 了解 FxCop 所遵循的指南有助于您成为更好的开发人员。

然而,对于一个混合能力的团队,FxCop 很可能会产生太多的误报而无用。初级开发人员将难以理解 FxCop 提出的一些更深奥的违规行为是否应该引起他们的关注,或者仅仅是噪音。

底线:

  • 如果您正在开发可重用的类库,例如内部框架,请确保您有优秀的开发人员并使用 FxCop。

  • 对于具有混合能力团队的日常应用程序开发,这可能是不切实际的。

于 2008-09-19T18:19:26.397 回答
1

实际上,fxcop 并不能特别帮助您遵循编码标准。它确实可以帮助您设计一个经过深思熟虑的框架/API。FxCop 确实会捕获部分编码标准(例如公共成员的外壳),但编码标准不是重点。

可以使用stylecop检查编码标准,它检查源代码而不是像 fxcop 那样检查 MSIL。

于 2008-09-19T18:16:12.037 回答
1

它可以捕获实际的错误,例如忘记 Dispose IDisposables。

于 2008-09-19T18:17:22.610 回答
1

取决于规则,但可以避免许多细微的缺陷,可以清理代码,可以检测潜在的性能问题等。

换一种方式...如果它便宜或免费(在时间和财务成本方面)并且不会破坏任何东西,为什么不使用它呢?

于 2008-09-19T18:18:13.030 回答
1

FxCop

FxCop中有一个所有警告的列表。您可以看到来自以下区域的警告:

设计警告

支持 .NET Framework 设计指南指定的正确库设计的警告。

全球化警告

支持全球通用库和应用程序的警告。

互操作性警告

支持与 COM 客户端交互的警告。

命名警告

支持遵守 .NET Framework 设计指南的命名约定的警告。

性能警告

支持高性能库和应用程序的警告。

安全警告

支持更安全的库和应用程序的警告。

根据您的应用程序,其中一些领域可能不是很有趣,但如果您需要 COM 互操作性,这些测试确实可以帮助您避免这些陷阱。

其他工具

其他静态检查工具可以帮助您检测错误,例如未处理 IDisposable、内存泄漏和其他细微错误。对于极端情况,请参阅尚未发布的NStatic工具。

NStatic 用于跟踪诸如冗余参数、评估为常量的表达式、无限循环和许多其他指标之类的东西。

于 2008-09-19T18:30:16.743 回答
1

好处是您可以自动查找和量化软件应用程序中的技术债务。

我发现静态代码分析工具在大型企业应用程序开发中必不可少,许多开发人员和测试人员在应用程序的生命周期中来来往往,但仍然需要保持较高的代码质量并妥善管理技术债务。

于 2011-05-06T06:54:39.207 回答
1

对源代码进行静态代码分析有什么好处?

好处取决于所执行的静态代码分析的类型。静态代码分析的范围可以从简单到复杂的技术。例如,生成有关源代码的指标以识别容易出错的代码是一种技术。其他技术积极尝试在您的代码中查找错误。复杂的技术使用正式的方法来证明您的代码没有错误。

因此,好处取决于所使用的静态代码分析的类型。如果该技术产生度量(例如代码复杂性等),那么好处是可以在代码审查期间使用这些度量来识别容易出错的代码。如果该技术检测到错误,那么好处是开发人员可以在单元测试之前识别错误。如果使用基于形式方法的技术来证明代码不包含错误,那么好处是可以使用此信息向 QA 部门(或认证机构)证明代码没有某些类型的错误。

更详细的技术和好处描述也可以在这个页面上找到:www.mathworks.com/static-analysis

于 2011-09-26T12:36:53.437 回答
1

我将尝试描述主要的:

  • 静态代码分析在早期阶段识别程序中的检测,从而降低修复它们的成本。
  • 它可以检测程序输入和输出中无法通过动态测试看到的缺陷。
  • 它会自动扫描未编译的代码并识别漏洞。
  • 我从与 checkmarx 打交道中了解到,静态代码分析可以一次性修复多个漏洞,这为开发人员节省了大量时间。
于 2017-06-30T18:05:19.420 回答