我在大學的軟件質量保證課程中學習了Cyclomatic複雜性,我很難理解在謂詞語句或節點中有複合條件時它是如何工作的。我所看到的圈複雜度,主這在我的課堂上使用我的多個定義是使用複合條件和短路循環複雜性
V(G) = # of predicate nodes (with outdegree = 2) + 1
所以對於一個方案圖,如這一點,我們將有兩個圈複雜度:
V(G) = 2
我還見過給出
V(G) = # edges - # nodes + 2
0123圈複雜度的定義
這也適用於上面給出的圖。但是,我們有謂詞節點的複合條件。我們考慮爲自動短路設置一種語言和系統,在我看來,左下方的圖必須擴展到圖中。 如果是這種情況,如下所示,即使在真實的源代碼中,我們可能只有一個if語句,或者它仍然是V(G)= 2嗎?。
這很令人困惑,因爲我看到的Cyclomatic複雜性的大多數定義都在討論謂詞節點,並且據我瞭解謂詞,它們可能包含多個短路條件。如果不是這樣,似乎短路行爲在提高性能的同時,在考慮時實際上會提高環複雜性。 如果給出了源代碼,那麼在計算圈複雜度之前,是否必須將所有條件分解爲它們自己的節點,例如左邊的圖形?