繁体   English   中英

静态代码分析的好处

[英]Benefits of static code analysis

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

有各种好处:

  1. 如果您的代码中存在反模式,则可以向您发出警告。
  2. 有一些指标(如McCabe的Cyclomatic Complexity)可以告诉有关源代码的有用信息。
  3. 您还可以从静态分析中获得调用图和类图等优秀内容。 如果你攻击一个新的代码库,这些都很棒。

看看SourceMonitor

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

在任何情况下,只有明智的分析(动态或运行时分析)和静态分析/ linting组合才能确保一致,可靠的代码库。 哦,那个,还有点运气;-)

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

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

  • 理解FxCop遵循的指导方针可以帮助您成为更好的开发人员。

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

底线:

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

  • 对于混合能力团队的日常应用程序开发,可能不太可行。

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

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

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

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

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

的FxCop

FxCop中列出了所有警告 您可以看到以下区域有警告:

设计警告

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

全球化警告

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

互操作性警告

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

命名警告

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

性能警告

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

安全警告

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

根据您的应用程序,某些领域可能不是很有趣,但如果您需要COM互操作性,那么测试可以真正帮助您避免陷阱。

其他工具

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

NStatic用于跟踪冗余参数,评估常量的表达式,无限循环和许多其他指标。

我将尝试描述主要的:

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

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

我发现静态代码分析工具对于大型企业应用程序开发是不可或缺的,许多开发人员和测试人员在应用程序的生命周期中来回走动,但代码质量仍然需要保持高水平并且技术债务管理得当。

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

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

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

有关技术和优势的更详细说明, 请参见此页面: www.mathworks.com/static-analysis

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM