静态代码分析的好处

Posted

技术标签:

【中文标题】静态代码分析的好处【英文标题】:Benefits of static code analysis 【发布时间】:2008-09-19 18:12:55 【问题描述】:

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

【问题讨论】:

【参考方案1】:

有各种各样的好处:

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

看看SourceMonitor

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

了解 FxCop 遵循的指导方针有助于您成为更好的开发人员。

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

底线:

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

FxCop

有一个all warnings in FxCop 的列表。可以看到有以下几个方面的警告:

设计警告

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

全球化警告

支持世界就绪的警告 库和应用程序。

互操作性警告

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

命名警告

支持遵守 .NET 的命名约定 框架设计指南。

性能警告

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

安全警告

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

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

其他工具

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

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

【讨论】:

【参考方案8】:

好处是您可以在您的软件应用程序中自动find and quantify technical debt。

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

【讨论】:

【参考方案9】:

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

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

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

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

【讨论】:

【参考方案10】:

我将尝试描述主要的:

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

【讨论】:

以上是关于静态代码分析的好处的主要内容,如果未能解决你的问题,请参考以下文章

静态分析——自动化代码扫描如何预防缺陷和加速交付?

转载常用 Java 静态代码分析工具的分析与比较

恶意代码分析技术

Xcode静态检查分析代码

2.3 代码静态分析和代码性能分析

20155326《网络对抗》免考项目——深入恶意代码之生成恶意代码的动静态结合分析