Cyclomatic Complexity和Essential Cyclomatic Complexity有什么区别?

时间:2012-11-09 10:49:27

标签: language-agnostic cyclomatic-complexity

关于What is Cyclomatic Complexity?

的问题已经存在

然而,还有另一个名称 - Essential Cyclomatic Complexity。

这两个代码指标之间有什么区别和相似之处?他们的典型接受价值是什么? 此外,我了解到,对于理解代码,Essential Cyclomatic Complexity是一个更相关的指标。而从实现的观点来看,Cyclomatic Complexity是最相关的。 如果是这样,为什么?

1 个答案:

答案 0 :(得分:11)

您知道的Cyclometric Complexity可以有效地测量通过方法或函数的可能独立路径的数量。这告诉我们测试方法的复杂程度。

然而,基本的周期性复杂性表明,一旦我们消除了结构良好的复杂性,会留下多少复杂性。结构良好的复杂性的一个例子是for循环,其中循环的条件在循环的开始处陈述。但是,如果我们使用break语句突破循环,例如在路径中间的某处,我们就会破坏结构化组件。类似的情况是我们在一个函数中有许多return语句。

那么这告诉我们什么?

想象一下,我们有一个高CC的功能:一个难以测试的功能。现在,如果此功能具有较低的基本CC,则意味着将此功能分解为更容易单独测试的其他较小功能相当容易。当基本复杂性很高时,这种重构更加困难,因为复杂性更难以理解。

因此,具有高基本复杂性的代码意味着他的代码难以维护和理解。我们可以说这个代码质量较差。具有高复杂度的代码更难以测试,但一般来说,当基本复杂度较低时,我们可以更容易地做到这一点。

使用哪些值总是用于参数,并且在某种程度上取决于应用程序的类型和使用的语言。例如,在函数内部抛出异常会使该函数失效。显然,如果使用得当,例外情况被认为是一种很好的做法。类似地验证函数顶部的参数并立即返回是一种常见的做法(在我看来)可以产生更清晰的代码。同样,这是一个非结构化的结构。因此,我们可以想象我们可以接受基本复杂性的基本水平。

我对.NET或Java中的企业级应用程序的个人限制是:

CC <= 16且ECC <= 6

对于更复杂的“复杂”应用程序,用C / C ++表示我会提出更严格的限制:

CC <= 10且ECC <= 4