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

Jay*_*Jay 8 language-agnostic cyclomatic-complexity

关于什么是循环复杂性已经存在一个问题

然而,还有另一个称为"必要的循环复杂性"的术语.

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

Tom*_*ter 13

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

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

那告诉我们什么呢?

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

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

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

我在.NET或Java中使用enterpise风格的应用程序的个人限制是:

CC <= 16且ECC <= 6

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

CC <= 10且ECC <= 4