我在大学的软件质量保证课程中学习了Cyclomatic复杂性,我很难理解在谓词语句或节点中有复合条件时它是如何工作的。我所看到的圈复杂度,主这在我的课堂上使用我的多个定义是使用复合条件和短路循环复杂性
V(G) = # of predicate nodes (with outdegree = 2) + 1
所以对于一个方案图,如这一点,我们将有两个圈复杂度:
V(G) = 2
我还见过给出
V(G) = # edges - # nodes + 2
0123圈复杂度的定义
这也适用于上面给出的图。但是,我们有谓词节点的复合条件。我们考虑为自动短路设置一种语言和系统,在我看来,左下方的图必须扩展到图中。 如果是这种情况,如下所示,即使在真实的源代码中,我们可能只有一个if语句,或者它仍然是V(G)= 2吗?。
这很令人困惑,因为我看到的Cyclomatic复杂性的大多数定义都在讨论谓词节点,并且据我了解谓词,它们可能包含多个短路条件。如果不是这样,似乎短路行为在提高性能的同时,在考虑时实际上会提高环复杂性。 如果给出了源代码,那么在计算圈复杂度之前,是否必须将所有条件分解为它们自己的节点,例如左边的图形?