当前位置: 首页 > 知识库问答 >
问题:

C#:FxCop sdk方法的循环复杂性

赵智
2023-03-14

我需要计算C#方法的圈复杂度,并需要根据FXcop 12.0中的CC值定义规则。

我发现像Code Metrics这样的工具提供了计算CC值的功能,但我不知道如何在代码中使用它。基本上,我的要求是通过声纳报告的CC值。

如果有人为此编写了自定义规则或任何想法,请帮助

共有2个答案

东郭俊楠
2023-03-14

在我看来,重要的不是确切的绝对复杂性值,而是您的项目与所有项目平均值之间的相对差异。实际上,您可以通过这种方式发现异常复杂的代码。

如果你真的需要FxCop提供与SonarQube完全相同的复杂度值报告,那么我建议你编写一个SonarQube插件,将该值存储为一个度量,并依靠FxCop来计算:不要试图对FxCop的计算方式进行反向工程。

仅供参考,我们有一个长期计划来调整SonarQube,Code Metrics,FxCop等之间的指标计算,并使用相同的公式,但这需要时间。

韩靖琪
2023-03-14

也许你可以使用独立工具。

它与SonarQube集成。

它具有两个内置代码指标:

  • 根据源代码计算的圈复杂度
  • 根据IL代码计算圈复杂度

它集成在Visual Studio中,使编写自定义代码规则变得容易。这样的规则实际上是C#LINQ查询。

例如,如果您想编写一个代码规则来匹配既复杂又不易被测试覆盖的方法,只需编写:

// <Name>Complex methods poorly covered by tests</Name>
warnif count > 0 
from m in Application.Methods
where m.CyclomaticComplexity > 10 && 
      m.PercentageCoverage < 20
select new { 
   m, 
   m.CyclomaticComplexity, 
   m.PercentageCoverage,
   m.NbLinesOfCode 
}

免责声明:我为独立基金工作

 类似资料:
  • 如果我有下面的for循环: 我知道外环将迭代次,而内环将为每th从外环迭代一次。 因此,为了确定时间复杂度,我们有一些类似于 不确定如何继续并得到一个封闭形式的时间复杂度。

  • 我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?

  • 我想知道下面代码的时间复杂度是O(n^3)还是O(n^2)

  • 本文向大家介绍C#中for循环、while循环循环执行的方法,包括了C#中for循环、while循环循环执行的方法的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下C#中的循环执行for循环 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:逻辑表达式,循环控制条件;当条件为真时,循环执行循环体中的语句。

  • 这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?

  • 今天,我和我的同事就一个特定的代码片段发生了一个小争论。代码看起来像这样。至少,这是他想象的那样。 他希望我删除第二个循环,因为这会导致性能问题。 然而,我确信,因为我在这里没有任何嵌套循环,所以无论我放了多少个顺序循环(我们只有2个),复杂度总是O(n)。 他的论点是,如果< code>n是1,000,000,并且循环需要5秒,那么我的代码将需要10秒,因为它有2个for循环。这个说法之后我就糊