gpt4 book ai didi

unit-testing - 具有复合条件和短路的圈复杂度

转载 作者:行者123 更新时间:2023-11-28 19:50:13 26 4
gpt4 key购买 nike

我在大学的软件质量保证类(class)中学习圈复杂度,当谓词语句或节点中有复合条件时,我很难理解它是如何工作的。我见过圈复杂度的多种定义,我在类里面使用的主要定义是

V(G) = # of predicate nodes (with outdegree = 2) + 1

因此对于像这样的程序图,我们的圈复杂度为二:

V(G) = 2

Program graph with cyclomatic complexity of two

我还看到了圈复杂度的定义

V(G) = # edges - # nodes + 2

这也适用于上面给出的图表。但是,我们有谓词节点的复合条件。我们考虑为自动短路设置语言和系统,在我看来,左下方的图表必须扩展为图表。 如果像下面这种情况,圈复杂度是不是变成了3,即使在真正的源代码中,我们可能只有一个if语句还是还是V(G) = 2? .

这很令人困惑,因为我看到的关于圈复杂度的大多数定义都在谈论谓词节点,而且据我所知,谓词可能包含多个短路条件。如果不是这种情况,短路行为似乎在提高性能的同时,在考虑时实际上会增加圈复杂度。 如果给出源代码,是否必须将所有条件分解成各自的节点(如左图)才能计算圈复杂度? Program graph expanded to show short circuiting behavior

最佳答案

在 C(C++、Java、C#)中,“&&”运算符增加了复杂性,因为它被定义为使用短路计算。在这种情况下,圈复杂度为 3。

参见 http://hissa.nist.gov/HHRFdata/Artifacts/ITLdoc/235/chapter4.htm

“ bool 运算符要么增加一个复杂性,要​​么不增加复杂性,这取决于它们是否具有可能导致有条件地执行副作用的短路评估语义。”

图 4-4 有带注释的源代码和相应的流程图,展示了复杂性是如何确定的。

另见 Cyclomatic complexity of IF((A>B) AND (C>D)) and IF((A>B) OR (C>D))

关于unit-testing - 具有复合条件和短路的圈复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15240922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com