哪些静态分析工具可用于C#?
有哪些工具可用于针对Ccode的静态分析?我知道FxCop和StyleCop。还有其他吗?我以前曾经碰过NStatic,但是它一直在开发中,因为它看起来永远都比我所见过的要光滑得多,因此,如果能看到今天的曙光,那就太好了。
沿着这些相同的思路(这主要是我对静态分析的兴趣),用于测试多线程问题(死锁,竞争条件等)的代码的工具似乎也很少。 Typemock Racer刚刚弹出,所以我会看看。除此之外呢?
对于我们使用过的工具的真实看法,我们将不胜感激。
解决方案
回答
- Gendarme是一个基于开源规则的静态分析器(类似于FXCop,但是发现很多不同的问题)。
- Clone Detective是一个很好的Visual Studio插件,可以找到重复的代码。
- 谈到Mono,我发现使用Mono编译器进行编译的行为(如果代码具有足够的平台独立性,无论如何,我们可能都想争取实现一个目标)会发现大量未引用的变量以及Visual Studio完全错过的其他警告。 (即使将警告级别设置为4)。
回答
代码违规检测工具:
- 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#,商业产品
- PRQA QAC#,商业产品
- PVS-Studio,商业产品
- CAT.NET,Visual Studio插件,可帮助识别安全漏洞
- CodeIt.Right
- 规格#
- Pex
质量指标工具:
- NDepend,出色的可视化工具。对于代码度量,规则,差异,耦合和依赖性研究很有用。
- 免费的Nitriq可以轻松编写我们自己的指标/约束和出色的可视化效果。编辑2018年2月:下载链接现已失效。
- RSM Squared,基于代码源分析
- C#指标,使用C#的完整解析
- SourceMonitor,一个偶尔获取更新的旧工具
- Code Metrics,一个Reflector加载项
- 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#代码分析和重构功能
回答
我发现Reflector的代码度量标准和依赖关系结构矩阵加载项非常有用。
回答
NDepend工具被引用为"质量度量工具",但它几乎也是代码违规检测工具。免责声明:我是该工具的开发人员之一
使用NDepend,可以通过LINQ查询(我们称为CQLinq)编写代码规则。默认情况下,建议使用200多个CQLinq代码规则。 CQLinq的优势在于编写代码规则并立即获得结果很简单。建议使用一些工具来浏览匹配的代码元素。例如:
除此之外,NDepend还附带了许多其他静态分析(例如功能)。这些包括:
- 智能技术债务估算
- 依赖图
- 依赖矩阵
- 代码差异功能
- NDepend.API,可让我们编写自己的静态分析工具。使用NDepend.APi,我们甚至开发了一种工具来检测代码重复(此博客文章中的详细信息:查找.NET代码重复的原始算法)。
回答
除了madgnome列出的出色清单之外,我还将添加一个基于命令行的重复代码检测器(但是免费的):
http://sourceforge.net/projects/duplo/
回答
我们看过CAT.NET吗?
从简介-
CAT.NET is a binary code analysis tool that helps identify common variants of certain prevailing vulnerabilities that can give rise to common attack vectors such as Cross-Site Scripting (XSS), SQL Injection and XPath Injection.
我使用了早期的Beta版,它确实发现了一些值得一看的东西。
回答
Axivion Bauhaus Suite是一个静态分析工具,可与C(以及C,C ++和Java)一起使用。
它提供以下功能:
- 软件构架可视化(包括依赖项)
- 执行建筑规则分层,子系统,调用规则
- 克隆检测-突出显示复制和粘贴(以及修改的代码)
- 死码检测
- 循环检测
- 软件指标
- 代码样式检查
这些功能可以一次性运行,也可以作为连续集成过程的一部分运行。当系统与源代码控制系统集成时,可以按项目或者按开发人员突出显示问题。
回答
Klocwork具有用于C#的静态分析工具:http://www.klocwork.com