我得到一个包含任意数量代码的字符串。我想计算一个代表该字符串的代码复杂度的数字。就像是:
int complexity = Lib.FindComplexity(someString);
我意识到有很多工具可以为你做到这一点。 这些工具对我不起作用,因为我想以编程方式进行。 我希望该库位于 C# 中,但此时可以使用任何东西。
提前致谢!
我得到一个包含任意数量代码的字符串。我想计算一个代表该字符串的代码复杂度的数字。就像是:
int complexity = Lib.FindComplexity(someString);
我意识到有很多工具可以为你做到这一点。 这些工具对我不起作用,因为我想以编程方式进行。 我希望该库位于 C# 中,但此时可以使用任何东西。
提前致谢!
您还可以使用反射器和可用的代码指标插件。
您是否考虑过使用其中一种现有工具并将其包装在库中?例如,您可以使用 NDepend.Console.exe,方法是使用所需参数从代码中调用它,然后解析结果。
NDepend 是一个很棒的工具,虽然在我看到它的时候并不便宜。如果钱不是一种选择,我会考虑使用反射和http://en.wikipedia.org/wiki/Cyclomatic_complexity。它不满足您对任何字符串的要求,但您绝对可以测试您创建的程序集。
像这样的库必须能够解析任意语言片段,然后计算解析片段的复杂度度量。大多数度量工具充其量只有一个针对整个语言的解析器,而不仅仅是一个片段,因此您可能很难找到许多解决方案。
有一个系统可以满足您的需求:我们的 DMS 软件再造工具包。它为许多语言(例如 Java 和 C#;不清楚您要分析的语言)提供解析器。DMS 已被用于为多种语言(Java、C#、JavaScript、COBOL)实现这些类型的指标,并且执行此操作的过程非常简单。而且DMS 确实解析了语言片段,令人惊讶的是,指标实现实际上是在这些片段上运行的。您可以自定义 DMS 以实现您想要的。请参阅http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html 和衍生度量工具, http://www.semdesigns.com/Products/Metrics/index.html