哪些静态分析工具可用于C#?[关闭]


174

有哪些工具可用于针对C#代码进行静态分析?我知道FxCop和StyleCop。还有其他吗?我之前曾经碰过NStatic,但是它一直在开发中,似乎永远存在-从我所看到的内容来看,它看起来非常漂亮,因此,如果能看到今天的曙光,那就太好了。

沿着这些思路(主要是我对静态分析的兴趣),用于测试多线程问题(死锁,竞争条件等)的代码的工具似乎也很少。Typemock Racer刚刚弹出,所以我会看看。除此之外呢?

对于您使用过的工具的真实看法,我们将不胜感激。


@IraBaxter我已经开始在Meta上讨论此问题,并请您提出自己的观点,为什么要删除该问题。

Answers:


341

代码违规检测工具:

  • Fxcop,Microsoft的优秀工具。检查是否符合.net框架准则。

    编辑2010年10月:不再作为独立下载提供。现在它已包含在Windows SDK中,安装后可以在Program Files \ Microsoft SDKs \ Windows \ [v7.1] \ Bin \ FXCop \ FxCopSetup.exe中找到

    编辑2018年2月:此功能现已集成到Visual Studio 2012中,并在以后作为代码分析集成

  • Clocksharp,基于代码源分析(到C#2.0)
  • Mono.Gendarme,类似于Fxcop,但具有开源许可证(基于Mono.Cecil
  • Smokey,类似于基于Mono.Cecil的 Fxcop和Gendarme 。不再进行开发,主要开发人员现在与Gendarme团队合作。
  • 用于C#的Coverity Prevent™,商业产品
  • PRQA QA·C#,商品
  • PVS-Studio,商业产品
  • CAT.NET,Visual Studio插件,可帮助识别安全漏洞编辑2019年11月:链接已死。
  • CodeIt.Right
  • 规格#
  • Pex

质量指标工具:

  • NDepend,出色的可视工具。对于代码量度,规则,差异,耦合和依赖性研究很有用。
  • 免费的Nitriq可以轻松编写您自己的指标/约束和出色的可视化效果。编辑2018年2月:下载链接现已失效。编辑2019年6月17日:链接没有失效。
  • 基于代码源分析的RSM Squared
  • C#指标,使用完整的C#解析
  • SourceMonitor,一个偶尔获取更新的旧工具
  • 代码度量,一个反射器加载项
  • Vil,不支持.NET 2.0的旧工具。编辑2018年1月:链接现在不可用

检查样式工具:

  • Microsoft工具StyleCop(从Visual Studio内部运行或集成到MSBuild项目中)。也可用作Visual Studio 2015和C#6.0 的扩展
  • Smith Smith代理ReSharper的代码样式验证插件

复制检测:

  • Simian,基于源代码。支持多种语言。
  • CloneDR,仅在语言边界上检测参数化克隆(也可处理C#以外的许多语言)
  • 克隆侦探 Visual Studio插件。(它内部使用ConQAT
  • Atomiq,基于源代码,多种语言和出色的 “车轮”可视化

通用重构工具

  • ReSharper-非常酷的C#代码分析和重构功能

4
请参阅有关FxCop的MSDN页面: msdn.microsoft.com/zh-cn/library/bb429476%28VS.80%29.aspx “ FxCop是分析托管代码程序集(针对.NET Framework公共语言运行时的代码)的应用程序并报告有关程序集的信息,例如可能的设计,本地化,性能和安全性改进。”
Sarah Vessels,2009年

FxCop链接已从Microsoft网站删除。这里是FxCop的10.0 “下载”:microsoft.com/downloads/...
ulrichb

这是Simian:harukizaemon.com/simian/index.html吗?(您的链接断开了)。似乎也只有.NET 1.1。
Theraot

@Theraot谢谢,我更改了网址。关于.NET版本,Simian可以在Java 5的.NET 1.1上运行,但这并不意味着它可以在其他版本的.NET中检测到重复
Julien Hoarau 2012年

Nitriq似乎不再可用。下载链接(现在重定向到Telerik的一部分NimblePros)说:“很抱歉,我们不再提供Nitriq”
Narayana

7

NDepend工具被称为“ 质量度量工具”,但它几乎也是代码违规检测工具。免责声明:我是该工具的开发人员之一

使用NDepend,可以通过LINQ查询(我们称为CQLinq)编写代码规则。超过200条CQLinq编码规则是默认设置的。CQLinq的优势在于,编写代码规则非常容易,并且可以立即获得结果。建议使用一些工具来浏览匹配的代码元素。例如:

CQLinq代码规则

除此之外,NDepend还附带了许多其他静态分析(如功能)。这些包括:


在过去的几周中,我有机会对NDepend进行了试用-忠实的支持者,我会在可能的时候获得开发许可证。:)感谢您的工作!
Michael Armes

1
  • Gendarme是一个基于开源规则的静态分析器(类似于FXCop,但是发现很多不同的问题)。
  • Clone Detective是一个很好的Visual Studio插件,可以找到重复的代码。
  • 谈到Mono,我发现使用Mono编译器进行编译的行为(如果您的代码具有足够的平台无关性,无论如何,您可能都希望达到一个目标)会发现大量未引用的变量以及Visual Studio完全错过的其他警告。 (即使将警告级别设置为4)。

1

您看过CAT.NET吗?

从简介-

CAT.NET是一个二进制代码分析工具,可帮助识别某些常见漏洞的常见变体,这些常见漏洞可引起常见的攻击媒介,例如跨站点脚本(XSS),SQL注入和XPath注入。

我使用了早期的Beta版,它确实发现了一些值得一看的东西。






-1

Axivion Bauhaus Suite是一个静态分析工具,可与C#(以及C,C ++和Java)一起使用。

它提供以下功能:

  • 软件构架可视化(包括依赖项)
  • 实施架构规则,例如分层,子系统,调用规则
  • 克隆检测-突出显示复制和粘贴(以及修改的代码)
  • 死码检测
  • 循环检测
  • 软件指标
  • 代码样式检查

这些功能可以一次性运行,也可以作为持续集成过程的一部分运行。当系统与源代码控制系统集成时,可以按项目或按开发人员突出显示问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.