用于评估可测试性的 C# 代码的分析器
本文关键字:代码 分析器 用于 可测试性 评估 | 更新日期: 2023-09-27 18:33:00
我正在尝试编写一个程序,该程序将允许我为其提供C#代码文件的集合并分析它们的可测试性问题。 我从上一个链接中提供的 4 个开始。
最终目标是创建所有文件的报告、它们可能存在的任何可测试性问题,以及有关可能观察到这些问题的位置的特定代码注释(如果适用(。 我需要帮助的是选择一些工具来简化解析代码的工作;我可以将所有内容作为字符串读取,但在这种情况下,从代码中获取顺序以分析它非常困难。
到目前为止,我已经评估了以下事情:
- FxCop(不适用于任何不是.dll的东西,一些测试项目是在其控制器或演示器中具有可测试逻辑的Web项目(
- 代码契约(不是我需要的;这无助于识别问题(
- 佩克斯(同上(
- NRefactory(可能很有趣,但是文档和使用信息不存在,演示也坏了,即使Windows上安装了gtk/mono(
- CSharpCodeProvider (The .Parse 方法返回一个 NotImplementException(
就我正在寻找的:
我至少想检测基本的对象结构和要导航的访问器对象(例如,File 对象具有带有类集合的命名空间属性,每个类都有成员、构造函数和方法的集合等(。 显然,如果有工具可以变得越来越精细和详细,那将是惊人的,但是只要有这些东西可以让我处理小的,集中的字符串,那将是完全的天赐之物。
提前谢谢。
如果你可以使用预发行版代码,你可能想看看roslyn,即"编译器即服务":
传统上,编译器是黑匣子——源代码在一端,目标文件或程序集在另一端。Roslyn [项目] 通过将 Visual Basic 和 C# 编译器作为 API 开放来更改该模型。这些 API 允许工具和最终用户共享编译器拥有的有关代码的大量信息。
但是请注意,解释您得到的内容(语法树(可能仍然需要做很多工作。
NRefactory 5 为 C# 提供的分析功能与 Roslyn 为 C# 提供大致相同的分析功能,"只是"缺少编译为 IL 的能力。
不确定基于 GTK 的演示是怎么回事;所以我修复了基于 WinForms 的演示并将其添加回解决方案中。
要分析 C# 代码,请使用 new CSharpParser().Parse(sourceCode, "filename.cs")
。这将为您提供文件的完整语法树;即以 NamespaceDeclaration
s 作为子节点的CompilationUnit
根节点。使用演示应用程序查看树的外观。
如果要检测某些代码模式(可测试性问题(,可以使用 NRefactory 的模式匹配功能。(详见doc/Pattern Matching.html
(
我认为对于您的用例,具有模式匹配的 NRefactory 可能比 Roslyn 更好。